From ee73e88073a295828259f6b54ac6221ab2c169e2 Mon Sep 17 00:00:00 2001 From: karllessard Date: Tue, 8 Oct 2019 22:25:27 -0400 Subject: [PATCH 1/8] Add support for Tensor NIO --- pom.xml | 33 +- tensorflow-core/tensorflow-core-api/pom.xml | 35 +- .../bazel/api_def/api_def_KafkaDataset.pbtxt | 6 + .../src/bazel/op_generator/java_defs.h | 17 +- .../src/bazel/op_generator/op_generator.cc | 18 +- .../src/bazel/op_generator/op_specs.cc | 6 +- .../org/tensorflow/op/AudioOps.java | 61 +- .../org/tensorflow/op/BitwiseOps.java | 55 +- .../org/tensorflow/op/DataOps.java | 125 +- .../org/tensorflow/op/DtypesOps.java | 31 +- .../org/tensorflow/op/ImageOps.java | 502 +- .../annotations/org/tensorflow/op/IoOps.java | 608 +- .../org/tensorflow/op/LinalgOps.java | 360 +- .../org/tensorflow/op/MathOps.java | 1116 ++-- .../annotations/org/tensorflow/op/NnOps.java | 1375 ++--- .../annotations/org/tensorflow/op/Ops.java | 4927 ++++++++--------- .../org/tensorflow/op/QuantizationOps.java | 202 +- .../org/tensorflow/op/RandomOps.java | 343 +- .../org/tensorflow/op/SignalOps.java | 114 +- .../org/tensorflow/op/SparseOps.java | 842 +-- .../org/tensorflow/op/StringsOps.java | 184 +- .../org/tensorflow/op/SummaryOps.java | 87 +- .../org/tensorflow/op/TrainOps.java | 980 ++-- ...mpute_func_Pointer_TF_OpKernelContext.java | 6 +- .../Create_func_TF_OpKernelConstruction.java | 6 +- .../Deallocator_Pointer_long_Pointer.java | 6 +- .../c_api/Delete_func_Pointer.java | 6 +- .../c_api/Listener_BytePointer.java | 6 +- .../{ => internal}/c_api/Listener_String.java | 6 +- ...nc_TF_ShapeInferenceContext_TF_Status.java | 6 +- .../{ => internal}/c_api/TFE_Context.java | 6 +- .../c_api/TFE_ContextOptions.java | 6 +- .../{ => internal}/c_api/TFE_Op.java | 6 +- .../c_api/TFE_TensorDebugInfo.java | 6 +- .../c_api/TFE_TensorHandle.java | 6 +- .../{ => internal}/c_api/TF_ApiDefMap.java | 6 +- .../{ => internal}/c_api/TF_AttrMetadata.java | 6 +- .../{ => internal}/c_api/TF_Buffer.java | 8 +- .../c_api/TF_DeprecatedSession.java | 6 +- .../{ => internal}/c_api/TF_DeviceList.java | 6 +- .../c_api/TF_DimensionHandle.java | 6 +- .../{ => internal}/c_api/TF_Function.java | 6 +- .../c_api/TF_FunctionOptions.java | 6 +- .../{ => internal}/c_api/TF_Graph.java | 8 +- .../c_api/TF_ImportGraphDefOptions.java | 8 +- .../c_api/TF_ImportGraphDefResults.java | 6 +- .../{ => internal}/c_api/TF_Input.java | 6 +- .../c_api/TF_KernelBuilder.java | 6 +- .../{ => internal}/c_api/TF_Library.java | 6 +- .../c_api/TF_OpDefinitionBuilder.java | 6 +- .../c_api/TF_OpKernelConstruction.java | 6 +- .../c_api/TF_OpKernelContext.java | 6 +- .../{ => internal}/c_api/TF_Operation.java | 6 +- .../c_api/TF_OperationDescription.java | 6 +- .../{ => internal}/c_api/TF_Output.java | 6 +- .../{ => internal}/c_api/TF_Server.java | 6 +- .../{ => internal}/c_api/TF_Session.java | 8 +- .../c_api/TF_SessionOptions.java | 8 +- .../{ => internal}/c_api/TF_ShapeHandle.java | 6 +- .../c_api/TF_ShapeInferenceContext.java | 6 +- .../{ => internal}/c_api/TF_Status.java | 8 +- .../{ => internal}/c_api/TF_Tensor.java | 8 +- .../{ => internal}/c_api/TF_WhileParams.java | 6 +- .../{ => internal}/c_api/Tensor.java | 6 +- .../c_api/global/tensorflow.java | 6 +- .../tensorflow/op/audio/AudioSpectrogram.java | 11 +- .../org/tensorflow/op/audio/DecodeWav.java | 13 +- .../org/tensorflow/op/audio/EncodeWav.java | 13 +- .../java/org/tensorflow/op/audio/Mfcc.java | 12 +- .../org/tensorflow/op/bitwise/BitwiseAnd.java | 5 +- .../org/tensorflow/op/bitwise/BitwiseOr.java | 5 +- .../org/tensorflow/op/bitwise/BitwiseXor.java | 5 +- .../org/tensorflow/op/bitwise/Invert.java | 5 +- .../org/tensorflow/op/bitwise/LeftShift.java | 5 +- .../org/tensorflow/op/bitwise/RightShift.java | 5 +- .../tensorflow/op/collective/AllReduce.java | 5 +- .../op/collective/BroadcastRecv.java | 9 +- .../op/collective/BroadcastSend.java | 7 +- .../gen/java/org/tensorflow/op/core/All.java | 12 +- .../java/org/tensorflow/op/core/AllToAll.java | 3 +- .../op/core/AnonymousIteratorV2.java | 6 +- .../op/core/AnonymousMultiDeviceIterator.java | 6 +- .../op/core/AnonymousRandomSeedGenerator.java | 3 +- .../gen/java/org/tensorflow/op/core/Any.java | 12 +- .../tensorflow/op/core/AssertNextDataset.java | 7 +- .../org/tensorflow/op/core/AssertThat.java | 3 +- .../tensorflow/op/core/AutoShardDataset.java | 7 +- .../java/org/tensorflow/op/core/Barrier.java | 15 +- .../org/tensorflow/op/core/BarrierClose.java | 3 +- .../op/core/BarrierIncompleteSize.java | 12 +- .../tensorflow/op/core/BarrierInsertMany.java | 3 +- .../tensorflow/op/core/BarrierReadySize.java | 12 +- .../tensorflow/op/core/BarrierTakeMany.java | 15 +- .../java/org/tensorflow/op/core/Batch.java | 9 +- .../org/tensorflow/op/core/BatchToSpace.java | 3 +- .../tensorflow/op/core/BatchToSpaceNd.java | 3 +- .../java/org/tensorflow/op/core/Bitcast.java | 4 +- .../org/tensorflow/op/core/BlockLSTM.java | 6 +- .../org/tensorflow/op/core/BlockLSTMGrad.java | 6 +- .../op/core/BoostedTreesAggregateStats.java | 12 +- .../op/core/BoostedTreesBucketize.java | 14 +- ...BoostedTreesCalculateBestFeatureSplit.java | 33 +- ...stedTreesCalculateBestGainsPerFeature.java | 34 +- .../op/core/BoostedTreesCenterBias.java | 12 +- .../op/core/BoostedTreesCreateEnsemble.java | 4 +- ...stedTreesCreateQuantileStreamResource.java | 4 +- .../core/BoostedTreesDeserializeEnsemble.java | 4 +- .../core/BoostedTreesExampleDebugOutputs.java | 12 +- .../BoostedTreesFlushQuantileSummaries.java | 11 +- .../core/BoostedTreesGetEnsembleStates.java | 22 +- .../BoostedTreesMakeQuantileSummaries.java | 13 +- .../op/core/BoostedTreesMakeStatsSummary.java | 12 +- .../op/core/BoostedTreesPredict.java | 12 +- ...eesQuantileStreamResourceAddSummaries.java | 3 +- ...reesQuantileStreamResourceDeserialize.java | 3 +- ...ostedTreesQuantileStreamResourceFlush.java | 3 +- ...tileStreamResourceGetBucketBoundaries.java | 11 +- .../core/BoostedTreesSerializeEnsemble.java | 10 +- .../BoostedTreesSparseAggregateStats.java | 16 +- ...dTreesSparseCalculateBestFeatureSplit.java | 33 +- .../op/core/BoostedTreesTrainingPredict.java | 16 +- .../op/core/BoostedTreesUpdateEnsemble.java | 4 +- .../op/core/BroadcastDynamicShape.java | 5 +- .../op/core/BroadcastGradientArgs.java | 5 +- .../org/tensorflow/op/core/BroadcastTo.java | 3 +- .../org/tensorflow/op/core/Bucketize.java | 12 +- .../org/tensorflow/op/core/CSVDataset.java | 7 +- .../tensorflow/op/core/CacheDatasetV2.java | 7 +- .../op/core/ChooseFastestDataset.java | 6 +- .../tensorflow/op/core/CollectiveGather.java | 7 +- .../tensorflow/op/core/CollectivePermute.java | 3 +- .../op/core/CombinedNonMaxSuppression.java | 20 +- .../java/org/tensorflow/op/core/Concat.java | 3 +- .../op/core/ConfigureDistributedTPU.java | 9 +- .../org/tensorflow/op/core/CountUpTo.java | 5 +- .../tensorflow/op/core/CrossReplicaSum.java | 6 +- .../op/core/CudnnRNNBackpropV3.java | 6 +- .../op/core/CudnnRNNCanonicalToParamsV2.java | 6 +- .../op/core/CudnnRNNParamsToCanonicalV2.java | 6 +- .../org/tensorflow/op/core/CudnnRNNV3.java | 6 +- .../op/core/CumulativeLogsumexp.java | 5 +- .../op/core/DatasetCardinality.java | 9 +- .../tensorflow/op/core/DatasetFromGraph.java | 3 +- .../tensorflow/op/core/DecodePaddedRaw.java | 9 +- .../org/tensorflow/op/core/DecodeProto.java | 10 +- .../op/core/DeleteSessionTensor.java | 3 +- .../op/core/DirectedInterleaveDataset.java | 6 +- .../op/core/DrawBoundingBoxesV2.java | 6 +- .../tensorflow/op/core/DynamicPartition.java | 3 +- .../org/tensorflow/op/core/DynamicStitch.java | 3 +- .../org/tensorflow/op/core/EditDistance.java | 12 +- .../java/org/tensorflow/op/core/Empty.java | 5 +- .../tensorflow/op/core/EmptyTensorList.java | 6 +- .../org/tensorflow/op/core/EncodeProto.java | 12 +- .../core/EnqueueTPUEmbeddingIntegerBatch.java | 4 +- .../core/EnqueueTPUEmbeddingSparseBatch.java | 4 +- .../EnqueueTPUEmbeddingSparseTensorBatch.java | 4 +- .../org/tensorflow/op/core/EnsureShape.java | 2 +- .../org/tensorflow/op/core/EuclideanNorm.java | 3 +- .../org/tensorflow/op/core/ExpandDims.java | 3 +- .../op/core/ExperimentalAutoShardDataset.java | 7 +- ...ExperimentalBytesProducedStatsDataset.java | 7 +- .../ExperimentalChooseFastestDataset.java | 6 +- .../core/ExperimentalDatasetCardinality.java | 9 +- .../core/ExperimentalDatasetToTFRecord.java | 3 +- ...ExperimentalDenseToSparseBatchDataset.java | 7 +- .../core/ExperimentalLatencyStatsDataset.java | 7 +- .../ExperimentalMatchingFilesDataset.java | 3 +- ...erimentalMaxIntraOpParallelismDataset.java | 7 +- .../core/ExperimentalParseExampleDataset.java | 9 +- .../ExperimentalPrivateThreadPoolDataset.java | 7 +- .../op/core/ExperimentalRandomDataset.java | 7 +- .../op/core/ExperimentalRebatchDataset.java | 7 +- ...ExperimentalSetStatsAggregatorDataset.java | 7 +- .../ExperimentalSlidingWindowDataset.java | 7 +- .../op/core/ExperimentalSqlDataset.java | 7 +- .../ExperimentalStatsAggregatorSummary.java | 9 +- .../op/core/ExperimentalUnbatchDataset.java | 6 +- .../op/core/ExtractVolumePatches.java | 5 +- .../gen/java/org/tensorflow/op/core/Fill.java | 3 +- .../org/tensorflow/op/core/Fingerprint.java | 13 +- .../op/core/FusedBatchNormGradV3.java | 6 +- .../tensorflow/op/core/FusedBatchNormV3.java | 5 +- .../org/tensorflow/op/core/GRUBlockCell.java | 5 +- .../tensorflow/op/core/GRUBlockCellGrad.java | 5 +- .../java/org/tensorflow/op/core/Gather.java | 3 +- .../java/org/tensorflow/op/core/GatherNd.java | 3 +- .../tensorflow/op/core/GetSessionTensor.java | 5 +- .../org/tensorflow/op/core/HashTable.java | 6 +- .../op/core/HistogramFixedWidth.java | 12 +- .../op/core/IgnoreErrorsDataset.java | 6 +- .../tensorflow/op/core/ImmutableConst.java | 6 +- .../org/tensorflow/op/core/InfeedDequeue.java | 6 +- .../op/core/InfeedDequeueTuple.java | 6 +- .../org/tensorflow/op/core/InfeedEnqueue.java | 2 +- .../op/core/InfeedEnqueueTuple.java | 2 +- .../op/core/InitializeTableFromTextFile.java | 3 +- .../org/tensorflow/op/core/InplaceAdd.java | 3 +- .../org/tensorflow/op/core/InplaceSub.java | 3 +- .../org/tensorflow/op/core/InplaceUpdate.java | 3 +- .../IsBoostedTreesEnsembleInitialized.java | 9 +- ...reesQuantileStreamResourceInitialized.java | 9 +- .../op/core/IsVariableInitialized.java | 9 +- .../tensorflow/op/core/IteratorGetDevice.java | 9 +- .../op/core/KMC2ChainInitialization.java | 12 +- .../op/core/KmeansPlusPlusInitialization.java | 12 +- .../org/tensorflow/op/core/LMDBDataset.java | 7 +- .../org/tensorflow/op/core/LSTMBlockCell.java | 5 +- .../tensorflow/op/core/LSTMBlockCellGrad.java | 5 +- .../java/org/tensorflow/op/core/LinSpace.java | 5 +- .../core/LoadTPUEmbeddingADAMParameters.java | 3 +- ...EmbeddingADAMParametersGradAccumDebug.java | 3 +- .../LoadTPUEmbeddingAdadeltaParameters.java | 3 +- ...ddingAdadeltaParametersGradAccumDebug.java | 3 +- .../LoadTPUEmbeddingAdagradParameters.java | 3 +- ...eddingAdagradParametersGradAccumDebug.java | 3 +- ...TPUEmbeddingCenteredRMSPropParameters.java | 3 +- .../core/LoadTPUEmbeddingFTRLParameters.java | 3 +- ...EmbeddingFTRLParametersGradAccumDebug.java | 3 +- ...TPUEmbeddingMDLAdagradLightParameters.java | 3 +- .../LoadTPUEmbeddingMomentumParameters.java | 3 +- ...ddingMomentumParametersGradAccumDebug.java | 3 +- ...TPUEmbeddingProximalAdagradParameters.java | 3 +- ...oximalAdagradParametersGradAccumDebug.java | 3 +- .../LoadTPUEmbeddingRMSPropParameters.java | 3 +- ...eddingRMSPropParametersGradAccumDebug.java | 3 +- ...ngStochasticGradientDescentParameters.java | 3 +- .../tensorflow/op/core/LookupTableExport.java | 6 +- .../tensorflow/op/core/LookupTableSize.java | 9 +- .../java/org/tensorflow/op/core/LoopCond.java | 11 +- .../org/tensorflow/op/core/LowerBound.java | 12 +- .../gen/java/org/tensorflow/op/core/Lu.java | 12 +- .../java/org/tensorflow/op/core/MapClear.java | 4 +- .../tensorflow/op/core/MapIncompleteSize.java | 13 +- .../java/org/tensorflow/op/core/MapPeek.java | 6 +- .../java/org/tensorflow/op/core/MapSize.java | 13 +- .../java/org/tensorflow/op/core/MapStage.java | 6 +- .../org/tensorflow/op/core/MapUnstage.java | 6 +- .../tensorflow/op/core/MapUnstageNoKey.java | 10 +- .../tensorflow/op/core/MatrixDiagPartV2.java | 3 +- .../org/tensorflow/op/core/MatrixDiagV2.java | 3 +- .../tensorflow/op/core/MatrixSetDiagV2.java | 3 +- .../gen/java/org/tensorflow/op/core/Max.java | 3 +- .../op/core/MaxIntraOpParallelismDataset.java | 7 +- .../java/org/tensorflow/op/core/Merge.java | 5 +- .../gen/java/org/tensorflow/op/core/Min.java | 3 +- .../org/tensorflow/op/core/MirrorPad.java | 3 +- .../org/tensorflow/op/core/MirrorPadGrad.java | 3 +- .../op/core/MutableDenseHashTable.java | 6 +- .../tensorflow/op/core/MutableHashTable.java | 6 +- .../op/core/MutableHashTableOfTensors.java | 8 +- .../org/tensorflow/op/core/NcclAllReduce.java | 5 +- .../org/tensorflow/op/core/NcclBroadcast.java | 7 +- .../org/tensorflow/op/core/NcclReduce.java | 5 +- .../tensorflow/op/core/NearestNeighbors.java | 12 +- .../org/tensorflow/op/core/NextAfter.java | 5 +- .../op/core/NonDeterministicInts.java | 9 +- .../op/core/NonMaxSuppressionV5.java | 14 +- .../op/core/NonSerializableDataset.java | 6 +- .../java/org/tensorflow/op/core/OneHot.java | 4 +- .../tensorflow/op/core/OrderedMapClear.java | 4 +- .../op/core/OrderedMapIncompleteSize.java | 13 +- .../tensorflow/op/core/OrderedMapPeek.java | 6 +- .../tensorflow/op/core/OrderedMapSize.java | 13 +- .../tensorflow/op/core/OrderedMapStage.java | 6 +- .../tensorflow/op/core/OrderedMapUnstage.java | 6 +- .../op/core/OrderedMapUnstageNoKey.java | 10 +- .../tensorflow/op/core/OutfeedDequeue.java | 6 +- .../op/core/OutfeedDequeueTuple.java | 6 +- .../gen/java/org/tensorflow/op/core/Pad.java | 3 +- .../tensorflow/op/core/ParallelConcat.java | 2 +- .../op/core/ParallelDynamicStitch.java | 3 +- .../org/tensorflow/op/core/Placeholder.java | 6 +- .../op/core/PlaceholderWithDefault.java | 2 +- .../org/tensorflow/op/core/Prelinearize.java | 2 +- .../tensorflow/op/core/PrelinearizeTuple.java | 2 +- .../java/org/tensorflow/op/core/Print.java | 3 +- .../op/core/PrivateThreadPoolDataset.java | 7 +- .../gen/java/org/tensorflow/op/core/Prod.java | 3 +- .../tensorflow/op/core/QuantizedConcat.java | 12 +- .../tensorflow/op/core/QuantizedConcatV2.java | 12 +- .../op/core/QuantizedConv2DAndRelu.java | 13 +- .../QuantizedConv2DAndReluAndRequantize.java | 13 +- .../op/core/QuantizedConv2DAndRequantize.java | 13 +- .../op/core/QuantizedConv2DPerChannel.java | 13 +- .../op/core/QuantizedConv2DWithBias.java | 13 +- .../core/QuantizedConv2DWithBiasAndRelu.java | 13 +- ...zedConv2DWithBiasAndReluAndRequantize.java | 13 +- .../QuantizedConv2DWithBiasAndRequantize.java | 13 +- ...WithBiasSignedSumAndReluAndRequantize.java | 13 +- .../QuantizedConv2DWithBiasSumAndRelu.java | 13 +- ...Conv2DWithBiasSumAndReluAndRequantize.java | 13 +- .../op/core/QuantizedDepthwiseConv2D.java | 13 +- .../QuantizedDepthwiseConv2DWithBias.java | 13 +- ...antizedDepthwiseConv2DWithBiasAndRelu.java | 13 +- ...iseConv2DWithBiasAndReluAndRequantize.java | 13 +- .../op/core/QuantizedMatMulWithBias.java | 13 +- .../core/QuantizedMatMulWithBiasAndRelu.java | 13 +- ...zedMatMulWithBiasAndReluAndRequantize.java | 13 +- .../tensorflow/op/core/QuantizedReshape.java | 12 +- .../org/tensorflow/op/core/RaggedGather.java | 5 +- .../org/tensorflow/op/core/RaggedRange.java | 12 +- .../op/core/RaggedTensorFromVariant.java | 9 +- .../op/core/RaggedTensorToSparse.java | 12 +- .../op/core/RaggedTensorToVariant.java | 3 +- .../java/org/tensorflow/op/core/Range.java | 5 +- .../gen/java/org/tensorflow/op/core/Rank.java | 9 +- .../tensorflow/op/core/ReadVariableOp.java | 4 +- .../tensorflow/op/core/RebatchDataset.java | 7 +- .../op/core/RecvTPUEmbeddingActivations.java | 11 +- .../org/tensorflow/op/core/ReduceAll.java | 12 +- .../org/tensorflow/op/core/ReduceAny.java | 12 +- .../org/tensorflow/op/core/ReduceMax.java | 3 +- .../org/tensorflow/op/core/ReduceMin.java | 3 +- .../org/tensorflow/op/core/ReduceProd.java | 3 +- .../org/tensorflow/op/core/ReduceSum.java | 3 +- .../java/org/tensorflow/op/core/RefMerge.java | 5 +- .../org/tensorflow/op/core/RefSelect.java | 3 +- .../org/tensorflow/op/core/RefSwitch.java | 3 +- .../op/core/RemoteFusedGraphExecute.java | 4 +- .../core/RequantizationRangePerChannel.java | 11 +- .../op/core/RequantizePerChannel.java | 13 +- .../java/org/tensorflow/op/core/Reshape.java | 3 +- .../ResourceAccumulatorApplyGradient.java | 3 +- .../ResourceAccumulatorNumAccumulated.java | 9 +- .../ResourceAccumulatorSetGlobalStep.java | 3 +- .../core/ResourceAccumulatorTakeGradient.java | 5 +- .../core/ResourceConditionalAccumulator.java | 6 +- .../tensorflow/op/core/ResourceCountUpTo.java | 7 +- .../tensorflow/op/core/ResourceGather.java | 5 +- .../tensorflow/op/core/ResourceGatherNd.java | 5 +- .../op/core/ResourceScatterAdd.java | 3 +- .../op/core/ResourceScatterDiv.java | 3 +- .../op/core/ResourceScatterMax.java | 3 +- .../op/core/ResourceScatterMin.java | 3 +- .../op/core/ResourceScatterMul.java | 3 +- .../op/core/ResourceScatterNdAdd.java | 3 +- .../op/core/ResourceScatterNdSub.java | 3 +- .../op/core/ResourceScatterNdUpdate.java | 3 +- .../op/core/ResourceScatterSub.java | 3 +- .../op/core/ResourceScatterUpdate.java | 3 +- .../op/core/ResourceSparseApplyAdagradV2.java | 3 +- .../ResourceSparseApplyKerasMomentum.java | 3 +- .../op/core/ResourceStridedSliceAssign.java | 3 +- .../RetrieveTPUEmbeddingADAMParameters.java | 13 +- ...EmbeddingADAMParametersGradAccumDebug.java | 17 +- ...etrieveTPUEmbeddingAdadeltaParameters.java | 13 +- ...ddingAdadeltaParametersGradAccumDebug.java | 17 +- ...RetrieveTPUEmbeddingAdagradParameters.java | 9 +- ...eddingAdagradParametersGradAccumDebug.java | 13 +- ...TPUEmbeddingCenteredRMSPropParameters.java | 17 +- .../RetrieveTPUEmbeddingFTRLParameters.java | 13 +- ...EmbeddingFTRLParametersGradAccumDebug.java | 17 +- ...TPUEmbeddingMDLAdagradLightParameters.java | 17 +- ...etrieveTPUEmbeddingMomentumParameters.java | 9 +- ...ddingMomentumParametersGradAccumDebug.java | 13 +- ...TPUEmbeddingProximalAdagradParameters.java | 9 +- ...oximalAdagradParametersGradAccumDebug.java | 13 +- ...RetrieveTPUEmbeddingRMSPropParameters.java | 13 +- ...eddingRMSPropParametersGradAccumDebug.java | 17 +- ...ngStochasticGradientDescentParameters.java | 9 +- .../java/org/tensorflow/op/core/Reverse.java | 3 +- .../tensorflow/op/core/ReverseSequence.java | 3 +- .../java/org/tensorflow/op/core/RngSkip.java | 3 +- .../gen/java/org/tensorflow/op/core/Roll.java | 3 +- .../gen/java/org/tensorflow/op/core/Rpc.java | 11 +- .../tensorflow/op/core/SamplingDataset.java | 8 +- .../tensorflow/op/core/ScaleAndTranslate.java | 13 +- .../op/core/ScaleAndTranslateGrad.java | 6 +- .../org/tensorflow/op/core/ScatterAdd.java | 3 +- .../org/tensorflow/op/core/ScatterDiv.java | 3 +- .../org/tensorflow/op/core/ScatterMax.java | 5 +- .../org/tensorflow/op/core/ScatterMin.java | 5 +- .../org/tensorflow/op/core/ScatterMul.java | 3 +- .../org/tensorflow/op/core/ScatterNd.java | 3 +- .../org/tensorflow/op/core/ScatterNdAdd.java | 3 +- .../op/core/ScatterNdNonAliasingAdd.java | 3 +- .../org/tensorflow/op/core/ScatterNdSub.java | 3 +- .../tensorflow/op/core/ScatterNdUpdate.java | 3 +- .../org/tensorflow/op/core/ScatterSub.java | 3 +- .../org/tensorflow/op/core/ScatterUpdate.java | 3 +- .../java/org/tensorflow/op/core/SelectV2.java | 3 +- .../op/core/SendTPUEmbeddingGradients.java | 3 +- .../org/tensorflow/op/core/SetDiff1d.java | 12 +- .../java/org/tensorflow/op/core/SetSize.java | 12 +- .../java/org/tensorflow/op/core/Shape.java | 12 +- .../java/org/tensorflow/op/core/ShapeN.java | 12 +- .../org/tensorflow/op/core/ShardDataset.java | 7 +- .../tensorflow/op/core/ShuffleDatasetV2.java | 7 +- .../gen/java/org/tensorflow/op/core/Size.java | 12 +- .../java/org/tensorflow/op/core/Skipgram.java | 31 +- .../org/tensorflow/op/core/SleepDataset.java | 7 +- .../java/org/tensorflow/op/core/Slice.java | 3 +- .../op/core/SlidingWindowDataset.java | 7 +- .../tensorflow/op/core/SnapshotDataset.java | 7 +- .../tensorflow/op/core/SpaceToBatchNd.java | 3 +- .../op/core/SparseApplyAdagradV2.java | 3 +- .../java/org/tensorflow/op/core/Split.java | 3 +- .../java/org/tensorflow/op/core/SplitV.java | 4 +- .../org/tensorflow/op/core/StageClear.java | 4 +- .../org/tensorflow/op/core/StagePeek.java | 5 +- .../org/tensorflow/op/core/StageSize.java | 13 +- .../op/core/StatefulRandomBinomial.java | 12 +- .../op/core/StatefulStandardNormal.java | 9 +- .../op/core/StatefulStandardNormalV2.java | 10 +- .../op/core/StatefulTruncatedNormal.java | 10 +- .../tensorflow/op/core/StatefulUniform.java | 10 +- .../op/core/StatefulUniformFullInt.java | 5 +- .../op/core/StatefulUniformInt.java | 3 +- .../org/tensorflow/op/core/StridedSlice.java | 3 +- .../op/core/StridedSliceAssign.java | 3 +- .../tensorflow/op/core/StridedSliceGrad.java | 3 +- .../org/tensorflow/op/core/StringLower.java | 11 +- .../org/tensorflow/op/core/StringNGrams.java | 10 +- .../org/tensorflow/op/core/StringUpper.java | 11 +- .../gen/java/org/tensorflow/op/core/Sum.java | 3 +- .../org/tensorflow/op/core/SwitchCond.java | 3 +- .../op/core/TPUCompilationResult.java | 9 +- .../op/core/TPUEmbeddingActivations.java | 11 +- .../op/core/TPUOrdinalSelector.java | 9 +- .../tensorflow/op/core/TemporaryVariable.java | 6 +- .../org/tensorflow/op/core/TensorArray.java | 12 +- .../tensorflow/op/core/TensorArrayConcat.java | 12 +- .../tensorflow/op/core/TensorArrayGather.java | 8 +- .../tensorflow/op/core/TensorArrayGrad.java | 7 +- .../op/core/TensorArrayGradWithShape.java | 8 +- .../tensorflow/op/core/TensorArrayPack.java | 8 +- .../tensorflow/op/core/TensorArrayRead.java | 6 +- .../op/core/TensorArrayScatter.java | 12 +- .../tensorflow/op/core/TensorArraySize.java | 12 +- .../tensorflow/op/core/TensorArraySplit.java | 12 +- .../tensorflow/op/core/TensorArrayUnpack.java | 12 +- .../tensorflow/op/core/TensorArrayWrite.java | 12 +- .../core/TensorForestCreateTreeVariable.java | 3 +- .../op/core/TensorForestTreeDeserialize.java | 3 +- .../core/TensorForestTreeIsInitializedOp.java | 9 +- .../op/core/TensorForestTreePredict.java | 11 +- .../op/core/TensorForestTreeSerialize.java | 9 +- .../op/core/TensorForestTreeSize.java | 9 +- .../tensorflow/op/core/TensorListConcat.java | 11 +- .../op/core/TensorListConcatLists.java | 4 +- .../op/core/TensorListConcatV2.java | 10 +- .../op/core/TensorListElementShape.java | 7 +- .../op/core/TensorListFromTensor.java | 3 +- .../tensorflow/op/core/TensorListGather.java | 5 +- .../tensorflow/op/core/TensorListGetItem.java | 5 +- .../tensorflow/op/core/TensorListLength.java | 9 +- .../tensorflow/op/core/TensorListPopBack.java | 5 +- .../tensorflow/op/core/TensorListReserve.java | 6 +- .../tensorflow/op/core/TensorListResize.java | 3 +- .../tensorflow/op/core/TensorListScatter.java | 4 +- .../TensorListScatterIntoExistingList.java | 3 +- .../op/core/TensorListScatterV2.java | 4 +- .../tensorflow/op/core/TensorListSetItem.java | 3 +- .../tensorflow/op/core/TensorListSplit.java | 4 +- .../tensorflow/op/core/TensorListStack.java | 5 +- .../tensorflow/op/core/TensorScatterAdd.java | 3 +- .../tensorflow/op/core/TensorScatterSub.java | 3 +- .../op/core/TensorScatterUpdate.java | 3 +- .../op/core/TensorStridedSliceUpdate.java | 3 +- .../tensorflow/op/core/ThreadPoolDataset.java | 6 +- .../gen/java/org/tensorflow/op/core/Tile.java | 3 +- .../org/tensorflow/op/core/Timestamp.java | 9 +- .../java/org/tensorflow/op/core/TryRpc.java | 16 +- .../java/org/tensorflow/op/core/Unbatch.java | 3 +- .../org/tensorflow/op/core/UnbatchGrad.java | 3 +- .../org/tensorflow/op/core/UnicodeDecode.java | 18 +- .../org/tensorflow/op/core/UnicodeEncode.java | 13 +- .../java/org/tensorflow/op/core/Unique.java | 12 +- .../org/tensorflow/op/core/UniqueDataset.java | 6 +- .../tensorflow/op/core/UniqueWithCounts.java | 12 +- .../org/tensorflow/op/core/UnravelIndex.java | 5 +- .../op/core/UnsortedSegmentJoin.java | 12 +- .../java/org/tensorflow/op/core/Unstage.java | 4 +- .../org/tensorflow/op/core/UpperBound.java | 12 +- .../org/tensorflow/op/core/VarHandleOp.java | 6 +- .../op/core/VarIsInitializedOp.java | 9 +- .../java/org/tensorflow/op/core/Variable.java | 6 +- .../org/tensorflow/op/core/VariableShape.java | 12 +- .../java/org/tensorflow/op/core/Where.java | 9 +- .../java/org/tensorflow/op/core/Where3.java | 3 +- .../tensorflow/op/core/WorkerHeartbeat.java | 11 +- .../org/tensorflow/op/core/WriteKafka.java | 70 + .../op/core/WriteRawProtoSummary.java | 4 +- .../tensorflow/op/data/AnonymousIterator.java | 6 +- .../org/tensorflow/op/data/BatchDataset.java | 8 +- .../op/data/BytesProducedStatsDataset.java | 7 +- .../org/tensorflow/op/data/CacheDataset.java | 7 +- .../op/data/ConcatenateDataset.java | 6 +- .../tensorflow/op/data/DatasetToGraph.java | 9 +- .../op/data/DatasetToSingleElement.java | 6 +- .../tensorflow/op/data/DatasetToTfRecord.java | 3 +- .../op/data/DenseToSparseBatchDataset.java | 7 +- .../data/ExperimentalAssertNextDataset.java | 7 +- .../op/data/ExperimentalCsvDataset.java | 7 +- ...ExperimentalDirectedInterleaveDataset.java | 6 +- .../data/ExperimentalIgnoreErrorsDataset.java | 6 +- .../data/ExperimentalIteratorGetDevice.java | 9 +- .../op/data/ExperimentalLmdbDataset.java | 7 +- .../ExperimentalNonSerializableDataset.java | 6 +- .../op/data/ExperimentalSleepDataset.java | 7 +- .../data/ExperimentalThreadPoolDataset.java | 6 +- .../op/data/ExperimentalUniqueDataset.java | 6 +- .../op/data/FilterByLastComponentDataset.java | 6 +- .../op/data/FixedLengthRecordDataset.java | 4 +- .../java/org/tensorflow/op/data/Iterator.java | 6 +- .../op/data/IteratorFromStringHandle.java | 7 +- .../tensorflow/op/data/IteratorGetNext.java | 6 +- .../op/data/IteratorGetNextAsOptional.java | 6 +- .../op/data/IteratorGetNextSync.java | 6 +- .../op/data/IteratorToStringHandle.java | 9 +- .../op/data/LatencyStatsDataset.java | 7 +- .../org/tensorflow/op/data/LeakyReluGrad.java | 5 +- .../op/data/MatchingFilesDataset.java | 3 +- .../org/tensorflow/op/data/ModelDataset.java | 6 +- .../op/data/MultiDeviceIterator.java | 6 +- .../MultiDeviceIteratorFromStringHandle.java | 7 +- .../MultiDeviceIteratorGetNextFromShard.java | 8 +- .../op/data/MultiDeviceIteratorInit.java | 11 +- .../MultiDeviceIteratorToStringHandle.java | 9 +- .../tensorflow/op/data/OptimizeDataset.java | 7 +- .../tensorflow/op/data/OptionalGetValue.java | 6 +- .../tensorflow/op/data/OptionalHasValue.java | 9 +- .../op/data/PaddedBatchDataset.java | 6 +- .../op/data/ParseExampleDataset.java | 9 +- .../tensorflow/op/data/PrefetchDataset.java | 7 +- .../org/tensorflow/op/data/RandomDataset.java | 7 +- .../org/tensorflow/op/data/RangeDataset.java | 7 +- .../org/tensorflow/op/data/RepeatDataset.java | 7 +- .../op/data/SetStatsAggregatorDataset.java | 7 +- .../op/data/ShuffleAndRepeatDataset.java | 7 +- .../tensorflow/op/data/ShuffleDataset.java | 7 +- .../org/tensorflow/op/data/SkipDataset.java | 7 +- .../op/data/SparseTensorSliceDataset.java | 3 +- .../org/tensorflow/op/data/SqlDataset.java | 7 +- .../org/tensorflow/op/data/TakeDataset.java | 7 +- .../org/tensorflow/op/data/TensorDataset.java | 2 +- .../op/data/TensorSliceDataset.java | 2 +- .../tensorflow/op/data/TextLineDataset.java | 4 +- .../tensorflow/op/data/TfRecordDataset.java | 4 +- .../tensorflow/op/data/UnbatchDataset.java | 6 +- .../org/tensorflow/op/data/WindowDataset.java | 8 +- .../org/tensorflow/op/data/ZipDataset.java | 6 +- .../org/tensorflow/op/dtypes/AsString.java | 9 +- .../java/org/tensorflow/op/dtypes/Cast.java | 4 +- .../org/tensorflow/op/dtypes/Complex.java | 5 +- .../tensorflow/op/image/AdjustContrast.java | 6 +- .../org/tensorflow/op/image/AdjustHue.java | 6 +- .../tensorflow/op/image/AdjustSaturation.java | 6 +- .../tensorflow/op/image/CropAndResize.java | 13 +- .../op/image/CropAndResizeGradBoxes.java | 13 +- .../op/image/CropAndResizeGradImage.java | 9 +- .../op/image/DecodeAndCropJpeg.java | 14 +- .../org/tensorflow/op/image/DecodeBmp.java | 13 +- .../org/tensorflow/op/image/DecodeGif.java | 13 +- .../org/tensorflow/op/image/DecodeJpeg.java | 13 +- .../org/tensorflow/op/image/DecodePng.java | 14 +- .../op/image/DrawBoundingBoxes.java | 6 +- .../org/tensorflow/op/image/EncodeJpeg.java | 13 +- .../op/image/EncodeJpegVariableQuality.java | 14 +- .../org/tensorflow/op/image/EncodePng.java | 12 +- .../tensorflow/op/image/ExtractGlimpse.java | 12 +- .../op/image/ExtractImagePatches.java | 5 +- .../tensorflow/op/image/ExtractJpegShape.java | 13 +- .../org/tensorflow/op/image/HsvToRgb.java | 5 +- .../op/image/NonMaxSuppression.java | 12 +- .../image/NonMaxSuppressionWithOverlaps.java | 12 +- .../op/image/QuantizedResizeBilinear.java | 12 +- .../org/tensorflow/op/image/RandomCrop.java | 6 +- .../org/tensorflow/op/image/ResizeArea.java | 13 +- .../tensorflow/op/image/ResizeBicubic.java | 13 +- .../op/image/ResizeBicubicGrad.java | 6 +- .../tensorflow/op/image/ResizeBilinear.java | 13 +- .../op/image/ResizeBilinearGrad.java | 6 +- .../op/image/ResizeNearestNeighbor.java | 6 +- .../op/image/ResizeNearestNeighborGrad.java | 6 +- .../org/tensorflow/op/image/RgbToHsv.java | 5 +- .../op/image/SampleDistortedBoundingBox.java | 10 +- .../org/tensorflow/op/io/DecodeBase64.java | 11 +- .../tensorflow/op/io/DecodeCompressed.java | 11 +- .../java/org/tensorflow/op/io/DecodeCsv.java | 3 +- .../tensorflow/op/io/DecodeJsonExample.java | 11 +- .../java/org/tensorflow/op/io/DecodeRaw.java | 5 +- .../op/io/DeserializeManySparse.java | 14 +- .../org/tensorflow/op/io/EncodeBase64.java | 11 +- .../java/org/tensorflow/op/io/FifoQueue.java | 6 +- .../java/org/tensorflow/op/io/LmdbReader.java | 9 +- .../org/tensorflow/op/io/MatchingFiles.java | 11 +- .../tensorflow/op/io/PaddingFifoQueue.java | 6 +- .../org/tensorflow/op/io/ParseExample.java | 20 +- .../op/io/ParseSequenceExample.java | 42 +- .../tensorflow/op/io/ParseSingleExample.java | 20 +- .../op/io/ParseSingleSequenceExample.java | 36 +- .../org/tensorflow/op/io/ParseTensor.java | 5 +- .../org/tensorflow/op/io/PriorityQueue.java | 6 +- .../org/tensorflow/op/io/QueueDequeue.java | 4 +- .../tensorflow/op/io/QueueDequeueMany.java | 5 +- .../tensorflow/op/io/QueueDequeueUpTo.java | 5 +- .../org/tensorflow/op/io/QueueIsClosed.java | 9 +- .../java/org/tensorflow/op/io/QueueSize.java | 9 +- .../tensorflow/op/io/RandomShuffleQueue.java | 6 +- .../java/org/tensorflow/op/io/ReadFile.java | 11 +- .../op/io/ReaderNumRecordsProduced.java | 9 +- .../op/io/ReaderNumWorkUnitsCompleted.java | 9 +- .../java/org/tensorflow/op/io/ReaderRead.java | 9 +- .../org/tensorflow/op/io/ReaderReadUpTo.java | 12 +- .../tensorflow/op/io/ReaderRestoreState.java | 3 +- .../op/io/ReaderSerializeState.java | 9 +- .../tensorflow/op/io/SerializeManySparse.java | 10 +- .../org/tensorflow/op/io/SerializeSparse.java | 10 +- .../org/tensorflow/op/io/SerializeTensor.java | 9 +- .../org/tensorflow/op/io/ShardedFilename.java | 12 +- .../org/tensorflow/op/io/ShardedFilespec.java | 12 +- .../java/org/tensorflow/op/io/WriteFile.java | 3 +- .../org/tensorflow/op/linalg/BandPart.java | 3 +- .../tensorflow/op/linalg/BatchCholesky.java | 5 +- .../op/linalg/BatchCholeskyGrad.java | 5 +- .../op/linalg/BatchMatrixBandPart.java | 3 +- .../op/linalg/BatchMatrixInverse.java | 5 +- .../op/linalg/BatchMatrixSolve.java | 5 +- .../op/linalg/BatchMatrixSolveLs.java | 6 +- .../op/linalg/BatchMatrixTriangularSolve.java | 5 +- .../op/linalg/BatchSelfAdjointEig.java | 5 +- .../tensorflow/op/linalg/CholeskyGrad.java | 5 +- .../op/linalg/ConjugateTranspose.java | 3 +- .../java/org/tensorflow/op/linalg/Cross.java | 5 +- .../op/linalg/LoadAndRemapMatrix.java | 13 +- .../tensorflow/op/linalg/MatrixSolveLs.java | 3 +- .../tensorflow/op/linalg/QuantizedMatMul.java | 15 +- .../org/tensorflow/op/linalg/Transpose.java | 3 +- .../gen/java/org/tensorflow/op/math/Abs.java | 5 +- .../org/tensorflow/op/math/AccumulateN.java | 2 +- .../java/org/tensorflow/op/math/Angle.java | 12 +- .../tensorflow/op/math/ApproximateEqual.java | 9 +- .../java/org/tensorflow/op/math/ArgMax.java | 12 +- .../java/org/tensorflow/op/math/ArgMin.java | 12 +- .../java/org/tensorflow/op/math/Atan2.java | 5 +- .../org/tensorflow/op/math/BesselI0e.java | 5 +- .../org/tensorflow/op/math/BesselI1e.java | 5 +- .../java/org/tensorflow/op/math/Betainc.java | 5 +- .../java/org/tensorflow/op/math/Bincount.java | 6 +- .../gen/java/org/tensorflow/op/math/Ceil.java | 5 +- .../org/tensorflow/op/math/CheckNumerics.java | 5 +- .../tensorflow/op/math/CompareAndBitpack.java | 10 +- .../org/tensorflow/op/math/ComplexAbs.java | 12 +- .../java/org/tensorflow/op/math/Cumprod.java | 3 +- .../java/org/tensorflow/op/math/Cumsum.java | 3 +- .../java/org/tensorflow/op/math/Digamma.java | 5 +- .../java/org/tensorflow/op/math/Equal.java | 9 +- .../gen/java/org/tensorflow/op/math/Erf.java | 5 +- .../gen/java/org/tensorflow/op/math/Erfc.java | 5 +- .../gen/java/org/tensorflow/op/math/Fact.java | 9 +- .../java/org/tensorflow/op/math/Floor.java | 5 +- .../java/org/tensorflow/op/math/FloorMod.java | 5 +- .../java/org/tensorflow/op/math/Greater.java | 12 +- .../org/tensorflow/op/math/GreaterEqual.java | 12 +- .../java/org/tensorflow/op/math/Igamma.java | 5 +- .../org/tensorflow/op/math/IgammaGradA.java | 5 +- .../java/org/tensorflow/op/math/Igammac.java | 5 +- .../gen/java/org/tensorflow/op/math/Imag.java | 12 +- .../tensorflow/op/math/InvertPermutation.java | 5 +- .../java/org/tensorflow/op/math/IsFinite.java | 12 +- .../java/org/tensorflow/op/math/IsInf.java | 12 +- .../java/org/tensorflow/op/math/IsNan.java | 12 +- .../gen/java/org/tensorflow/op/math/Less.java | 12 +- .../org/tensorflow/op/math/LessEqual.java | 12 +- .../java/org/tensorflow/op/math/Lgamma.java | 5 +- .../org/tensorflow/op/math/LogicalAnd.java | 11 +- .../org/tensorflow/op/math/LogicalNot.java | 11 +- .../org/tensorflow/op/math/LogicalOr.java | 11 +- .../java/org/tensorflow/op/math/Maximum.java | 5 +- .../gen/java/org/tensorflow/op/math/Mean.java | 3 +- .../java/org/tensorflow/op/math/Minimum.java | 5 +- .../gen/java/org/tensorflow/op/math/Mod.java | 5 +- .../java/org/tensorflow/op/math/NotEqual.java | 9 +- .../org/tensorflow/op/math/Polygamma.java | 5 +- .../tensorflow/op/math/PopulationCount.java | 13 +- .../org/tensorflow/op/math/QuantizedAdd.java | 13 +- .../org/tensorflow/op/math/QuantizedMul.java | 13 +- .../gen/java/org/tensorflow/op/math/Real.java | 12 +- .../gen/java/org/tensorflow/op/math/Rint.java | 5 +- .../org/tensorflow/op/math/SegmentMax.java | 5 +- .../org/tensorflow/op/math/SegmentMean.java | 3 +- .../org/tensorflow/op/math/SegmentMin.java | 5 +- .../org/tensorflow/op/math/SegmentProd.java | 3 +- .../org/tensorflow/op/math/SegmentSum.java | 3 +- .../java/org/tensorflow/op/math/Softplus.java | 5 +- .../org/tensorflow/op/math/SoftplusGrad.java | 5 +- .../org/tensorflow/op/math/TruncateMod.java | 5 +- .../op/math/UnsortedSegmentMax.java | 5 +- .../op/math/UnsortedSegmentMin.java | 5 +- .../op/math/UnsortedSegmentProd.java | 3 +- .../op/math/UnsortedSegmentSum.java | 3 +- .../gen/java/org/tensorflow/op/math/Zeta.java | 5 +- .../java/org/tensorflow/op/nn/AvgPool.java | 5 +- .../java/org/tensorflow/op/nn/AvgPool3d.java | 5 +- .../org/tensorflow/op/nn/AvgPool3dGrad.java | 6 +- .../org/tensorflow/op/nn/AvgPoolGrad.java | 6 +- .../op/nn/ComputeAccidentalHits.java | 17 +- .../gen/java/org/tensorflow/op/nn/Conv2d.java | 5 +- .../op/nn/Conv2dBackpropFilter.java | 6 +- .../tensorflow/op/nn/Conv2dBackpropInput.java | 6 +- .../gen/java/org/tensorflow/op/nn/Conv3d.java | 5 +- .../op/nn/Conv3dBackpropFilter.java | 6 +- .../tensorflow/op/nn/Conv3dBackpropInput.java | 5 +- .../op/nn/CtcBeamSearchDecoder.java | 27 +- .../tensorflow/op/nn/CtcGreedyDecoder.java | 21 +- .../java/org/tensorflow/op/nn/CtcLoss.java | 13 +- .../java/org/tensorflow/op/nn/CudnnRnn.java | 5 +- .../tensorflow/op/nn/CudnnRnnBackprop.java | 5 +- .../op/nn/CudnnRnnCanonicalToParams.java | 6 +- .../tensorflow/op/nn/CudnnRnnParamsSize.java | 10 +- .../op/nn/CudnnRnnParamsToCanonical.java | 6 +- .../tensorflow/op/nn/DataFormatDimMap.java | 5 +- .../op/nn/DataFormatVecPermute.java | 5 +- .../op/nn/DepthwiseConv2dNative.java | 5 +- .../DepthwiseConv2dNativeBackpropFilter.java | 6 +- .../DepthwiseConv2dNativeBackpropInput.java | 6 +- .../java/org/tensorflow/op/nn/Dilation2d.java | 5 +- .../op/nn/Dilation2dBackpropFilter.java | 5 +- .../op/nn/Dilation2dBackpropInput.java | 5 +- .../gen/java/org/tensorflow/op/nn/Elu.java | 5 +- .../java/org/tensorflow/op/nn/EluGrad.java | 5 +- .../op/nn/FixedUnigramCandidateSampler.java | 16 +- .../tensorflow/op/nn/FractionalAvgPool.java | 14 +- .../op/nn/FractionalAvgPoolGrad.java | 6 +- .../tensorflow/op/nn/FractionalMaxPool.java | 14 +- .../op/nn/FractionalMaxPoolGrad.java | 6 +- .../org/tensorflow/op/nn/FusedBatchNorm.java | 5 +- .../tensorflow/op/nn/FusedBatchNormGrad.java | 6 +- .../org/tensorflow/op/nn/FusedPadConv2d.java | 6 +- .../op/nn/FusedResizeAndPadConv2d.java | 6 +- .../gen/java/org/tensorflow/op/nn/InTopK.java | 13 +- .../gen/java/org/tensorflow/op/nn/L2Loss.java | 5 +- .../java/org/tensorflow/op/nn/LeakyRelu.java | 5 +- .../op/nn/LearnedUnigramCandidateSampler.java | 16 +- .../op/nn/LocalResponseNormalization.java | 5 +- .../op/nn/LocalResponseNormalizationGrad.java | 5 +- .../java/org/tensorflow/op/nn/LogSoftmax.java | 5 +- .../java/org/tensorflow/op/nn/MaxPool.java | 3 +- .../java/org/tensorflow/op/nn/MaxPool3d.java | 5 +- .../org/tensorflow/op/nn/MaxPool3dGrad.java | 5 +- .../tensorflow/op/nn/MaxPool3dGradGrad.java | 5 +- .../org/tensorflow/op/nn/MaxPoolGrad.java | 6 +- .../org/tensorflow/op/nn/MaxPoolGradGrad.java | 6 +- .../op/nn/MaxPoolGradGradWithArgmax.java | 5 +- .../op/nn/MaxPoolGradWithArgmax.java | 5 +- .../tensorflow/op/nn/MaxPoolWithArgmax.java | 12 +- .../java/org/tensorflow/op/nn/NthElement.java | 6 +- .../tensorflow/op/nn/QuantizedAvgPool.java | 11 +- ...tizedBatchNormWithGlobalNormalization.java | 13 +- .../tensorflow/op/nn/QuantizedBiasAdd.java | 13 +- .../org/tensorflow/op/nn/QuantizedConv2d.java | 13 +- .../op/nn/QuantizedInstanceNorm.java | 11 +- .../tensorflow/op/nn/QuantizedMaxPool.java | 11 +- .../org/tensorflow/op/nn/QuantizedRelu.java | 13 +- .../org/tensorflow/op/nn/QuantizedRelu6.java | 13 +- .../org/tensorflow/op/nn/QuantizedReluX.java | 13 +- .../gen/java/org/tensorflow/op/nn/Relu6.java | 5 +- .../java/org/tensorflow/op/nn/Relu6Grad.java | 5 +- .../java/org/tensorflow/op/nn/ReluGrad.java | 5 +- .../gen/java/org/tensorflow/op/nn/Selu.java | 5 +- .../java/org/tensorflow/op/nn/SeluGrad.java | 5 +- .../java/org/tensorflow/op/nn/Softmax.java | 5 +- .../op/nn/SoftmaxCrossEntropyWithLogits.java | 5 +- .../java/org/tensorflow/op/nn/Softsign.java | 5 +- .../org/tensorflow/op/nn/SoftsignGrad.java | 5 +- .../org/tensorflow/op/nn/SpaceToBatch.java | 3 +- .../SparseSoftmaxCrossEntropyWithLogits.java | 5 +- .../gen/java/org/tensorflow/op/nn/TopK.java | 10 +- .../op/quantization/Dequantize.java | 11 +- .../quantization/FakeQuantWithMinMaxArgs.java | 11 +- .../FakeQuantWithMinMaxArgsGradient.java | 11 +- .../quantization/FakeQuantWithMinMaxVars.java | 11 +- .../FakeQuantWithMinMaxVarsGradient.java | 15 +- .../FakeQuantWithMinMaxVarsPerChannel.java | 11 +- ...QuantWithMinMaxVarsPerChannelGradient.java | 15 +- .../tensorflow/op/quantization/Quantize.java | 13 +- .../quantization/QuantizeAndDequantize.java | 6 +- .../QuantizeDownAndShrinkRange.java | 13 +- .../op/quantization/RequantizationRange.java | 11 +- .../op/quantization/Requantize.java | 13 +- .../op/random/AllCandidateSampler.java | 16 +- .../op/random/LogUniformCandidateSampler.java | 16 +- .../org/tensorflow/op/random/Multinomial.java | 13 +- .../random/ParameterizedTruncatedNormal.java | 5 +- .../org/tensorflow/op/random/RandomGamma.java | 5 +- .../tensorflow/op/random/RandomGammaGrad.java | 5 +- .../tensorflow/op/random/RandomPoisson.java | 12 +- .../op/random/RandomStandardNormal.java | 7 +- .../tensorflow/op/random/RandomUniform.java | 7 +- .../op/random/RandomUniformInt.java | 5 +- .../org/tensorflow/op/random/RecordInput.java | 9 +- .../op/random/StatelessMultinomial.java | 13 +- .../op/random/StatelessRandomNormal.java | 12 +- .../op/random/StatelessRandomUniform.java | 12 +- .../op/random/StatelessRandomUniformInt.java | 5 +- .../op/random/StatelessTruncatedNormal.java | 12 +- .../tensorflow/op/random/TruncatedNormal.java | 7 +- .../op/random/UniformCandidateSampler.java | 16 +- .../java/org/tensorflow/op/signal/Irfft.java | 12 +- .../org/tensorflow/op/signal/Irfft2d.java | 12 +- .../org/tensorflow/op/signal/Irfft3d.java | 12 +- .../java/org/tensorflow/op/signal/Rfft.java | 4 +- .../java/org/tensorflow/op/signal/Rfft2d.java | 4 +- .../java/org/tensorflow/op/signal/Rfft3d.java | 4 +- .../op/sparse/AddManySparseToTensorsMap.java | 11 +- .../op/sparse/AddSparseToTensorsMap.java | 11 +- .../op/sparse/DenseToDenseSetOperation.java | 9 +- .../op/sparse/DenseToSparseSetOperation.java | 11 +- .../op/sparse/DeserializeSparse.java | 13 +- .../SparseAccumulatorApplyGradient.java | 4 +- .../sparse/SparseAccumulatorTakeGradient.java | 15 +- .../org/tensorflow/op/sparse/SparseAdd.java | 12 +- .../tensorflow/op/sparse/SparseAddGrad.java | 3 +- .../tensorflow/op/sparse/SparseConcat.java | 11 +- .../sparse/SparseConditionalAccumulator.java | 15 +- .../org/tensorflow/op/sparse/SparseCross.java | 15 +- .../op/sparse/SparseDenseCwiseAdd.java | 3 +- .../op/sparse/SparseDenseCwiseDiv.java | 3 +- .../op/sparse/SparseDenseCwiseMul.java | 3 +- .../op/sparse/SparseFillEmptyRows.java | 16 +- .../op/sparse/SparseFillEmptyRowsGrad.java | 3 +- .../tensorflow/op/sparse/SparseMatMul.java | 12 +- .../tensorflow/op/sparse/SparseReduceMax.java | 7 +- .../op/sparse/SparseReduceMaxSparse.java | 15 +- .../tensorflow/op/sparse/SparseReduceSum.java | 4 +- .../op/sparse/SparseReduceSumSparse.java | 12 +- .../tensorflow/op/sparse/SparseReorder.java | 7 +- .../tensorflow/op/sparse/SparseReshape.java | 11 +- .../op/sparse/SparseSegmentMean.java | 6 +- .../op/sparse/SparseSegmentMeanGrad.java | 6 +- .../SparseSegmentMeanWithNumSegments.java | 6 +- .../op/sparse/SparseSegmentSqrtN.java | 6 +- .../op/sparse/SparseSegmentSqrtNGrad.java | 6 +- .../SparseSegmentSqrtNWithNumSegments.java | 6 +- .../op/sparse/SparseSegmentSum.java | 6 +- .../SparseSegmentSumWithNumSegments.java | 6 +- .../org/tensorflow/op/sparse/SparseSlice.java | 11 +- .../tensorflow/op/sparse/SparseSliceGrad.java | 3 +- .../tensorflow/op/sparse/SparseSoftmax.java | 6 +- .../op/sparse/SparseSparseMaximum.java | 10 +- .../op/sparse/SparseSparseMinimum.java | 7 +- .../org/tensorflow/op/sparse/SparseSplit.java | 15 +- .../op/sparse/SparseTensorDenseAdd.java | 3 +- .../op/sparse/SparseTensorDenseMatMul.java | 4 +- .../tensorflow/op/sparse/SparseToDense.java | 3 +- .../op/sparse/SparseToSparseSetOperation.java | 11 +- .../sparse/TakeManySparseFromTensorsMap.java | 13 +- .../java/org/tensorflow/op/strings/Join.java | 11 +- .../org/tensorflow/op/strings/ReduceJoin.java | 12 +- .../tensorflow/op/strings/RegexFullMatch.java | 12 +- .../tensorflow/op/strings/RegexReplace.java | 11 +- .../op/strings/StaticRegexFullMatch.java | 12 +- .../op/strings/StaticRegexReplace.java | 11 +- .../tensorflow/op/strings/StringFormat.java | 9 +- .../tensorflow/op/strings/StringLength.java | 12 +- .../tensorflow/op/strings/StringSplit.java | 16 +- .../java/org/tensorflow/op/strings/Strip.java | 11 +- .../org/tensorflow/op/strings/Substr.java | 12 +- .../tensorflow/op/strings/ToHashBucket.java | 12 +- .../op/strings/ToHashBucketFast.java | 12 +- .../op/strings/ToHashBucketStrong.java | 12 +- .../org/tensorflow/op/strings/ToNumber.java | 13 +- .../op/strings/UnicodeDecodeWithOffsets.java | 22 +- .../tensorflow/op/strings/UnicodeScript.java | 11 +- .../op/strings/UnicodeTranscode.java | 11 +- .../tensorflow/op/summary/AudioSummary.java | 12 +- .../op/summary/CreateSummaryDbWriter.java | 3 +- .../op/summary/CreateSummaryFileWriter.java | 4 +- .../op/summary/HistogramSummary.java | 12 +- .../tensorflow/op/summary/ImageSummary.java | 12 +- .../tensorflow/op/summary/ImportEvent.java | 3 +- .../tensorflow/op/summary/MergeSummary.java | 11 +- .../tensorflow/op/summary/ScalarSummary.java | 12 +- .../op/summary/StatsAggregatorSummary.java | 9 +- .../tensorflow/op/summary/TensorSummary.java | 11 +- .../op/summary/WriteAudioSummary.java | 5 +- .../op/summary/WriteGraphSummary.java | 4 +- .../op/summary/WriteHistogramSummary.java | 5 +- .../op/summary/WriteImageSummary.java | 7 +- .../op/summary/WriteScalarSummary.java | 5 +- .../tensorflow/op/summary/WriteSummary.java | 4 +- .../op/train/AccumulatorApplyGradient.java | 4 +- .../op/train/AccumulatorNumAccumulated.java | 12 +- .../op/train/AccumulatorSetGlobalStep.java | 4 +- .../op/train/AccumulatorTakeGradient.java | 6 +- .../tensorflow/op/train/ApplyAdagradDa.java | 3 +- .../op/train/ConditionalAccumulator.java | 15 +- .../op/train/GenerateVocabRemapping.java | 13 +- .../op/train/MergeV2Checkpoints.java | 3 +- .../org/tensorflow/op/train/NegTrain.java | 4 +- .../op/train/ResourceApplyAdagradDa.java | 3 +- .../op/train/ResourceSparseApplyAdadelta.java | 3 +- .../op/train/ResourceSparseApplyAdagrad.java | 3 +- .../train/ResourceSparseApplyAdagradDa.java | 4 +- .../ResourceSparseApplyCenteredRmsProp.java | 3 +- .../op/train/ResourceSparseApplyFtrl.java | 3 +- .../op/train/ResourceSparseApplyMomentum.java | 3 +- .../ResourceSparseApplyProximalAdagrad.java | 3 +- ...rceSparseApplyProximalGradientDescent.java | 3 +- .../op/train/ResourceSparseApplyRmsProp.java | 3 +- .../java/org/tensorflow/op/train/Restore.java | 5 +- .../org/tensorflow/op/train/RestoreSlice.java | 5 +- .../java/org/tensorflow/op/train/Save.java | 3 +- .../org/tensorflow/op/train/SaveSlices.java | 3 +- .../org/tensorflow/op/train/SdcaFprint.java | 12 +- .../tensorflow/op/train/SdcaOptimizer.java | 20 +- .../org/tensorflow/op/train/SdcaShrinkL1.java | 3 +- .../op/train/SparseApplyAdadelta.java | 3 +- .../op/train/SparseApplyAdagrad.java | 3 +- .../op/train/SparseApplyAdagradDa.java | 4 +- .../op/train/SparseApplyCenteredRmsProp.java | 3 +- .../tensorflow/op/train/SparseApplyFtrl.java | 3 +- .../op/train/SparseApplyMomentum.java | 3 +- .../op/train/SparseApplyProximalAdagrad.java | 3 +- .../SparseApplyProximalGradientDescent.java | 3 +- .../op/train/SparseApplyRmsProp.java | 3 +- .../org/tensorflow/op/train/TileGrad.java | 3 +- .../org/tensorflow/AbstractOperation.java | 6 +- .../main/java/org/tensorflow/DataType.java | 119 +- .../main/java/org/tensorflow/DataTypes.java | 53 + .../java/org/tensorflow/EagerOperation.java | 9 +- .../org/tensorflow/EagerOperationBuilder.java | 5 +- .../java/org/tensorflow/EagerSession.java | 29 +- .../java/org/tensorflow/GraphOperation.java | 11 +- .../org/tensorflow/GraphOperationBuilder.java | 5 +- .../java/org/tensorflow/NativeLibrary.java | 2 +- .../src/main/java/org/tensorflow/Operand.java | 13 +- .../java/org/tensorflow/OperationBuilder.java | 42 +- .../src/main/java/org/tensorflow/Output.java | 6 +- .../src/main/java/org/tensorflow/Shape.java | 133 - .../src/main/java/org/tensorflow/Tensor.java | 241 +- .../src/main/java/org/tensorflow/Tensors.java | 192 +- .../internal/buffer/RawBufferHelper.java | 46 + .../internal/buffer/StringTensorBuffer.java | 115 + .../internal/buffer/TensorBuffers.java | 87 + .../c_api/AbstractTF_Buffer.java | 13 +- .../c_api/AbstractTF_Graph.java | 11 +- .../AbstractTF_ImportGraphDefOptions.java | 14 +- .../c_api/AbstractTF_Session.java | 14 +- .../c_api/AbstractTF_SessionOptions.java | 14 +- .../c_api/AbstractTF_Status.java | 11 +- .../c_api/AbstractTF_Tensor.java | 18 +- .../c_api/presets/tensorflow.java | 23 +- .../main/java/org/tensorflow/op/Scope.java | 3 +- .../java/org/tensorflow/op/core/Constant.java | 241 +- .../org/tensorflow/op/core/Gradients.java | 1 - .../java/org/tensorflow/op/core/Zeros.java | 9 +- .../main/java/org/tensorflow/types/TBool.java | 75 + .../java/org/tensorflow/types/TDouble.java | 54 + .../java/org/tensorflow/types/TFloat.java | 55 + .../java/org/tensorflow/types/TInt32.java | 54 + .../java/org/tensorflow/types/TInt64.java | 54 + .../java/org/tensorflow/types/TString.java | 70 + .../java/org/tensorflow/types/TUInt8.java | 54 + .../main/java/org/tensorflow/types/UInt8.java | 48 - .../org/tensorflow/types/family/TDecimal.java | 5 + .../org/tensorflow/types/family/TNumber.java | 5 + .../org/tensorflow/types/family/TType.java | 3 + .../src/main/native/tensor_buffers_jni.cc | 42 + .../src/main/native/tensor_buffers_jni.h | 36 + .../tensorflow/EagerOperationBuilderTest.java | 13 +- .../org/tensorflow/EagerOperationTest.java | 22 +- .../tensorflow/GraphOperationBuilderTest.java | 30 +- .../test/java/org/tensorflow/GraphTest.java | 60 +- .../test/java/org/tensorflow/SessionTest.java | 29 +- .../test/java/org/tensorflow/ShapeTest.java | 104 - .../test/java/org/tensorflow/TensorTest.java | 191 +- .../test/java/org/tensorflow/TestUtil.java | 18 +- .../{ => internal}/c_api/HelloWorldTest.java | 4 +- .../java/org/tensorflow/op/ScopeTest.java | 82 +- .../org/tensorflow/op/core/ConstantTest.java | 55 +- .../op/core/GeneratedOperationsTest.java | 21 +- .../org/tensorflow/op/core/GradientsTest.java | 29 +- .../org/tensorflow/op/core/ZerosTest.java | 36 +- .../types/NumericTypesTestBase.java | 97 + .../java/org/tensorflow/types/TInt32Test.java | 19 + .../processor/operator/OperatorProcessor.java | 48 +- tensorflow-utils/nio-utils/README.md | 163 + tensorflow-utils/nio-utils/pom.xml | 70 + .../java/org/tensorflow/nio/StaticApi.java | 708 +++ .../nio/buffer/BooleanDataBuffer.java | 153 + .../tensorflow/nio/buffer/ByteDataBuffer.java | 153 + .../org/tensorflow/nio/buffer/DataBuffer.java | 138 + .../tensorflow/nio/buffer/DataBuffers.java | 519 ++ .../nio/buffer/DoubleDataBuffer.java | 153 + .../nio/buffer/FloatDataBuffer.java | 153 + .../tensorflow/nio/buffer/IntDataBuffer.java | 153 + .../tensorflow/nio/buffer/LongDataBuffer.java | 153 + .../nio/buffer/ShortDataBuffer.java | 153 + .../buffer/adapter/BooleanDataAdapter.java | 36 + .../nio/buffer/adapter/DataAdapter.java | 34 + .../nio/buffer/adapter/DoubleDataAdapter.java | 36 + .../nio/buffer/adapter/FloatDataAdapter.java | 36 + .../nio/buffer/adapter/IntDataAdapter.java | 36 + .../nio/buffer/adapter/LongDataAdapter.java | 36 + .../nio/buffer/adapter/ShortDataAdapter.java | 36 + .../nio/buffer/impl/AbstractDataBuffer.java | 28 + .../tensorflow/nio/buffer/impl/Validator.java | 117 + .../impl/jdk/AbstractJdkDataBuffer.java | 49 + .../buffer/impl/jdk/ByteJdkDataBuffer.java | 116 + .../buffer/impl/jdk/DoubleJdkDataBuffer.java | 116 + .../buffer/impl/jdk/FloatJdkDataBuffer.java | 116 + .../nio/buffer/impl/jdk/IntJdkDataBuffer.java | 116 + .../buffer/impl/jdk/LongJdkDataBuffer.java | 116 + .../buffer/impl/jdk/ShortJdkDataBuffer.java | 117 + .../nio/buffer/impl/misc/ArrayDataBuffer.java | 107 + .../buffer/impl/misc/BitSetDataBuffer.java | 95 + .../impl/misc/BooleanArrayDataBuffer.java | 104 + .../impl/raw/AbstractRawDataBuffer.java | 76 + .../buffer/impl/raw/BooleanRawDataBuffer.java | 73 + .../buffer/impl/raw/ByteRawDataBuffer.java | 73 + .../buffer/impl/raw/DoubleRawDataBuffer.java | 73 + .../buffer/impl/raw/FloatRawDataBuffer.java | 73 + .../nio/buffer/impl/raw/IntRawDataBuffer.java | 73 + .../buffer/impl/raw/LongRawDataBuffer.java | 73 + .../buffer/impl/raw/ShortRawDataBuffer.java | 73 + .../buffer/impl/raw/UnsafeMemoryHandle.java | 138 + .../virtual/AbstractVirtualDataBuffer.java | 57 + .../virtual/BooleanVirtualDataBuffer.java | 62 + .../impl/virtual/DoubleVirtualDataBuffer.java | 62 + .../impl/virtual/FloatVirtualDataBuffer.java | 62 + .../impl/virtual/IntVirtualDataBuffer.java | 62 + .../impl/virtual/LongVirtualDataBuffer.java | 62 + .../impl/virtual/ShortVirtualDataBuffer.java | 62 + .../impl/virtual/VirtualDataBuffer.java | 27 + .../org/tensorflow/nio/nd/BooleanNdArray.java | 172 + .../org/tensorflow/nio/nd/ByteNdArray.java | 172 + .../org/tensorflow/nio/nd/DoubleNdArray.java | 172 + .../org/tensorflow/nio/nd/FloatNdArray.java | 172 + .../nio/nd/IllegalRankException.java | 24 + .../org/tensorflow/nio/nd/IntNdArray.java | 172 + .../org/tensorflow/nio/nd/LongNdArray.java | 172 + .../java/org/tensorflow/nio/nd/NdArray.java | 355 ++ .../tensorflow/nio/nd/NdArraySequence.java | 29 + .../java/org/tensorflow/nio/nd/NdArrays.java | 467 ++ .../java/org/tensorflow/nio/nd/Shape.java | 143 + .../org/tensorflow/nio/nd/ShortNdArray.java | 172 + .../nio/nd/impl/AbstractNdArray.java | 81 + .../org/tensorflow/nio/nd/impl/Validator.java | 69 + .../nd/impl/dense/AbstractDenseNdArray.java | 112 + .../nd/impl/dense/BooleanDenseNdArray.java | 104 + .../nio/nd/impl/dense/ByteDenseNdArray.java | 104 + .../nio/nd/impl/dense/DataTransfer.java | 119 + .../nio/nd/impl/dense/DenseNdArray.java | 63 + .../nio/nd/impl/dense/DoubleDenseNdArray.java | 104 + .../nio/nd/impl/dense/FloatDenseNdArray.java | 104 + .../nio/nd/impl/dense/IntDenseNdArray.java | 104 + .../nio/nd/impl/dense/LongDenseNdArray.java | 104 + .../nio/nd/impl/dense/ShortDenseNdArray.java | 104 + .../nio/nd/impl/dense/Validator.java | 37 + .../nd/impl/dimension/AbstractDimension.java | 43 + .../nio/nd/impl/dimension/Axis.java | 56 + .../nio/nd/impl/dimension/Dimension.java | 38 + .../nd/impl/dimension/DimensionalSpace.java | 169 + .../nd/impl/dimension/IndexedDimension.java | 61 + .../nd/impl/dimension/ReducedDimension.java | 55 + .../dimension/RelativeDimensionalSpace.java | 32 + .../nd/impl/dimension/UnknownDimension.java | 56 + .../nio/nd/impl/sequence/ElementSequence.java | 42 + .../sequence/IndexedPositionIterator.java | 11 + .../IndexedSequentialPositionIterator.java | 23 + .../nd/impl/sequence/NdPositionIterator.java | 49 + .../nd/impl/sequence/PositionIterator.java | 25 + .../sequence/SequentialPositionIterator.java | 34 + .../impl/sequence/SingleElementSequence.java | 28 + .../java/org/tensorflow/nio/nd/index/All.java | 42 + .../java/org/tensorflow/nio/nd/index/At.java | 48 + .../org/tensorflow/nio/nd/index/Even.java | 37 + .../org/tensorflow/nio/nd/index/Flip.java | 34 + .../org/tensorflow/nio/nd/index/From.java | 38 + .../org/tensorflow/nio/nd/index/Index.java | 76 + .../org/tensorflow/nio/nd/index/Indices.java | 204 + .../java/org/tensorflow/nio/nd/index/Odd.java | 37 + .../org/tensorflow/nio/nd/index/Range.java | 40 + .../org/tensorflow/nio/nd/index/Sequence.java | 39 + .../org/tensorflow/nio/nd/index/Step.java | 38 + .../java/org/tensorflow/nio/nd/index/To.java | 38 + .../nio/benchmark/NdArrayBenchmark.java | 146 + .../nio/buffer/BooleanDataBufferTestBase.java | 65 + .../nio/buffer/ByteDataBufferTestBase.java | 63 + .../nio/buffer/DataBufferTestBase.java | 170 + .../nio/buffer/DoubleDataBufferTestBase.java | 63 + .../nio/buffer/FloatDataBufferTestBase.java | 63 + .../nio/buffer/IntDataBufferTestBase.java | 63 + .../nio/buffer/LongDataBufferTestBase.java | 63 + .../nio/buffer/ShortDataBufferTestBase.java | 63 + .../impl/jdk/ByteJdkDataBufferTest.java | 33 + .../impl/jdk/DoubleJdkDataBufferTest.java | 33 + .../impl/jdk/FloatJdkDataBufferTest.java | 33 + .../buffer/impl/jdk/IntJdkDataBufferTest.java | 33 + .../impl/jdk/LongJdkDataBufferTest.java | 33 + .../impl/jdk/ShortJdkDataBufferTest.java | 33 + .../buffer/impl/misc/ArrayDataBufferTest.java | 39 + .../impl/misc/BitSetDataBufferTest.java | 38 + .../impl/misc/StringArrayDataBufferTest.java | 38 + .../impl/raw/BooleanRawDataBufferTest.java | 33 + .../impl/raw/ByteRawDataBufferTest.java | 33 + .../impl/raw/DoubleRawDataBufferTest.java | 33 + .../impl/raw/FloatRawDataBufferTest.java | 33 + .../buffer/impl/raw/IntRawDataBufferTest.java | 33 + .../impl/raw/LongRawDataBufferTest.java | 33 + .../impl/raw/ShortRawDataBufferTest.java | 33 + .../BigIntegerVirtualDataBufferTest.java | 51 + .../virtual/BooleanVirtualDataBufferTest.java | 39 + .../virtual/DoubleVirtualDataBufferTest.java | 45 + .../virtual/FloatVirtualDataBufferTest.java | 42 + .../virtual/IntVirtualDataBufferTest.java | 42 + .../virtual/LongVirtualDataBufferTest.java | 44 + .../virtual/ShortVirtualDataBufferTest.java | 39 + .../nio/nd/BooleanNdArrayTestBase.java | 136 + .../nio/nd/ByteNdArrayTestBase.java | 142 + .../nio/nd/DoubleNdArrayTestBase.java | 142 + .../nio/nd/FloatNdArrayTestBase.java | 142 + .../tensorflow/nio/nd/IntNdArrayTestBase.java | 142 + .../nio/nd/LongNdArrayTestBase.java | 118 + .../tensorflow/nio/nd/NdArrayTestBase.java | 384 ++ .../java/org/tensorflow/nio/nd/ShapeTest.java | 75 + .../nio/nd/ShortNdArrayTestBase.java | 142 + .../impl/dense/BooleanDenseNdArrayTest.java | 35 + .../nd/impl/dense/ByteDenseNdArrayTest.java | 35 + .../nd/impl/dense/DoubleDenseNdArrayTest.java | 35 + .../nd/impl/dense/FloatDenseNdArrayTest.java | 35 + .../nd/impl/dense/IntDenseNdArrayTest.java | 35 + .../nd/impl/dense/LongDenseNdArrayTest.java | 35 + .../nd/impl/dense/ShortDenseNdArrayTest.java | 35 + .../nd/impl/dense/StringDenseNdArrayTest.java | 43 + .../nd/impl/sequence/ElementSequenceTest.java | 59 + .../nio-utils/src/test/resources/1500x916.jpg | Bin 0 -> 435586 bytes tensorflow-utils/pom.xml | 22 + 1131 files changed, 25181 insertions(+), 10149 deletions(-) create mode 100644 tensorflow-core/tensorflow-core-api/src/bazel/api_def/api_def_KafkaDataset.pbtxt rename tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/{ => internal}/c_api/Compute_func_Pointer_TF_OpKernelContext.java (76%) rename tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/{ => internal}/c_api/Create_func_TF_OpKernelConstruction.java (91%) rename tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/{ => internal}/c_api/Deallocator_Pointer_long_Pointer.java (85%) rename tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/{ => internal}/c_api/Delete_func_Pointer.java (73%) rename tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/{ => internal}/c_api/Listener_BytePointer.java (80%) rename tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/{ => internal}/c_api/Listener_String.java (73%) rename tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/{ => internal}/c_api/Shape_inference_func_TF_ShapeInferenceContext_TF_Status.java (80%) rename tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/{ => internal}/c_api/TFE_Context.java (81%) rename tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/{ => internal}/c_api/TFE_ContextOptions.java (71%) rename tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/{ => internal}/c_api/TFE_Op.java (83%) rename tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/{ => internal}/c_api/TFE_TensorDebugInfo.java (76%) rename tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/{ => internal}/c_api/TFE_TensorHandle.java (79%) rename tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/{ => internal}/c_api/TF_ApiDefMap.java (82%) rename tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/{ => internal}/c_api/TF_AttrMetadata.java (92%) rename tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/{ => internal}/c_api/TF_Buffer.java (88%) rename tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/{ => internal}/c_api/TF_DeprecatedSession.java (78%) rename tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/{ => internal}/c_api/TF_DeviceList.java (70%) rename tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/{ => internal}/c_api/TF_DimensionHandle.java (71%) rename tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/{ => internal}/c_api/TF_Function.java (77%) rename tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/{ => internal}/c_api/TF_FunctionOptions.java (73%) rename tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/{ => internal}/c_api/TF_Graph.java (73%) rename tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/{ => internal}/c_api/TF_ImportGraphDefOptions.java (63%) rename tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/{ => internal}/c_api/TF_ImportGraphDefResults.java (75%) rename tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/{ => internal}/c_api/TF_Input.java (85%) rename tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/{ => internal}/c_api/TF_KernelBuilder.java (83%) rename tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/{ => internal}/c_api/TF_Library.java (77%) rename tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/{ => internal}/c_api/TF_OpDefinitionBuilder.java (71%) rename tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/{ => internal}/c_api/TF_OpKernelConstruction.java (71%) rename tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/{ => internal}/c_api/TF_OpKernelContext.java (71%) rename tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/{ => internal}/c_api/TF_Operation.java (76%) rename tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/{ => internal}/c_api/TF_OperationDescription.java (74%) rename tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/{ => internal}/c_api/TF_Output.java (85%) rename tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/{ => internal}/c_api/TF_Server.java (83%) rename tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/{ => internal}/c_api/TF_Session.java (68%) rename tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/{ => internal}/c_api/TF_SessionOptions.java (66%) rename tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/{ => internal}/c_api/TF_ShapeHandle.java (70%) rename tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/{ => internal}/c_api/TF_ShapeInferenceContext.java (71%) rename tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/{ => internal}/c_api/TF_Status.java (60%) rename tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/{ => internal}/c_api/TF_Tensor.java (80%) rename tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/{ => internal}/c_api/TF_WhileParams.java (88%) rename tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/{ => internal}/c_api/Tensor.java (83%) rename tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/{ => internal}/c_api/global/tensorflow.java (99%) create mode 100644 tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/WriteKafka.java create mode 100644 tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/DataTypes.java delete mode 100644 tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/Shape.java create mode 100644 tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/internal/buffer/RawBufferHelper.java create mode 100644 tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/internal/buffer/StringTensorBuffer.java create mode 100644 tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/internal/buffer/TensorBuffers.java rename tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/{ => internal}/c_api/AbstractTF_Buffer.java (83%) rename tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/{ => internal}/c_api/AbstractTF_Graph.java (83%) rename tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/{ => internal}/c_api/AbstractTF_ImportGraphDefOptions.java (78%) rename tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/{ => internal}/c_api/AbstractTF_Session.java (83%) rename tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/{ => internal}/c_api/AbstractTF_SessionOptions.java (78%) rename tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/{ => internal}/c_api/AbstractTF_Status.java (83%) rename tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/{ => internal}/c_api/AbstractTF_Tensor.java (78%) rename tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/{ => internal}/c_api/presets/tensorflow.java (94%) create mode 100644 tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TBool.java create mode 100644 tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TDouble.java create mode 100644 tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TFloat.java create mode 100644 tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TInt32.java create mode 100644 tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TInt64.java create mode 100644 tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TString.java create mode 100644 tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TUInt8.java delete mode 100644 tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/UInt8.java create mode 100644 tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/family/TDecimal.java create mode 100644 tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/family/TNumber.java create mode 100644 tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/family/TType.java create mode 100644 tensorflow-core/tensorflow-core-api/src/main/native/tensor_buffers_jni.cc create mode 100644 tensorflow-core/tensorflow-core-api/src/main/native/tensor_buffers_jni.h delete mode 100644 tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/ShapeTest.java rename tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/{ => internal}/c_api/HelloWorldTest.java (89%) create mode 100644 tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/types/NumericTypesTestBase.java create mode 100644 tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/types/TInt32Test.java create mode 100644 tensorflow-utils/nio-utils/README.md create mode 100644 tensorflow-utils/nio-utils/pom.xml create mode 100644 tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/StaticApi.java create mode 100644 tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/BooleanDataBuffer.java create mode 100644 tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/ByteDataBuffer.java create mode 100644 tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/DataBuffer.java create mode 100644 tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/DataBuffers.java create mode 100644 tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/DoubleDataBuffer.java create mode 100644 tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/FloatDataBuffer.java create mode 100644 tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/IntDataBuffer.java create mode 100644 tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/LongDataBuffer.java create mode 100644 tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/ShortDataBuffer.java create mode 100644 tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/adapter/BooleanDataAdapter.java create mode 100644 tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/adapter/DataAdapter.java create mode 100644 tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/adapter/DoubleDataAdapter.java create mode 100644 tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/adapter/FloatDataAdapter.java create mode 100644 tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/adapter/IntDataAdapter.java create mode 100644 tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/adapter/LongDataAdapter.java create mode 100644 tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/adapter/ShortDataAdapter.java create mode 100644 tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/AbstractDataBuffer.java create mode 100644 tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/Validator.java create mode 100644 tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/jdk/AbstractJdkDataBuffer.java create mode 100644 tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/jdk/ByteJdkDataBuffer.java create mode 100644 tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/jdk/DoubleJdkDataBuffer.java create mode 100644 tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/jdk/FloatJdkDataBuffer.java create mode 100644 tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/jdk/IntJdkDataBuffer.java create mode 100644 tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/jdk/LongJdkDataBuffer.java create mode 100644 tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/jdk/ShortJdkDataBuffer.java create mode 100644 tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/misc/ArrayDataBuffer.java create mode 100644 tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/misc/BitSetDataBuffer.java create mode 100644 tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/misc/BooleanArrayDataBuffer.java create mode 100644 tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/raw/AbstractRawDataBuffer.java create mode 100644 tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/raw/BooleanRawDataBuffer.java create mode 100644 tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/raw/ByteRawDataBuffer.java create mode 100644 tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/raw/DoubleRawDataBuffer.java create mode 100644 tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/raw/FloatRawDataBuffer.java create mode 100644 tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/raw/IntRawDataBuffer.java create mode 100644 tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/raw/LongRawDataBuffer.java create mode 100644 tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/raw/ShortRawDataBuffer.java create mode 100644 tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/raw/UnsafeMemoryHandle.java create mode 100644 tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/virtual/AbstractVirtualDataBuffer.java create mode 100644 tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/virtual/BooleanVirtualDataBuffer.java create mode 100644 tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/virtual/DoubleVirtualDataBuffer.java create mode 100644 tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/virtual/FloatVirtualDataBuffer.java create mode 100644 tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/virtual/IntVirtualDataBuffer.java create mode 100644 tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/virtual/LongVirtualDataBuffer.java create mode 100644 tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/virtual/ShortVirtualDataBuffer.java create mode 100644 tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/virtual/VirtualDataBuffer.java create mode 100644 tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/BooleanNdArray.java create mode 100644 tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/ByteNdArray.java create mode 100644 tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/DoubleNdArray.java create mode 100644 tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/FloatNdArray.java create mode 100644 tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/IllegalRankException.java create mode 100644 tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/IntNdArray.java create mode 100644 tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/LongNdArray.java create mode 100644 tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/NdArray.java create mode 100644 tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/NdArraySequence.java create mode 100644 tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/NdArrays.java create mode 100644 tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/Shape.java create mode 100644 tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/ShortNdArray.java create mode 100644 tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/AbstractNdArray.java create mode 100644 tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/Validator.java create mode 100644 tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dense/AbstractDenseNdArray.java create mode 100644 tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dense/BooleanDenseNdArray.java create mode 100644 tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dense/ByteDenseNdArray.java create mode 100644 tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dense/DataTransfer.java create mode 100644 tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dense/DenseNdArray.java create mode 100644 tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dense/DoubleDenseNdArray.java create mode 100644 tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dense/FloatDenseNdArray.java create mode 100644 tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dense/IntDenseNdArray.java create mode 100644 tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dense/LongDenseNdArray.java create mode 100644 tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dense/ShortDenseNdArray.java create mode 100644 tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dense/Validator.java create mode 100644 tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dimension/AbstractDimension.java create mode 100644 tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dimension/Axis.java create mode 100644 tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dimension/Dimension.java create mode 100644 tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dimension/DimensionalSpace.java create mode 100644 tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dimension/IndexedDimension.java create mode 100644 tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dimension/ReducedDimension.java create mode 100644 tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dimension/RelativeDimensionalSpace.java create mode 100644 tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dimension/UnknownDimension.java create mode 100644 tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/sequence/ElementSequence.java create mode 100644 tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/sequence/IndexedPositionIterator.java create mode 100644 tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/sequence/IndexedSequentialPositionIterator.java create mode 100644 tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/sequence/NdPositionIterator.java create mode 100644 tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/sequence/PositionIterator.java create mode 100644 tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/sequence/SequentialPositionIterator.java create mode 100644 tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/sequence/SingleElementSequence.java create mode 100644 tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/index/All.java create mode 100644 tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/index/At.java create mode 100644 tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/index/Even.java create mode 100644 tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/index/Flip.java create mode 100644 tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/index/From.java create mode 100644 tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/index/Index.java create mode 100644 tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/index/Indices.java create mode 100644 tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/index/Odd.java create mode 100644 tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/index/Range.java create mode 100644 tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/index/Sequence.java create mode 100644 tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/index/Step.java create mode 100644 tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/index/To.java create mode 100644 tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/benchmark/NdArrayBenchmark.java create mode 100644 tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/BooleanDataBufferTestBase.java create mode 100644 tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/ByteDataBufferTestBase.java create mode 100644 tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/DataBufferTestBase.java create mode 100644 tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/DoubleDataBufferTestBase.java create mode 100644 tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/FloatDataBufferTestBase.java create mode 100644 tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/IntDataBufferTestBase.java create mode 100644 tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/LongDataBufferTestBase.java create mode 100644 tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/ShortDataBufferTestBase.java create mode 100644 tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/jdk/ByteJdkDataBufferTest.java create mode 100644 tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/jdk/DoubleJdkDataBufferTest.java create mode 100644 tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/jdk/FloatJdkDataBufferTest.java create mode 100644 tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/jdk/IntJdkDataBufferTest.java create mode 100644 tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/jdk/LongJdkDataBufferTest.java create mode 100644 tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/jdk/ShortJdkDataBufferTest.java create mode 100644 tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/misc/ArrayDataBufferTest.java create mode 100644 tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/misc/BitSetDataBufferTest.java create mode 100644 tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/misc/StringArrayDataBufferTest.java create mode 100644 tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/raw/BooleanRawDataBufferTest.java create mode 100644 tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/raw/ByteRawDataBufferTest.java create mode 100644 tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/raw/DoubleRawDataBufferTest.java create mode 100644 tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/raw/FloatRawDataBufferTest.java create mode 100644 tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/raw/IntRawDataBufferTest.java create mode 100644 tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/raw/LongRawDataBufferTest.java create mode 100644 tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/raw/ShortRawDataBufferTest.java create mode 100644 tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/virtual/BigIntegerVirtualDataBufferTest.java create mode 100644 tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/virtual/BooleanVirtualDataBufferTest.java create mode 100644 tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/virtual/DoubleVirtualDataBufferTest.java create mode 100644 tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/virtual/FloatVirtualDataBufferTest.java create mode 100644 tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/virtual/IntVirtualDataBufferTest.java create mode 100644 tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/virtual/LongVirtualDataBufferTest.java create mode 100644 tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/virtual/ShortVirtualDataBufferTest.java create mode 100644 tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/BooleanNdArrayTestBase.java create mode 100644 tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/ByteNdArrayTestBase.java create mode 100644 tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/DoubleNdArrayTestBase.java create mode 100644 tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/FloatNdArrayTestBase.java create mode 100644 tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/IntNdArrayTestBase.java create mode 100644 tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/LongNdArrayTestBase.java create mode 100644 tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/NdArrayTestBase.java create mode 100644 tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/ShapeTest.java create mode 100644 tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/ShortNdArrayTestBase.java create mode 100644 tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/impl/dense/BooleanDenseNdArrayTest.java create mode 100644 tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/impl/dense/ByteDenseNdArrayTest.java create mode 100644 tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/impl/dense/DoubleDenseNdArrayTest.java create mode 100644 tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/impl/dense/FloatDenseNdArrayTest.java create mode 100644 tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/impl/dense/IntDenseNdArrayTest.java create mode 100644 tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/impl/dense/LongDenseNdArrayTest.java create mode 100644 tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/impl/dense/ShortDenseNdArrayTest.java create mode 100644 tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/impl/dense/StringDenseNdArrayTest.java create mode 100644 tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/impl/sequence/ElementSequenceTest.java create mode 100644 tensorflow-utils/nio-utils/src/test/resources/1500x916.jpg create mode 100644 tensorflow-utils/pom.xml diff --git a/pom.xml b/pom.xml index 9cae184350a..d676860cd23 100644 --- a/pom.xml +++ b/pom.xml @@ -30,11 +30,40 @@ tensorflow-core - + tensorflow-utils + + 1.8 + 1.8 + 4.12 + 1.21 + + + + + + junit + junit + ${junit.version} + + + org.openjdk.jmh + jmh-core + ${jmh.version} + test + + + org.openjdk.jmh + jmh-generator-annprocess + ${jmh.version} + test + + + + @@ -64,6 +93,7 @@ + @@ -72,6 +102,7 @@ http://www.tensorflow.org + diff --git a/tensorflow-core/tensorflow-core-api/pom.xml b/tensorflow-core/tensorflow-core-api/pom.xml index 4e26ca21853..055c2b9ae5d 100644 --- a/tensorflow-core/tensorflow-core-api/pom.xml +++ b/tensorflow-core/tensorflow-core-api/pom.xml @@ -26,6 +26,11 @@ ${project.version} true + + org.tensorflow + nio-utils + ${project.version} + junit junit @@ -71,10 +76,6 @@ maven-compiler-plugin 3.8.0 - - 1.7 - 1.7 - default-compile @@ -94,7 +95,7 @@ - org/tensorflow/c_api/presets/*.java + org/tensorflow/internal/c_api/presets/*.java @@ -145,6 +146,7 @@ ${project.basedir}/src/main/native/server_jni.cc ${project.basedir}/src/main/native/session_jni.cc ${project.basedir}/src/main/native/tensorflow_jni.cc + ${project.basedir}/src/main/native/tensor_buffers_jni.cc ${project.basedir}/src/main/native/tensor_jni.cc ${project.basedir}/src/main/native/utils_jni.cc @@ -199,7 +201,7 @@ ${javacpp.parser.skip} ${project.basedir}/src/gen/java - org.tensorflow.c_api.presets.* + org.tensorflow.internal.c_api.presets.* @@ -209,9 +211,9 @@ build - ${project.build.directory}/native/org/tensorflow/c_api/${javacpp.platform}${javacpp.platform.extension}/ + ${project.build.directory}/native/org/tensorflow/internal/c_api/${javacpp.platform}${javacpp.platform.extension}/ ${javacpp.compiler.skip} - org.tensorflow.c_api.** + org.tensorflow.internal.c_api.** true true @@ -222,6 +224,9 @@ maven-surefire-plugin 2.22.0 + + -Djava.library.path=${project.build.directory}/native/org/tensorflow/internal/c_api/${javacpp.platform}${javacpp.platform.extension} + ${project.build.directory}/native/ @@ -254,16 +259,16 @@ - org/tensorflow/c_api/${javacpp.platform}${javacpp.platform.extension}/ + org/tensorflow/internal/c_api/${javacpp.platform}${javacpp.platform.extension}/ ${project.build.directory}/native - org/tensorflow/c_api/${javacpp.platform}${javacpp.platform.extension}/*.exp - org/tensorflow/c_api/${javacpp.platform}${javacpp.platform.extension}/*.lib - org/tensorflow/c_api/${javacpp.platform}${javacpp.platform.extension}/*.obj - org/tensorflow/c_api/${javacpp.platform}${javacpp.platform.extension}/*mklml* - org/tensorflow/c_api/${javacpp.platform}${javacpp.platform.extension}/*iomp5* - org/tensorflow/c_api/${javacpp.platform}${javacpp.platform.extension}/*msvcr120* + org/tensorflow/internal/c_api/${javacpp.platform}${javacpp.platform.extension}/*.exp + org/tensorflow/internal/c_api/${javacpp.platform}${javacpp.platform.extension}/*.lib + org/tensorflow/internal/c_api/${javacpp.platform}${javacpp.platform.extension}/*.obj + org/tensorflow/internal/c_api/${javacpp.platform}${javacpp.platform.extension}/*mklml* + org/tensorflow/internal/c_api/${javacpp.platform}${javacpp.platform.extension}/*iomp5* + org/tensorflow/internal/c_api/${javacpp.platform}${javacpp.platform.extension}/*msvcr120* diff --git a/tensorflow-core/tensorflow-core-api/src/bazel/api_def/api_def_KafkaDataset.pbtxt b/tensorflow-core/tensorflow-core-api/src/bazel/api_def/api_def_KafkaDataset.pbtxt new file mode 100644 index 00000000000..5f0da216cbb --- /dev/null +++ b/tensorflow-core/tensorflow-core-api/src/bazel/api_def/api_def_KafkaDataset.pbtxt @@ -0,0 +1,6 @@ +op { + graph_op_name: "KafkaDataset" + endpoint { + name: "data.KafkaDataset" + } +} diff --git a/tensorflow-core/tensorflow-core-api/src/bazel/op_generator/java_defs.h b/tensorflow-core/tensorflow-core-api/src/bazel/op_generator/java_defs.h index 0f1002b5953..8a3e16dbf3a 100644 --- a/tensorflow-core/tensorflow-core-api/src/bazel/op_generator/java_defs.h +++ b/tensorflow-core/tensorflow-core-api/src/bazel/op_generator/java_defs.h @@ -97,22 +97,25 @@ class Type { static Type IterableOf(const Type& type) { return Interface("Iterable").add_parameter(type); } + static Type DataTypeOf(const Type& type) { + return Class("DataType", "org.tensorflow").add_parameter(type); + } static Type ForDataType(DataType data_type) { switch (data_type) { case DataType::DT_BOOL: - return Class("Boolean"); + return Class("TBool", "org.tensorflow.types"); case DataType::DT_STRING: - return Class("String"); + return Class("TString", "org.tensorflow.types"); case DataType::DT_FLOAT: - return Class("Float"); + return Class("TFloat", "org.tensorflow.types"); case DataType::DT_DOUBLE: - return Class("Double"); + return Class("TDouble", "org.tensorflow.types"); case DataType::DT_UINT8: - return Class("UInt8", "org.tensorflow.types"); + return Class("TUInt8", "org.tensorflow.types"); case DataType::DT_INT32: - return Class("Integer"); + return Class("TInt32", "org.tensorflow.types"); case DataType::DT_INT64: - return Class("Long"); + return Class("TInt64", "org.tensorflow.types"); case DataType::DT_RESOURCE: // TODO(karllessard) create a Resource utility class that could be // used to store a resource and its type (passed in a second argument). diff --git a/tensorflow-core/tensorflow-core-api/src/bazel/op_generator/op_generator.cc b/tensorflow-core/tensorflow-core-api/src/bazel/op_generator/op_generator.cc index 92cb406e868..5fd3d65ffa9 100644 --- a/tensorflow-core/tensorflow-core-api/src/bazel/op_generator/op_generator.cc +++ b/tensorflow-core/tensorflow-core-api/src/bazel/op_generator/op_generator.cc @@ -124,24 +124,16 @@ void WriteSetAttrDirective(const AttributeSpec& attr, bool optional, .EndLine() .BeginBlock("for (int i = 0; i < " + array_name + ".length; ++i)") .Append(array_name + "[i] = "); - if (attr.type().kind() == Type::GENERIC) { - writer->Append("DataType.fromClass(" + var_name + ".get(i));"); - } else { - writer->Append(var_name + ".get(i);"); - } + writer->Append(var_name + ".get(i);"); writer->EndLine() .EndBlock() .Append("opBuilder.setAttr(\"" + attr.op_def_name() + "\", ") .Append(array_name + ");") .EndLine(); } else { - writer->Append("opBuilder.setAttr(\"" + attr.op_def_name() + "\", "); - if (attr.var().type().name() == "Class") { - writer->Append("DataType.fromClass(" + var_name + "));"); - } else { - writer->Append(var_name + ");"); - } - writer->EndLine(); + writer->Append("opBuilder.setAttr(\"" + attr.op_def_name() + "\", ") + .Append(var_name + ");") + .EndLine(); } } @@ -179,7 +171,7 @@ void RenderSecondaryFactoryMethod(const OpSpec& op, const Type& op_class, if (attr.type().kind() == Type::GENERIC && default_types.find(attr.type().name()) != default_types.end()) { factory_statement << default_types.at(attr.type().name()).name() - << ".class"; + << ".DTYPE"; } else { AddArgument(attr.var(), attr.description(), &factory, &factory_doc); factory_statement << attr.var().name(); diff --git a/tensorflow-core/tensorflow-core-api/src/bazel/op_generator/op_specs.cc b/tensorflow-core/tensorflow-core-api/src/bazel/op_generator/op_specs.cc index 004c6b1bfa6..1de4742db18 100644 --- a/tensorflow-core/tensorflow-core-api/src/bazel/op_generator/op_specs.cc +++ b/tensorflow-core/tensorflow-core-api/src/bazel/op_generator/op_specs.cc @@ -148,7 +148,7 @@ std::pair TypeResolver::TypesOf(const OpDef_AttrDef& attr_def, types = MakeTypePair(Type::Class("Boolean"), Type::Boolean()); } else if (attr_type == "shape") { - types = MakeTypePair(Type::Class("Shape", "org.tensorflow")); + types = MakeTypePair(Type::Class("Shape", "org.tensorflow.nio.nd")); } else if (attr_type == "tensor") { types = MakeTypePair(Type::Class("Tensor", "org.tensorflow") @@ -157,7 +157,7 @@ std::pair TypeResolver::TypesOf(const OpDef_AttrDef& attr_def, } else if (attr_type == "type") { Type type = *iterable_out ? Type::Wildcard() : NextGeneric(); if (IsRealNumbers(attr_def.allowed_values())) { - type.add_supertype(Type::Class("Number")); + type.add_supertype(Type::Class("TNumber", "org.tensorflow.types.family")); } types = MakeTypePair(type, Type::Enum("DataType", "org.tensorflow")); @@ -305,7 +305,7 @@ AttributeSpec CreateAttribute(const OpDef_AttrDef& attr_def, bool iterable = false; std::pair types = type_resolver->TypesOf(attr_def, &iterable); Type var_type = types.first.kind() == Type::GENERIC - ? Type::ClassOf(types.first) + ? Type::DataTypeOf(types.first) : types.first; if (iterable) { var_type = Type::ListOf(var_type); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/AudioOps.java b/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/AudioOps.java index e284ca9edb6..6d4c1fdd75b 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/AudioOps.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/AudioOps.java @@ -5,6 +5,9 @@ import org.tensorflow.op.audio.DecodeWav; import org.tensorflow.op.audio.EncodeWav; import org.tensorflow.op.audio.Mfcc; +import org.tensorflow.types.TFloat; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.TString; /** * An API for building {@code audio} operations as {@link Op Op}s @@ -18,33 +21,6 @@ public final class AudioOps { this.scope = scope; } - /** - * Builds an {@link AudioSpectrogram} operation - * - * @param input Float representation of audio data. - * @param windowSize How wide the input window is in samples. For the highest efficiency - * @param stride How widely apart the center of adjacent sample windows should be. - * @param options carries optional attributes values - * @return a new instance of AudioSpectrogram - * @see org.tensorflow.op.audio.AudioSpectrogram - */ - public AudioSpectrogram audioSpectrogram(Operand input, Long windowSize, Long stride, - AudioSpectrogram.Options... options) { - return AudioSpectrogram.create(scope, input, windowSize, stride, options); - } - - /** - * Builds an {@link EncodeWav} operation - * - * @param audio 2-D with shape `[length, channels]`. - * @param sampleRate Scalar containing the sample frequency. - * @return a new instance of EncodeWav - * @see org.tensorflow.op.audio.EncodeWav - */ - public EncodeWav encodeWav(Operand audio, Operand sampleRate) { - return EncodeWav.create(scope, audio, sampleRate); - } - /** * Builds an {@link DecodeWav} operation * @@ -53,7 +29,7 @@ public EncodeWav encodeWav(Operand audio, Operand sampleRate) { * @return a new instance of DecodeWav * @see org.tensorflow.op.audio.DecodeWav */ - public DecodeWav decodeWav(Operand contents, DecodeWav.Options... options) { + public DecodeWav decodeWav(Operand contents, DecodeWav.Options... options) { return DecodeWav.create(scope, contents, options); } @@ -66,8 +42,35 @@ public DecodeWav decodeWav(Operand contents, DecodeWav.Options... option * @return a new instance of Mfcc * @see org.tensorflow.op.audio.Mfcc */ - public Mfcc mfcc(Operand spectrogram, Operand sampleRate, + public Mfcc mfcc(Operand spectrogram, Operand sampleRate, Mfcc.Options... options) { return Mfcc.create(scope, spectrogram, sampleRate, options); } + + /** + * Builds an {@link EncodeWav} operation + * + * @param audio 2-D with shape `[length, channels]`. + * @param sampleRate Scalar containing the sample frequency. + * @return a new instance of EncodeWav + * @see org.tensorflow.op.audio.EncodeWav + */ + public EncodeWav encodeWav(Operand audio, Operand sampleRate) { + return EncodeWav.create(scope, audio, sampleRate); + } + + /** + * Builds an {@link AudioSpectrogram} operation + * + * @param input Float representation of audio data. + * @param windowSize How wide the input window is in samples. For the highest efficiency + * @param stride How widely apart the center of adjacent sample windows should be. + * @param options carries optional attributes values + * @return a new instance of AudioSpectrogram + * @see org.tensorflow.op.audio.AudioSpectrogram + */ + public AudioSpectrogram audioSpectrogram(Operand input, Long windowSize, Long stride, + AudioSpectrogram.Options... options) { + return AudioSpectrogram.create(scope, input, windowSize, stride, options); + } } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/BitwiseOps.java b/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/BitwiseOps.java index 51798c83e24..37b1105fb83 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/BitwiseOps.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/BitwiseOps.java @@ -7,6 +7,7 @@ import org.tensorflow.op.bitwise.Invert; import org.tensorflow.op.bitwise.LeftShift; import org.tensorflow.op.bitwise.RightShift; +import org.tensorflow.types.family.TNumber; /** * An API for building {@code bitwise} operations as {@link Op Op}s @@ -21,50 +22,50 @@ public final class BitwiseOps { } /** - * Builds an {@link Invert} operation + * Builds an {@link BitwiseOr} operation * * @param x - * @return a new instance of Invert - * @see org.tensorflow.op.bitwise.Invert + * @param y + * @return a new instance of BitwiseOr + * @see org.tensorflow.op.bitwise.BitwiseOr */ - public Invert invert(Operand x) { - return Invert.create(scope, x); + public BitwiseOr bitwiseOr(Operand x, Operand y) { + return BitwiseOr.create(scope, x, y); } /** - * Builds an {@link BitwiseAnd} operation + * Builds an {@link BitwiseXor} operation * * @param x * @param y - * @return a new instance of BitwiseAnd - * @see org.tensorflow.op.bitwise.BitwiseAnd + * @return a new instance of BitwiseXor + * @see org.tensorflow.op.bitwise.BitwiseXor */ - public BitwiseAnd bitwiseAnd(Operand x, Operand y) { - return BitwiseAnd.create(scope, x, y); + public BitwiseXor bitwiseXor(Operand x, Operand y) { + return BitwiseXor.create(scope, x, y); } /** - * Builds an {@link BitwiseOr} operation + * Builds an {@link BitwiseAnd} operation * * @param x * @param y - * @return a new instance of BitwiseOr - * @see org.tensorflow.op.bitwise.BitwiseOr + * @return a new instance of BitwiseAnd + * @see org.tensorflow.op.bitwise.BitwiseAnd */ - public BitwiseOr bitwiseOr(Operand x, Operand y) { - return BitwiseOr.create(scope, x, y); + public BitwiseAnd bitwiseAnd(Operand x, Operand y) { + return BitwiseAnd.create(scope, x, y); } /** - * Builds an {@link LeftShift} operation + * Builds an {@link Invert} operation * * @param x - * @param y - * @return a new instance of LeftShift - * @see org.tensorflow.op.bitwise.LeftShift + * @return a new instance of Invert + * @see org.tensorflow.op.bitwise.Invert */ - public LeftShift leftShift(Operand x, Operand y) { - return LeftShift.create(scope, x, y); + public Invert invert(Operand x) { + return Invert.create(scope, x); } /** @@ -75,19 +76,19 @@ public LeftShift leftShift(Operand x, Operand y) { * @return a new instance of RightShift * @see org.tensorflow.op.bitwise.RightShift */ - public RightShift rightShift(Operand x, Operand y) { + public RightShift rightShift(Operand x, Operand y) { return RightShift.create(scope, x, y); } /** - * Builds an {@link BitwiseXor} operation + * Builds an {@link LeftShift} operation * * @param x * @param y - * @return a new instance of BitwiseXor - * @see org.tensorflow.op.bitwise.BitwiseXor + * @return a new instance of LeftShift + * @see org.tensorflow.op.bitwise.LeftShift */ - public BitwiseXor bitwiseXor(Operand x, Operand y) { - return BitwiseXor.create(scope, x, y); + public LeftShift leftShift(Operand x, Operand y) { + return LeftShift.create(scope, x, y); } } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/DataOps.java b/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/DataOps.java index 6bb3e67e93f..c9a4fbff122 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/DataOps.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/DataOps.java @@ -1,20 +1,25 @@ package org.tensorflow.op; import java.util.List; +import org.tensorflow.DataType; import org.tensorflow.Operand; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.data.AnonymousIterator; import org.tensorflow.op.data.DeserializeIterator; import org.tensorflow.op.data.IteratorGetNext; import org.tensorflow.op.data.IteratorGetNextAsOptional; import org.tensorflow.op.data.IteratorGetNextSync; import org.tensorflow.op.data.IteratorToStringHandle; +import org.tensorflow.op.data.KafkaDataset; import org.tensorflow.op.data.MakeIterator; import org.tensorflow.op.data.OptionalFromValue; import org.tensorflow.op.data.OptionalGetValue; import org.tensorflow.op.data.OptionalHasValue; import org.tensorflow.op.data.OptionalNone; import org.tensorflow.op.data.SerializeIterator; +import org.tensorflow.types.TBool; +import org.tensorflow.types.TInt64; +import org.tensorflow.types.TString; /** * An API for building {@code data} operations as {@link Op Op}s @@ -29,13 +34,48 @@ public final class DataOps { } /** - * Builds an {@link OptionalNone} operation + * Builds an {@link IteratorGetNextAsOptional} operation * - * @return a new instance of OptionalNone - * @see org.tensorflow.op.data.OptionalNone + * @param iterator + * @param outputTypes + * @param outputShapes + * @return a new instance of IteratorGetNextAsOptional + * @see org.tensorflow.op.data.IteratorGetNextAsOptional */ - public OptionalNone optionalNone() { - return OptionalNone.create(scope); + public IteratorGetNextAsOptional iteratorGetNextAsOptional(Operand iterator, + List> outputTypes, List outputShapes) { + return IteratorGetNextAsOptional.create(scope, iterator, outputTypes, outputShapes); + } + + /** + * Builds an {@link KafkaDataset} operation + * + * @param topics A `tf.string` tensor containing one or more subscriptions, + * @param servers A list of bootstrap servers. + * @param group The consumer group id. + * @param eof If True, the kafka reader will stop on EOF. + * @param timeout The timeout value for the Kafka Consumer to wait + * @param configGlobal A `tf.string` tensor containing global configuration + * @param configTopic A `tf.string` tensor containing topic configuration + * @return a new instance of KafkaDataset + * @see org.tensorflow.op.data.KafkaDataset + */ + public KafkaDataset kafkaDataset(Operand topics, Operand servers, + Operand group, Operand eof, Operand timeout, + Operand configGlobal, Operand configTopic) { + return KafkaDataset.create(scope, topics, servers, group, eof, timeout, configGlobal, configTopic); + } + + /** + * Builds an {@link DeserializeIterator} operation + * + * @param resourceHandle A handle to an iterator resource. + * @param serialized A variant tensor storing the state of the iterator contained in the + * @return a new instance of DeserializeIterator + * @see org.tensorflow.op.data.DeserializeIterator + */ + public DeserializeIterator deserializeIterator(Operand resourceHandle, Operand serialized) { + return DeserializeIterator.create(scope, resourceHandle, serialized); } /** @@ -46,22 +86,19 @@ public OptionalNone optionalNone() { * @return a new instance of AnonymousIterator * @see org.tensorflow.op.data.AnonymousIterator */ - public AnonymousIterator anonymousIterator(List> outputTypes, List outputShapes) { + public AnonymousIterator anonymousIterator(List> outputTypes, + List outputShapes) { return AnonymousIterator.create(scope, outputTypes, outputShapes); } /** - * Builds an {@link OptionalGetValue} operation + * Builds an {@link OptionalNone} operation * - * @param optional - * @param outputTypes - * @param outputShapes - * @return a new instance of OptionalGetValue - * @see org.tensorflow.op.data.OptionalGetValue + * @return a new instance of OptionalNone + * @see org.tensorflow.op.data.OptionalNone */ - public OptionalGetValue optionalGetValue(Operand optional, List> outputTypes, - List outputShapes) { - return OptionalGetValue.create(scope, optional, outputTypes, outputShapes); + public OptionalNone optionalNone() { + return OptionalNone.create(scope); } /** @@ -73,11 +110,25 @@ public OptionalGetValue optionalGetValue(Operand optional, List> out * @return a new instance of IteratorGetNext * @see org.tensorflow.op.data.IteratorGetNext */ - public IteratorGetNext iteratorGetNext(Operand iterator, List> outputTypes, + public IteratorGetNext iteratorGetNext(Operand iterator, List> outputTypes, List outputShapes) { return IteratorGetNext.create(scope, iterator, outputTypes, outputShapes); } + /** + * Builds an {@link IteratorGetNextSync} operation + * + * @param iterator + * @param outputTypes + * @param outputShapes + * @return a new instance of IteratorGetNextSync + * @see org.tensorflow.op.data.IteratorGetNextSync + */ + public IteratorGetNextSync iteratorGetNextSync(Operand iterator, List> outputTypes, + List outputShapes) { + return IteratorGetNextSync.create(scope, iterator, outputTypes, outputShapes); + } + /** * Builds an {@link OptionalFromValue} operation * @@ -90,17 +141,17 @@ public OptionalFromValue optionalFromValue(Iterable> components) { } /** - * Builds an {@link IteratorGetNextAsOptional} operation + * Builds an {@link OptionalGetValue} operation * - * @param iterator + * @param optional * @param outputTypes * @param outputShapes - * @return a new instance of IteratorGetNextAsOptional - * @see org.tensorflow.op.data.IteratorGetNextAsOptional + * @return a new instance of OptionalGetValue + * @see org.tensorflow.op.data.OptionalGetValue */ - public IteratorGetNextAsOptional iteratorGetNextAsOptional(Operand iterator, - List> outputTypes, List outputShapes) { - return IteratorGetNextAsOptional.create(scope, iterator, outputTypes, outputShapes); + public OptionalGetValue optionalGetValue(Operand optional, List> outputTypes, + List outputShapes) { + return OptionalGetValue.create(scope, optional, outputTypes, outputShapes); } /** @@ -114,20 +165,6 @@ public IteratorToStringHandle iteratorToStringHandle(Operand resourceHandle) return IteratorToStringHandle.create(scope, resourceHandle); } - /** - * Builds an {@link IteratorGetNextSync} operation - * - * @param iterator - * @param outputTypes - * @param outputShapes - * @return a new instance of IteratorGetNextSync - * @see org.tensorflow.op.data.IteratorGetNextSync - */ - public IteratorGetNextSync iteratorGetNextSync(Operand iterator, List> outputTypes, - List outputShapes) { - return IteratorGetNextSync.create(scope, iterator, outputTypes, outputShapes); - } - /** * Builds an {@link OptionalHasValue} operation * @@ -151,18 +188,6 @@ public MakeIterator makeIterator(Operand dataset, Operand iterator) { return MakeIterator.create(scope, dataset, iterator); } - /** - * Builds an {@link DeserializeIterator} operation - * - * @param resourceHandle A handle to an iterator resource. - * @param serialized A variant tensor storing the state of the iterator contained in the - * @return a new instance of DeserializeIterator - * @see org.tensorflow.op.data.DeserializeIterator - */ - public DeserializeIterator deserializeIterator(Operand resourceHandle, Operand serialized) { - return DeserializeIterator.create(scope, resourceHandle, serialized); - } - /** * Builds an {@link SerializeIterator} operation * diff --git a/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/DtypesOps.java b/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/DtypesOps.java index 7766fefed69..e01b8aa48cc 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/DtypesOps.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/DtypesOps.java @@ -1,9 +1,11 @@ package org.tensorflow.op; +import org.tensorflow.DataType; import org.tensorflow.Operand; import org.tensorflow.op.dtypes.AsString; import org.tensorflow.op.dtypes.Cast; import org.tensorflow.op.dtypes.Complex; +import org.tensorflow.types.family.TNumber; /** * An API for building {@code dtypes} operations as {@link Op Op}s @@ -17,19 +19,6 @@ public final class DtypesOps { this.scope = scope; } - /** - * Builds an {@link Cast} operation - * - * @param x - * @param DstT - * @param options carries optional attributes values - * @return a new instance of Cast - * @see org.tensorflow.op.dtypes.Cast - */ - public Cast cast(Operand x, Class DstT, Cast.Options... options) { - return Cast.create(scope, x, DstT, options); - } - /** * Builds an {@link AsString} operation * @@ -51,7 +40,21 @@ public AsString asString(Operand input, AsString.Options... options) { * @return a new instance of Complex * @see org.tensorflow.op.dtypes.Complex */ - public Complex complex(Operand real, Operand imag, Class Tout) { + public Complex complex(Operand real, Operand imag, + DataType Tout) { return Complex.create(scope, real, imag, Tout); } + + /** + * Builds an {@link Cast} operation + * + * @param x + * @param DstT + * @param options carries optional attributes values + * @return a new instance of Cast + * @see org.tensorflow.op.dtypes.Cast + */ + public Cast cast(Operand x, DataType DstT, Cast.Options... options) { + return Cast.create(scope, x, DstT, options); + } } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/ImageOps.java b/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/ImageOps.java index 98e4a46455c..f1dd22c8579 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/ImageOps.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/ImageOps.java @@ -1,6 +1,7 @@ package org.tensorflow.op; import java.util.List; +import org.tensorflow.DataType; import org.tensorflow.Operand; import org.tensorflow.op.image.AdjustContrast; import org.tensorflow.op.image.AdjustHue; @@ -31,7 +32,12 @@ import org.tensorflow.op.image.ResizeNearestNeighbor; import org.tensorflow.op.image.RgbToHsv; import org.tensorflow.op.image.SampleDistortedBoundingBox; -import org.tensorflow.types.UInt8; +import org.tensorflow.types.TFloat; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.TInt64; +import org.tensorflow.types.TString; +import org.tensorflow.types.TUInt8; +import org.tensorflow.types.family.TNumber; /** * An API for building {@code image} operations as {@link Op Op}s @@ -46,43 +52,16 @@ public final class ImageOps { } /** - * Builds an {@link AdjustHue} operation - * - * @param images Images to adjust. At least 3-D. - * @param delta A float delta to add to the hue. - * @return a new instance of AdjustHue - * @see org.tensorflow.op.image.AdjustHue - */ - public AdjustHue adjustHue(Operand images, Operand delta) { - return AdjustHue.create(scope, images, delta); - } - - /** - * Builds an {@link EncodePng} operation - * - * @param image 3-D with shape `[height, width, channels]`. - * @param options carries optional attributes values - * @return a new instance of EncodePng - * @see org.tensorflow.op.image.EncodePng - */ - public EncodePng encodePng(Operand image, EncodePng.Options... options) { - return EncodePng.create(scope, image, options); - } - - /** - * Builds an {@link SampleDistortedBoundingBox} operation + * Builds an {@link DrawBoundingBoxes} operation * - * @param imageSize 1-D, containing `[height, width, channels]`. - * @param boundingBoxes 3-D with shape `[batch, N, 4]` describing the N bounding boxes - * @param minObjectCovered The cropped area of the image must contain at least this - * @param options carries optional attributes values - * @return a new instance of SampleDistortedBoundingBox - * @see org.tensorflow.op.image.SampleDistortedBoundingBox + * @param images 4-D with shape `[batch, height, width, depth]`. A batch of images. + * @param boxes 3-D with shape `[batch, num_bounding_boxes, 4]` containing bounding + * @return a new instance of DrawBoundingBoxes + * @see org.tensorflow.op.image.DrawBoundingBoxes */ - public SampleDistortedBoundingBox sampleDistortedBoundingBox( - Operand imageSize, Operand boundingBoxes, Operand minObjectCovered, - SampleDistortedBoundingBox.Options... options) { - return SampleDistortedBoundingBox.create(scope, imageSize, boundingBoxes, minObjectCovered, options); + public DrawBoundingBoxes drawBoundingBoxes(Operand images, + Operand boxes) { + return DrawBoundingBoxes.create(scope, images, boxes); } /** @@ -92,56 +71,10 @@ public SampleDistortedBoundingBox sampleDistortedBoundingB * @return a new instance of DecodeGif * @see org.tensorflow.op.image.DecodeGif */ - public DecodeGif decodeGif(Operand contents) { + public DecodeGif decodeGif(Operand contents) { return DecodeGif.create(scope, contents); } - /** - * Builds an {@link RandomCrop} operation - * - * @param image 3-D of shape `[height, width, channels]`. - * @param size 1-D of length 2 containing: `crop_height`, `crop_width`.. - * @param options carries optional attributes values - * @return a new instance of RandomCrop - * @see org.tensorflow.op.image.RandomCrop - */ - public RandomCrop randomCrop(Operand image, Operand size, - RandomCrop.Options... options) { - return RandomCrop.create(scope, image, size, options); - } - - /** - * Builds an {@link DecodePng} operation - * - * @param contents 0-D. The PNG-encoded image. - * @param dtype - * @param options carries optional attributes values - * @return a new instance of DecodePng - * @see org.tensorflow.op.image.DecodePng - */ - public DecodePng decodePng(Operand contents, Class dtype, - DecodePng.Options... options) { - return DecodePng.create(scope, contents, dtype, options); - } - - /** - * Builds an {@link NonMaxSuppression} operation - * - * @param boxes A 2-D float tensor of shape `[num_boxes, 4]`. - * @param scores A 1-D float tensor of shape `[num_boxes]` representing a single - * @param maxOutputSize A scalar integer tensor representing the maximum number of - * @param iouThreshold A 0-D float tensor representing the threshold for deciding whether - * @param scoreThreshold A 0-D float tensor representing the threshold for deciding when to remove - * @param options carries optional attributes values - * @return a new instance of NonMaxSuppression - * @see org.tensorflow.op.image.NonMaxSuppression - */ - public NonMaxSuppression nonMaxSuppression(Operand boxes, - Operand scores, Operand maxOutputSize, Operand iouThreshold, - Operand scoreThreshold, NonMaxSuppression.Options... options) { - return NonMaxSuppression.create(scope, boxes, scores, maxOutputSize, iouThreshold, scoreThreshold, options); - } - /** * Builds an {@link ResizeBilinear} operation * @@ -151,145 +84,131 @@ public NonMaxSuppression nonMaxSuppression( * @return a new instance of ResizeBilinear * @see org.tensorflow.op.image.ResizeBilinear */ - public ResizeBilinear resizeBilinear(Operand images, Operand size, + public ResizeBilinear resizeBilinear(Operand images, Operand size, ResizeBilinear.Options... options) { return ResizeBilinear.create(scope, images, size, options); } /** - * Builds an {@link DecodePng} operation - * - * @param contents 0-D. The PNG-encoded image. - * @param options carries optional attributes values - * @return a new instance of DecodePng - * @see org.tensorflow.op.image.DecodePng - */ - public DecodePng decodePng(Operand contents, DecodePng.Options... options) { - return DecodePng.create(scope, contents, options); - } - - /** - * Builds an {@link ExtractJpegShape} operation + * Builds an {@link RgbToHsv} operation * - * @param contents 0-D. The JPEG-encoded image. - * @return a new instance of ExtractJpegShape - * @see org.tensorflow.op.image.ExtractJpegShape + * @param images 1-D or higher rank. RGB data to convert. Last dimension must be size 3. + * @return a new instance of RgbToHsv + * @see org.tensorflow.op.image.RgbToHsv */ - public ExtractJpegShape extractJpegShape(Operand contents) { - return ExtractJpegShape.create(scope, contents); + public RgbToHsv rgbToHsv(Operand images) { + return RgbToHsv.create(scope, images); } /** - * Builds an {@link AdjustContrast} operation + * Builds an {@link HsvToRgb} operation * - * @param images Images to adjust. At least 3-D. - * @param contrastFactor A float multiplier for adjusting contrast. - * @return a new instance of AdjustContrast - * @see org.tensorflow.op.image.AdjustContrast + * @param images 1-D or higher rank. HSV data to convert. Last dimension must be size 3. + * @return a new instance of HsvToRgb + * @see org.tensorflow.op.image.HsvToRgb */ - public AdjustContrast adjustContrast(Operand images, - Operand contrastFactor) { - return AdjustContrast.create(scope, images, contrastFactor); + public HsvToRgb hsvToRgb(Operand images) { + return HsvToRgb.create(scope, images); } /** - * Builds an {@link CropAndResizeGradImage} operation + * Builds an {@link DecodeBmp} operation * - * @param grads A 4-D tensor of shape `[num_boxes, crop_height, crop_width, depth]`. - * @param boxes A 2-D tensor of shape `[num_boxes, 4]`. The `i`-th row of the tensor - * @param boxInd A 1-D tensor of shape `[num_boxes]` with int32 values in `[0, batch)`. - * @param imageSize A 1-D tensor with value `[batch, image_height, image_width, depth]` - * @param T + * @param contents 0-D. The BMP-encoded image. * @param options carries optional attributes values - * @return a new instance of CropAndResizeGradImage - * @see org.tensorflow.op.image.CropAndResizeGradImage + * @return a new instance of DecodeBmp + * @see org.tensorflow.op.image.DecodeBmp */ - public CropAndResizeGradImage cropAndResizeGradImage(Operand grads, - Operand boxes, Operand boxInd, Operand imageSize, Class T, - CropAndResizeGradImage.Options... options) { - return CropAndResizeGradImage.create(scope, grads, boxes, boxInd, imageSize, T, options); + public DecodeBmp decodeBmp(Operand contents, DecodeBmp.Options... options) { + return DecodeBmp.create(scope, contents, options); } /** - * Builds an {@link CropAndResize} operation + * Builds an {@link CropAndResizeGradBoxes} operation * + * @param grads A 4-D tensor of shape `[num_boxes, crop_height, crop_width, depth]`. * @param image A 4-D tensor of shape `[batch, image_height, image_width, depth]`. * @param boxes A 2-D tensor of shape `[num_boxes, 4]`. The `i`-th row of the tensor * @param boxInd A 1-D tensor of shape `[num_boxes]` with int32 values in `[0, batch)`. - * @param cropSize A 1-D tensor of 2 elements, `size = [crop_height, crop_width]`. All * @param options carries optional attributes values - * @return a new instance of CropAndResize - * @see org.tensorflow.op.image.CropAndResize + * @return a new instance of CropAndResizeGradBoxes + * @see org.tensorflow.op.image.CropAndResizeGradBoxes */ - public CropAndResize cropAndResize(Operand image, Operand boxes, - Operand boxInd, Operand cropSize, CropAndResize.Options... options) { - return CropAndResize.create(scope, image, boxes, boxInd, cropSize, options); + public CropAndResizeGradBoxes cropAndResizeGradBoxes(Operand grads, + Operand image, Operand boxes, Operand boxInd, + CropAndResizeGradBoxes.Options... options) { + return CropAndResizeGradBoxes.create(scope, grads, image, boxes, boxInd, options); } /** - * Builds an {@link AdjustSaturation} operation + * Builds an {@link ExtractGlimpse} operation * - * @param images Images to adjust. At least 3-D. - * @param scale A float scale to add to the saturation. - * @return a new instance of AdjustSaturation - * @see org.tensorflow.op.image.AdjustSaturation + * @param input A 4-D float tensor of shape `[batch_size, height, width, channels]`. + * @param size A 1-D tensor of 2 elements containing the size of the glimpses + * @param offsets A 2-D integer tensor of shape `[batch_size, 2]` containing + * @param options carries optional attributes values + * @return a new instance of ExtractGlimpse + * @see org.tensorflow.op.image.ExtractGlimpse */ - public AdjustSaturation adjustSaturation(Operand images, - Operand scale) { - return AdjustSaturation.create(scope, images, scale); + public ExtractGlimpse extractGlimpse(Operand input, Operand size, + Operand offsets, ExtractGlimpse.Options... options) { + return ExtractGlimpse.create(scope, input, size, offsets, options); } /** - * Builds an {@link DecodeAndCropJpeg} operation + * Builds an {@link ResizeBicubic} operation * - * @param contents 0-D. The JPEG-encoded image. - * @param cropWindow 1-D. The crop window: [crop_y, crop_x, crop_height, crop_width]. + * @param images 4-D with shape `[batch, height, width, channels]`. + * @param size = A 1-D int32 Tensor of 2 elements: `new_height, new_width`. The * @param options carries optional attributes values - * @return a new instance of DecodeAndCropJpeg - * @see org.tensorflow.op.image.DecodeAndCropJpeg + * @return a new instance of ResizeBicubic + * @see org.tensorflow.op.image.ResizeBicubic */ - public DecodeAndCropJpeg decodeAndCropJpeg(Operand contents, Operand cropWindow, - DecodeAndCropJpeg.Options... options) { - return DecodeAndCropJpeg.create(scope, contents, cropWindow, options); + public ResizeBicubic resizeBicubic(Operand images, Operand size, + ResizeBicubic.Options... options) { + return ResizeBicubic.create(scope, images, size, options); } /** - * Builds an {@link DecodeJpeg} operation + * Builds an {@link RandomCrop} operation * - * @param contents 0-D. The JPEG-encoded image. + * @param image 3-D of shape `[height, width, channels]`. + * @param size 1-D of length 2 containing: `crop_height`, `crop_width`.. * @param options carries optional attributes values - * @return a new instance of DecodeJpeg - * @see org.tensorflow.op.image.DecodeJpeg + * @return a new instance of RandomCrop + * @see org.tensorflow.op.image.RandomCrop */ - public DecodeJpeg decodeJpeg(Operand contents, DecodeJpeg.Options... options) { - return DecodeJpeg.create(scope, contents, options); + public RandomCrop randomCrop(Operand image, Operand size, + RandomCrop.Options... options) { + return RandomCrop.create(scope, image, size, options); } /** - * Builds an {@link ExtractGlimpse} operation + * Builds an {@link DecodePng} operation * - * @param input A 4-D float tensor of shape `[batch_size, height, width, channels]`. - * @param size A 1-D tensor of 2 elements containing the size of the glimpses - * @param offsets A 2-D integer tensor of shape `[batch_size, 2]` containing + * @param contents 0-D. The PNG-encoded image. + * @param dtype * @param options carries optional attributes values - * @return a new instance of ExtractGlimpse - * @see org.tensorflow.op.image.ExtractGlimpse + * @return a new instance of DecodePng + * @see org.tensorflow.op.image.DecodePng */ - public ExtractGlimpse extractGlimpse(Operand input, Operand size, - Operand offsets, ExtractGlimpse.Options... options) { - return ExtractGlimpse.create(scope, input, size, offsets, options); + public DecodePng decodePng(Operand contents, DataType dtype, + DecodePng.Options... options) { + return DecodePng.create(scope, contents, dtype, options); } /** - * Builds an {@link DecodeBmp} operation + * Builds an {@link DecodeAndCropJpeg} operation * - * @param contents 0-D. The BMP-encoded image. + * @param contents 0-D. The JPEG-encoded image. + * @param cropWindow 1-D. The crop window: [crop_y, crop_x, crop_height, crop_width]. * @param options carries optional attributes values - * @return a new instance of DecodeBmp - * @see org.tensorflow.op.image.DecodeBmp + * @return a new instance of DecodeAndCropJpeg + * @see org.tensorflow.op.image.DecodeAndCropJpeg */ - public DecodeBmp decodeBmp(Operand contents, DecodeBmp.Options... options) { - return DecodeBmp.create(scope, contents, options); + public DecodeAndCropJpeg decodeAndCropJpeg(Operand contents, Operand cropWindow, + DecodeAndCropJpeg.Options... options) { + return DecodeAndCropJpeg.create(scope, contents, cropWindow, options); } /** @@ -300,11 +219,37 @@ public DecodeBmp decodeBmp(Operand contents, DecodeBmp.Options... option * @return a new instance of ExtractJpegShape * @see org.tensorflow.op.image.ExtractJpegShape */ - public ExtractJpegShape extractJpegShape(Operand contents, - Class outputType) { + public ExtractJpegShape extractJpegShape(Operand contents, + DataType outputType) { return ExtractJpegShape.create(scope, contents, outputType); } + /** + * Builds an {@link EncodeJpegVariableQuality} operation + * + * @param images Images to adjust. At least 3-D. + * @param quality An int quality to encode to. + * @return a new instance of EncodeJpegVariableQuality + * @see org.tensorflow.op.image.EncodeJpegVariableQuality + */ + public EncodeJpegVariableQuality encodeJpegVariableQuality(Operand images, + Operand quality) { + return EncodeJpegVariableQuality.create(scope, images, quality); + } + + /** + * Builds an {@link AdjustSaturation} operation + * + * @param images Images to adjust. At least 3-D. + * @param scale A float scale to add to the saturation. + * @return a new instance of AdjustSaturation + * @see org.tensorflow.op.image.AdjustSaturation + */ + public AdjustSaturation adjustSaturation(Operand images, + Operand scale) { + return AdjustSaturation.create(scope, images, scale); + } + /** * Builds an {@link ResizeArea} operation * @@ -314,110 +259,127 @@ public ExtractJpegShape extractJpegShape(Operand c * @return a new instance of ResizeArea * @see org.tensorflow.op.image.ResizeArea */ - public ResizeArea resizeArea(Operand images, Operand size, + public ResizeArea resizeArea(Operand images, Operand size, ResizeArea.Options... options) { return ResizeArea.create(scope, images, size, options); } /** - * Builds an {@link RgbToHsv} operation + * Builds an {@link NonMaxSuppression} operation * - * @param images 1-D or higher rank. RGB data to convert. Last dimension must be size 3. - * @return a new instance of RgbToHsv - * @see org.tensorflow.op.image.RgbToHsv + * @param boxes A 2-D float tensor of shape `[num_boxes, 4]`. + * @param scores A 1-D float tensor of shape `[num_boxes]` representing a single + * @param maxOutputSize A scalar integer tensor representing the maximum number of + * @param iouThreshold A 0-D float tensor representing the threshold for deciding whether + * @param scoreThreshold A 0-D float tensor representing the threshold for deciding when to remove + * @param options carries optional attributes values + * @return a new instance of NonMaxSuppression + * @see org.tensorflow.op.image.NonMaxSuppression */ - public RgbToHsv rgbToHsv(Operand images) { - return RgbToHsv.create(scope, images); + public NonMaxSuppression nonMaxSuppression( + Operand boxes, Operand scores, Operand maxOutputSize, Operand iouThreshold, + Operand scoreThreshold, NonMaxSuppression.Options... options) { + return NonMaxSuppression.create(scope, boxes, scores, maxOutputSize, iouThreshold, scoreThreshold, options); } /** - * Builds an {@link EncodeJpegVariableQuality} operation + * Builds an {@link EncodePng} operation * - * @param images Images to adjust. At least 3-D. - * @param quality An int quality to encode to. - * @return a new instance of EncodeJpegVariableQuality - * @see org.tensorflow.op.image.EncodeJpegVariableQuality + * @param image 3-D with shape `[height, width, channels]`. + * @param options carries optional attributes values + * @return a new instance of EncodePng + * @see org.tensorflow.op.image.EncodePng */ - public EncodeJpegVariableQuality encodeJpegVariableQuality(Operand images, - Operand quality) { - return EncodeJpegVariableQuality.create(scope, images, quality); + public EncodePng encodePng(Operand image, EncodePng.Options... options) { + return EncodePng.create(scope, image, options); } /** - * Builds an {@link CropAndResizeGradBoxes} operation + * Builds an {@link CropAndResize} operation * - * @param grads A 4-D tensor of shape `[num_boxes, crop_height, crop_width, depth]`. * @param image A 4-D tensor of shape `[batch, image_height, image_width, depth]`. * @param boxes A 2-D tensor of shape `[num_boxes, 4]`. The `i`-th row of the tensor * @param boxInd A 1-D tensor of shape `[num_boxes]` with int32 values in `[0, batch)`. + * @param cropSize A 1-D tensor of 2 elements, `size = [crop_height, crop_width]`. All * @param options carries optional attributes values - * @return a new instance of CropAndResizeGradBoxes - * @see org.tensorflow.op.image.CropAndResizeGradBoxes + * @return a new instance of CropAndResize + * @see org.tensorflow.op.image.CropAndResize */ - public CropAndResizeGradBoxes cropAndResizeGradBoxes(Operand grads, - Operand image, Operand boxes, Operand boxInd, - CropAndResizeGradBoxes.Options... options) { - return CropAndResizeGradBoxes.create(scope, grads, image, boxes, boxInd, options); + public CropAndResize cropAndResize(Operand image, Operand boxes, + Operand boxInd, Operand cropSize, CropAndResize.Options... options) { + return CropAndResize.create(scope, image, boxes, boxInd, cropSize, options); } /** - * Builds an {@link ExtractImagePatches} operation + * Builds an {@link CropAndResizeGradImage} operation * - * @param images 4-D Tensor with shape `[batch, in_rows, in_cols, depth]`. - * @param ksizes The size of the sliding window for each dimension of `images`. - * @param strides How far the centers of two consecutive patches are in - * @param rates Must be: `[1, rate_rows, rate_cols, 1]`. This is the - * @param padding The type of padding algorithm to use. - * @return a new instance of ExtractImagePatches - * @see org.tensorflow.op.image.ExtractImagePatches + * @param grads A 4-D tensor of shape `[num_boxes, crop_height, crop_width, depth]`. + * @param boxes A 2-D tensor of shape `[num_boxes, 4]`. The `i`-th row of the tensor + * @param boxInd A 1-D tensor of shape `[num_boxes]` with int32 values in `[0, batch)`. + * @param imageSize A 1-D tensor with value `[batch, image_height, image_width, depth]` + * @param T + * @param options carries optional attributes values + * @return a new instance of CropAndResizeGradImage + * @see org.tensorflow.op.image.CropAndResizeGradImage */ - public ExtractImagePatches extractImagePatches(Operand images, - List ksizes, List strides, List rates, String padding) { - return ExtractImagePatches.create(scope, images, ksizes, strides, rates, padding); + public CropAndResizeGradImage cropAndResizeGradImage(Operand grads, + Operand boxes, Operand boxInd, Operand imageSize, DataType T, + CropAndResizeGradImage.Options... options) { + return CropAndResizeGradImage.create(scope, grads, boxes, boxInd, imageSize, T, options); } /** - * Builds an {@link DrawBoundingBoxes} operation + * Builds an {@link DecodePng} operation * - * @param images 4-D with shape `[batch, height, width, depth]`. A batch of images. - * @param boxes 3-D with shape `[batch, num_bounding_boxes, 4]` containing bounding - * @return a new instance of DrawBoundingBoxes - * @see org.tensorflow.op.image.DrawBoundingBoxes + * @param contents 0-D. The PNG-encoded image. + * @param options carries optional attributes values + * @return a new instance of DecodePng + * @see org.tensorflow.op.image.DecodePng */ - public DrawBoundingBoxes drawBoundingBoxes(Operand images, - Operand boxes) { - return DrawBoundingBoxes.create(scope, images, boxes); + public DecodePng decodePng(Operand contents, DecodePng.Options... options) { + return DecodePng.create(scope, contents, options); } /** - * Builds an {@link NonMaxSuppressionWithOverlaps} operation + * Builds an {@link ResizeNearestNeighbor} operation * - * @param overlaps A 2-D float tensor of shape `[num_boxes, num_boxes]` representing - * @param scores A 1-D float tensor of shape `[num_boxes]` representing a single - * @param maxOutputSize A scalar integer tensor representing the maximum number of - * @param overlapThreshold A 0-D float tensor representing the threshold for deciding whether - * @param scoreThreshold A 0-D float tensor representing the threshold for deciding when to remove - * @return a new instance of NonMaxSuppressionWithOverlaps - * @see org.tensorflow.op.image.NonMaxSuppressionWithOverlaps + * @param images 4-D with shape `[batch, height, width, channels]`. + * @param size = A 1-D int32 Tensor of 2 elements: `new_height, new_width`. The + * @param options carries optional attributes values + * @return a new instance of ResizeNearestNeighbor + * @see org.tensorflow.op.image.ResizeNearestNeighbor */ - public NonMaxSuppressionWithOverlaps nonMaxSuppressionWithOverlaps(Operand overlaps, - Operand scores, Operand maxOutputSize, Operand overlapThreshold, - Operand scoreThreshold) { - return NonMaxSuppressionWithOverlaps.create(scope, overlaps, scores, maxOutputSize, overlapThreshold, scoreThreshold); + public ResizeNearestNeighbor resizeNearestNeighbor(Operand images, + Operand size, ResizeNearestNeighbor.Options... options) { + return ResizeNearestNeighbor.create(scope, images, size, options); } /** - * Builds an {@link ResizeBicubic} operation + * Builds an {@link AdjustHue} operation * - * @param images 4-D with shape `[batch, height, width, channels]`. - * @param size = A 1-D int32 Tensor of 2 elements: `new_height, new_width`. The - * @param options carries optional attributes values - * @return a new instance of ResizeBicubic - * @see org.tensorflow.op.image.ResizeBicubic + * @param images Images to adjust. At least 3-D. + * @param delta A float delta to add to the hue. + * @return a new instance of AdjustHue + * @see org.tensorflow.op.image.AdjustHue */ - public ResizeBicubic resizeBicubic(Operand images, Operand size, - ResizeBicubic.Options... options) { - return ResizeBicubic.create(scope, images, size, options); + public AdjustHue adjustHue(Operand images, Operand delta) { + return AdjustHue.create(scope, images, delta); + } + + /** + * Builds an {@link ExtractImagePatches} operation + * + * @param images 4-D Tensor with shape `[batch, in_rows, in_cols, depth]`. + * @param ksizes The size of the sliding window for each dimension of `images`. + * @param strides How far the centers of two consecutive patches are in + * @param rates Must be: `[1, rate_rows, rate_cols, 1]`. This is the + * @param padding The type of padding algorithm to use. + * @return a new instance of ExtractImagePatches + * @see org.tensorflow.op.image.ExtractImagePatches + */ + public ExtractImagePatches extractImagePatches(Operand images, + List ksizes, List strides, List rates, String padding) { + return ExtractImagePatches.create(scope, images, ksizes, strides, rates, padding); } /** @@ -432,34 +394,50 @@ public ResizeBicubic resizeBicubic(Operand images, Operand * @see org.tensorflow.op.image.QuantizedResizeBilinear */ public QuantizedResizeBilinear quantizedResizeBilinear(Operand images, - Operand size, Operand min, Operand max, + Operand size, Operand min, Operand max, QuantizedResizeBilinear.Options... options) { return QuantizedResizeBilinear.create(scope, images, size, min, max, options); } /** - * Builds an {@link ResizeNearestNeighbor} operation + * Builds an {@link AdjustContrast} operation * - * @param images 4-D with shape `[batch, height, width, channels]`. - * @param size = A 1-D int32 Tensor of 2 elements: `new_height, new_width`. The - * @param options carries optional attributes values - * @return a new instance of ResizeNearestNeighbor - * @see org.tensorflow.op.image.ResizeNearestNeighbor + * @param images Images to adjust. At least 3-D. + * @param contrastFactor A float multiplier for adjusting contrast. + * @return a new instance of AdjustContrast + * @see org.tensorflow.op.image.AdjustContrast */ - public ResizeNearestNeighbor resizeNearestNeighbor(Operand images, - Operand size, ResizeNearestNeighbor.Options... options) { - return ResizeNearestNeighbor.create(scope, images, size, options); + public AdjustContrast adjustContrast(Operand images, + Operand contrastFactor) { + return AdjustContrast.create(scope, images, contrastFactor); } /** - * Builds an {@link HsvToRgb} operation + * Builds an {@link ExtractJpegShape} operation * - * @param images 1-D or higher rank. HSV data to convert. Last dimension must be size 3. - * @return a new instance of HsvToRgb - * @see org.tensorflow.op.image.HsvToRgb + * @param contents 0-D. The JPEG-encoded image. + * @return a new instance of ExtractJpegShape + * @see org.tensorflow.op.image.ExtractJpegShape */ - public HsvToRgb hsvToRgb(Operand images) { - return HsvToRgb.create(scope, images); + public ExtractJpegShape extractJpegShape(Operand contents) { + return ExtractJpegShape.create(scope, contents); + } + + /** + * Builds an {@link NonMaxSuppressionWithOverlaps} operation + * + * @param overlaps A 2-D float tensor of shape `[num_boxes, num_boxes]` representing + * @param scores A 1-D float tensor of shape `[num_boxes]` representing a single + * @param maxOutputSize A scalar integer tensor representing the maximum number of + * @param overlapThreshold A 0-D float tensor representing the threshold for deciding whether + * @param scoreThreshold A 0-D float tensor representing the threshold for deciding when to remove + * @return a new instance of NonMaxSuppressionWithOverlaps + * @see org.tensorflow.op.image.NonMaxSuppressionWithOverlaps + */ + public NonMaxSuppressionWithOverlaps nonMaxSuppressionWithOverlaps(Operand overlaps, + Operand scores, Operand maxOutputSize, Operand overlapThreshold, + Operand scoreThreshold) { + return NonMaxSuppressionWithOverlaps.create(scope, overlaps, scores, maxOutputSize, overlapThreshold, scoreThreshold); } /** @@ -470,7 +448,35 @@ public HsvToRgb hsvToRgb(Operand images) { * @return a new instance of EncodeJpeg * @see org.tensorflow.op.image.EncodeJpeg */ - public EncodeJpeg encodeJpeg(Operand image, EncodeJpeg.Options... options) { + public EncodeJpeg encodeJpeg(Operand image, EncodeJpeg.Options... options) { return EncodeJpeg.create(scope, image, options); } + + /** + * Builds an {@link DecodeJpeg} operation + * + * @param contents 0-D. The JPEG-encoded image. + * @param options carries optional attributes values + * @return a new instance of DecodeJpeg + * @see org.tensorflow.op.image.DecodeJpeg + */ + public DecodeJpeg decodeJpeg(Operand contents, DecodeJpeg.Options... options) { + return DecodeJpeg.create(scope, contents, options); + } + + /** + * Builds an {@link SampleDistortedBoundingBox} operation + * + * @param imageSize 1-D, containing `[height, width, channels]`. + * @param boundingBoxes 3-D with shape `[batch, N, 4]` describing the N bounding boxes + * @param minObjectCovered The cropped area of the image must contain at least this + * @param options carries optional attributes values + * @return a new instance of SampleDistortedBoundingBox + * @see org.tensorflow.op.image.SampleDistortedBoundingBox + */ + public SampleDistortedBoundingBox sampleDistortedBoundingBox( + Operand imageSize, Operand boundingBoxes, Operand minObjectCovered, + SampleDistortedBoundingBox.Options... options) { + return SampleDistortedBoundingBox.create(scope, imageSize, boundingBoxes, minObjectCovered, options); + } } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/IoOps.java b/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/IoOps.java index 04978cbdab3..1bd9a9ffe7f 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/IoOps.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/IoOps.java @@ -1,8 +1,9 @@ package org.tensorflow.op; import java.util.List; +import org.tensorflow.DataType; import org.tensorflow.Operand; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.io.DecodeBase64; import org.tensorflow.op.io.DecodeCompressed; import org.tensorflow.op.io.DecodeCsv; @@ -48,6 +49,9 @@ import org.tensorflow.op.io.TfRecordReader; import org.tensorflow.op.io.WholeFileReader; import org.tensorflow.op.io.WriteFile; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.TInt64; +import org.tensorflow.types.TString; /** * An API for building {@code io} operations as {@link Op Op}s @@ -76,98 +80,54 @@ public QueueEnqueueMany queueEnqueueMany(Operand handle, Iterable> } /** - * Builds an {@link ReaderReset} operation + * Builds an {@link ShardedFilename} operation * - * @param readerHandle Handle to a Reader. - * @return a new instance of ReaderReset - * @see org.tensorflow.op.io.ReaderReset + * @param basename + * @param shard + * @param numShards + * @return a new instance of ShardedFilename + * @see org.tensorflow.op.io.ShardedFilename */ - public ReaderReset readerReset(Operand readerHandle) { - return ReaderReset.create(scope, readerHandle); + public ShardedFilename shardedFilename(Operand basename, Operand shard, + Operand numShards) { + return ShardedFilename.create(scope, basename, shard, numShards); } /** - * Builds an {@link QueueDequeue} operation + * Builds an {@link FifoQueue} operation * - * @param handle The handle to a queue. - * @param componentTypes The type of each component in a tuple. + * @param componentTypes The type of each component in a value. * @param options carries optional attributes values - * @return a new instance of QueueDequeue - * @see org.tensorflow.op.io.QueueDequeue + * @return a new instance of FifoQueue + * @see org.tensorflow.op.io.FifoQueue */ - public QueueDequeue queueDequeue(Operand handle, List> componentTypes, - QueueDequeue.Options... options) { - return QueueDequeue.create(scope, handle, componentTypes, options); + public FifoQueue fifoQueue(List> componentTypes, FifoQueue.Options... options) { + return FifoQueue.create(scope, componentTypes, options); } /** - * Builds an {@link ReaderRestoreState} operation + * Builds an {@link ReaderReset} operation * * @param readerHandle Handle to a Reader. - * @param state Result of a ReaderSerializeState of a Reader with type - * @return a new instance of ReaderRestoreState - * @see org.tensorflow.op.io.ReaderRestoreState - */ - public ReaderRestoreState readerRestoreState(Operand readerHandle, Operand state) { - return ReaderRestoreState.create(scope, readerHandle, state); - } - - /** - * Builds an {@link ParseSingleExample} operation - * - * @param serialized A vector containing a batch of binary serialized Example protos. - * @param denseDefaults A list of Tensors (some may be empty), whose length matches - * @param numSparse The number of sparse features to be parsed from the example. This - * @param sparseKeys A list of `num_sparse` strings. - * @param denseKeys The keys expected in the Examples' features associated with dense - * @param sparseTypes A list of `num_sparse` types; the data types of data in each - * @param denseShapes The shapes of data in each Feature given in dense_keys. - * @return a new instance of ParseSingleExample - * @see org.tensorflow.op.io.ParseSingleExample - */ - public ParseSingleExample parseSingleExample(Operand serialized, - Iterable> denseDefaults, Long numSparse, List sparseKeys, - List denseKeys, List> sparseTypes, List denseShapes) { - return ParseSingleExample.create(scope, serialized, denseDefaults, numSparse, sparseKeys, denseKeys, sparseTypes, denseShapes); - } - - /** - * Builds an {@link DecodeJsonExample} operation - * - * @param jsonExamples Each string is a JSON object serialized according to the JSON - * @return a new instance of DecodeJsonExample - * @see org.tensorflow.op.io.DecodeJsonExample + * @return a new instance of ReaderReset + * @see org.tensorflow.op.io.ReaderReset */ - public DecodeJsonExample decodeJsonExample(Operand jsonExamples) { - return DecodeJsonExample.create(scope, jsonExamples); + public ReaderReset readerReset(Operand readerHandle) { + return ReaderReset.create(scope, readerHandle); } /** - * Builds an {@link ParseSequenceExample} operation + * Builds an {@link ReaderReadUpTo} operation * - * @param serialized A vector containing binary serialized SequenceExample protos. - * @param debugName A vector containing the names of the serialized protos. - * @param contextDenseDefaults A list of Ncontext_dense Tensors (some may be empty). - * @param featureListDenseMissingAssumedEmpty A vector listing the - * @param contextSparseKeys A list of Ncontext_sparse string Tensors (scalars). - * @param contextDenseKeys A list of Ncontext_dense string Tensors (scalars). - * @param featureListSparseKeys A list of Nfeature_list_sparse string Tensors - * @param featureListDenseKeys A list of Nfeature_list_dense string Tensors (scalars). - * @param contextSparseTypes A list of Ncontext_sparse types; the data types of data in - * @param featureListDenseTypes - * @param featureListSparseTypes A list of Nfeature_list_sparse types; the data types - * @param options carries optional attributes values - * @return a new instance of ParseSequenceExample - * @see org.tensorflow.op.io.ParseSequenceExample + * @param readerHandle Handle to a `Reader`. + * @param queueHandle Handle to a `Queue`, with string work items. + * @param numRecords number of records to read from `Reader`. + * @return a new instance of ReaderReadUpTo + * @see org.tensorflow.op.io.ReaderReadUpTo */ - public ParseSequenceExample parseSequenceExample(Operand serialized, - Operand debugName, Iterable> contextDenseDefaults, - List featureListDenseMissingAssumedEmpty, List contextSparseKeys, - List contextDenseKeys, List featureListSparseKeys, - List featureListDenseKeys, List> contextSparseTypes, - List> featureListDenseTypes, List> featureListSparseTypes, - ParseSequenceExample.Options... options) { - return ParseSequenceExample.create(scope, serialized, debugName, contextDenseDefaults, featureListDenseMissingAssumedEmpty, contextSparseKeys, contextDenseKeys, featureListSparseKeys, featureListDenseKeys, contextSparseTypes, featureListDenseTypes, featureListSparseTypes, options); + public ReaderReadUpTo readerReadUpTo(Operand readerHandle, Operand queueHandle, + Operand numRecords) { + return ReaderReadUpTo.create(scope, readerHandle, queueHandle, numRecords); } /** @@ -182,85 +142,83 @@ public IdentityReader identityReader(IdentityReader.Options... options) { } /** - * Builds an {@link SerializeManySparse} operation + * Builds an {@link DecodeRaw} operation * - * @param sparseIndices 2-D. The `indices` of the minibatch `SparseTensor`. - * @param sparseValues 1-D. The `values` of the minibatch `SparseTensor`. - * @param sparseShape 1-D. The `shape` of the minibatch `SparseTensor`. - * @return a new instance of SerializeManySparse - * @see org.tensorflow.op.io.SerializeManySparse + * @param bytes All the elements must have the same length. + * @param outType + * @param options carries optional attributes values + * @return a new instance of DecodeRaw + * @see org.tensorflow.op.io.DecodeRaw */ - public SerializeManySparse serializeManySparse(Operand sparseIndices, - Operand sparseValues, Operand sparseShape) { - return SerializeManySparse.create(scope, sparseIndices, sparseValues, sparseShape); + public DecodeRaw decodeRaw(Operand bytes, DataType outType, + DecodeRaw.Options... options) { + return DecodeRaw.create(scope, bytes, outType, options); } /** - * Builds an {@link ShardedFilename} operation + * Builds an {@link DecodeBase64} operation * - * @param basename - * @param shard - * @param numShards - * @return a new instance of ShardedFilename - * @see org.tensorflow.op.io.ShardedFilename + * @param input Base64 strings to decode. + * @return a new instance of DecodeBase64 + * @see org.tensorflow.op.io.DecodeBase64 */ - public ShardedFilename shardedFilename(Operand basename, Operand shard, - Operand numShards) { - return ShardedFilename.create(scope, basename, shard, numShards); + public DecodeBase64 decodeBase64(Operand input) { + return DecodeBase64.create(scope, input); } /** - * Builds an {@link WholeFileReader} operation + * Builds an {@link ParseSingleExample} operation * - * @param options carries optional attributes values - * @return a new instance of WholeFileReader - * @see org.tensorflow.op.io.WholeFileReader + * @param serialized A vector containing a batch of binary serialized Example protos. + * @param denseDefaults A list of Tensors (some may be empty), whose length matches + * @param numSparse The number of sparse features to be parsed from the example. This + * @param sparseKeys A list of `num_sparse` strings. + * @param denseKeys The keys expected in the Examples' features associated with dense + * @param sparseTypes A list of `num_sparse` types; the data types of data in each + * @param denseShapes The shapes of data in each Feature given in dense_keys. + * @return a new instance of ParseSingleExample + * @see org.tensorflow.op.io.ParseSingleExample */ - public WholeFileReader wholeFileReader(WholeFileReader.Options... options) { - return WholeFileReader.create(scope, options); + public ParseSingleExample parseSingleExample(Operand serialized, + Iterable> denseDefaults, Long numSparse, List sparseKeys, + List denseKeys, List> sparseTypes, List denseShapes) { + return ParseSingleExample.create(scope, serialized, denseDefaults, numSparse, sparseKeys, denseKeys, sparseTypes, denseShapes); } /** - * Builds an {@link SerializeSparse} operation + * Builds an {@link MatchingFiles} operation * - * @param sparseIndices 2-D. The `indices` of the `SparseTensor`. - * @param sparseValues 1-D. The `values` of the `SparseTensor`. - * @param sparseShape 1-D. The `shape` of the `SparseTensor`. - * @param outType The `dtype` to use for serialization; the supported types are `string` - * @return a new instance of SerializeSparse - * @see org.tensorflow.op.io.SerializeSparse + * @param pattern Shell wildcard pattern(s). Scalar or vector of type string. + * @return a new instance of MatchingFiles + * @see org.tensorflow.op.io.MatchingFiles */ - public SerializeSparse serializeSparse(Operand sparseIndices, - Operand sparseValues, Operand sparseShape, Class outType) { - return SerializeSparse.create(scope, sparseIndices, sparseValues, sparseShape, outType); + public MatchingFiles matchingFiles(Operand pattern) { + return MatchingFiles.create(scope, pattern); } /** - * Builds an {@link PriorityQueue} operation + * Builds an {@link WholeFileReader} operation * - * @param componentTypes The type of each component in a value. - * @param shapes The shape of each component in a value. The length of this attr must * @param options carries optional attributes values - * @return a new instance of PriorityQueue - * @see org.tensorflow.op.io.PriorityQueue + * @return a new instance of WholeFileReader + * @see org.tensorflow.op.io.WholeFileReader */ - public PriorityQueue priorityQueue(List> componentTypes, List shapes, - PriorityQueue.Options... options) { - return PriorityQueue.create(scope, componentTypes, shapes, options); + public WholeFileReader wholeFileReader(WholeFileReader.Options... options) { + return WholeFileReader.create(scope, options); } /** - * Builds an {@link ReaderReadUpTo} operation + * Builds an {@link SerializeManySparse} operation * - * @param readerHandle Handle to a `Reader`. - * @param queueHandle Handle to a `Queue`, with string work items. - * @param numRecords number of records to read from `Reader`. - * @return a new instance of ReaderReadUpTo - * @see org.tensorflow.op.io.ReaderReadUpTo + * @param sparseIndices 2-D. The `indices` of the minibatch `SparseTensor`. + * @param sparseValues 1-D. The `values` of the minibatch `SparseTensor`. + * @param sparseShape 1-D. The `shape` of the minibatch `SparseTensor`. + * @return a new instance of SerializeManySparse + * @see org.tensorflow.op.io.SerializeManySparse */ - public ReaderReadUpTo readerReadUpTo(Operand readerHandle, Operand queueHandle, - Operand numRecords) { - return ReaderReadUpTo.create(scope, readerHandle, queueHandle, numRecords); + public SerializeManySparse serializeManySparse(Operand sparseIndices, + Operand sparseValues, Operand sparseShape) { + return SerializeManySparse.create(scope, sparseIndices, sparseValues, sparseShape); } /** @@ -289,31 +247,29 @@ public QueueEnqueue queueEnqueue(Operand handle, Iterable> compone } /** - * Builds an {@link QueueDequeueUpTo} operation + * Builds an {@link WriteFile} operation * - * @param handle The handle to a queue. - * @param n The number of tuples to dequeue. - * @param componentTypes The type of each component in a tuple. - * @param options carries optional attributes values - * @return a new instance of QueueDequeueUpTo - * @see org.tensorflow.op.io.QueueDequeueUpTo + * @param filename scalar. The name of the file to which we write the contents. + * @param contents scalar. The content to be written to the output file. + * @return a new instance of WriteFile + * @see org.tensorflow.op.io.WriteFile */ - public QueueDequeueUpTo queueDequeueUpTo(Operand handle, Operand n, - List> componentTypes, QueueDequeueUpTo.Options... options) { - return QueueDequeueUpTo.create(scope, handle, n, componentTypes, options); + public WriteFile writeFile(Operand filename, Operand contents) { + return WriteFile.create(scope, filename, contents); } /** - * Builds an {@link DecodeCompressed} operation + * Builds an {@link PriorityQueue} operation * - * @param bytes A Tensor of string which is compressed. + * @param componentTypes The type of each component in a value. + * @param shapes The shape of each component in a value. The length of this attr must * @param options carries optional attributes values - * @return a new instance of DecodeCompressed - * @see org.tensorflow.op.io.DecodeCompressed + * @return a new instance of PriorityQueue + * @see org.tensorflow.op.io.PriorityQueue */ - public DecodeCompressed decodeCompressed(Operand bytes, - DecodeCompressed.Options... options) { - return DecodeCompressed.create(scope, bytes, options); + public PriorityQueue priorityQueue(List> componentTypes, List shapes, + PriorityQueue.Options... options) { + return PriorityQueue.create(scope, componentTypes, shapes, options); } /** @@ -340,83 +296,85 @@ public QueueClose queueClose(Operand handle, QueueClose.Options... options) { } /** - * Builds an {@link ParseExample} operation + * Builds an {@link SerializeManySparse} operation * - * @param serialized A vector containing a batch of binary serialized Example protos. - * @param names A vector containing the names of the serialized protos. - * @param sparseKeys A list of Nsparse string Tensors (scalars). - * @param denseKeys A list of Ndense string Tensors (scalars). - * @param denseDefaults A list of Ndense Tensors (some may be empty). - * @param sparseTypes A list of Nsparse types; the data types of data in each Feature - * @param denseShapes A list of Ndense shapes; the shapes of data in each Feature - * @return a new instance of ParseExample - * @see org.tensorflow.op.io.ParseExample + * @param sparseIndices 2-D. The `indices` of the minibatch `SparseTensor`. + * @param sparseValues 1-D. The `values` of the minibatch `SparseTensor`. + * @param sparseShape 1-D. The `shape` of the minibatch `SparseTensor`. + * @param outType The `dtype` to use for serialization; the supported types are `string` + * @return a new instance of SerializeManySparse + * @see org.tensorflow.op.io.SerializeManySparse */ - public ParseExample parseExample(Operand serialized, Operand names, - Iterable> sparseKeys, Iterable> denseKeys, - Iterable> denseDefaults, List> sparseTypes, List denseShapes) { - return ParseExample.create(scope, serialized, names, sparseKeys, denseKeys, denseDefaults, sparseTypes, denseShapes); + public SerializeManySparse serializeManySparse(Operand sparseIndices, + Operand sparseValues, Operand sparseShape, DataType outType) { + return SerializeManySparse.create(scope, sparseIndices, sparseValues, sparseShape, outType); } /** - * Builds an {@link WriteFile} operation + * Builds an {@link ReadFile} operation * - * @param filename scalar. The name of the file to which we write the contents. - * @param contents scalar. The content to be written to the output file. - * @return a new instance of WriteFile - * @see org.tensorflow.op.io.WriteFile + * @param filename + * @return a new instance of ReadFile + * @see org.tensorflow.op.io.ReadFile */ - public WriteFile writeFile(Operand filename, Operand contents) { - return WriteFile.create(scope, filename, contents); + public ReadFile readFile(Operand filename) { + return ReadFile.create(scope, filename); } /** - * Builds an {@link RandomShuffleQueue} operation + * Builds an {@link QueueDequeueUpTo} operation * - * @param componentTypes The type of each component in a value. + * @param handle The handle to a queue. + * @param n The number of tuples to dequeue. + * @param componentTypes The type of each component in a tuple. * @param options carries optional attributes values - * @return a new instance of RandomShuffleQueue - * @see org.tensorflow.op.io.RandomShuffleQueue - */ - public RandomShuffleQueue randomShuffleQueue(List> componentTypes, - RandomShuffleQueue.Options... options) { - return RandomShuffleQueue.create(scope, componentTypes, options); - } - - /** - * Builds an {@link ReadFile} operation - * - * @param filename - * @return a new instance of ReadFile - * @see org.tensorflow.op.io.ReadFile + * @return a new instance of QueueDequeueUpTo + * @see org.tensorflow.op.io.QueueDequeueUpTo */ - public ReadFile readFile(Operand filename) { - return ReadFile.create(scope, filename); + public QueueDequeueUpTo queueDequeueUpTo(Operand handle, Operand n, + List> componentTypes, QueueDequeueUpTo.Options... options) { + return QueueDequeueUpTo.create(scope, handle, n, componentTypes, options); } /** - * Builds an {@link FifoQueue} operation + * Builds an {@link ParseSingleSequenceExample} operation * - * @param componentTypes The type of each component in a value. + * @param serialized A scalar containing a binary serialized SequenceExample proto. + * @param featureListDenseMissingAssumedEmpty A vector listing the + * @param contextSparseKeys A list of Ncontext_sparse string Tensors (scalars). + * @param contextDenseKeys A list of Ncontext_dense string Tensors (scalars). + * @param featureListSparseKeys A list of Nfeature_list_sparse string Tensors + * @param featureListDenseKeys A list of Nfeature_list_dense string Tensors (scalars). + * @param contextDenseDefaults A list of Ncontext_dense Tensors (some may be empty). + * @param debugName A scalar containing the name of the serialized proto. + * @param contextSparseTypes A list of Ncontext_sparse types; the data types of data in + * @param featureListDenseTypes + * @param featureListSparseTypes A list of Nfeature_list_sparse types; the data types * @param options carries optional attributes values - * @return a new instance of FifoQueue - * @see org.tensorflow.op.io.FifoQueue + * @return a new instance of ParseSingleSequenceExample + * @see org.tensorflow.op.io.ParseSingleSequenceExample */ - public FifoQueue fifoQueue(List> componentTypes, FifoQueue.Options... options) { - return FifoQueue.create(scope, componentTypes, options); + public ParseSingleSequenceExample parseSingleSequenceExample(Operand serialized, + Operand featureListDenseMissingAssumedEmpty, + Iterable> contextSparseKeys, Iterable> contextDenseKeys, + Iterable> featureListSparseKeys, + Iterable> featureListDenseKeys, Iterable> contextDenseDefaults, + Operand debugName, List> contextSparseTypes, + List> featureListDenseTypes, List> featureListSparseTypes, + ParseSingleSequenceExample.Options... options) { + return ParseSingleSequenceExample.create(scope, serialized, featureListDenseMissingAssumedEmpty, contextSparseKeys, contextDenseKeys, featureListSparseKeys, featureListDenseKeys, contextDenseDefaults, debugName, contextSparseTypes, featureListDenseTypes, featureListSparseTypes, options); } /** - * Builds an {@link DeserializeManySparse} operation + * Builds an {@link ShardedFilespec} operation * - * @param serializedSparse 2-D, The `N` serialized `SparseTensor` objects. - * @param dtype The `dtype` of the serialized `SparseTensor` objects. - * @return a new instance of DeserializeManySparse - * @see org.tensorflow.op.io.DeserializeManySparse + * @param basename + * @param numShards + * @return a new instance of ShardedFilespec + * @see org.tensorflow.op.io.ShardedFilespec */ - public DeserializeManySparse deserializeManySparse(Operand serializedSparse, - Class dtype) { - return DeserializeManySparse.create(scope, serializedSparse, dtype); + public ShardedFilespec shardedFilespec(Operand basename, Operand numShards) { + return ShardedFilespec.create(scope, basename, numShards); } /** @@ -430,6 +388,29 @@ public TfRecordReader tfRecordReader(TfRecordReader.Options... options) { return TfRecordReader.create(scope, options); } + /** + * Builds an {@link ParseTensor} operation + * + * @param serialized A scalar string containing a serialized TensorProto proto. + * @param outType The type of the serialized tensor. The provided type must match the + * @return a new instance of ParseTensor + * @see org.tensorflow.op.io.ParseTensor + */ + public ParseTensor parseTensor(Operand serialized, DataType outType) { + return ParseTensor.create(scope, serialized, outType); + } + + /** + * Builds an {@link DecodeJsonExample} operation + * + * @param jsonExamples Each string is a JSON object serialized according to the JSON + * @return a new instance of DecodeJsonExample + * @see org.tensorflow.op.io.DecodeJsonExample + */ + public DecodeJsonExample decodeJsonExample(Operand jsonExamples) { + return DecodeJsonExample.create(scope, jsonExamples); + } + /** * Builds an {@link EncodeBase64} operation * @@ -438,10 +419,39 @@ public TfRecordReader tfRecordReader(TfRecordReader.Options... options) { * @return a new instance of EncodeBase64 * @see org.tensorflow.op.io.EncodeBase64 */ - public EncodeBase64 encodeBase64(Operand input, EncodeBase64.Options... options) { + public EncodeBase64 encodeBase64(Operand input, EncodeBase64.Options... options) { return EncodeBase64.create(scope, input, options); } + /** + * Builds an {@link SerializeSparse} operation + * + * @param sparseIndices 2-D. The `indices` of the `SparseTensor`. + * @param sparseValues 1-D. The `values` of the `SparseTensor`. + * @param sparseShape 1-D. The `shape` of the `SparseTensor`. + * @param outType The `dtype` to use for serialization; the supported types are `string` + * @return a new instance of SerializeSparse + * @see org.tensorflow.op.io.SerializeSparse + */ + public SerializeSparse serializeSparse(Operand sparseIndices, + Operand sparseValues, Operand sparseShape, DataType outType) { + return SerializeSparse.create(scope, sparseIndices, sparseValues, sparseShape, outType); + } + + /** + * Builds an {@link DecodeCsv} operation + * + * @param records Each string is a record/row in the csv and all records should have + * @param recordDefaults One tensor per column of the input record, with either a + * @param options carries optional attributes values + * @return a new instance of DecodeCsv + * @see org.tensorflow.op.io.DecodeCsv + */ + public DecodeCsv decodeCsv(Operand records, Iterable> recordDefaults, + DecodeCsv.Options... options) { + return DecodeCsv.create(scope, records, recordDefaults, options); + } + /** * Builds an {@link QueueDequeueMany} operation * @@ -452,8 +462,8 @@ public EncodeBase64 encodeBase64(Operand input, EncodeBase64.Options... * @return a new instance of QueueDequeueMany * @see org.tensorflow.op.io.QueueDequeueMany */ - public QueueDequeueMany queueDequeueMany(Operand handle, Operand n, - List> componentTypes, QueueDequeueMany.Options... options) { + public QueueDequeueMany queueDequeueMany(Operand handle, Operand n, + List> componentTypes, QueueDequeueMany.Options... options) { return QueueDequeueMany.create(scope, handle, n, componentTypes, options); } @@ -480,15 +490,22 @@ public ReaderNumWorkUnitsCompleted readerNumWorkUnitsCompleted(Operand reader } /** - * Builds an {@link ParseTensor} operation + * Builds an {@link ParseExample} operation * - * @param serialized A scalar string containing a serialized TensorProto proto. - * @param outType The type of the serialized tensor. The provided type must match the - * @return a new instance of ParseTensor - * @see org.tensorflow.op.io.ParseTensor + * @param serialized A vector containing a batch of binary serialized Example protos. + * @param names A vector containing the names of the serialized protos. + * @param sparseKeys A list of Nsparse string Tensors (scalars). + * @param denseKeys A list of Ndense string Tensors (scalars). + * @param denseDefaults A list of Ndense Tensors (some may be empty). + * @param sparseTypes A list of Nsparse types; the data types of data in each Feature + * @param denseShapes A list of Ndense shapes; the shapes of data in each Feature + * @return a new instance of ParseExample + * @see org.tensorflow.op.io.ParseExample */ - public ParseTensor parseTensor(Operand serialized, Class outType) { - return ParseTensor.create(scope, serialized, outType); + public ParseExample parseExample(Operand serialized, Operand names, + Iterable> sparseKeys, Iterable> denseKeys, + Iterable> denseDefaults, List> sparseTypes, List denseShapes) { + return ParseExample.create(scope, serialized, names, sparseKeys, denseKeys, denseDefaults, sparseTypes, denseShapes); } /** @@ -504,56 +521,31 @@ public ReaderRead readerRead(Operand readerHandle, Operand queueHandle) { } /** - * Builds an {@link DecodeBase64} operation - * - * @param input Base64 strings to decode. - * @return a new instance of DecodeBase64 - * @see org.tensorflow.op.io.DecodeBase64 - */ - public DecodeBase64 decodeBase64(Operand input) { - return DecodeBase64.create(scope, input); - } - - /** - * Builds an {@link PaddingFifoQueue} operation - * - * @param componentTypes The type of each component in a value. - * @param options carries optional attributes values - * @return a new instance of PaddingFifoQueue - * @see org.tensorflow.op.io.PaddingFifoQueue - */ - public PaddingFifoQueue paddingFifoQueue(List> componentTypes, - PaddingFifoQueue.Options... options) { - return PaddingFifoQueue.create(scope, componentTypes, options); - } - - /** - * Builds an {@link ParseSingleSequenceExample} operation + * Builds an {@link ParseSequenceExample} operation * - * @param serialized A scalar containing a binary serialized SequenceExample proto. + * @param serialized A vector containing binary serialized SequenceExample protos. + * @param debugName A vector containing the names of the serialized protos. + * @param contextDenseDefaults A list of Ncontext_dense Tensors (some may be empty). * @param featureListDenseMissingAssumedEmpty A vector listing the * @param contextSparseKeys A list of Ncontext_sparse string Tensors (scalars). * @param contextDenseKeys A list of Ncontext_dense string Tensors (scalars). * @param featureListSparseKeys A list of Nfeature_list_sparse string Tensors * @param featureListDenseKeys A list of Nfeature_list_dense string Tensors (scalars). - * @param contextDenseDefaults A list of Ncontext_dense Tensors (some may be empty). - * @param debugName A scalar containing the name of the serialized proto. * @param contextSparseTypes A list of Ncontext_sparse types; the data types of data in * @param featureListDenseTypes * @param featureListSparseTypes A list of Nfeature_list_sparse types; the data types * @param options carries optional attributes values - * @return a new instance of ParseSingleSequenceExample - * @see org.tensorflow.op.io.ParseSingleSequenceExample + * @return a new instance of ParseSequenceExample + * @see org.tensorflow.op.io.ParseSequenceExample */ - public ParseSingleSequenceExample parseSingleSequenceExample(Operand serialized, - Operand featureListDenseMissingAssumedEmpty, - Iterable> contextSparseKeys, Iterable> contextDenseKeys, - Iterable> featureListSparseKeys, - Iterable> featureListDenseKeys, Iterable> contextDenseDefaults, - Operand debugName, List> contextSparseTypes, - List> featureListDenseTypes, List> featureListSparseTypes, - ParseSingleSequenceExample.Options... options) { - return ParseSingleSequenceExample.create(scope, serialized, featureListDenseMissingAssumedEmpty, contextSparseKeys, contextDenseKeys, featureListSparseKeys, featureListDenseKeys, contextDenseDefaults, debugName, contextSparseTypes, featureListDenseTypes, featureListSparseTypes, options); + public ParseSequenceExample parseSequenceExample(Operand serialized, + Operand debugName, Iterable> contextDenseDefaults, + List featureListDenseMissingAssumedEmpty, List contextSparseKeys, + List contextDenseKeys, List featureListSparseKeys, + List featureListDenseKeys, List> contextSparseTypes, + List> featureListDenseTypes, List> featureListSparseTypes, + ParseSequenceExample.Options... options) { + return ParseSequenceExample.create(scope, serialized, debugName, contextDenseDefaults, featureListDenseMissingAssumedEmpty, contextSparseKeys, contextDenseKeys, featureListSparseKeys, featureListDenseKeys, contextSparseTypes, featureListDenseTypes, featureListSparseTypes, options); } /** @@ -568,29 +560,16 @@ public SerializeTensor serializeTensor(Operand tensor) { } /** - * Builds an {@link ShardedFilespec} operation - * - * @param basename - * @param numShards - * @return a new instance of ShardedFilespec - * @see org.tensorflow.op.io.ShardedFilespec - */ - public ShardedFilespec shardedFilespec(Operand basename, Operand numShards) { - return ShardedFilespec.create(scope, basename, numShards); - } - - /** - * Builds an {@link SerializeSparse} operation + * Builds an {@link DecodeCompressed} operation * - * @param sparseIndices 2-D. The `indices` of the `SparseTensor`. - * @param sparseValues 1-D. The `values` of the `SparseTensor`. - * @param sparseShape 1-D. The `shape` of the `SparseTensor`. - * @return a new instance of SerializeSparse - * @see org.tensorflow.op.io.SerializeSparse + * @param bytes A Tensor of string which is compressed. + * @param options carries optional attributes values + * @return a new instance of DecodeCompressed + * @see org.tensorflow.op.io.DecodeCompressed */ - public SerializeSparse serializeSparse(Operand sparseIndices, - Operand sparseValues, Operand sparseShape) { - return SerializeSparse.create(scope, sparseIndices, sparseValues, sparseShape); + public DecodeCompressed decodeCompressed(Operand bytes, + DecodeCompressed.Options... options) { + return DecodeCompressed.create(scope, bytes, options); } /** @@ -605,54 +584,54 @@ public QueueIsClosed queueIsClosed(Operand handle) { } /** - * Builds an {@link MatchingFiles} operation + * Builds an {@link DeserializeManySparse} operation * - * @param pattern Shell wildcard pattern(s). Scalar or vector of type string. - * @return a new instance of MatchingFiles - * @see org.tensorflow.op.io.MatchingFiles + * @param serializedSparse 2-D, The `N` serialized `SparseTensor` objects. + * @param dtype The `dtype` of the serialized `SparseTensor` objects. + * @return a new instance of DeserializeManySparse + * @see org.tensorflow.op.io.DeserializeManySparse */ - public MatchingFiles matchingFiles(Operand pattern) { - return MatchingFiles.create(scope, pattern); + public DeserializeManySparse deserializeManySparse(Operand serializedSparse, + DataType dtype) { + return DeserializeManySparse.create(scope, serializedSparse, dtype); } /** - * Builds an {@link SerializeManySparse} operation + * Builds an {@link QueueSize} operation * - * @param sparseIndices 2-D. The `indices` of the minibatch `SparseTensor`. - * @param sparseValues 1-D. The `values` of the minibatch `SparseTensor`. - * @param sparseShape 1-D. The `shape` of the minibatch `SparseTensor`. - * @param outType The `dtype` to use for serialization; the supported types are `string` - * @return a new instance of SerializeManySparse - * @see org.tensorflow.op.io.SerializeManySparse + * @param handle The handle to a queue. + * @return a new instance of QueueSize + * @see org.tensorflow.op.io.QueueSize */ - public SerializeManySparse serializeManySparse(Operand sparseIndices, - Operand sparseValues, Operand sparseShape, Class outType) { - return SerializeManySparse.create(scope, sparseIndices, sparseValues, sparseShape, outType); + public QueueSize queueSize(Operand handle) { + return QueueSize.create(scope, handle); } /** - * Builds an {@link DecodeRaw} operation + * Builds an {@link RandomShuffleQueue} operation * - * @param bytes All the elements must have the same length. - * @param outType + * @param componentTypes The type of each component in a value. * @param options carries optional attributes values - * @return a new instance of DecodeRaw - * @see org.tensorflow.op.io.DecodeRaw + * @return a new instance of RandomShuffleQueue + * @see org.tensorflow.op.io.RandomShuffleQueue */ - public DecodeRaw decodeRaw(Operand bytes, Class outType, - DecodeRaw.Options... options) { - return DecodeRaw.create(scope, bytes, outType, options); + public RandomShuffleQueue randomShuffleQueue(List> componentTypes, + RandomShuffleQueue.Options... options) { + return RandomShuffleQueue.create(scope, componentTypes, options); } /** - * Builds an {@link QueueSize} operation + * Builds an {@link QueueDequeue} operation * * @param handle The handle to a queue. - * @return a new instance of QueueSize - * @see org.tensorflow.op.io.QueueSize + * @param componentTypes The type of each component in a tuple. + * @param options carries optional attributes values + * @return a new instance of QueueDequeue + * @see org.tensorflow.op.io.QueueDequeue */ - public QueueSize queueSize(Operand handle) { - return QueueSize.create(scope, handle); + public QueueDequeue queueDequeue(Operand handle, List> componentTypes, + QueueDequeue.Options... options) { + return QueueDequeue.create(scope, handle, componentTypes, options); } /** @@ -666,6 +645,20 @@ public TextLineReader textLineReader(TextLineReader.Options... options) { return TextLineReader.create(scope, options); } + /** + * Builds an {@link SerializeSparse} operation + * + * @param sparseIndices 2-D. The `indices` of the `SparseTensor`. + * @param sparseValues 1-D. The `values` of the `SparseTensor`. + * @param sparseShape 1-D. The `shape` of the `SparseTensor`. + * @return a new instance of SerializeSparse + * @see org.tensorflow.op.io.SerializeSparse + */ + public SerializeSparse serializeSparse(Operand sparseIndices, + Operand sparseValues, Operand sparseShape) { + return SerializeSparse.create(scope, sparseIndices, sparseValues, sparseShape); + } + /** * Builds an {@link FixedLengthRecordReader} operation * @@ -680,16 +673,27 @@ public FixedLengthRecordReader fixedLengthRecordReader(Long recordBytes, } /** - * Builds an {@link DecodeCsv} operation + * Builds an {@link ReaderRestoreState} operation * - * @param records Each string is a record/row in the csv and all records should have - * @param recordDefaults One tensor per column of the input record, with either a + * @param readerHandle Handle to a Reader. + * @param state Result of a ReaderSerializeState of a Reader with type + * @return a new instance of ReaderRestoreState + * @see org.tensorflow.op.io.ReaderRestoreState + */ + public ReaderRestoreState readerRestoreState(Operand readerHandle, Operand state) { + return ReaderRestoreState.create(scope, readerHandle, state); + } + + /** + * Builds an {@link PaddingFifoQueue} operation + * + * @param componentTypes The type of each component in a value. * @param options carries optional attributes values - * @return a new instance of DecodeCsv - * @see org.tensorflow.op.io.DecodeCsv + * @return a new instance of PaddingFifoQueue + * @see org.tensorflow.op.io.PaddingFifoQueue */ - public DecodeCsv decodeCsv(Operand records, Iterable> recordDefaults, - DecodeCsv.Options... options) { - return DecodeCsv.create(scope, records, recordDefaults, options); + public PaddingFifoQueue paddingFifoQueue(List> componentTypes, + PaddingFifoQueue.Options... options) { + return PaddingFifoQueue.create(scope, componentTypes, options); } } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/LinalgOps.java b/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/LinalgOps.java index f6b4876cf12..7a4ca1367f0 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/LinalgOps.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/LinalgOps.java @@ -1,5 +1,6 @@ package org.tensorflow.op; +import org.tensorflow.DataType; import org.tensorflow.Operand; import org.tensorflow.op.linalg.BandPart; import org.tensorflow.op.linalg.BatchCholesky; @@ -39,6 +40,11 @@ import org.tensorflow.op.linalg.TensorDiagPart; import org.tensorflow.op.linalg.Transpose; import org.tensorflow.op.linalg.TriangularSolve; +import org.tensorflow.types.TDouble; +import org.tensorflow.types.TFloat; +import org.tensorflow.types.TInt64; +import org.tensorflow.types.TString; +import org.tensorflow.types.family.TNumber; /** * An API for building {@code linalg} operations as {@link Op Op}s @@ -52,20 +58,6 @@ public final class LinalgOps { this.scope = scope; } - /** - * Builds an {@link BatchMatrixSolve} operation - * - * @param matrix - * @param rhs - * @param options carries optional attributes values - * @return a new instance of BatchMatrixSolve - * @see org.tensorflow.op.linalg.BatchMatrixSolve - */ - public BatchMatrixSolve batchMatrixSolve(Operand matrix, Operand rhs, - BatchMatrixSolve.Options... options) { - return BatchMatrixSolve.create(scope, matrix, rhs, options); - } - /** * Builds an {@link Qr} operation * @@ -78,19 +70,6 @@ public Qr qr(Operand input, Qr.Options... options) { return Qr.create(scope, input, options); } - /** - * Builds an {@link ConjugateTranspose} operation - * - * @param x - * @param perm - * @return a new instance of ConjugateTranspose - * @see org.tensorflow.op.linalg.ConjugateTranspose - */ - public ConjugateTranspose conjugateTranspose(Operand x, - Operand perm) { - return ConjugateTranspose.create(scope, x, perm); - } - /** * Builds an {@link BatchMatrixDiagPart} operation * @@ -102,6 +81,21 @@ public BatchMatrixDiagPart batchMatrixDiagPart(Operand input) { return BatchMatrixDiagPart.create(scope, input); } + /** + * Builds an {@link BatchMatrixSolveLs} operation + * + * @param matrix + * @param rhs + * @param l2Regularizer + * @param options carries optional attributes values + * @return a new instance of BatchMatrixSolveLs + * @see org.tensorflow.op.linalg.BatchMatrixSolveLs + */ + public BatchMatrixSolveLs batchMatrixSolveLs(Operand matrix, + Operand rhs, Operand l2Regularizer, BatchMatrixSolveLs.Options... options) { + return BatchMatrixSolveLs.create(scope, matrix, rhs, l2Regularizer, options); + } + /** * Builds an {@link BatchMatrixBandPart} operation * @@ -111,8 +105,8 @@ public BatchMatrixDiagPart batchMatrixDiagPart(Operand input) { * @return a new instance of BatchMatrixBandPart * @see org.tensorflow.op.linalg.BatchMatrixBandPart */ - public BatchMatrixBandPart batchMatrixBandPart(Operand input, Operand numLower, - Operand numUpper) { + public BatchMatrixBandPart batchMatrixBandPart(Operand input, Operand numLower, + Operand numUpper) { return BatchMatrixBandPart.create(scope, input, numLower, numUpper); } @@ -128,24 +122,16 @@ public BatchMatrixDeterminant batchMatrixDeterminant(Operand input) { } /** - * Builds an {@link LoadAndRemapMatrix} operation + * Builds an {@link BatchMatrixInverse} operation * - * @param ckptPath Path to the TensorFlow checkpoint (version 2, `TensorBundle`) from - * @param oldTensorName Name of the 2-D `Tensor` to load from checkpoint. - * @param rowRemapping An int `Tensor` of row remappings (generally created by - * @param colRemapping An int `Tensor` of column remappings (generally created by - * @param initializingValues A float `Tensor` containing values to fill in for cells - * @param numRows Number of rows (length of the 1st dimension) in the output matrix. - * @param numCols Number of columns (length of the 2nd dimension) in the output matrix. + * @param input * @param options carries optional attributes values - * @return a new instance of LoadAndRemapMatrix - * @see org.tensorflow.op.linalg.LoadAndRemapMatrix + * @return a new instance of BatchMatrixInverse + * @see org.tensorflow.op.linalg.BatchMatrixInverse */ - public LoadAndRemapMatrix loadAndRemapMatrix(Operand ckptPath, - Operand oldTensorName, Operand rowRemapping, Operand colRemapping, - Operand initializingValues, Long numRows, Long numCols, - LoadAndRemapMatrix.Options... options) { - return LoadAndRemapMatrix.create(scope, ckptPath, oldTensorName, rowRemapping, colRemapping, initializingValues, numRows, numCols, options); + public BatchMatrixInverse batchMatrixInverse(Operand input, + BatchMatrixInverse.Options... options) { + return BatchMatrixInverse.create(scope, input, options); } /** @@ -159,6 +145,18 @@ public TensorDiag tensorDiag(Operand diagonal) { return TensorDiag.create(scope, diagonal); } + /** + * Builds an {@link Cross} operation + * + * @param a A tensor containing 3-element vectors. + * @param b Another tensor, of same type and shape as `a`. + * @return a new instance of Cross + * @see org.tensorflow.op.linalg.Cross + */ + public Cross cross(Operand a, Operand b) { + return Cross.create(scope, a, b); + } + /** * Builds an {@link TriangularSolve} operation * @@ -185,6 +183,18 @@ public SelfAdjointEig selfAdjointEig(Operand input, SelfAdjointEig.Opt return SelfAdjointEig.create(scope, input, options); } + /** + * Builds an {@link Transpose} operation + * + * @param x + * @param perm + * @return a new instance of Transpose + * @see org.tensorflow.op.linalg.Transpose + */ + public Transpose transpose(Operand x, Operand perm) { + return Transpose.create(scope, x, perm); + } + /** * Builds an {@link Sqrtm} operation * @@ -197,15 +207,15 @@ public Sqrtm sqrtm(Operand input) { } /** - * Builds an {@link BatchCholeskyGrad} operation + * Builds an {@link Svd} operation * - * @param l - * @param grad - * @return a new instance of BatchCholeskyGrad - * @see org.tensorflow.op.linalg.BatchCholeskyGrad + * @param input A tensor of shape `[..., M, N]` whose inner-most 2 dimensions + * @param options carries optional attributes values + * @return a new instance of Svd + * @see org.tensorflow.op.linalg.Svd */ - public BatchCholeskyGrad batchCholeskyGrad(Operand l, Operand grad) { - return BatchCholeskyGrad.create(scope, l, grad); + public Svd svd(Operand input, Svd.Options... options) { + return Svd.create(scope, input, options); } /** @@ -220,37 +230,60 @@ public Cholesky cholesky(Operand input) { } /** - * Builds an {@link BatchCholesky} operation + * Builds an {@link Det} operation * - * @param input - * @return a new instance of BatchCholesky - * @see org.tensorflow.op.linalg.BatchCholesky + * @param input Shape is `[..., M, M]`. + * @return a new instance of Det + * @see org.tensorflow.op.linalg.Det */ - public BatchCholesky batchCholesky(Operand input) { - return BatchCholesky.create(scope, input); + public Det det(Operand input) { + return Det.create(scope, input); } /** - * Builds an {@link Svd} operation + * Builds an {@link CholeskyGrad} operation * - * @param input A tensor of shape `[..., M, N]` whose inner-most 2 dimensions + * @param l Output of batch Cholesky algorithm l = cholesky(A). Shape is `[..., M, M]`. + * @param grad df/dl where f is some scalar function. Shape is `[..., M, M]`. + * @return a new instance of CholeskyGrad + * @see org.tensorflow.op.linalg.CholeskyGrad + */ + public CholeskyGrad choleskyGrad(Operand l, Operand grad) { + return CholeskyGrad.create(scope, l, grad); + } + + /** + * Builds an {@link BatchSelfAdjointEig} operation + * + * @param input * @param options carries optional attributes values - * @return a new instance of Svd - * @see org.tensorflow.op.linalg.Svd + * @return a new instance of BatchSelfAdjointEig + * @see org.tensorflow.op.linalg.BatchSelfAdjointEig */ - public Svd svd(Operand input, Svd.Options... options) { - return Svd.create(scope, input, options); + public BatchSelfAdjointEig batchSelfAdjointEig(Operand input, + BatchSelfAdjointEig.Options... options) { + return BatchSelfAdjointEig.create(scope, input, options); } /** - * Builds an {@link Det} operation + * Builds an {@link QuantizedMatMul} operation * - * @param input Shape is `[..., M, M]`. - * @return a new instance of Det - * @see org.tensorflow.op.linalg.Det + * @param a Must be a two-dimensional tensor. + * @param b Must be a two-dimensional tensor. + * @param minA The float value that the lowest quantized `a` value represents. + * @param maxA The float value that the highest quantized `a` value represents. + * @param minB The float value that the lowest quantized `b` value represents. + * @param maxB The float value that the highest quantized `b` value represents. + * @param Toutput + * @param Tactivation The type of output produced by activation function + * @param options carries optional attributes values + * @return a new instance of QuantizedMatMul + * @see org.tensorflow.op.linalg.QuantizedMatMul */ - public Det det(Operand input) { - return Det.create(scope, input); + public QuantizedMatMul quantizedMatMul(Operand a, Operand b, + Operand minA, Operand maxA, Operand minB, Operand maxB, + DataType Toutput, DataType Tactivation, QuantizedMatMul.Options... options) { + return QuantizedMatMul.create(scope, a, b, minA, maxA, minB, maxB, Toutput, Tactivation, options); } /** @@ -290,18 +323,24 @@ public Solve solve(Operand matrix, Operand rhs, Solve.Options... op } /** - * Builds an {@link MatrixSolveLs} operation + * Builds an {@link LoadAndRemapMatrix} operation * - * @param matrix Shape is `[..., M, N]`. - * @param rhs Shape is `[..., M, K]`. - * @param l2Regularizer Scalar tensor. + * @param ckptPath Path to the TensorFlow checkpoint (version 2, `TensorBundle`) from + * @param oldTensorName Name of the 2-D `Tensor` to load from checkpoint. + * @param rowRemapping An int `Tensor` of row remappings (generally created by + * @param colRemapping An int `Tensor` of column remappings (generally created by + * @param initializingValues A float `Tensor` containing values to fill in for cells + * @param numRows Number of rows (length of the 1st dimension) in the output matrix. + * @param numCols Number of columns (length of the 2nd dimension) in the output matrix. * @param options carries optional attributes values - * @return a new instance of MatrixSolveLs - * @see org.tensorflow.op.linalg.MatrixSolveLs + * @return a new instance of LoadAndRemapMatrix + * @see org.tensorflow.op.linalg.LoadAndRemapMatrix */ - public MatrixSolveLs matrixSolveLs(Operand matrix, Operand rhs, - Operand l2Regularizer, MatrixSolveLs.Options... options) { - return MatrixSolveLs.create(scope, matrix, rhs, l2Regularizer, options); + public LoadAndRemapMatrix loadAndRemapMatrix(Operand ckptPath, + Operand oldTensorName, Operand rowRemapping, Operand colRemapping, + Operand initializingValues, Long numRows, Long numCols, + LoadAndRemapMatrix.Options... options) { + return LoadAndRemapMatrix.create(scope, ckptPath, oldTensorName, rowRemapping, colRemapping, initializingValues, numRows, numCols, options); } /** @@ -317,28 +356,28 @@ public BatchSvd batchSvd(Operand input, BatchSvd.Options... options) { } /** - * Builds an {@link BatchMatrixInverse} operation + * Builds an {@link BatchCholesky} operation * * @param input - * @param options carries optional attributes values - * @return a new instance of BatchMatrixInverse - * @see org.tensorflow.op.linalg.BatchMatrixInverse + * @return a new instance of BatchCholesky + * @see org.tensorflow.op.linalg.BatchCholesky */ - public BatchMatrixInverse batchMatrixInverse(Operand input, - BatchMatrixInverse.Options... options) { - return BatchMatrixInverse.create(scope, input, options); + public BatchCholesky batchCholesky(Operand input) { + return BatchCholesky.create(scope, input); } /** - * Builds an {@link CholeskyGrad} operation + * Builds an {@link BatchMatrixSolve} operation * - * @param l Output of batch Cholesky algorithm l = cholesky(A). Shape is `[..., M, M]`. - * @param grad df/dl where f is some scalar function. Shape is `[..., M, M]`. - * @return a new instance of CholeskyGrad - * @see org.tensorflow.op.linalg.CholeskyGrad + * @param matrix + * @param rhs + * @param options carries optional attributes values + * @return a new instance of BatchMatrixSolve + * @see org.tensorflow.op.linalg.BatchMatrixSolve */ - public CholeskyGrad choleskyGrad(Operand l, Operand grad) { - return CholeskyGrad.create(scope, l, grad); + public BatchMatrixSolve batchMatrixSolve(Operand matrix, Operand rhs, + BatchMatrixSolve.Options... options) { + return BatchMatrixSolve.create(scope, matrix, rhs, options); } /** @@ -353,20 +392,6 @@ public Inv inv(Operand input, Inv.Options... options) { return Inv.create(scope, input, options); } - /** - * Builds an {@link BatchMatrixTriangularSolve} operation - * - * @param matrix - * @param rhs - * @param options carries optional attributes values - * @return a new instance of BatchMatrixTriangularSolve - * @see org.tensorflow.op.linalg.BatchMatrixTriangularSolve - */ - public BatchMatrixTriangularSolve batchMatrixTriangularSolve( - Operand matrix, Operand rhs, BatchMatrixTriangularSolve.Options... options) { - return BatchMatrixTriangularSolve.create(scope, matrix, rhs, options); - } - /** * Builds an {@link MatMul} operation * @@ -380,39 +405,6 @@ public MatMul matMul(Operand a, Operand b, MatMul.Options... option return MatMul.create(scope, a, b, options); } - /** - * Builds an {@link QuantizedMatMul} operation - * - * @param a Must be a two-dimensional tensor. - * @param b Must be a two-dimensional tensor. - * @param minA The float value that the lowest quantized `a` value represents. - * @param maxA The float value that the highest quantized `a` value represents. - * @param minB The float value that the lowest quantized `b` value represents. - * @param maxB The float value that the highest quantized `b` value represents. - * @param Toutput - * @param Tactivation The type of output produced by activation function - * @param options carries optional attributes values - * @return a new instance of QuantizedMatMul - * @see org.tensorflow.op.linalg.QuantizedMatMul - */ - public QuantizedMatMul quantizedMatMul(Operand a, Operand b, - Operand minA, Operand maxA, Operand minB, Operand maxB, - Class Toutput, Class Tactivation, QuantizedMatMul.Options... options) { - return QuantizedMatMul.create(scope, a, b, minA, maxA, minB, maxB, Toutput, Tactivation, options); - } - - /** - * Builds an {@link Cross} operation - * - * @param a A tensor containing 3-element vectors. - * @param b Another tensor, of same type and shape as `a`. - * @return a new instance of Cross - * @see org.tensorflow.op.linalg.Cross - */ - public Cross cross(Operand a, Operand b) { - return Cross.create(scope, a, b); - } - /** * Builds an {@link BatchMatrixDiag} operation * @@ -425,15 +417,17 @@ public BatchMatrixDiag batchMatrixDiag(Operand diagonal) { } /** - * Builds an {@link Transpose} operation + * Builds an {@link BandPart} operation * - * @param x - * @param perm - * @return a new instance of Transpose - * @see org.tensorflow.op.linalg.Transpose + * @param input Rank `k` tensor. + * @param numLower 0-D tensor. Number of subdiagonals to keep. If negative, keep entire + * @param numUpper 0-D tensor. Number of superdiagonals to keep. If negative, keep + * @return a new instance of BandPart + * @see org.tensorflow.op.linalg.BandPart */ - public Transpose transpose(Operand x, Operand perm) { - return Transpose.create(scope, x, perm); + public BandPart bandPart(Operand input, Operand numLower, + Operand numUpper) { + return BandPart.create(scope, input, numLower, numUpper); } /** @@ -448,18 +442,30 @@ public LogMatrixDeterminant logMatrixDeterminant(Operand input) { } /** - * Builds an {@link BatchMatrixSolveLs} operation + * Builds an {@link MatrixSolveLs} operation * - * @param matrix - * @param rhs - * @param l2Regularizer + * @param matrix Shape is `[..., M, N]`. + * @param rhs Shape is `[..., M, K]`. + * @param l2Regularizer Scalar tensor. * @param options carries optional attributes values - * @return a new instance of BatchMatrixSolveLs - * @see org.tensorflow.op.linalg.BatchMatrixSolveLs + * @return a new instance of MatrixSolveLs + * @see org.tensorflow.op.linalg.MatrixSolveLs */ - public BatchMatrixSolveLs batchMatrixSolveLs(Operand matrix, - Operand rhs, Operand l2Regularizer, BatchMatrixSolveLs.Options... options) { - return BatchMatrixSolveLs.create(scope, matrix, rhs, l2Regularizer, options); + public MatrixSolveLs matrixSolveLs(Operand matrix, Operand rhs, + Operand l2Regularizer, MatrixSolveLs.Options... options) { + return MatrixSolveLs.create(scope, matrix, rhs, l2Regularizer, options); + } + + /** + * Builds an {@link BatchCholeskyGrad} operation + * + * @param l + * @param grad + * @return a new instance of BatchCholeskyGrad + * @see org.tensorflow.op.linalg.BatchCholeskyGrad + */ + public BatchCholeskyGrad batchCholeskyGrad(Operand l, Operand grad) { + return BatchCholeskyGrad.create(scope, l, grad); } /** @@ -497,30 +503,16 @@ public TensorDiagPart tensorDiagPart(Operand input) { } /** - * Builds an {@link BandPart} operation - * - * @param input Rank `k` tensor. - * @param numLower 0-D tensor. Number of subdiagonals to keep. If negative, keep entire - * @param numUpper 0-D tensor. Number of superdiagonals to keep. If negative, keep - * @return a new instance of BandPart - * @see org.tensorflow.op.linalg.BandPart - */ - public BandPart bandPart(Operand input, Operand numLower, - Operand numUpper) { - return BandPart.create(scope, input, numLower, numUpper); - } - - /** - * Builds an {@link BatchSelfAdjointEig} operation + * Builds an {@link ConjugateTranspose} operation * - * @param input - * @param options carries optional attributes values - * @return a new instance of BatchSelfAdjointEig - * @see org.tensorflow.op.linalg.BatchSelfAdjointEig + * @param x + * @param perm + * @return a new instance of ConjugateTranspose + * @see org.tensorflow.op.linalg.ConjugateTranspose */ - public BatchSelfAdjointEig batchSelfAdjointEig(Operand input, - BatchSelfAdjointEig.Options... options) { - return BatchSelfAdjointEig.create(scope, input, options); + public ConjugateTranspose conjugateTranspose(Operand x, + Operand perm) { + return ConjugateTranspose.create(scope, x, perm); } /** @@ -536,4 +528,18 @@ public BatchMatMul batchMatMul(Operand x, Operand y, BatchMatMul.Options... options) { return BatchMatMul.create(scope, x, y, options); } + + /** + * Builds an {@link BatchMatrixTriangularSolve} operation + * + * @param matrix + * @param rhs + * @param options carries optional attributes values + * @return a new instance of BatchMatrixTriangularSolve + * @see org.tensorflow.op.linalg.BatchMatrixTriangularSolve + */ + public BatchMatrixTriangularSolve batchMatrixTriangularSolve( + Operand matrix, Operand rhs, BatchMatrixTriangularSolve.Options... options) { + return BatchMatrixTriangularSolve.create(scope, matrix, rhs, options); + } } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/MathOps.java b/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/MathOps.java index 7f14ae6abe5..e1b387a6f0b 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/MathOps.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/MathOps.java @@ -1,7 +1,8 @@ package org.tensorflow.op; +import org.tensorflow.DataType; import org.tensorflow.Operand; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.math.Abs; import org.tensorflow.op.math.AccumulateN; import org.tensorflow.op.math.Acos; @@ -102,6 +103,11 @@ import org.tensorflow.op.math.Xdivy; import org.tensorflow.op.math.Xlogy; import org.tensorflow.op.math.Zeta; +import org.tensorflow.types.TBool; +import org.tensorflow.types.TFloat; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.TInt64; +import org.tensorflow.types.family.TNumber; /** * An API for building {@code math} operations as {@link Op Op}s @@ -116,26 +122,89 @@ public final class MathOps { } /** - * Builds an {@link LogicalOr} operation + * Builds an {@link ArgMax} operation * + * @param input + * @param dimension int32 or int64, must be in the range `[-rank(input), rank(input))`. + * @return a new instance of ArgMax + * @see org.tensorflow.op.math.ArgMax + */ + public ArgMax argMax(Operand input, Operand dimension) { + return ArgMax.create(scope, input, dimension); + } + + /** + * Builds an {@link Polygamma} operation + * + * @param a * @param x - * @param y - * @return a new instance of LogicalOr - * @see org.tensorflow.op.math.LogicalOr + * @return a new instance of Polygamma + * @see org.tensorflow.op.math.Polygamma */ - public LogicalOr logicalOr(Operand x, Operand y) { - return LogicalOr.create(scope, x, y); + public Polygamma polygamma(Operand a, Operand x) { + return Polygamma.create(scope, a, x); } /** - * Builds an {@link Digamma} operation + * Builds an {@link Bincount} operation + * + * @param arr int32 `Tensor`. + * @param size non-negative int32 scalar `Tensor`. + * @param weights is an int32, int64, float32, or float64 `Tensor` with the same + * @return a new instance of Bincount + * @see org.tensorflow.op.math.Bincount + */ + public Bincount bincount(Operand arr, Operand size, + Operand weights) { + return Bincount.create(scope, arr, size, weights); + } + + /** + * Builds an {@link BesselI0e} operation * * @param x - * @return a new instance of Digamma - * @see org.tensorflow.op.math.Digamma + * @return a new instance of BesselI0e + * @see org.tensorflow.op.math.BesselI0e */ - public Digamma digamma(Operand x) { - return Digamma.create(scope, x); + public BesselI0e besselI0e(Operand x) { + return BesselI0e.create(scope, x); + } + + /** + * Builds an {@link UnsortedSegmentSum} operation + * + * @param data + * @param segmentIds A tensor whose shape is a prefix of `data.shape`. + * @param numSegments + * @return a new instance of UnsortedSegmentSum + * @see org.tensorflow.op.math.UnsortedSegmentSum + */ + public UnsortedSegmentSum unsortedSegmentSum( + Operand data, Operand segmentIds, Operand numSegments) { + return UnsortedSegmentSum.create(scope, data, segmentIds, numSegments); + } + + /** + * Builds an {@link Rint} operation + * + * @param x + * @return a new instance of Rint + * @see org.tensorflow.op.math.Rint + */ + public Rint rint(Operand x) { + return Rint.create(scope, x); + } + + /** + * Builds an {@link Igamma} operation + * + * @param a + * @param x + * @return a new instance of Igamma + * @see org.tensorflow.op.math.Igamma + */ + public Igamma igamma(Operand a, Operand x) { + return Igamma.create(scope, a, x); } /** @@ -150,6 +219,20 @@ public TruncateDiv truncateDiv(Operand x, Operand y) { return TruncateDiv.create(scope, x, y); } + /** + * Builds an {@link Mean} operation + * + * @param input The tensor to reduce. + * @param axis The dimensions to reduce. Must be in the range + * @param options carries optional attributes values + * @return a new instance of Mean + * @see org.tensorflow.op.math.Mean + */ + public Mean mean(Operand input, Operand axis, + Mean.Options... options) { + return Mean.create(scope, input, axis, options); + } + /** * Builds an {@link Square} operation * @@ -162,26 +245,37 @@ public Square square(Operand x) { } /** - * Builds an {@link LogicalNot} operation + * Builds an {@link IsInf} operation * * @param x - * @return a new instance of LogicalNot - * @see org.tensorflow.op.math.LogicalNot + * @return a new instance of IsInf + * @see org.tensorflow.op.math.IsInf */ - public LogicalNot logicalNot(Operand x) { - return LogicalNot.create(scope, x); + public IsInf isInf(Operand x) { + return IsInf.create(scope, x); } /** - * Builds an {@link CheckNumerics} operation + * Builds an {@link LessEqual} operation * - * @param tensor - * @param message Prefix of the error message. - * @return a new instance of CheckNumerics - * @see org.tensorflow.op.math.CheckNumerics + * @param x + * @param y + * @return a new instance of LessEqual + * @see org.tensorflow.op.math.LessEqual */ - public CheckNumerics checkNumerics(Operand tensor, String message) { - return CheckNumerics.create(scope, tensor, message); + public LessEqual lessEqual(Operand x, Operand y) { + return LessEqual.create(scope, x, y); + } + + /** + * Builds an {@link BesselI1e} operation + * + * @param x + * @return a new instance of BesselI1e + * @see org.tensorflow.op.math.BesselI1e + */ + public BesselI1e besselI1e(Operand x) { + return BesselI1e.create(scope, x); } /** @@ -197,20 +291,6 @@ public Equal equal(Operand x, Operand y, Equal.Options... options) { return Equal.create(scope, x, y, options); } - /** - * Builds an {@link Bincount} operation - * - * @param arr int32 `Tensor`. - * @param size non-negative int32 scalar `Tensor`. - * @param weights is an int32, int64, float32, or float64 `Tensor` with the same - * @return a new instance of Bincount - * @see org.tensorflow.op.math.Bincount - */ - public Bincount bincount(Operand arr, Operand size, - Operand weights) { - return Bincount.create(scope, arr, size, weights); - } - /** * Builds an {@link Mul} operation * @@ -223,6 +303,29 @@ public Mul mul(Operand x, Operand y) { return Mul.create(scope, x, y); } + /** + * Builds an {@link Ceil} operation + * + * @param x + * @return a new instance of Ceil + * @see org.tensorflow.op.math.Ceil + */ + public Ceil ceil(Operand x) { + return Ceil.create(scope, x); + } + + /** + * Builds an {@link Atan2} operation + * + * @param y + * @param x + * @return a new instance of Atan2 + * @see org.tensorflow.op.math.Atan2 + */ + public Atan2 atan2(Operand y, Operand x) { + return Atan2.create(scope, y, x); + } + /** * Builds an {@link Neg} operation * @@ -245,18 +348,6 @@ public Asinh asinh(Operand x) { return Asinh.create(scope, x); } - /** - * Builds an {@link SegmentMean} operation - * - * @param data - * @param segmentIds A 1-D tensor whose size is equal to the size of `data`'s - * @return a new instance of SegmentMean - * @see org.tensorflow.op.math.SegmentMean - */ - public SegmentMean segmentMean(Operand data, Operand segmentIds) { - return SegmentMean.create(scope, data, segmentIds); - } - /** * Builds an {@link Atan} operation * @@ -269,15 +360,15 @@ public Atan atan(Operand x) { } /** - * Builds an {@link TruncateMod} operation + * Builds an {@link Xlogy} operation * * @param x * @param y - * @return a new instance of TruncateMod - * @see org.tensorflow.op.math.TruncateMod + * @return a new instance of Xlogy + * @see org.tensorflow.op.math.Xlogy */ - public TruncateMod truncateMod(Operand x, Operand y) { - return TruncateMod.create(scope, x, y); + public Xlogy xlogy(Operand x, Operand y) { + return Xlogy.create(scope, x, y); } /** @@ -292,29 +383,17 @@ public Acos acos(Operand x) { } /** - * Builds an {@link Xlogy} operation - * - * @param x - * @param y - * @return a new instance of Xlogy - * @see org.tensorflow.op.math.Xlogy - */ - public Xlogy xlogy(Operand x, Operand y) { - return Xlogy.create(scope, x, y); - } - - /** - * Builds an {@link UnsortedSegmentSum} operation + * Builds an {@link UnsortedSegmentMin} operation * * @param data * @param segmentIds A tensor whose shape is a prefix of `data.shape`. * @param numSegments - * @return a new instance of UnsortedSegmentSum - * @see org.tensorflow.op.math.UnsortedSegmentSum + * @return a new instance of UnsortedSegmentMin + * @see org.tensorflow.op.math.UnsortedSegmentMin */ - public UnsortedSegmentSum unsortedSegmentSum( + public UnsortedSegmentMin unsortedSegmentMin( Operand data, Operand segmentIds, Operand numSegments) { - return UnsortedSegmentSum.create(scope, data, segmentIds, numSegments); + return UnsortedSegmentMin.create(scope, data, segmentIds, numSegments); } /** @@ -328,45 +407,6 @@ public Tan tan(Operand x) { return Tan.create(scope, x); } - /** - * Builds an {@link Betainc} operation - * - * @param a - * @param b - * @param x - * @return a new instance of Betainc - * @see org.tensorflow.op.math.Betainc - */ - public Betainc betainc(Operand a, Operand b, Operand x) { - return Betainc.create(scope, a, b, x); - } - - /** - * Builds an {@link UnsortedSegmentProd} operation - * - * @param data - * @param segmentIds A tensor whose shape is a prefix of `data.shape`. - * @param numSegments - * @return a new instance of UnsortedSegmentProd - * @see org.tensorflow.op.math.UnsortedSegmentProd - */ - public UnsortedSegmentProd unsortedSegmentProd( - Operand data, Operand segmentIds, Operand numSegments) { - return UnsortedSegmentProd.create(scope, data, segmentIds, numSegments); - } - - /** - * Builds an {@link Igamma} operation - * - * @param a - * @param x - * @return a new instance of Igamma - * @see org.tensorflow.op.math.Igamma - */ - public Igamma igamma(Operand a, Operand x) { - return Igamma.create(scope, a, x); - } - /** * Builds an {@link Xdivy} operation * @@ -380,48 +420,37 @@ public Xdivy xdivy(Operand x, Operand y) { } /** - * Builds an {@link Ceil} operation - * - * @param x - * @return a new instance of Ceil - * @see org.tensorflow.op.math.Ceil - */ - public Ceil ceil(Operand x) { - return Ceil.create(scope, x); - } - - /** - * Builds an {@link ComplexAbs} operation + * Builds an {@link Maximum} operation * * @param x - * @param Tout - * @return a new instance of ComplexAbs - * @see org.tensorflow.op.math.ComplexAbs + * @param y + * @return a new instance of Maximum + * @see org.tensorflow.op.math.Maximum */ - public ComplexAbs complexAbs(Operand x, Class Tout) { - return ComplexAbs.create(scope, x, Tout); + public Maximum maximum(Operand x, Operand y) { + return Maximum.create(scope, x, y); } /** - * Builds an {@link BesselI0e} operation + * Builds an {@link Log} operation * * @param x - * @return a new instance of BesselI0e - * @see org.tensorflow.op.math.BesselI0e + * @return a new instance of Log + * @see org.tensorflow.op.math.Log */ - public BesselI0e besselI0e(Operand x) { - return BesselI0e.create(scope, x); + public Log log(Operand x) { + return Log.create(scope, x); } /** - * Builds an {@link Log} operation + * Builds an {@link LogicalNot} operation * * @param x - * @return a new instance of Log - * @see org.tensorflow.op.math.Log + * @return a new instance of LogicalNot + * @see org.tensorflow.op.math.LogicalNot */ - public Log log(Operand x) { - return Log.create(scope, x); + public LogicalNot logicalNot(Operand x) { + return LogicalNot.create(scope, x); } /** @@ -436,49 +465,50 @@ public Sqrt sqrt(Operand x) { } /** - * Builds an {@link InvertPermutation} operation + * Builds an {@link SegmentSum} operation * - * @param x 1-D. - * @return a new instance of InvertPermutation - * @see org.tensorflow.op.math.InvertPermutation + * @param data + * @param segmentIds A 1-D tensor whose size is equal to the size of `data`'s + * @return a new instance of SegmentSum + * @see org.tensorflow.op.math.SegmentSum */ - public InvertPermutation invertPermutation(Operand x) { - return InvertPermutation.create(scope, x); + public SegmentSum segmentSum(Operand data, Operand segmentIds) { + return SegmentSum.create(scope, data, segmentIds); } /** - * Builds an {@link GreaterEqual} operation + * Builds an {@link ComplexAbs} operation * * @param x - * @param y - * @return a new instance of GreaterEqual - * @see org.tensorflow.op.math.GreaterEqual + * @return a new instance of ComplexAbs + * @see org.tensorflow.op.math.ComplexAbs */ - public GreaterEqual greaterEqual(Operand x, Operand y) { - return GreaterEqual.create(scope, x, y); + public ComplexAbs complexAbs(Operand x) { + return ComplexAbs.create(scope, x); } /** - * Builds an {@link BesselI1e} operation + * Builds an {@link Greater} operation * * @param x - * @return a new instance of BesselI1e - * @see org.tensorflow.op.math.BesselI1e + * @param y + * @return a new instance of Greater + * @see org.tensorflow.op.math.Greater */ - public BesselI1e besselI1e(Operand x) { - return BesselI1e.create(scope, x); + public Greater greater(Operand x, Operand y) { + return Greater.create(scope, x, y); } /** - * Builds an {@link FloorDiv} operation + * Builds an {@link CheckNumerics} operation * - * @param x - * @param y - * @return a new instance of FloorDiv - * @see org.tensorflow.op.math.FloorDiv + * @param tensor + * @param message Prefix of the error message. + * @return a new instance of CheckNumerics + * @see org.tensorflow.op.math.CheckNumerics */ - public FloorDiv floorDiv(Operand x, Operand y) { - return FloorDiv.create(scope, x, y); + public CheckNumerics checkNumerics(Operand tensor, String message) { + return CheckNumerics.create(scope, tensor, message); } /** @@ -488,73 +518,55 @@ public FloorDiv floorDiv(Operand x, Operand y) { * @return a new instance of Angle * @see org.tensorflow.op.math.Angle */ - public Angle angle(Operand input) { + public Angle angle(Operand input) { return Angle.create(scope, input); } /** - * Builds an {@link RealDiv} operation + * Builds an {@link FloorDiv} operation * * @param x * @param y - * @return a new instance of RealDiv - * @see org.tensorflow.op.math.RealDiv + * @return a new instance of FloorDiv + * @see org.tensorflow.op.math.FloorDiv */ - public RealDiv realDiv(Operand x, Operand y) { - return RealDiv.create(scope, x, y); + public FloorDiv floorDiv(Operand x, Operand y) { + return FloorDiv.create(scope, x, y); } /** - * Builds an {@link QuantizedMul} operation + * Builds an {@link Minimum} operation * * @param x * @param y - * @param minX The float value that the lowest quantized `x` value represents. - * @param maxX The float value that the highest quantized `x` value represents. - * @param minY The float value that the lowest quantized `y` value represents. - * @param maxY The float value that the highest quantized `y` value represents. - * @param Toutput - * @return a new instance of QuantizedMul - * @see org.tensorflow.op.math.QuantizedMul + * @return a new instance of Minimum + * @see org.tensorflow.op.math.Minimum */ - public QuantizedMul quantizedMul(Operand x, Operand y, Operand minX, - Operand maxX, Operand minY, Operand maxY, Class Toutput) { - return QuantizedMul.create(scope, x, y, minX, maxX, minY, maxY, Toutput); + public Minimum minimum(Operand x, Operand y) { + return Minimum.create(scope, x, y); } /** - * Builds an {@link IsInf} operation + * Builds an {@link RealDiv} operation * * @param x - * @return a new instance of IsInf - * @see org.tensorflow.op.math.IsInf - */ - public IsInf isInf(Operand x) { - return IsInf.create(scope, x); - } - - /** - * Builds an {@link Angle} operation - * - * @param input - * @param Tout - * @return a new instance of Angle - * @see org.tensorflow.op.math.Angle + * @param y + * @return a new instance of RealDiv + * @see org.tensorflow.op.math.RealDiv */ - public Angle angle(Operand input, Class Tout) { - return Angle.create(scope, input, Tout); + public RealDiv realDiv(Operand x, Operand y) { + return RealDiv.create(scope, x, y); } /** - * Builds an {@link Real} operation + * Builds an {@link Digamma} operation * - * @param input - * @param Tout - * @return a new instance of Real - * @see org.tensorflow.op.math.Real + * @param x + * @return a new instance of Digamma + * @see org.tensorflow.op.math.Digamma */ - public Real real(Operand input, Class Tout) { - return Real.create(scope, input, Tout); + public Digamma digamma(Operand x) { + return Digamma.create(scope, x); } /** @@ -568,30 +580,6 @@ public Acosh acosh(Operand x) { return Acosh.create(scope, x); } - /** - * Builds an {@link Mod} operation - * - * @param x - * @param y - * @return a new instance of Mod - * @see org.tensorflow.op.math.Mod - */ - public Mod mod(Operand x, Operand y) { - return Mod.create(scope, x, y); - } - - /** - * Builds an {@link LessEqual} operation - * - * @param x - * @param y - * @return a new instance of LessEqual - * @see org.tensorflow.op.math.LessEqual - */ - public LessEqual lessEqual(Operand x, Operand y) { - return LessEqual.create(scope, x, y); - } - /** * Builds an {@link Sigmoid} operation * @@ -604,54 +592,16 @@ public Sigmoid sigmoid(Operand x) { } /** - * Builds an {@link ArgMax} operation - * - * @param input - * @param dimension int32 or int64, must be in the range `[-rank(input), rank(input))`. - * @param outputType - * @return a new instance of ArgMax - * @see org.tensorflow.op.math.ArgMax - */ - public ArgMax argMax(Operand input, - Operand dimension, Class outputType) { - return ArgMax.create(scope, input, dimension, outputType); - } - - /** - * Builds an {@link Rint} operation - * - * @param x - * @return a new instance of Rint - * @see org.tensorflow.op.math.Rint - */ - public Rint rint(Operand x) { - return Rint.create(scope, x); - } - - /** - * Builds an {@link Cumprod} operation - * - * @param x A `Tensor`. Must be one of the following types: `float32`, `float64`, - * @param axis A `Tensor` of type `int32` (default: 0). Must be in the range - * @param options carries optional attributes values - * @return a new instance of Cumprod - * @see org.tensorflow.op.math.Cumprod - */ - public Cumprod cumprod(Operand x, Operand axis, - Cumprod.Options... options) { - return Cumprod.create(scope, x, axis, options); - } - - /** - * Builds an {@link LogicalAnd} operation + * Builds an {@link Betainc} operation * + * @param a + * @param b * @param x - * @param y - * @return a new instance of LogicalAnd - * @see org.tensorflow.op.math.LogicalAnd + * @return a new instance of Betainc + * @see org.tensorflow.op.math.Betainc */ - public LogicalAnd logicalAnd(Operand x, Operand y) { - return LogicalAnd.create(scope, x, y); + public Betainc betainc(Operand a, Operand b, Operand x) { + return Betainc.create(scope, a, b, x); } /** @@ -666,26 +616,15 @@ public Sin sin(Operand x) { } /** - * Builds an {@link Erf} operation - * - * @param x - * @return a new instance of Erf - * @see org.tensorflow.op.math.Erf - */ - public Erf erf(Operand x) { - return Erf.create(scope, x); - } - - /** - * Builds an {@link Igammac} operation + * Builds an {@link SegmentMean} operation * - * @param a - * @param x - * @return a new instance of Igammac - * @see org.tensorflow.op.math.Igammac + * @param data + * @param segmentIds A 1-D tensor whose size is equal to the size of `data`'s + * @return a new instance of SegmentMean + * @see org.tensorflow.op.math.SegmentMean */ - public Igammac igammac(Operand a, Operand x) { - return Igammac.create(scope, a, x); + public SegmentMean segmentMean(Operand data, Operand segmentIds) { + return SegmentMean.create(scope, data, segmentIds); } /** @@ -697,44 +636,67 @@ public Igammac igammac(Operand a, Operand x) { * @return a new instance of ApproximateEqual * @see org.tensorflow.op.math.ApproximateEqual */ - public ApproximateEqual approximateEqual(Operand x, Operand y, - ApproximateEqual.Options... options) { - return ApproximateEqual.create(scope, x, y, options); + public ApproximateEqual approximateEqual(Operand x, Operand y, + ApproximateEqual.Options... options) { + return ApproximateEqual.create(scope, x, y, options); + } + + /** + * Builds an {@link UnsortedSegmentProd} operation + * + * @param data + * @param segmentIds A tensor whose shape is a prefix of `data.shape`. + * @param numSegments + * @return a new instance of UnsortedSegmentProd + * @see org.tensorflow.op.math.UnsortedSegmentProd + */ + public UnsortedSegmentProd unsortedSegmentProd( + Operand data, Operand segmentIds, Operand numSegments) { + return UnsortedSegmentProd.create(scope, data, segmentIds, numSegments); } /** - * Builds an {@link Imag} operation + * Builds an {@link Cumsum} operation * - * @param input - * @return a new instance of Imag - * @see org.tensorflow.op.math.Imag + * @param x A `Tensor`. Must be one of the following types: `float32`, `float64`, + * @param axis A `Tensor` of type `int32` (default: 0). Must be in the range + * @param options carries optional attributes values + * @return a new instance of Cumsum + * @see org.tensorflow.op.math.Cumsum */ - public Imag imag(Operand input) { - return Imag.create(scope, input); + public Cumsum cumsum(Operand x, Operand axis, + Cumsum.Options... options) { + return Cumsum.create(scope, x, axis, options); } /** - * Builds an {@link FloorMod} operation + * Builds an {@link Mod} operation * * @param x * @param y - * @return a new instance of FloorMod - * @see org.tensorflow.op.math.FloorMod + * @return a new instance of Mod + * @see org.tensorflow.op.math.Mod */ - public FloorMod floorMod(Operand x, Operand y) { - return FloorMod.create(scope, x, y); + public Mod mod(Operand x, Operand y) { + return Mod.create(scope, x, y); } /** - * Builds an {@link Maximum} operation + * Builds an {@link QuantizedMul} operation * * @param x * @param y - * @return a new instance of Maximum - * @see org.tensorflow.op.math.Maximum + * @param minX The float value that the lowest quantized `x` value represents. + * @param maxX The float value that the highest quantized `x` value represents. + * @param minY The float value that the lowest quantized `y` value represents. + * @param maxY The float value that the highest quantized `y` value represents. + * @param Toutput + * @return a new instance of QuantizedMul + * @see org.tensorflow.op.math.QuantizedMul */ - public Maximum maximum(Operand x, Operand y) { - return Maximum.create(scope, x, y); + public QuantizedMul quantizedMul(Operand x, Operand y, Operand minX, + Operand maxX, Operand minY, Operand maxY, DataType Toutput) { + return QuantizedMul.create(scope, x, y, minX, maxX, minY, maxY, Toutput); } /** @@ -750,6 +712,20 @@ public NotEqual notEqual(Operand x, Operand y, NotEqual.Options... opt return NotEqual.create(scope, x, y, options); } + /** + * Builds an {@link Cumprod} operation + * + * @param x A `Tensor`. Must be one of the following types: `float32`, `float64`, + * @param axis A `Tensor` of type `int32` (default: 0). Must be in the range + * @param options carries optional attributes values + * @return a new instance of Cumprod + * @see org.tensorflow.op.math.Cumprod + */ + public Cumprod cumprod(Operand x, Operand axis, + Cumprod.Options... options) { + return Cumprod.create(scope, x, axis, options); + } + /** * Builds an {@link Expm1} operation * @@ -762,32 +738,40 @@ public Expm1 expm1(Operand x) { } /** - * Builds an {@link IsFinite} operation + * Builds an {@link SegmentMax} operation + * + * @param data + * @param segmentIds A 1-D tensor whose size is equal to the size of `data`'s + * @return a new instance of SegmentMax + * @see org.tensorflow.op.math.SegmentMax + */ + public SegmentMax segmentMax(Operand data, + Operand segmentIds) { + return SegmentMax.create(scope, data, segmentIds); + } + + /** + * Builds an {@link Less} operation * * @param x - * @return a new instance of IsFinite - * @see org.tensorflow.op.math.IsFinite + * @param y + * @return a new instance of Less + * @see org.tensorflow.op.math.Less */ - public IsFinite isFinite(Operand x) { - return IsFinite.create(scope, x); + public Less less(Operand x, Operand y) { + return Less.create(scope, x, y); } /** - * Builds an {@link QuantizedAdd} operation + * Builds an {@link LogicalOr} operation * * @param x * @param y - * @param minX The float value that the lowest quantized `x` value represents. - * @param maxX The float value that the highest quantized `x` value represents. - * @param minY The float value that the lowest quantized `y` value represents. - * @param maxY The float value that the highest quantized `y` value represents. - * @param Toutput - * @return a new instance of QuantizedAdd - * @see org.tensorflow.op.math.QuantizedAdd + * @return a new instance of LogicalOr + * @see org.tensorflow.op.math.LogicalOr */ - public QuantizedAdd quantizedAdd(Operand x, Operand y, Operand minX, - Operand maxX, Operand minY, Operand maxY, Class Toutput) { - return QuantizedAdd.create(scope, x, y, minX, maxX, minY, maxY, Toutput); + public LogicalOr logicalOr(Operand x, Operand y) { + return LogicalOr.create(scope, x, y); } /** @@ -813,14 +797,26 @@ public Exp exp(Operand x) { } /** - * Builds an {@link Erfc} operation + * Builds an {@link FloorMod} operation * * @param x - * @return a new instance of Erfc - * @see org.tensorflow.op.math.Erfc + * @param y + * @return a new instance of FloorMod + * @see org.tensorflow.op.math.FloorMod */ - public Erfc erfc(Operand x) { - return Erfc.create(scope, x); + public FloorMod floorMod(Operand x, Operand y) { + return FloorMod.create(scope, x, y); + } + + /** + * Builds an {@link Real} operation + * + * @param input + * @return a new instance of Real + * @see org.tensorflow.op.math.Real + */ + public Real real(Operand input) { + return Real.create(scope, input); } /** @@ -836,14 +832,15 @@ public SquaredDifference squaredDifference(Operand x, Operand y) { } /** - * Builds an {@link Softplus} operation + * Builds an {@link Igammac} operation * - * @param features - * @return a new instance of Softplus - * @see org.tensorflow.op.math.Softplus + * @param a + * @param x + * @return a new instance of Igammac + * @see org.tensorflow.op.math.Igammac */ - public Softplus softplus(Operand features) { - return Softplus.create(scope, features); + public Igammac igammac(Operand a, Operand x) { + return Igammac.create(scope, a, x); } /** @@ -859,25 +856,14 @@ public CompareAndBitpack compareAndBitpack(Operand input, Operand thre } /** - * Builds an {@link IsNan} operation - * - * @param x - * @return a new instance of IsNan - * @see org.tensorflow.op.math.IsNan - */ - public IsNan isNan(Operand x) { - return IsNan.create(scope, x); - } - - /** - * Builds an {@link Floor} operation + * Builds an {@link Lgamma} operation * * @param x - * @return a new instance of Floor - * @see org.tensorflow.op.math.Floor + * @return a new instance of Lgamma + * @see org.tensorflow.op.math.Lgamma */ - public Floor floor(Operand x) { - return Floor.create(scope, x); + public Lgamma lgamma(Operand x) { + return Lgamma.create(scope, x); } /** @@ -892,6 +878,28 @@ public Sub sub(Operand x, Operand y) { return Sub.create(scope, x, y); } + /** + * Builds an {@link IsNan} operation + * + * @param x + * @return a new instance of IsNan + * @see org.tensorflow.op.math.IsNan + */ + public IsNan isNan(Operand x) { + return IsNan.create(scope, x); + } + + /** + * Builds an {@link Erf} operation + * + * @param x + * @return a new instance of Erf + * @see org.tensorflow.op.math.Erf + */ + public Erf erf(Operand x) { + return Erf.create(scope, x); + } + /** * Builds an {@link Asin} operation * @@ -915,40 +923,27 @@ public Round round(Operand x) { } /** - * Builds an {@link SegmentMin} operation - * - * @param data - * @param segmentIds A 1-D tensor whose size is equal to the size of `data`'s - * @return a new instance of SegmentMin - * @see org.tensorflow.op.math.SegmentMin - */ - public SegmentMin segmentMin(Operand data, - Operand segmentIds) { - return SegmentMin.create(scope, data, segmentIds); - } - - /** - * Builds an {@link Atan2} operation + * Builds an {@link LogicalAnd} operation * - * @param y * @param x - * @return a new instance of Atan2 - * @see org.tensorflow.op.math.Atan2 + * @param y + * @return a new instance of LogicalAnd + * @see org.tensorflow.op.math.LogicalAnd */ - public Atan2 atan2(Operand y, Operand x) { - return Atan2.create(scope, y, x); + public LogicalAnd logicalAnd(Operand x, Operand y) { + return LogicalAnd.create(scope, x, y); } /** - * Builds an {@link SegmentProd} operation + * Builds an {@link Imag} operation * - * @param data - * @param segmentIds A 1-D tensor whose size is equal to the size of `data`'s - * @return a new instance of SegmentProd - * @see org.tensorflow.op.math.SegmentProd + * @param input + * @param Tout + * @return a new instance of Imag + * @see org.tensorflow.op.math.Imag */ - public SegmentProd segmentProd(Operand data, Operand segmentIds) { - return SegmentProd.create(scope, data, segmentIds); + public Imag imag(Operand input, DataType Tout) { + return Imag.create(scope, input, Tout); } /** @@ -963,38 +958,40 @@ public Sign sign(Operand x) { } /** - * Builds an {@link ComplexAbs} operation + * Builds an {@link Div} operation * * @param x - * @return a new instance of ComplexAbs - * @see org.tensorflow.op.math.ComplexAbs + * @param y + * @return a new instance of Div + * @see org.tensorflow.op.math.Div */ - public ComplexAbs complexAbs(Operand x) { - return ComplexAbs.create(scope, x); + public Div div(Operand x, Operand y) { + return Div.create(scope, x, y); } /** - * Builds an {@link SegmentSum} operation + * Builds an {@link UnsortedSegmentMax} operation * * @param data - * @param segmentIds A 1-D tensor whose size is equal to the size of `data`'s - * @return a new instance of SegmentSum - * @see org.tensorflow.op.math.SegmentSum + * @param segmentIds A tensor whose shape is a prefix of `data.shape`. + * @param numSegments + * @return a new instance of UnsortedSegmentMax + * @see org.tensorflow.op.math.UnsortedSegmentMax */ - public SegmentSum segmentSum(Operand data, Operand segmentIds) { - return SegmentSum.create(scope, data, segmentIds); + public UnsortedSegmentMax unsortedSegmentMax( + Operand data, Operand segmentIds, Operand numSegments) { + return UnsortedSegmentMax.create(scope, data, segmentIds, numSegments); } /** - * Builds an {@link Div} operation + * Builds an {@link Imag} operation * - * @param x - * @param y - * @return a new instance of Div - * @see org.tensorflow.op.math.Div + * @param input + * @return a new instance of Imag + * @see org.tensorflow.op.math.Imag */ - public Div div(Operand x, Operand y) { - return Div.create(scope, x, y); + public Imag imag(Operand input) { + return Imag.create(scope, input); } /** @@ -1010,51 +1007,25 @@ public Pow pow(Operand x, Operand y) { } /** - * Builds an {@link Less} operation - * - * @param x - * @param y - * @return a new instance of Less - * @see org.tensorflow.op.math.Less - */ - public Less less(Operand x, Operand y) { - return Less.create(scope, x, y); - } - - /** - * Builds an {@link AccumulateN} operation - * - * @param inputs A list of `Tensor` objects, each with same shape and type. - * @param shape Shape of elements of `inputs`. - * @return a new instance of AccumulateN - * @see org.tensorflow.op.math.AccumulateN - */ - public AccumulateN accumulateN(Iterable> inputs, Shape shape) { - return AccumulateN.create(scope, inputs, shape); - } - - /** - * Builds an {@link Zeta} operation + * Builds an {@link IsFinite} operation * * @param x - * @param q - * @return a new instance of Zeta - * @see org.tensorflow.op.math.Zeta + * @return a new instance of IsFinite + * @see org.tensorflow.op.math.IsFinite */ - public Zeta zeta(Operand x, Operand q) { - return Zeta.create(scope, x, q); + public IsFinite isFinite(Operand x) { + return IsFinite.create(scope, x); } /** - * Builds an {@link ArgMin} operation + * Builds an {@link InvertPermutation} operation * - * @param input - * @param dimension int32 or int64, must be in the range `[-rank(input), rank(input))`. - * @return a new instance of ArgMin - * @see org.tensorflow.op.math.ArgMin + * @param x 1-D. + * @return a new instance of InvertPermutation + * @see org.tensorflow.op.math.InvertPermutation */ - public ArgMin argMin(Operand input, Operand dimension) { - return ArgMin.create(scope, input, dimension); + public InvertPermutation invertPermutation(Operand x) { + return InvertPermutation.create(scope, x); } /** @@ -1064,20 +1035,20 @@ public ArgMin argMin(Operand input, Operand di * @return a new instance of Abs * @see org.tensorflow.op.math.Abs */ - public Abs abs(Operand x) { + public Abs abs(Operand x) { return Abs.create(scope, x); } /** - * Builds an {@link Polygamma} operation + * Builds an {@link TruncateMod} operation * - * @param a * @param x - * @return a new instance of Polygamma - * @see org.tensorflow.op.math.Polygamma + * @param y + * @return a new instance of TruncateMod + * @see org.tensorflow.op.math.TruncateMod */ - public Polygamma polygamma(Operand a, Operand x) { - return Polygamma.create(scope, a, x); + public TruncateMod truncateMod(Operand x, Operand y) { + return TruncateMod.create(scope, x, y); } /** @@ -1115,68 +1086,27 @@ public Rsqrt rsqrt(Operand x) { } /** - * Builds an {@link Minimum} operation - * - * @param x - * @param y - * @return a new instance of Minimum - * @see org.tensorflow.op.math.Minimum - */ - public Minimum minimum(Operand x, Operand y) { - return Minimum.create(scope, x, y); - } - - /** - * Builds an {@link Lgamma} operation + * Builds an {@link Floor} operation * * @param x - * @return a new instance of Lgamma - * @see org.tensorflow.op.math.Lgamma - */ - public Lgamma lgamma(Operand x) { - return Lgamma.create(scope, x); - } - - /** - * Builds an {@link ArgMin} operation - * - * @param input - * @param dimension int32 or int64, must be in the range `[-rank(input), rank(input))`. - * @param outputType - * @return a new instance of ArgMin - * @see org.tensorflow.op.math.ArgMin - */ - public ArgMin argMin(Operand input, - Operand dimension, Class outputType) { - return ArgMin.create(scope, input, dimension, outputType); - } - - /** - * Builds an {@link UnsortedSegmentMax} operation - * - * @param data - * @param segmentIds A tensor whose shape is a prefix of `data.shape`. - * @param numSegments - * @return a new instance of UnsortedSegmentMax - * @see org.tensorflow.op.math.UnsortedSegmentMax + * @return a new instance of Floor + * @see org.tensorflow.op.math.Floor */ - public UnsortedSegmentMax unsortedSegmentMax( - Operand data, Operand segmentIds, Operand numSegments) { - return UnsortedSegmentMax.create(scope, data, segmentIds, numSegments); + public Floor floor(Operand x) { + return Floor.create(scope, x); } /** - * Builds an {@link UnsortedSegmentMin} operation + * Builds an {@link SegmentMin} operation * * @param data - * @param segmentIds A tensor whose shape is a prefix of `data.shape`. - * @param numSegments - * @return a new instance of UnsortedSegmentMin - * @see org.tensorflow.op.math.UnsortedSegmentMin + * @param segmentIds A 1-D tensor whose size is equal to the size of `data`'s + * @return a new instance of SegmentMin + * @see org.tensorflow.op.math.SegmentMin */ - public UnsortedSegmentMin unsortedSegmentMin( - Operand data, Operand segmentIds, Operand numSegments) { - return UnsortedSegmentMin.create(scope, data, segmentIds, numSegments); + public SegmentMin segmentMin(Operand data, + Operand segmentIds) { + return SegmentMin.create(scope, data, segmentIds); } /** @@ -1186,34 +1116,45 @@ public UnsortedSegmentMin * @return a new instance of PopulationCount * @see org.tensorflow.op.math.PopulationCount */ - public PopulationCount populationCount(Operand x) { + public PopulationCount populationCount(Operand x) { return PopulationCount.create(scope, x); } /** - * Builds an {@link Cumsum} operation + * Builds an {@link ComplexAbs} operation * - * @param x A `Tensor`. Must be one of the following types: `float32`, `float64`, - * @param axis A `Tensor` of type `int32` (default: 0). Must be in the range - * @param options carries optional attributes values - * @return a new instance of Cumsum - * @see org.tensorflow.op.math.Cumsum + * @param x + * @param Tout + * @return a new instance of ComplexAbs + * @see org.tensorflow.op.math.ComplexAbs */ - public Cumsum cumsum(Operand x, Operand axis, - Cumsum.Options... options) { - return Cumsum.create(scope, x, axis, options); + public ComplexAbs complexAbs(Operand x, DataType Tout) { + return ComplexAbs.create(scope, x, Tout); } /** - * Builds an {@link Imag} operation + * Builds an {@link ArgMin} operation * * @param input - * @param Tout - * @return a new instance of Imag - * @see org.tensorflow.op.math.Imag + * @param dimension int32 or int64, must be in the range `[-rank(input), rank(input))`. + * @param outputType + * @return a new instance of ArgMin + * @see org.tensorflow.op.math.ArgMin */ - public Imag imag(Operand input, Class Tout) { - return Imag.create(scope, input, Tout); + public ArgMin argMin(Operand input, + Operand dimension, DataType outputType) { + return ArgMin.create(scope, input, dimension, outputType); + } + + /** + * Builds an {@link Softplus} operation + * + * @param features + * @return a new instance of Softplus + * @see org.tensorflow.op.math.Softplus + */ + public Softplus softplus(Operand features) { + return Softplus.create(scope, features); } /** @@ -1238,19 +1179,6 @@ public AddN addN(Iterable> inputs) { return AddN.create(scope, inputs); } - /** - * Builds an {@link SegmentMax} operation - * - * @param data - * @param segmentIds A 1-D tensor whose size is equal to the size of `data`'s - * @return a new instance of SegmentMax - * @see org.tensorflow.op.math.SegmentMax - */ - public SegmentMax segmentMax(Operand data, - Operand segmentIds) { - return SegmentMax.create(scope, data, segmentIds); - } - /** * Builds an {@link Cosh} operation * @@ -1273,6 +1201,55 @@ public Conj conj(Operand input) { return Conj.create(scope, input); } + /** + * Builds an {@link ArgMax} operation + * + * @param input + * @param dimension int32 or int64, must be in the range `[-rank(input), rank(input))`. + * @param outputType + * @return a new instance of ArgMax + * @see org.tensorflow.op.math.ArgMax + */ + public ArgMax argMax(Operand input, + Operand dimension, DataType outputType) { + return ArgMax.create(scope, input, dimension, outputType); + } + + /** + * Builds an {@link Angle} operation + * + * @param input + * @param Tout + * @return a new instance of Angle + * @see org.tensorflow.op.math.Angle + */ + public Angle angle(Operand input, DataType Tout) { + return Angle.create(scope, input, Tout); + } + + /** + * Builds an {@link Erfc} operation + * + * @param x + * @return a new instance of Erfc + * @see org.tensorflow.op.math.Erfc + */ + public Erfc erfc(Operand x) { + return Erfc.create(scope, x); + } + + /** + * Builds an {@link ArgMin} operation + * + * @param input + * @param dimension int32 or int64, must be in the range `[-rank(input), rank(input))`. + * @return a new instance of ArgMin + * @see org.tensorflow.op.math.ArgMin + */ + public ArgMin argMin(Operand input, Operand dimension) { + return ArgMin.create(scope, input, dimension); + } + /** * Builds an {@link Add} operation * @@ -1285,16 +1262,6 @@ public Add add(Operand x, Operand y) { return Add.create(scope, x, y); } - /** - * Builds an {@link Fact} operation - * - * @return a new instance of Fact - * @see org.tensorflow.op.math.Fact - */ - public Fact fact() { - return Fact.create(scope); - } - /** * Builds an {@link Cos} operation * @@ -1307,52 +1274,91 @@ public Cos cos(Operand x) { } /** - * Builds an {@link Mean} operation + * Builds an {@link Fact} operation * - * @param input The tensor to reduce. - * @param axis The dimensions to reduce. Must be in the range - * @param options carries optional attributes values - * @return a new instance of Mean - * @see org.tensorflow.op.math.Mean + * @return a new instance of Fact + * @see org.tensorflow.op.math.Fact */ - public Mean mean(Operand input, Operand axis, - Mean.Options... options) { - return Mean.create(scope, input, axis, options); + public Fact fact() { + return Fact.create(scope); } /** - * Builds an {@link ArgMax} operation + * Builds an {@link AccumulateN} operation * - * @param input - * @param dimension int32 or int64, must be in the range `[-rank(input), rank(input))`. - * @return a new instance of ArgMax - * @see org.tensorflow.op.math.ArgMax + * @param inputs A list of `Tensor` objects, each with same shape and type. + * @param shape Shape of elements of `inputs`. + * @return a new instance of AccumulateN + * @see org.tensorflow.op.math.AccumulateN */ - public ArgMax argMax(Operand input, Operand dimension) { - return ArgMax.create(scope, input, dimension); + public AccumulateN accumulateN(Iterable> inputs, Shape shape) { + return AccumulateN.create(scope, inputs, shape); } /** * Builds an {@link Real} operation * * @param input + * @param Tout * @return a new instance of Real * @see org.tensorflow.op.math.Real */ - public Real real(Operand input) { - return Real.create(scope, input); + public Real real(Operand input, DataType Tout) { + return Real.create(scope, input, Tout); } /** - * Builds an {@link Greater} operation + * Builds an {@link QuantizedAdd} operation * * @param x * @param y - * @return a new instance of Greater - * @see org.tensorflow.op.math.Greater + * @param minX The float value that the lowest quantized `x` value represents. + * @param maxX The float value that the highest quantized `x` value represents. + * @param minY The float value that the lowest quantized `y` value represents. + * @param maxY The float value that the highest quantized `y` value represents. + * @param Toutput + * @return a new instance of QuantizedAdd + * @see org.tensorflow.op.math.QuantizedAdd */ - public Greater greater(Operand x, Operand y) { - return Greater.create(scope, x, y); + public QuantizedAdd quantizedAdd(Operand x, Operand y, Operand minX, + Operand maxX, Operand minY, Operand maxY, DataType Toutput) { + return QuantizedAdd.create(scope, x, y, minX, maxX, minY, maxY, Toutput); + } + + /** + * Builds an {@link GreaterEqual} operation + * + * @param x + * @param y + * @return a new instance of GreaterEqual + * @see org.tensorflow.op.math.GreaterEqual + */ + public GreaterEqual greaterEqual(Operand x, Operand y) { + return GreaterEqual.create(scope, x, y); + } + + /** + * Builds an {@link Zeta} operation + * + * @param x + * @param q + * @return a new instance of Zeta + * @see org.tensorflow.op.math.Zeta + */ + public Zeta zeta(Operand x, Operand q) { + return Zeta.create(scope, x, q); + } + + /** + * Builds an {@link SegmentProd} operation + * + * @param data + * @param segmentIds A 1-D tensor whose size is equal to the size of `data`'s + * @return a new instance of SegmentProd + * @see org.tensorflow.op.math.SegmentProd + */ + public SegmentProd segmentProd(Operand data, Operand segmentIds) { + return SegmentProd.create(scope, data, segmentIds); } /** diff --git a/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/NnOps.java b/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/NnOps.java index da716e4639e..b69e7326e1b 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/NnOps.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/NnOps.java @@ -1,6 +1,7 @@ package org.tensorflow.op; import java.util.List; +import org.tensorflow.DataType; import org.tensorflow.Operand; import org.tensorflow.op.nn.AvgPool; import org.tensorflow.op.nn.AvgPool3d; @@ -72,6 +73,10 @@ import org.tensorflow.op.nn.SpaceToDepth; import org.tensorflow.op.nn.SparseSoftmaxCrossEntropyWithLogits; import org.tensorflow.op.nn.TopK; +import org.tensorflow.types.TFloat; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.TInt64; +import org.tensorflow.types.family.TNumber; /** * An API for building {@code nn} operations as {@link Op Op}s @@ -86,86 +91,66 @@ public final class NnOps { } /** - * Builds an {@link QuantizedReluX} operation + * Builds an {@link QuantizedBatchNormWithGlobalNormalization} operation * - * @param features - * @param maxValue - * @param minFeatures The float value that the lowest quantized value represents. - * @param maxFeatures The float value that the highest quantized value represents. + * @param t A 4D input Tensor. + * @param tMin The value represented by the lowest quantized input. + * @param tMax The value represented by the highest quantized input. + * @param m A 1D mean Tensor with size matching the last dimension of t. + * @param mMin The value represented by the lowest quantized mean. + * @param mMax The value represented by the highest quantized mean. + * @param v A 1D variance Tensor with size matching the last dimension of t. + * @param vMin The value represented by the lowest quantized variance. + * @param vMax The value represented by the highest quantized variance. + * @param beta A 1D beta Tensor with size matching the last dimension of t. + * @param betaMin The value represented by the lowest quantized offset. + * @param betaMax The value represented by the highest quantized offset. + * @param gamma A 1D gamma Tensor with size matching the last dimension of t. + * @param gammaMin The value represented by the lowest quantized gamma. + * @param gammaMax The value represented by the highest quantized gamma. * @param outType - * @return a new instance of QuantizedReluX - * @see org.tensorflow.op.nn.QuantizedReluX + * @param varianceEpsilon A small float number to avoid dividing by 0. + * @param scaleAfterNormalization A bool indicating whether the resulted tensor + * @return a new instance of QuantizedBatchNormWithGlobalNormalization + * @see org.tensorflow.op.nn.QuantizedBatchNormWithGlobalNormalization */ - public QuantizedReluX quantizedReluX(Operand features, Operand maxValue, - Operand minFeatures, Operand maxFeatures, Class outType) { - return QuantizedReluX.create(scope, features, maxValue, minFeatures, maxFeatures, outType); + public QuantizedBatchNormWithGlobalNormalization quantizedBatchNormWithGlobalNormalization( + Operand t, Operand tMin, Operand tMax, Operand m, Operand mMin, + Operand mMax, Operand v, Operand vMin, Operand vMax, + Operand beta, Operand betaMin, Operand betaMax, Operand gamma, + Operand gammaMin, Operand gammaMax, DataType outType, + Float varianceEpsilon, Boolean scaleAfterNormalization) { + return QuantizedBatchNormWithGlobalNormalization.create(scope, t, tMin, tMax, m, mMin, mMax, v, vMin, vMax, beta, betaMin, betaMax, gamma, gammaMin, gammaMax, outType, varianceEpsilon, scaleAfterNormalization); } /** - * Builds an {@link Conv2d} operation + * Builds an {@link DataFormatVecPermute} operation * - * @param input A 4-D tensor. The dimension order is interpreted according to the value - * @param filter A 4-D tensor of shape - * @param strides 1-D tensor of length 4. The stride of the sliding window for each - * @param padding The type of padding algorithm to use. + * @param x Vector of size 4 or Tensor of shape (4, 2) in source data format. * @param options carries optional attributes values - * @return a new instance of Conv2d - * @see org.tensorflow.op.nn.Conv2d - */ - public Conv2d conv2d(Operand input, Operand filter, - List strides, String padding, Conv2d.Options... options) { - return Conv2d.create(scope, input, filter, strides, padding, options); - } - - /** - * Builds an {@link QuantizedAvgPool} operation - * - * @param input 4-D with shape `[batch, height, width, channels]`. - * @param minInput The float value that the lowest quantized input value represents. - * @param maxInput The float value that the highest quantized input value represents. - * @param ksize The size of the window for each dimension of the input tensor. - * @param strides The stride of the sliding window for each dimension of the input - * @param padding The type of padding algorithm to use. - * @return a new instance of QuantizedAvgPool - * @see org.tensorflow.op.nn.QuantizedAvgPool + * @return a new instance of DataFormatVecPermute + * @see org.tensorflow.op.nn.DataFormatVecPermute */ - public QuantizedAvgPool quantizedAvgPool(Operand input, Operand minInput, - Operand maxInput, List ksize, List strides, String padding) { - return QuantizedAvgPool.create(scope, input, minInput, maxInput, ksize, strides, padding); + public DataFormatVecPermute dataFormatVecPermute(Operand x, + DataFormatVecPermute.Options... options) { + return DataFormatVecPermute.create(scope, x, options); } /** - * Builds an {@link AvgPool3d} operation + * Builds an {@link DepthwiseConv2dNative} operation * - * @param input Shape `[batch, depth, rows, cols, channels]` tensor to pool over. - * @param ksize 1-D tensor of length 5. The size of the window for each dimension of - * @param strides 1-D tensor of length 5. The stride of the sliding window for each + * @param input + * @param filter + * @param strides 1-D of length 4. The stride of the sliding window for each dimension * @param padding The type of padding algorithm to use. * @param options carries optional attributes values - * @return a new instance of AvgPool3d - * @see org.tensorflow.op.nn.AvgPool3d - */ - public AvgPool3d avgPool3d(Operand input, List ksize, - List strides, String padding, AvgPool3d.Options... options) { - return AvgPool3d.create(scope, input, ksize, strides, padding, options); - } - - /** - * Builds an {@link LearnedUnigramCandidateSampler} operation - * - * @param trueClasses A batch_size * num_true matrix, in which each row contains the - * @param numTrue Number of true labels per context. - * @param numSampled Number of candidates to randomly sample. - * @param unique If unique is true, we sample with rejection, so that all sampled - * @param rangeMax The sampler will sample integers from the interval [0, range_max). - * @param options carries optional attributes values - * @return a new instance of LearnedUnigramCandidateSampler - * @see org.tensorflow.op.nn.LearnedUnigramCandidateSampler + * @return a new instance of DepthwiseConv2dNative + * @see org.tensorflow.op.nn.DepthwiseConv2dNative */ - public LearnedUnigramCandidateSampler learnedUnigramCandidateSampler(Operand trueClasses, - Long numTrue, Long numSampled, Boolean unique, Long rangeMax, - LearnedUnigramCandidateSampler.Options... options) { - return LearnedUnigramCandidateSampler.create(scope, trueClasses, numTrue, numSampled, unique, rangeMax, options); + public DepthwiseConv2dNative depthwiseConv2dNative(Operand input, + Operand filter, List strides, String padding, + DepthwiseConv2dNative.Options... options) { + return DepthwiseConv2dNative.create(scope, input, filter, strides, padding, options); } /** @@ -183,103 +168,113 @@ public DepthToSpace depthToSpace(Operand input, Long blockSize, } /** - * Builds an {@link CudnnRnnParamsSize} operation + * Builds an {@link AvgPool} operation * - * @param numLayers - * @param numUnits - * @param inputSize - * @param T - * @param S + * @param value 4-D with shape `[batch, height, width, channels]`. + * @param ksize The size of the sliding window for each dimension of `value`. + * @param strides The stride of the sliding window for each dimension of `value`. + * @param padding The type of padding algorithm to use. * @param options carries optional attributes values - * @return a new instance of CudnnRnnParamsSize - * @see org.tensorflow.op.nn.CudnnRnnParamsSize + * @return a new instance of AvgPool + * @see org.tensorflow.op.nn.AvgPool */ - public CudnnRnnParamsSize cudnnRnnParamsSize( - Operand numLayers, Operand numUnits, Operand inputSize, Class T, - Class S, CudnnRnnParamsSize.Options... options) { - return CudnnRnnParamsSize.create(scope, numLayers, numUnits, inputSize, T, S, options); + public AvgPool avgPool(Operand value, List ksize, + List strides, String padding, AvgPool.Options... options) { + return AvgPool.create(scope, value, ksize, strides, padding, options); } /** - * Builds an {@link Dilation2d} operation + * Builds an {@link MaxPoolWithArgmax} operation * - * @param input 4-D with shape `[batch, in_height, in_width, depth]`. - * @param filter 3-D with shape `[filter_height, filter_width, depth]`. - * @param strides The stride of the sliding window for each dimension of the input - * @param rates The input stride for atrous morphological dilation. Must be: + * @param input 4-D with shape `[batch, height, width, channels]`. Input to pool over. + * @param ksize The size of the window for each dimension of the input tensor. + * @param strides The stride of the sliding window for each dimension of the * @param padding The type of padding algorithm to use. - * @return a new instance of Dilation2d - * @see org.tensorflow.op.nn.Dilation2d + * @param options carries optional attributes values + * @return a new instance of MaxPoolWithArgmax + * @see org.tensorflow.op.nn.MaxPoolWithArgmax */ - public Dilation2d dilation2d(Operand input, Operand filter, - List strides, List rates, String padding) { - return Dilation2d.create(scope, input, filter, strides, rates, padding); + public MaxPoolWithArgmax maxPoolWithArgmax(Operand input, + List ksize, List strides, String padding, MaxPoolWithArgmax.Options... options) { + return MaxPoolWithArgmax.create(scope, input, ksize, strides, padding, options); } /** - * Builds an {@link Conv3dBackpropFilter} operation + * Builds an {@link ComputeAccidentalHits} operation * - * @param input Shape `[batch, depth, rows, cols, in_channels]`. - * @param filterSizes An integer vector representing the tensor shape of `filter`, - * @param outBackprop Backprop signal of shape `[batch, out_depth, out_rows, out_cols, - * @param strides 1-D tensor of length 5. The stride of the sliding window for each - * @param padding The type of padding algorithm to use. + * @param trueClasses The true_classes output of UnpackSparseLabels. + * @param sampledCandidates The sampled_candidates output of CandidateSampler. + * @param numTrue Number of true labels per context. * @param options carries optional attributes values - * @return a new instance of Conv3dBackpropFilter - * @see org.tensorflow.op.nn.Conv3dBackpropFilter + * @return a new instance of ComputeAccidentalHits + * @see org.tensorflow.op.nn.ComputeAccidentalHits */ - public Conv3dBackpropFilter conv3dBackpropFilter(Operand input, - Operand filterSizes, Operand outBackprop, List strides, String padding, - Conv3dBackpropFilter.Options... options) { - return Conv3dBackpropFilter.create(scope, input, filterSizes, outBackprop, strides, padding, options); + public ComputeAccidentalHits computeAccidentalHits(Operand trueClasses, + Operand sampledCandidates, Long numTrue, ComputeAccidentalHits.Options... options) { + return ComputeAccidentalHits.create(scope, trueClasses, sampledCandidates, numTrue, options); } /** - * Builds an {@link MaxPool3dGradGrad} operation + * Builds an {@link Conv2dBackpropInput} operation * - * @param origInput The original input tensor. - * @param origOutput The original output tensor. - * @param grad Output backprop of shape `[batch, depth, rows, cols, channels]`. - * @param ksize 1-D tensor of length 5. The size of the window for each dimension of - * @param strides 1-D tensor of length 5. The stride of the sliding window for each + * @param inputSizes An integer vector representing the shape of `input`, + * @param filter 4-D with shape + * @param outBackprop 4-D with shape `[batch, out_height, out_width, out_channels]`. + * @param strides The stride of the sliding window for each dimension of the input * @param padding The type of padding algorithm to use. * @param options carries optional attributes values - * @return a new instance of MaxPool3dGradGrad - * @see org.tensorflow.op.nn.MaxPool3dGradGrad + * @return a new instance of Conv2dBackpropInput + * @see org.tensorflow.op.nn.Conv2dBackpropInput */ - public MaxPool3dGradGrad maxPool3dGradGrad(Operand origInput, - Operand origOutput, Operand grad, List ksize, List strides, String padding, - MaxPool3dGradGrad.Options... options) { - return MaxPool3dGradGrad.create(scope, origInput, origOutput, grad, ksize, strides, padding, options); + public Conv2dBackpropInput conv2dBackpropInput(Operand inputSizes, + Operand filter, Operand outBackprop, List strides, String padding, + Conv2dBackpropInput.Options... options) { + return Conv2dBackpropInput.create(scope, inputSizes, filter, outBackprop, strides, padding, options); } /** - * Builds an {@link CtcLoss} operation + * Builds an {@link SparseSoftmaxCrossEntropyWithLogits} operation * - * @param inputs 3-D, shape: `(max_time x batch_size x num_classes)`, the logits. - * @param labelsIndices The indices of a `SparseTensor`. - * @param labelsValues The values (labels) associated with the given batch and time. - * @param sequenceLength A vector containing sequence lengths (batch). + * @param features batch_size x num_classes matrix + * @param labels batch_size vector with values in [0, num_classes). + * @return a new instance of SparseSoftmaxCrossEntropyWithLogits + * @see org.tensorflow.op.nn.SparseSoftmaxCrossEntropyWithLogits + */ + public SparseSoftmaxCrossEntropyWithLogits sparseSoftmaxCrossEntropyWithLogits( + Operand features, Operand labels) { + return SparseSoftmaxCrossEntropyWithLogits.create(scope, features, labels); + } + + /** + * Builds an {@link FractionalAvgPool} operation + * + * @param value 4-D with shape `[batch, height, width, channels]`. + * @param poolingRatio Pooling ratio for each dimension of `value`, currently only * @param options carries optional attributes values - * @return a new instance of CtcLoss - * @see org.tensorflow.op.nn.CtcLoss + * @return a new instance of FractionalAvgPool + * @see org.tensorflow.op.nn.FractionalAvgPool */ - public CtcLoss ctcLoss(Operand inputs, Operand labelsIndices, - Operand labelsValues, Operand sequenceLength, CtcLoss.Options... options) { - return CtcLoss.create(scope, inputs, labelsIndices, labelsValues, sequenceLength, options); + public FractionalAvgPool fractionalAvgPool(Operand value, + List poolingRatio, FractionalAvgPool.Options... options) { + return FractionalAvgPool.create(scope, value, poolingRatio, options); } /** - * Builds an {@link SoftmaxCrossEntropyWithLogits} operation + * Builds an {@link CudnnRnnParamsToCanonical} operation * - * @param features batch_size x num_classes matrix - * @param labels batch_size x num_classes matrix - * @return a new instance of SoftmaxCrossEntropyWithLogits - * @see org.tensorflow.op.nn.SoftmaxCrossEntropyWithLogits + * @param numLayers + * @param numUnits + * @param inputSize + * @param params + * @param numParams + * @param options carries optional attributes values + * @return a new instance of CudnnRnnParamsToCanonical + * @see org.tensorflow.op.nn.CudnnRnnParamsToCanonical */ - public SoftmaxCrossEntropyWithLogits softmaxCrossEntropyWithLogits( - Operand features, Operand labels) { - return SoftmaxCrossEntropyWithLogits.create(scope, features, labels); + public CudnnRnnParamsToCanonical cudnnRnnParamsToCanonical( + Operand numLayers, Operand numUnits, Operand inputSize, + Operand params, Long numParams, CudnnRnnParamsToCanonical.Options... options) { + return CudnnRnnParamsToCanonical.create(scope, numLayers, numUnits, inputSize, params, numParams, options); } /** @@ -294,198 +289,291 @@ public SoftmaxCrossEntropyWithLogits softmaxCrossEntropyWi * @return a new instance of QuantizedMaxPool * @see org.tensorflow.op.nn.QuantizedMaxPool */ - public QuantizedMaxPool quantizedMaxPool(Operand input, Operand minInput, - Operand maxInput, List ksize, List strides, String padding) { + public QuantizedMaxPool quantizedMaxPool(Operand input, Operand minInput, + Operand maxInput, List ksize, List strides, String padding) { return QuantizedMaxPool.create(scope, input, minInput, maxInput, ksize, strides, padding); } /** - * Builds an {@link Softmax} operation - * - * @param logits 2-D with shape `[batch_size, num_classes]`. - * @return a new instance of Softmax - * @see org.tensorflow.op.nn.Softmax - */ - public Softmax softmax(Operand logits) { - return Softmax.create(scope, logits); - } - - /** - * Builds an {@link Conv2dBackpropFilter} operation + * Builds an {@link NthElement} operation * - * @param input 4-D with shape `[batch, in_height, in_width, in_channels]`. - * @param filterSizes An integer vector representing the tensor shape of `filter`, - * @param outBackprop 4-D with shape `[batch, out_height, out_width, out_channels]`. - * @param strides The stride of the sliding window for each dimension of the input - * @param padding The type of padding algorithm to use. + * @param input 1-D or higher with last dimension at least `n+1`. + * @param n 0-D. Position of sorted vector to select along the last dimension (along * @param options carries optional attributes values - * @return a new instance of Conv2dBackpropFilter - * @see org.tensorflow.op.nn.Conv2dBackpropFilter + * @return a new instance of NthElement + * @see org.tensorflow.op.nn.NthElement */ - public Conv2dBackpropFilter conv2dBackpropFilter(Operand input, - Operand filterSizes, Operand outBackprop, List strides, String padding, - Conv2dBackpropFilter.Options... options) { - return Conv2dBackpropFilter.create(scope, input, filterSizes, outBackprop, strides, padding, options); + public NthElement nthElement(Operand input, Operand n, + NthElement.Options... options) { + return NthElement.create(scope, input, n, options); } /** - * Builds an {@link L2Loss} operation + * Builds an {@link QuantizedRelu} operation * - * @param t Typically 2-D, but may have any dimensions. - * @return a new instance of L2Loss - * @see org.tensorflow.op.nn.L2Loss + * @param features + * @param minFeatures The float value that the lowest quantized value represents. + * @param maxFeatures The float value that the highest quantized value represents. + * @param outType + * @return a new instance of QuantizedRelu + * @see org.tensorflow.op.nn.QuantizedRelu */ - public L2Loss l2Loss(Operand t) { - return L2Loss.create(scope, t); + public QuantizedRelu quantizedRelu(Operand features, Operand minFeatures, + Operand maxFeatures, DataType outType) { + return QuantizedRelu.create(scope, features, minFeatures, maxFeatures, outType); } /** - * Builds an {@link MaxPool3dGrad} operation + * Builds an {@link MaxPoolWithArgmax} operation * - * @param origInput The original input tensor. - * @param origOutput The original output tensor. - * @param grad Output backprop of shape `[batch, depth, rows, cols, channels]`. - * @param ksize 1-D tensor of length 5. The size of the window for each dimension of - * @param strides 1-D tensor of length 5. The stride of the sliding window for each + * @param input 4-D with shape `[batch, height, width, channels]`. Input to pool over. + * @param ksize The size of the window for each dimension of the input tensor. + * @param strides The stride of the sliding window for each dimension of the + * @param Targmax * @param padding The type of padding algorithm to use. * @param options carries optional attributes values - * @return a new instance of MaxPool3dGrad - * @see org.tensorflow.op.nn.MaxPool3dGrad + * @return a new instance of MaxPoolWithArgmax + * @see org.tensorflow.op.nn.MaxPoolWithArgmax */ - public MaxPool3dGrad maxPool3dGrad(Operand origInput, - Operand origOutput, Operand grad, List ksize, List strides, String padding, - MaxPool3dGrad.Options... options) { - return MaxPool3dGrad.create(scope, origInput, origOutput, grad, ksize, strides, padding, options); + public MaxPoolWithArgmax maxPoolWithArgmax( + Operand input, List ksize, List strides, DataType Targmax, String padding, + MaxPoolWithArgmax.Options... options) { + return MaxPoolWithArgmax.create(scope, input, ksize, strides, Targmax, padding, options); } /** - * Builds an {@link SparseSoftmaxCrossEntropyWithLogits} operation + * Builds an {@link InTopK} operation * - * @param features batch_size x num_classes matrix - * @param labels batch_size vector with values in [0, num_classes). - * @return a new instance of SparseSoftmaxCrossEntropyWithLogits - * @see org.tensorflow.op.nn.SparseSoftmaxCrossEntropyWithLogits + * @param predictions A `batch_size` x `classes` tensor. + * @param targets A `batch_size` vector of class ids. + * @param k Number of top elements to look at for computing precision. + * @return a new instance of InTopK + * @see org.tensorflow.op.nn.InTopK */ - public SparseSoftmaxCrossEntropyWithLogits sparseSoftmaxCrossEntropyWithLogits( - Operand features, Operand labels) { - return SparseSoftmaxCrossEntropyWithLogits.create(scope, features, labels); + public InTopK inTopK(Operand predictions, Operand targets, + Operand k) { + return InTopK.create(scope, predictions, targets, k); } /** - * Builds an {@link QuantizedConv2d} operation + * Builds an {@link L2Loss} operation * - * @param input - * @param filter filter's input_depth dimension must match input's depth dimensions. - * @param minInput The float value that the lowest quantized input value represents. - * @param maxInput The float value that the highest quantized input value represents. - * @param minFilter The float value that the lowest quantized filter value represents. - * @param maxFilter The float value that the highest quantized filter value represents. - * @param outType + * @param t Typically 2-D, but may have any dimensions. + * @return a new instance of L2Loss + * @see org.tensorflow.op.nn.L2Loss + */ + public L2Loss l2Loss(Operand t) { + return L2Loss.create(scope, t); + } + + /** + * Builds an {@link DepthwiseConv2dNativeBackpropFilter} operation + * + * @param input 4-D with shape based on `data_format`. For example, if + * @param filterSizes An integer vector representing the tensor shape of `filter`, + * @param outBackprop 4-D with shape based on `data_format`. * @param strides The stride of the sliding window for each dimension of the input * @param padding The type of padding algorithm to use. * @param options carries optional attributes values - * @return a new instance of QuantizedConv2d - * @see org.tensorflow.op.nn.QuantizedConv2d + * @return a new instance of DepthwiseConv2dNativeBackpropFilter + * @see org.tensorflow.op.nn.DepthwiseConv2dNativeBackpropFilter */ - public QuantizedConv2d quantizedConv2d(Operand input, Operand filter, - Operand minInput, Operand maxInput, Operand minFilter, - Operand maxFilter, Class outType, List strides, String padding, - QuantizedConv2d.Options... options) { - return QuantizedConv2d.create(scope, input, filter, minInput, maxInput, minFilter, maxFilter, outType, strides, padding, options); + public DepthwiseConv2dNativeBackpropFilter depthwiseConv2dNativeBackpropFilter( + Operand input, Operand filterSizes, Operand outBackprop, List strides, + String padding, DepthwiseConv2dNativeBackpropFilter.Options... options) { + return DepthwiseConv2dNativeBackpropFilter.create(scope, input, filterSizes, outBackprop, strides, padding, options); } /** - * Builds an {@link AvgPool} operation + * Builds an {@link Conv3d} operation * - * @param value 4-D with shape `[batch, height, width, channels]`. - * @param ksize The size of the sliding window for each dimension of `value`. - * @param strides The stride of the sliding window for each dimension of `value`. + * @param input Shape `[batch, in_depth, in_height, in_width, in_channels]`. + * @param filter Shape `[filter_depth, filter_height, filter_width, in_channels, + * @param strides 1-D tensor of length 5. The stride of the sliding window for each * @param padding The type of padding algorithm to use. * @param options carries optional attributes values - * @return a new instance of AvgPool - * @see org.tensorflow.op.nn.AvgPool + * @return a new instance of Conv3d + * @see org.tensorflow.op.nn.Conv3d */ - public AvgPool avgPool(Operand value, List ksize, - List strides, String padding, AvgPool.Options... options) { - return AvgPool.create(scope, value, ksize, strides, padding, options); + public Conv3d conv3d(Operand input, Operand filter, + List strides, String padding, Conv3d.Options... options) { + return Conv3d.create(scope, input, filter, strides, padding, options); } /** - * Builds an {@link QuantizedRelu} operation + * Builds an {@link FusedBatchNorm} operation + * + * @param x A 4D Tensor for input data. + * @param scale A 1D Tensor for scaling factor, to scale the normalized x. + * @param offset A 1D Tensor for offset, to shift to the normalized x. + * @param mean A 1D Tensor for population mean. Used for inference only; + * @param variance A 1D Tensor for population variance. Used for inference only; + * @param options carries optional attributes values + * @return a new instance of FusedBatchNorm + * @see org.tensorflow.op.nn.FusedBatchNorm + */ + public FusedBatchNorm fusedBatchNorm(Operand x, + Operand scale, Operand offset, Operand mean, Operand variance, + FusedBatchNorm.Options... options) { + return FusedBatchNorm.create(scope, x, scale, offset, mean, variance, options); + } + + /** + * Builds an {@link MaxPoolGrad} operation + * + * @param origInput The original input tensor. + * @param origOutput The original output tensor. + * @param grad 4-D. Gradients w.r.t. the output of `max_pool`. + * @param ksize The size of the window for each dimension of the input tensor. + * @param strides The stride of the sliding window for each dimension of the + * @param padding The type of padding algorithm to use. + * @param options carries optional attributes values + * @return a new instance of MaxPoolGrad + * @see org.tensorflow.op.nn.MaxPoolGrad + */ + public MaxPoolGrad maxPoolGrad(Operand origInput, Operand origOutput, + Operand grad, Operand ksize, Operand strides, String padding, + MaxPoolGrad.Options... options) { + return MaxPoolGrad.create(scope, origInput, origOutput, grad, ksize, strides, padding, options); + } + + /** + * Builds an {@link QuantizedReluX} operation * * @param features + * @param maxValue * @param minFeatures The float value that the lowest quantized value represents. * @param maxFeatures The float value that the highest quantized value represents. * @param outType - * @return a new instance of QuantizedRelu - * @see org.tensorflow.op.nn.QuantizedRelu + * @return a new instance of QuantizedReluX + * @see org.tensorflow.op.nn.QuantizedReluX */ - public QuantizedRelu quantizedRelu(Operand features, Operand minFeatures, - Operand maxFeatures, Class outType) { - return QuantizedRelu.create(scope, features, minFeatures, maxFeatures, outType); + public QuantizedReluX quantizedReluX(Operand features, Operand maxValue, + Operand minFeatures, Operand maxFeatures, DataType outType) { + return QuantizedReluX.create(scope, features, maxValue, minFeatures, maxFeatures, outType); } /** - * Builds an {@link Conv3d} operation + * Builds an {@link MaxPool3dGradGrad} operation * - * @param input Shape `[batch, in_depth, in_height, in_width, in_channels]`. - * @param filter Shape `[filter_depth, filter_height, filter_width, in_channels, + * @param origInput The original input tensor. + * @param origOutput The original output tensor. + * @param grad Output backprop of shape `[batch, depth, rows, cols, channels]`. + * @param ksize 1-D tensor of length 5. The size of the window for each dimension of * @param strides 1-D tensor of length 5. The stride of the sliding window for each * @param padding The type of padding algorithm to use. * @param options carries optional attributes values - * @return a new instance of Conv3d - * @see org.tensorflow.op.nn.Conv3d + * @return a new instance of MaxPool3dGradGrad + * @see org.tensorflow.op.nn.MaxPool3dGradGrad */ - public Conv3d conv3d(Operand input, Operand filter, - List strides, String padding, Conv3d.Options... options) { - return Conv3d.create(scope, input, filter, strides, padding, options); + public MaxPool3dGradGrad maxPool3dGradGrad(Operand origInput, + Operand origOutput, Operand grad, List ksize, List strides, String padding, + MaxPool3dGradGrad.Options... options) { + return MaxPool3dGradGrad.create(scope, origInput, origOutput, grad, ksize, strides, padding, options); } /** - * Builds an {@link FractionalMaxPool} operation + * Builds an {@link MaxPoolGradGradWithArgmax} operation * - * @param value 4-D with shape `[batch, height, width, channels]`. - * @param poolingRatio Pooling ratio for each dimension of `value`, currently only + * @param input The original input. + * @param grad 4-D with shape `[batch, height, width, channels]`. Gradients w.r.t. the + * @param argmax The indices of the maximum values chosen for each output of `max_pool`. + * @param ksize The size of the window for each dimension of the input tensor. + * @param strides The stride of the sliding window for each dimension of the + * @param padding The type of padding algorithm to use. * @param options carries optional attributes values - * @return a new instance of FractionalMaxPool - * @see org.tensorflow.op.nn.FractionalMaxPool + * @return a new instance of MaxPoolGradGradWithArgmax + * @see org.tensorflow.op.nn.MaxPoolGradGradWithArgmax */ - public FractionalMaxPool fractionalMaxPool(Operand value, - List poolingRatio, FractionalMaxPool.Options... options) { - return FractionalMaxPool.create(scope, value, poolingRatio, options); + public MaxPoolGradGradWithArgmax maxPoolGradGradWithArgmax( + Operand input, Operand grad, Operand argmax, List ksize, List strides, + String padding, MaxPoolGradGradWithArgmax.Options... options) { + return MaxPoolGradGradWithArgmax.create(scope, input, grad, argmax, ksize, strides, padding, options); } /** - * Builds an {@link QuantizedInstanceNorm} operation + * Builds an {@link MaxPool} operation * - * @param x A 4D input Tensor. - * @param xMin The value represented by the lowest quantized input. - * @param xMax The value represented by the highest quantized input. + * @param input 4-D input to pool over. + * @param ksize The size of the window for each dimension of the input tensor. + * @param strides The stride of the sliding window for each dimension of the + * @param padding The type of padding algorithm to use. * @param options carries optional attributes values - * @return a new instance of QuantizedInstanceNorm - * @see org.tensorflow.op.nn.QuantizedInstanceNorm + * @return a new instance of MaxPool + * @see org.tensorflow.op.nn.MaxPool */ - public QuantizedInstanceNorm quantizedInstanceNorm(Operand x, Operand xMin, - Operand xMax, QuantizedInstanceNorm.Options... options) { - return QuantizedInstanceNorm.create(scope, x, xMin, xMax, options); + public MaxPool maxPool(Operand input, Operand ksize, Operand strides, + String padding, MaxPool.Options... options) { + return MaxPool.create(scope, input, ksize, strides, padding, options); } /** - * Builds an {@link AvgPool3dGrad} operation + * Builds an {@link MaxPool3dGrad} operation * - * @param origInputShape The original input dimensions. + * @param origInput The original input tensor. + * @param origOutput The original output tensor. * @param grad Output backprop of shape `[batch, depth, rows, cols, channels]`. * @param ksize 1-D tensor of length 5. The size of the window for each dimension of * @param strides 1-D tensor of length 5. The stride of the sliding window for each * @param padding The type of padding algorithm to use. * @param options carries optional attributes values - * @return a new instance of AvgPool3dGrad - * @see org.tensorflow.op.nn.AvgPool3dGrad + * @return a new instance of MaxPool3dGrad + * @see org.tensorflow.op.nn.MaxPool3dGrad */ - public AvgPool3dGrad avgPool3dGrad(Operand origInputShape, - Operand grad, List ksize, List strides, String padding, - AvgPool3dGrad.Options... options) { - return AvgPool3dGrad.create(scope, origInputShape, grad, ksize, strides, padding, options); + public MaxPool3dGrad maxPool3dGrad(Operand origInput, + Operand origOutput, Operand grad, List ksize, List strides, String padding, + MaxPool3dGrad.Options... options) { + return MaxPool3dGrad.create(scope, origInput, origOutput, grad, ksize, strides, padding, options); + } + + /** + * Builds an {@link CudnnRnnParamsSize} operation + * + * @param numLayers + * @param numUnits + * @param inputSize + * @param T + * @param S + * @param options carries optional attributes values + * @return a new instance of CudnnRnnParamsSize + * @see org.tensorflow.op.nn.CudnnRnnParamsSize + */ + public CudnnRnnParamsSize cudnnRnnParamsSize( + Operand numLayers, Operand numUnits, Operand inputSize, DataType T, + DataType S, CudnnRnnParamsSize.Options... options) { + return CudnnRnnParamsSize.create(scope, numLayers, numUnits, inputSize, T, S, options); + } + + /** + * Builds an {@link MaxPoolGradGrad} operation + * + * @param origInput The original input tensor. + * @param origOutput The original output tensor. + * @param grad 4-D. Gradients of gradients w.r.t. the input of `max_pool`. + * @param ksize The size of the window for each dimension of the input tensor. + * @param strides The stride of the sliding window for each dimension of the + * @param padding The type of padding algorithm to use. + * @param options carries optional attributes values + * @return a new instance of MaxPoolGradGrad + * @see org.tensorflow.op.nn.MaxPoolGradGrad + */ + public MaxPoolGradGrad maxPoolGradGrad(Operand origInput, + Operand origOutput, Operand grad, Operand ksize, Operand strides, + String padding, MaxPoolGradGrad.Options... options) { + return MaxPoolGradGrad.create(scope, origInput, origOutput, grad, ksize, strides, padding, options); + } + + /** + * Builds an {@link SoftmaxCrossEntropyWithLogits} operation + * + * @param features batch_size x num_classes matrix + * @param labels batch_size x num_classes matrix + * @return a new instance of SoftmaxCrossEntropyWithLogits + * @see org.tensorflow.op.nn.SoftmaxCrossEntropyWithLogits + */ + public SoftmaxCrossEntropyWithLogits softmaxCrossEntropyWithLogits( + Operand features, Operand labels) { + return SoftmaxCrossEntropyWithLogits.create(scope, features, labels); } /** @@ -500,34 +588,33 @@ public AvgPool3dGrad avgPool3dGrad(Operand origIn * @return a new instance of DepthwiseConv2dNativeBackpropInput * @see org.tensorflow.op.nn.DepthwiseConv2dNativeBackpropInput */ - public DepthwiseConv2dNativeBackpropInput depthwiseConv2dNativeBackpropInput( - Operand inputSizes, Operand filter, Operand outBackprop, List strides, + public DepthwiseConv2dNativeBackpropInput depthwiseConv2dNativeBackpropInput( + Operand inputSizes, Operand filter, Operand outBackprop, List strides, String padding, DepthwiseConv2dNativeBackpropInput.Options... options) { return DepthwiseConv2dNativeBackpropInput.create(scope, inputSizes, filter, outBackprop, strides, padding, options); } /** - * Builds an {@link Relu6} operation - * - * @param features - * @return a new instance of Relu6 - * @see org.tensorflow.op.nn.Relu6 - */ - public Relu6 relu6(Operand features) { - return Relu6.create(scope, features); - } - - /** - * Builds an {@link DataFormatDimMap} operation + * Builds an {@link QuantizedConv2d} operation * - * @param x A Tensor with each element as a dimension index in source data format. + * @param input + * @param filter filter's input_depth dimension must match input's depth dimensions. + * @param minInput The float value that the lowest quantized input value represents. + * @param maxInput The float value that the highest quantized input value represents. + * @param minFilter The float value that the lowest quantized filter value represents. + * @param maxFilter The float value that the highest quantized filter value represents. + * @param outType + * @param strides The stride of the sliding window for each dimension of the input + * @param padding The type of padding algorithm to use. * @param options carries optional attributes values - * @return a new instance of DataFormatDimMap - * @see org.tensorflow.op.nn.DataFormatDimMap + * @return a new instance of QuantizedConv2d + * @see org.tensorflow.op.nn.QuantizedConv2d */ - public DataFormatDimMap dataFormatDimMap(Operand x, - DataFormatDimMap.Options... options) { - return DataFormatDimMap.create(scope, x, options); + public QuantizedConv2d quantizedConv2d(Operand input, Operand filter, + Operand minInput, Operand maxInput, Operand minFilter, + Operand maxFilter, DataType outType, List strides, String padding, + QuantizedConv2d.Options... options) { + return QuantizedConv2d.create(scope, input, filter, minInput, maxInput, minFilter, maxFilter, outType, strides, padding, options); } /** @@ -541,24 +628,6 @@ public Relu relu(Operand features) { return Relu.create(scope, features); } - /** - * Builds an {@link FusedBatchNormGrad} operation - * - * @param yBackprop A 4D Tensor for the gradient with respect to y. - * @param x A 4D Tensor for input data. - * @param scale A 1D Tensor for scaling factor, to scale the normalized x. - * @param reserveSpace1 When is_training is True, a 1D Tensor for the computed batch - * @param reserveSpace2 When is_training is True, a 1D Tensor for the computed batch - * @param options carries optional attributes values - * @return a new instance of FusedBatchNormGrad - * @see org.tensorflow.op.nn.FusedBatchNormGrad - */ - public FusedBatchNormGrad fusedBatchNormGrad( - Operand yBackprop, Operand x, Operand scale, Operand reserveSpace1, - Operand reserveSpace2, FusedBatchNormGrad.Options... options) { - return FusedBatchNormGrad.create(scope, yBackprop, x, scale, reserveSpace1, reserveSpace2, options); - } - /** * Builds an {@link SpaceToDepth} operation * @@ -574,19 +643,68 @@ public SpaceToDepth spaceToDepth(Operand input, Long blockSize, } /** - * Builds an {@link MaxPool} operation + * Builds an {@link CtcLoss} operation * - * @param input 4-D input to pool over. - * @param ksize The size of the window for each dimension of the input tensor. - * @param strides The stride of the sliding window for each dimension of the + * @param inputs 3-D, shape: `(max_time x batch_size x num_classes)`, the logits. + * @param labelsIndices The indices of a `SparseTensor`. + * @param labelsValues The values (labels) associated with the given batch and time. + * @param sequenceLength A vector containing sequence lengths (batch). + * @param options carries optional attributes values + * @return a new instance of CtcLoss + * @see org.tensorflow.op.nn.CtcLoss + */ + public CtcLoss ctcLoss(Operand inputs, Operand labelsIndices, + Operand labelsValues, Operand sequenceLength, CtcLoss.Options... options) { + return CtcLoss.create(scope, inputs, labelsIndices, labelsValues, sequenceLength, options); + } + + /** + * Builds an {@link LocalResponseNormalization} operation + * + * @param input 4-D. + * @param options carries optional attributes values + * @return a new instance of LocalResponseNormalization + * @see org.tensorflow.op.nn.LocalResponseNormalization + */ + public LocalResponseNormalization localResponseNormalization( + Operand input, LocalResponseNormalization.Options... options) { + return LocalResponseNormalization.create(scope, input, options); + } + + /** + * Builds an {@link LearnedUnigramCandidateSampler} operation + * + * @param trueClasses A batch_size * num_true matrix, in which each row contains the + * @param numTrue Number of true labels per context. + * @param numSampled Number of candidates to randomly sample. + * @param unique If unique is true, we sample with rejection, so that all sampled + * @param rangeMax The sampler will sample integers from the interval [0, range_max). + * @param options carries optional attributes values + * @return a new instance of LearnedUnigramCandidateSampler + * @see org.tensorflow.op.nn.LearnedUnigramCandidateSampler + */ + public LearnedUnigramCandidateSampler learnedUnigramCandidateSampler(Operand trueClasses, + Long numTrue, Long numSampled, Boolean unique, Long rangeMax, + LearnedUnigramCandidateSampler.Options... options) { + return LearnedUnigramCandidateSampler.create(scope, trueClasses, numTrue, numSampled, unique, rangeMax, options); + } + + /** + * Builds an {@link AvgPool3dGrad} operation + * + * @param origInputShape The original input dimensions. + * @param grad Output backprop of shape `[batch, depth, rows, cols, channels]`. + * @param ksize 1-D tensor of length 5. The size of the window for each dimension of + * @param strides 1-D tensor of length 5. The stride of the sliding window for each * @param padding The type of padding algorithm to use. * @param options carries optional attributes values - * @return a new instance of MaxPool - * @see org.tensorflow.op.nn.MaxPool + * @return a new instance of AvgPool3dGrad + * @see org.tensorflow.op.nn.AvgPool3dGrad */ - public MaxPool maxPool(Operand input, Operand ksize, Operand strides, - String padding, MaxPool.Options... options) { - return MaxPool.create(scope, input, ksize, strides, padding, options); + public AvgPool3dGrad avgPool3dGrad(Operand origInputShape, + Operand grad, List ksize, List strides, String padding, + AvgPool3dGrad.Options... options) { + return AvgPool3dGrad.create(scope, origInputShape, grad, ksize, strides, padding, options); } /** @@ -608,6 +726,17 @@ public BatchNormWithGlobalNormalizationGrad batchNormWithGlobalNormalizat return BatchNormWithGlobalNormalizationGrad.create(scope, t, m, v, gamma, backprop, varianceEpsilon, scaleAfterNormalization); } + /** + * Builds an {@link Selu} operation + * + * @param features + * @return a new instance of Selu + * @see org.tensorflow.op.nn.Selu + */ + public Selu selu(Operand features) { + return Selu.create(scope, features); + } + /** * Builds an {@link BatchNormWithGlobalNormalization} operation * @@ -619,155 +748,78 @@ public BatchNormWithGlobalNormalizationGrad batchNormWithGlobalNormalizat * @param varianceEpsilon A small float number to avoid dividing by 0. * @param scaleAfterNormalization A bool indicating whether the resulted tensor * @return a new instance of BatchNormWithGlobalNormalization - * @see org.tensorflow.op.nn.BatchNormWithGlobalNormalization - */ - public BatchNormWithGlobalNormalization batchNormWithGlobalNormalization(Operand t, - Operand m, Operand v, Operand beta, Operand gamma, Float varianceEpsilon, - Boolean scaleAfterNormalization) { - return BatchNormWithGlobalNormalization.create(scope, t, m, v, beta, gamma, varianceEpsilon, scaleAfterNormalization); - } - - /** - * Builds an {@link CudnnRnnCanonicalToParams} operation - * - * @param numLayers - * @param numUnits - * @param inputSize - * @param weights - * @param biases - * @param options carries optional attributes values - * @return a new instance of CudnnRnnCanonicalToParams - * @see org.tensorflow.op.nn.CudnnRnnCanonicalToParams - */ - public CudnnRnnCanonicalToParams cudnnRnnCanonicalToParams( - Operand numLayers, Operand numUnits, Operand inputSize, - Iterable> weights, Iterable> biases, - CudnnRnnCanonicalToParams.Options... options) { - return CudnnRnnCanonicalToParams.create(scope, numLayers, numUnits, inputSize, weights, biases, options); - } - - /** - * Builds an {@link InTopK} operation - * - * @param predictions A `batch_size` x `classes` tensor. - * @param targets A `batch_size` vector of class ids. - * @param k Number of top elements to look at for computing precision. - * @return a new instance of InTopK - * @see org.tensorflow.op.nn.InTopK - */ - public InTopK inTopK(Operand predictions, Operand targets, - Operand k) { - return InTopK.create(scope, predictions, targets, k); - } - - /** - * Builds an {@link MaxPoolWithArgmax} operation - * - * @param input 4-D with shape `[batch, height, width, channels]`. Input to pool over. - * @param ksize The size of the window for each dimension of the input tensor. - * @param strides The stride of the sliding window for each dimension of the - * @param Targmax - * @param padding The type of padding algorithm to use. - * @param options carries optional attributes values - * @return a new instance of MaxPoolWithArgmax - * @see org.tensorflow.op.nn.MaxPoolWithArgmax - */ - public MaxPoolWithArgmax maxPoolWithArgmax( - Operand input, List ksize, List strides, Class Targmax, String padding, - MaxPoolWithArgmax.Options... options) { - return MaxPoolWithArgmax.create(scope, input, ksize, strides, Targmax, padding, options); - } - - /** - * Builds an {@link MaxPoolGradGrad} operation - * - * @param origInput The original input tensor. - * @param origOutput The original output tensor. - * @param grad 4-D. Gradients of gradients w.r.t. the input of `max_pool`. - * @param ksize The size of the window for each dimension of the input tensor. - * @param strides The stride of the sliding window for each dimension of the - * @param padding The type of padding algorithm to use. - * @param options carries optional attributes values - * @return a new instance of MaxPoolGradGrad - * @see org.tensorflow.op.nn.MaxPoolGradGrad + * @see org.tensorflow.op.nn.BatchNormWithGlobalNormalization */ - public MaxPoolGradGrad maxPoolGradGrad(Operand origInput, - Operand origOutput, Operand grad, Operand ksize, Operand strides, - String padding, MaxPoolGradGrad.Options... options) { - return MaxPoolGradGrad.create(scope, origInput, origOutput, grad, ksize, strides, padding, options); + public BatchNormWithGlobalNormalization batchNormWithGlobalNormalization(Operand t, + Operand m, Operand v, Operand beta, Operand gamma, Float varianceEpsilon, + Boolean scaleAfterNormalization) { + return BatchNormWithGlobalNormalization.create(scope, t, m, v, beta, gamma, varianceEpsilon, scaleAfterNormalization); } /** - * Builds an {@link Dilation2dBackpropFilter} operation + * Builds an {@link Conv3dBackpropFilter} operation * - * @param input 4-D with shape `[batch, in_height, in_width, depth]`. - * @param filter 3-D with shape `[filter_height, filter_width, depth]`. - * @param outBackprop 4-D with shape `[batch, out_height, out_width, depth]`. - * @param strides 1-D of length 4. The stride of the sliding window for each dimension of - * @param rates 1-D of length 4. The input stride for atrous morphological dilation. + * @param input Shape `[batch, depth, rows, cols, in_channels]`. + * @param filterSizes An integer vector representing the tensor shape of `filter`, + * @param outBackprop Backprop signal of shape `[batch, out_depth, out_rows, out_cols, + * @param strides 1-D tensor of length 5. The stride of the sliding window for each * @param padding The type of padding algorithm to use. - * @return a new instance of Dilation2dBackpropFilter - * @see org.tensorflow.op.nn.Dilation2dBackpropFilter - */ - public Dilation2dBackpropFilter dilation2dBackpropFilter(Operand input, - Operand filter, Operand outBackprop, List strides, List rates, - String padding) { - return Dilation2dBackpropFilter.create(scope, input, filter, outBackprop, strides, rates, padding); - } - - /** - * Builds an {@link FusedBatchNorm} operation - * - * @param x A 4D Tensor for input data. - * @param scale A 1D Tensor for scaling factor, to scale the normalized x. - * @param offset A 1D Tensor for offset, to shift to the normalized x. - * @param mean A 1D Tensor for population mean. Used for inference only; - * @param variance A 1D Tensor for population variance. Used for inference only; * @param options carries optional attributes values - * @return a new instance of FusedBatchNorm - * @see org.tensorflow.op.nn.FusedBatchNorm + * @return a new instance of Conv3dBackpropFilter + * @see org.tensorflow.op.nn.Conv3dBackpropFilter */ - public FusedBatchNorm fusedBatchNorm(Operand x, - Operand scale, Operand offset, Operand mean, Operand variance, - FusedBatchNorm.Options... options) { - return FusedBatchNorm.create(scope, x, scale, offset, mean, variance, options); + public Conv3dBackpropFilter conv3dBackpropFilter(Operand input, + Operand filterSizes, Operand outBackprop, List strides, String padding, + Conv3dBackpropFilter.Options... options) { + return Conv3dBackpropFilter.create(scope, input, filterSizes, outBackprop, strides, padding, options); } /** - * Builds an {@link FractionalAvgPool} operation + * Builds an {@link AvgPool3d} operation * - * @param value 4-D with shape `[batch, height, width, channels]`. - * @param poolingRatio Pooling ratio for each dimension of `value`, currently only + * @param input Shape `[batch, depth, rows, cols, channels]` tensor to pool over. + * @param ksize 1-D tensor of length 5. The size of the window for each dimension of + * @param strides 1-D tensor of length 5. The stride of the sliding window for each + * @param padding The type of padding algorithm to use. * @param options carries optional attributes values - * @return a new instance of FractionalAvgPool - * @see org.tensorflow.op.nn.FractionalAvgPool + * @return a new instance of AvgPool3d + * @see org.tensorflow.op.nn.AvgPool3d */ - public FractionalAvgPool fractionalAvgPool(Operand value, - List poolingRatio, FractionalAvgPool.Options... options) { - return FractionalAvgPool.create(scope, value, poolingRatio, options); + public AvgPool3d avgPool3d(Operand input, List ksize, + List strides, String padding, AvgPool3d.Options... options) { + return AvgPool3d.create(scope, input, ksize, strides, padding, options); } /** - * Builds an {@link BiasAddGrad} operation + * Builds an {@link QuantizedBiasAdd} operation * - * @param outBackprop Any number of dimensions. - * @param options carries optional attributes values - * @return a new instance of BiasAddGrad - * @see org.tensorflow.op.nn.BiasAddGrad + * @param input + * @param bias A 1D bias Tensor with size matching the last dimension of 'input'. + * @param minInput The float value that the lowest quantized input value represents. + * @param maxInput The float value that the highest quantized input value represents. + * @param minBias The float value that the lowest quantized bias value represents. + * @param maxBias The float value that the highest quantized bias value represents. + * @param outType + * @return a new instance of QuantizedBiasAdd + * @see org.tensorflow.op.nn.QuantizedBiasAdd */ - public BiasAddGrad biasAddGrad(Operand outBackprop, BiasAddGrad.Options... options) { - return BiasAddGrad.create(scope, outBackprop, options); + public QuantizedBiasAdd quantizedBiasAdd(Operand input, Operand bias, + Operand minInput, Operand maxInput, Operand minBias, + Operand maxBias, DataType outType) { + return QuantizedBiasAdd.create(scope, input, bias, minInput, maxInput, minBias, maxBias, outType); } /** - * Builds an {@link LogSoftmax} operation + * Builds an {@link DataFormatDimMap} operation * - * @param logits 2-D with shape `[batch_size, num_classes]`. - * @return a new instance of LogSoftmax - * @see org.tensorflow.op.nn.LogSoftmax + * @param x A Tensor with each element as a dimension index in source data format. + * @param options carries optional attributes values + * @return a new instance of DataFormatDimMap + * @see org.tensorflow.op.nn.DataFormatDimMap */ - public LogSoftmax logSoftmax(Operand logits) { - return LogSoftmax.create(scope, logits); + public DataFormatDimMap dataFormatDimMap(Operand x, + DataFormatDimMap.Options... options) { + return DataFormatDimMap.create(scope, x, options); } /** @@ -779,194 +831,192 @@ public LogSoftmax logSoftmax(Operand logits) { * @return a new instance of TopK * @see org.tensorflow.op.nn.TopK */ - public TopK topK(Operand input, Operand k, + public TopK topK(Operand input, Operand k, TopK.Options... options) { return TopK.create(scope, input, k, options); } /** - * Builds an {@link CudnnRnnParamsToCanonical} operation + * Builds an {@link BiasAddGrad} operation * - * @param numLayers - * @param numUnits - * @param inputSize - * @param params - * @param numParams + * @param outBackprop Any number of dimensions. * @param options carries optional attributes values - * @return a new instance of CudnnRnnParamsToCanonical - * @see org.tensorflow.op.nn.CudnnRnnParamsToCanonical + * @return a new instance of BiasAddGrad + * @see org.tensorflow.op.nn.BiasAddGrad */ - public CudnnRnnParamsToCanonical cudnnRnnParamsToCanonical( - Operand numLayers, Operand numUnits, Operand inputSize, - Operand params, Long numParams, CudnnRnnParamsToCanonical.Options... options) { - return CudnnRnnParamsToCanonical.create(scope, numLayers, numUnits, inputSize, params, numParams, options); + public BiasAddGrad biasAddGrad(Operand outBackprop, BiasAddGrad.Options... options) { + return BiasAddGrad.create(scope, outBackprop, options); } /** - * Builds an {@link FixedUnigramCandidateSampler} operation + * Builds an {@link QuantizedInstanceNorm} operation * - * @param trueClasses A batch_size * num_true matrix, in which each row contains the - * @param numTrue Number of true labels per context. - * @param numSampled Number of candidates to randomly sample. - * @param unique If unique is true, we sample with rejection, so that all sampled - * @param rangeMax The sampler will sample integers from the interval [0, range_max). + * @param x A 4D input Tensor. + * @param xMin The value represented by the lowest quantized input. + * @param xMax The value represented by the highest quantized input. * @param options carries optional attributes values - * @return a new instance of FixedUnigramCandidateSampler - * @see org.tensorflow.op.nn.FixedUnigramCandidateSampler + * @return a new instance of QuantizedInstanceNorm + * @see org.tensorflow.op.nn.QuantizedInstanceNorm */ - public FixedUnigramCandidateSampler fixedUnigramCandidateSampler(Operand trueClasses, - Long numTrue, Long numSampled, Boolean unique, Long rangeMax, - FixedUnigramCandidateSampler.Options... options) { - return FixedUnigramCandidateSampler.create(scope, trueClasses, numTrue, numSampled, unique, rangeMax, options); + public QuantizedInstanceNorm quantizedInstanceNorm(Operand x, Operand xMin, + Operand xMax, QuantizedInstanceNorm.Options... options) { + return QuantizedInstanceNorm.create(scope, x, xMin, xMax, options); } /** - * Builds an {@link MaxPoolGradGradWithArgmax} operation + * Builds an {@link LogSoftmax} operation * - * @param input The original input. - * @param grad 4-D with shape `[batch, height, width, channels]`. Gradients w.r.t. the - * @param argmax The indices of the maximum values chosen for each output of `max_pool`. - * @param ksize The size of the window for each dimension of the input tensor. - * @param strides The stride of the sliding window for each dimension of the - * @param padding The type of padding algorithm to use. - * @param options carries optional attributes values - * @return a new instance of MaxPoolGradGradWithArgmax - * @see org.tensorflow.op.nn.MaxPoolGradGradWithArgmax + * @param logits 2-D with shape `[batch_size, num_classes]`. + * @return a new instance of LogSoftmax + * @see org.tensorflow.op.nn.LogSoftmax */ - public MaxPoolGradGradWithArgmax maxPoolGradGradWithArgmax( - Operand input, Operand grad, Operand argmax, List ksize, List strides, - String padding, MaxPoolGradGradWithArgmax.Options... options) { - return MaxPoolGradGradWithArgmax.create(scope, input, grad, argmax, ksize, strides, padding, options); + public LogSoftmax logSoftmax(Operand logits) { + return LogSoftmax.create(scope, logits); } /** - * Builds an {@link Conv3dBackpropInput} operation + * Builds an {@link Dilation2dBackpropInput} operation * - * @param inputSizes An integer vector representing the tensor shape of `input`, - * @param filter Shape `[depth, rows, cols, in_channels, out_channels]`. - * @param outBackprop Backprop signal of shape `[batch, out_depth, out_rows, out_cols, - * @param strides 1-D tensor of length 5. The stride of the sliding window for each + * @param input 4-D with shape `[batch, in_height, in_width, depth]`. + * @param filter 3-D with shape `[filter_height, filter_width, depth]`. + * @param outBackprop 4-D with shape `[batch, out_height, out_width, depth]`. + * @param strides 1-D of length 4. The stride of the sliding window for each dimension of + * @param rates 1-D of length 4. The input stride for atrous morphological dilation. * @param padding The type of padding algorithm to use. - * @param options carries optional attributes values - * @return a new instance of Conv3dBackpropInput - * @see org.tensorflow.op.nn.Conv3dBackpropInput + * @return a new instance of Dilation2dBackpropInput + * @see org.tensorflow.op.nn.Dilation2dBackpropInput */ - public Conv3dBackpropInput conv3dBackpropInput( - Operand inputSizes, Operand filter, Operand outBackprop, List strides, - String padding, Conv3dBackpropInput.Options... options) { - return Conv3dBackpropInput.create(scope, inputSizes, filter, outBackprop, strides, padding, options); + public Dilation2dBackpropInput dilation2dBackpropInput(Operand input, + Operand filter, Operand outBackprop, List strides, List rates, + String padding) { + return Dilation2dBackpropInput.create(scope, input, filter, outBackprop, strides, rates, padding); } /** - * Builds an {@link Softsign} operation + * Builds an {@link Relu6} operation * * @param features - * @return a new instance of Softsign - * @see org.tensorflow.op.nn.Softsign + * @return a new instance of Relu6 + * @see org.tensorflow.op.nn.Relu6 */ - public Softsign softsign(Operand features) { - return Softsign.create(scope, features); + public Relu6 relu6(Operand features) { + return Relu6.create(scope, features); } /** - * Builds an {@link ComputeAccidentalHits} operation + * Builds an {@link CtcBeamSearchDecoder} operation * - * @param trueClasses The true_classes output of UnpackSparseLabels. - * @param sampledCandidates The sampled_candidates output of CandidateSampler. - * @param numTrue Number of true labels per context. + * @param inputs 3-D, shape: `(max_time x batch_size x num_classes)`, the logits. + * @param sequenceLength A vector containing sequence lengths, size `(batch)`. + * @param beamWidth A scalar >= 0 (beam search beam width). + * @param topPaths A scalar >= 0, <= beam_width (controls output size). * @param options carries optional attributes values - * @return a new instance of ComputeAccidentalHits - * @see org.tensorflow.op.nn.ComputeAccidentalHits + * @return a new instance of CtcBeamSearchDecoder + * @see org.tensorflow.op.nn.CtcBeamSearchDecoder */ - public ComputeAccidentalHits computeAccidentalHits(Operand trueClasses, - Operand sampledCandidates, Long numTrue, ComputeAccidentalHits.Options... options) { - return ComputeAccidentalHits.create(scope, trueClasses, sampledCandidates, numTrue, options); + public CtcBeamSearchDecoder ctcBeamSearchDecoder(Operand inputs, + Operand sequenceLength, Long beamWidth, Long topPaths, + CtcBeamSearchDecoder.Options... options) { + return CtcBeamSearchDecoder.create(scope, inputs, sequenceLength, beamWidth, topPaths, options); } /** - * Builds an {@link DataFormatVecPermute} operation + * Builds an {@link Softmax} operation * - * @param x Vector of size 4 or Tensor of shape (4, 2) in source data format. - * @param options carries optional attributes values - * @return a new instance of DataFormatVecPermute - * @see org.tensorflow.op.nn.DataFormatVecPermute + * @param logits 2-D with shape `[batch_size, num_classes]`. + * @return a new instance of Softmax + * @see org.tensorflow.op.nn.Softmax */ - public DataFormatVecPermute dataFormatVecPermute(Operand x, - DataFormatVecPermute.Options... options) { - return DataFormatVecPermute.create(scope, x, options); + public Softmax softmax(Operand logits) { + return Softmax.create(scope, logits); } /** - * Builds an {@link CtcBeamSearchDecoder} operation + * Builds an {@link Conv2d} operation * - * @param inputs 3-D, shape: `(max_time x batch_size x num_classes)`, the logits. - * @param sequenceLength A vector containing sequence lengths, size `(batch)`. - * @param beamWidth A scalar >= 0 (beam search beam width). - * @param topPaths A scalar >= 0, <= beam_width (controls output size). + * @param input A 4-D tensor. The dimension order is interpreted according to the value + * @param filter A 4-D tensor of shape + * @param strides 1-D tensor of length 4. The stride of the sliding window for each + * @param padding The type of padding algorithm to use. * @param options carries optional attributes values - * @return a new instance of CtcBeamSearchDecoder - * @see org.tensorflow.op.nn.CtcBeamSearchDecoder + * @return a new instance of Conv2d + * @see org.tensorflow.op.nn.Conv2d */ - public CtcBeamSearchDecoder ctcBeamSearchDecoder(Operand inputs, - Operand sequenceLength, Long beamWidth, Long topPaths, - CtcBeamSearchDecoder.Options... options) { - return CtcBeamSearchDecoder.create(scope, inputs, sequenceLength, beamWidth, topPaths, options); + public Conv2d conv2d(Operand input, Operand filter, + List strides, String padding, Conv2d.Options... options) { + return Conv2d.create(scope, input, filter, strides, padding, options); } /** - * Builds an {@link MaxPoolWithArgmax} operation + * Builds an {@link QuantizedRelu6} operation * - * @param input 4-D with shape `[batch, height, width, channels]`. Input to pool over. + * @param features + * @param minFeatures The float value that the lowest quantized value represents. + * @param maxFeatures The float value that the highest quantized value represents. + * @param outType + * @return a new instance of QuantizedRelu6 + * @see org.tensorflow.op.nn.QuantizedRelu6 + */ + public QuantizedRelu6 quantizedRelu6(Operand features, Operand minFeatures, + Operand maxFeatures, DataType outType) { + return QuantizedRelu6.create(scope, features, minFeatures, maxFeatures, outType); + } + + /** + * Builds an {@link QuantizedAvgPool} operation + * + * @param input 4-D with shape `[batch, height, width, channels]`. + * @param minInput The float value that the lowest quantized input value represents. + * @param maxInput The float value that the highest quantized input value represents. * @param ksize The size of the window for each dimension of the input tensor. - * @param strides The stride of the sliding window for each dimension of the + * @param strides The stride of the sliding window for each dimension of the input * @param padding The type of padding algorithm to use. - * @param options carries optional attributes values - * @return a new instance of MaxPoolWithArgmax - * @see org.tensorflow.op.nn.MaxPoolWithArgmax + * @return a new instance of QuantizedAvgPool + * @see org.tensorflow.op.nn.QuantizedAvgPool */ - public MaxPoolWithArgmax maxPoolWithArgmax(Operand input, - List ksize, List strides, String padding, MaxPoolWithArgmax.Options... options) { - return MaxPoolWithArgmax.create(scope, input, ksize, strides, padding, options); + public QuantizedAvgPool quantizedAvgPool(Operand input, Operand minInput, + Operand maxInput, List ksize, List strides, String padding) { + return QuantizedAvgPool.create(scope, input, minInput, maxInput, ksize, strides, padding); } /** - * Builds an {@link DepthwiseConv2dNative} operation + * Builds an {@link Conv3dBackpropInput} operation * - * @param input - * @param filter - * @param strides 1-D of length 4. The stride of the sliding window for each dimension + * @param inputSizes An integer vector representing the tensor shape of `input`, + * @param filter Shape `[depth, rows, cols, in_channels, out_channels]`. + * @param outBackprop Backprop signal of shape `[batch, out_depth, out_rows, out_cols, + * @param strides 1-D tensor of length 5. The stride of the sliding window for each * @param padding The type of padding algorithm to use. * @param options carries optional attributes values - * @return a new instance of DepthwiseConv2dNative - * @see org.tensorflow.op.nn.DepthwiseConv2dNative + * @return a new instance of Conv3dBackpropInput + * @see org.tensorflow.op.nn.Conv3dBackpropInput */ - public DepthwiseConv2dNative depthwiseConv2dNative(Operand input, - Operand filter, List strides, String padding, - DepthwiseConv2dNative.Options... options) { - return DepthwiseConv2dNative.create(scope, input, filter, strides, padding, options); + public Conv3dBackpropInput conv3dBackpropInput( + Operand inputSizes, Operand filter, Operand outBackprop, List strides, + String padding, Conv3dBackpropInput.Options... options) { + return Conv3dBackpropInput.create(scope, inputSizes, filter, outBackprop, strides, padding, options); } /** - * Builds an {@link QuantizedBiasAdd} operation + * Builds an {@link FusedPadConv2d} operation * - * @param input - * @param bias A 1D bias Tensor with size matching the last dimension of 'input'. - * @param minInput The float value that the lowest quantized input value represents. - * @param maxInput The float value that the highest quantized input value represents. - * @param minBias The float value that the lowest quantized bias value represents. - * @param maxBias The float value that the highest quantized bias value represents. - * @param outType - * @return a new instance of QuantizedBiasAdd - * @see org.tensorflow.op.nn.QuantizedBiasAdd + * @param input 4-D with shape `[batch, in_height, in_width, in_channels]`. + * @param paddings A two-column matrix specifying the padding sizes. The number of + * @param filter 4-D with shape + * @param mode + * @param strides 1-D of length 4. The stride of the sliding window for each dimension + * @param padding The type of padding algorithm to use. + * @return a new instance of FusedPadConv2d + * @see org.tensorflow.op.nn.FusedPadConv2d */ - public QuantizedBiasAdd quantizedBiasAdd(Operand input, Operand bias, - Operand minInput, Operand maxInput, Operand minBias, - Operand maxBias, Class outType) { - return QuantizedBiasAdd.create(scope, input, bias, minInput, maxInput, minBias, maxBias, outType); + public FusedPadConv2d fusedPadConv2d(Operand input, + Operand paddings, Operand filter, String mode, List strides, + String padding) { + return FusedPadConv2d.create(scope, input, paddings, filter, mode, strides, padding); } /** - * Builds an {@link Dilation2dBackpropInput} operation + * Builds an {@link Dilation2dBackpropFilter} operation * * @param input 4-D with shape `[batch, in_height, in_width, depth]`. * @param filter 3-D with shape `[filter_height, filter_width, depth]`. @@ -974,45 +1024,47 @@ public QuantizedBiasAdd quantizedBiasAdd(Operand input, Operand< * @param strides 1-D of length 4. The stride of the sliding window for each dimension of * @param rates 1-D of length 4. The input stride for atrous morphological dilation. * @param padding The type of padding algorithm to use. - * @return a new instance of Dilation2dBackpropInput - * @see org.tensorflow.op.nn.Dilation2dBackpropInput + * @return a new instance of Dilation2dBackpropFilter + * @see org.tensorflow.op.nn.Dilation2dBackpropFilter */ - public Dilation2dBackpropInput dilation2dBackpropInput(Operand input, + public Dilation2dBackpropFilter dilation2dBackpropFilter(Operand input, Operand filter, Operand outBackprop, List strides, List rates, String padding) { - return Dilation2dBackpropInput.create(scope, input, filter, outBackprop, strides, rates, padding); + return Dilation2dBackpropFilter.create(scope, input, filter, outBackprop, strides, rates, padding); } /** - * Builds an {@link NthElement} operation + * Builds an {@link FixedUnigramCandidateSampler} operation * - * @param input 1-D or higher with last dimension at least `n+1`. - * @param n 0-D. Position of sorted vector to select along the last dimension (along + * @param trueClasses A batch_size * num_true matrix, in which each row contains the + * @param numTrue Number of true labels per context. + * @param numSampled Number of candidates to randomly sample. + * @param unique If unique is true, we sample with rejection, so that all sampled + * @param rangeMax The sampler will sample integers from the interval [0, range_max). * @param options carries optional attributes values - * @return a new instance of NthElement - * @see org.tensorflow.op.nn.NthElement + * @return a new instance of FixedUnigramCandidateSampler + * @see org.tensorflow.op.nn.FixedUnigramCandidateSampler */ - public NthElement nthElement(Operand input, Operand n, - NthElement.Options... options) { - return NthElement.create(scope, input, n, options); + public FixedUnigramCandidateSampler fixedUnigramCandidateSampler(Operand trueClasses, + Long numTrue, Long numSampled, Boolean unique, Long rangeMax, + FixedUnigramCandidateSampler.Options... options) { + return FixedUnigramCandidateSampler.create(scope, trueClasses, numTrue, numSampled, unique, rangeMax, options); } /** - * Builds an {@link Conv2dBackpropInput} operation + * Builds an {@link Dilation2d} operation * - * @param inputSizes An integer vector representing the shape of `input`, - * @param filter 4-D with shape - * @param outBackprop 4-D with shape `[batch, out_height, out_width, out_channels]`. + * @param input 4-D with shape `[batch, in_height, in_width, depth]`. + * @param filter 3-D with shape `[filter_height, filter_width, depth]`. * @param strides The stride of the sliding window for each dimension of the input + * @param rates The input stride for atrous morphological dilation. Must be: * @param padding The type of padding algorithm to use. - * @param options carries optional attributes values - * @return a new instance of Conv2dBackpropInput - * @see org.tensorflow.op.nn.Conv2dBackpropInput + * @return a new instance of Dilation2d + * @see org.tensorflow.op.nn.Dilation2d */ - public Conv2dBackpropInput conv2dBackpropInput(Operand inputSizes, - Operand filter, Operand outBackprop, List strides, String padding, - Conv2dBackpropInput.Options... options) { - return Conv2dBackpropInput.create(scope, inputSizes, filter, outBackprop, strides, padding, options); + public Dilation2d dilation2d(Operand input, Operand filter, + List strides, List rates, String padding) { + return Dilation2d.create(scope, input, filter, strides, rates, padding); } /** @@ -1022,134 +1074,75 @@ public Conv2dBackpropInput conv2dBackpropInput(Operand Elu elu(Operand features) { + public Elu elu(Operand features) { return Elu.create(scope, features); } /** - * Builds an {@link LocalResponseNormalization} operation + * Builds an {@link MaxPool3d} operation * - * @param input 4-D. + * @param input Shape `[batch, depth, rows, cols, channels]` tensor to pool over. + * @param ksize 1-D tensor of length 5. The size of the window for each dimension of + * @param strides 1-D tensor of length 5. The stride of the sliding window for each + * @param padding The type of padding algorithm to use. * @param options carries optional attributes values - * @return a new instance of LocalResponseNormalization - * @see org.tensorflow.op.nn.LocalResponseNormalization + * @return a new instance of MaxPool3d + * @see org.tensorflow.op.nn.MaxPool3d */ - public LocalResponseNormalization localResponseNormalization( - Operand input, LocalResponseNormalization.Options... options) { - return LocalResponseNormalization.create(scope, input, options); + public MaxPool3d maxPool3d(Operand input, List ksize, + List strides, String padding, MaxPool3d.Options... options) { + return MaxPool3d.create(scope, input, ksize, strides, padding, options); } /** - * Builds an {@link DepthwiseConv2dNativeBackpropFilter} operation + * Builds an {@link Conv2dBackpropFilter} operation * - * @param input 4-D with shape based on `data_format`. For example, if + * @param input 4-D with shape `[batch, in_height, in_width, in_channels]`. * @param filterSizes An integer vector representing the tensor shape of `filter`, - * @param outBackprop 4-D with shape based on `data_format`. + * @param outBackprop 4-D with shape `[batch, out_height, out_width, out_channels]`. * @param strides The stride of the sliding window for each dimension of the input * @param padding The type of padding algorithm to use. * @param options carries optional attributes values - * @return a new instance of DepthwiseConv2dNativeBackpropFilter - * @see org.tensorflow.op.nn.DepthwiseConv2dNativeBackpropFilter - */ - public DepthwiseConv2dNativeBackpropFilter depthwiseConv2dNativeBackpropFilter( - Operand input, Operand filterSizes, Operand outBackprop, List strides, - String padding, DepthwiseConv2dNativeBackpropFilter.Options... options) { - return DepthwiseConv2dNativeBackpropFilter.create(scope, input, filterSizes, outBackprop, strides, padding, options); - } - - /** - * Builds an {@link SpaceToBatch} operation - * - * @param input 4-D with shape `[batch, height, width, depth]`. - * @param paddings 2-D tensor of non-negative integers with shape `[2, 2]`. It specifies - * @param blockSize - * @return a new instance of SpaceToBatch - * @see org.tensorflow.op.nn.SpaceToBatch - */ - public SpaceToBatch spaceToBatch(Operand input, Operand paddings, - Long blockSize) { - return SpaceToBatch.create(scope, input, paddings, blockSize); - } - - /** - * Builds an {@link FusedPadConv2d} operation - * - * @param input 4-D with shape `[batch, in_height, in_width, in_channels]`. - * @param paddings A two-column matrix specifying the padding sizes. The number of - * @param filter 4-D with shape - * @param mode - * @param strides 1-D of length 4. The stride of the sliding window for each dimension - * @param padding The type of padding algorithm to use. - * @return a new instance of FusedPadConv2d - * @see org.tensorflow.op.nn.FusedPadConv2d + * @return a new instance of Conv2dBackpropFilter + * @see org.tensorflow.op.nn.Conv2dBackpropFilter */ - public FusedPadConv2d fusedPadConv2d(Operand input, - Operand paddings, Operand filter, String mode, List strides, - String padding) { - return FusedPadConv2d.create(scope, input, paddings, filter, mode, strides, padding); + public Conv2dBackpropFilter conv2dBackpropFilter(Operand input, + Operand filterSizes, Operand outBackprop, List strides, String padding, + Conv2dBackpropFilter.Options... options) { + return Conv2dBackpropFilter.create(scope, input, filterSizes, outBackprop, strides, padding, options); } /** - * Builds an {@link MaxPoolGrad} operation + * Builds an {@link CudnnRnnCanonicalToParams} operation * - * @param origInput The original input tensor. - * @param origOutput The original output tensor. - * @param grad 4-D. Gradients w.r.t. the output of `max_pool`. - * @param ksize The size of the window for each dimension of the input tensor. - * @param strides The stride of the sliding window for each dimension of the - * @param padding The type of padding algorithm to use. + * @param numLayers + * @param numUnits + * @param inputSize + * @param weights + * @param biases * @param options carries optional attributes values - * @return a new instance of MaxPoolGrad - * @see org.tensorflow.op.nn.MaxPoolGrad - */ - public MaxPoolGrad maxPoolGrad(Operand origInput, Operand origOutput, - Operand grad, Operand ksize, Operand strides, String padding, - MaxPoolGrad.Options... options) { - return MaxPoolGrad.create(scope, origInput, origOutput, grad, ksize, strides, padding, options); - } - - /** - * Builds an {@link QuantizedBatchNormWithGlobalNormalization} operation - * - * @param t A 4D input Tensor. - * @param tMin The value represented by the lowest quantized input. - * @param tMax The value represented by the highest quantized input. - * @param m A 1D mean Tensor with size matching the last dimension of t. - * @param mMin The value represented by the lowest quantized mean. - * @param mMax The value represented by the highest quantized mean. - * @param v A 1D variance Tensor with size matching the last dimension of t. - * @param vMin The value represented by the lowest quantized variance. - * @param vMax The value represented by the highest quantized variance. - * @param beta A 1D beta Tensor with size matching the last dimension of t. - * @param betaMin The value represented by the lowest quantized offset. - * @param betaMax The value represented by the highest quantized offset. - * @param gamma A 1D gamma Tensor with size matching the last dimension of t. - * @param gammaMin The value represented by the lowest quantized gamma. - * @param gammaMax The value represented by the highest quantized gamma. - * @param outType - * @param varianceEpsilon A small float number to avoid dividing by 0. - * @param scaleAfterNormalization A bool indicating whether the resulted tensor - * @return a new instance of QuantizedBatchNormWithGlobalNormalization - * @see org.tensorflow.op.nn.QuantizedBatchNormWithGlobalNormalization + * @return a new instance of CudnnRnnCanonicalToParams + * @see org.tensorflow.op.nn.CudnnRnnCanonicalToParams */ - public QuantizedBatchNormWithGlobalNormalization quantizedBatchNormWithGlobalNormalization( - Operand t, Operand tMin, Operand tMax, Operand m, Operand mMin, - Operand mMax, Operand v, Operand vMin, Operand vMax, Operand beta, - Operand betaMin, Operand betaMax, Operand gamma, Operand gammaMin, - Operand gammaMax, Class outType, Float varianceEpsilon, - Boolean scaleAfterNormalization) { - return QuantizedBatchNormWithGlobalNormalization.create(scope, t, tMin, tMax, m, mMin, mMax, v, vMin, vMax, beta, betaMin, betaMax, gamma, gammaMin, gammaMax, outType, varianceEpsilon, scaleAfterNormalization); + public CudnnRnnCanonicalToParams cudnnRnnCanonicalToParams( + Operand numLayers, Operand numUnits, Operand inputSize, + Iterable> weights, Iterable> biases, + CudnnRnnCanonicalToParams.Options... options) { + return CudnnRnnCanonicalToParams.create(scope, numLayers, numUnits, inputSize, weights, biases, options); } /** - * Builds an {@link Selu} operation + * Builds an {@link CtcGreedyDecoder} operation * - * @param features - * @return a new instance of Selu - * @see org.tensorflow.op.nn.Selu + * @param inputs 3-D, shape: `(max_time x batch_size x num_classes)`, the logits. + * @param sequenceLength A vector containing sequence lengths, size `(batch_size)`. + * @param options carries optional attributes values + * @return a new instance of CtcGreedyDecoder + * @see org.tensorflow.op.nn.CtcGreedyDecoder */ - public Selu selu(Operand features) { - return Selu.create(scope, features); + public CtcGreedyDecoder ctcGreedyDecoder(Operand inputs, Operand sequenceLength, + CtcGreedyDecoder.Options... options) { + return CtcGreedyDecoder.create(scope, inputs, sequenceLength, options); } /** @@ -1166,55 +1159,67 @@ public Selu selu(Operand features) { * @return a new instance of FusedResizeAndPadConv2d * @see org.tensorflow.op.nn.FusedResizeAndPadConv2d */ - public FusedResizeAndPadConv2d fusedResizeAndPadConv2d(Operand input, - Operand size, Operand paddings, Operand filter, String mode, + public FusedResizeAndPadConv2d fusedResizeAndPadConv2d(Operand input, + Operand size, Operand paddings, Operand filter, String mode, List strides, String padding, FusedResizeAndPadConv2d.Options... options) { return FusedResizeAndPadConv2d.create(scope, input, size, paddings, filter, mode, strides, padding, options); } /** - * Builds an {@link MaxPool3d} operation + * Builds an {@link FractionalMaxPool} operation * - * @param input Shape `[batch, depth, rows, cols, channels]` tensor to pool over. - * @param ksize 1-D tensor of length 5. The size of the window for each dimension of - * @param strides 1-D tensor of length 5. The stride of the sliding window for each - * @param padding The type of padding algorithm to use. + * @param value 4-D with shape `[batch, height, width, channels]`. + * @param poolingRatio Pooling ratio for each dimension of `value`, currently only * @param options carries optional attributes values - * @return a new instance of MaxPool3d - * @see org.tensorflow.op.nn.MaxPool3d + * @return a new instance of FractionalMaxPool + * @see org.tensorflow.op.nn.FractionalMaxPool */ - public MaxPool3d maxPool3d(Operand input, List ksize, - List strides, String padding, MaxPool3d.Options... options) { - return MaxPool3d.create(scope, input, ksize, strides, padding, options); + public FractionalMaxPool fractionalMaxPool(Operand value, + List poolingRatio, FractionalMaxPool.Options... options) { + return FractionalMaxPool.create(scope, value, poolingRatio, options); } /** - * Builds an {@link CtcGreedyDecoder} operation + * Builds an {@link FusedBatchNormGrad} operation * - * @param inputs 3-D, shape: `(max_time x batch_size x num_classes)`, the logits. - * @param sequenceLength A vector containing sequence lengths, size `(batch_size)`. + * @param yBackprop A 4D Tensor for the gradient with respect to y. + * @param x A 4D Tensor for input data. + * @param scale A 1D Tensor for scaling factor, to scale the normalized x. + * @param reserveSpace1 When is_training is True, a 1D Tensor for the computed batch + * @param reserveSpace2 When is_training is True, a 1D Tensor for the computed batch * @param options carries optional attributes values - * @return a new instance of CtcGreedyDecoder - * @see org.tensorflow.op.nn.CtcGreedyDecoder + * @return a new instance of FusedBatchNormGrad + * @see org.tensorflow.op.nn.FusedBatchNormGrad */ - public CtcGreedyDecoder ctcGreedyDecoder(Operand inputs, Operand sequenceLength, - CtcGreedyDecoder.Options... options) { - return CtcGreedyDecoder.create(scope, inputs, sequenceLength, options); + public FusedBatchNormGrad fusedBatchNormGrad( + Operand yBackprop, Operand x, Operand scale, Operand reserveSpace1, + Operand reserveSpace2, FusedBatchNormGrad.Options... options) { + return FusedBatchNormGrad.create(scope, yBackprop, x, scale, reserveSpace1, reserveSpace2, options); } /** - * Builds an {@link QuantizedRelu6} operation + * Builds an {@link Softsign} operation * * @param features - * @param minFeatures The float value that the lowest quantized value represents. - * @param maxFeatures The float value that the highest quantized value represents. - * @param outType - * @return a new instance of QuantizedRelu6 - * @see org.tensorflow.op.nn.QuantizedRelu6 + * @return a new instance of Softsign + * @see org.tensorflow.op.nn.Softsign */ - public QuantizedRelu6 quantizedRelu6(Operand features, Operand minFeatures, - Operand maxFeatures, Class outType) { - return QuantizedRelu6.create(scope, features, minFeatures, maxFeatures, outType); + public Softsign softsign(Operand features) { + return Softsign.create(scope, features); + } + + /** + * Builds an {@link SpaceToBatch} operation + * + * @param input 4-D with shape `[batch, height, width, depth]`. + * @param paddings 2-D tensor of non-negative integers with shape `[2, 2]`. It specifies + * @param blockSize + * @return a new instance of SpaceToBatch + * @see org.tensorflow.op.nn.SpaceToBatch + */ + public SpaceToBatch spaceToBatch(Operand input, Operand paddings, + Long blockSize) { + return SpaceToBatch.create(scope, input, paddings, blockSize); } /** diff --git a/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/Ops.java b/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/Ops.java index 49afedf3717..4da3667b168 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/Ops.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/Ops.java @@ -1,15 +1,11 @@ package org.tensorflow.op; -import java.nio.ByteBuffer; -import java.nio.DoubleBuffer; -import java.nio.FloatBuffer; -import java.nio.IntBuffer; -import java.nio.LongBuffer; -import java.nio.charset.Charset; import java.util.List; +import org.tensorflow.DataType; +import org.tensorflow.EagerSession; import org.tensorflow.ExecutionEnvironment; import org.tensorflow.Operand; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.core.Abort; import org.tensorflow.op.core.All; import org.tensorflow.op.core.Any; @@ -37,7 +33,6 @@ import org.tensorflow.op.core.ClipByValue; import org.tensorflow.op.core.CombinedNonMaxSuppression; import org.tensorflow.op.core.Concat; -import org.tensorflow.op.core.Constant; import org.tensorflow.op.core.ConsumeMutexLock; import org.tensorflow.op.core.ControlTrigger; import org.tensorflow.op.core.CountUpTo; @@ -67,7 +62,6 @@ import org.tensorflow.op.core.GatherNd; import org.tensorflow.op.core.GetSessionHandle; import org.tensorflow.op.core.GetSessionTensor; -import org.tensorflow.op.core.Gradients; import org.tensorflow.op.core.GuaranteeConst; import org.tensorflow.op.core.HashTable; import org.tensorflow.op.core.HistogramFixedWidth; @@ -262,8 +256,14 @@ import org.tensorflow.op.core.VariableShape; import org.tensorflow.op.core.Where; import org.tensorflow.op.core.Where3; -import org.tensorflow.op.core.Zeros; +import org.tensorflow.op.core.WriteKafka; import org.tensorflow.op.core.ZerosLike; +import org.tensorflow.types.TBool; +import org.tensorflow.types.TFloat; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.TInt64; +import org.tensorflow.types.TString; +import org.tensorflow.types.family.TNumber; /** * An API for building operations as {@link Op Op}s @@ -282,13 +282,13 @@ * Operand four = ops.constant(4); * // Most builders are found within a group, and accept * // Operand types as operands - * Operand nine = ops.math().add(four, ops.constant(5)); + * Operand nine = ops.math.add(four, ops.constant(5)); * // Multi-result operations however offer methods to * // select a particular result for use. * Operand result = - * ops.math().add(ops.array().unique(s, a).y(), b); + * ops.math.add(ops.unique(s, a).y(), b); * // Optional attributes - * ops.math().matMul(a, b, MatMul.transposeA(true)); + * ops.linalg.matMul(a, b, MatMul.transposeA(true)); * // Naming operators * ops.withName("foo").constant(5); // name "foo" * // Names can exist in a hierarchy @@ -328,10 +328,10 @@ public final class Ops { public final SignalOps signal; - public final QuantizationOps quantization; - public final TrainOps train; + public final QuantizationOps quantization; + private Ops(Scope scope) { this.scope = scope; nn = new NnOps(scope); @@ -348,34 +348,8 @@ private Ops(Scope scope) { math = new MathOps(scope); audio = new AudioOps(scope); signal = new SignalOps(scope); - quantization = new QuantizationOps(scope); train = new TrainOps(scope); - } - - /** - * Builds an {@link RemoteFusedGraphExecute} operation - * - * @param inputs Arbitrary number of tensors with arbitrary data types - * @param Toutputs - * @param serializedRemoteFusedGraphExecuteInfo Serialized protocol buffer - * @return a new instance of RemoteFusedGraphExecute - * @see org.tensorflow.op.core.RemoteFusedGraphExecute - */ - public RemoteFusedGraphExecute remoteFusedGraphExecute(Iterable> inputs, - List> Toutputs, String serializedRemoteFusedGraphExecuteInfo) { - return RemoteFusedGraphExecute.create(scope, inputs, Toutputs, serializedRemoteFusedGraphExecuteInfo); - } - - /** - * Builds an {@link ReadVariableOp} operation - * - * @param resource handle to the resource in which to store the variable. - * @param dtype the dtype of the value. - * @return a new instance of ReadVariableOp - * @see org.tensorflow.op.core.ReadVariableOp - */ - public ReadVariableOp readVariableOp(Operand resource, Class dtype) { - return ReadVariableOp.create(scope, resource, dtype); + quantization = new QuantizationOps(scope); } /** @@ -390,193 +364,137 @@ public MutexLock mutexLock(Operand mutex) { } /** - * Builds an {@link OrderedMapUnstageNoKey} operation - * - * @param indices - * @param dtypes - * @param options carries optional attributes values - * @return a new instance of OrderedMapUnstageNoKey - * @see org.tensorflow.op.core.OrderedMapUnstageNoKey - */ - public OrderedMapUnstageNoKey orderedMapUnstageNoKey(Operand indices, - List> dtypes, OrderedMapUnstageNoKey.Options... options) { - return OrderedMapUnstageNoKey.create(scope, indices, dtypes, options); - } - - /** - * Builds an {@link ResourceScatterAdd} operation - * - * @param resource Should be from a `Variable` node. - * @param indices A tensor of indices into the first dimension of `ref`. - * @param updates A tensor of updated values to add to `ref`. - * @return a new instance of ResourceScatterAdd - * @see org.tensorflow.op.core.ResourceScatterAdd - */ - public ResourceScatterAdd resourceScatterAdd(Operand resource, - Operand indices, Operand updates) { - return ResourceScatterAdd.create(scope, resource, indices, updates); - } - - /** - * Builds an {@link TensorListFromTensor} operation + * Builds an {@link InplaceAdd} operation * - * @param tensor - * @param elementShape - * @return a new instance of TensorListFromTensor - * @see org.tensorflow.op.core.TensorListFromTensor + * @param x A `Tensor` of type T. + * @param i A vector. Indices into the left-most dimension of `x`. + * @param v A `Tensor` of type T. Same dimension sizes as x except the first dimension, which must be the same as i's size. + * @return a new instance of InplaceAdd + * @see org.tensorflow.op.core.InplaceAdd */ - public TensorListFromTensor tensorListFromTensor(Operand tensor, - Operand elementShape) { - return TensorListFromTensor.create(scope, tensor, elementShape); + public InplaceAdd inplaceAdd(Operand x, Operand i, Operand v) { + return InplaceAdd.create(scope, x, i, v); } /** - * Builds an {@link Constant} operation + * Builds an {@link Variable} operation * - * @param shape the tensor shape. - * @param data a buffer containing the tensor data. - * @return a float constant - * @throws IllegalArgumentException If the tensor shape is not compatible with the buffer - * @see org.tensorflow.op.core.Constant + * @param shape The shape of the variable tensor. + * @param dtype The type of elements in the variable tensor. + * @param options carries optional attributes values + * @return a new instance of Variable + * @see org.tensorflow.op.core.Variable */ - public Constant constant(long[] shape, FloatBuffer data) { - return Constant.create(scope, shape, data); + public Variable variable(Shape shape, DataType dtype, Variable.Options... options) { + return Variable.create(scope, shape, dtype, options); } /** - * Builds an {@link MutableDenseHashTable} operation + * Builds an {@link StringUpper} operation * - * @param emptyKey The key used to represent empty key buckets internally. Must not - * @param deletedKey - * @param valueDtype Type of the table values. + * @param input * @param options carries optional attributes values - * @return a new instance of MutableDenseHashTable - * @see org.tensorflow.op.core.MutableDenseHashTable + * @return a new instance of StringUpper + * @see org.tensorflow.op.core.StringUpper */ - public MutableDenseHashTable mutableDenseHashTable(Operand emptyKey, - Operand deletedKey, Class valueDtype, MutableDenseHashTable.Options... options) { - return MutableDenseHashTable.create(scope, emptyKey, deletedKey, valueDtype, options); + public StringUpper stringUpper(Operand input, StringUpper.Options... options) { + return StringUpper.create(scope, input, options); } /** - * Builds an {@link Constant} operation + * Builds an {@link DrawBoundingBoxesV2} operation * - * @param data The value to put into the new constant. - * @return a float constant - * @see org.tensorflow.op.core.Constant + * @param images 4-D with shape `[batch, height, width, depth]`. A batch of images. + * @param boxes 3-D with shape `[batch, num_bounding_boxes, 4]` containing bounding + * @param colors 2-D. A list of RGBA colors to cycle through for the boxes. + * @return a new instance of DrawBoundingBoxesV2 + * @see org.tensorflow.op.core.DrawBoundingBoxesV2 */ - public Constant constant(float data) { - return Constant.create(scope, data); + public DrawBoundingBoxesV2 drawBoundingBoxesV2(Operand images, + Operand boxes, Operand colors) { + return DrawBoundingBoxesV2.create(scope, images, boxes, colors); } /** - * Builds an {@link TensorListConcatV2} operation + * Builds an {@link TensorListScatter} operation * - * @param inputHandle + * @param tensor + * @param indices * @param elementShape - * @param leadingDims - * @param elementDtype - * @return a new instance of TensorListConcatV2 - * @see org.tensorflow.op.core.TensorListConcatV2 + * @return a new instance of TensorListScatter + * @see org.tensorflow.op.core.TensorListScatter */ - public TensorListConcatV2 tensorListConcatV2(Operand inputHandle, - Operand elementShape, Operand leadingDims, Class elementDtype) { - return TensorListConcatV2.create(scope, inputHandle, elementShape, leadingDims, elementDtype); + public TensorListScatter tensorListScatter(Operand tensor, + Operand indices, Operand elementShape) { + return TensorListScatter.create(scope, tensor, indices, elementShape); } /** - * Builds an {@link ReduceAny} operation + * Builds an {@link ReduceProd} operation * * @param input The tensor to reduce. * @param axis The dimensions to reduce. Must be in the range * @param options carries optional attributes values - * @return a new instance of ReduceAny - * @see org.tensorflow.op.core.ReduceAny + * @return a new instance of ReduceProd + * @see org.tensorflow.op.core.ReduceProd */ - public ReduceAny reduceAny(Operand input, Operand axis, - ReduceAny.Options... options) { - return ReduceAny.create(scope, input, axis, options); + public ReduceProd reduceProd(Operand input, Operand axis, + ReduceProd.Options... options) { + return ReduceProd.create(scope, input, axis, options); } /** - * Builds an {@link CudnnRNNCanonicalToParamsV2} operation + * Builds an {@link ResourceScatterAdd} operation * - * @param numLayers - * @param numUnits - * @param inputSize - * @param weights - * @param biases - * @param options carries optional attributes values - * @return a new instance of CudnnRNNCanonicalToParamsV2 - * @see org.tensorflow.op.core.CudnnRNNCanonicalToParamsV2 + * @param resource Should be from a `Variable` node. + * @param indices A tensor of indices into the first dimension of `ref`. + * @param updates A tensor of updated values to add to `ref`. + * @return a new instance of ResourceScatterAdd + * @see org.tensorflow.op.core.ResourceScatterAdd */ - public CudnnRNNCanonicalToParamsV2 cudnnRNNCanonicalToParamsV2( - Operand numLayers, Operand numUnits, Operand inputSize, - Iterable> weights, Iterable> biases, - CudnnRNNCanonicalToParamsV2.Options... options) { - return CudnnRNNCanonicalToParamsV2.create(scope, numLayers, numUnits, inputSize, weights, biases, options); + public ResourceScatterAdd resourceScatterAdd(Operand resource, + Operand indices, Operand updates) { + return ResourceScatterAdd.create(scope, resource, indices, updates); } /** - * Builds an {@link StatefulStandardNormalV2} operation + * Builds an {@link TensorArraySize} operation * - * @param resource The handle of the resource variable that stores the state of the RNG. - * @param algorithm The RNG algorithm. - * @param shape The shape of the output tensor. - * @return a new instance of StatefulStandardNormalV2 - * @see org.tensorflow.op.core.StatefulStandardNormalV2 + * @param handle The handle to a TensorArray (output of TensorArray or TensorArrayGrad). + * @param flowIn A float scalar that enforces proper chaining of operations. + * @return a new instance of TensorArraySize + * @see org.tensorflow.op.core.TensorArraySize */ - public StatefulStandardNormalV2 statefulStandardNormalV2(Operand resource, - Operand algorithm, Operand shape) { - return StatefulStandardNormalV2.create(scope, resource, algorithm, shape); + public TensorArraySize tensorArraySize(Operand handle, Operand flowIn) { + return TensorArraySize.create(scope, handle, flowIn); } /** - * Builds an {@link OrderedMapIncompleteSize} operation + * Builds an {@link EuclideanNorm} operation * - * @param dtypes + * @param input The tensor to reduce. + * @param axis The dimensions to reduce. Must be in the range * @param options carries optional attributes values - * @return a new instance of OrderedMapIncompleteSize - * @see org.tensorflow.op.core.OrderedMapIncompleteSize - */ - public OrderedMapIncompleteSize orderedMapIncompleteSize(List> dtypes, - OrderedMapIncompleteSize.Options... options) { - return OrderedMapIncompleteSize.create(scope, dtypes, options); - } - - /** - * Builds an {@link TensorListResize} operation - * - * @param inputHandle - * @param size - * @return a new instance of TensorListResize - * @see org.tensorflow.op.core.TensorListResize - */ - public TensorListResize tensorListResize(Operand inputHandle, Operand size) { - return TensorListResize.create(scope, inputHandle, size); - } - - /** - * Builds an {@link Constant} operation - * - * @param data An array containing the values to put into the new constant. String elements are - * @see org.tensorflow.op.core.Constant + * @return a new instance of EuclideanNorm + * @see org.tensorflow.op.core.EuclideanNorm */ - public Constant constant(byte[] data) { - return Constant.create(scope, data); + public EuclideanNorm euclideanNorm(Operand input, Operand axis, + EuclideanNorm.Options... options) { + return EuclideanNorm.create(scope, input, axis, options); } /** - * Builds an {@link InplaceAdd} operation + * Builds an {@link TensorListSplit} operation * - * @param x A `Tensor` of type T. - * @param i A vector. Indices into the left-most dimension of `x`. - * @param v A `Tensor` of type T. Same dimension sizes as x except the first dimension, which must be the same as i's size. - * @return a new instance of InplaceAdd - * @see org.tensorflow.op.core.InplaceAdd + * @param tensor + * @param elementShape + * @param lengths + * @return a new instance of TensorListSplit + * @see org.tensorflow.op.core.TensorListSplit */ - public InplaceAdd inplaceAdd(Operand x, Operand i, Operand v) { - return InplaceAdd.create(scope, x, i, v); + public TensorListSplit tensorListSplit(Operand tensor, + Operand elementShape, Operand lengths) { + return TensorListSplit.create(scope, tensor, elementShape, lengths); } /** @@ -588,470 +506,449 @@ public InplaceAdd inplaceAdd(Operand x, Operand i, Operand * @return a new instance of All * @see org.tensorflow.op.core.All */ - public All all(Operand input, Operand axis, + public All all(Operand input, Operand axis, All.Options... options) { return All.create(scope, input, axis, options); } /** - * Builds an {@link QuantizedReshape} operation + * Builds an {@link FusedBatchNormGradV3} operation * - * @param tensor - * @param shape Defines the shape of the output tensor. - * @param inputMin The minimum value of the input. - * @param inputMax The maximum value of the input. - * @return a new instance of QuantizedReshape - * @see org.tensorflow.op.core.QuantizedReshape + * @param yBackprop A 4D Tensor for the gradient with respect to y. + * @param x A 4D Tensor for input data. + * @param scale A 1D Tensor for scaling factor, to scale the normalized x. + * @param reserveSpace1 When is_training is True, a 1D Tensor for the computed batch + * @param reserveSpace2 When is_training is True, a 1D Tensor for the computed batch + * @param reserveSpace3 When is_training is True, a 1D Tensor for some intermediate results to be reused + * @param options carries optional attributes values + * @return a new instance of FusedBatchNormGradV3 + * @see org.tensorflow.op.core.FusedBatchNormGradV3 */ - public QuantizedReshape quantizedReshape(Operand tensor, - Operand shape, Operand inputMin, Operand inputMax) { - return QuantizedReshape.create(scope, tensor, shape, inputMin, inputMax); + public FusedBatchNormGradV3 fusedBatchNormGradV3( + Operand yBackprop, Operand x, Operand scale, Operand reserveSpace1, + Operand reserveSpace2, Operand reserveSpace3, FusedBatchNormGradV3.Options... options) { + return FusedBatchNormGradV3.create(scope, yBackprop, x, scale, reserveSpace1, reserveSpace2, reserveSpace3, options); } /** - * Builds an {@link Bucketize} operation + * Builds an {@link TensorListPushBackBatch} operation * - * @param input Any shape of Tensor contains with int or float type. - * @param boundaries A sorted list of floats gives the boundary of the buckets. - * @return a new instance of Bucketize - * @see org.tensorflow.op.core.Bucketize + * @param inputHandles + * @param tensor + * @return a new instance of TensorListPushBackBatch + * @see org.tensorflow.op.core.TensorListPushBackBatch */ - public Bucketize bucketize(Operand input, List boundaries) { - return Bucketize.create(scope, input, boundaries); + public TensorListPushBackBatch tensorListPushBackBatch(Operand inputHandles, + Operand tensor) { + return TensorListPushBackBatch.create(scope, inputHandles, tensor); } /** - * Builds an {@link BatchToSpaceNd} operation + * Builds an {@link Shape} operation * - * @param input N-D with shape `input_shape = [batch] + spatial_shape + remaining_shape`, - * @param blockShape 1-D with shape `[M]`, all values must be >= 1. - * @param crops 2-D with shape `[M, 2]`, all values must be >= 0. - * @return a new instance of BatchToSpaceNd - * @see org.tensorflow.op.core.BatchToSpaceNd + * @param input + * @return a new instance of Shape + * @see org.tensorflow.op.core.Shape */ - public BatchToSpaceNd batchToSpaceNd(Operand input, - Operand blockShape, Operand crops) { - return BatchToSpaceNd.create(scope, input, blockShape, crops); + public org.tensorflow.op.core.Shape shape(Operand input) { + return org.tensorflow.op.core.Shape.create(scope, input); } /** - * Builds an {@link Constant} operation + * Builds an {@link AssignSubVariableOp} operation * - * @param data An array containing the values to put into the new constant. The dimensions of the - * @see org.tensorflow.op.core.Constant + * @param resource handle to the resource in which to store the variable. + * @param value the value by which the variable will be incremented. + * @return a new instance of AssignSubVariableOp + * @see org.tensorflow.op.core.AssignSubVariableOp */ - public Constant constant(int[][][] data) { - return Constant.create(scope, data); + public AssignSubVariableOp assignSubVariableOp(Operand resource, Operand value) { + return AssignSubVariableOp.create(scope, resource, value); } /** - * Builds an {@link Slice} operation + * Builds an {@link ScatterAdd} operation * - * @param input - * @param begin begin[i] specifies the offset into the 'i'th dimension of - * @param size size[i] specifies the number of elements of the 'i'th dimension - * @return a new instance of Slice - * @see org.tensorflow.op.core.Slice - */ - public Slice slice(Operand input, Operand begin, Operand size) { - return Slice.create(scope, input, begin, size); + * @param ref Should be from a `Variable` node. + * @param indices A tensor of indices into the first dimension of `ref`. + * @param updates A tensor of updated values to add to `ref`. + * @param options carries optional attributes values + * @return a new instance of ScatterAdd + * @see org.tensorflow.op.core.ScatterAdd + */ + public ScatterAdd scatterAdd(Operand ref, Operand indices, + Operand updates, ScatterAdd.Options... options) { + return ScatterAdd.create(scope, ref, indices, updates, options); } /** - * Builds an {@link DynamicStitch} operation + * Builds an {@link Gather} operation * - * @param indices - * @param data - * @return a new instance of DynamicStitch - * @see org.tensorflow.op.core.DynamicStitch + * @param params The tensor from which to gather values. Must be at least rank + * @param indices Index tensor. Must be in range `[0, params.shape[axis])`. + * @param axis The axis in `params` to gather `indices` from. Defaults to the first + * @param options carries optional attributes values + * @return a new instance of Gather + * @see org.tensorflow.op.core.Gather */ - public DynamicStitch dynamicStitch(Iterable> indices, - Iterable> data) { - return DynamicStitch.create(scope, indices, data); + public Gather gather(Operand params, + Operand indices, Operand axis, Gather.Options... options) { + return Gather.create(scope, params, indices, axis, options); } /** - * Builds an {@link VarHandleOp} operation + * Builds an {@link StageClear} operation * - * @param dtype the type of this variable. Must agree with the dtypes - * @param shape The (possibly partially specified) shape of this variable. + * @param dtypes * @param options carries optional attributes values - * @return a new instance of VarHandleOp - * @see org.tensorflow.op.core.VarHandleOp + * @return a new instance of StageClear + * @see org.tensorflow.op.core.StageClear */ - public VarHandleOp varHandleOp(Class dtype, Shape shape, VarHandleOp.Options... options) { - return VarHandleOp.create(scope, dtype, shape, options); + public StageClear stageClear(List> dtypes, StageClear.Options... options) { + return StageClear.create(scope, dtypes, options); } /** - * Builds an {@link ResourceScatterMin} operation + * Builds an {@link ResourceStridedSliceAssign} operation * - * @param resource Should be from a `Variable` node. - * @param indices A tensor of indices into the first dimension of `ref`. - * @param updates A tensor of updated values to add to `ref`. - * @return a new instance of ResourceScatterMin - * @see org.tensorflow.op.core.ResourceScatterMin + * @param ref + * @param begin + * @param end + * @param strides + * @param value + * @param options carries optional attributes values + * @return a new instance of ResourceStridedSliceAssign + * @see org.tensorflow.op.core.ResourceStridedSliceAssign */ - public ResourceScatterMin resourceScatterMin(Operand resource, - Operand indices, Operand updates) { - return ResourceScatterMin.create(scope, resource, indices, updates); + public ResourceStridedSliceAssign resourceStridedSliceAssign( + Operand ref, Operand begin, Operand end, Operand strides, Operand value, + ResourceStridedSliceAssign.Options... options) { + return ResourceStridedSliceAssign.create(scope, ref, begin, end, strides, value, options); } /** - * Builds an {@link MapIncompleteSize} operation + * Builds an {@link TensorArrayPack} operation * - * @param dtypes + * @param handle + * @param flowIn + * @param dtype * @param options carries optional attributes values - * @return a new instance of MapIncompleteSize - * @see org.tensorflow.op.core.MapIncompleteSize + * @return a new instance of TensorArrayPack + * @see org.tensorflow.op.core.TensorArrayPack */ - public MapIncompleteSize mapIncompleteSize(List> dtypes, - MapIncompleteSize.Options... options) { - return MapIncompleteSize.create(scope, dtypes, options); + public TensorArrayPack tensorArrayPack(Operand handle, Operand flowIn, + DataType dtype, TensorArrayPack.Options... options) { + return TensorArrayPack.create(scope, handle, flowIn, dtype, options); } /** - * Builds an {@link TensorArrayRead} operation + * Builds an {@link LinSpace} operation * - * @param handle The handle to a TensorArray. - * @param index - * @param flowIn A float scalar that enforces proper chaining of operations. - * @param dtype The type of the elem that is returned. - * @return a new instance of TensorArrayRead - * @see org.tensorflow.op.core.TensorArrayRead + * @param start 0-D tensor. First entry in the range. + * @param stop 0-D tensor. Last entry in the range. + * @param num 0-D tensor. Number of values to generate. + * @return a new instance of LinSpace + * @see org.tensorflow.op.core.LinSpace */ - public TensorArrayRead tensorArrayRead(Operand handle, Operand index, - Operand flowIn, Class dtype) { - return TensorArrayRead.create(scope, handle, index, flowIn, dtype); + public LinSpace linSpace(Operand start, + Operand stop, Operand num) { + return LinSpace.create(scope, start, stop, num); } /** - * Builds an {@link Unique} operation + * Builds an {@link StringLower} operation * - * @param x A `Tensor`. - * @param axis A `Tensor` of type `int32` (default: None). The axis of the Tensor to - * @param outIdx - * @return a new instance of Unique - * @see org.tensorflow.op.core.Unique + * @param input + * @param options carries optional attributes values + * @return a new instance of StringLower + * @see org.tensorflow.op.core.StringLower */ - public Unique unique(Operand x, Operand axis, - Class outIdx) { - return Unique.create(scope, x, axis, outIdx); + public StringLower stringLower(Operand input, StringLower.Options... options) { + return StringLower.create(scope, input, options); } /** - * Builds an {@link OneHot} operation + * Builds an {@link MatrixDiagPartV2} operation * - * @param indices A tensor of indices. - * @param depth A scalar defining the depth of the one hot dimension. - * @param onValue A scalar defining the value to fill in output when `indices[j] = i`. - * @param offValue A scalar defining the value to fill in output when `indices[j] != i`. - * @param options carries optional attributes values - * @return a new instance of OneHot - * @see org.tensorflow.op.core.OneHot + * @param input Rank `r` tensor where `r >= 2`. + * @param k Diagonal offset(s). Positive value means superdiagonal, 0 refers to the main + * @param paddingValue The value to fill the area outside the specified diagonal band with. + * @return a new instance of MatrixDiagPartV2 + * @see org.tensorflow.op.core.MatrixDiagPartV2 */ - public OneHot oneHot(Operand indices, Operand depth, - Operand onValue, Operand offValue, OneHot.Options... options) { - return OneHot.create(scope, indices, depth, onValue, offValue, options); + public MatrixDiagPartV2 matrixDiagPartV2(Operand input, Operand k, + Operand paddingValue) { + return MatrixDiagPartV2.create(scope, input, k, paddingValue); } /** - * Builds an {@link Constant} operation + * Builds an {@link BarrierIncompleteSize} operation * - * @param data An array containing the values to put into the new constant. The dimensions of the - * @see org.tensorflow.op.core.Constant + * @param handle The handle to a barrier. + * @return a new instance of BarrierIncompleteSize + * @see org.tensorflow.op.core.BarrierIncompleteSize */ - public Constant constant(boolean[][][][][][] data) { - return Constant.create(scope, data); + public BarrierIncompleteSize barrierIncompleteSize(Operand handle) { + return BarrierIncompleteSize.create(scope, handle); } /** - * Builds an {@link TensorListPushBackBatch} operation + * Builds an {@link QuantizedReshape} operation * - * @param inputHandles * @param tensor - * @return a new instance of TensorListPushBackBatch - * @see org.tensorflow.op.core.TensorListPushBackBatch + * @param shape Defines the shape of the output tensor. + * @param inputMin The minimum value of the input. + * @param inputMax The maximum value of the input. + * @return a new instance of QuantizedReshape + * @see org.tensorflow.op.core.QuantizedReshape */ - public TensorListPushBackBatch tensorListPushBackBatch(Operand inputHandles, - Operand tensor) { - return TensorListPushBackBatch.create(scope, inputHandles, tensor); + public QuantizedReshape quantizedReshape(Operand tensor, + Operand shape, Operand inputMin, Operand inputMax) { + return QuantizedReshape.create(scope, tensor, shape, inputMin, inputMax); } /** - * Builds an {@link ResourceScatterNdUpdate} operation + * Builds an {@link StridedSliceGrad} operation * - * @param ref A resource handle. Must be from a VarHandleOp. - * @param indices A Tensor. Must be one of the following types: int32, int64. - * @param updates A Tensor. Must have the same type as ref. A tensor of updated + * @param shape + * @param begin + * @param end + * @param strides + * @param dy * @param options carries optional attributes values - * @return a new instance of ResourceScatterNdUpdate - * @see org.tensorflow.op.core.ResourceScatterNdUpdate + * @return a new instance of StridedSliceGrad + * @see org.tensorflow.op.core.StridedSliceGrad */ - public ResourceScatterNdUpdate resourceScatterNdUpdate(Operand ref, - Operand indices, Operand updates, ResourceScatterNdUpdate.Options... options) { - return ResourceScatterNdUpdate.create(scope, ref, indices, updates, options); + public StridedSliceGrad stridedSliceGrad(Operand shape, + Operand begin, Operand end, Operand strides, Operand dy, + StridedSliceGrad.Options... options) { + return StridedSliceGrad.create(scope, shape, begin, end, strides, dy, options); } /** - * Builds an {@link DeleteSessionTensor} operation + * Builds an {@link StridedSlice} operation * - * @param handle The handle for a tensor stored in the session state. - * @return a new instance of DeleteSessionTensor - * @see org.tensorflow.op.core.DeleteSessionTensor + * @param input + * @param begin `begin[k]` specifies the offset into the `k`th range specification. + * @param end `end[i]` is like `begin` with the exception that `end_mask` is + * @param strides `strides[i]` specifies the increment in the `i`th specification + * @param options carries optional attributes values + * @return a new instance of StridedSlice + * @see org.tensorflow.op.core.StridedSlice */ - public DeleteSessionTensor deleteSessionTensor(Operand handle) { - return DeleteSessionTensor.create(scope, handle); + public StridedSlice stridedSlice(Operand input, Operand begin, + Operand end, Operand strides, StridedSlice.Options... options) { + return StridedSlice.create(scope, input, begin, end, strides, options); } /** - * Builds an {@link MatrixDiagPartV2} operation + * Builds an {@link Assign} operation * - * @param input Rank `r` tensor where `r >= 2`. - * @param k Diagonal offset(s). Positive value means superdiagonal, 0 refers to the main - * @param paddingValue The value to fill the area outside the specified diagonal band with. - * @return a new instance of MatrixDiagPartV2 - * @see org.tensorflow.op.core.MatrixDiagPartV2 + * @param ref Should be from a `Variable` node. May be uninitialized. + * @param value The value to be assigned to the variable. + * @param options carries optional attributes values + * @return a new instance of Assign + * @see org.tensorflow.op.core.Assign */ - public MatrixDiagPartV2 matrixDiagPartV2(Operand input, Operand k, - Operand paddingValue) { - return MatrixDiagPartV2.create(scope, input, k, paddingValue); + public Assign assign(Operand ref, Operand value, Assign.Options... options) { + return Assign.create(scope, ref, value, options); } /** - * Builds an {@link AssignSubVariableOp} operation + * Builds an {@link ScatterMul} operation * - * @param resource handle to the resource in which to store the variable. - * @param value the value by which the variable will be incremented. - * @return a new instance of AssignSubVariableOp - * @see org.tensorflow.op.core.AssignSubVariableOp + * @param ref Should be from a `Variable` node. + * @param indices A tensor of indices into the first dimension of `ref`. + * @param updates A tensor of updated values to multiply to `ref`. + * @param options carries optional attributes values + * @return a new instance of ScatterMul + * @see org.tensorflow.op.core.ScatterMul */ - public AssignSubVariableOp assignSubVariableOp(Operand resource, Operand value) { - return AssignSubVariableOp.create(scope, resource, value); + public ScatterMul scatterMul(Operand ref, Operand indices, + Operand updates, ScatterMul.Options... options) { + return ScatterMul.create(scope, ref, indices, updates, options); } /** - * Builds an {@link ReduceProd} operation + * Builds an {@link OrderedMapPeek} operation * - * @param input The tensor to reduce. - * @param axis The dimensions to reduce. Must be in the range + * @param key + * @param indices + * @param dtypes * @param options carries optional attributes values - * @return a new instance of ReduceProd - * @see org.tensorflow.op.core.ReduceProd + * @return a new instance of OrderedMapPeek + * @see org.tensorflow.op.core.OrderedMapPeek */ - public ReduceProd reduceProd(Operand input, Operand axis, - ReduceProd.Options... options) { - return ReduceProd.create(scope, input, axis, options); + public OrderedMapPeek orderedMapPeek(Operand key, Operand indices, + List> dtypes, OrderedMapPeek.Options... options) { + return OrderedMapPeek.create(scope, key, indices, dtypes, options); } /** - * Builds an {@link Constant} operation + * Builds an {@link NextAfter} operation * - * @param data An array containing the values to put into the new constant. The dimensions of the - * @see org.tensorflow.op.core.Constant + * @param x1 + * @param x2 + * @return a new instance of NextAfter + * @see org.tensorflow.op.core.NextAfter */ - public Constant constant(int[] data) { - return Constant.create(scope, data); + public NextAfter nextAfter(Operand x1, Operand x2) { + return NextAfter.create(scope, x1, x2); } /** - * Builds an {@link Unstage} operation + * Builds an {@link TensorArrayRead} operation * - * @param dtypes - * @param options carries optional attributes values - * @return a new instance of Unstage - * @see org.tensorflow.op.core.Unstage + * @param handle The handle to a TensorArray. + * @param index + * @param flowIn A float scalar that enforces proper chaining of operations. + * @param dtype The type of the elem that is returned. + * @return a new instance of TensorArrayRead + * @see org.tensorflow.op.core.TensorArrayRead */ - public Unstage unstage(List> dtypes, Unstage.Options... options) { - return Unstage.create(scope, dtypes, options); + public TensorArrayRead tensorArrayRead(Operand handle, Operand index, + Operand flowIn, DataType dtype) { + return TensorArrayRead.create(scope, handle, index, flowIn, dtype); } /** - * Builds an {@link Tile} operation + * Builds an {@link AssignAdd} operation * - * @param input 1-D or higher. - * @param multiples 1-D. Length must be the same as the number of dimensions in `input` - * @return a new instance of Tile - * @see org.tensorflow.op.core.Tile + * @param ref Should be from a `Variable` node. + * @param value The value to be added to the variable. + * @param options carries optional attributes values + * @return a new instance of AssignAdd + * @see org.tensorflow.op.core.AssignAdd */ - public Tile tile(Operand input, Operand multiples) { - return Tile.create(scope, input, multiples); + public AssignAdd assignAdd(Operand ref, Operand value, + AssignAdd.Options... options) { + return AssignAdd.create(scope, ref, value, options); } /** - * Builds an {@link TensorListSetItem} operation + * Builds an {@link NonMaxSuppressionV5} operation * - * @param inputHandle - * @param index - * @param item - * @return a new instance of TensorListSetItem - * @see org.tensorflow.op.core.TensorListSetItem - */ - public TensorListSetItem tensorListSetItem(Operand inputHandle, Operand index, - Operand item) { - return TensorListSetItem.create(scope, inputHandle, index, item); - } - - /** - * Builds an {@link EditDistance} operation - * - * @param hypothesisIndices The indices of the hypothesis list SparseTensor. - * @param hypothesisValues The values of the hypothesis list SparseTensor. - * @param hypothesisShape The shape of the hypothesis list SparseTensor. - * @param truthIndices The indices of the truth list SparseTensor. - * @param truthValues The values of the truth list SparseTensor. - * @param truthShape truth indices, vector. + * @param boxes A 2-D float tensor of shape `[num_boxes, 4]`. + * @param scores A 1-D float tensor of shape `[num_boxes]` representing a single + * @param maxOutputSize A scalar integer tensor representing the maximum number of + * @param iouThreshold A 0-D float tensor representing the threshold for deciding whether + * @param scoreThreshold A 0-D float tensor representing the threshold for deciding when to remove + * @param softNmsSigma A 0-D float tensor representing the sigma parameter for Soft NMS; see Bodla et * @param options carries optional attributes values - * @return a new instance of EditDistance - * @see org.tensorflow.op.core.EditDistance - */ - public EditDistance editDistance(Operand hypothesisIndices, Operand hypothesisValues, - Operand hypothesisShape, Operand truthIndices, Operand truthValues, - Operand truthShape, EditDistance.Options... options) { - return EditDistance.create(scope, hypothesisIndices, hypothesisValues, hypothesisShape, truthIndices, truthValues, truthShape, options); - } - - /** - * Builds an {@link TensorListPopBack} operation - * - * @param inputHandle - * @param elementShape - * @param elementDtype - * @return a new instance of TensorListPopBack - * @see org.tensorflow.op.core.TensorListPopBack - */ - public TensorListPopBack tensorListPopBack(Operand inputHandle, - Operand elementShape, Class elementDtype) { - return TensorListPopBack.create(scope, inputHandle, elementShape, elementDtype); - } - - /** - * Builds an {@link Concat} operation - * - * @param values List of `N` Tensors to concatenate. Their ranks and types must match, - * @param axis 0-D. The dimension along which to concatenate. Must be in the - * @return a new instance of Concat - * @see org.tensorflow.op.core.Concat - */ - public Concat concat(Iterable> values, Operand axis) { - return Concat.create(scope, values, axis); - } - - /** - * Builds an {@link PlaceholderWithDefault} operation - * - * @param input The default value to produce when `output` is not fed. - * @param shape The (possibly partial) shape of the tensor. - * @return a new instance of PlaceholderWithDefault - * @see org.tensorflow.op.core.PlaceholderWithDefault + * @return a new instance of NonMaxSuppressionV5 + * @see org.tensorflow.op.core.NonMaxSuppressionV5 */ - public PlaceholderWithDefault placeholderWithDefault(Operand input, Shape shape) { - return PlaceholderWithDefault.create(scope, input, shape); + public NonMaxSuppressionV5 nonMaxSuppressionV5(Operand boxes, + Operand scores, Operand maxOutputSize, Operand iouThreshold, + Operand scoreThreshold, Operand softNmsSigma, NonMaxSuppressionV5.Options... options) { + return NonMaxSuppressionV5.create(scope, boxes, scores, maxOutputSize, iouThreshold, scoreThreshold, softNmsSigma, options); } /** - * Builds an {@link ResourceScatterDiv} operation + * Builds an {@link Shape} operation * - * @param resource Should be from a `Variable` node. - * @param indices A tensor of indices into the first dimension of `ref`. - * @param updates A tensor of updated values to add to `ref`. - * @return a new instance of ResourceScatterDiv - * @see org.tensorflow.op.core.ResourceScatterDiv + * @param input + * @param outType + * @return a new instance of Shape + * @see org.tensorflow.op.core.Shape */ - public ResourceScatterDiv resourceScatterDiv(Operand resource, - Operand indices, Operand updates) { - return ResourceScatterDiv.create(scope, resource, indices, updates); + public org.tensorflow.op.core.Shape shape(Operand input, + DataType outType) { + return org.tensorflow.op.core.Shape.create(scope, input, outType); } /** - * Builds an {@link Fingerprint} operation + * Builds an {@link ResourceScatterNdUpdate} operation * - * @param data Must have rank 1 or higher. - * @param method Fingerprint method used by this op. Currently available method is - * @return a new instance of Fingerprint - * @see org.tensorflow.op.core.Fingerprint + * @param ref A resource handle. Must be from a VarHandleOp. + * @param indices A Tensor. Must be one of the following types: int32, int64. + * @param updates A Tensor. Must have the same type as ref. A tensor of updated + * @param options carries optional attributes values + * @return a new instance of ResourceScatterNdUpdate + * @see org.tensorflow.op.core.ResourceScatterNdUpdate */ - public Fingerprint fingerprint(Operand data, Operand method) { - return Fingerprint.create(scope, data, method); + public ResourceScatterNdUpdate resourceScatterNdUpdate(Operand ref, + Operand indices, Operand updates, ResourceScatterNdUpdate.Options... options) { + return ResourceScatterNdUpdate.create(scope, ref, indices, updates, options); } /** - * Builds an {@link ReverseSequence} operation + * Builds an {@link OrderedMapSize} operation * - * @param input The input to reverse. - * @param seqLengths 1-D with length `input.dims(batch_dim)` and - * @param seqDim The dimension which is partially reversed. + * @param dtypes * @param options carries optional attributes values - * @return a new instance of ReverseSequence - * @see org.tensorflow.op.core.ReverseSequence + * @return a new instance of OrderedMapSize + * @see org.tensorflow.op.core.OrderedMapSize */ - public ReverseSequence reverseSequence(Operand input, - Operand seqLengths, Long seqDim, ReverseSequence.Options... options) { - return ReverseSequence.create(scope, input, seqLengths, seqDim, options); + public OrderedMapSize orderedMapSize(List> dtypes, + OrderedMapSize.Options... options) { + return OrderedMapSize.create(scope, dtypes, options); } /** - * Builds an {@link MutableHashTableOfTensors} operation + * Builds an {@link Fill} operation * - * @param keyDtype Type of the table keys. - * @param valueDtype Type of the table values. - * @param options carries optional attributes values - * @return a new instance of MutableHashTableOfTensors - * @see org.tensorflow.op.core.MutableHashTableOfTensors + * @param dims 1-D. Represents the shape of the output tensor. + * @param value 0-D (scalar). Value to fill the returned tensor. + * @return a new instance of Fill + * @see org.tensorflow.op.core.Fill */ - public MutableHashTableOfTensors mutableHashTableOfTensors(Class keyDtype, - Class valueDtype, MutableHashTableOfTensors.Options... options) { - return MutableHashTableOfTensors.create(scope, keyDtype, valueDtype, options); + public Fill fill(Operand dims, Operand value) { + return Fill.create(scope, dims, value); } /** - * Builds an {@link ResourceScatterSub} operation + * Builds an {@link Bitcast} operation * - * @param resource Should be from a `Variable` node. - * @param indices A tensor of indices into the first dimension of `ref`. - * @param updates A tensor of updated values to add to `ref`. - * @return a new instance of ResourceScatterSub - * @see org.tensorflow.op.core.ResourceScatterSub + * @param input + * @param type + * @return a new instance of Bitcast + * @see org.tensorflow.op.core.Bitcast */ - public ResourceScatterSub resourceScatterSub(Operand resource, - Operand indices, Operand updates) { - return ResourceScatterSub.create(scope, resource, indices, updates); + public Bitcast bitcast(Operand input, DataType type) { + return Bitcast.create(scope, input, type); } /** - * Builds an {@link Constant} operation + * Builds an {@link DecodePaddedRaw} operation * - * @param data An array containing the values to put into the new constant. The dimensions of the - * @see org.tensorflow.op.core.Constant + * @param inputBytes Tensor of string to be decoded. + * @param fixedLength Length in bytes for each element of the decoded output. Must be a multiple + * @param outType + * @param options carries optional attributes values + * @return a new instance of DecodePaddedRaw + * @see org.tensorflow.op.core.DecodePaddedRaw */ - public Constant constant(float[][] data) { - return Constant.create(scope, data); + public DecodePaddedRaw decodePaddedRaw(Operand inputBytes, + Operand fixedLength, DataType outType, DecodePaddedRaw.Options... options) { + return DecodePaddedRaw.create(scope, inputBytes, fixedLength, outType, options); } /** - * Builds an {@link Constant} operation + * Builds an {@link UniqueWithCounts} operation * - * @param shape the tensor shape. - * @param data a buffer containing the tensor data. - * @return a double constant - * @throws IllegalArgumentException If the tensor shape is not compatible with the buffer - * @see org.tensorflow.op.core.Constant + * @param x A `Tensor`. + * @param axis A `Tensor` of type `int32` (default: None). The axis of the Tensor to + * @return a new instance of UniqueWithCounts + * @see org.tensorflow.op.core.UniqueWithCounts */ - public Constant constant(long[] shape, DoubleBuffer data) { - return Constant.create(scope, shape, data); + public UniqueWithCounts uniqueWithCounts(Operand x, + Operand axis) { + return UniqueWithCounts.create(scope, x, axis); } /** - * Builds an {@link Assign} operation + * Builds an {@link Slice} operation * - * @param ref Should be from a `Variable` node. May be uninitialized. - * @param value The value to be assigned to the variable. - * @param options carries optional attributes values - * @return a new instance of Assign - * @see org.tensorflow.op.core.Assign + * @param input + * @param begin begin[i] specifies the offset into the 'i'th dimension of + * @param size size[i] specifies the number of elements of the 'i'th dimension + * @return a new instance of Slice + * @see org.tensorflow.op.core.Slice */ - public Assign assign(Operand ref, Operand value, Assign.Options... options) { - return Assign.create(scope, ref, value, options); + public Slice slice(Operand input, Operand begin, + Operand size) { + return Slice.create(scope, input, begin, size); } /** @@ -1062,788 +959,843 @@ public Assign assign(Operand ref, Operand value, Assign.Options... * @param shape * @param counts * @param probs + * @param dtype * @return a new instance of StatefulRandomBinomial * @see org.tensorflow.op.core.StatefulRandomBinomial */ - public StatefulRandomBinomial statefulRandomBinomial( - Operand resource, Operand algorithm, Operand shape, Operand counts, - Operand probs) { - return StatefulRandomBinomial.create(scope, resource, algorithm, shape, counts, probs); + public StatefulRandomBinomial statefulRandomBinomial( + Operand resource, Operand algorithm, Operand shape, Operand counts, + Operand probs, DataType dtype) { + return StatefulRandomBinomial.create(scope, resource, algorithm, shape, counts, probs, dtype); } /** - * Builds an {@link ExpandDims} operation + * Builds an {@link TensorListGather} operation * - * @param input - * @param axis 0-D (scalar). Specifies the dimension index at which to - * @return a new instance of ExpandDims - * @see org.tensorflow.op.core.ExpandDims + * @param inputHandle + * @param indices + * @param elementShape + * @param elementDtype + * @return a new instance of TensorListGather + * @see org.tensorflow.op.core.TensorListGather */ - public ExpandDims expandDims(Operand input, Operand axis) { - return ExpandDims.create(scope, input, axis); + public TensorListGather tensorListGather(Operand inputHandle, Operand indices, + Operand elementShape, DataType elementDtype) { + return TensorListGather.create(scope, inputHandle, indices, elementShape, elementDtype); } /** - * Builds an {@link Constant} operation + * Builds an {@link ZerosLike} operation * - * @param data An array containing the values to put into the new constant. The dimensions of the - * @see org.tensorflow.op.core.Constant + * @param x a tensor of type T. + * @return a new instance of ZerosLike + * @see org.tensorflow.op.core.ZerosLike */ - public Constant constant(float[] data) { - return Constant.create(scope, data); + public ZerosLike zerosLike(Operand x) { + return ZerosLike.create(scope, x); } /** - * Builds an {@link FusedBatchNormGradV3} operation + * Builds an {@link IsVariableInitialized} operation * - * @param yBackprop A 4D Tensor for the gradient with respect to y. - * @param x A 4D Tensor for input data. - * @param scale A 1D Tensor for scaling factor, to scale the normalized x. - * @param reserveSpace1 When is_training is True, a 1D Tensor for the computed batch - * @param reserveSpace2 When is_training is True, a 1D Tensor for the computed batch - * @param reserveSpace3 When is_training is True, a 1D Tensor for some intermediate results to be reused - * @param options carries optional attributes values - * @return a new instance of FusedBatchNormGradV3 - * @see org.tensorflow.op.core.FusedBatchNormGradV3 + * @param ref Should be from a `Variable` node. May be uninitialized. + * @return a new instance of IsVariableInitialized + * @see org.tensorflow.op.core.IsVariableInitialized */ - public FusedBatchNormGradV3 fusedBatchNormGradV3( - Operand yBackprop, Operand x, Operand scale, Operand reserveSpace1, - Operand reserveSpace2, Operand reserveSpace3, FusedBatchNormGradV3.Options... options) { - return FusedBatchNormGradV3.create(scope, yBackprop, x, scale, reserveSpace1, reserveSpace2, reserveSpace3, options); + public IsVariableInitialized isVariableInitialized(Operand ref) { + return IsVariableInitialized.create(scope, ref); } /** - * Builds an {@link ScatterNdAdd} operation + * Builds an {@link Unstage} operation * - * @param ref A mutable Tensor. Should be from a Variable node. - * @param indices A Tensor. Must be one of the following types: int32, int64. - * @param updates A Tensor. Must have the same type as ref. A tensor of updated values + * @param dtypes * @param options carries optional attributes values - * @return a new instance of ScatterNdAdd - * @see org.tensorflow.op.core.ScatterNdAdd + * @return a new instance of Unstage + * @see org.tensorflow.op.core.Unstage */ - public ScatterNdAdd scatterNdAdd(Operand ref, Operand indices, - Operand updates, ScatterNdAdd.Options... options) { - return ScatterNdAdd.create(scope, ref, indices, updates, options); + public Unstage unstage(List> dtypes, Unstage.Options... options) { + return Unstage.create(scope, dtypes, options); } /** - * Builds an {@link Constant} operation + * Builds an {@link TensorArrayGather} operation * - * @param data An array containing the values to put into the new constant. The dimensions of the - * @see org.tensorflow.op.core.Constant + * @param handle The handle to a TensorArray. + * @param indices The locations in the TensorArray from which to read tensor elements. + * @param flowIn A float scalar that enforces proper chaining of operations. + * @param dtype The type of the elem that is returned. + * @param options carries optional attributes values + * @return a new instance of TensorArrayGather + * @see org.tensorflow.op.core.TensorArrayGather */ - public Constant constant(boolean[][][][] data) { - return Constant.create(scope, data); + public TensorArrayGather tensorArrayGather(Operand handle, Operand indices, + Operand flowIn, DataType dtype, TensorArrayGather.Options... options) { + return TensorArrayGather.create(scope, handle, indices, flowIn, dtype, options); } /** - * Builds an {@link AssignAdd} operation + * Builds an {@link StringNGrams} operation * - * @param ref Should be from a `Variable` node. - * @param value The value to be added to the variable. - * @param options carries optional attributes values - * @return a new instance of AssignAdd - * @see org.tensorflow.op.core.AssignAdd + * @param data The values tensor of the ragged string tensor to make ngrams out of. Must be a + * @param dataSplits The splits tensor of the ragged string tensor to make ngrams out of. + * @param separator The string to append between elements of the token. Use "" for no separator. + * @param ngramWidths The sizes of the ngrams to create. + * @param leftPad The string to use to pad the left side of the ngram sequence. Only used if + * @param rightPad The string to use to pad the right side of the ngram sequence. Only used if + * @param padWidth The number of padding elements to add to each side of each + * @param preserveShortSequences + * @return a new instance of StringNGrams + * @see org.tensorflow.op.core.StringNGrams */ - public AssignAdd assignAdd(Operand ref, Operand value, - AssignAdd.Options... options) { - return AssignAdd.create(scope, ref, value, options); + public StringNGrams stringNGrams(Operand data, + Operand dataSplits, String separator, List ngramWidths, String leftPad, + String rightPad, Long padWidth, Boolean preserveShortSequences) { + return StringNGrams.create(scope, data, dataSplits, separator, ngramWidths, leftPad, rightPad, padWidth, preserveShortSequences); } /** - * Builds an {@link MutableHashTable} operation + * Builds an {@link TensorListScatterV2} operation * - * @param keyDtype Type of the table keys. - * @param valueDtype Type of the table values. - * @param options carries optional attributes values - * @return a new instance of MutableHashTable - * @see org.tensorflow.op.core.MutableHashTable + * @param tensor + * @param indices + * @param elementShape + * @param numElements + * @return a new instance of TensorListScatterV2 + * @see org.tensorflow.op.core.TensorListScatterV2 */ - public MutableHashTable mutableHashTable(Class keyDtype, Class valueDtype, - MutableHashTable.Options... options) { - return MutableHashTable.create(scope, keyDtype, valueDtype, options); + public TensorListScatterV2 tensorListScatterV2(Operand tensor, + Operand indices, Operand elementShape, Operand numElements) { + return TensorListScatterV2.create(scope, tensor, indices, elementShape, numElements); } /** - * Builds an {@link ExtractVolumePatches} operation + * Builds an {@link Reverse} operation * - * @param input 5-D Tensor with shape `[batch, in_planes, in_rows, in_cols, depth]`. - * @param ksizes The size of the sliding window for each dimension of `input`. - * @param strides 1-D of length 5. How far the centers of two consecutive patches are in - * @param padding The type of padding algorithm to use. - * @return a new instance of ExtractVolumePatches - * @see org.tensorflow.op.core.ExtractVolumePatches + * @param tensor Up to 8-D. + * @param axis 1-D. The indices of the dimensions to reverse. Must be in the range + * @return a new instance of Reverse + * @see org.tensorflow.op.core.Reverse */ - public ExtractVolumePatches extractVolumePatches(Operand input, - List ksizes, List strides, String padding) { - return ExtractVolumePatches.create(scope, input, ksizes, strides, padding); + public Reverse reverse(Operand tensor, Operand axis) { + return Reverse.create(scope, tensor, axis); } /** - * Builds an {@link Size} operation + * Builds an {@link ReduceAll} operation * - * @param input - * @return a new instance of Size - * @see org.tensorflow.op.core.Size + * @param input The tensor to reduce. + * @param axis The dimensions to reduce. Must be in the range + * @param options carries optional attributes values + * @return a new instance of ReduceAll + * @see org.tensorflow.op.core.ReduceAll */ - public Size size(Operand input) { - return Size.create(scope, input); + public ReduceAll reduceAll(Operand input, Operand axis, + ReduceAll.Options... options) { + return ReduceAll.create(scope, input, axis, options); } /** - * Builds an {@link ScatterAdd} operation + * Builds an {@link Min} operation * - * @param ref Should be from a `Variable` node. - * @param indices A tensor of indices into the first dimension of `ref`. - * @param updates A tensor of updated values to add to `ref`. + * @param input The tensor to reduce. + * @param axis The dimensions to reduce. Must be in the range * @param options carries optional attributes values - * @return a new instance of ScatterAdd - * @see org.tensorflow.op.core.ScatterAdd + * @return a new instance of Min + * @see org.tensorflow.op.core.Min */ - public ScatterAdd scatterAdd(Operand ref, Operand indices, - Operand updates, ScatterAdd.Options... options) { - return ScatterAdd.create(scope, ref, indices, updates, options); + public Min min(Operand input, Operand axis, + Min.Options... options) { + return Min.create(scope, input, axis, options); } /** - * Builds an {@link Constant} operation + * Builds an {@link RefSwitch} operation * - * @param object a Java object representing the constant. - * @return a constant of type `type` - * @see org.tensorflow.Tensor#create(Object) Tensor.create - * @see org.tensorflow.op.core.Constant + * @param data The ref tensor to be forwarded to the appropriate output. + * @param pred A scalar that specifies which output port will receive data. + * @return a new instance of RefSwitch + * @see org.tensorflow.op.core.RefSwitch */ - public Constant constant(Object object, Class type) { - return Constant.create(scope, object, type); + public RefSwitch refSwitch(Operand data, Operand pred) { + return RefSwitch.create(scope, data, pred); } /** - * Builds an {@link ResourceScatterMax} operation + * Builds an {@link OnesLike} operation * - * @param resource Should be from a `Variable` node. - * @param indices A tensor of indices into the first dimension of `ref`. - * @param updates A tensor of updated values to add to `ref`. - * @return a new instance of ResourceScatterMax - * @see org.tensorflow.op.core.ResourceScatterMax + * @param x a tensor of type T. + * @return a new instance of OnesLike + * @see org.tensorflow.op.core.OnesLike */ - public ResourceScatterMax resourceScatterMax(Operand resource, - Operand indices, Operand updates) { - return ResourceScatterMax.create(scope, resource, indices, updates); + public OnesLike onesLike(Operand x) { + return OnesLike.create(scope, x); } /** - * Builds an {@link Constant} operation + * Builds an {@link Placeholder} operation * - * @param data An array containing the values to put into the new constant. String elements are - * @see org.tensorflow.op.core.Constant + * @param dtype The type of elements in the tensor. + * @param options carries optional attributes values + * @return a new instance of Placeholder + * @see org.tensorflow.op.core.Placeholder */ - public Constant constant(byte[][][] data) { - return Constant.create(scope, data); + public Placeholder placeholder(DataType dtype, Placeholder.Options... options) { + return Placeholder.create(scope, dtype, options); } /** - * Builds an {@link UnsortedSegmentJoin} operation + * Builds an {@link Fingerprint} operation * - * @param inputs The input to be joined. - * @param segmentIds A tensor whose shape is a prefix of data.shape. Negative segment ids are not - * @param numSegments A scalar. - * @param options carries optional attributes values - * @return a new instance of UnsortedSegmentJoin - * @see org.tensorflow.op.core.UnsortedSegmentJoin + * @param data Must have rank 1 or higher. + * @param method Fingerprint method used by this op. Currently available method is + * @return a new instance of Fingerprint + * @see org.tensorflow.op.core.Fingerprint */ - public UnsortedSegmentJoin unsortedSegmentJoin( - Operand inputs, Operand segmentIds, Operand numSegments, - UnsortedSegmentJoin.Options... options) { - return UnsortedSegmentJoin.create(scope, inputs, segmentIds, numSegments, options); + public Fingerprint fingerprint(Operand data, Operand method) { + return Fingerprint.create(scope, data, method); } /** - * Builds an {@link Constant} operation + * Builds an {@link LookupTableInsert} operation * - * @param data An array containing the values to put into the new constant. The dimensions of the - * @see org.tensorflow.op.core.Constant + * @param tableHandle Handle to the table. + * @param keys Any shape. Keys to look up. + * @param values Values to associate with keys. + * @return a new instance of LookupTableInsert + * @see org.tensorflow.op.core.LookupTableInsert */ - public Constant constant(int[][][][] data) { - return Constant.create(scope, data); + public LookupTableInsert lookupTableInsert(Operand tableHandle, Operand keys, + Operand values) { + return LookupTableInsert.create(scope, tableHandle, keys, values); } /** - * Builds an {@link BroadcastTo} operation + * Builds an {@link BarrierReadySize} operation * - * @param input A Tensor to broadcast. - * @param shape An 1-D `int` Tensor. The shape of the desired output. - * @return a new instance of BroadcastTo - * @see org.tensorflow.op.core.BroadcastTo + * @param handle The handle to a barrier. + * @return a new instance of BarrierReadySize + * @see org.tensorflow.op.core.BarrierReadySize */ - public BroadcastTo broadcastTo(Operand input, Operand shape) { - return BroadcastTo.create(scope, input, shape); + public BarrierReadySize barrierReadySize(Operand handle) { + return BarrierReadySize.create(scope, handle); } /** - * Builds an {@link Constant} operation + * Builds an {@link TensorScatterUpdate} operation * - * @param data An array containing the values to put into the new constant. The dimensions of the - * @see org.tensorflow.op.core.Constant + * @param tensor Tensor to copy/update. + * @param indices Index tensor. + * @param updates Updates to scatter into output. + * @return a new instance of TensorScatterUpdate + * @see org.tensorflow.op.core.TensorScatterUpdate */ - public Constant constant(double[] data) { - return Constant.create(scope, data); + public TensorScatterUpdate tensorScatterUpdate(Operand tensor, + Operand indices, Operand updates) { + return TensorScatterUpdate.create(scope, tensor, indices, updates); } /** - * Builds an {@link StridedSliceGrad} operation + * Builds an {@link GetSessionTensor} operation * - * @param shape - * @param begin - * @param end - * @param strides - * @param dy - * @param options carries optional attributes values - * @return a new instance of StridedSliceGrad - * @see org.tensorflow.op.core.StridedSliceGrad + * @param handle The handle for a tensor stored in the session state. + * @param dtype The type of the output value. + * @return a new instance of GetSessionTensor + * @see org.tensorflow.op.core.GetSessionTensor */ - public StridedSliceGrad stridedSliceGrad(Operand shape, - Operand begin, Operand end, Operand strides, Operand dy, - StridedSliceGrad.Options... options) { - return StridedSliceGrad.create(scope, shape, begin, end, strides, dy, options); + public GetSessionTensor getSessionTensor(Operand handle, DataType dtype) { + return GetSessionTensor.create(scope, handle, dtype); } /** - * Builds an {@link Lu} operation + * Builds an {@link Any} operation * - * @param input A tensor of shape `[..., M, M]` whose inner-most 2 dimensions form matrices of - * @return a new instance of Lu - * @see org.tensorflow.op.core.Lu + * @param input The tensor to reduce. + * @param axis The dimensions to reduce. Must be in the range + * @param options carries optional attributes values + * @return a new instance of Any + * @see org.tensorflow.op.core.Any */ - public Lu lu(Operand input) { - return Lu.create(scope, input); + public Any any(Operand input, Operand axis, + Any.Options... options) { + return Any.create(scope, input, axis, options); } /** - * Builds an {@link Gradients} operation + * Builds an {@link TensorListConcatLists} operation * - * @param y output of the function to derive - * @param x inputs of the function for which partial derivatives are computed - * @param options carries optional attributes values - * @return a new instance of {@code Gradients} - * @throws IllegalArgumentException if execution environment is not a graph - * @see org.tensorflow.op.core.Gradients + * @param inputA + * @param inputB + * @param elementDtype + * @return a new instance of TensorListConcatLists + * @see org.tensorflow.op.core.TensorListConcatLists */ - public Gradients gradients(Operand y, Iterable> x, - Gradients.Options... options) { - return Gradients.create(scope, y, x, options); + public TensorListConcatLists tensorListConcatLists(Operand inputA, Operand inputB, + DataType elementDtype) { + return TensorListConcatLists.create(scope, inputA, inputB, elementDtype); } /** - * Builds an {@link Unique} operation + * Builds an {@link ClipByValue} operation * - * @param x A `Tensor`. - * @param axis A `Tensor` of type `int32` (default: None). The axis of the Tensor to - * @return a new instance of Unique - * @see org.tensorflow.op.core.Unique + * @param t A `Tensor`. + * @param clipValueMin A 0-D (scalar) `Tensor`, or a `Tensor` with the same shape + * @param clipValueMax A 0-D (scalar) `Tensor`, or a `Tensor` with the same shape + * @return a new instance of ClipByValue + * @see org.tensorflow.op.core.ClipByValue */ - public Unique unique(Operand x, Operand axis) { - return Unique.create(scope, x, axis); + public ClipByValue clipByValue(Operand t, Operand clipValueMin, + Operand clipValueMax) { + return ClipByValue.create(scope, t, clipValueMin, clipValueMax); } /** - * Builds an {@link DecodePaddedRaw} operation + * Builds an {@link TryRpc} operation * - * @param inputBytes Tensor of string to be decoded. - * @param fixedLength Length in bytes for each element of the decoded output. Must be a multiple - * @param outType + * @param address `0-D` or `1-D`. The address (i.e. host_name:port) of the RPC server. + * @param method `0-D` or `1-D`. The method address on the RPC server. + * @param request `0-D` or `1-D`. Serialized proto strings: the rpc request argument. * @param options carries optional attributes values - * @return a new instance of DecodePaddedRaw - * @see org.tensorflow.op.core.DecodePaddedRaw + * @return a new instance of TryRpc + * @see org.tensorflow.op.core.TryRpc */ - public DecodePaddedRaw decodePaddedRaw(Operand inputBytes, - Operand fixedLength, Class outType, DecodePaddedRaw.Options... options) { - return DecodePaddedRaw.create(scope, inputBytes, fixedLength, outType, options); + public TryRpc tryRpc(Operand address, Operand method, Operand request, + TryRpc.Options... options) { + return TryRpc.create(scope, address, method, request, options); } /** - * Builds an {@link SelectV2} operation + * Builds an {@link TensorArrayScatter} operation * - * @param condition - * @param t - * @param e - * @return a new instance of SelectV2 - * @see org.tensorflow.op.core.SelectV2 + * @param handle The handle to a TensorArray. + * @param indices The locations at which to write the tensor elements. + * @param value The concatenated tensor to write to the TensorArray. + * @param flowIn A float scalar that enforces proper chaining of operations. + * @return a new instance of TensorArrayScatter + * @see org.tensorflow.op.core.TensorArrayScatter */ - public SelectV2 selectV2(Operand condition, Operand t, Operand e) { - return SelectV2.create(scope, condition, t, e); + public TensorArrayScatter tensorArrayScatter(Operand handle, Operand indices, + Operand value, Operand flowIn) { + return TensorArrayScatter.create(scope, handle, indices, value, flowIn); } /** - * Builds an {@link ShapeN} operation + * Builds an {@link TensorListConcat} operation * - * @param input - * @param outType - * @return a new instance of ShapeN - * @see org.tensorflow.op.core.ShapeN + * @param inputHandle + * @param elementDtype + * @param options carries optional attributes values + * @return a new instance of TensorListConcat + * @see org.tensorflow.op.core.TensorListConcat */ - public ShapeN shapeN(Iterable> input, Class outType) { - return ShapeN.create(scope, input, outType); + public TensorListConcat tensorListConcat(Operand inputHandle, DataType elementDtype, + TensorListConcat.Options... options) { + return TensorListConcat.create(scope, inputHandle, elementDtype, options); } /** - * Builds an {@link Max} operation + * Builds an {@link Timestamp} operation * - * @param input The tensor to reduce. - * @param axis The dimensions to reduce. Must be in the range - * @param options carries optional attributes values - * @return a new instance of Max - * @see org.tensorflow.op.core.Max + * @return a new instance of Timestamp + * @see org.tensorflow.op.core.Timestamp */ - public Max max(Operand input, Operand axis, - Max.Options... options) { - return Max.create(scope, input, axis, options); + public Timestamp timestamp() { + return Timestamp.create(scope); } /** - * Builds an {@link Constant} operation + * Builds an {@link StatefulStandardNormalV2} operation * - * @param data An array containing the values to put into the new constant. The dimensions of the - * @see org.tensorflow.op.core.Constant + * @param resource The handle of the resource variable that stores the state of the RNG. + * @param algorithm The RNG algorithm. + * @param shape The shape of the output tensor. + * @return a new instance of StatefulStandardNormalV2 + * @see org.tensorflow.op.core.StatefulStandardNormalV2 */ - public Constant constant(float[][][][][][] data) { - return Constant.create(scope, data); + public StatefulStandardNormalV2 statefulStandardNormalV2(Operand resource, + Operand algorithm, Operand shape) { + return StatefulStandardNormalV2.create(scope, resource, algorithm, shape); } /** - * Builds an {@link ResourceGatherNd} operation + * Builds an {@link ScatterNdNonAliasingAdd} operation * - * @param resource - * @param indices - * @param dtype - * @return a new instance of ResourceGatherNd - * @see org.tensorflow.op.core.ResourceGatherNd + * @param input A Tensor. + * @param indices A Tensor. Must be one of the following types: `int32`, `int64`. + * @param updates A Tensor. Must have the same type as ref. A tensor of updated values + * @return a new instance of ScatterNdNonAliasingAdd + * @see org.tensorflow.op.core.ScatterNdNonAliasingAdd */ - public ResourceGatherNd resourceGatherNd(Operand resource, - Operand indices, Class dtype) { - return ResourceGatherNd.create(scope, resource, indices, dtype); + public ScatterNdNonAliasingAdd scatterNdNonAliasingAdd(Operand input, + Operand indices, Operand updates) { + return ScatterNdNonAliasingAdd.create(scope, input, indices, updates); } /** - * Builds an {@link ZerosLike} operation + * Builds an {@link GetSessionHandle} operation * - * @param x a tensor of type T. - * @return a new instance of ZerosLike - * @see org.tensorflow.op.core.ZerosLike + * @param value The tensor to be stored. + * @return a new instance of GetSessionHandle + * @see org.tensorflow.op.core.GetSessionHandle */ - public ZerosLike zerosLike(Operand x) { - return ZerosLike.create(scope, x); + public GetSessionHandle getSessionHandle(Operand value) { + return GetSessionHandle.create(scope, value); } /** - * Builds an {@link IsVariableInitialized} operation + * Builds an {@link HashTable} operation * - * @param ref Should be from a `Variable` node. May be uninitialized. - * @return a new instance of IsVariableInitialized - * @see org.tensorflow.op.core.IsVariableInitialized + * @param keyDtype Type of the table keys. + * @param valueDtype Type of the table values. + * @param options carries optional attributes values + * @return a new instance of HashTable + * @see org.tensorflow.op.core.HashTable */ - public IsVariableInitialized isVariableInitialized(Operand ref) { - return IsVariableInitialized.create(scope, ref); + public HashTable hashTable(DataType keyDtype, DataType valueDtype, + HashTable.Options... options) { + return HashTable.create(scope, keyDtype, valueDtype, options); } /** - * Builds an {@link TensorListStack} operation + * Builds an {@link QuantizedConcatV2} operation * - * @param inputHandle - * @param elementShape - * @param elementDtype - * @param options carries optional attributes values - * @return a new instance of TensorListStack - * @see org.tensorflow.op.core.TensorListStack + * @param values + * @param axis + * @param inputMins + * @param inputMaxes + * @return a new instance of QuantizedConcatV2 + * @see org.tensorflow.op.core.QuantizedConcatV2 */ - public TensorListStack tensorListStack(Operand inputHandle, - Operand elementShape, Class elementDtype, TensorListStack.Options... options) { - return TensorListStack.create(scope, inputHandle, elementShape, elementDtype, options); + public QuantizedConcatV2 quantizedConcatV2(Iterable> values, + Operand axis, Iterable> inputMins, Iterable> inputMaxes) { + return QuantizedConcatV2.create(scope, values, axis, inputMins, inputMaxes); } /** - * Builds an {@link InplaceSub} operation + * Builds an {@link UnbatchGrad} operation * - * @param x A `Tensor` of type T. - * @param i A vector. Indices into the left-most dimension of `x`. - * @param v A `Tensor` of type T. Same dimension sizes as x except the first dimension, which must be the same as i's size. - * @return a new instance of InplaceSub - * @see org.tensorflow.op.core.InplaceSub + * @param originalInput + * @param batchIndex + * @param grad + * @param id + * @param options carries optional attributes values + * @return a new instance of UnbatchGrad + * @see org.tensorflow.op.core.UnbatchGrad */ - public InplaceSub inplaceSub(Operand x, Operand i, Operand v) { - return InplaceSub.create(scope, x, i, v); + public UnbatchGrad unbatchGrad(Operand originalInput, Operand batchIndex, + Operand grad, Operand id, UnbatchGrad.Options... options) { + return UnbatchGrad.create(scope, originalInput, batchIndex, grad, id, options); } /** - * Builds an {@link Constant} operation + * Builds an {@link TensorArrayUnpack} operation * - * @param data An array containing the values to put into the new constant. The dimensions of the - * @see org.tensorflow.op.core.Constant + * @param handle + * @param value + * @param flowIn + * @return a new instance of TensorArrayUnpack + * @see org.tensorflow.op.core.TensorArrayUnpack */ - public Constant constant(double[][] data) { - return Constant.create(scope, data); + public TensorArrayUnpack tensorArrayUnpack(Operand handle, Operand value, + Operand flowIn) { + return TensorArrayUnpack.create(scope, handle, value, flowIn); } /** - * Builds an {@link OnesLike} operation + * Builds an {@link Batch} operation * - * @param x a tensor of type T. - * @return a new instance of OnesLike - * @see org.tensorflow.op.core.OnesLike + * @param inTensors + * @param numBatchThreads + * @param maxBatchSize + * @param batchTimeoutMicros + * @param gradTimeoutMicros + * @param options carries optional attributes values + * @return a new instance of Batch + * @see org.tensorflow.op.core.Batch */ - public OnesLike onesLike(Operand x) { - return OnesLike.create(scope, x); + public Batch batch(Iterable> inTensors, Long numBatchThreads, Long maxBatchSize, + Long batchTimeoutMicros, Long gradTimeoutMicros, Batch.Options... options) { + return Batch.create(scope, inTensors, numBatchThreads, maxBatchSize, batchTimeoutMicros, gradTimeoutMicros, options); } /** - * Builds an {@link OrderedMapSize} operation + * Builds an {@link ResourceCountUpTo} operation * - * @param dtypes - * @param options carries optional attributes values - * @return a new instance of OrderedMapSize - * @see org.tensorflow.op.core.OrderedMapSize + * @param resource Should be from a scalar `Variable` node. + * @param limit If incrementing ref would bring it above limit, instead generates an + * @param T + * @return a new instance of ResourceCountUpTo + * @see org.tensorflow.op.core.ResourceCountUpTo */ - public OrderedMapSize orderedMapSize(List> dtypes, OrderedMapSize.Options... options) { - return OrderedMapSize.create(scope, dtypes, options); + public ResourceCountUpTo resourceCountUpTo(Operand resource, Long limit, + DataType T) { + return ResourceCountUpTo.create(scope, resource, limit, T); } /** - * Builds an {@link QuantizedConcat} operation + * Builds an {@link UnravelIndex} operation * - * @param concatDim 0-D. The dimension along which to concatenate. Must be in the - * @param values The `N` Tensors to concatenate. Their ranks and types must match, - * @param inputMins The minimum scalar values for each of the input tensors. - * @param inputMaxes The maximum scalar values for each of the input tensors. - * @return a new instance of QuantizedConcat - * @see org.tensorflow.op.core.QuantizedConcat + * @param indices An 0-D or 1-D `int` Tensor whose elements are indices into the + * @param dims An 1-D `int` Tensor. The shape of the array to use for unraveling + * @return a new instance of UnravelIndex + * @see org.tensorflow.op.core.UnravelIndex */ - public QuantizedConcat quantizedConcat(Operand concatDim, - Iterable> values, Iterable> inputMins, - Iterable> inputMaxes) { - return QuantizedConcat.create(scope, concatDim, values, inputMins, inputMaxes); + public UnravelIndex unravelIndex(Operand indices, Operand dims) { + return UnravelIndex.create(scope, indices, dims); } /** - * Builds an {@link LookupTableInsert} operation + * Builds an {@link CudnnRNNCanonicalToParamsV2} operation * - * @param tableHandle Handle to the table. - * @param keys Any shape. Keys to look up. - * @param values Values to associate with keys. - * @return a new instance of LookupTableInsert - * @see org.tensorflow.op.core.LookupTableInsert + * @param numLayers + * @param numUnits + * @param inputSize + * @param weights + * @param biases + * @param options carries optional attributes values + * @return a new instance of CudnnRNNCanonicalToParamsV2 + * @see org.tensorflow.op.core.CudnnRNNCanonicalToParamsV2 */ - public LookupTableInsert lookupTableInsert(Operand tableHandle, Operand keys, - Operand values) { - return LookupTableInsert.create(scope, tableHandle, keys, values); + public CudnnRNNCanonicalToParamsV2 cudnnRNNCanonicalToParamsV2( + Operand numLayers, Operand numUnits, Operand inputSize, + Iterable> weights, Iterable> biases, + CudnnRNNCanonicalToParamsV2.Options... options) { + return CudnnRNNCanonicalToParamsV2.create(scope, numLayers, numUnits, inputSize, weights, biases, options); } /** - * Builds an {@link Roll} operation + * Builds an {@link Einsum} operation * - * @param input - * @param shift Dimension must be 0-D or 1-D. `shift[i]` specifies the number of places by which - * @param axis Dimension must be 0-D or 1-D. `axis[i]` specifies the dimension that the shift - * @return a new instance of Roll - * @see org.tensorflow.op.core.Roll + * @param inputs List of 1 or 2 Tensors. + * @param equation String describing the Einstein Summation operation; in the format of np.einsum. + * @return a new instance of Einsum + * @see org.tensorflow.op.core.Einsum */ - public Roll roll(Operand input, Operand shift, - Operand axis) { - return Roll.create(scope, input, shift, axis); + public Einsum einsum(Iterable> inputs, String equation) { + return Einsum.create(scope, inputs, equation); } /** - * Builds an {@link HashTable} operation + * Builds an {@link DynamicStitch} operation * - * @param keyDtype Type of the table keys. - * @param valueDtype Type of the table values. - * @param options carries optional attributes values - * @return a new instance of HashTable - * @see org.tensorflow.op.core.HashTable + * @param indices + * @param data + * @return a new instance of DynamicStitch + * @see org.tensorflow.op.core.DynamicStitch */ - public HashTable hashTable(Class keyDtype, Class valueDtype, - HashTable.Options... options) { - return HashTable.create(scope, keyDtype, valueDtype, options); + public DynamicStitch dynamicStitch(Iterable> indices, + Iterable> data) { + return DynamicStitch.create(scope, indices, data); } /** - * Builds an {@link ResourceGather} operation + * Builds an {@link Stack} operation * - * @param resource - * @param indices - * @param dtype + * @param values Must be of same shape and type. * @param options carries optional attributes values - * @return a new instance of ResourceGather - * @see org.tensorflow.op.core.ResourceGather + * @return a new instance of Stack + * @see org.tensorflow.op.core.Stack */ - public ResourceGather resourceGather(Operand resource, - Operand indices, Class dtype, ResourceGather.Options... options) { - return ResourceGather.create(scope, resource, indices, dtype, options); + public Stack stack(Iterable> values, Stack.Options... options) { + return Stack.create(scope, values, options); } /** - * Builds an {@link ClipByValue} operation + * Builds an {@link VariableShape} operation * - * @param t A `Tensor`. - * @param clipValueMin A 0-D (scalar) `Tensor`, or a `Tensor` with the same shape - * @param clipValueMax A 0-D (scalar) `Tensor`, or a `Tensor` with the same shape - * @return a new instance of ClipByValue - * @see org.tensorflow.op.core.ClipByValue + * @param input + * @return a new instance of VariableShape + * @see org.tensorflow.op.core.VariableShape */ - public ClipByValue clipByValue(Operand t, Operand clipValueMin, - Operand clipValueMax) { - return ClipByValue.create(scope, t, clipValueMin, clipValueMax); + public VariableShape variableShape(Operand input) { + return VariableShape.create(scope, input); } /** - * Builds an {@link Constant} operation + * Builds an {@link TensorScatterAdd} operation * - * @param data An array containing the values to put into the new constant. The dimensions of the - * @see org.tensorflow.op.core.Constant + * @param tensor Tensor to copy/update. + * @param indices Index tensor. + * @param updates Updates to scatter into output. + * @return a new instance of TensorScatterAdd + * @see org.tensorflow.op.core.TensorScatterAdd */ - public Constant constant(long[][][] data) { - return Constant.create(scope, data); + public TensorScatterAdd tensorScatterAdd(Operand tensor, + Operand indices, Operand updates) { + return TensorScatterAdd.create(scope, tensor, indices, updates); } /** - * Builds an {@link Sum} operation + * Builds an {@link Stage} operation * - * @param input The tensor to reduce. - * @param axis The dimensions to reduce. Must be in the range + * @param values a list of tensors * @param options carries optional attributes values - * @return a new instance of Sum - * @see org.tensorflow.op.core.Sum + * @return a new instance of Stage + * @see org.tensorflow.op.core.Stage */ - public Sum sum(Operand input, Operand axis, - Sum.Options... options) { - return Sum.create(scope, input, axis, options); + public Stage stage(Iterable> values, Stage.Options... options) { + return Stage.create(scope, values, options); } /** - * Builds an {@link Shape} operation + * Builds an {@link ReduceMin} operation * - * @param input - * @param outType - * @return a new instance of Shape - * @see org.tensorflow.op.core.Shape + * @param input The tensor to reduce. + * @param axis The dimensions to reduce. Must be in the range + * @param options carries optional attributes values + * @return a new instance of ReduceMin + * @see org.tensorflow.op.core.ReduceMin */ - public org.tensorflow.op.core.Shape shape(Operand input, - Class outType) { - return org.tensorflow.op.core.Shape.create(scope, input, outType); + public ReduceMin reduceMin(Operand input, Operand axis, + ReduceMin.Options... options) { + return ReduceMin.create(scope, input, axis, options); } /** - * Builds an {@link MapSize} operation + * Builds an {@link ScatterNdUpdate} operation * - * @param dtypes + * @param ref A mutable Tensor. Should be from a Variable node. + * @param indices A Tensor. Must be one of the following types: int32, int64. + * @param updates A Tensor. Must have the same type as ref. A tensor of updated * @param options carries optional attributes values - * @return a new instance of MapSize - * @see org.tensorflow.op.core.MapSize + * @return a new instance of ScatterNdUpdate + * @see org.tensorflow.op.core.ScatterNdUpdate */ - public MapSize mapSize(List> dtypes, MapSize.Options... options) { - return MapSize.create(scope, dtypes, options); + public ScatterNdUpdate scatterNdUpdate(Operand ref, + Operand indices, Operand updates, ScatterNdUpdate.Options... options) { + return ScatterNdUpdate.create(scope, ref, indices, updates, options); } /** - * Builds an {@link Timestamp} operation + * Builds an {@link DynamicPartition} operation * - * @return a new instance of Timestamp - * @see org.tensorflow.op.core.Timestamp + * @param data + * @param partitions Any shape. Indices in the range `[0, num_partitions)`. + * @param numPartitions The number of partitions to output. + * @return a new instance of DynamicPartition + * @see org.tensorflow.op.core.DynamicPartition */ - public Timestamp timestamp() { - return Timestamp.create(scope); + public DynamicPartition dynamicPartition(Operand data, Operand partitions, + Long numPartitions) { + return DynamicPartition.create(scope, data, partitions, numPartitions); } /** - * Builds an {@link GetSessionHandle} operation + * Builds an {@link BarrierInsertMany} operation * - * @param value The tensor to be stored. - * @return a new instance of GetSessionHandle - * @see org.tensorflow.op.core.GetSessionHandle - */ - public GetSessionHandle getSessionHandle(Operand value) { - return GetSessionHandle.create(scope, value); + * @param handle The handle to a barrier. + * @param keys A one-dimensional tensor of keys, with length n. + * @param values An any-dimensional tensor of values, which are associated with the + * @param componentIndex The component of the barrier elements that is being assigned. + * @return a new instance of BarrierInsertMany + * @see org.tensorflow.op.core.BarrierInsertMany + */ + public BarrierInsertMany barrierInsertMany(Operand handle, Operand keys, + Operand values, Long componentIndex) { + return BarrierInsertMany.create(scope, handle, keys, values, componentIndex); } /** - * Builds an {@link BarrierReadySize} operation + * Builds an {@link GuaranteeConst} operation * - * @param handle The handle to a barrier. - * @return a new instance of BarrierReadySize - * @see org.tensorflow.op.core.BarrierReadySize + * @param input + * @return a new instance of GuaranteeConst + * @see org.tensorflow.op.core.GuaranteeConst */ - public BarrierReadySize barrierReadySize(Operand handle) { - return BarrierReadySize.create(scope, handle); + public GuaranteeConst guaranteeConst(Operand input) { + return GuaranteeConst.create(scope, input); } /** - * Builds an {@link CountUpTo} operation + * Builds an {@link SetSize} operation * - * @param ref Should be from a scalar `Variable` node. - * @param limit If incrementing ref would bring it above limit, instead generates an - * @return a new instance of CountUpTo - * @see org.tensorflow.op.core.CountUpTo + * @param setIndices 2D `Tensor`, indices of a `SparseTensor`. + * @param setValues 1D `Tensor`, values of a `SparseTensor`. + * @param setShape 1D `Tensor`, shape of a `SparseTensor`. + * @param options carries optional attributes values + * @return a new instance of SetSize + * @see org.tensorflow.op.core.SetSize */ - public CountUpTo countUpTo(Operand ref, Long limit) { - return CountUpTo.create(scope, ref, limit); + public SetSize setSize(Operand setIndices, Operand setValues, + Operand setShape, SetSize.Options... options) { + return SetSize.create(scope, setIndices, setValues, setShape, options); } /** - * Builds an {@link DrawBoundingBoxesV2} operation + * Builds an {@link Bucketize} operation * - * @param images 4-D with shape `[batch, height, width, depth]`. A batch of images. - * @param boxes 3-D with shape `[batch, num_bounding_boxes, 4]` containing bounding - * @param colors 2-D. A list of RGBA colors to cycle through for the boxes. - * @return a new instance of DrawBoundingBoxesV2 - * @see org.tensorflow.op.core.DrawBoundingBoxesV2 + * @param input Any shape of Tensor contains with int or float type. + * @param boundaries A sorted list of floats gives the boundary of the buckets. + * @return a new instance of Bucketize + * @see org.tensorflow.op.core.Bucketize */ - public DrawBoundingBoxesV2 drawBoundingBoxesV2(Operand images, - Operand boxes, Operand colors) { - return DrawBoundingBoxesV2.create(scope, images, boxes, colors); + public Bucketize bucketize(Operand input, List boundaries) { + return Bucketize.create(scope, input, boundaries); } /** - * Builds an {@link Constant} operation + * Builds an {@link CountUpTo} operation * - * @param data An array containing the values to put into the new constant. The dimensions of the - * @see org.tensorflow.op.core.Constant + * @param ref Should be from a scalar `Variable` node. + * @param limit If incrementing ref would bring it above limit, instead generates an + * @return a new instance of CountUpTo + * @see org.tensorflow.op.core.CountUpTo */ - public Constant constant(boolean[][][][][] data) { - return Constant.create(scope, data); + public CountUpTo countUpTo(Operand ref, Long limit) { + return CountUpTo.create(scope, ref, limit); } /** - * Builds an {@link BarrierClose} operation + * Builds an {@link ScatterMin} operation * - * @param handle The handle to a barrier. + * @param ref Should be from a `Variable` node. + * @param indices A tensor of indices into the first dimension of `ref`. + * @param updates A tensor of updated values to reduce into `ref`. * @param options carries optional attributes values - * @return a new instance of BarrierClose - * @see org.tensorflow.op.core.BarrierClose + * @return a new instance of ScatterMin + * @see org.tensorflow.op.core.ScatterMin */ - public BarrierClose barrierClose(Operand handle, BarrierClose.Options... options) { - return BarrierClose.create(scope, handle, options); + public ScatterMin scatterMin(Operand ref, + Operand indices, Operand updates, ScatterMin.Options... options) { + return ScatterMin.create(scope, ref, indices, updates, options); } /** - * Builds an {@link Lu} operation + * Builds an {@link MapPeek} operation * - * @param input A tensor of shape `[..., M, M]` whose inner-most 2 dimensions form matrices of - * @param outputIdxType - * @return a new instance of Lu - * @see org.tensorflow.op.core.Lu + * @param key + * @param indices + * @param dtypes + * @param options carries optional attributes values + * @return a new instance of MapPeek + * @see org.tensorflow.op.core.MapPeek */ - public Lu lu(Operand input, Class outputIdxType) { - return Lu.create(scope, input, outputIdxType); + public MapPeek mapPeek(Operand key, Operand indices, List> dtypes, + MapPeek.Options... options) { + return MapPeek.create(scope, key, indices, dtypes, options); } /** - * Builds an {@link TensorListScatterV2} operation + * Builds an {@link TensorListScatterIntoExistingList} operation * + * @param inputHandle * @param tensor * @param indices - * @param elementShape - * @param numElements - * @return a new instance of TensorListScatterV2 - * @see org.tensorflow.op.core.TensorListScatterV2 + * @return a new instance of TensorListScatterIntoExistingList + * @see org.tensorflow.op.core.TensorListScatterIntoExistingList */ - public TensorListScatterV2 tensorListScatterV2(Operand tensor, - Operand indices, Operand elementShape, Operand numElements) { - return TensorListScatterV2.create(scope, tensor, indices, elementShape, numElements); + public TensorListScatterIntoExistingList tensorListScatterIntoExistingList( + Operand inputHandle, Operand tensor, Operand indices) { + return TensorListScatterIntoExistingList.create(scope, inputHandle, tensor, indices); } /** - * Builds an {@link Rpc} operation + * Builds an {@link ScaleAndTranslate} operation * - * @param address `0-D` or `1-D`. The address (i.e. host_name:port) of the RPC server. - * @param method `0-D` or `1-D`. The method address on the RPC server. - * @param request `0-D` or `1-D`. Serialized proto strings: the rpc request argument. + * @param images + * @param size + * @param scale + * @param translation * @param options carries optional attributes values - * @return a new instance of Rpc - * @see org.tensorflow.op.core.Rpc + * @return a new instance of ScaleAndTranslate + * @see org.tensorflow.op.core.ScaleAndTranslate */ - public Rpc rpc(Operand address, Operand method, Operand request, - Rpc.Options... options) { - return Rpc.create(scope, address, method, request, options); + public ScaleAndTranslate scaleAndTranslate(Operand images, + Operand size, Operand scale, Operand translation, + ScaleAndTranslate.Options... options) { + return ScaleAndTranslate.create(scope, images, size, scale, translation, options); } /** - * Builds an {@link TensorListConcatLists} operation + * Builds an {@link SpaceToBatchNd} operation * - * @param inputA - * @param inputB - * @param elementDtype - * @return a new instance of TensorListConcatLists - * @see org.tensorflow.op.core.TensorListConcatLists + * @param input N-D with shape `input_shape = [batch] + spatial_shape + remaining_shape`, + * @param blockShape 1-D with shape `[M]`, all values must be >= 1. + * @param paddings 2-D with shape `[M, 2]`, all values must be >= 0. + * @return a new instance of SpaceToBatchNd + * @see org.tensorflow.op.core.SpaceToBatchNd */ - public TensorListConcatLists tensorListConcatLists(Operand inputA, Operand inputB, - Class elementDtype) { - return TensorListConcatLists.create(scope, inputA, inputB, elementDtype); + public SpaceToBatchNd spaceToBatchNd( + Operand input, Operand blockShape, Operand paddings) { + return SpaceToBatchNd.create(scope, input, blockShape, paddings); } /** - * Builds an {@link Batch} operation + * Builds an {@link RefNextIteration} operation * - * @param inTensors - * @param numBatchThreads - * @param maxBatchSize - * @param batchTimeoutMicros - * @param gradTimeoutMicros - * @param options carries optional attributes values - * @return a new instance of Batch - * @see org.tensorflow.op.core.Batch + * @param data The tensor to be made available to the next iteration. + * @return a new instance of RefNextIteration + * @see org.tensorflow.op.core.RefNextIteration */ - public Batch batch(Iterable> inTensors, Long numBatchThreads, Long maxBatchSize, - Long batchTimeoutMicros, Long gradTimeoutMicros, Batch.Options... options) { - return Batch.create(scope, inTensors, numBatchThreads, maxBatchSize, batchTimeoutMicros, gradTimeoutMicros, options); + public RefNextIteration refNextIteration(Operand data) { + return RefNextIteration.create(scope, data); } /** - * Builds an {@link Constant} operation + * Builds an {@link GatherNd} operation * - * @param data An array containing the values to put into the new constant. The dimensions of the - * @see org.tensorflow.op.core.Constant + * @param params The tensor from which to gather values. + * @param indices Index tensor. + * @return a new instance of GatherNd + * @see org.tensorflow.op.core.GatherNd */ - public Constant constant(int[][][][][][] data) { - return Constant.create(scope, data); + public GatherNd gatherNd(Operand params, Operand indices) { + return GatherNd.create(scope, params, indices); } /** - * Builds an {@link SetDiff1d} operation + * Builds an {@link AssertThat} operation * - * @param x 1-D. Values to keep. - * @param y 1-D. Values to remove. - * @param outIdx - * @return a new instance of SetDiff1d - * @see org.tensorflow.op.core.SetDiff1d + * @param condition The condition to evaluate. + * @param data The tensors to print out when condition is false. + * @param options carries optional attributes values + * @return a new instance of AssertThat + * @see org.tensorflow.op.core.AssertThat */ - public SetDiff1d setDiff1d(Operand x, Operand y, - Class outIdx) { - return SetDiff1d.create(scope, x, y, outIdx); + public AssertThat assertThat(Operand condition, Iterable> data, + AssertThat.Options... options) { + return AssertThat.create(scope, condition, data, options); } /** - * Builds an {@link Einsum} operation + * Builds an {@link Unstack} operation * - * @param inputs List of 1 or 2 Tensors. - * @param equation String describing the Einstein Summation operation; in the format of np.einsum. - * @return a new instance of Einsum - * @see org.tensorflow.op.core.Einsum + * @param value 1-D or higher, with `axis` dimension size equal to `num`. + * @param num + * @param options carries optional attributes values + * @return a new instance of Unstack + * @see org.tensorflow.op.core.Unstack */ - public Einsum einsum(Iterable> inputs, String equation) { - return Einsum.create(scope, inputs, equation); + public Unstack unstack(Operand value, Long num, Unstack.Options... options) { + return Unstack.create(scope, value, num, options); } /** - * Builds an {@link LinSpace} operation + * Builds an {@link MirrorPad} operation * - * @param start 0-D tensor. First entry in the range. - * @param stop 0-D tensor. Last entry in the range. - * @param num 0-D tensor. Number of values to generate. - * @return a new instance of LinSpace - * @see org.tensorflow.op.core.LinSpace + * @param input The input tensor to be padded. + * @param paddings A two-column matrix specifying the padding sizes. The number of + * @param mode Either `REFLECT` or `SYMMETRIC`. In reflect mode the padded regions + * @return a new instance of MirrorPad + * @see org.tensorflow.op.core.MirrorPad */ - public LinSpace linSpace(Operand start, - Operand stop, Operand num) { - return LinSpace.create(scope, start, stop, num); + public MirrorPad mirrorPad(Operand input, Operand paddings, + String mode) { + return MirrorPad.create(scope, input, paddings, mode); + } + + /** + * Builds an {@link TensorListReserve} operation + * + * @param elementShape + * @param numElements + * @param elementDtype + * @return a new instance of TensorListReserve + * @see org.tensorflow.op.core.TensorListReserve + */ + public TensorListReserve tensorListReserve(Operand elementShape, + Operand numElements, DataType elementDtype) { + return TensorListReserve.create(scope, elementShape, numElements, elementDtype); } /** @@ -1854,468 +1806,466 @@ public LinSpace linSpace(Operand star * @return a new instance of StatefulStandardNormal * @see org.tensorflow.op.core.StatefulStandardNormal */ - public StatefulStandardNormal statefulStandardNormal(Operand resource, + public StatefulStandardNormal statefulStandardNormal(Operand resource, Operand shape) { return StatefulStandardNormal.create(scope, resource, shape); } /** - * Builds an {@link Empty} operation + * Builds an {@link ScatterUpdate} operation * - * @param shape 1-D. Represents the shape of the output tensor. - * @param dtype + * @param ref Should be from a `Variable` node. + * @param indices A tensor of indices into the first dimension of `ref`. + * @param updates A tensor of updated values to store in `ref`. * @param options carries optional attributes values - * @return a new instance of Empty - * @see org.tensorflow.op.core.Empty + * @return a new instance of ScatterUpdate + * @see org.tensorflow.op.core.ScatterUpdate */ - public Empty empty(Operand shape, Class dtype, Empty.Options... options) { - return Empty.create(scope, shape, dtype, options); + public ScatterUpdate scatterUpdate(Operand ref, Operand indices, + Operand updates, ScatterUpdate.Options... options) { + return ScatterUpdate.create(scope, ref, indices, updates, options); } /** - * Builds an {@link Constant} operation + * Builds an {@link Unbatch} operation * - * @param data An array containing the values to put into the new constant. The dimensions of the - * @see org.tensorflow.op.core.Constant + * @param batchedTensor + * @param batchIndex + * @param id + * @param timeoutMicros + * @param options carries optional attributes values + * @return a new instance of Unbatch + * @see org.tensorflow.op.core.Unbatch */ - public Constant constant(long[] data) { - return Constant.create(scope, data); + public Unbatch unbatch(Operand batchedTensor, Operand batchIndex, + Operand id, Long timeoutMicros, Unbatch.Options... options) { + return Unbatch.create(scope, batchedTensor, batchIndex, id, timeoutMicros, options); } /** - * Builds an {@link Stack} operation + * Builds an {@link BatchToSpaceNd} operation * - * @param values Must be of same shape and type. - * @param options carries optional attributes values - * @return a new instance of Stack - * @see org.tensorflow.op.core.Stack + * @param input N-D with shape `input_shape = [batch] + spatial_shape + remaining_shape`, + * @param blockShape 1-D with shape `[M]`, all values must be >= 1. + * @param crops 2-D with shape `[M, 2]`, all values must be >= 0. + * @return a new instance of BatchToSpaceNd + * @see org.tensorflow.op.core.BatchToSpaceNd */ - public Stack stack(Iterable> values, Stack.Options... options) { - return Stack.create(scope, values, options); + public BatchToSpaceNd batchToSpaceNd( + Operand input, Operand blockShape, Operand crops) { + return BatchToSpaceNd.create(scope, input, blockShape, crops); } /** - * Builds an {@link BarrierInsertMany} operation + * Builds an {@link NoOp} operation * - * @param handle The handle to a barrier. - * @param keys A one-dimensional tensor of keys, with length n. - * @param values An any-dimensional tensor of values, which are associated with the - * @param componentIndex The component of the barrier elements that is being assigned. - * @return a new instance of BarrierInsertMany - * @see org.tensorflow.op.core.BarrierInsertMany + * @return a new instance of NoOp + * @see org.tensorflow.op.core.NoOp */ - public BarrierInsertMany barrierInsertMany(Operand handle, Operand keys, - Operand values, Long componentIndex) { - return BarrierInsertMany.create(scope, handle, keys, values, componentIndex); + public NoOp noOp() { + return NoOp.create(scope); } /** - * Builds an {@link Constant} operation + * Builds an {@link ScatterNdSub} operation * - * @param data An array containing the values to put into the new constant. The dimensions of the - * @see org.tensorflow.op.core.Constant + * @param ref A mutable Tensor. Should be from a Variable node. + * @param indices A Tensor. Must be one of the following types: int32, int64. + * @param updates A Tensor. Must have the same type as ref. A tensor of updated values + * @param options carries optional attributes values + * @return a new instance of ScatterNdSub + * @see org.tensorflow.op.core.ScatterNdSub */ - public Constant constant(long[][][][][] data) { - return Constant.create(scope, data); + public ScatterNdSub scatterNdSub(Operand ref, Operand indices, + Operand updates, ScatterNdSub.Options... options) { + return ScatterNdSub.create(scope, ref, indices, updates, options); } /** - * Builds an {@link Stage} operation + * Builds an {@link ResourceApplyKerasMomentum} operation * - * @param values a list of tensors + * @param var Should be from a Variable(). + * @param accum Should be from a Variable(). + * @param lr Scaling factor. Must be a scalar. + * @param grad The gradient. + * @param momentum Momentum. Must be a scalar. * @param options carries optional attributes values - * @return a new instance of Stage - * @see org.tensorflow.op.core.Stage + * @return a new instance of ResourceApplyKerasMomentum + * @see org.tensorflow.op.core.ResourceApplyKerasMomentum */ - public Stage stage(Iterable> values, Stage.Options... options) { - return Stage.create(scope, values, options); + public ResourceApplyKerasMomentum resourceApplyKerasMomentum(Operand var, Operand accum, + Operand lr, Operand grad, Operand momentum, + ResourceApplyKerasMomentum.Options... options) { + return ResourceApplyKerasMomentum.create(scope, var, accum, lr, grad, momentum, options); } /** - * Builds an {@link TensorArraySplit} operation + * Builds an {@link TensorListLength} operation * - * @param handle The handle to a TensorArray. - * @param value The concatenated tensor to write to the TensorArray. - * @param lengths The vector of lengths, how to split the rows of value into the - * @param flowIn A float scalar that enforces proper chaining of operations. - * @return a new instance of TensorArraySplit - * @see org.tensorflow.op.core.TensorArraySplit + * @param inputHandle + * @return a new instance of TensorListLength + * @see org.tensorflow.op.core.TensorListLength */ - public TensorArraySplit tensorArraySplit(Operand handle, Operand value, - Operand lengths, Operand flowIn) { - return TensorArraySplit.create(scope, handle, value, lengths, flowIn); + public TensorListLength tensorListLength(Operand inputHandle) { + return TensorListLength.create(scope, inputHandle); } /** - * Builds an {@link TensorArrayGather} operation + * Builds an {@link OrderedMapClear} operation * - * @param handle The handle to a TensorArray. - * @param indices The locations in the TensorArray from which to read tensor elements. - * @param flowIn A float scalar that enforces proper chaining of operations. - * @param dtype The type of the elem that is returned. + * @param dtypes * @param options carries optional attributes values - * @return a new instance of TensorArrayGather - * @see org.tensorflow.op.core.TensorArrayGather - */ - public TensorArrayGather tensorArrayGather(Operand handle, Operand indices, - Operand flowIn, Class dtype, TensorArrayGather.Options... options) { - return TensorArrayGather.create(scope, handle, indices, flowIn, dtype, options); - } - - /** - * Builds an {@link ParallelDynamicStitch} operation - * - * @param indices - * @param data - * @return a new instance of ParallelDynamicStitch - * @see org.tensorflow.op.core.ParallelDynamicStitch + * @return a new instance of OrderedMapClear + * @see org.tensorflow.op.core.OrderedMapClear */ - public ParallelDynamicStitch parallelDynamicStitch(Iterable> indices, - Iterable> data) { - return ParallelDynamicStitch.create(scope, indices, data); + public OrderedMapClear orderedMapClear(List> dtypes, + OrderedMapClear.Options... options) { + return OrderedMapClear.create(scope, dtypes, options); } /** - * Builds an {@link Any} operation + * Builds an {@link ImmutableConst} operation * - * @param input The tensor to reduce. - * @param axis The dimensions to reduce. Must be in the range - * @param options carries optional attributes values - * @return a new instance of Any - * @see org.tensorflow.op.core.Any + * @param dtype Type of the returned tensor. + * @param shape Shape of the returned tensor. + * @param memoryRegionName Name of readonly memory region used by the tensor, see + * @return a new instance of ImmutableConst + * @see org.tensorflow.op.core.ImmutableConst */ - public Any any(Operand input, Operand axis, - Any.Options... options) { - return Any.create(scope, input, axis, options); + public ImmutableConst immutableConst(DataType dtype, Shape shape, + String memoryRegionName) { + return ImmutableConst.create(scope, dtype, shape, memoryRegionName); } /** - * Builds an {@link Constant} operation + * Builds an {@link StopGradient} operation * - * @param data An array containing the values to put into the new constant. The dimensions of the - * @see org.tensorflow.op.core.Constant + * @param input + * @return a new instance of StopGradient + * @see org.tensorflow.op.core.StopGradient */ - public Constant constant(double[][][] data) { - return Constant.create(scope, data); + public StopGradient stopGradient(Operand input) { + return StopGradient.create(scope, input); } /** - * Builds an {@link Constant} operation + * Builds an {@link Identity} operation * - * @param type the tensor datatype. - * @param shape the tensor shape. - * @param data a buffer containing the tensor data. - * @return a constant of type `type` - * @throws IllegalArgumentException If the tensor datatype or shape is not compatible with the - * @see org.tensorflow.op.core.Constant + * @param input + * @return a new instance of Identity + * @see org.tensorflow.op.core.Identity */ - public Constant constant(Class type, long[] shape, ByteBuffer data) { - return Constant.create(scope, type, shape, data); + public Identity identity(Operand input) { + return Identity.create(scope, input); } /** - * Builds an {@link GuaranteeConst} operation + * Builds an {@link Skipgram} operation * - * @param input - * @return a new instance of GuaranteeConst - * @see org.tensorflow.op.core.GuaranteeConst + * @param filename The corpus's text file name. + * @param batchSize The size of produced batch. + * @param options carries optional attributes values + * @return a new instance of Skipgram + * @see org.tensorflow.op.core.Skipgram */ - public GuaranteeConst guaranteeConst(Operand input) { - return GuaranteeConst.create(scope, input); + public Skipgram skipgram(String filename, Long batchSize, Skipgram.Options... options) { + return Skipgram.create(scope, filename, batchSize, options); } /** - * Builds an {@link TensorListConcat} operation + * Builds an {@link TensorArrayClose} operation * - * @param inputHandle - * @param elementDtype - * @param options carries optional attributes values - * @return a new instance of TensorListConcat - * @see org.tensorflow.op.core.TensorListConcat + * @param handle The handle to a TensorArray (output of TensorArray or TensorArrayGrad). + * @return a new instance of TensorArrayClose + * @see org.tensorflow.op.core.TensorArrayClose */ - public TensorListConcat tensorListConcat(Operand inputHandle, Class elementDtype, - TensorListConcat.Options... options) { - return TensorListConcat.create(scope, inputHandle, elementDtype, options); + public TensorArrayClose tensorArrayClose(Operand handle) { + return TensorArrayClose.create(scope, handle); } /** - * Builds an {@link QuantizedConcatV2} operation + * Builds an {@link Tile} operation * - * @param values - * @param axis - * @param inputMins - * @param inputMaxes - * @return a new instance of QuantizedConcatV2 - * @see org.tensorflow.op.core.QuantizedConcatV2 + * @param input 1-D or higher. + * @param multiples 1-D. Length must be the same as the number of dimensions in `input` + * @return a new instance of Tile + * @see org.tensorflow.op.core.Tile */ - public QuantizedConcatV2 quantizedConcatV2(Iterable> values, - Operand axis, Iterable> inputMins, Iterable> inputMaxes) { - return QuantizedConcatV2.create(scope, values, axis, inputMins, inputMaxes); + public Tile tile(Operand input, Operand multiples) { + return Tile.create(scope, input, multiples); } /** - * Builds an {@link TensorScatterAdd} operation + * Builds an {@link TensorListPopBack} operation * - * @param tensor Tensor to copy/update. - * @param indices Index tensor. - * @param updates Updates to scatter into output. - * @return a new instance of TensorScatterAdd - * @see org.tensorflow.op.core.TensorScatterAdd + * @param inputHandle + * @param elementShape + * @param elementDtype + * @return a new instance of TensorListPopBack + * @see org.tensorflow.op.core.TensorListPopBack */ - public TensorScatterAdd tensorScatterAdd(Operand tensor, - Operand indices, Operand updates) { - return TensorScatterAdd.create(scope, tensor, indices, updates); + public TensorListPopBack tensorListPopBack(Operand inputHandle, + Operand elementShape, DataType elementDtype) { + return TensorListPopBack.create(scope, inputHandle, elementShape, elementDtype); } /** - * Builds an {@link RefNextIteration} operation + * Builds an {@link TensorListConcatV2} operation * - * @param data The tensor to be made available to the next iteration. - * @return a new instance of RefNextIteration - * @see org.tensorflow.op.core.RefNextIteration + * @param inputHandle + * @param elementShape + * @param leadingDims + * @param elementDtype + * @return a new instance of TensorListConcatV2 + * @see org.tensorflow.op.core.TensorListConcatV2 */ - public RefNextIteration refNextIteration(Operand data) { - return RefNextIteration.create(scope, data); + public TensorListConcatV2 tensorListConcatV2(Operand inputHandle, + Operand elementShape, Operand leadingDims, DataType elementDtype) { + return TensorListConcatV2.create(scope, inputHandle, elementShape, leadingDims, elementDtype); } /** - * Builds an {@link Unstack} operation + * Builds an {@link ReverseSequence} operation * - * @param value 1-D or higher, with `axis` dimension size equal to `num`. - * @param num + * @param input The input to reverse. + * @param seqLengths 1-D with length `input.dims(batch_dim)` and + * @param seqDim The dimension which is partially reversed. * @param options carries optional attributes values - * @return a new instance of Unstack - * @see org.tensorflow.op.core.Unstack + * @return a new instance of ReverseSequence + * @see org.tensorflow.op.core.ReverseSequence */ - public Unstack unstack(Operand value, Long num, Unstack.Options... options) { - return Unstack.create(scope, value, num, options); + public ReverseSequence reverseSequence(Operand input, + Operand seqLengths, Long seqDim, ReverseSequence.Options... options) { + return ReverseSequence.create(scope, input, seqLengths, seqDim, options); } /** - * Builds an {@link Unbatch} operation + * Builds an {@link Print} operation * - * @param batchedTensor - * @param batchIndex - * @param id - * @param timeoutMicros + * @param input The string scalar to print. * @param options carries optional attributes values - * @return a new instance of Unbatch - * @see org.tensorflow.op.core.Unbatch + * @return a new instance of Print + * @see org.tensorflow.op.core.Print */ - public Unbatch unbatch(Operand batchedTensor, Operand batchIndex, - Operand id, Long timeoutMicros, Unbatch.Options... options) { - return Unbatch.create(scope, batchedTensor, batchIndex, id, timeoutMicros, options); + public Print print(Operand input, Print.Options... options) { + return Print.create(scope, input, options); } /** - * Builds an {@link ParallelConcat} operation + * Builds an {@link ShapeN} operation * - * @param values Tensors to be concatenated. All must have size 1 in the first dimension - * @param shape the final shape of the result; should be equal to the shapes of any input - * @return a new instance of ParallelConcat - * @see org.tensorflow.op.core.ParallelConcat + * @param input + * @param outType + * @return a new instance of ShapeN + * @see org.tensorflow.op.core.ShapeN */ - public ParallelConcat parallelConcat(Iterable> values, Shape shape) { - return ParallelConcat.create(scope, values, shape); + public ShapeN shapeN(Iterable> input, DataType outType) { + return ShapeN.create(scope, input, outType); } /** - * Builds an {@link ScatterDiv} operation + * Builds an {@link InitializeTableFromTextFile} operation * - * @param ref Should be from a `Variable` node. - * @param indices A tensor of indices into the first dimension of `ref`. - * @param updates A tensor of values that `ref` is divided by. + * @param tableHandle Handle to a table which will be initialized. + * @param filename Filename of a vocabulary text file. + * @param keyIndex Column index in a line to get the table `key` values from. + * @param valueIndex Column index that represents information of a line to get the table * @param options carries optional attributes values - * @return a new instance of ScatterDiv - * @see org.tensorflow.op.core.ScatterDiv + * @return a new instance of InitializeTableFromTextFile + * @see org.tensorflow.op.core.InitializeTableFromTextFile */ - public ScatterDiv scatterDiv(Operand ref, Operand indices, - Operand updates, ScatterDiv.Options... options) { - return ScatterDiv.create(scope, ref, indices, updates, options); + public InitializeTableFromTextFile initializeTableFromTextFile(Operand tableHandle, + Operand filename, Long keyIndex, Long valueIndex, + InitializeTableFromTextFile.Options... options) { + return InitializeTableFromTextFile.create(scope, tableHandle, filename, keyIndex, valueIndex, options); } /** - * Builds an {@link Gradients} operation + * Builds an {@link AssignAddVariableOp} operation * - * @param y outputs of the function to derive - * @param x inputs of the function for which partial derivatives are computed - * @param options carries optional attributes values - * @return a new instance of {@code Gradients} - * @throws IllegalArgumentException if execution environment is not a graph - * @see org.tensorflow.op.core.Gradients + * @param resource handle to the resource in which to store the variable. + * @param value the value by which the variable will be incremented. + * @return a new instance of AssignAddVariableOp + * @see org.tensorflow.op.core.AssignAddVariableOp */ - public Gradients gradients(Iterable> y, Iterable> x, - Gradients.Options... options) { - return Gradients.create(scope, y, x, options); + public AssignAddVariableOp assignAddVariableOp(Operand resource, Operand value) { + return AssignAddVariableOp.create(scope, resource, value); } /** - * Builds an {@link NoOp} operation + * Builds an {@link Lu} operation * - * @return a new instance of NoOp - * @see org.tensorflow.op.core.NoOp + * @param input A tensor of shape `[..., M, M]` whose inner-most 2 dimensions form matrices of + * @param outputIdxType + * @return a new instance of Lu + * @see org.tensorflow.op.core.Lu */ - public NoOp noOp() { - return NoOp.create(scope); + public Lu lu(Operand input, DataType outputIdxType) { + return Lu.create(scope, input, outputIdxType); } /** - * Builds an {@link ResourceApplyKerasMomentum} operation + * Builds an {@link ResourceScatterSub} operation * - * @param var Should be from a Variable(). - * @param accum Should be from a Variable(). - * @param lr Scaling factor. Must be a scalar. - * @param grad The gradient. - * @param momentum Momentum. Must be a scalar. - * @param options carries optional attributes values - * @return a new instance of ResourceApplyKerasMomentum - * @see org.tensorflow.op.core.ResourceApplyKerasMomentum + * @param resource Should be from a `Variable` node. + * @param indices A tensor of indices into the first dimension of `ref`. + * @param updates A tensor of updated values to add to `ref`. + * @return a new instance of ResourceScatterSub + * @see org.tensorflow.op.core.ResourceScatterSub */ - public ResourceApplyKerasMomentum resourceApplyKerasMomentum(Operand var, Operand accum, - Operand lr, Operand grad, Operand momentum, - ResourceApplyKerasMomentum.Options... options) { - return ResourceApplyKerasMomentum.create(scope, var, accum, lr, grad, momentum, options); + public ResourceScatterSub resourceScatterSub(Operand resource, + Operand indices, Operand updates) { + return ResourceScatterSub.create(scope, resource, indices, updates); } /** - * Builds an {@link TemporaryVariable} operation + * Builds an {@link ParallelDynamicStitch} operation * - * @param shape The shape of the variable tensor. - * @param dtype The type of elements in the variable tensor. - * @param options carries optional attributes values - * @return a new instance of TemporaryVariable - * @see org.tensorflow.op.core.TemporaryVariable + * @param indices + * @param data + * @return a new instance of ParallelDynamicStitch + * @see org.tensorflow.op.core.ParallelDynamicStitch */ - public TemporaryVariable temporaryVariable(Shape shape, Class dtype, - TemporaryVariable.Options... options) { - return TemporaryVariable.create(scope, shape, dtype, options); + public ParallelDynamicStitch parallelDynamicStitch(Iterable> indices, + Iterable> data) { + return ParallelDynamicStitch.create(scope, indices, data); } /** - * Builds an {@link TensorListLength} operation + * Builds an {@link AssignSub} operation * - * @param inputHandle - * @return a new instance of TensorListLength - * @see org.tensorflow.op.core.TensorListLength + * @param ref Should be from a `Variable` node. + * @param value The value to be subtracted to the variable. + * @param options carries optional attributes values + * @return a new instance of AssignSub + * @see org.tensorflow.op.core.AssignSub */ - public TensorListLength tensorListLength(Operand inputHandle) { - return TensorListLength.create(scope, inputHandle); + public AssignSub assignSub(Operand ref, Operand value, + AssignSub.Options... options) { + return AssignSub.create(scope, ref, value, options); } /** - * Builds an {@link Min} operation + * Builds an {@link Lu} operation * - * @param input The tensor to reduce. - * @param axis The dimensions to reduce. Must be in the range - * @param options carries optional attributes values - * @return a new instance of Min - * @see org.tensorflow.op.core.Min + * @param input A tensor of shape `[..., M, M]` whose inner-most 2 dimensions form matrices of + * @return a new instance of Lu + * @see org.tensorflow.op.core.Lu */ - public Min min(Operand input, Operand axis, - Min.Options... options) { - return Min.create(scope, input, axis, options); + public Lu lu(Operand input) { + return Lu.create(scope, input); } /** - * Builds an {@link StopGradient} operation + * Builds an {@link Size} operation * * @param input - * @return a new instance of StopGradient - * @see org.tensorflow.op.core.StopGradient + * @return a new instance of Size + * @see org.tensorflow.op.core.Size */ - public StopGradient stopGradient(Operand input) { - return StopGradient.create(scope, input); + public Size size(Operand input) { + return Size.create(scope, input); } /** - * Builds an {@link CudnnRNNParamsToCanonicalV2} operation + * Builds an {@link Mutex} operation * - * @param numLayers - * @param numUnits - * @param inputSize - * @param params - * @param numParamsWeights - * @param numParamsBiases * @param options carries optional attributes values - * @return a new instance of CudnnRNNParamsToCanonicalV2 - * @see org.tensorflow.op.core.CudnnRNNParamsToCanonicalV2 + * @return a new instance of Mutex + * @see org.tensorflow.op.core.Mutex */ - public CudnnRNNParamsToCanonicalV2 cudnnRNNParamsToCanonicalV2( - Operand numLayers, Operand numUnits, Operand inputSize, - Operand params, Long numParamsWeights, Long numParamsBiases, - CudnnRNNParamsToCanonicalV2.Options... options) { - return CudnnRNNParamsToCanonicalV2.create(scope, numLayers, numUnits, inputSize, params, numParamsWeights, numParamsBiases, options); + public Mutex mutex(Mutex.Options... options) { + return Mutex.create(scope, options); } /** - * Builds an {@link Identity} operation + * Builds an {@link StatefulRandomBinomial} operation * - * @param input - * @return a new instance of Identity - * @see org.tensorflow.op.core.Identity + * @param resource + * @param algorithm + * @param shape + * @param counts + * @param probs + * @return a new instance of StatefulRandomBinomial + * @see org.tensorflow.op.core.StatefulRandomBinomial */ - public Identity identity(Operand input) { - return Identity.create(scope, input); + public StatefulRandomBinomial statefulRandomBinomial( + Operand resource, Operand algorithm, Operand shape, Operand counts, + Operand probs) { + return StatefulRandomBinomial.create(scope, resource, algorithm, shape, counts, probs); } /** - * Builds an {@link Constant} operation + * Builds an {@link Split} operation * - * @param data An array containing the values to put into the new constant. The dimensions of the - * @see org.tensorflow.op.core.Constant + * @param axis 0-D. The dimension along which to split. Must be in the range + * @param value The tensor to split. + * @param numSplit The number of ways to split. Must evenly divide + * @return a new instance of Split + * @see org.tensorflow.op.core.Split */ - public Constant constant(long[][][][] data) { - return Constant.create(scope, data); + public Split split(Operand axis, Operand value, Long numSplit) { + return Split.create(scope, axis, value, numSplit); } /** - * Builds an {@link Skipgram} operation + * Builds an {@link RemoteFusedGraphExecute} operation * - * @param filename The corpus's text file name. - * @param batchSize The size of produced batch. - * @param options carries optional attributes values - * @return a new instance of Skipgram - * @see org.tensorflow.op.core.Skipgram + * @param inputs Arbitrary number of tensors with arbitrary data types + * @param Toutputs + * @param serializedRemoteFusedGraphExecuteInfo Serialized protocol buffer + * @return a new instance of RemoteFusedGraphExecute + * @see org.tensorflow.op.core.RemoteFusedGraphExecute */ - public Skipgram skipgram(String filename, Long batchSize, Skipgram.Options... options) { - return Skipgram.create(scope, filename, batchSize, options); + public RemoteFusedGraphExecute remoteFusedGraphExecute(Iterable> inputs, + List> Toutputs, String serializedRemoteFusedGraphExecuteInfo) { + return RemoteFusedGraphExecute.create(scope, inputs, Toutputs, serializedRemoteFusedGraphExecuteInfo); } /** - * Builds an {@link TensorArrayClose} operation + * Builds an {@link ScatterMax} operation * - * @param handle The handle to a TensorArray (output of TensorArray or TensorArrayGrad). - * @return a new instance of TensorArrayClose - * @see org.tensorflow.op.core.TensorArrayClose + * @param ref Should be from a `Variable` node. + * @param indices A tensor of indices into the first dimension of `ref`. + * @param updates A tensor of updated values to reduce into `ref`. + * @param options carries optional attributes values + * @return a new instance of ScatterMax + * @see org.tensorflow.op.core.ScatterMax */ - public TensorArrayClose tensorArrayClose(Operand handle) { - return TensorArrayClose.create(scope, handle); + public ScatterMax scatterMax(Operand ref, + Operand indices, Operand updates, ScatterMax.Options... options) { + return ScatterMax.create(scope, ref, indices, updates, options); } /** - * Builds an {@link StatefulStandardNormalV2} operation + * Builds an {@link TensorArrayGrad} operation * - * @param resource The handle of the resource variable that stores the state of the RNG. - * @param algorithm The RNG algorithm. - * @param shape The shape of the output tensor. - * @param dtype The type of the output. - * @return a new instance of StatefulStandardNormalV2 - * @see org.tensorflow.op.core.StatefulStandardNormalV2 + * @param handle The handle to the forward TensorArray. + * @param flowIn A float scalar that enforces proper chaining of operations. + * @param source The gradient source string, used to decide which gradient TensorArray + * @return a new instance of TensorArrayGrad + * @see org.tensorflow.op.core.TensorArrayGrad */ - public StatefulStandardNormalV2 statefulStandardNormalV2(Operand resource, - Operand algorithm, Operand shape, Class dtype) { - return StatefulStandardNormalV2.create(scope, resource, algorithm, shape, dtype); + public TensorArrayGrad tensorArrayGrad(Operand handle, Operand flowIn, String source) { + return TensorArrayGrad.create(scope, handle, flowIn, source); } /** - * Builds an {@link Constant} operation + * Builds an {@link TensorStridedSliceUpdate} operation * - * @param data The string to put into the new constant. - * @return a string constant - * @see org.tensorflow.op.core.Constant + * @param input + * @param begin + * @param end + * @param strides + * @param value + * @param options carries optional attributes values + * @return a new instance of TensorStridedSliceUpdate + * @see org.tensorflow.op.core.TensorStridedSliceUpdate */ - public Constant constant(String data) { - return Constant.create(scope, data); + public TensorStridedSliceUpdate tensorStridedSliceUpdate( + Operand input, Operand begin, Operand end, Operand strides, Operand value, + TensorStridedSliceUpdate.Options... options) { + return TensorStridedSliceUpdate.create(scope, input, begin, end, strides, value, options); } /** @@ -2327,170 +2277,56 @@ public Constant constant(String data) { * @return a new instance of Prod * @see org.tensorflow.op.core.Prod */ - public Prod prod(Operand input, Operand axis, + public Prod prod(Operand input, Operand axis, Prod.Options... options) { return Prod.create(scope, input, axis, options); } /** - * Builds an {@link Constant} operation - * - * @param data An array containing the values to put into the new constant. String elements are - * @see org.tensorflow.op.core.Constant - */ - public Constant constant(byte[][][][][][] data) { - return Constant.create(scope, data); - } - - /** - * Builds an {@link SetSize} operation - * - * @param setIndices 2D `Tensor`, indices of a `SparseTensor`. - * @param setValues 1D `Tensor`, values of a `SparseTensor`. - * @param setShape 1D `Tensor`, shape of a `SparseTensor`. - * @param options carries optional attributes values - * @return a new instance of SetSize - * @see org.tensorflow.op.core.SetSize - */ - public SetSize setSize(Operand setIndices, Operand setValues, Operand setShape, - SetSize.Options... options) { - return SetSize.create(scope, setIndices, setValues, setShape, options); - } - - /** - * Builds an {@link LookupTableExport} operation + * Builds an {@link LookupTableFind} operation * * @param tableHandle Handle to the table. - * @param Tkeys - * @param Tvalues - * @return a new instance of LookupTableExport - * @see org.tensorflow.op.core.LookupTableExport - */ - public LookupTableExport lookupTableExport(Operand tableHandle, Class Tkeys, - Class Tvalues) { - return LookupTableExport.create(scope, tableHandle, Tkeys, Tvalues); - } - - /** - * Builds an {@link Fill} operation - * - * @param dims 1-D. Represents the shape of the output tensor. - * @param value 0-D (scalar). Value to fill the returned tensor. - * @return a new instance of Fill - * @see org.tensorflow.op.core.Fill - */ - public Fill fill(Operand dims, Operand value) { - return Fill.create(scope, dims, value); - } - - /** - * Builds an {@link AssignAddVariableOp} operation - * - * @param resource handle to the resource in which to store the variable. - * @param value the value by which the variable will be incremented. - * @return a new instance of AssignAddVariableOp - * @see org.tensorflow.op.core.AssignAddVariableOp + * @param keys Any shape. Keys to look up. + * @param defaultValue + * @return a new instance of LookupTableFind + * @see org.tensorflow.op.core.LookupTableFind */ - public AssignAddVariableOp assignAddVariableOp(Operand resource, Operand value) { - return AssignAddVariableOp.create(scope, resource, value); + public LookupTableFind lookupTableFind(Operand tableHandle, Operand keys, + Operand defaultValue) { + return LookupTableFind.create(scope, tableHandle, keys, defaultValue); } /** - * Builds an {@link AssignSub} operation + * Builds an {@link ScatterNdAdd} operation * - * @param ref Should be from a `Variable` node. - * @param value The value to be subtracted to the variable. + * @param ref A mutable Tensor. Should be from a Variable node. + * @param indices A Tensor. Must be one of the following types: int32, int64. + * @param updates A Tensor. Must have the same type as ref. A tensor of updated values * @param options carries optional attributes values - * @return a new instance of AssignSub - * @see org.tensorflow.op.core.AssignSub + * @return a new instance of ScatterNdAdd + * @see org.tensorflow.op.core.ScatterNdAdd */ - public AssignSub assignSub(Operand ref, Operand value, - AssignSub.Options... options) { - return AssignSub.create(scope, ref, value, options); + public ScatterNdAdd scatterNdAdd(Operand ref, Operand indices, + Operand updates, ScatterNdAdd.Options... options) { + return ScatterNdAdd.create(scope, ref, indices, updates, options); } /** - * Builds an {@link LoopCond} operation + * Builds an {@link ResourceScatterMul} operation * - * @param input A boolean scalar, representing the branch predicate of the Switch op. - * @return a new instance of LoopCond - * @see org.tensorflow.op.core.LoopCond + * @param resource Should be from a `Variable` node. + * @param indices A tensor of indices into the first dimension of `ref`. + * @param updates A tensor of updated values to add to `ref`. + * @return a new instance of ResourceScatterMul + * @see org.tensorflow.op.core.ResourceScatterMul */ - public LoopCond loopCond(Operand input) { - return LoopCond.create(scope, input); + public ResourceScatterMul resourceScatterMul(Operand resource, + Operand indices, Operand updates) { + return ResourceScatterMul.create(scope, resource, indices, updates); } /** - * Builds an {@link BarrierTakeMany} operation - * - * @param handle The handle to a barrier. - * @param numElements A single-element tensor containing the number of elements to - * @param componentTypes The type of each component in a value. - * @param options carries optional attributes values - * @return a new instance of BarrierTakeMany - * @see org.tensorflow.op.core.BarrierTakeMany - */ - public BarrierTakeMany barrierTakeMany(Operand handle, Operand numElements, - List> componentTypes, BarrierTakeMany.Options... options) { - return BarrierTakeMany.create(scope, handle, numElements, componentTypes, options); - } - - /** - * Builds an {@link MapUnstage} operation - * - * @param key - * @param indices - * @param dtypes - * @param options carries optional attributes values - * @return a new instance of MapUnstage - * @see org.tensorflow.op.core.MapUnstage - */ - public MapUnstage mapUnstage(Operand key, Operand indices, List> dtypes, - MapUnstage.Options... options) { - return MapUnstage.create(scope, key, indices, dtypes, options); - } - - /** - * Builds an {@link TensorArrayGradWithShape} operation - * - * @param handle The handle to the forward TensorArray. - * @param flowIn A float scalar that enforces proper chaining of operations. - * @param shapeToPrepend An int32 vector representing a shape. Elements in the gradient accumulator will - * @param source The gradient source string, used to decide which gradient TensorArray - * @return a new instance of TensorArrayGradWithShape - * @see org.tensorflow.op.core.TensorArrayGradWithShape - */ - public TensorArrayGradWithShape tensorArrayGradWithShape(Operand handle, Operand flowIn, - Operand shapeToPrepend, String source) { - return TensorArrayGradWithShape.create(scope, handle, flowIn, shapeToPrepend, source); - } - - /** - * Builds an {@link Mutex} operation - * - * @param options carries optional attributes values - * @return a new instance of Mutex - * @see org.tensorflow.op.core.Mutex - */ - public Mutex mutex(Mutex.Options... options) { - return Mutex.create(scope, options); - } - - /** - * Builds an {@link UniqueWithCounts} operation - * - * @param x A `Tensor`. - * @param axis A `Tensor` of type `int32` (default: None). The axis of the Tensor to - * @return a new instance of UniqueWithCounts - * @see org.tensorflow.op.core.UniqueWithCounts - */ - public UniqueWithCounts uniqueWithCounts(Operand x, - Operand axis) { - return UniqueWithCounts.create(scope, x, axis); - } - - /** - * Builds an {@link HistogramFixedWidth} operation + * Builds an {@link HistogramFixedWidth} operation * * @param values Numeric `Tensor`. * @param valueRange Shape [2] `Tensor` of same `dtype` as `values`. @@ -2499,707 +2335,266 @@ public UniqueWithCounts uniqueWithCounts(Opera * @return a new instance of HistogramFixedWidth * @see org.tensorflow.op.core.HistogramFixedWidth */ - public HistogramFixedWidth histogramFixedWidth( - Operand values, Operand valueRange, Operand nbins, Class dtype) { + public HistogramFixedWidth histogramFixedWidth( + Operand values, Operand valueRange, Operand nbins, DataType dtype) { return HistogramFixedWidth.create(scope, values, valueRange, nbins, dtype); } /** - * Builds an {@link MatrixDiagV2} operation - * - * @param diagonal Rank `r`, where `r >= 1` - * @param k Diagonal offset(s). Positive value means superdiagonal, 0 refers to the main - * @param numRows The number of rows of the output matrix. If it is not provided, the op assumes - * @param numCols The number of columns of the output matrix. If it is not provided, the op - * @param paddingValue The number to fill the area outside the specified diagonal band with. - * @return a new instance of MatrixDiagV2 - * @see org.tensorflow.op.core.MatrixDiagV2 - */ - public MatrixDiagV2 matrixDiagV2(Operand diagonal, Operand k, - Operand numRows, Operand numCols, Operand paddingValue) { - return MatrixDiagV2.create(scope, diagonal, k, numRows, numCols, paddingValue); - } - - /** - * Builds an {@link TensorScatterSub} operation - * - * @param tensor Tensor to copy/update. - * @param indices Index tensor. - * @param updates Updates to scatter into output. - * @return a new instance of TensorScatterSub - * @see org.tensorflow.op.core.TensorScatterSub - */ - public TensorScatterSub tensorScatterSub(Operand tensor, - Operand indices, Operand updates) { - return TensorScatterSub.create(scope, tensor, indices, updates); - } - - /** - * Builds an {@link Constant} operation - * - * @param data An array containing the values to put into the new constant. The dimensions of the - * @see org.tensorflow.op.core.Constant - */ - public Constant constant(boolean[] data) { - return Constant.create(scope, data); - } - - /** - * Builds an {@link Constant} operation - * - * @param data An array containing the values to put into the new constant. The dimensions of the - * @see org.tensorflow.op.core.Constant - */ - public Constant constant(double[][][][][][] data) { - return Constant.create(scope, data); - } - - /** - * Builds an {@link Constant} operation - * - * @param data An array containing the values to put into the new constant. String elements are - * @see org.tensorflow.op.core.Constant - */ - public Constant constant(byte[][][][][] data) { - return Constant.create(scope, data); - } - - /** - * Builds an {@link Constant} operation - * - * @param shape the tensor shape. - * @param data a buffer containing the tensor data. - * @return an integer constant - * @throws IllegalArgumentException If the tensor shape is not compatible with the buffer - * @see org.tensorflow.op.core.Constant - */ - public Constant constant(long[] shape, IntBuffer data) { - return Constant.create(scope, shape, data); - } - - /** - * Builds an {@link LookupTableFind} operation - * - * @param tableHandle Handle to the table. - * @param keys Any shape. Keys to look up. - * @param defaultValue - * @return a new instance of LookupTableFind - * @see org.tensorflow.op.core.LookupTableFind - */ - public LookupTableFind lookupTableFind(Operand tableHandle, Operand keys, - Operand defaultValue) { - return LookupTableFind.create(scope, tableHandle, keys, defaultValue); - } - - /** - * Builds an {@link TensorArrayUnpack} operation - * - * @param handle - * @param value - * @param flowIn - * @return a new instance of TensorArrayUnpack - * @see org.tensorflow.op.core.TensorArrayUnpack - */ - public TensorArrayUnpack tensorArrayUnpack(Operand handle, Operand value, - Operand flowIn) { - return TensorArrayUnpack.create(scope, handle, value, flowIn); - } - - /** - * Builds an {@link DynamicPartition} operation - * - * @param data - * @param partitions Any shape. Indices in the range `[0, num_partitions)`. - * @param numPartitions The number of partitions to output. - * @return a new instance of DynamicPartition - * @see org.tensorflow.op.core.DynamicPartition - */ - public DynamicPartition dynamicPartition(Operand data, Operand partitions, - Long numPartitions) { - return DynamicPartition.create(scope, data, partitions, numPartitions); - } - - /** - * Builds an {@link SpaceToBatchNd} operation - * - * @param input N-D with shape `input_shape = [batch] + spatial_shape + remaining_shape`, - * @param blockShape 1-D with shape `[M]`, all values must be >= 1. - * @param paddings 2-D with shape `[M, 2]`, all values must be >= 0. - * @return a new instance of SpaceToBatchNd - * @see org.tensorflow.op.core.SpaceToBatchNd - */ - public SpaceToBatchNd spaceToBatchNd(Operand input, - Operand blockShape, Operand paddings) { - return SpaceToBatchNd.create(scope, input, blockShape, paddings); - } - - /** - * Builds an {@link TensorListScatterIntoExistingList} operation - * - * @param inputHandle - * @param tensor - * @param indices - * @return a new instance of TensorListScatterIntoExistingList - * @see org.tensorflow.op.core.TensorListScatterIntoExistingList - */ - public TensorListScatterIntoExistingList tensorListScatterIntoExistingList( - Operand inputHandle, Operand tensor, Operand indices) { - return TensorListScatterIntoExistingList.create(scope, inputHandle, tensor, indices); - } - - /** - * Builds an {@link NonMaxSuppressionV5} operation - * - * @param boxes A 2-D float tensor of shape `[num_boxes, 4]`. - * @param scores A 1-D float tensor of shape `[num_boxes]` representing a single - * @param maxOutputSize A scalar integer tensor representing the maximum number of - * @param iouThreshold A 0-D float tensor representing the threshold for deciding whether - * @param scoreThreshold A 0-D float tensor representing the threshold for deciding when to remove - * @param softNmsSigma A 0-D float tensor representing the sigma parameter for Soft NMS; see Bodla et - * @param options carries optional attributes values - * @return a new instance of NonMaxSuppressionV5 - * @see org.tensorflow.op.core.NonMaxSuppressionV5 - */ - public NonMaxSuppressionV5 nonMaxSuppressionV5(Operand boxes, - Operand scores, Operand maxOutputSize, Operand iouThreshold, - Operand scoreThreshold, Operand softNmsSigma, NonMaxSuppressionV5.Options... options) { - return NonMaxSuppressionV5.create(scope, boxes, scores, maxOutputSize, iouThreshold, scoreThreshold, softNmsSigma, options); - } - - /** - * Builds an {@link Pad} operation - * - * @param input - * @param paddings - * @param constantValues - * @return a new instance of Pad - * @see org.tensorflow.op.core.Pad - */ - public Pad pad(Operand input, Operand paddings, - Operand constantValues) { - return Pad.create(scope, input, paddings, constantValues); - } - - /** - * Builds an {@link RefSelect} operation - * - * @param index A scalar that determines the input that gets selected. - * @param inputs A list of ref tensors, one of which will be forwarded to `output`. - * @return a new instance of RefSelect - * @see org.tensorflow.op.core.RefSelect - */ - public RefSelect refSelect(Operand index, Iterable> inputs) { - return RefSelect.create(scope, index, inputs); - } - - /** - * Builds an {@link ScatterNdUpdate} operation - * - * @param ref A mutable Tensor. Should be from a Variable node. - * @param indices A Tensor. Must be one of the following types: int32, int64. - * @param updates A Tensor. Must have the same type as ref. A tensor of updated - * @param options carries optional attributes values - * @return a new instance of ScatterNdUpdate - * @see org.tensorflow.op.core.ScatterNdUpdate - */ - public ScatterNdUpdate scatterNdUpdate(Operand ref, - Operand indices, Operand updates, ScatterNdUpdate.Options... options) { - return ScatterNdUpdate.create(scope, ref, indices, updates, options); - } - - /** - * Builds an {@link ReduceMax} operation - * - * @param input The tensor to reduce. - * @param axis The dimensions to reduce. Must be in the range - * @param options carries optional attributes values - * @return a new instance of ReduceMax - * @see org.tensorflow.op.core.ReduceMax - */ - public ReduceMax reduceMax(Operand input, Operand axis, - ReduceMax.Options... options) { - return ReduceMax.create(scope, input, axis, options); - } - - /** - * Builds an {@link ScatterNd} operation - * - * @param indices Index tensor. - * @param updates Updates to scatter into output. - * @param shape 1-D. The shape of the resulting tensor. - * @return a new instance of ScatterNd - * @see org.tensorflow.op.core.ScatterNd - */ - public ScatterNd scatterNd(Operand indices, Operand updates, - Operand shape) { - return ScatterNd.create(scope, indices, updates, shape); - } - - /** - * Builds an {@link Size} operation - * - * @param input - * @param outType - * @return a new instance of Size - * @see org.tensorflow.op.core.Size - */ - public Size size(Operand input, Class outType) { - return Size.create(scope, input, outType); - } - - /** - * Builds an {@link LookupTableImport} operation - * - * @param tableHandle Handle to the table. - * @param keys Any shape. Keys to look up. - * @param values Values to associate with keys. - * @return a new instance of LookupTableImport - * @see org.tensorflow.op.core.LookupTableImport - */ - public LookupTableImport lookupTableImport(Operand tableHandle, Operand keys, - Operand values) { - return LookupTableImport.create(scope, tableHandle, keys, values); - } - - /** - * Builds an {@link Constant} operation - * - * @param data An array containing the values to put into the new constant. The dimensions of the - * @see org.tensorflow.op.core.Constant - */ - public Constant constant(boolean[][] data) { - return Constant.create(scope, data); - } - - /** - * Builds an {@link BroadcastDynamicShape} operation - * - * @param s0 - * @param s1 - * @return a new instance of BroadcastDynamicShape - * @see org.tensorflow.op.core.BroadcastDynamicShape - */ - public BroadcastDynamicShape broadcastDynamicShape(Operand s0, - Operand s1) { - return BroadcastDynamicShape.create(scope, s0, s1); - } - - /** - * Builds an {@link TensorArrayPack} operation - * - * @param handle - * @param flowIn - * @param dtype - * @param options carries optional attributes values - * @return a new instance of TensorArrayPack - * @see org.tensorflow.op.core.TensorArrayPack - */ - public TensorArrayPack tensorArrayPack(Operand handle, Operand flowIn, - Class dtype, TensorArrayPack.Options... options) { - return TensorArrayPack.create(scope, handle, flowIn, dtype, options); - } - - /** - * Builds an {@link ScatterNdSub} operation - * - * @param ref A mutable Tensor. Should be from a Variable node. - * @param indices A Tensor. Must be one of the following types: int32, int64. - * @param updates A Tensor. Must have the same type as ref. A tensor of updated values - * @param options carries optional attributes values - * @return a new instance of ScatterNdSub - * @see org.tensorflow.op.core.ScatterNdSub - */ - public ScatterNdSub scatterNdSub(Operand ref, Operand indices, - Operand updates, ScatterNdSub.Options... options) { - return ScatterNdSub.create(scope, ref, indices, updates, options); - } - - /** - * Builds an {@link DestroyResourceOp} operation - * - * @param resource handle to the resource to delete. - * @param options carries optional attributes values - * @return a new instance of DestroyResourceOp - * @see org.tensorflow.op.core.DestroyResourceOp - */ - public DestroyResourceOp destroyResourceOp(Operand resource, - DestroyResourceOp.Options... options) { - return DestroyResourceOp.create(scope, resource, options); - } - - /** - * Builds an {@link ResourceSparseApplyKerasMomentum} operation - * - * @param var Should be from a Variable(). - * @param accum Should be from a Variable(). - * @param lr Learning rate. Must be a scalar. - * @param grad The gradient. - * @param indices A vector of indices into the first dimension of var and accum. - * @param momentum Momentum. Must be a scalar. - * @param options carries optional attributes values - * @return a new instance of ResourceSparseApplyKerasMomentum - * @see org.tensorflow.op.core.ResourceSparseApplyKerasMomentum - */ - public ResourceSparseApplyKerasMomentum resourceSparseApplyKerasMomentum( - Operand var, Operand accum, Operand lr, Operand grad, Operand indices, - Operand momentum, ResourceSparseApplyKerasMomentum.Options... options) { - return ResourceSparseApplyKerasMomentum.create(scope, var, accum, lr, grad, indices, momentum, options); - } - - /** - * Builds an {@link Constant} operation - * - * @param data An array containing the values to put into the new constant. The dimensions of the - * @see org.tensorflow.op.core.Constant - */ - public Constant constant(float[][][][] data) { - return Constant.create(scope, data); - } - - /** - * Builds an {@link StringNGrams} operation - * - * @param data The values tensor of the ragged string tensor to make ngrams out of. Must be a - * @param dataSplits The splits tensor of the ragged string tensor to make ngrams out of. - * @param separator The string to append between elements of the token. Use "" for no separator. - * @param ngramWidths The sizes of the ngrams to create. - * @param leftPad The string to use to pad the left side of the ngram sequence. Only used if - * @param rightPad The string to use to pad the right side of the ngram sequence. Only used if - * @param padWidth The number of padding elements to add to each side of each - * @param preserveShortSequences - * @return a new instance of StringNGrams - * @see org.tensorflow.op.core.StringNGrams - */ - public StringNGrams stringNGrams(Operand data, - Operand dataSplits, String separator, List ngramWidths, String leftPad, - String rightPad, Long padWidth, Boolean preserveShortSequences) { - return StringNGrams.create(scope, data, dataSplits, separator, ngramWidths, leftPad, rightPad, padWidth, preserveShortSequences); - } - - /** - * Builds an {@link BarrierIncompleteSize} operation - * - * @param handle The handle to a barrier. - * @return a new instance of BarrierIncompleteSize - * @see org.tensorflow.op.core.BarrierIncompleteSize - */ - public BarrierIncompleteSize barrierIncompleteSize(Operand handle) { - return BarrierIncompleteSize.create(scope, handle); - } - - /** - * Builds an {@link MapClear} operation - * - * @param dtypes - * @param options carries optional attributes values - * @return a new instance of MapClear - * @see org.tensorflow.op.core.MapClear - */ - public MapClear mapClear(List> dtypes, MapClear.Options... options) { - return MapClear.create(scope, dtypes, options); - } - - /** - * Builds an {@link ConsumeMutexLock} operation - * - * @param mutexLock A tensor returned by `MutexLock`. - * @return a new instance of ConsumeMutexLock - * @see org.tensorflow.op.core.ConsumeMutexLock - */ - public ConsumeMutexLock consumeMutexLock(Operand mutexLock) { - return ConsumeMutexLock.create(scope, mutexLock); - } - - /** - * Builds an {@link UnravelIndex} operation - * - * @param indices An 0-D or 1-D `int` Tensor whose elements are indices into the - * @param dims An 1-D `int` Tensor. The shape of the array to use for unraveling - * @return a new instance of UnravelIndex - * @see org.tensorflow.op.core.UnravelIndex - */ - public UnravelIndex unravelIndex(Operand indices, Operand dims) { - return UnravelIndex.create(scope, indices, dims); - } - - /** - * Builds an {@link DestroyTemporaryVariable} operation - * - * @param ref A reference to the temporary variable tensor. - * @param varName Name of the temporary variable, usually the name of the matching - * @return a new instance of DestroyTemporaryVariable - * @see org.tensorflow.op.core.DestroyTemporaryVariable - */ - public DestroyTemporaryVariable destroyTemporaryVariable(Operand ref, String varName) { - return DestroyTemporaryVariable.create(scope, ref, varName); - } - - /** - * Builds an {@link StatefulStandardNormal} operation - * - * @param resource The handle of the resource variable that stores the state of the RNG. - * @param shape The shape of the output tensor. - * @param dtype The type of the output. - * @return a new instance of StatefulStandardNormal - * @see org.tensorflow.op.core.StatefulStandardNormal - */ - public StatefulStandardNormal statefulStandardNormal(Operand resource, - Operand shape, Class dtype) { - return StatefulStandardNormal.create(scope, resource, shape, dtype); - } - - /** - * Builds an {@link ResourceScatterNdSub} operation - * - * @param ref A resource handle. Must be from a VarHandleOp. - * @param indices A Tensor. Must be one of the following types: int32, int64. - * @param updates A Tensor. Must have the same type as ref. A tensor of - * @param options carries optional attributes values - * @return a new instance of ResourceScatterNdSub - * @see org.tensorflow.op.core.ResourceScatterNdSub - */ - public ResourceScatterNdSub resourceScatterNdSub(Operand ref, - Operand indices, Operand updates, ResourceScatterNdSub.Options... options) { - return ResourceScatterNdSub.create(scope, ref, indices, updates, options); - } - - /** - * Builds an {@link Bitcast} operation + * Builds an {@link ScatterSub} operation * - * @param input - * @param type - * @return a new instance of Bitcast - * @see org.tensorflow.op.core.Bitcast + * @param ref Should be from a `Variable` node. + * @param indices A tensor of indices into the first dimension of `ref`. + * @param updates A tensor of updated values to subtract from `ref`. + * @param options carries optional attributes values + * @return a new instance of ScatterSub + * @see org.tensorflow.op.core.ScatterSub */ - public Bitcast bitcast(Operand input, Class type) { - return Bitcast.create(scope, input, type); + public ScatterSub scatterSub(Operand ref, Operand indices, + Operand updates, ScatterSub.Options... options) { + return ScatterSub.create(scope, ref, indices, updates, options); } /** - * Builds an {@link Constant} operation + * Builds an {@link TensorListStack} operation * - * @param data The value to put into the new constant. - * @return an integer constant - * @see org.tensorflow.op.core.Constant + * @param inputHandle + * @param elementShape + * @param elementDtype + * @param options carries optional attributes values + * @return a new instance of TensorListStack + * @see org.tensorflow.op.core.TensorListStack */ - public Constant constant(int data) { - return Constant.create(scope, data); + public TensorListStack tensorListStack(Operand inputHandle, + Operand elementShape, DataType elementDtype, TensorListStack.Options... options) { + return TensorListStack.create(scope, inputHandle, elementShape, elementDtype, options); } /** - * Builds an {@link Constant} operation + * Builds an {@link CudnnRNNParamsToCanonicalV2} operation * - * @param data An array containing the values to put into the new constant. String elements are - * @see org.tensorflow.op.core.Constant + * @param numLayers + * @param numUnits + * @param inputSize + * @param params + * @param numParamsWeights + * @param numParamsBiases + * @param options carries optional attributes values + * @return a new instance of CudnnRNNParamsToCanonicalV2 + * @see org.tensorflow.op.core.CudnnRNNParamsToCanonicalV2 */ - public Constant constant(byte[][][][] data) { - return Constant.create(scope, data); + public CudnnRNNParamsToCanonicalV2 cudnnRNNParamsToCanonicalV2( + Operand numLayers, Operand numUnits, Operand inputSize, + Operand params, Long numParamsWeights, Long numParamsBiases, + CudnnRNNParamsToCanonicalV2.Options... options) { + return CudnnRNNParamsToCanonicalV2.create(scope, numLayers, numUnits, inputSize, params, numParamsWeights, numParamsBiases, options); } /** - * Builds an {@link ScatterUpdate} operation + * Builds an {@link OrderedMapUnstageNoKey} operation * - * @param ref Should be from a `Variable` node. - * @param indices A tensor of indices into the first dimension of `ref`. - * @param updates A tensor of updated values to store in `ref`. + * @param indices + * @param dtypes * @param options carries optional attributes values - * @return a new instance of ScatterUpdate - * @see org.tensorflow.op.core.ScatterUpdate + * @return a new instance of OrderedMapUnstageNoKey + * @see org.tensorflow.op.core.OrderedMapUnstageNoKey */ - public ScatterUpdate scatterUpdate(Operand ref, Operand indices, - Operand updates, ScatterUpdate.Options... options) { - return ScatterUpdate.create(scope, ref, indices, updates, options); + public OrderedMapUnstageNoKey orderedMapUnstageNoKey(Operand indices, + List> dtypes, OrderedMapUnstageNoKey.Options... options) { + return OrderedMapUnstageNoKey.create(scope, indices, dtypes, options); } /** - * Builds an {@link ScatterMul} operation + * Builds an {@link BroadcastDynamicShape} operation * - * @param ref Should be from a `Variable` node. - * @param indices A tensor of indices into the first dimension of `ref`. - * @param updates A tensor of updated values to multiply to `ref`. - * @param options carries optional attributes values - * @return a new instance of ScatterMul - * @see org.tensorflow.op.core.ScatterMul + * @param s0 + * @param s1 + * @return a new instance of BroadcastDynamicShape + * @see org.tensorflow.op.core.BroadcastDynamicShape */ - public ScatterMul scatterMul(Operand ref, Operand indices, - Operand updates, ScatterMul.Options... options) { - return ScatterMul.create(scope, ref, indices, updates, options); + public BroadcastDynamicShape broadcastDynamicShape(Operand s0, + Operand s1) { + return BroadcastDynamicShape.create(scope, s0, s1); } /** - * Builds an {@link AssertThat} operation + * Builds an {@link TemporaryVariable} operation * - * @param condition The condition to evaluate. - * @param data The tensors to print out when condition is false. + * @param shape The shape of the variable tensor. + * @param dtype The type of elements in the variable tensor. * @param options carries optional attributes values - * @return a new instance of AssertThat - * @see org.tensorflow.op.core.AssertThat + * @return a new instance of TemporaryVariable + * @see org.tensorflow.op.core.TemporaryVariable */ - public AssertThat assertThat(Operand condition, Iterable> data, - AssertThat.Options... options) { - return AssertThat.create(scope, condition, data, options); + public TemporaryVariable temporaryVariable(Shape shape, DataType dtype, + TemporaryVariable.Options... options) { + return TemporaryVariable.create(scope, shape, dtype, options); } /** - * Builds an {@link BatchMatMulV2} operation + * Builds an {@link ResourceScatterMax} operation * - * @param x 2-D or higher with shape `[..., r_x, c_x]`. - * @param y 2-D or higher with shape `[..., r_y, c_y]`. - * @param options carries optional attributes values - * @return a new instance of BatchMatMulV2 - * @see org.tensorflow.op.core.BatchMatMulV2 + * @param resource Should be from a `Variable` node. + * @param indices A tensor of indices into the first dimension of `ref`. + * @param updates A tensor of updated values to add to `ref`. + * @return a new instance of ResourceScatterMax + * @see org.tensorflow.op.core.ResourceScatterMax */ - public BatchMatMulV2 batchMatMulV2(Operand x, Operand y, - BatchMatMulV2.Options... options) { - return BatchMatMulV2.create(scope, x, y, options); + public ResourceScatterMax resourceScatterMax(Operand resource, + Operand indices, Operand updates) { + return ResourceScatterMax.create(scope, resource, indices, updates); } /** - * Builds an {@link ImmutableConst} operation + * Builds an {@link Rpc} operation * - * @param dtype Type of the returned tensor. - * @param shape Shape of the returned tensor. - * @param memoryRegionName Name of readonly memory region used by the tensor, see - * @return a new instance of ImmutableConst - * @see org.tensorflow.op.core.ImmutableConst + * @param address `0-D` or `1-D`. The address (i.e. host_name:port) of the RPC server. + * @param method `0-D` or `1-D`. The method address on the RPC server. + * @param request `0-D` or `1-D`. Serialized proto strings: the rpc request argument. + * @param options carries optional attributes values + * @return a new instance of Rpc + * @see org.tensorflow.op.core.Rpc */ - public ImmutableConst immutableConst(Class dtype, Shape shape, - String memoryRegionName) { - return ImmutableConst.create(scope, dtype, shape, memoryRegionName); + public Rpc rpc(Operand address, Operand method, Operand request, + Rpc.Options... options) { + return Rpc.create(scope, address, method, request, options); } /** - * Builds an {@link OrderedMapStage} operation + * Builds an {@link Roll} operation * - * @param key int64 - * @param indices - * @param values a list of tensors - * @param dtypes - * @param options carries optional attributes values - * @return a new instance of OrderedMapStage - * @see org.tensorflow.op.core.OrderedMapStage + * @param input + * @param shift Dimension must be 0-D or 1-D. `shift[i]` specifies the number of places by which + * @param axis Dimension must be 0-D or 1-D. `axis[i]` specifies the dimension that the shift + * @return a new instance of Roll + * @see org.tensorflow.op.core.Roll */ - public OrderedMapStage orderedMapStage(Operand key, Operand indices, - Iterable> values, List> dtypes, OrderedMapStage.Options... options) { - return OrderedMapStage.create(scope, key, indices, values, dtypes, options); + public Roll roll(Operand input, Operand shift, + Operand axis) { + return Roll.create(scope, input, shift, axis); } /** - * Builds an {@link TensorArrayConcat} operation + * Builds an {@link LookupTableImport} operation * - * @param handle The handle to a TensorArray. - * @param flowIn A float scalar that enforces proper chaining of operations. - * @param dtype The type of the elem that is returned. - * @param options carries optional attributes values - * @return a new instance of TensorArrayConcat - * @see org.tensorflow.op.core.TensorArrayConcat + * @param tableHandle Handle to the table. + * @param keys Any shape. Keys to look up. + * @param values Values to associate with keys. + * @return a new instance of LookupTableImport + * @see org.tensorflow.op.core.LookupTableImport */ - public TensorArrayConcat tensorArrayConcat(Operand handle, Operand flowIn, - Class dtype, TensorArrayConcat.Options... options) { - return TensorArrayConcat.create(scope, handle, flowIn, dtype, options); + public LookupTableImport lookupTableImport(Operand tableHandle, Operand keys, + Operand values) { + return LookupTableImport.create(scope, tableHandle, keys, values); } /** - * Builds an {@link VariableShape} operation + * Builds an {@link DestroyResourceOp} operation * - * @param input - * @return a new instance of VariableShape - * @see org.tensorflow.op.core.VariableShape + * @param resource handle to the resource to delete. + * @param options carries optional attributes values + * @return a new instance of DestroyResourceOp + * @see org.tensorflow.op.core.DestroyResourceOp */ - public VariableShape variableShape(Operand input) { - return VariableShape.create(scope, input); + public DestroyResourceOp destroyResourceOp(Operand resource, + DestroyResourceOp.Options... options) { + return DestroyResourceOp.create(scope, resource, options); } /** - * Builds an {@link RefSwitch} operation + * Builds an {@link InplaceUpdate} operation * - * @param data The ref tensor to be forwarded to the appropriate output. - * @param pred A scalar that specifies which output port will receive data. - * @return a new instance of RefSwitch - * @see org.tensorflow.op.core.RefSwitch + * @param x A tensor of type `T`. + * @param i A vector. Indices into the left-most dimension of `x`. + * @param v A `Tensor` of type T. Same dimension sizes as x except the first dimension, which must be the same as i's size. + * @return a new instance of InplaceUpdate + * @see org.tensorflow.op.core.InplaceUpdate */ - public RefSwitch refSwitch(Operand data, Operand pred) { - return RefSwitch.create(scope, data, pred); + public InplaceUpdate inplaceUpdate(Operand x, Operand i, Operand v) { + return InplaceUpdate.create(scope, x, i, v); } /** - * Builds an {@link Abort} operation + * Builds an {@link Size} operation * - * @param options carries optional attributes values - * @return a new instance of Abort - * @see org.tensorflow.op.core.Abort + * @param input + * @param outType + * @return a new instance of Size + * @see org.tensorflow.op.core.Size */ - public Abort abort(Abort.Options... options) { - return Abort.create(scope, options); + public Size size(Operand input, DataType outType) { + return Size.create(scope, input, outType); } /** - * Builds an {@link ScatterNdNonAliasingAdd} operation + * Builds an {@link MatrixSetDiagV2} operation * - * @param input A Tensor. - * @param indices A Tensor. Must be one of the following types: `int32`, `int64`. - * @param updates A Tensor. Must have the same type as ref. A tensor of updated values - * @return a new instance of ScatterNdNonAliasingAdd - * @see org.tensorflow.op.core.ScatterNdNonAliasingAdd + * @param input Rank `r+1`, where `r >= 1`. + * @param diagonal Rank `r` when `k` is an integer or `k[0] == k[1]`. Otherwise, it has rank `r+1`. + * @param k Diagonal offset(s). Positive value means superdiagonal, 0 refers to the main + * @return a new instance of MatrixSetDiagV2 + * @see org.tensorflow.op.core.MatrixSetDiagV2 */ - public ScatterNdNonAliasingAdd scatterNdNonAliasingAdd(Operand input, - Operand indices, Operand updates) { - return ScatterNdNonAliasingAdd.create(scope, input, indices, updates); + public MatrixSetDiagV2 matrixSetDiagV2(Operand input, Operand diagonal, + Operand k) { + return MatrixSetDiagV2.create(scope, input, diagonal, k); } /** - * Builds an {@link VarIsInitializedOp} operation + * Builds an {@link ReduceSum} operation * - * @param resource the input resource handle. - * @return a new instance of VarIsInitializedOp - * @see org.tensorflow.op.core.VarIsInitializedOp + * @param input The tensor to reduce. + * @param axis The dimensions to reduce. Must be in the range + * @param options carries optional attributes values + * @return a new instance of ReduceSum + * @see org.tensorflow.op.core.ReduceSum */ - public VarIsInitializedOp varIsInitializedOp(Operand resource) { - return VarIsInitializedOp.create(scope, resource); + public ReduceSum reduceSum(Operand input, Operand axis, + ReduceSum.Options... options) { + return ReduceSum.create(scope, input, axis, options); } /** - * Builds an {@link ScatterSub} operation + * Builds an {@link Unique} operation * - * @param ref Should be from a `Variable` node. - * @param indices A tensor of indices into the first dimension of `ref`. - * @param updates A tensor of updated values to subtract from `ref`. - * @param options carries optional attributes values - * @return a new instance of ScatterSub - * @see org.tensorflow.op.core.ScatterSub + * @param x A `Tensor`. + * @param axis A `Tensor` of type `int32` (default: None). The axis of the Tensor to + * @param outIdx + * @return a new instance of Unique + * @see org.tensorflow.op.core.Unique */ - public ScatterSub scatterSub(Operand ref, Operand indices, - Operand updates, ScatterSub.Options... options) { - return ScatterSub.create(scope, ref, indices, updates, options); + public Unique unique(Operand x, + Operand axis, DataType outIdx) { + return Unique.create(scope, x, axis, outIdx); } /** - * Builds an {@link ScatterMin} operation + * Builds an {@link ResourceScatterMin} operation * - * @param ref Should be from a `Variable` node. + * @param resource Should be from a `Variable` node. * @param indices A tensor of indices into the first dimension of `ref`. - * @param updates A tensor of updated values to reduce into `ref`. - * @param options carries optional attributes values - * @return a new instance of ScatterMin - * @see org.tensorflow.op.core.ScatterMin + * @param updates A tensor of updated values to add to `ref`. + * @return a new instance of ResourceScatterMin + * @see org.tensorflow.op.core.ResourceScatterMin */ - public ScatterMin scatterMin(Operand ref, - Operand indices, Operand updates, ScatterMin.Options... options) { - return ScatterMin.create(scope, ref, indices, updates, options); + public ResourceScatterMin resourceScatterMin(Operand resource, + Operand indices, Operand updates) { + return ResourceScatterMin.create(scope, resource, indices, updates); } /** - * Builds an {@link EmptyTensorList} operation + * Builds an {@link TensorListGetItem} operation * + * @param inputHandle + * @param index * @param elementShape - * @param maxNumElements * @param elementDtype - * @return a new instance of EmptyTensorList - * @see org.tensorflow.op.core.EmptyTensorList + * @return a new instance of TensorListGetItem + * @see org.tensorflow.op.core.TensorListGetItem */ - public EmptyTensorList emptyTensorList(Operand elementShape, - Operand maxNumElements, Class elementDtype) { - return EmptyTensorList.create(scope, elementShape, maxNumElements, elementDtype); + public TensorListGetItem tensorListGetItem(Operand inputHandle, Operand index, + Operand elementShape, DataType elementDtype) { + return TensorListGetItem.create(scope, inputHandle, index, elementShape, elementDtype); } /** @@ -3212,326 +2607,341 @@ public EmptyTensorList emptyTensorList(Operand elementS * @return a new instance of TensorArrayWrite * @see org.tensorflow.op.core.TensorArrayWrite */ - public TensorArrayWrite tensorArrayWrite(Operand handle, Operand index, - Operand value, Operand flowIn) { + public TensorArrayWrite tensorArrayWrite(Operand handle, Operand index, + Operand value, Operand flowIn) { return TensorArrayWrite.create(scope, handle, index, value, flowIn); } /** - * Builds an {@link TensorListGetItem} operation + * Builds an {@link SplitV} operation * - * @param inputHandle - * @param index - * @param elementShape - * @param elementDtype - * @return a new instance of TensorListGetItem - * @see org.tensorflow.op.core.TensorListGetItem + * @param value The tensor to split. + * @param sizeSplits list containing the sizes of each output tensor along the split + * @param axis 0-D. The dimension along which to split. Must be in the range + * @param numSplit + * @return a new instance of SplitV + * @see org.tensorflow.op.core.SplitV */ - public TensorListGetItem tensorListGetItem(Operand inputHandle, Operand index, - Operand elementShape, Class elementDtype) { - return TensorListGetItem.create(scope, inputHandle, index, elementShape, elementDtype); + public SplitV splitV(Operand value, Operand sizeSplits, + Operand axis, Long numSplit) { + return SplitV.create(scope, value, sizeSplits, axis, numSplit); } /** - * Builds an {@link ReduceMin} operation + * Builds an {@link ConsumeMutexLock} operation * - * @param input The tensor to reduce. - * @param axis The dimensions to reduce. Must be in the range - * @param options carries optional attributes values - * @return a new instance of ReduceMin - * @see org.tensorflow.op.core.ReduceMin + * @param mutexLock A tensor returned by `MutexLock`. + * @return a new instance of ConsumeMutexLock + * @see org.tensorflow.op.core.ConsumeMutexLock */ - public ReduceMin reduceMin(Operand input, Operand axis, - ReduceMin.Options... options) { - return ReduceMin.create(scope, input, axis, options); + public ConsumeMutexLock consumeMutexLock(Operand mutexLock) { + return ConsumeMutexLock.create(scope, mutexLock); } /** - * Builds an {@link Print} operation + * Builds an {@link ScatterDiv} operation * - * @param input The string scalar to print. + * @param ref Should be from a `Variable` node. + * @param indices A tensor of indices into the first dimension of `ref`. + * @param updates A tensor of values that `ref` is divided by. * @param options carries optional attributes values - * @return a new instance of Print - * @see org.tensorflow.op.core.Print + * @return a new instance of ScatterDiv + * @see org.tensorflow.op.core.ScatterDiv */ - public Print print(Operand input, Print.Options... options) { - return Print.create(scope, input, options); + public ScatterDiv scatterDiv(Operand ref, Operand indices, + Operand updates, ScatterDiv.Options... options) { + return ScatterDiv.create(scope, ref, indices, updates, options); } /** - * Builds an {@link UniqueWithCounts} operation + * Builds an {@link MutableDenseHashTable} operation * - * @param x A `Tensor`. - * @param axis A `Tensor` of type `int32` (default: None). The axis of the Tensor to - * @param outIdx - * @return a new instance of UniqueWithCounts - * @see org.tensorflow.op.core.UniqueWithCounts + * @param emptyKey The key used to represent empty key buckets internally. Must not + * @param deletedKey + * @param valueDtype Type of the table values. + * @param options carries optional attributes values + * @return a new instance of MutableDenseHashTable + * @see org.tensorflow.op.core.MutableDenseHashTable */ - public UniqueWithCounts uniqueWithCounts( - Operand x, Operand axis, Class outIdx) { - return UniqueWithCounts.create(scope, x, axis, outIdx); + public MutableDenseHashTable mutableDenseHashTable(Operand emptyKey, + Operand deletedKey, DataType valueDtype, MutableDenseHashTable.Options... options) { + return MutableDenseHashTable.create(scope, emptyKey, deletedKey, valueDtype, options); } /** - * Builds an {@link TensorArrayScatter} operation + * Builds an {@link RefSelect} operation * - * @param handle The handle to a TensorArray. - * @param indices The locations at which to write the tensor elements. - * @param value The concatenated tensor to write to the TensorArray. - * @param flowIn A float scalar that enforces proper chaining of operations. - * @return a new instance of TensorArrayScatter - * @see org.tensorflow.op.core.TensorArrayScatter + * @param index A scalar that determines the input that gets selected. + * @param inputs A list of ref tensors, one of which will be forwarded to `output`. + * @return a new instance of RefSelect + * @see org.tensorflow.op.core.RefSelect */ - public TensorArrayScatter tensorArrayScatter(Operand handle, Operand indices, - Operand value, Operand flowIn) { - return TensorArrayScatter.create(scope, handle, indices, value, flowIn); + public RefSelect refSelect(Operand index, Iterable> inputs) { + return RefSelect.create(scope, index, inputs); } /** - * Builds an {@link Constant} operation + * Builds an {@link DestroyTemporaryVariable} operation * - * @param charset The encoding from String to bytes. - * @param data The string to put into the new constant. - * @return a string constant - * @see org.tensorflow.op.core.Constant + * @param ref A reference to the temporary variable tensor. + * @param varName Name of the temporary variable, usually the name of the matching + * @return a new instance of DestroyTemporaryVariable + * @see org.tensorflow.op.core.DestroyTemporaryVariable */ - public Constant constant(String data, Charset charset) { - return Constant.create(scope, data, charset); + public DestroyTemporaryVariable destroyTemporaryVariable(Operand ref, String varName) { + return DestroyTemporaryVariable.create(scope, ref, varName); } /** - * Builds an {@link ResourceScatterNdAdd} operation + * Builds an {@link MapSize} operation * - * @param ref A resource handle. Must be from a VarHandleOp. - * @param indices A Tensor. Must be one of the following types: int32, int64. - * @param updates A Tensor. Must have the same type as ref. A tensor of + * @param dtypes * @param options carries optional attributes values - * @return a new instance of ResourceScatterNdAdd - * @see org.tensorflow.op.core.ResourceScatterNdAdd + * @return a new instance of MapSize + * @see org.tensorflow.op.core.MapSize */ - public ResourceScatterNdAdd resourceScatterNdAdd(Operand ref, - Operand indices, Operand updates, ResourceScatterNdAdd.Options... options) { - return ResourceScatterNdAdd.create(scope, ref, indices, updates, options); + public MapSize mapSize(List> dtypes, MapSize.Options... options) { + return MapSize.create(scope, dtypes, options); } /** - * Builds an {@link FusedBatchNormV3} operation + * Builds an {@link StatefulStandardNormal} operation * - * @param x A 4D Tensor for input data. - * @param scale A 1D Tensor for scaling factor, to scale the normalized x. - * @param offset A 1D Tensor for offset, to shift to the normalized x. - * @param mean A 1D Tensor for population mean. Used for inference only; - * @param variance A 1D Tensor for population variance. Used for inference only; - * @param options carries optional attributes values - * @return a new instance of FusedBatchNormV3 - * @see org.tensorflow.op.core.FusedBatchNormV3 + * @param resource The handle of the resource variable that stores the state of the RNG. + * @param shape The shape of the output tensor. + * @param dtype The type of the output. + * @return a new instance of StatefulStandardNormal + * @see org.tensorflow.op.core.StatefulStandardNormal */ - public FusedBatchNormV3 fusedBatchNormV3(Operand x, - Operand scale, Operand offset, Operand mean, Operand variance, - FusedBatchNormV3.Options... options) { - return FusedBatchNormV3.create(scope, x, scale, offset, mean, variance, options); + public StatefulStandardNormal statefulStandardNormal(Operand resource, + Operand shape, DataType dtype) { + return StatefulStandardNormal.create(scope, resource, shape, dtype); } /** - * Builds an {@link ShapeN} operation + * Builds an {@link TensorListSetItem} operation * - * @param input - * @return a new instance of ShapeN - * @see org.tensorflow.op.core.ShapeN + * @param inputHandle + * @param index + * @param item + * @return a new instance of TensorListSetItem + * @see org.tensorflow.op.core.TensorListSetItem */ - public ShapeN shapeN(Iterable> input) { - return ShapeN.create(scope, input); + public TensorListSetItem tensorListSetItem(Operand inputHandle, Operand index, + Operand item) { + return TensorListSetItem.create(scope, inputHandle, index, item); } /** - * Builds an {@link Constant} operation + * Builds an {@link ResourceScatterDiv} operation * - * @param data An array containing the values to put into the new constant. The dimensions of the - * @see org.tensorflow.op.core.Constant + * @param resource Should be from a `Variable` node. + * @param indices A tensor of indices into the first dimension of `ref`. + * @param updates A tensor of updated values to add to `ref`. + * @return a new instance of ResourceScatterDiv + * @see org.tensorflow.op.core.ResourceScatterDiv */ - public Constant constant(int[][] data) { - return Constant.create(scope, data); + public ResourceScatterDiv resourceScatterDiv(Operand resource, + Operand indices, Operand updates) { + return ResourceScatterDiv.create(scope, resource, indices, updates); } /** - * Builds an {@link Constant} operation + * Builds an {@link MutableHashTable} operation * - * @param data An array containing the values to put into the new constant. The dimensions of the - * @see org.tensorflow.op.core.Constant + * @param keyDtype Type of the table keys. + * @param valueDtype Type of the table values. + * @param options carries optional attributes values + * @return a new instance of MutableHashTable + * @see org.tensorflow.op.core.MutableHashTable */ - public Constant constant(double[][][][][] data) { - return Constant.create(scope, data); + public MutableHashTable mutableHashTable(DataType keyDtype, DataType valueDtype, + MutableHashTable.Options... options) { + return MutableHashTable.create(scope, keyDtype, valueDtype, options); } /** - * Builds an {@link StageSize} operation + * Builds an {@link TensorArrayConcat} operation * - * @param dtypes + * @param handle The handle to a TensorArray. + * @param flowIn A float scalar that enforces proper chaining of operations. + * @param dtype The type of the elem that is returned. * @param options carries optional attributes values - * @return a new instance of StageSize - * @see org.tensorflow.op.core.StageSize + * @return a new instance of TensorArrayConcat + * @see org.tensorflow.op.core.TensorArrayConcat */ - public StageSize stageSize(List> dtypes, StageSize.Options... options) { - return StageSize.create(scope, dtypes, options); + public TensorArrayConcat tensorArrayConcat(Operand handle, Operand flowIn, + DataType dtype, TensorArrayConcat.Options... options) { + return TensorArrayConcat.create(scope, handle, flowIn, dtype, options); } /** - * Builds an {@link InitializeTable} operation + * Builds an {@link Where3} operation * - * @param tableHandle Handle to a table which will be initialized. - * @param keys Keys of type Tkey. - * @param values Values of type Tval. - * @return a new instance of InitializeTable - * @see org.tensorflow.op.core.InitializeTable + * @param condition + * @param x = A `Tensor` which may have the same shape as `condition`. + * @param y = A `Tensor` with the same type and shape as `x`. + * @return a new instance of Where3 + * @see org.tensorflow.op.core.Where3 */ - public InitializeTable initializeTable(Operand tableHandle, Operand keys, - Operand values) { - return InitializeTable.create(scope, tableHandle, keys, values); + public Where3 where3(Operand condition, Operand x, Operand y) { + return Where3.create(scope, condition, x, y); } /** - * Builds an {@link MulNoNan} operation + * Builds an {@link BatchMatMulV2} operation * - * @param x - * @param y - * @return a new instance of MulNoNan - * @see org.tensorflow.op.core.MulNoNan + * @param x 2-D or higher with shape `[..., r_x, c_x]`. + * @param y 2-D or higher with shape `[..., r_y, c_y]`. + * @param options carries optional attributes values + * @return a new instance of BatchMatMulV2 + * @see org.tensorflow.op.core.BatchMatMulV2 */ - public MulNoNan mulNoNan(Operand x, Operand y) { - return MulNoNan.create(scope, x, y); + public BatchMatMulV2 batchMatMulV2(Operand x, Operand y, + BatchMatMulV2.Options... options) { + return BatchMatMulV2.create(scope, x, y, options); } /** - * Builds an {@link Constant} operation + * Builds an {@link TensorListResize} operation * - * @param data The value to put into the new constant. - * @return a double constant - * @see org.tensorflow.op.core.Constant + * @param inputHandle + * @param size + * @return a new instance of TensorListResize + * @see org.tensorflow.op.core.TensorListResize */ - public Constant constant(double data) { - return Constant.create(scope, data); + public TensorListResize tensorListResize(Operand inputHandle, Operand size) { + return TensorListResize.create(scope, inputHandle, size); } /** - * Builds an {@link NextAfter} operation + * Builds an {@link Sum} operation * - * @param x1 - * @param x2 - * @return a new instance of NextAfter - * @see org.tensorflow.op.core.NextAfter + * @param input The tensor to reduce. + * @param axis The dimensions to reduce. Must be in the range + * @param options carries optional attributes values + * @return a new instance of Sum + * @see org.tensorflow.op.core.Sum */ - public NextAfter nextAfter(Operand x1, Operand x2) { - return NextAfter.create(scope, x1, x2); + public Sum sum(Operand input, Operand axis, + Sum.Options... options) { + return Sum.create(scope, input, axis, options); } /** - * Builds an {@link StringLower} operation + * Builds an {@link OrderedMapUnstage} operation * - * @param input + * @param key + * @param indices + * @param dtypes * @param options carries optional attributes values - * @return a new instance of StringLower - * @see org.tensorflow.op.core.StringLower + * @return a new instance of OrderedMapUnstage + * @see org.tensorflow.op.core.OrderedMapUnstage */ - public StringLower stringLower(Operand input, StringLower.Options... options) { - return StringLower.create(scope, input, options); + public OrderedMapUnstage orderedMapUnstage(Operand key, Operand indices, + List> dtypes, OrderedMapUnstage.Options... options) { + return OrderedMapUnstage.create(scope, key, indices, dtypes, options); } /** - * Builds an {@link TensorListGather} operation + * Builds an {@link EditDistance} operation * - * @param inputHandle - * @param indices - * @param elementShape - * @param elementDtype - * @return a new instance of TensorListGather - * @see org.tensorflow.op.core.TensorListGather + * @param hypothesisIndices The indices of the hypothesis list SparseTensor. + * @param hypothesisValues The values of the hypothesis list SparseTensor. + * @param hypothesisShape The shape of the hypothesis list SparseTensor. + * @param truthIndices The indices of the truth list SparseTensor. + * @param truthValues The values of the truth list SparseTensor. + * @param truthShape truth indices, vector. + * @param options carries optional attributes values + * @return a new instance of EditDistance + * @see org.tensorflow.op.core.EditDistance */ - public TensorListGather tensorListGather(Operand inputHandle, Operand indices, - Operand elementShape, Class elementDtype) { - return TensorListGather.create(scope, inputHandle, indices, elementShape, elementDtype); + public EditDistance editDistance(Operand hypothesisIndices, + Operand hypothesisValues, Operand hypothesisShape, Operand truthIndices, + Operand truthValues, Operand truthShape, EditDistance.Options... options) { + return EditDistance.create(scope, hypothesisIndices, hypothesisValues, hypothesisShape, truthIndices, truthValues, truthShape, options); } /** - * Builds an {@link Reverse} operation + * Builds an {@link FusedBatchNormV3} operation * - * @param tensor Up to 8-D. - * @param axis 1-D. The indices of the dimensions to reverse. Must be in the range - * @return a new instance of Reverse - * @see org.tensorflow.op.core.Reverse + * @param x A 4D Tensor for input data. + * @param scale A 1D Tensor for scaling factor, to scale the normalized x. + * @param offset A 1D Tensor for offset, to shift to the normalized x. + * @param mean A 1D Tensor for population mean. Used for inference only; + * @param variance A 1D Tensor for population variance. Used for inference only; + * @param options carries optional attributes values + * @return a new instance of FusedBatchNormV3 + * @see org.tensorflow.op.core.FusedBatchNormV3 */ - public Reverse reverse(Operand tensor, Operand axis) { - return Reverse.create(scope, tensor, axis); + public FusedBatchNormV3 fusedBatchNormV3( + Operand x, Operand scale, Operand offset, Operand mean, Operand variance, + FusedBatchNormV3.Options... options) { + return FusedBatchNormV3.create(scope, x, scale, offset, mean, variance, options); } /** - * Builds an {@link SplitV} operation + * Builds an {@link QuantizedConcat} operation * - * @param value The tensor to split. - * @param sizeSplits list containing the sizes of each output tensor along the split - * @param axis 0-D. The dimension along which to split. Must be in the range - * @param numSplit - * @return a new instance of SplitV - * @see org.tensorflow.op.core.SplitV + * @param concatDim 0-D. The dimension along which to concatenate. Must be in the + * @param values The `N` Tensors to concatenate. Their ranks and types must match, + * @param inputMins The minimum scalar values for each of the input tensors. + * @param inputMaxes The maximum scalar values for each of the input tensors. + * @return a new instance of QuantizedConcat + * @see org.tensorflow.op.core.QuantizedConcat */ - public SplitV splitV(Operand value, Operand sizeSplits, - Operand axis, Long numSplit) { - return SplitV.create(scope, value, sizeSplits, axis, numSplit); + public QuantizedConcat quantizedConcat(Operand concatDim, + Iterable> values, Iterable> inputMins, + Iterable> inputMaxes) { + return QuantizedConcat.create(scope, concatDim, values, inputMins, inputMaxes); } /** - * Builds an {@link ScaleAndTranslate} operation + * Builds an {@link Abort} operation * - * @param images - * @param size - * @param scale - * @param translation * @param options carries optional attributes values - * @return a new instance of ScaleAndTranslate - * @see org.tensorflow.op.core.ScaleAndTranslate + * @return a new instance of Abort + * @see org.tensorflow.op.core.Abort */ - public ScaleAndTranslate scaleAndTranslate(Operand images, - Operand size, Operand scale, Operand translation, - ScaleAndTranslate.Options... options) { - return ScaleAndTranslate.create(scope, images, size, scale, translation, options); + public Abort abort(Abort.Options... options) { + return Abort.create(scope, options); } /** - * Builds an {@link Barrier} operation + * Builds an {@link TensorListElementShape} operation * - * @param componentTypes The type of each component in a value. - * @param options carries optional attributes values - * @return a new instance of Barrier - * @see org.tensorflow.op.core.Barrier + * @param inputHandle + * @param shapeType + * @return a new instance of TensorListElementShape + * @see org.tensorflow.op.core.TensorListElementShape */ - public Barrier barrier(List> componentTypes, Barrier.Options... options) { - return Barrier.create(scope, componentTypes, options); + public TensorListElementShape tensorListElementShape( + Operand inputHandle, DataType shapeType) { + return TensorListElementShape.create(scope, inputHandle, shapeType); } /** - * Builds an {@link Constant} operation + * Builds an {@link VarIsInitializedOp} operation * - * @param shape the tensor shape. - * @param data a buffer containing the tensor data. - * @return a long constant - * @throws IllegalArgumentException If the tensor shape is not compatible with the buffer - * @see org.tensorflow.op.core.Constant + * @param resource the input resource handle. + * @return a new instance of VarIsInitializedOp + * @see org.tensorflow.op.core.VarIsInitializedOp */ - public Constant constant(long[] shape, LongBuffer data) { - return Constant.create(scope, shape, data); + public VarIsInitializedOp varIsInitializedOp(Operand resource) { + return VarIsInitializedOp.create(scope, resource); } /** - * Builds an {@link ReduceSum} operation + * Builds an {@link OrderedMapIncompleteSize} operation * - * @param input The tensor to reduce. - * @param axis The dimensions to reduce. Must be in the range + * @param dtypes * @param options carries optional attributes values - * @return a new instance of ReduceSum - * @see org.tensorflow.op.core.ReduceSum + * @return a new instance of OrderedMapIncompleteSize + * @see org.tensorflow.op.core.OrderedMapIncompleteSize */ - public ReduceSum reduceSum(Operand input, Operand axis, - ReduceSum.Options... options) { - return ReduceSum.create(scope, input, axis, options); + public OrderedMapIncompleteSize orderedMapIncompleteSize(List> dtypes, + OrderedMapIncompleteSize.Options... options) { + return OrderedMapIncompleteSize.create(scope, dtypes, options); } /** @@ -3547,333 +2957,390 @@ public EnsureShape ensureShape(Operand input, Shape shape) { } /** - * Builds an {@link UnbatchGrad} operation + * Builds an {@link TensorArrayGradWithShape} operation * - * @param originalInput - * @param batchIndex - * @param grad - * @param id - * @param options carries optional attributes values - * @return a new instance of UnbatchGrad - * @see org.tensorflow.op.core.UnbatchGrad + * @param handle The handle to the forward TensorArray. + * @param flowIn A float scalar that enforces proper chaining of operations. + * @param shapeToPrepend An int32 vector representing a shape. Elements in the gradient accumulator will + * @param source The gradient source string, used to decide which gradient TensorArray + * @return a new instance of TensorArrayGradWithShape + * @see org.tensorflow.op.core.TensorArrayGradWithShape */ - public UnbatchGrad unbatchGrad(Operand originalInput, Operand batchIndex, - Operand grad, Operand id, UnbatchGrad.Options... options) { - return UnbatchGrad.create(scope, originalInput, batchIndex, grad, id, options); + public TensorArrayGradWithShape tensorArrayGradWithShape(Operand handle, + Operand flowIn, Operand shapeToPrepend, String source) { + return TensorArrayGradWithShape.create(scope, handle, flowIn, shapeToPrepend, source); } /** - * Builds an {@link StringUpper} operation + * Builds an {@link SetDiff1d} operation * - * @param input - * @param options carries optional attributes values - * @return a new instance of StringUpper - * @see org.tensorflow.op.core.StringUpper + * @param x 1-D. Values to keep. + * @param y 1-D. Values to remove. + * @param outIdx + * @return a new instance of SetDiff1d + * @see org.tensorflow.op.core.SetDiff1d */ - public StringUpper stringUpper(Operand input, StringUpper.Options... options) { - return StringUpper.create(scope, input, options); + public SetDiff1d setDiff1d(Operand x, Operand y, + DataType outIdx) { + return SetDiff1d.create(scope, x, y, outIdx); } /** - * Builds an {@link Constant} operation + * Builds an {@link LookupTableExport} operation * - * @param data The value to put into the new constant. - * @return a long constant - * @see org.tensorflow.op.core.Constant + * @param tableHandle Handle to the table. + * @param Tkeys + * @param Tvalues + * @return a new instance of LookupTableExport + * @see org.tensorflow.op.core.LookupTableExport */ - public Constant constant(long data) { - return Constant.create(scope, data); + public LookupTableExport lookupTableExport(Operand tableHandle, DataType Tkeys, + DataType Tvalues) { + return LookupTableExport.create(scope, tableHandle, Tkeys, Tvalues); } /** - * Builds an {@link Where} operation + * Builds an {@link ReadVariableOp} operation * - * @param condition - * @return a new instance of Where - * @see org.tensorflow.op.core.Where + * @param resource handle to the resource in which to store the variable. + * @param dtype the dtype of the value. + * @return a new instance of ReadVariableOp + * @see org.tensorflow.op.core.ReadVariableOp */ - public Where where(Operand condition) { - return Where.create(scope, condition); + public ReadVariableOp readVariableOp(Operand resource, DataType dtype) { + return ReadVariableOp.create(scope, resource, dtype); } /** - * Builds an {@link VariableShape} operation + * Builds an {@link ReduceMax} operation * - * @param input - * @param outType - * @return a new instance of VariableShape - * @see org.tensorflow.op.core.VariableShape + * @param input The tensor to reduce. + * @param axis The dimensions to reduce. Must be in the range + * @param options carries optional attributes values + * @return a new instance of ReduceMax + * @see org.tensorflow.op.core.ReduceMax */ - public VariableShape variableShape(Operand input, Class outType) { - return VariableShape.create(scope, input, outType); + public ReduceMax reduceMax(Operand input, Operand axis, + ReduceMax.Options... options) { + return ReduceMax.create(scope, input, axis, options); } /** - * Builds an {@link MapPeek} operation + * Builds an {@link OrderedMapStage} operation * - * @param key + * @param key int64 * @param indices + * @param values a list of tensors * @param dtypes * @param options carries optional attributes values - * @return a new instance of MapPeek - * @see org.tensorflow.op.core.MapPeek + * @return a new instance of OrderedMapStage + * @see org.tensorflow.op.core.OrderedMapStage */ - public MapPeek mapPeek(Operand key, Operand indices, List> dtypes, - MapPeek.Options... options) { - return MapPeek.create(scope, key, indices, dtypes, options); + public OrderedMapStage orderedMapStage(Operand key, Operand indices, + Iterable> values, List> dtypes, OrderedMapStage.Options... options) { + return OrderedMapStage.create(scope, key, indices, values, dtypes, options); } /** - * Builds an {@link ScatterMax} operation + * Builds an {@link InitializeTable} operation * - * @param ref Should be from a `Variable` node. - * @param indices A tensor of indices into the first dimension of `ref`. - * @param updates A tensor of updated values to reduce into `ref`. - * @param options carries optional attributes values - * @return a new instance of ScatterMax - * @see org.tensorflow.op.core.ScatterMax + * @param tableHandle Handle to a table which will be initialized. + * @param keys Keys of type Tkey. + * @param values Values of type Tval. + * @return a new instance of InitializeTable + * @see org.tensorflow.op.core.InitializeTable */ - public ScatterMax scatterMax(Operand ref, - Operand indices, Operand updates, ScatterMax.Options... options) { - return ScatterMax.create(scope, ref, indices, updates, options); + public InitializeTable initializeTable(Operand tableHandle, Operand keys, + Operand values) { + return InitializeTable.create(scope, tableHandle, keys, values); } /** - * Builds an {@link Constant} operation + * Builds an {@link MulNoNan} operation * - * @param data An array containing the values to put into the new constant. The dimensions of the - * @see org.tensorflow.op.core.Constant + * @param x + * @param y + * @return a new instance of MulNoNan + * @see org.tensorflow.op.core.MulNoNan */ - public Constant constant(float[][][][][] data) { - return Constant.create(scope, data); + public MulNoNan mulNoNan(Operand x, Operand y) { + return MulNoNan.create(scope, x, y); } /** - * Builds an {@link TensorListScatter} operation + * Builds an {@link MapStage} operation * - * @param tensor + * @param key int64 * @param indices - * @param elementShape - * @return a new instance of TensorListScatter - * @see org.tensorflow.op.core.TensorListScatter + * @param values a list of tensors + * @param dtypes + * @param options carries optional attributes values + * @return a new instance of MapStage + * @see org.tensorflow.op.core.MapStage */ - public TensorListScatter tensorListScatter(Operand tensor, - Operand indices, Operand elementShape) { - return TensorListScatter.create(scope, tensor, indices, elementShape); + public MapStage mapStage(Operand key, Operand indices, + Iterable> values, List> dtypes, MapStage.Options... options) { + return MapStage.create(scope, key, indices, values, dtypes, options); } /** - * Builds an {@link CombinedNonMaxSuppression} operation + * Builds an {@link UnsortedSegmentJoin} operation * - * @param boxes A 4-D float tensor of shape `[batch_size, num_boxes, q, 4]`. If `q` is 1 then - * @param scores A 3-D float tensor of shape `[batch_size, num_boxes, num_classes]` - * @param maxOutputSizePerClass A scalar integer tensor representing the maximum number of - * @param maxTotalSize A scalar representing maximum number of boxes retained over all classes. - * @param iouThreshold A 0-D float tensor representing the threshold for deciding whether - * @param scoreThreshold A 0-D float tensor representing the threshold for deciding when to remove + * @param inputs The input to be joined. + * @param segmentIds A tensor whose shape is a prefix of data.shape. Negative segment ids are not + * @param numSegments A scalar. * @param options carries optional attributes values - * @return a new instance of CombinedNonMaxSuppression - * @see org.tensorflow.op.core.CombinedNonMaxSuppression + * @return a new instance of UnsortedSegmentJoin + * @see org.tensorflow.op.core.UnsortedSegmentJoin */ - public CombinedNonMaxSuppression combinedNonMaxSuppression(Operand boxes, - Operand scores, Operand maxOutputSizePerClass, Operand maxTotalSize, - Operand iouThreshold, Operand scoreThreshold, - CombinedNonMaxSuppression.Options... options) { - return CombinedNonMaxSuppression.create(scope, boxes, scores, maxOutputSizePerClass, maxTotalSize, iouThreshold, scoreThreshold, options); + public UnsortedSegmentJoin unsortedSegmentJoin( + Operand inputs, Operand segmentIds, Operand numSegments, + UnsortedSegmentJoin.Options... options) { + return UnsortedSegmentJoin.create(scope, inputs, segmentIds, numSegments, options); } /** - * Builds an {@link StridedSlice} operation + * Builds an {@link TensorScatterSub} operation * - * @param input - * @param begin `begin[k]` specifies the offset into the `k`th range specification. - * @param end `end[i]` is like `begin` with the exception that `end_mask` is - * @param strides `strides[i]` specifies the increment in the `i`th specification + * @param tensor Tensor to copy/update. + * @param indices Index tensor. + * @param updates Updates to scatter into output. + * @return a new instance of TensorScatterSub + * @see org.tensorflow.op.core.TensorScatterSub + */ + public TensorScatterSub tensorScatterSub(Operand tensor, + Operand indices, Operand updates) { + return TensorScatterSub.create(scope, tensor, indices, updates); + } + + /** + * Builds an {@link SwitchCond} operation + * + * @param data The tensor to be forwarded to the appropriate output. + * @param pred A scalar that specifies which output port will receive data. + * @return a new instance of SwitchCond + * @see org.tensorflow.op.core.SwitchCond + */ + public SwitchCond switchCond(Operand data, Operand pred) { + return SwitchCond.create(scope, data, pred); + } + + /** + * Builds an {@link StridedSliceAssign} operation + * + * @param ref + * @param begin + * @param end + * @param strides + * @param value * @param options carries optional attributes values - * @return a new instance of StridedSlice - * @see org.tensorflow.op.core.StridedSlice + * @return a new instance of StridedSliceAssign + * @see org.tensorflow.op.core.StridedSliceAssign */ - public StridedSlice stridedSlice(Operand input, Operand begin, - Operand end, Operand strides, StridedSlice.Options... options) { - return StridedSlice.create(scope, input, begin, end, strides, options); + public StridedSliceAssign stridedSliceAssign(Operand ref, + Operand begin, Operand end, Operand strides, Operand value, + StridedSliceAssign.Options... options) { + return StridedSliceAssign.create(scope, ref, begin, end, strides, value, options); } /** - * Builds an {@link Shape} operation + * Builds an {@link Reshape} operation * - * @param input - * @return a new instance of Shape - * @see org.tensorflow.op.core.Shape + * @param tensor + * @param shape Defines the shape of the output tensor. + * @return a new instance of Reshape + * @see org.tensorflow.op.core.Reshape */ - public org.tensorflow.op.core.Shape shape(Operand input) { - return org.tensorflow.op.core.Shape.create(scope, input); + public Reshape reshape(Operand tensor, Operand shape) { + return Reshape.create(scope, tensor, shape); } /** - * Builds an {@link GatherNd} operation + * Builds an {@link OneHot} operation * - * @param params The tensor from which to gather values. - * @param indices Index tensor. - * @return a new instance of GatherNd - * @see org.tensorflow.op.core.GatherNd + * @param indices A tensor of indices. + * @param depth A scalar defining the depth of the one hot dimension. + * @param onValue A scalar defining the value to fill in output when `indices[j] = i`. + * @param offValue A scalar defining the value to fill in output when `indices[j] != i`. + * @param options carries optional attributes values + * @return a new instance of OneHot + * @see org.tensorflow.op.core.OneHot */ - public GatherNd gatherNd(Operand params, Operand indices) { - return GatherNd.create(scope, params, indices); + public OneHot oneHot(Operand indices, Operand depth, + Operand onValue, Operand offValue, OneHot.Options... options) { + return OneHot.create(scope, indices, depth, onValue, offValue, options); } /** - * Builds an {@link SwitchCond} operation + * Builds an {@link Where} operation * - * @param data The tensor to be forwarded to the appropriate output. - * @param pred A scalar that specifies which output port will receive data. - * @return a new instance of SwitchCond - * @see org.tensorflow.op.core.SwitchCond + * @param condition + * @return a new instance of Where + * @see org.tensorflow.op.core.Where */ - public SwitchCond switchCond(Operand data, Operand pred) { - return SwitchCond.create(scope, data, pred); + public Where where(Operand condition) { + return Where.create(scope, condition); } /** - * Builds an {@link ResourceCountUpTo} operation + * Builds an {@link MutableHashTableOfTensors} operation * - * @param resource Should be from a scalar `Variable` node. - * @param limit If incrementing ref would bring it above limit, instead generates an - * @param T - * @return a new instance of ResourceCountUpTo - * @see org.tensorflow.op.core.ResourceCountUpTo + * @param keyDtype Type of the table keys. + * @param valueDtype Type of the table values. + * @param options carries optional attributes values + * @return a new instance of MutableHashTableOfTensors + * @see org.tensorflow.op.core.MutableHashTableOfTensors */ - public ResourceCountUpTo resourceCountUpTo(Operand resource, Long limit, - Class T) { - return ResourceCountUpTo.create(scope, resource, limit, T); + public MutableHashTableOfTensors mutableHashTableOfTensors(DataType keyDtype, + DataType valueDtype, MutableHashTableOfTensors.Options... options) { + return MutableHashTableOfTensors.create(scope, keyDtype, valueDtype, options); } /** - * Builds an {@link Where3} operation + * Builds an {@link UniqueWithCounts} operation * - * @param condition - * @param x = A `Tensor` which may have the same shape as `condition`. - * @param y = A `Tensor` with the same type and shape as `x`. - * @return a new instance of Where3 - * @see org.tensorflow.op.core.Where3 + * @param x A `Tensor`. + * @param axis A `Tensor` of type `int32` (default: None). The axis of the Tensor to + * @param outIdx + * @return a new instance of UniqueWithCounts + * @see org.tensorflow.op.core.UniqueWithCounts */ - public Where3 where3(Operand condition, Operand x, Operand y) { - return Where3.create(scope, condition, x, y); + public UniqueWithCounts uniqueWithCounts( + Operand x, Operand axis, DataType outIdx) { + return UniqueWithCounts.create(scope, x, axis, outIdx); } /** - * Builds an {@link InitializeTableFromTextFile} operation + * Builds an {@link ResourceScatterNdAdd} operation * - * @param tableHandle Handle to a table which will be initialized. - * @param filename Filename of a vocabulary text file. - * @param keyIndex Column index in a line to get the table `key` values from. - * @param valueIndex Column index that represents information of a line to get the table + * @param ref A resource handle. Must be from a VarHandleOp. + * @param indices A Tensor. Must be one of the following types: int32, int64. + * @param updates A Tensor. Must have the same type as ref. A tensor of * @param options carries optional attributes values - * @return a new instance of InitializeTableFromTextFile - * @see org.tensorflow.op.core.InitializeTableFromTextFile + * @return a new instance of ResourceScatterNdAdd + * @see org.tensorflow.op.core.ResourceScatterNdAdd */ - public InitializeTableFromTextFile initializeTableFromTextFile(Operand tableHandle, - Operand filename, Long keyIndex, Long valueIndex, - InitializeTableFromTextFile.Options... options) { - return InitializeTableFromTextFile.create(scope, tableHandle, filename, keyIndex, valueIndex, options); + public ResourceScatterNdAdd resourceScatterNdAdd(Operand ref, + Operand indices, Operand updates, ResourceScatterNdAdd.Options... options) { + return ResourceScatterNdAdd.create(scope, ref, indices, updates, options); } /** - * Builds an {@link ResourceScatterUpdate} operation + * Builds an {@link HistogramFixedWidth} operation * - * @param resource Should be from a `Variable` node. - * @param indices A tensor of indices into the first dimension of `ref`. - * @param updates A tensor of updated values to add to `ref`. - * @return a new instance of ResourceScatterUpdate - * @see org.tensorflow.op.core.ResourceScatterUpdate + * @param values Numeric `Tensor`. + * @param valueRange Shape [2] `Tensor` of same `dtype` as `values`. + * @param nbins Scalar `int32 Tensor`. Number of histogram bins. + * @return a new instance of HistogramFixedWidth + * @see org.tensorflow.op.core.HistogramFixedWidth */ - public ResourceScatterUpdate resourceScatterUpdate(Operand resource, - Operand indices, Operand updates) { - return ResourceScatterUpdate.create(scope, resource, indices, updates); + public HistogramFixedWidth histogramFixedWidth(Operand values, + Operand valueRange, Operand nbins) { + return HistogramFixedWidth.create(scope, values, valueRange, nbins); } /** - * Builds an {@link IdentityN} operation + * Builds an {@link VariableShape} operation * * @param input - * @return a new instance of IdentityN - * @see org.tensorflow.op.core.IdentityN + * @param outType + * @return a new instance of VariableShape + * @see org.tensorflow.op.core.VariableShape */ - public IdentityN identityN(Iterable> input) { - return IdentityN.create(scope, input); + public VariableShape variableShape(Operand input, DataType outType) { + return VariableShape.create(scope, input, outType); } /** - * Builds an {@link BatchToSpace} operation + * Builds an {@link MapUnstage} operation * - * @param input 4-D tensor with shape - * @param crops 2-D tensor of non-negative integers with shape `[2, 2]`. It specifies - * @param blockSize - * @return a new instance of BatchToSpace - * @see org.tensorflow.op.core.BatchToSpace + * @param key + * @param indices + * @param dtypes + * @param options carries optional attributes values + * @return a new instance of MapUnstage + * @see org.tensorflow.op.core.MapUnstage */ - public BatchToSpace batchToSpace(Operand input, Operand crops, - Long blockSize) { - return BatchToSpace.create(scope, input, crops, blockSize); + public MapUnstage mapUnstage(Operand key, Operand indices, + List> dtypes, MapUnstage.Options... options) { + return MapUnstage.create(scope, key, indices, dtypes, options); } /** - * Builds an {@link Constant} operation + * Builds an {@link Concat} operation * - * @param data An array containing the values to put into the new constant. The dimensions of the - * @see org.tensorflow.op.core.Constant + * @param values List of `N` Tensors to concatenate. Their ranks and types must match, + * @param axis 0-D. The dimension along which to concatenate. Must be in the + * @return a new instance of Concat + * @see org.tensorflow.op.core.Concat */ - public Constant constant(boolean[][][] data) { - return Constant.create(scope, data); + public Concat concat(Iterable> values, Operand axis) { + return Concat.create(scope, values, axis); } /** - * Builds an {@link StageClear} operation + * Builds an {@link BarrierClose} operation * - * @param dtypes + * @param handle The handle to a barrier. * @param options carries optional attributes values - * @return a new instance of StageClear - * @see org.tensorflow.op.core.StageClear + * @return a new instance of BarrierClose + * @see org.tensorflow.op.core.BarrierClose */ - public StageClear stageClear(List> dtypes, StageClear.Options... options) { - return StageClear.create(scope, dtypes, options); + public BarrierClose barrierClose(Operand handle, BarrierClose.Options... options) { + return BarrierClose.create(scope, handle, options); } /** - * Builds an {@link TryRpc} operation + * Builds an {@link IdentityN} operation * - * @param address `0-D` or `1-D`. The address (i.e. host_name:port) of the RPC server. - * @param method `0-D` or `1-D`. The method address on the RPC server. - * @param request `0-D` or `1-D`. Serialized proto strings: the rpc request argument. - * @param options carries optional attributes values - * @return a new instance of TryRpc - * @see org.tensorflow.op.core.TryRpc + * @param input + * @return a new instance of IdentityN + * @see org.tensorflow.op.core.IdentityN */ - public TryRpc tryRpc(Operand address, Operand method, Operand request, - TryRpc.Options... options) { - return TryRpc.create(scope, address, method, request, options); + public IdentityN identityN(Iterable> input) { + return IdentityN.create(scope, input); } /** - * Builds an {@link InplaceUpdate} operation + * Builds an {@link InplaceSub} operation * - * @param x A tensor of type `T`. + * @param x A `Tensor` of type T. * @param i A vector. Indices into the left-most dimension of `x`. * @param v A `Tensor` of type T. Same dimension sizes as x except the first dimension, which must be the same as i's size. - * @return a new instance of InplaceUpdate - * @see org.tensorflow.op.core.InplaceUpdate + * @return a new instance of InplaceSub + * @see org.tensorflow.op.core.InplaceSub */ - public InplaceUpdate inplaceUpdate(Operand x, Operand i, Operand v) { - return InplaceUpdate.create(scope, x, i, v); + public InplaceSub inplaceSub(Operand x, Operand i, Operand v) { + return InplaceSub.create(scope, x, i, v); + } + + /** + * Builds an {@link VarHandleOp} operation + * + * @param dtype the type of this variable. Must agree with the dtypes + * @param shape The (possibly partially specified) shape of this variable. + * @param options carries optional attributes values + * @return a new instance of VarHandleOp + * @see org.tensorflow.op.core.VarHandleOp + */ + public VarHandleOp varHandleOp(DataType dtype, Shape shape, + VarHandleOp.Options... options) { + return VarHandleOp.create(scope, dtype, shape, options); } /** - * Builds an {@link Constant} operation + * Builds an {@link TensorArraySplit} operation * - * @param data An array containing the values to put into the new constant. The dimensions of the - * @see org.tensorflow.op.core.Constant + * @param handle The handle to a TensorArray. + * @param value The concatenated tensor to write to the TensorArray. + * @param lengths The vector of lengths, how to split the rows of value into the + * @param flowIn A float scalar that enforces proper chaining of operations. + * @return a new instance of TensorArraySplit + * @see org.tensorflow.op.core.TensorArraySplit */ - public Constant constant(double[][][][] data) { - return Constant.create(scope, data); + public TensorArraySplit tensorArraySplit(Operand handle, Operand value, + Operand lengths, Operand flowIn) { + return TensorArraySplit.create(scope, handle, value, lengths, flowIn); } /** @@ -3888,16 +3355,17 @@ public DeepCopy deepCopy(Operand x) { } /** - * Builds an {@link TensorArrayGrad} operation + * Builds an {@link StagePeek} operation * - * @param handle The handle to the forward TensorArray. - * @param flowIn A float scalar that enforces proper chaining of operations. - * @param source The gradient source string, used to decide which gradient TensorArray - * @return a new instance of TensorArrayGrad - * @see org.tensorflow.op.core.TensorArrayGrad + * @param index + * @param dtypes + * @param options carries optional attributes values + * @return a new instance of StagePeek + * @see org.tensorflow.op.core.StagePeek */ - public TensorArrayGrad tensorArrayGrad(Operand handle, Operand flowIn, String source) { - return TensorArrayGrad.create(scope, handle, flowIn, source); + public StagePeek stagePeek(Operand index, List> dtypes, + StagePeek.Options... options) { + return StagePeek.create(scope, index, dtypes, options); } /** @@ -3926,85 +3394,92 @@ public ResourceApplyAdamWithAmsgrad resourceApplyAdamWithAmsgrad(Operand } /** - * Builds an {@link TensorArray} operation + * Builds an {@link MapIncompleteSize} operation * - * @param size The size of the array. - * @param dtype The type of the elements on the tensor_array. + * @param dtypes * @param options carries optional attributes values - * @return a new instance of TensorArray - * @see org.tensorflow.op.core.TensorArray + * @return a new instance of MapIncompleteSize + * @see org.tensorflow.op.core.MapIncompleteSize */ - public TensorArray tensorArray(Operand size, Class dtype, - TensorArray.Options... options) { - return TensorArray.create(scope, size, dtype, options); + public MapIncompleteSize mapIncompleteSize(List> dtypes, + MapIncompleteSize.Options... options) { + return MapIncompleteSize.create(scope, dtypes, options); } /** - * Builds an {@link StagePeek} operation + * Builds an {@link StatefulStandardNormalV2} operation * - * @param index - * @param dtypes - * @param options carries optional attributes values - * @return a new instance of StagePeek - * @see org.tensorflow.op.core.StagePeek + * @param resource The handle of the resource variable that stores the state of the RNG. + * @param algorithm The RNG algorithm. + * @param shape The shape of the output tensor. + * @param dtype The type of the output. + * @return a new instance of StatefulStandardNormalV2 + * @see org.tensorflow.op.core.StatefulStandardNormalV2 */ - public StagePeek stagePeek(Operand index, List> dtypes, - StagePeek.Options... options) { - return StagePeek.create(scope, index, dtypes, options); + public StatefulStandardNormalV2 statefulStandardNormalV2(Operand resource, + Operand algorithm, Operand shape, DataType dtype) { + return StatefulStandardNormalV2.create(scope, resource, algorithm, shape, dtype); } /** - * Builds an {@link OrderedMapUnstage} operation + * Builds an {@link MapUnstageNoKey} operation * - * @param key * @param indices * @param dtypes * @param options carries optional attributes values - * @return a new instance of OrderedMapUnstage - * @see org.tensorflow.op.core.OrderedMapUnstage + * @return a new instance of MapUnstageNoKey + * @see org.tensorflow.op.core.MapUnstageNoKey */ - public OrderedMapUnstage orderedMapUnstage(Operand key, Operand indices, - List> dtypes, OrderedMapUnstage.Options... options) { - return OrderedMapUnstage.create(scope, key, indices, dtypes, options); + public MapUnstageNoKey mapUnstageNoKey(Operand indices, List> dtypes, + MapUnstageNoKey.Options... options) { + return MapUnstageNoKey.create(scope, indices, dtypes, options); } /** - * Builds an {@link EuclideanNorm} operation + * Builds an {@link ExtractVolumePatches} operation * - * @param input The tensor to reduce. - * @param axis The dimensions to reduce. Must be in the range - * @param options carries optional attributes values - * @return a new instance of EuclideanNorm - * @see org.tensorflow.op.core.EuclideanNorm + * @param input 5-D Tensor with shape `[batch, in_planes, in_rows, in_cols, depth]`. + * @param ksizes The size of the sliding window for each dimension of `input`. + * @param strides 1-D of length 5. How far the centers of two consecutive patches are in + * @param padding The type of padding algorithm to use. + * @return a new instance of ExtractVolumePatches + * @see org.tensorflow.op.core.ExtractVolumePatches */ - public EuclideanNorm euclideanNorm(Operand input, Operand axis, - EuclideanNorm.Options... options) { - return EuclideanNorm.create(scope, input, axis, options); + public ExtractVolumePatches extractVolumePatches(Operand input, + List ksizes, List strides, String padding) { + return ExtractVolumePatches.create(scope, input, ksizes, strides, padding); } /** - * Builds an {@link Constant} operation + * Builds an {@link ResourceSparseApplyKerasMomentum} operation * - * @param data An array containing the values to put into the new constant. String elements are - * @see org.tensorflow.op.core.Constant + * @param var Should be from a Variable(). + * @param accum Should be from a Variable(). + * @param lr Learning rate. Must be a scalar. + * @param grad The gradient. + * @param indices A vector of indices into the first dimension of var and accum. + * @param momentum Momentum. Must be a scalar. + * @param options carries optional attributes values + * @return a new instance of ResourceSparseApplyKerasMomentum + * @see org.tensorflow.op.core.ResourceSparseApplyKerasMomentum */ - public Constant constant(byte[][] data) { - return Constant.create(scope, data); + public ResourceSparseApplyKerasMomentum resourceSparseApplyKerasMomentum( + Operand var, Operand accum, Operand lr, Operand grad, Operand indices, + Operand momentum, ResourceSparseApplyKerasMomentum.Options... options) { + return ResourceSparseApplyKerasMomentum.create(scope, var, accum, lr, grad, indices, momentum, options); } /** - * Builds an {@link OrderedMapPeek} operation + * Builds an {@link SelectV2} operation * - * @param key - * @param indices - * @param dtypes - * @param options carries optional attributes values - * @return a new instance of OrderedMapPeek - * @see org.tensorflow.op.core.OrderedMapPeek + * @param condition + * @param t + * @param e + * @return a new instance of SelectV2 + * @see org.tensorflow.op.core.SelectV2 */ - public OrderedMapPeek orderedMapPeek(Operand key, Operand indices, - List> dtypes, OrderedMapPeek.Options... options) { - return OrderedMapPeek.create(scope, key, indices, dtypes, options); + public SelectV2 selectV2(Operand condition, Operand t, Operand e) { + return SelectV2.create(scope, condition, t, e); } /** @@ -4020,125 +3495,120 @@ public AssignVariableOp assignVariableOp(Operand resource, Operand val } /** - * Builds an {@link GetSessionTensor} operation + * Builds an {@link ExpandDims} operation * - * @param handle The handle for a tensor stored in the session state. - * @param dtype The type of the output value. - * @return a new instance of GetSessionTensor - * @see org.tensorflow.op.core.GetSessionTensor + * @param input + * @param axis 0-D (scalar). Specifies the dimension index at which to + * @return a new instance of ExpandDims + * @see org.tensorflow.op.core.ExpandDims */ - public GetSessionTensor getSessionTensor(Operand handle, Class dtype) { - return GetSessionTensor.create(scope, handle, dtype); + public ExpandDims expandDims(Operand input, Operand axis) { + return ExpandDims.create(scope, input, axis); } /** - * Builds an {@link Constant} operation + * Builds an {@link Max} operation * - * @param data An array containing the values to put into the new constant. The dimensions of the - * @see org.tensorflow.op.core.Constant + * @param input The tensor to reduce. + * @param axis The dimensions to reduce. Must be in the range + * @param options carries optional attributes values + * @return a new instance of Max + * @see org.tensorflow.op.core.Max */ - public Constant constant(float[][][] data) { - return Constant.create(scope, data); + public Max max(Operand input, Operand axis, + Max.Options... options) { + return Max.create(scope, input, axis, options); } /** - * Builds an {@link MapUnstageNoKey} operation + * Builds an {@link PlaceholderWithDefault} operation * - * @param indices - * @param dtypes - * @param options carries optional attributes values - * @return a new instance of MapUnstageNoKey - * @see org.tensorflow.op.core.MapUnstageNoKey + * @param input The default value to produce when `output` is not fed. + * @param shape The (possibly partial) shape of the tensor. + * @return a new instance of PlaceholderWithDefault + * @see org.tensorflow.op.core.PlaceholderWithDefault */ - public MapUnstageNoKey mapUnstageNoKey(Operand indices, List> dtypes, - MapUnstageNoKey.Options... options) { - return MapUnstageNoKey.create(scope, indices, dtypes, options); + public PlaceholderWithDefault placeholderWithDefault(Operand input, Shape shape) { + return PlaceholderWithDefault.create(scope, input, shape); } /** - * Builds an {@link Constant} operation + * Builds an {@link ResourceScatterUpdate} operation * - * @param data An array containing the values to put into the new constant. The dimensions of the - * @see org.tensorflow.op.core.Constant + * @param resource Should be from a `Variable` node. + * @param indices A tensor of indices into the first dimension of `ref`. + * @param updates A tensor of updated values to add to `ref`. + * @return a new instance of ResourceScatterUpdate + * @see org.tensorflow.op.core.ResourceScatterUpdate */ - public Constant constant(long[][] data) { - return Constant.create(scope, data); + public ResourceScatterUpdate resourceScatterUpdate(Operand resource, + Operand indices, Operand updates) { + return ResourceScatterUpdate.create(scope, resource, indices, updates); } /** - * Builds an {@link MirrorPad} operation + * Builds an {@link TensorArray} operation * - * @param input The input tensor to be padded. - * @param paddings A two-column matrix specifying the padding sizes. The number of - * @param mode Either `REFLECT` or `SYMMETRIC`. In reflect mode the padded regions - * @return a new instance of MirrorPad - * @see org.tensorflow.op.core.MirrorPad + * @param size The size of the array. + * @param dtype The type of the elements on the tensor_array. + * @param options carries optional attributes values + * @return a new instance of TensorArray + * @see org.tensorflow.op.core.TensorArray */ - public MirrorPad mirrorPad(Operand input, Operand paddings, - String mode) { - return MirrorPad.create(scope, input, paddings, mode); + public TensorArray tensorArray(Operand size, DataType dtype, + TensorArray.Options... options) { + return TensorArray.create(scope, size, dtype, options); } /** - * Builds an {@link TensorListSplit} operation + * Builds an {@link Unique} operation * - * @param tensor - * @param elementShape - * @param lengths - * @return a new instance of TensorListSplit - * @see org.tensorflow.op.core.TensorListSplit + * @param x A `Tensor`. + * @param axis A `Tensor` of type `int32` (default: None). The axis of the Tensor to + * @return a new instance of Unique + * @see org.tensorflow.op.core.Unique */ - public TensorListSplit tensorListSplit(Operand tensor, - Operand elementShape, Operand lengths) { - return TensorListSplit.create(scope, tensor, elementShape, lengths); + public Unique unique(Operand x, Operand axis) { + return Unique.create(scope, x, axis); } /** - * Builds an {@link StridedSliceAssign} operation + * Builds an {@link EmptyTensorList} operation * - * @param ref - * @param begin - * @param end - * @param strides - * @param value - * @param options carries optional attributes values - * @return a new instance of StridedSliceAssign - * @see org.tensorflow.op.core.StridedSliceAssign + * @param elementShape + * @param maxNumElements + * @param elementDtype + * @return a new instance of EmptyTensorList + * @see org.tensorflow.op.core.EmptyTensorList */ - public StridedSliceAssign stridedSliceAssign(Operand ref, - Operand begin, Operand end, Operand strides, Operand value, - StridedSliceAssign.Options... options) { - return StridedSliceAssign.create(scope, ref, begin, end, strides, value, options); + public EmptyTensorList emptyTensorList(Operand elementShape, + Operand maxNumElements, DataType elementDtype) { + return EmptyTensorList.create(scope, elementShape, maxNumElements, elementDtype); } /** - * Builds an {@link MapStage} operation + * Builds an {@link DeleteSessionTensor} operation * - * @param key int64 - * @param indices - * @param values a list of tensors - * @param dtypes - * @param options carries optional attributes values - * @return a new instance of MapStage - * @see org.tensorflow.op.core.MapStage + * @param handle The handle for a tensor stored in the session state. + * @return a new instance of DeleteSessionTensor + * @see org.tensorflow.op.core.DeleteSessionTensor */ - public MapStage mapStage(Operand key, Operand indices, Iterable> values, - List> dtypes, MapStage.Options... options) { - return MapStage.create(scope, key, indices, values, dtypes, options); + public DeleteSessionTensor deleteSessionTensor(Operand handle) { + return DeleteSessionTensor.create(scope, handle); } /** - * Builds an {@link ReduceAll} operation + * Builds an {@link BatchToSpace} operation * - * @param input The tensor to reduce. - * @param axis The dimensions to reduce. Must be in the range - * @param options carries optional attributes values - * @return a new instance of ReduceAll - * @see org.tensorflow.op.core.ReduceAll + * @param input 4-D tensor with shape + * @param crops 2-D tensor of non-negative integers with shape `[2, 2]`. It specifies + * @param blockSize + * @return a new instance of BatchToSpace + * @see org.tensorflow.op.core.BatchToSpace */ - public ReduceAll reduceAll(Operand input, Operand axis, - ReduceAll.Options... options) { - return ReduceAll.create(scope, input, axis, options); + public BatchToSpace batchToSpace(Operand input, Operand crops, + Long blockSize) { + return BatchToSpace.create(scope, input, crops, blockSize); } /** @@ -4154,35 +3624,42 @@ public TensorListPushBack tensorListPushBack(Operand inputHandle, Operand } /** - * Builds an {@link TensorScatterUpdate} operation + * Builds an {@link Empty} operation + * + * @param shape 1-D. Represents the shape of the output tensor. + * @param dtype + * @param options carries optional attributes values + * @return a new instance of Empty + * @see org.tensorflow.op.core.Empty + */ + public Empty empty(Operand shape, DataType dtype, Empty.Options... options) { + return Empty.create(scope, shape, dtype, options); + } + + /** + * Builds an {@link ScatterNd} operation * - * @param tensor Tensor to copy/update. * @param indices Index tensor. * @param updates Updates to scatter into output. - * @return a new instance of TensorScatterUpdate - * @see org.tensorflow.op.core.TensorScatterUpdate + * @param shape 1-D. The shape of the resulting tensor. + * @return a new instance of ScatterNd + * @see org.tensorflow.op.core.ScatterNd */ - public TensorScatterUpdate tensorScatterUpdate(Operand tensor, - Operand indices, Operand updates) { - return TensorScatterUpdate.create(scope, tensor, indices, updates); + public ScatterNd scatterNd(Operand indices, Operand updates, + Operand shape) { + return ScatterNd.create(scope, indices, updates, shape); } /** - * Builds an {@link ResourceStridedSliceAssign} operation + * Builds an {@link SetDiff1d} operation * - * @param ref - * @param begin - * @param end - * @param strides - * @param value - * @param options carries optional attributes values - * @return a new instance of ResourceStridedSliceAssign - * @see org.tensorflow.op.core.ResourceStridedSliceAssign + * @param x 1-D. Values to keep. + * @param y 1-D. Values to remove. + * @return a new instance of SetDiff1d + * @see org.tensorflow.op.core.SetDiff1d */ - public ResourceStridedSliceAssign resourceStridedSliceAssign(Operand ref, - Operand begin, Operand end, Operand strides, Operand value, - ResourceStridedSliceAssign.Options... options) { - return ResourceStridedSliceAssign.create(scope, ref, begin, end, strides, value, options); + public SetDiff1d setDiff1d(Operand x, Operand y) { + return SetDiff1d.create(scope, x, y); } /** @@ -4197,66 +3674,123 @@ public Rank rank(Operand input) { } /** - * Builds an {@link Constant} operation + * Builds an {@link ResourceGather} operation * - * @param data An array containing the values to put into the new constant. The dimensions of the - * @see org.tensorflow.op.core.Constant + * @param resource + * @param indices + * @param dtype + * @param options carries optional attributes values + * @return a new instance of ResourceGather + * @see org.tensorflow.op.core.ResourceGather */ - public Constant constant(int[][][][][] data) { - return Constant.create(scope, data); + public ResourceGather resourceGather(Operand resource, + Operand indices, DataType dtype, ResourceGather.Options... options) { + return ResourceGather.create(scope, resource, indices, dtype, options); } /** - * Builds an {@link Gather} operation + * Builds an {@link Range} operation * - * @param params The tensor from which to gather values. Must be at least rank - * @param indices Index tensor. Must be in range `[0, params.shape[axis])`. - * @param axis The axis in `params` to gather `indices` from. Defaults to the first + * @param start 0-D (scalar). First entry in the sequence. + * @param limit 0-D (scalar). Upper limit of sequence, exclusive. + * @param delta 0-D (scalar). Optional. Default is 1. Number that increments `start`. + * @return a new instance of Range + * @see org.tensorflow.op.core.Range + */ + public Range range(Operand start, Operand limit, Operand delta) { + return Range.create(scope, start, limit, delta); + } + + /** + * Builds an {@link WriteKafka} operation + * + * @param message + * @param topic + * @param servers + * @return a new instance of WriteKafka + * @see org.tensorflow.op.core.WriteKafka + */ + public WriteKafka writeKafka(Operand message, Operand topic, + Operand servers) { + return WriteKafka.create(scope, message, topic, servers); + } + + /** + * Builds an {@link BarrierTakeMany} operation + * + * @param handle The handle to a barrier. + * @param numElements A single-element tensor containing the number of elements to + * @param componentTypes The type of each component in a value. * @param options carries optional attributes values - * @return a new instance of Gather - * @see org.tensorflow.op.core.Gather + * @return a new instance of BarrierTakeMany + * @see org.tensorflow.op.core.BarrierTakeMany */ - public Gather gather(Operand params, - Operand indices, Operand axis, Gather.Options... options) { - return Gather.create(scope, params, indices, axis, options); + public BarrierTakeMany barrierTakeMany(Operand handle, Operand numElements, + List> componentTypes, BarrierTakeMany.Options... options) { + return BarrierTakeMany.create(scope, handle, numElements, componentTypes, options); } /** - * Builds an {@link TensorListReserve} operation + * Builds an {@link Pad} operation * - * @param elementShape - * @param numElements - * @param elementDtype - * @return a new instance of TensorListReserve - * @see org.tensorflow.op.core.TensorListReserve + * @param input + * @param paddings + * @param constantValues + * @return a new instance of Pad + * @see org.tensorflow.op.core.Pad */ - public TensorListReserve tensorListReserve(Operand elementShape, - Operand numElements, Class elementDtype) { - return TensorListReserve.create(scope, elementShape, numElements, elementDtype); + public Pad pad(Operand input, Operand paddings, + Operand constantValues) { + return Pad.create(scope, input, paddings, constantValues); + } + + /** + * Builds an {@link ParallelConcat} operation + * + * @param values Tensors to be concatenated. All must have size 1 in the first dimension + * @param shape the final shape of the result; should be equal to the shapes of any input + * @return a new instance of ParallelConcat + * @see org.tensorflow.op.core.ParallelConcat + */ + public ParallelConcat parallelConcat(Iterable> values, Shape shape) { + return ParallelConcat.create(scope, values, shape); + } + + /** + * Builds an {@link MapClear} operation + * + * @param dtypes + * @param options carries optional attributes values + * @return a new instance of MapClear + * @see org.tensorflow.op.core.MapClear + */ + public MapClear mapClear(List> dtypes, MapClear.Options... options) { + return MapClear.create(scope, dtypes, options); } /** - * Builds an {@link Constant} operation + * Builds an {@link LookupTableSize} operation * - * @param data The value to put into the new constant. - * @return a boolean constant - * @see org.tensorflow.op.core.Constant + * @param tableHandle Handle to the table. + * @return a new instance of LookupTableSize + * @see org.tensorflow.op.core.LookupTableSize */ - public Constant constant(boolean data) { - return Constant.create(scope, data); + public LookupTableSize lookupTableSize(Operand tableHandle) { + return LookupTableSize.create(scope, tableHandle); } /** - * Builds an {@link Zeros} operation + * Builds an {@link ReduceAny} operation * - * @param dims a 1-D operand that represents the shape of the output tensor - * @param type the output tensor datatype - * @return a constant tensor initialized with zeros - * @throws IllegalArgumentException if the tensor type or shape cannot be initialized with zeros. - * @see org.tensorflow.op.core.Zeros + * @param input The tensor to reduce. + * @param axis The dimensions to reduce. Must be in the range + * @param options carries optional attributes values + * @return a new instance of ReduceAny + * @see org.tensorflow.op.core.ReduceAny */ - public Zeros zeros(Operand dims, Class type) { - return Zeros.create(scope, dims, type); + public ReduceAny reduceAny(Operand input, Operand axis, + ReduceAny.Options... options) { + return ReduceAny.create(scope, input, axis, options); } /** @@ -4271,66 +3805,75 @@ public Snapshot snapshot(Operand input) { } /** - * Builds an {@link LookupTableSize} operation + * Builds an {@link CombinedNonMaxSuppression} operation * - * @param tableHandle Handle to the table. - * @return a new instance of LookupTableSize - * @see org.tensorflow.op.core.LookupTableSize + * @param boxes A 4-D float tensor of shape `[batch_size, num_boxes, q, 4]`. If `q` is 1 then + * @param scores A 3-D float tensor of shape `[batch_size, num_boxes, num_classes]` + * @param maxOutputSizePerClass A scalar integer tensor representing the maximum number of + * @param maxTotalSize A scalar representing maximum number of boxes retained over all classes. + * @param iouThreshold A 0-D float tensor representing the threshold for deciding whether + * @param scoreThreshold A 0-D float tensor representing the threshold for deciding when to remove + * @param options carries optional attributes values + * @return a new instance of CombinedNonMaxSuppression + * @see org.tensorflow.op.core.CombinedNonMaxSuppression */ - public LookupTableSize lookupTableSize(Operand tableHandle) { - return LookupTableSize.create(scope, tableHandle); + public CombinedNonMaxSuppression combinedNonMaxSuppression(Operand boxes, + Operand scores, Operand maxOutputSizePerClass, Operand maxTotalSize, + Operand iouThreshold, Operand scoreThreshold, + CombinedNonMaxSuppression.Options... options) { + return CombinedNonMaxSuppression.create(scope, boxes, scores, maxOutputSizePerClass, maxTotalSize, iouThreshold, scoreThreshold, options); } /** - * Builds an {@link SetDiff1d} operation + * Builds an {@link ResourceGatherNd} operation * - * @param x 1-D. Values to keep. - * @param y 1-D. Values to remove. - * @return a new instance of SetDiff1d - * @see org.tensorflow.op.core.SetDiff1d + * @param resource + * @param indices + * @param dtype + * @return a new instance of ResourceGatherNd + * @see org.tensorflow.op.core.ResourceGatherNd */ - public SetDiff1d setDiff1d(Operand x, Operand y) { - return SetDiff1d.create(scope, x, y); + public ResourceGatherNd resourceGatherNd(Operand resource, + Operand indices, DataType dtype) { + return ResourceGatherNd.create(scope, resource, indices, dtype); } /** - * Builds an {@link Reshape} operation + * Builds an {@link ResourceScatterNdSub} operation * - * @param tensor - * @param shape Defines the shape of the output tensor. - * @return a new instance of Reshape - * @see org.tensorflow.op.core.Reshape + * @param ref A resource handle. Must be from a VarHandleOp. + * @param indices A Tensor. Must be one of the following types: int32, int64. + * @param updates A Tensor. Must have the same type as ref. A tensor of + * @param options carries optional attributes values + * @return a new instance of ResourceScatterNdSub + * @see org.tensorflow.op.core.ResourceScatterNdSub */ - public Reshape reshape(Operand tensor, Operand shape) { - return Reshape.create(scope, tensor, shape); + public ResourceScatterNdSub resourceScatterNdSub(Operand ref, + Operand indices, Operand updates, ResourceScatterNdSub.Options... options) { + return ResourceScatterNdSub.create(scope, ref, indices, updates, options); } /** - * Builds an {@link MatrixSetDiagV2} operation + * Builds an {@link StageSize} operation * - * @param input Rank `r+1`, where `r >= 1`. - * @param diagonal Rank `r` when `k` is an integer or `k[0] == k[1]`. Otherwise, it has rank `r+1`. - * @param k Diagonal offset(s). Positive value means superdiagonal, 0 refers to the main - * @return a new instance of MatrixSetDiagV2 - * @see org.tensorflow.op.core.MatrixSetDiagV2 + * @param dtypes + * @param options carries optional attributes values + * @return a new instance of StageSize + * @see org.tensorflow.op.core.StageSize */ - public MatrixSetDiagV2 matrixSetDiagV2(Operand input, Operand diagonal, - Operand k) { - return MatrixSetDiagV2.create(scope, input, diagonal, k); + public StageSize stageSize(List> dtypes, StageSize.Options... options) { + return StageSize.create(scope, dtypes, options); } /** - * Builds an {@link ResourceScatterMul} operation + * Builds an {@link LoopCond} operation * - * @param resource Should be from a `Variable` node. - * @param indices A tensor of indices into the first dimension of `ref`. - * @param updates A tensor of updated values to add to `ref`. - * @return a new instance of ResourceScatterMul - * @see org.tensorflow.op.core.ResourceScatterMul + * @param input A boolean scalar, representing the branch predicate of the Switch op. + * @return a new instance of LoopCond + * @see org.tensorflow.op.core.LoopCond */ - public ResourceScatterMul resourceScatterMul(Operand resource, - Operand indices, Operand updates) { - return ResourceScatterMul.create(scope, resource, indices, updates); + public LoopCond loopCond(Operand input) { + return LoopCond.create(scope, input); } /** @@ -4345,6 +3888,18 @@ public Squeeze squeeze(Operand input, Squeeze.Options... options) { return Squeeze.create(scope, input, options); } + /** + * Builds an {@link BroadcastTo} operation + * + * @param input A Tensor to broadcast. + * @param shape An 1-D `int` Tensor. The shape of the desired output. + * @return a new instance of BroadcastTo + * @see org.tensorflow.op.core.BroadcastTo + */ + public BroadcastTo broadcastTo(Operand input, Operand shape) { + return BroadcastTo.create(scope, input, shape); + } + /** * Builds an {@link NextIteration} operation * @@ -4357,51 +3912,19 @@ public NextIteration nextIteration(Operand data) { } /** - * Builds an {@link TensorStridedSliceUpdate} operation - * - * @param input - * @param begin - * @param end - * @param strides - * @param value - * @param options carries optional attributes values - * @return a new instance of TensorStridedSliceUpdate - * @see org.tensorflow.op.core.TensorStridedSliceUpdate - */ - public TensorStridedSliceUpdate tensorStridedSliceUpdate( - Operand input, Operand begin, Operand end, Operand strides, Operand value, - TensorStridedSliceUpdate.Options... options) { - return TensorStridedSliceUpdate.create(scope, input, begin, end, strides, value, options); - } - - /** - * Builds an {@link TensorArraySize} operation - * - * @param handle The handle to a TensorArray (output of TensorArray or TensorArrayGrad). - * @param flowIn A float scalar that enforces proper chaining of operations. - * @return a new instance of TensorArraySize - * @see org.tensorflow.op.core.TensorArraySize - */ - public TensorArraySize tensorArraySize(Operand handle, Operand flowIn) { - return TensorArraySize.create(scope, handle, flowIn); - } - - /** - * Builds an {@link StatefulRandomBinomial} operation + * Builds an {@link MatrixDiagV2} operation * - * @param resource - * @param algorithm - * @param shape - * @param counts - * @param probs - * @param dtype - * @return a new instance of StatefulRandomBinomial - * @see org.tensorflow.op.core.StatefulRandomBinomial + * @param diagonal Rank `r`, where `r >= 1` + * @param k Diagonal offset(s). Positive value means superdiagonal, 0 refers to the main + * @param numRows The number of rows of the output matrix. If it is not provided, the op assumes + * @param numCols The number of columns of the output matrix. If it is not provided, the op + * @param paddingValue The number to fill the area outside the specified diagonal band with. + * @return a new instance of MatrixDiagV2 + * @see org.tensorflow.op.core.MatrixDiagV2 */ - public StatefulRandomBinomial statefulRandomBinomial( - Operand resource, Operand algorithm, Operand shape, Operand counts, - Operand probs, Class dtype) { - return StatefulRandomBinomial.create(scope, resource, algorithm, shape, counts, probs, dtype); + public MatrixDiagV2 matrixDiagV2(Operand diagonal, Operand k, + Operand numRows, Operand numCols, Operand paddingValue) { + return MatrixDiagV2.create(scope, diagonal, k, numRows, numCols, paddingValue); } /** @@ -4416,104 +3939,28 @@ public Merge merge(Iterable> inputs) { } /** - * Builds an {@link TensorListElementShape} operation - * - * @param inputHandle - * @param shapeType - * @return a new instance of TensorListElementShape - * @see org.tensorflow.op.core.TensorListElementShape - */ - public TensorListElementShape tensorListElementShape(Operand inputHandle, - Class shapeType) { - return TensorListElementShape.create(scope, inputHandle, shapeType); - } - - /** - * Builds an {@link Variable} operation - * - * @param shape The shape of the variable tensor. - * @param dtype The type of elements in the variable tensor. - * @param options carries optional attributes values - * @return a new instance of Variable - * @see org.tensorflow.op.core.Variable - */ - public Variable variable(Shape shape, Class dtype, Variable.Options... options) { - return Variable.create(scope, shape, dtype, options); - } - - /** - * Builds an {@link HistogramFixedWidth} operation - * - * @param values Numeric `Tensor`. - * @param valueRange Shape [2] `Tensor` of same `dtype` as `values`. - * @param nbins Scalar `int32 Tensor`. Number of histogram bins. - * @return a new instance of HistogramFixedWidth - * @see org.tensorflow.op.core.HistogramFixedWidth - */ - public HistogramFixedWidth histogramFixedWidth(Operand values, - Operand valueRange, Operand nbins) { - return HistogramFixedWidth.create(scope, values, valueRange, nbins); - } - - /** - * Builds an {@link Constant} operation - * - * @param data An array containing the values to put into the new constant. The dimensions of the - * @see org.tensorflow.op.core.Constant - */ - public Constant constant(long[][][][][][] data) { - return Constant.create(scope, data); - } - - /** - * Builds an {@link OrderedMapClear} operation - * - * @param dtypes - * @param options carries optional attributes values - * @return a new instance of OrderedMapClear - * @see org.tensorflow.op.core.OrderedMapClear - */ - public OrderedMapClear orderedMapClear(List> dtypes, - OrderedMapClear.Options... options) { - return OrderedMapClear.create(scope, dtypes, options); - } - - /** - * Builds an {@link Split} operation - * - * @param axis 0-D. The dimension along which to split. Must be in the range - * @param value The tensor to split. - * @param numSplit The number of ways to split. Must evenly divide - * @return a new instance of Split - * @see org.tensorflow.op.core.Split - */ - public Split split(Operand axis, Operand value, Long numSplit) { - return Split.create(scope, axis, value, numSplit); - } - - /** - * Builds an {@link Range} operation + * Builds an {@link TensorListFromTensor} operation * - * @param start 0-D (scalar). First entry in the sequence. - * @param limit 0-D (scalar). Upper limit of sequence, exclusive. - * @param delta 0-D (scalar). Optional. Default is 1. Number that increments `start`. - * @return a new instance of Range - * @see org.tensorflow.op.core.Range + * @param tensor + * @param elementShape + * @return a new instance of TensorListFromTensor + * @see org.tensorflow.op.core.TensorListFromTensor */ - public Range range(Operand start, Operand limit, Operand delta) { - return Range.create(scope, start, limit, delta); + public TensorListFromTensor tensorListFromTensor(Operand tensor, + Operand elementShape) { + return TensorListFromTensor.create(scope, tensor, elementShape); } /** - * Builds an {@link Placeholder} operation + * Builds an {@link Barrier} operation * - * @param dtype The type of elements in the tensor. + * @param componentTypes The type of each component in a value. * @param options carries optional attributes values - * @return a new instance of Placeholder - * @see org.tensorflow.op.core.Placeholder + * @return a new instance of Barrier + * @see org.tensorflow.op.core.Barrier */ - public Placeholder placeholder(Class dtype, Placeholder.Options... options) { - return Placeholder.create(scope, dtype, options); + public Barrier barrier(List> componentTypes, Barrier.Options... options) { + return Barrier.create(scope, componentTypes, options); } /** @@ -4526,6 +3973,17 @@ public ControlTrigger controlTrigger() { return ControlTrigger.create(scope); } + /** + * Builds an {@link ShapeN} operation + * + * @param input + * @return a new instance of ShapeN + * @see org.tensorflow.op.core.ShapeN + */ + public ShapeN shapeN(Iterable> input) { + return ShapeN.create(scope, input); + } + /** * Returns an API that builds operations with the provided name prefix. * @@ -4658,6 +4116,13 @@ public final SignalOps signal() { return signal; } + /** + * Returns an API for building {@code train} operations + */ + public final TrainOps train() { + return train; + } + /** * Returns an API for building {@code quantization} operations */ @@ -4666,16 +4131,18 @@ public final QuantizationOps quantization() { } /** - * Returns an API for building {@code train} operations + * Creates an API for building operations in the provided execution environment */ - public final TrainOps train() { - return train; + public static Ops create(ExecutionEnvironment env) { + return new Ops(new Scope(env)); } /** - * Creates an API for building operations in the provided environment + * Creates an API for building operations in the default eager execution environment + * + *

Invoking this method is equivalent to {@code Ops.create(EagerSession.getDefault())}. */ - public static Ops create(ExecutionEnvironment env) { - return new Ops(new Scope(env)); + public static Ops create() { + return new Ops(new Scope(EagerSession.getDefault())); } } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/QuantizationOps.java b/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/QuantizationOps.java index 2a868f4a96a..411662b6b55 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/QuantizationOps.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/QuantizationOps.java @@ -1,5 +1,6 @@ package org.tensorflow.op; +import org.tensorflow.DataType; import org.tensorflow.Operand; import org.tensorflow.op.quantization.Dequantize; import org.tensorflow.op.quantization.FakeQuantWithMinMaxArgs; @@ -13,6 +14,9 @@ import org.tensorflow.op.quantization.QuantizeDownAndShrinkRange; import org.tensorflow.op.quantization.RequantizationRange; import org.tensorflow.op.quantization.Requantize; +import org.tensorflow.types.TFloat; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.family.TNumber; /** * An API for building {@code quantization} operations as {@link Op Op}s @@ -27,82 +31,67 @@ public final class QuantizationOps { } /** - * Builds an {@link Dequantize} operation - * - * @param input - * @param minRange The minimum scalar value possibly produced for the input. - * @param maxRange The maximum scalar value possibly produced for the input. - * @param options carries optional attributes values - * @return a new instance of Dequantize - * @see org.tensorflow.op.quantization.Dequantize - */ - public Dequantize dequantize(Operand input, Operand minRange, - Operand maxRange, Dequantize.Options... options) { - return Dequantize.create(scope, input, minRange, maxRange, options); - } - - /** - * Builds an {@link Quantize} operation + * Builds an {@link FakeQuantWithMinMaxArgsGradient} operation * - * @param input - * @param minRange The minimum scalar value possibly produced for the input. - * @param maxRange The maximum scalar value possibly produced for the input. - * @param T + * @param gradients Backpropagated gradients above the FakeQuantWithMinMaxArgs operation. + * @param inputs Values passed as inputs to the FakeQuantWithMinMaxArgs operation. * @param options carries optional attributes values - * @return a new instance of Quantize - * @see org.tensorflow.op.quantization.Quantize + * @return a new instance of FakeQuantWithMinMaxArgsGradient + * @see org.tensorflow.op.quantization.FakeQuantWithMinMaxArgsGradient */ - public Quantize quantize(Operand input, Operand minRange, - Operand maxRange, Class T, Quantize.Options... options) { - return Quantize.create(scope, input, minRange, maxRange, T, options); + public FakeQuantWithMinMaxArgsGradient fakeQuantWithMinMaxArgsGradient(Operand gradients, + Operand inputs, FakeQuantWithMinMaxArgsGradient.Options... options) { + return FakeQuantWithMinMaxArgsGradient.create(scope, gradients, inputs, options); } /** - * Builds an {@link FakeQuantWithMinMaxVars} operation + * Builds an {@link FakeQuantWithMinMaxVarsGradient} operation * - * @param inputs + * @param gradients Backpropagated gradients above the FakeQuantWithMinMaxVars operation. + * @param inputs Values passed as inputs to the FakeQuantWithMinMaxVars operation. * @param min * @param max * @param options carries optional attributes values - * @return a new instance of FakeQuantWithMinMaxVars - * @see org.tensorflow.op.quantization.FakeQuantWithMinMaxVars + * @return a new instance of FakeQuantWithMinMaxVarsGradient + * @see org.tensorflow.op.quantization.FakeQuantWithMinMaxVarsGradient */ - public FakeQuantWithMinMaxVars fakeQuantWithMinMaxVars(Operand inputs, Operand min, - Operand max, FakeQuantWithMinMaxVars.Options... options) { - return FakeQuantWithMinMaxVars.create(scope, inputs, min, max, options); + public FakeQuantWithMinMaxVarsGradient fakeQuantWithMinMaxVarsGradient(Operand gradients, + Operand inputs, Operand min, Operand max, + FakeQuantWithMinMaxVarsGradient.Options... options) { + return FakeQuantWithMinMaxVarsGradient.create(scope, gradients, inputs, min, max, options); } /** - * Builds an {@link FakeQuantWithMinMaxVarsPerChannel} operation + * Builds an {@link Dequantize} operation * - * @param inputs - * @param min - * @param max + * @param input + * @param minRange The minimum scalar value possibly produced for the input. + * @param maxRange The maximum scalar value possibly produced for the input. * @param options carries optional attributes values - * @return a new instance of FakeQuantWithMinMaxVarsPerChannel - * @see org.tensorflow.op.quantization.FakeQuantWithMinMaxVarsPerChannel + * @return a new instance of Dequantize + * @see org.tensorflow.op.quantization.Dequantize */ - public FakeQuantWithMinMaxVarsPerChannel fakeQuantWithMinMaxVarsPerChannel(Operand inputs, - Operand min, Operand max, - FakeQuantWithMinMaxVarsPerChannel.Options... options) { - return FakeQuantWithMinMaxVarsPerChannel.create(scope, inputs, min, max, options); + public Dequantize dequantize(Operand input, Operand minRange, + Operand maxRange, Dequantize.Options... options) { + return Dequantize.create(scope, input, minRange, maxRange, options); } /** - * Builds an {@link QuantizeAndDequantize} operation + * Builds an {@link Requantize} operation * * @param input - * @param inputMin - * @param inputMax - * @param numBits - * @param options carries optional attributes values - * @return a new instance of QuantizeAndDequantize - * @see org.tensorflow.op.quantization.QuantizeAndDequantize + * @param inputMin The float value that the minimum quantized input value represents. + * @param inputMax The float value that the maximum quantized input value represents. + * @param requestedOutputMin The float value that the minimum quantized output value represents. + * @param requestedOutputMax The float value that the maximum quantized output value represents. + * @param outType The type of the output. Should be a lower bit depth than Tinput. + * @return a new instance of Requantize + * @see org.tensorflow.op.quantization.Requantize */ - public QuantizeAndDequantize quantizeAndDequantize(Operand input, - Operand inputMin, Operand inputMax, Operand numBits, - QuantizeAndDequantize.Options... options) { - return QuantizeAndDequantize.create(scope, input, inputMin, inputMax, numBits, options); + public Requantize requantize(Operand input, Operand inputMin, + Operand inputMax, Operand requestedOutputMin, + Operand requestedOutputMax, DataType outType) { + return Requantize.create(scope, input, inputMin, inputMax, requestedOutputMin, requestedOutputMax, outType); } /** @@ -117,71 +106,69 @@ public QuantizeAndDequantize quantizeAndDequantize(Operand * @see org.tensorflow.op.quantization.FakeQuantWithMinMaxVarsPerChannelGradient */ public FakeQuantWithMinMaxVarsPerChannelGradient fakeQuantWithMinMaxVarsPerChannelGradient( - Operand gradients, Operand inputs, Operand min, Operand max, + Operand gradients, Operand inputs, Operand min, Operand max, FakeQuantWithMinMaxVarsPerChannelGradient.Options... options) { return FakeQuantWithMinMaxVarsPerChannelGradient.create(scope, gradients, inputs, min, max, options); } /** - * Builds an {@link FakeQuantWithMinMaxArgs} operation + * Builds an {@link QuantizeAndDequantize} operation * - * @param inputs + * @param input + * @param inputMin + * @param inputMax + * @param numBits * @param options carries optional attributes values - * @return a new instance of FakeQuantWithMinMaxArgs - * @see org.tensorflow.op.quantization.FakeQuantWithMinMaxArgs + * @return a new instance of QuantizeAndDequantize + * @see org.tensorflow.op.quantization.QuantizeAndDequantize */ - public FakeQuantWithMinMaxArgs fakeQuantWithMinMaxArgs(Operand inputs, - FakeQuantWithMinMaxArgs.Options... options) { - return FakeQuantWithMinMaxArgs.create(scope, inputs, options); + public QuantizeAndDequantize quantizeAndDequantize(Operand input, + Operand inputMin, Operand inputMax, Operand numBits, + QuantizeAndDequantize.Options... options) { + return QuantizeAndDequantize.create(scope, input, inputMin, inputMax, numBits, options); } /** - * Builds an {@link Requantize} operation + * Builds an {@link RequantizationRange} operation * * @param input * @param inputMin The float value that the minimum quantized input value represents. * @param inputMax The float value that the maximum quantized input value represents. - * @param requestedOutputMin The float value that the minimum quantized output value represents. - * @param requestedOutputMax The float value that the maximum quantized output value represents. - * @param outType The type of the output. Should be a lower bit depth than Tinput. - * @return a new instance of Requantize - * @see org.tensorflow.op.quantization.Requantize + * @return a new instance of RequantizationRange + * @see org.tensorflow.op.quantization.RequantizationRange */ - public Requantize requantize(Operand input, Operand inputMin, - Operand inputMax, Operand requestedOutputMin, Operand requestedOutputMax, - Class outType) { - return Requantize.create(scope, input, inputMin, inputMax, requestedOutputMin, requestedOutputMax, outType); + public RequantizationRange requantizationRange(Operand input, Operand inputMin, + Operand inputMax) { + return RequantizationRange.create(scope, input, inputMin, inputMax); } /** - * Builds an {@link FakeQuantWithMinMaxArgsGradient} operation + * Builds an {@link FakeQuantWithMinMaxVarsPerChannel} operation * - * @param gradients Backpropagated gradients above the FakeQuantWithMinMaxArgs operation. - * @param inputs Values passed as inputs to the FakeQuantWithMinMaxArgs operation. + * @param inputs + * @param min + * @param max * @param options carries optional attributes values - * @return a new instance of FakeQuantWithMinMaxArgsGradient - * @see org.tensorflow.op.quantization.FakeQuantWithMinMaxArgsGradient + * @return a new instance of FakeQuantWithMinMaxVarsPerChannel + * @see org.tensorflow.op.quantization.FakeQuantWithMinMaxVarsPerChannel */ - public FakeQuantWithMinMaxArgsGradient fakeQuantWithMinMaxArgsGradient(Operand gradients, - Operand inputs, FakeQuantWithMinMaxArgsGradient.Options... options) { - return FakeQuantWithMinMaxArgsGradient.create(scope, gradients, inputs, options); + public FakeQuantWithMinMaxVarsPerChannel fakeQuantWithMinMaxVarsPerChannel(Operand inputs, + Operand min, Operand max, + FakeQuantWithMinMaxVarsPerChannel.Options... options) { + return FakeQuantWithMinMaxVarsPerChannel.create(scope, inputs, min, max, options); } /** - * Builds an {@link FakeQuantWithMinMaxVarsGradient} operation + * Builds an {@link FakeQuantWithMinMaxArgs} operation * - * @param gradients Backpropagated gradients above the FakeQuantWithMinMaxVars operation. - * @param inputs Values passed as inputs to the FakeQuantWithMinMaxVars operation. - * @param min - * @param max + * @param inputs * @param options carries optional attributes values - * @return a new instance of FakeQuantWithMinMaxVarsGradient - * @see org.tensorflow.op.quantization.FakeQuantWithMinMaxVarsGradient + * @return a new instance of FakeQuantWithMinMaxArgs + * @see org.tensorflow.op.quantization.FakeQuantWithMinMaxArgs */ - public FakeQuantWithMinMaxVarsGradient fakeQuantWithMinMaxVarsGradient(Operand gradients, - Operand inputs, Operand min, Operand max, - FakeQuantWithMinMaxVarsGradient.Options... options) { - return FakeQuantWithMinMaxVarsGradient.create(scope, gradients, inputs, min, max, options); + public FakeQuantWithMinMaxArgs fakeQuantWithMinMaxArgs(Operand inputs, + FakeQuantWithMinMaxArgs.Options... options) { + return FakeQuantWithMinMaxArgs.create(scope, inputs, options); } /** @@ -195,21 +182,38 @@ public FakeQuantWithMinMaxVarsGradient fakeQuantWithMinMaxVarsGradient(Operand QuantizeDownAndShrinkRange quantizeDownAndShrinkRange(Operand input, - Operand inputMin, Operand inputMax, Class outType) { + Operand inputMin, Operand inputMax, DataType outType) { return QuantizeDownAndShrinkRange.create(scope, input, inputMin, inputMax, outType); } /** - * Builds an {@link RequantizationRange} operation + * Builds an {@link FakeQuantWithMinMaxVars} operation + * + * @param inputs + * @param min + * @param max + * @param options carries optional attributes values + * @return a new instance of FakeQuantWithMinMaxVars + * @see org.tensorflow.op.quantization.FakeQuantWithMinMaxVars + */ + public FakeQuantWithMinMaxVars fakeQuantWithMinMaxVars(Operand inputs, + Operand min, Operand max, FakeQuantWithMinMaxVars.Options... options) { + return FakeQuantWithMinMaxVars.create(scope, inputs, min, max, options); + } + + /** + * Builds an {@link Quantize} operation * * @param input - * @param inputMin The float value that the minimum quantized input value represents. - * @param inputMax The float value that the maximum quantized input value represents. - * @return a new instance of RequantizationRange - * @see org.tensorflow.op.quantization.RequantizationRange + * @param minRange The minimum scalar value possibly produced for the input. + * @param maxRange The maximum scalar value possibly produced for the input. + * @param T + * @param options carries optional attributes values + * @return a new instance of Quantize + * @see org.tensorflow.op.quantization.Quantize */ - public RequantizationRange requantizationRange(Operand input, Operand inputMin, - Operand inputMax) { - return RequantizationRange.create(scope, input, inputMin, inputMax); + public Quantize quantize(Operand input, Operand minRange, + Operand maxRange, DataType T, Quantize.Options... options) { + return Quantize.create(scope, input, minRange, maxRange, T, options); } } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/RandomOps.java b/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/RandomOps.java index 558531f55a6..d7eb835691b 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/RandomOps.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/RandomOps.java @@ -1,5 +1,6 @@ package org.tensorflow.op; +import org.tensorflow.DataType; import org.tensorflow.Operand; import org.tensorflow.op.random.AllCandidateSampler; import org.tensorflow.op.random.LogUniformCandidateSampler; @@ -18,6 +19,10 @@ import org.tensorflow.op.random.StatelessTruncatedNormal; import org.tensorflow.op.random.TruncatedNormal; import org.tensorflow.op.random.UniformCandidateSampler; +import org.tensorflow.types.TFloat; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.TInt64; +import org.tensorflow.types.family.TNumber; /** * An API for building {@code random} operations as {@link Op Op}s @@ -31,6 +36,21 @@ public final class RandomOps { this.scope = scope; } + /** + * Builds an {@link RandomUniformInt} operation + * + * @param shape The shape of the output tensor. + * @param minval 0-D. Inclusive lower bound on the generated integers. + * @param maxval 0-D. Exclusive upper bound on the generated integers. + * @param options carries optional attributes values + * @return a new instance of RandomUniformInt + * @see org.tensorflow.op.random.RandomUniformInt + */ + public RandomUniformInt randomUniformInt( + Operand shape, Operand minval, Operand maxval, RandomUniformInt.Options... options) { + return RandomUniformInt.create(scope, shape, minval, maxval, options); + } + /** * Builds an {@link RandomShuffle} operation * @@ -44,44 +64,65 @@ public RandomShuffle randomShuffle(Operand value, RandomShuffle.Option } /** - * Builds an {@link RandomUniform} operation + * Builds an {@link RandomGamma} operation * - * @param shape The shape of the output tensor. - * @param dtype The type of the output. + * @param shape 1-D integer tensor. Shape of independent samples to draw from each + * @param alpha A tensor in which each scalar is a "shape" parameter describing the * @param options carries optional attributes values - * @return a new instance of RandomUniform - * @see org.tensorflow.op.random.RandomUniform + * @return a new instance of RandomGamma + * @see org.tensorflow.op.random.RandomGamma */ - public RandomUniform randomUniform(Operand shape, - Class dtype, RandomUniform.Options... options) { - return RandomUniform.create(scope, shape, dtype, options); + public RandomGamma randomGamma(Operand shape, + Operand alpha, RandomGamma.Options... options) { + return RandomGamma.create(scope, shape, alpha, options); } /** - * Builds an {@link StatelessRandomNormal} operation + * Builds an {@link ParameterizedTruncatedNormal} operation * - * @param shape The shape of the output tensor. - * @param seed 2 seeds (shape [2]). - * @return a new instance of StatelessRandomNormal - * @see org.tensorflow.op.random.StatelessRandomNormal + * @param shape The shape of the output tensor. Batches are indexed by the 0th dimension. + * @param means The mean parameter of each batch. + * @param stdevs The standard deviation parameter of each batch. Must be greater than 0. + * @param minvals The minimum cutoff. May be -infinity. + * @param maxvals The maximum cutoff. May be +infinity, and must be more than the minval + * @param options carries optional attributes values + * @return a new instance of ParameterizedTruncatedNormal + * @see org.tensorflow.op.random.ParameterizedTruncatedNormal */ - public StatelessRandomNormal statelessRandomNormal( - Operand shape, Operand seed) { - return StatelessRandomNormal.create(scope, shape, seed); + public ParameterizedTruncatedNormal parameterizedTruncatedNormal( + Operand shape, Operand means, Operand stdevs, Operand minvals, Operand maxvals, + ParameterizedTruncatedNormal.Options... options) { + return ParameterizedTruncatedNormal.create(scope, shape, means, stdevs, minvals, maxvals, options); } /** - * Builds an {@link StatelessTruncatedNormal} operation + * Builds an {@link RandomPoisson} operation * - * @param shape The shape of the output tensor. - * @param seed 2 seeds (shape [2]). - * @param dtype The type of the output. - * @return a new instance of StatelessTruncatedNormal - * @see org.tensorflow.op.random.StatelessTruncatedNormal + * @param shape 1-D integer tensor. Shape of independent samples to draw from each + * @param rate A tensor in which each scalar is a "rate" parameter describing the + * @param options carries optional attributes values + * @return a new instance of RandomPoisson + * @see org.tensorflow.op.random.RandomPoisson */ - public StatelessTruncatedNormal statelessTruncatedNormal( - Operand shape, Operand seed, Class dtype) { - return StatelessTruncatedNormal.create(scope, shape, seed, dtype); + public RandomPoisson randomPoisson( + Operand shape, Operand rate, RandomPoisson.Options... options) { + return RandomPoisson.create(scope, shape, rate, options); + } + + /** + * Builds an {@link AllCandidateSampler} operation + * + * @param trueClasses A batch_size * num_true matrix, in which each row contains the + * @param numTrue Number of true labels per context. + * @param numSampled Number of candidates to produce. + * @param unique If unique is true, we sample with rejection, so that all sampled + * @param options carries optional attributes values + * @return a new instance of AllCandidateSampler + * @see org.tensorflow.op.random.AllCandidateSampler + */ + public AllCandidateSampler allCandidateSampler(Operand trueClasses, Long numTrue, + Long numSampled, Boolean unique, AllCandidateSampler.Options... options) { + return AllCandidateSampler.create(scope, trueClasses, numTrue, numSampled, unique, options); } /** @@ -89,57 +130,71 @@ public StatelessTruncated * * @param shape 1-D integer tensor. Shape of independent samples to draw from each * @param rate A tensor in which each scalar is a "rate" parameter describing the + * @param dtype * @param options carries optional attributes values * @return a new instance of RandomPoisson * @see org.tensorflow.op.random.RandomPoisson */ - public RandomPoisson randomPoisson(Operand shape, - Operand rate, RandomPoisson.Options... options) { - return RandomPoisson.create(scope, shape, rate, options); + public RandomPoisson randomPoisson( + Operand shape, Operand rate, DataType dtype, RandomPoisson.Options... options) { + return RandomPoisson.create(scope, shape, rate, dtype, options); } /** - * Builds an {@link RandomUniformInt} operation + * Builds an {@link StatelessRandomNormal} operation * * @param shape The shape of the output tensor. - * @param minval 0-D. Inclusive lower bound on the generated integers. - * @param maxval 0-D. Exclusive upper bound on the generated integers. - * @param options carries optional attributes values - * @return a new instance of RandomUniformInt - * @see org.tensorflow.op.random.RandomUniformInt + * @param seed 2 seeds (shape [2]). + * @return a new instance of StatelessRandomNormal + * @see org.tensorflow.op.random.StatelessRandomNormal */ - public RandomUniformInt randomUniformInt(Operand shape, - Operand minval, Operand maxval, RandomUniformInt.Options... options) { - return RandomUniformInt.create(scope, shape, minval, maxval, options); + public StatelessRandomNormal statelessRandomNormal( + Operand shape, Operand seed) { + return StatelessRandomNormal.create(scope, shape, seed); } /** - * Builds an {@link StatelessMultinomial} operation + * Builds an {@link StatelessTruncatedNormal} operation * - * @param logits 2-D Tensor with shape `[batch_size, num_classes]`. Each slice `[i, :]` - * @param numSamples 0-D. Number of independent samples to draw for each row slice. + * @param shape The shape of the output tensor. * @param seed 2 seeds (shape [2]). - * @param outputDtype - * @return a new instance of StatelessMultinomial - * @see org.tensorflow.op.random.StatelessMultinomial + * @return a new instance of StatelessTruncatedNormal + * @see org.tensorflow.op.random.StatelessTruncatedNormal */ - public StatelessMultinomial statelessMultinomial( - Operand logits, Operand numSamples, Operand seed, Class outputDtype) { - return StatelessMultinomial.create(scope, logits, numSamples, seed, outputDtype); + public StatelessTruncatedNormal statelessTruncatedNormal( + Operand shape, Operand seed) { + return StatelessTruncatedNormal.create(scope, shape, seed); } /** - * Builds an {@link RandomStandardNormal} operation + * Builds an {@link UniformCandidateSampler} operation + * + * @param trueClasses A batch_size * num_true matrix, in which each row contains the + * @param numTrue Number of true labels per context. + * @param numSampled Number of candidates to randomly sample. + * @param unique If unique is true, we sample with rejection, so that all sampled + * @param rangeMax The sampler will sample integers from the interval [0, range_max). + * @param options carries optional attributes values + * @return a new instance of UniformCandidateSampler + * @see org.tensorflow.op.random.UniformCandidateSampler + */ + public UniformCandidateSampler uniformCandidateSampler(Operand trueClasses, Long numTrue, + Long numSampled, Boolean unique, Long rangeMax, UniformCandidateSampler.Options... options) { + return UniformCandidateSampler.create(scope, trueClasses, numTrue, numSampled, unique, rangeMax, options); + } + + /** + * Builds an {@link TruncatedNormal} operation * * @param shape The shape of the output tensor. * @param dtype The type of the output. * @param options carries optional attributes values - * @return a new instance of RandomStandardNormal - * @see org.tensorflow.op.random.RandomStandardNormal + * @return a new instance of TruncatedNormal + * @see org.tensorflow.op.random.TruncatedNormal */ - public RandomStandardNormal randomStandardNormal( - Operand shape, Class dtype, RandomStandardNormal.Options... options) { - return RandomStandardNormal.create(scope, shape, dtype, options); + public TruncatedNormal truncatedNormal(Operand shape, + DataType dtype, TruncatedNormal.Options... options) { + return TruncatedNormal.create(scope, shape, dtype, options); } /** @@ -154,52 +209,39 @@ public RandomStandardNormal randomStanda * @return a new instance of LogUniformCandidateSampler * @see org.tensorflow.op.random.LogUniformCandidateSampler */ - public LogUniformCandidateSampler logUniformCandidateSampler(Operand trueClasses, + public LogUniformCandidateSampler logUniformCandidateSampler(Operand trueClasses, Long numTrue, Long numSampled, Boolean unique, Long rangeMax, LogUniformCandidateSampler.Options... options) { return LogUniformCandidateSampler.create(scope, trueClasses, numTrue, numSampled, unique, rangeMax, options); } /** - * Builds an {@link RandomGamma} operation - * - * @param shape 1-D integer tensor. Shape of independent samples to draw from each - * @param alpha A tensor in which each scalar is a "shape" parameter describing the - * @param options carries optional attributes values - * @return a new instance of RandomGamma - * @see org.tensorflow.op.random.RandomGamma - */ - public RandomGamma randomGamma(Operand shape, - Operand alpha, RandomGamma.Options... options) { - return RandomGamma.create(scope, shape, alpha, options); - } - - /** - * Builds an {@link Multinomial} operation + * Builds an {@link StatelessMultinomial} operation * * @param logits 2-D Tensor with shape `[batch_size, num_classes]`. Each slice `[i, :]` * @param numSamples 0-D. Number of independent samples to draw for each row slice. - * @param options carries optional attributes values - * @return a new instance of Multinomial - * @see org.tensorflow.op.random.Multinomial + * @param seed 2 seeds (shape [2]). + * @param outputDtype + * @return a new instance of StatelessMultinomial + * @see org.tensorflow.op.random.StatelessMultinomial */ - public Multinomial multinomial(Operand logits, - Operand numSamples, Multinomial.Options... options) { - return Multinomial.create(scope, logits, numSamples, options); + public StatelessMultinomial statelessMultinomial( + Operand logits, Operand numSamples, Operand seed, DataType outputDtype) { + return StatelessMultinomial.create(scope, logits, numSamples, seed, outputDtype); } /** - * Builds an {@link TruncatedNormal} operation + * Builds an {@link StatelessRandomUniform} operation * * @param shape The shape of the output tensor. + * @param seed 2 seeds (shape [2]). * @param dtype The type of the output. - * @param options carries optional attributes values - * @return a new instance of TruncatedNormal - * @see org.tensorflow.op.random.TruncatedNormal + * @return a new instance of StatelessRandomUniform + * @see org.tensorflow.op.random.StatelessRandomUniform */ - public TruncatedNormal truncatedNormal(Operand shape, - Class dtype, TruncatedNormal.Options... options) { - return TruncatedNormal.create(scope, shape, dtype, options); + public StatelessRandomUniform statelessRandomUniform( + Operand shape, Operand seed, DataType dtype) { + return StatelessRandomUniform.create(scope, shape, seed, dtype); } /** @@ -207,42 +249,28 @@ public TruncatedNormal truncatedNormal(O * * @param shape The shape of the output tensor. * @param seed 2 seeds (shape [2]). + * @param dtype The type of the output. * @return a new instance of StatelessTruncatedNormal * @see org.tensorflow.op.random.StatelessTruncatedNormal */ - public StatelessTruncatedNormal statelessTruncatedNormal( - Operand shape, Operand seed) { - return StatelessTruncatedNormal.create(scope, shape, seed); - } - - /** - * Builds an {@link StatelessRandomNormal} operation - * - * @param shape The shape of the output tensor. - * @param seed 2 seeds (shape [2]). - * @param dtype The type of the output. - * @return a new instance of StatelessRandomNormal - * @see org.tensorflow.op.random.StatelessRandomNormal - */ - public StatelessRandomNormal statelessRandomNormal( - Operand shape, Operand seed, Class dtype) { - return StatelessRandomNormal.create(scope, shape, seed, dtype); + public StatelessTruncatedNormal statelessTruncatedNormal( + Operand shape, Operand seed, DataType dtype) { + return StatelessTruncatedNormal.create(scope, shape, seed, dtype); } /** - * Builds an {@link AllCandidateSampler} operation + * Builds an {@link Multinomial} operation * - * @param trueClasses A batch_size * num_true matrix, in which each row contains the - * @param numTrue Number of true labels per context. - * @param numSampled Number of candidates to produce. - * @param unique If unique is true, we sample with rejection, so that all sampled + * @param logits 2-D Tensor with shape `[batch_size, num_classes]`. Each slice `[i, :]` + * @param numSamples 0-D. Number of independent samples to draw for each row slice. + * @param outputDtype * @param options carries optional attributes values - * @return a new instance of AllCandidateSampler - * @see org.tensorflow.op.random.AllCandidateSampler + * @return a new instance of Multinomial + * @see org.tensorflow.op.random.Multinomial */ - public AllCandidateSampler allCandidateSampler(Operand trueClasses, Long numTrue, - Long numSampled, Boolean unique, AllCandidateSampler.Options... options) { - return AllCandidateSampler.create(scope, trueClasses, numTrue, numSampled, unique, options); + public Multinomial multinomial(Operand logits, + Operand numSamples, DataType outputDtype, Multinomial.Options... options) { + return Multinomial.create(scope, logits, numSamples, outputDtype, options); } /** @@ -254,57 +282,37 @@ public AllCandidateSampler allCandidateSampler(Operand trueClasses, Long n * @return a new instance of StatelessMultinomial * @see org.tensorflow.op.random.StatelessMultinomial */ - public StatelessMultinomial statelessMultinomial( - Operand logits, Operand numSamples, Operand seed) { + public StatelessMultinomial statelessMultinomial( + Operand logits, Operand numSamples, Operand seed) { return StatelessMultinomial.create(scope, logits, numSamples, seed); } /** - * Builds an {@link Multinomial} operation - * - * @param logits 2-D Tensor with shape `[batch_size, num_classes]`. Each slice `[i, :]` - * @param numSamples 0-D. Number of independent samples to draw for each row slice. - * @param outputDtype - * @param options carries optional attributes values - * @return a new instance of Multinomial - * @see org.tensorflow.op.random.Multinomial - */ - public Multinomial multinomial(Operand logits, - Operand numSamples, Class outputDtype, Multinomial.Options... options) { - return Multinomial.create(scope, logits, numSamples, outputDtype, options); - } - - /** - * Builds an {@link RandomPoisson} operation + * Builds an {@link StatelessRandomNormal} operation * - * @param shape 1-D integer tensor. Shape of independent samples to draw from each - * @param rate A tensor in which each scalar is a "rate" parameter describing the - * @param dtype - * @param options carries optional attributes values - * @return a new instance of RandomPoisson - * @see org.tensorflow.op.random.RandomPoisson + * @param shape The shape of the output tensor. + * @param seed 2 seeds (shape [2]). + * @param dtype The type of the output. + * @return a new instance of StatelessRandomNormal + * @see org.tensorflow.op.random.StatelessRandomNormal */ - public RandomPoisson randomPoisson( - Operand shape, Operand rate, Class dtype, RandomPoisson.Options... options) { - return RandomPoisson.create(scope, shape, rate, dtype, options); + public StatelessRandomNormal statelessRandomNormal( + Operand shape, Operand seed, DataType dtype) { + return StatelessRandomNormal.create(scope, shape, seed, dtype); } /** - * Builds an {@link ParameterizedTruncatedNormal} operation + * Builds an {@link Multinomial} operation * - * @param shape The shape of the output tensor. Batches are indexed by the 0th dimension. - * @param means The mean parameter of each batch. - * @param stdevs The standard deviation parameter of each batch. Must be greater than 0. - * @param minvals The minimum cutoff. May be -infinity. - * @param maxvals The maximum cutoff. May be +infinity, and must be more than the minval + * @param logits 2-D Tensor with shape `[batch_size, num_classes]`. Each slice `[i, :]` + * @param numSamples 0-D. Number of independent samples to draw for each row slice. * @param options carries optional attributes values - * @return a new instance of ParameterizedTruncatedNormal - * @see org.tensorflow.op.random.ParameterizedTruncatedNormal + * @return a new instance of Multinomial + * @see org.tensorflow.op.random.Multinomial */ - public ParameterizedTruncatedNormal parameterizedTruncatedNormal( - Operand shape, Operand means, Operand stdevs, Operand minvals, Operand maxvals, - ParameterizedTruncatedNormal.Options... options) { - return ParameterizedTruncatedNormal.create(scope, shape, means, stdevs, minvals, maxvals, options); + public Multinomial multinomial(Operand logits, + Operand numSamples, Multinomial.Options... options) { + return Multinomial.create(scope, logits, numSamples, options); } /** @@ -312,43 +320,40 @@ public ParameterizedTruncatedNormal para * * @param shape The shape of the output tensor. * @param seed 2 seeds (shape [2]). - * @param dtype The type of the output. * @return a new instance of StatelessRandomUniform * @see org.tensorflow.op.random.StatelessRandomUniform */ - public StatelessRandomUniform statelessRandomUniform( - Operand shape, Operand seed, Class dtype) { - return StatelessRandomUniform.create(scope, shape, seed, dtype); + public StatelessRandomUniform statelessRandomUniform( + Operand shape, Operand seed) { + return StatelessRandomUniform.create(scope, shape, seed); } /** - * Builds an {@link StatelessRandomUniform} operation + * Builds an {@link RandomUniform} operation * * @param shape The shape of the output tensor. - * @param seed 2 seeds (shape [2]). - * @return a new instance of StatelessRandomUniform - * @see org.tensorflow.op.random.StatelessRandomUniform + * @param dtype The type of the output. + * @param options carries optional attributes values + * @return a new instance of RandomUniform + * @see org.tensorflow.op.random.RandomUniform */ - public StatelessRandomUniform statelessRandomUniform( - Operand shape, Operand seed) { - return StatelessRandomUniform.create(scope, shape, seed); + public RandomUniform randomUniform(Operand shape, + DataType dtype, RandomUniform.Options... options) { + return RandomUniform.create(scope, shape, dtype, options); } /** - * Builds an {@link UniformCandidateSampler} operation + * Builds an {@link RandomStandardNormal} operation * - * @param trueClasses A batch_size * num_true matrix, in which each row contains the - * @param numTrue Number of true labels per context. - * @param numSampled Number of candidates to randomly sample. - * @param unique If unique is true, we sample with rejection, so that all sampled - * @param rangeMax The sampler will sample integers from the interval [0, range_max). + * @param shape The shape of the output tensor. + * @param dtype The type of the output. * @param options carries optional attributes values - * @return a new instance of UniformCandidateSampler - * @see org.tensorflow.op.random.UniformCandidateSampler + * @return a new instance of RandomStandardNormal + * @see org.tensorflow.op.random.RandomStandardNormal */ - public UniformCandidateSampler uniformCandidateSampler(Operand trueClasses, Long numTrue, - Long numSampled, Boolean unique, Long rangeMax, UniformCandidateSampler.Options... options) { - return UniformCandidateSampler.create(scope, trueClasses, numTrue, numSampled, unique, rangeMax, options); + public RandomStandardNormal randomStandardNormal( + Operand shape, DataType dtype, RandomStandardNormal.Options... options) { + return RandomStandardNormal.create(scope, shape, dtype, options); } /** diff --git a/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/SignalOps.java b/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/SignalOps.java index aae6e7e6755..5acdb7ba628 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/SignalOps.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/SignalOps.java @@ -19,6 +19,8 @@ import org.tensorflow.op.signal.Rfft; import org.tensorflow.op.signal.Rfft2d; import org.tensorflow.op.signal.Rfft3d; +import org.tensorflow.types.TFloat; +import org.tensorflow.types.TInt32; /** * An API for building {@code signal} operations as {@link Op Op}s @@ -87,30 +89,6 @@ public Ifft ifft(Operand input) { return Ifft.create(scope, input); } - /** - * Builds an {@link Irfft2d} operation - * - * @param input A complex64 tensor. - * @param fftLength An int32 tensor of shape [2]. The FFT length for each dimension. - * @return a new instance of Irfft2d - * @see org.tensorflow.op.signal.Irfft2d - */ - public Irfft2d irfft2d(Operand input, Operand fftLength) { - return Irfft2d.create(scope, input, fftLength); - } - - /** - * Builds an {@link Rfft2d} operation - * - * @param input A float32 tensor. - * @param fftLength An int32 tensor of shape [2]. The FFT length for each dimension. - * @return a new instance of Rfft2d - * @see org.tensorflow.op.signal.Rfft2d - */ - public Rfft2d rfft2d(Operand input, Operand fftLength) { - return Rfft2d.create(scope, input, fftLength); - } - /** * Builds an {@link Rfft} operation * @@ -119,22 +97,10 @@ public Rfft2d rfft2d(Operand input, Operand fftLength) { * @return a new instance of Rfft * @see org.tensorflow.op.signal.Rfft */ - public Rfft rfft(Operand input, Operand fftLength) { + public Rfft rfft(Operand input, Operand fftLength) { return Rfft.create(scope, input, fftLength); } - /** - * Builds an {@link Irfft3d} operation - * - * @param input A complex64 tensor. - * @param fftLength An int32 tensor of shape [3]. The FFT length for each dimension. - * @return a new instance of Irfft3d - * @see org.tensorflow.op.signal.Irfft3d - */ - public Irfft3d irfft3d(Operand input, Operand fftLength) { - return Irfft3d.create(scope, input, fftLength); - } - /** * Builds an {@link BatchIfft3d} operation * @@ -147,15 +113,15 @@ public BatchIfft3d batchIfft3d(Operand input) { } /** - * Builds an {@link Rfft3d} operation + * Builds an {@link Irfft2d} operation * - * @param input A float32 tensor. - * @param fftLength An int32 tensor of shape [3]. The FFT length for each dimension. - * @return a new instance of Rfft3d - * @see org.tensorflow.op.signal.Rfft3d + * @param input A complex64 tensor. + * @param fftLength An int32 tensor of shape [2]. The FFT length for each dimension. + * @return a new instance of Irfft2d + * @see org.tensorflow.op.signal.Irfft2d */ - public Rfft3d rfft3d(Operand input, Operand fftLength) { - return Rfft3d.create(scope, input, fftLength); + public Irfft2d irfft2d(Operand input, Operand fftLength) { + return Irfft2d.create(scope, input, fftLength); } /** @@ -202,17 +168,6 @@ public Fft3d fft3d(Operand input) { return Fft3d.create(scope, input); } - /** - * Builds an {@link BatchFft} operation - * - * @param input - * @return a new instance of BatchFft - * @see org.tensorflow.op.signal.BatchFft - */ - public BatchFft batchFft(Operand input) { - return BatchFft.create(scope, input); - } - /** * Builds an {@link Irfft} operation * @@ -221,7 +176,7 @@ public BatchFft batchFft(Operand input) { * @return a new instance of Irfft * @see org.tensorflow.op.signal.Irfft */ - public Irfft irfft(Operand input, Operand fftLength) { + public Irfft irfft(Operand input, Operand fftLength) { return Irfft.create(scope, input, fftLength); } @@ -235,4 +190,51 @@ public Irfft irfft(Operand input, Operand fftLength) { public BatchIfft2d batchIfft2d(Operand input) { return BatchIfft2d.create(scope, input); } + + /** + * Builds an {@link BatchFft} operation + * + * @param input + * @return a new instance of BatchFft + * @see org.tensorflow.op.signal.BatchFft + */ + public BatchFft batchFft(Operand input) { + return BatchFft.create(scope, input); + } + + /** + * Builds an {@link Rfft2d} operation + * + * @param input A float32 tensor. + * @param fftLength An int32 tensor of shape [2]. The FFT length for each dimension. + * @return a new instance of Rfft2d + * @see org.tensorflow.op.signal.Rfft2d + */ + public Rfft2d rfft2d(Operand input, Operand fftLength) { + return Rfft2d.create(scope, input, fftLength); + } + + /** + * Builds an {@link Irfft3d} operation + * + * @param input A complex64 tensor. + * @param fftLength An int32 tensor of shape [3]. The FFT length for each dimension. + * @return a new instance of Irfft3d + * @see org.tensorflow.op.signal.Irfft3d + */ + public Irfft3d irfft3d(Operand input, Operand fftLength) { + return Irfft3d.create(scope, input, fftLength); + } + + /** + * Builds an {@link Rfft3d} operation + * + * @param input A float32 tensor. + * @param fftLength An int32 tensor of shape [3]. The FFT length for each dimension. + * @return a new instance of Rfft3d + * @see org.tensorflow.op.signal.Rfft3d + */ + public Rfft3d rfft3d(Operand input, Operand fftLength) { + return Rfft3d.create(scope, input, fftLength); + } } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/SparseOps.java b/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/SparseOps.java index 837dd7f328d..a0deffcb84d 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/SparseOps.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/SparseOps.java @@ -1,7 +1,8 @@ package org.tensorflow.op; +import org.tensorflow.DataType; import org.tensorflow.Operand; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.sparse.AddManySparseToTensorsMap; import org.tensorflow.op.sparse.AddSparseToTensorsMap; import org.tensorflow.op.sparse.DenseToDenseSetOperation; @@ -45,6 +46,10 @@ import org.tensorflow.op.sparse.SparseToDense; import org.tensorflow.op.sparse.SparseToSparseSetOperation; import org.tensorflow.op.sparse.TakeManySparseFromTensorsMap; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.TInt64; +import org.tensorflow.types.TString; +import org.tensorflow.types.family.TNumber; /** * An API for building {@code sparse} operations as {@link Op Op}s @@ -58,84 +63,6 @@ public final class SparseOps { this.scope = scope; } - /** - * Builds an {@link SparseReduceSum} operation - * - * @param inputIndices 2-D. `N x R` matrix with the indices of non-empty values in a - * @param inputValues 1-D. `N` non-empty values corresponding to `input_indices`. - * @param inputShape 1-D. Shape of the input SparseTensor. - * @param reductionAxes 1-D. Length-`K` vector containing the reduction axes. - * @param options carries optional attributes values - * @return a new instance of SparseReduceSum - * @see org.tensorflow.op.sparse.SparseReduceSum - */ - public SparseReduceSum sparseReduceSum(Operand inputIndices, Operand inputValues, - Operand inputShape, Operand reductionAxes, - SparseReduceSum.Options... options) { - return SparseReduceSum.create(scope, inputIndices, inputValues, inputShape, reductionAxes, options); - } - - /** - * Builds an {@link SparseSegmentMeanGrad} operation - * - * @param grad gradient propagated to the SparseSegmentMean op. - * @param indices indices passed to the corresponding SparseSegmentMean op. - * @param segmentIds segment_ids passed to the corresponding SparseSegmentMean op. - * @param outputDim0 dimension 0 of "data" passed to SparseSegmentMean op. - * @return a new instance of SparseSegmentMeanGrad - * @see org.tensorflow.op.sparse.SparseSegmentMeanGrad - */ - public SparseSegmentMeanGrad sparseSegmentMeanGrad( - Operand grad, Operand indices, Operand segmentIds, - Operand outputDim0) { - return SparseSegmentMeanGrad.create(scope, grad, indices, segmentIds, outputDim0); - } - - /** - * Builds an {@link SparseReshape} operation - * - * @param inputIndices 2-D. `N x R_in` matrix with the indices of non-empty values in a - * @param inputShape 1-D. `R_in` vector with the input SparseTensor's dense shape. - * @param newShape 1-D. `R_out` vector with the requested new dense shape. - * @return a new instance of SparseReshape - * @see org.tensorflow.op.sparse.SparseReshape - */ - public SparseReshape sparseReshape(Operand inputIndices, Operand inputShape, - Operand newShape) { - return SparseReshape.create(scope, inputIndices, inputShape, newShape); - } - - /** - * Builds an {@link SparseDenseCwiseAdd} operation - * - * @param spIndices 2-D. `N x R` matrix with the indices of non-empty values in a - * @param spValues 1-D. `N` non-empty values corresponding to `sp_indices`. - * @param spShape 1-D. Shape of the input SparseTensor. - * @param dense `R`-D. The dense Tensor operand. - * @return a new instance of SparseDenseCwiseAdd - * @see org.tensorflow.op.sparse.SparseDenseCwiseAdd - */ - public SparseDenseCwiseAdd sparseDenseCwiseAdd(Operand spIndices, - Operand spValues, Operand spShape, Operand dense) { - return SparseDenseCwiseAdd.create(scope, spIndices, spValues, spShape, dense); - } - - /** - * Builds an {@link AddSparseToTensorsMap} operation - * - * @param sparseIndices 2-D. The `indices` of the `SparseTensor`. - * @param sparseValues 1-D. The `values` of the `SparseTensor`. - * @param sparseShape 1-D. The `shape` of the `SparseTensor`. - * @param options carries optional attributes values - * @return a new instance of AddSparseToTensorsMap - * @see org.tensorflow.op.sparse.AddSparseToTensorsMap - */ - public AddSparseToTensorsMap addSparseToTensorsMap(Operand sparseIndices, - Operand sparseValues, Operand sparseShape, - AddSparseToTensorsMap.Options... options) { - return AddSparseToTensorsMap.create(scope, sparseIndices, sparseValues, sparseShape, options); - } - /** * Builds an {@link SparseFillEmptyRows} operation * @@ -146,37 +73,25 @@ public AddSparseToTensorsMap addSparseToTensorsMap(Operand sparseIndic * @return a new instance of SparseFillEmptyRows * @see org.tensorflow.op.sparse.SparseFillEmptyRows */ - public SparseFillEmptyRows sparseFillEmptyRows(Operand indices, Operand values, - Operand denseShape, Operand defaultValue) { + public SparseFillEmptyRows sparseFillEmptyRows(Operand indices, Operand values, + Operand denseShape, Operand defaultValue) { return SparseFillEmptyRows.create(scope, indices, values, denseShape, defaultValue); } /** - * Builds an {@link SparseTensorDenseAdd} operation - * - * @param aIndices 2-D. The `indices` of the `SparseTensor`, with shape `[nnz, ndims]`. - * @param aValues 1-D. The `values` of the `SparseTensor`, with shape `[nnz]`. - * @param aShape 1-D. The `shape` of the `SparseTensor`, with shape `[ndims]`. - * @param b `ndims`-D Tensor. With shape `a_shape`. - * @return a new instance of SparseTensorDenseAdd - * @see org.tensorflow.op.sparse.SparseTensorDenseAdd - */ - public SparseTensorDenseAdd sparseTensorDenseAdd(Operand aIndices, - Operand aValues, Operand aShape, Operand b) { - return SparseTensorDenseAdd.create(scope, aIndices, aValues, aShape, b); - } - - /** - * Builds an {@link SparseFillEmptyRowsGrad} operation + * Builds an {@link AddManySparseToTensorsMap} operation * - * @param reverseIndexMap 1-D. The reverse index map from SparseFillEmptyRows. - * @param gradValues 1-D. The gradients from backprop. - * @return a new instance of SparseFillEmptyRowsGrad - * @see org.tensorflow.op.sparse.SparseFillEmptyRowsGrad + * @param sparseIndices 2-D. The `indices` of the minibatch `SparseTensor`. + * @param sparseValues 1-D. The `values` of the minibatch `SparseTensor`. + * @param sparseShape 1-D. The `shape` of the minibatch `SparseTensor`. + * @param options carries optional attributes values + * @return a new instance of AddManySparseToTensorsMap + * @see org.tensorflow.op.sparse.AddManySparseToTensorsMap */ - public SparseFillEmptyRowsGrad sparseFillEmptyRowsGrad(Operand reverseIndexMap, - Operand gradValues) { - return SparseFillEmptyRowsGrad.create(scope, reverseIndexMap, gradValues); + public AddManySparseToTensorsMap addManySparseToTensorsMap(Operand sparseIndices, + Operand sparseValues, Operand sparseShape, + AddManySparseToTensorsMap.Options... options) { + return AddManySparseToTensorsMap.create(scope, sparseIndices, sparseValues, sparseShape, options); } /** @@ -189,193 +104,195 @@ public SparseFillEmptyRowsGrad sparseFillEmptyRowsGrad(Operand reve * @return a new instance of SparseAddGrad * @see org.tensorflow.op.sparse.SparseAddGrad */ - public SparseAddGrad sparseAddGrad(Operand backpropValGrad, Operand aIndices, - Operand bIndices, Operand sumIndices) { + public SparseAddGrad sparseAddGrad(Operand backpropValGrad, Operand aIndices, + Operand bIndices, Operand sumIndices) { return SparseAddGrad.create(scope, backpropValGrad, aIndices, bIndices, sumIndices); } /** - * Builds an {@link SparseSparseMinimum} operation + * Builds an {@link SparseSlice} operation * - * @param aIndices 2-D. `N x R` matrix with the indices of non-empty values in a - * @param aValues 1-D. `N` non-empty values corresponding to `a_indices`. - * @param aShape 1-D. Shape of the input SparseTensor. - * @param bIndices counterpart to `a_indices` for the other operand. - * @param bValues counterpart to `a_values` for the other operand; must be of the same dtype. - * @param bShape counterpart to `a_shape` for the other operand; the two shapes must be equal. - * @return a new instance of SparseSparseMinimum - * @see org.tensorflow.op.sparse.SparseSparseMinimum + * @param indices 2-D tensor represents the indices of the sparse tensor. + * @param values 1-D tensor represents the values of the sparse tensor. + * @param shape 1-D. tensor represents the shape of the sparse tensor. + * @param start 1-D. tensor represents the start of the slice. + * @param size 1-D. tensor represents the size of the slice. + * @return a new instance of SparseSlice + * @see org.tensorflow.op.sparse.SparseSlice */ - public SparseSparseMinimum sparseSparseMinimum(Operand aIndices, Operand aValues, - Operand aShape, Operand bIndices, Operand bValues, Operand bShape) { - return SparseSparseMinimum.create(scope, aIndices, aValues, aShape, bIndices, bValues, bShape); + public SparseSlice sparseSlice(Operand indices, Operand values, + Operand shape, Operand start, Operand size) { + return SparseSlice.create(scope, indices, values, shape, start, size); } /** - * Builds an {@link SparseReduceMaxSparse} operation + * Builds an {@link SparseReduceSum} operation * * @param inputIndices 2-D. `N x R` matrix with the indices of non-empty values in a * @param inputValues 1-D. `N` non-empty values corresponding to `input_indices`. * @param inputShape 1-D. Shape of the input SparseTensor. * @param reductionAxes 1-D. Length-`K` vector containing the reduction axes. * @param options carries optional attributes values - * @return a new instance of SparseReduceMaxSparse - * @see org.tensorflow.op.sparse.SparseReduceMaxSparse + * @return a new instance of SparseReduceSum + * @see org.tensorflow.op.sparse.SparseReduceSum */ - public SparseReduceMaxSparse sparseReduceMaxSparse( - Operand inputIndices, Operand inputValues, Operand inputShape, - Operand reductionAxes, SparseReduceMaxSparse.Options... options) { - return SparseReduceMaxSparse.create(scope, inputIndices, inputValues, inputShape, reductionAxes, options); + public SparseReduceSum sparseReduceSum(Operand inputIndices, + Operand inputValues, Operand inputShape, Operand reductionAxes, + SparseReduceSum.Options... options) { + return SparseReduceSum.create(scope, inputIndices, inputValues, inputShape, reductionAxes, options); } /** - * Builds an {@link SparseSegmentSumWithNumSegments} operation + * Builds an {@link SparseSegmentMean} operation * * @param data * @param indices A 1-D tensor. Has same rank as `segment_ids`. * @param segmentIds A 1-D tensor. Values should be sorted and can be repeated. - * @param numSegments Should equal the number of distinct segment IDs. - * @return a new instance of SparseSegmentSumWithNumSegments - * @see org.tensorflow.op.sparse.SparseSegmentSumWithNumSegments + * @return a new instance of SparseSegmentMean + * @see org.tensorflow.op.sparse.SparseSegmentMean */ - public SparseSegmentSumWithNumSegments sparseSegmentSumWithNumSegments( - Operand data, Operand indices, Operand segmentIds, Operand numSegments) { - return SparseSegmentSumWithNumSegments.create(scope, data, indices, segmentIds, numSegments); + public SparseSegmentMean sparseSegmentMean( + Operand data, Operand indices, Operand segmentIds) { + return SparseSegmentMean.create(scope, data, indices, segmentIds); } /** - * Builds an {@link SparseReduceSumSparse} operation + * Builds an {@link SparseSegmentMeanGrad} operation * - * @param inputIndices 2-D. `N x R` matrix with the indices of non-empty values in a - * @param inputValues 1-D. `N` non-empty values corresponding to `input_indices`. - * @param inputShape 1-D. Shape of the input SparseTensor. - * @param reductionAxes 1-D. Length-`K` vector containing the reduction axes. - * @param options carries optional attributes values - * @return a new instance of SparseReduceSumSparse - * @see org.tensorflow.op.sparse.SparseReduceSumSparse + * @param grad gradient propagated to the SparseSegmentMean op. + * @param indices indices passed to the corresponding SparseSegmentMean op. + * @param segmentIds segment_ids passed to the corresponding SparseSegmentMean op. + * @param outputDim0 dimension 0 of "data" passed to SparseSegmentMean op. + * @return a new instance of SparseSegmentMeanGrad + * @see org.tensorflow.op.sparse.SparseSegmentMeanGrad */ - public SparseReduceSumSparse sparseReduceSumSparse(Operand inputIndices, - Operand inputValues, Operand inputShape, Operand reductionAxes, - SparseReduceSumSparse.Options... options) { - return SparseReduceSumSparse.create(scope, inputIndices, inputValues, inputShape, reductionAxes, options); + public SparseSegmentMeanGrad sparseSegmentMeanGrad( + Operand grad, Operand indices, Operand segmentIds, Operand outputDim0) { + return SparseSegmentMeanGrad.create(scope, grad, indices, segmentIds, outputDim0); } /** - * Builds an {@link SparseSliceGrad} operation + * Builds an {@link SparseSoftmax} operation * - * @param backpropValGrad 1-D. The gradient with respect to - * @param inputIndices 2-D. The `indices` of the input `SparseTensor`. - * @param inputStart 1-D. tensor represents the start of the slice. - * @param outputIndices 2-D. The `indices` of the sliced `SparseTensor`. - * @return a new instance of SparseSliceGrad - * @see org.tensorflow.op.sparse.SparseSliceGrad + * @param spIndices 2-D. `NNZ x R` matrix with the indices of non-empty values in a + * @param spValues 1-D. `NNZ` non-empty values corresponding to `sp_indices`. + * @param spShape 1-D. Shape of the input SparseTensor. + * @return a new instance of SparseSoftmax + * @see org.tensorflow.op.sparse.SparseSoftmax */ - public SparseSliceGrad sparseSliceGrad(Operand backpropValGrad, - Operand inputIndices, Operand inputStart, Operand outputIndices) { - return SparseSliceGrad.create(scope, backpropValGrad, inputIndices, inputStart, outputIndices); + public SparseSoftmax sparseSoftmax(Operand spIndices, + Operand spValues, Operand spShape) { + return SparseSoftmax.create(scope, spIndices, spValues, spShape); } /** - * Builds an {@link SparseSegmentSqrtNGrad} operation + * Builds an {@link SparseFillEmptyRowsGrad} operation * - * @param grad gradient propagated to the SparseSegmentSqrtN op. - * @param indices indices passed to the corresponding SparseSegmentSqrtN op. - * @param segmentIds segment_ids passed to the corresponding SparseSegmentSqrtN op. - * @param outputDim0 dimension 0 of "data" passed to SparseSegmentSqrtN op. - * @return a new instance of SparseSegmentSqrtNGrad - * @see org.tensorflow.op.sparse.SparseSegmentSqrtNGrad + * @param reverseIndexMap 1-D. The reverse index map from SparseFillEmptyRows. + * @param gradValues 1-D. The gradients from backprop. + * @return a new instance of SparseFillEmptyRowsGrad + * @see org.tensorflow.op.sparse.SparseFillEmptyRowsGrad */ - public SparseSegmentSqrtNGrad sparseSegmentSqrtNGrad( - Operand grad, Operand indices, Operand segmentIds, - Operand outputDim0) { - return SparseSegmentSqrtNGrad.create(scope, grad, indices, segmentIds, outputDim0); + public SparseFillEmptyRowsGrad sparseFillEmptyRowsGrad(Operand reverseIndexMap, + Operand gradValues) { + return SparseFillEmptyRowsGrad.create(scope, reverseIndexMap, gradValues); } /** - * Builds an {@link SparseDenseCwiseDiv} operation + * Builds an {@link SparseConditionalAccumulator} operation * - * @param spIndices 2-D. `N x R` matrix with the indices of non-empty values in a - * @param spValues 1-D. `N` non-empty values corresponding to `sp_indices`. - * @param spShape 1-D. Shape of the input SparseTensor. - * @param dense `R`-D. The dense Tensor operand. - * @return a new instance of SparseDenseCwiseDiv - * @see org.tensorflow.op.sparse.SparseDenseCwiseDiv + * @param dtype The type of the value being accumulated. + * @param shape The shape of the values. + * @param options carries optional attributes values + * @return a new instance of SparseConditionalAccumulator + * @see org.tensorflow.op.sparse.SparseConditionalAccumulator */ - public SparseDenseCwiseDiv sparseDenseCwiseDiv(Operand spIndices, - Operand spValues, Operand spShape, Operand dense) { - return SparseDenseCwiseDiv.create(scope, spIndices, spValues, spShape, dense); + public SparseConditionalAccumulator sparseConditionalAccumulator(DataType dtype, + Shape shape, SparseConditionalAccumulator.Options... options) { + return SparseConditionalAccumulator.create(scope, dtype, shape, options); } /** - * Builds an {@link SparseSegmentSum} operation + * Builds an {@link SparseToDense} operation * - * @param data - * @param indices A 1-D tensor. Has same rank as `segment_ids`. - * @param segmentIds A 1-D tensor. Values should be sorted and can be repeated. - * @return a new instance of SparseSegmentSum - * @see org.tensorflow.op.sparse.SparseSegmentSum + * @param sparseIndices 0-D, 1-D, or 2-D. `sparse_indices[i]` contains the complete + * @param outputShape 1-D. Shape of the dense output tensor. + * @param sparseValues 1-D. Values corresponding to each row of `sparse_indices`, + * @param defaultValue Scalar value to set for indices not specified in + * @param options carries optional attributes values + * @return a new instance of SparseToDense + * @see org.tensorflow.op.sparse.SparseToDense */ - public SparseSegmentSum sparseSegmentSum(Operand data, - Operand indices, Operand segmentIds) { - return SparseSegmentSum.create(scope, data, indices, segmentIds); + public SparseToDense sparseToDense(Operand sparseIndices, + Operand outputShape, Operand sparseValues, Operand defaultValue, + SparseToDense.Options... options) { + return SparseToDense.create(scope, sparseIndices, outputShape, sparseValues, defaultValue, options); } /** - * Builds an {@link SparseMatMul} operation + * Builds an {@link SparseSliceGrad} operation * - * @param a - * @param b - * @param options carries optional attributes values - * @return a new instance of SparseMatMul - * @see org.tensorflow.op.sparse.SparseMatMul + * @param backpropValGrad 1-D. The gradient with respect to + * @param inputIndices 2-D. The `indices` of the input `SparseTensor`. + * @param inputStart 1-D. tensor represents the start of the slice. + * @param outputIndices 2-D. The `indices` of the sliced `SparseTensor`. + * @return a new instance of SparseSliceGrad + * @see org.tensorflow.op.sparse.SparseSliceGrad */ - public SparseMatMul sparseMatMul(Operand a, Operand b, - SparseMatMul.Options... options) { - return SparseMatMul.create(scope, a, b, options); + public SparseSliceGrad sparseSliceGrad(Operand backpropValGrad, + Operand inputIndices, Operand inputStart, Operand outputIndices) { + return SparseSliceGrad.create(scope, backpropValGrad, inputIndices, inputStart, outputIndices); } /** - * Builds an {@link SparseAccumulatorTakeGradient} operation + * Builds an {@link SparseAccumulatorApplyGradient} operation * - * @param handle The handle to a SparseConditionalAccumulator. - * @param numRequired Number of gradients required before we return an aggregate. - * @param dtype The data type of accumulated gradients. Needs to correspond to the type - * @return a new instance of SparseAccumulatorTakeGradient - * @see org.tensorflow.op.sparse.SparseAccumulatorTakeGradient + * @param handle The handle to a accumulator. + * @param localStep The local_step value at which the sparse gradient was computed. + * @param gradientIndices Indices of the sparse gradient to be accumulated. Must be a + * @param gradientValues Values are the non-zero slices of the gradient, and must have + * @param gradientShape Shape of the sparse gradient to be accumulated. + * @param hasKnownShape Boolean indicating whether gradient_shape is unknown, in which + * @return a new instance of SparseAccumulatorApplyGradient + * @see org.tensorflow.op.sparse.SparseAccumulatorApplyGradient */ - public SparseAccumulatorTakeGradient sparseAccumulatorTakeGradient(Operand handle, - Operand numRequired, Class dtype) { - return SparseAccumulatorTakeGradient.create(scope, handle, numRequired, dtype); + public SparseAccumulatorApplyGradient sparseAccumulatorApplyGradient(Operand handle, + Operand localStep, Operand gradientIndices, Operand gradientValues, + Operand gradientShape, Boolean hasKnownShape) { + return SparseAccumulatorApplyGradient.create(scope, handle, localStep, gradientIndices, gradientValues, gradientShape, hasKnownShape); } /** - * Builds an {@link AddManySparseToTensorsMap} operation + * Builds an {@link SparseSplit} operation * - * @param sparseIndices 2-D. The `indices` of the minibatch `SparseTensor`. - * @param sparseValues 1-D. The `values` of the minibatch `SparseTensor`. - * @param sparseShape 1-D. The `shape` of the minibatch `SparseTensor`. - * @param options carries optional attributes values - * @return a new instance of AddManySparseToTensorsMap - * @see org.tensorflow.op.sparse.AddManySparseToTensorsMap + * @param splitDim 0-D. The dimension along which to split. Must be in the range + * @param indices 2-D tensor represents the indices of the sparse tensor. + * @param values 1-D tensor represents the values of the sparse tensor. + * @param shape 1-D. tensor represents the shape of the sparse tensor. + * @param numSplit The number of ways to split. + * @return a new instance of SparseSplit + * @see org.tensorflow.op.sparse.SparseSplit */ - public AddManySparseToTensorsMap addManySparseToTensorsMap(Operand sparseIndices, - Operand sparseValues, Operand sparseShape, - AddManySparseToTensorsMap.Options... options) { - return AddManySparseToTensorsMap.create(scope, sparseIndices, sparseValues, sparseShape, options); + public SparseSplit sparseSplit(Operand splitDim, Operand indices, + Operand values, Operand shape, Long numSplit) { + return SparseSplit.create(scope, splitDim, indices, values, shape, numSplit); } /** - * Builds an {@link SparseConditionalAccumulator} operation + * Builds an {@link SparseReduceSumSparse} operation * - * @param dtype The type of the value being accumulated. - * @param shape The shape of the values. + * @param inputIndices 2-D. `N x R` matrix with the indices of non-empty values in a + * @param inputValues 1-D. `N` non-empty values corresponding to `input_indices`. + * @param inputShape 1-D. Shape of the input SparseTensor. + * @param reductionAxes 1-D. Length-`K` vector containing the reduction axes. * @param options carries optional attributes values - * @return a new instance of SparseConditionalAccumulator - * @see org.tensorflow.op.sparse.SparseConditionalAccumulator + * @return a new instance of SparseReduceSumSparse + * @see org.tensorflow.op.sparse.SparseReduceSumSparse */ - public SparseConditionalAccumulator sparseConditionalAccumulator(Class dtype, Shape shape, - SparseConditionalAccumulator.Options... options) { - return SparseConditionalAccumulator.create(scope, dtype, shape, options); + public SparseReduceSumSparse sparseReduceSumSparse(Operand inputIndices, + Operand inputValues, Operand inputShape, Operand reductionAxes, + SparseReduceSumSparse.Options... options) { + return SparseReduceSumSparse.create(scope, inputIndices, inputValues, inputShape, reductionAxes, options); } /** @@ -391,63 +308,142 @@ public SparseConditionalAccumulator sparseConditionalAccumulator(Class dt * @see org.tensorflow.op.sparse.DenseToSparseSetOperation */ public DenseToSparseSetOperation denseToSparseSetOperation(Operand set1, - Operand set2Indices, Operand set2Values, Operand set2Shape, + Operand set2Indices, Operand set2Values, Operand set2Shape, String setOperation, DenseToSparseSetOperation.Options... options) { return DenseToSparseSetOperation.create(scope, set1, set2Indices, set2Values, set2Shape, setOperation, options); } /** - * Builds an {@link SparseReduceMax} operation + * Builds an {@link SparseSegmentMeanWithNumSegments} operation * - * @param inputIndices 2-D. `N x R` matrix with the indices of non-empty values in a - * @param inputValues 1-D. `N` non-empty values corresponding to `input_indices`. - * @param inputShape 1-D. Shape of the input SparseTensor. - * @param reductionAxes 1-D. Length-`K` vector containing the reduction axes. - * @param options carries optional attributes values - * @return a new instance of SparseReduceMax - * @see org.tensorflow.op.sparse.SparseReduceMax + * @param data + * @param indices A 1-D tensor. Has same rank as `segment_ids`. + * @param segmentIds A 1-D tensor. Values should be sorted and can be repeated. + * @param numSegments Should equal the number of distinct segment IDs. + * @return a new instance of SparseSegmentMeanWithNumSegments + * @see org.tensorflow.op.sparse.SparseSegmentMeanWithNumSegments */ - public SparseReduceMax sparseReduceMax(Operand inputIndices, - Operand inputValues, Operand inputShape, Operand reductionAxes, - SparseReduceMax.Options... options) { - return SparseReduceMax.create(scope, inputIndices, inputValues, inputShape, reductionAxes, options); + public SparseSegmentMeanWithNumSegments sparseSegmentMeanWithNumSegments( + Operand data, Operand indices, Operand segmentIds, Operand numSegments) { + return SparseSegmentMeanWithNumSegments.create(scope, data, indices, segmentIds, numSegments); } /** - * Builds an {@link SparseToSparseSetOperation} operation + * Builds an {@link SparseReshape} operation * - * @param set1Indices 2D `Tensor`, indices of a `SparseTensor`. Must be in row-major - * @param set1Values 1D `Tensor`, values of a `SparseTensor`. Must be in row-major - * @param set1Shape 1D `Tensor`, shape of a `SparseTensor`. `set1_shape[0...n-1]` must - * @param set2Indices 2D `Tensor`, indices of a `SparseTensor`. Must be in row-major - * @param set2Values 1D `Tensor`, values of a `SparseTensor`. Must be in row-major - * @param set2Shape 1D `Tensor`, shape of a `SparseTensor`. `set2_shape[0...n-1]` must - * @param setOperation - * @param options carries optional attributes values - * @return a new instance of SparseToSparseSetOperation - * @see org.tensorflow.op.sparse.SparseToSparseSetOperation + * @param inputIndices 2-D. `N x R_in` matrix with the indices of non-empty values in a + * @param inputShape 1-D. `R_in` vector with the input SparseTensor's dense shape. + * @param newShape 1-D. `R_out` vector with the requested new dense shape. + * @return a new instance of SparseReshape + * @see org.tensorflow.op.sparse.SparseReshape */ - public SparseToSparseSetOperation sparseToSparseSetOperation(Operand set1Indices, - Operand set1Values, Operand set1Shape, Operand set2Indices, - Operand set2Values, Operand set2Shape, String setOperation, - SparseToSparseSetOperation.Options... options) { - return SparseToSparseSetOperation.create(scope, set1Indices, set1Values, set1Shape, set2Indices, set2Values, set2Shape, setOperation, options); + public SparseReshape sparseReshape(Operand inputIndices, Operand inputShape, + Operand newShape) { + return SparseReshape.create(scope, inputIndices, inputShape, newShape); } /** - * Builds an {@link SparseSplit} operation + * Builds an {@link SparseConcat} operation * - * @param splitDim 0-D. The dimension along which to split. Must be in the range - * @param indices 2-D tensor represents the indices of the sparse tensor. - * @param values 1-D tensor represents the values of the sparse tensor. - * @param shape 1-D. tensor represents the shape of the sparse tensor. - * @param numSplit The number of ways to split. - * @return a new instance of SparseSplit - * @see org.tensorflow.op.sparse.SparseSplit + * @param indices 2-D. Indices of each input `SparseTensor`. + * @param values 1-D. Non-empty values of each `SparseTensor`. + * @param shapes 1-D. Shapes of each `SparseTensor`. + * @param concatDim Dimension to concatenate along. Must be in range [-rank, rank), + * @return a new instance of SparseConcat + * @see org.tensorflow.op.sparse.SparseConcat + */ + public SparseConcat sparseConcat(Iterable> indices, + Iterable> values, Iterable> shapes, Long concatDim) { + return SparseConcat.create(scope, indices, values, shapes, concatDim); + } + + /** + * Builds an {@link SparseSparseMinimum} operation + * + * @param aIndices 2-D. `N x R` matrix with the indices of non-empty values in a + * @param aValues 1-D. `N` non-empty values corresponding to `a_indices`. + * @param aShape 1-D. Shape of the input SparseTensor. + * @param bIndices counterpart to `a_indices` for the other operand. + * @param bValues counterpart to `a_values` for the other operand; must be of the same dtype. + * @param bShape counterpart to `a_shape` for the other operand; the two shapes must be equal. + * @return a new instance of SparseSparseMinimum + * @see org.tensorflow.op.sparse.SparseSparseMinimum + */ + public SparseSparseMinimum sparseSparseMinimum(Operand aIndices, + Operand aValues, Operand aShape, Operand bIndices, Operand bValues, + Operand bShape) { + return SparseSparseMinimum.create(scope, aIndices, aValues, aShape, bIndices, bValues, bShape); + } + + /** + * Builds an {@link SparseDenseCwiseAdd} operation + * + * @param spIndices 2-D. `N x R` matrix with the indices of non-empty values in a + * @param spValues 1-D. `N` non-empty values corresponding to `sp_indices`. + * @param spShape 1-D. Shape of the input SparseTensor. + * @param dense `R`-D. The dense Tensor operand. + * @return a new instance of SparseDenseCwiseAdd + * @see org.tensorflow.op.sparse.SparseDenseCwiseAdd + */ + public SparseDenseCwiseAdd sparseDenseCwiseAdd(Operand spIndices, + Operand spValues, Operand spShape, Operand dense) { + return SparseDenseCwiseAdd.create(scope, spIndices, spValues, spShape, dense); + } + + /** + * Builds an {@link SparseCross} operation + * + * @param indices 2-D. Indices of each input `SparseTensor`. + * @param values 1-D. values of each `SparseTensor`. + * @param shapes 1-D. Shapes of each `SparseTensor`. + * @param denseInputs 2-D. Columns represented by dense `Tensor`. + * @param hashedOutput If true, returns the hash of the cross instead of the string. + * @param numBuckets It is used if hashed_output is true. + * @param hashKey Specify the hash_key that will be used by the `FingerprintCat64` + * @param outType + * @param internalType + * @return a new instance of SparseCross + * @see org.tensorflow.op.sparse.SparseCross + */ + public SparseCross sparseCross(Iterable> indices, + Iterable> values, Iterable> shapes, + Iterable> denseInputs, Boolean hashedOutput, Long numBuckets, Long hashKey, + DataType outType, DataType internalType) { + return SparseCross.create(scope, indices, values, shapes, denseInputs, hashedOutput, numBuckets, hashKey, outType, internalType); + } + + /** + * Builds an {@link SparseSegmentSqrtNGrad} operation + * + * @param grad gradient propagated to the SparseSegmentSqrtN op. + * @param indices indices passed to the corresponding SparseSegmentSqrtN op. + * @param segmentIds segment_ids passed to the corresponding SparseSegmentSqrtN op. + * @param outputDim0 dimension 0 of "data" passed to SparseSegmentSqrtN op. + * @return a new instance of SparseSegmentSqrtNGrad + * @see org.tensorflow.op.sparse.SparseSegmentSqrtNGrad + */ + public SparseSegmentSqrtNGrad sparseSegmentSqrtNGrad( + Operand grad, Operand indices, Operand segmentIds, Operand outputDim0) { + return SparseSegmentSqrtNGrad.create(scope, grad, indices, segmentIds, outputDim0); + } + + /** + * Builds an {@link SparseAdd} operation + * + * @param aIndices 2-D. The `indices` of the first `SparseTensor`, size `[nnz, ndims]` Matrix. + * @param aValues 1-D. The `values` of the first `SparseTensor`, size `[nnz]` Vector. + * @param aShape 1-D. The `shape` of the first `SparseTensor`, size `[ndims]` Vector. + * @param bIndices 2-D. The `indices` of the second `SparseTensor`, size `[nnz, ndims]` Matrix. + * @param bValues 1-D. The `values` of the second `SparseTensor`, size `[nnz]` Vector. + * @param bShape 1-D. The `shape` of the second `SparseTensor`, size `[ndims]` Vector. + * @param thresh 0-D. The magnitude threshold that determines if an output value/index + * @return a new instance of SparseAdd + * @see org.tensorflow.op.sparse.SparseAdd */ - public SparseSplit sparseSplit(Operand splitDim, Operand indices, - Operand values, Operand shape, Long numSplit) { - return SparseSplit.create(scope, splitDim, indices, values, shape, numSplit); + public SparseAdd sparseAdd(Operand aIndices, Operand aValues, + Operand aShape, Operand bIndices, Operand bValues, Operand bShape, + Operand thresh) { + return SparseAdd.create(scope, aIndices, aValues, aShape, bIndices, bValues, bShape, thresh); } /** @@ -459,87 +455,93 @@ public SparseSplit sparseSplit(Operand splitDim, Operand indi * @see org.tensorflow.op.sparse.DeserializeSparse */ public DeserializeSparse deserializeSparse(Operand serializedSparse, - Class dtype) { + DataType dtype) { return DeserializeSparse.create(scope, serializedSparse, dtype); } /** - * Builds an {@link SparseToDense} operation + * Builds an {@link SparseToSparseSetOperation} operation * - * @param sparseIndices 0-D, 1-D, or 2-D. `sparse_indices[i]` contains the complete - * @param outputShape 1-D. Shape of the dense output tensor. - * @param sparseValues 1-D. Values corresponding to each row of `sparse_indices`, - * @param defaultValue Scalar value to set for indices not specified in + * @param set1Indices 2D `Tensor`, indices of a `SparseTensor`. Must be in row-major + * @param set1Values 1D `Tensor`, values of a `SparseTensor`. Must be in row-major + * @param set1Shape 1D `Tensor`, shape of a `SparseTensor`. `set1_shape[0...n-1]` must + * @param set2Indices 2D `Tensor`, indices of a `SparseTensor`. Must be in row-major + * @param set2Values 1D `Tensor`, values of a `SparseTensor`. Must be in row-major + * @param set2Shape 1D `Tensor`, shape of a `SparseTensor`. `set2_shape[0...n-1]` must + * @param setOperation * @param options carries optional attributes values - * @return a new instance of SparseToDense - * @see org.tensorflow.op.sparse.SparseToDense + * @return a new instance of SparseToSparseSetOperation + * @see org.tensorflow.op.sparse.SparseToSparseSetOperation */ - public SparseToDense sparseToDense(Operand sparseIndices, - Operand outputShape, Operand sparseValues, Operand defaultValue, - SparseToDense.Options... options) { - return SparseToDense.create(scope, sparseIndices, outputShape, sparseValues, defaultValue, options); + public SparseToSparseSetOperation sparseToSparseSetOperation(Operand set1Indices, + Operand set1Values, Operand set1Shape, Operand set2Indices, + Operand set2Values, Operand set2Shape, String setOperation, + SparseToSparseSetOperation.Options... options) { + return SparseToSparseSetOperation.create(scope, set1Indices, set1Values, set1Shape, set2Indices, set2Values, set2Shape, setOperation, options); } /** - * Builds an {@link SparseSegmentMeanWithNumSegments} operation + * Builds an {@link SparseTensorDenseAdd} operation * - * @param data - * @param indices A 1-D tensor. Has same rank as `segment_ids`. - * @param segmentIds A 1-D tensor. Values should be sorted and can be repeated. - * @param numSegments Should equal the number of distinct segment IDs. - * @return a new instance of SparseSegmentMeanWithNumSegments - * @see org.tensorflow.op.sparse.SparseSegmentMeanWithNumSegments + * @param aIndices 2-D. The `indices` of the `SparseTensor`, with shape `[nnz, ndims]`. + * @param aValues 1-D. The `values` of the `SparseTensor`, with shape `[nnz]`. + * @param aShape 1-D. The `shape` of the `SparseTensor`, with shape `[ndims]`. + * @param b `ndims`-D Tensor. With shape `a_shape`. + * @return a new instance of SparseTensorDenseAdd + * @see org.tensorflow.op.sparse.SparseTensorDenseAdd */ - public SparseSegmentMeanWithNumSegments sparseSegmentMeanWithNumSegments( - Operand data, Operand indices, Operand segmentIds, Operand numSegments) { - return SparseSegmentMeanWithNumSegments.create(scope, data, indices, segmentIds, numSegments); + public SparseTensorDenseAdd sparseTensorDenseAdd(Operand aIndices, + Operand aValues, Operand aShape, Operand b) { + return SparseTensorDenseAdd.create(scope, aIndices, aValues, aShape, b); } /** - * Builds an {@link SparseSegmentMean} operation + * Builds an {@link SparseSegmentSum} operation * * @param data * @param indices A 1-D tensor. Has same rank as `segment_ids`. * @param segmentIds A 1-D tensor. Values should be sorted and can be repeated. - * @return a new instance of SparseSegmentMean - * @see org.tensorflow.op.sparse.SparseSegmentMean + * @return a new instance of SparseSegmentSum + * @see org.tensorflow.op.sparse.SparseSegmentSum */ - public SparseSegmentMean sparseSegmentMean( - Operand data, Operand indices, Operand segmentIds) { - return SparseSegmentMean.create(scope, data, indices, segmentIds); + public SparseSegmentSum sparseSegmentSum( + Operand data, Operand indices, Operand segmentIds) { + return SparseSegmentSum.create(scope, data, indices, segmentIds); } /** - * Builds an {@link DenseToDenseSetOperation} operation + * Builds an {@link SparseSparseMaximum} operation * - * @param set1 `Tensor` with rank `n`. 1st `n-1` dimensions must be the same as `set2`. - * @param set2 `Tensor` with rank `n`. 1st `n-1` dimensions must be the same as `set1`. - * @param setOperation - * @param options carries optional attributes values - * @return a new instance of DenseToDenseSetOperation - * @see org.tensorflow.op.sparse.DenseToDenseSetOperation + * @param aIndices 2-D. `N x R` matrix with the indices of non-empty values in a + * @param aValues 1-D. `N` non-empty values corresponding to `a_indices`. + * @param aShape 1-D. Shape of the input SparseTensor. + * @param bIndices counterpart to `a_indices` for the other operand. + * @param bValues counterpart to `a_values` for the other operand; must be of the same dtype. + * @param bShape counterpart to `a_shape` for the other operand; the two shapes must be equal. + * @return a new instance of SparseSparseMaximum + * @see org.tensorflow.op.sparse.SparseSparseMaximum */ - public DenseToDenseSetOperation denseToDenseSetOperation(Operand set1, Operand set2, - String setOperation, DenseToDenseSetOperation.Options... options) { - return DenseToDenseSetOperation.create(scope, set1, set2, setOperation, options); + public SparseSparseMaximum sparseSparseMaximum(Operand aIndices, + Operand aValues, Operand aShape, Operand bIndices, Operand bValues, + Operand bShape) { + return SparseSparseMaximum.create(scope, aIndices, aValues, aShape, bIndices, bValues, bShape); } /** - * Builds an {@link SparseAccumulatorApplyGradient} operation + * Builds an {@link SparseReduceMax} operation * - * @param handle The handle to a accumulator. - * @param localStep The local_step value at which the sparse gradient was computed. - * @param gradientIndices Indices of the sparse gradient to be accumulated. Must be a - * @param gradientValues Values are the non-zero slices of the gradient, and must have - * @param gradientShape Shape of the sparse gradient to be accumulated. - * @param hasKnownShape Boolean indicating whether gradient_shape is unknown, in which - * @return a new instance of SparseAccumulatorApplyGradient - * @see org.tensorflow.op.sparse.SparseAccumulatorApplyGradient + * @param inputIndices 2-D. `N x R` matrix with the indices of non-empty values in a + * @param inputValues 1-D. `N` non-empty values corresponding to `input_indices`. + * @param inputShape 1-D. Shape of the input SparseTensor. + * @param reductionAxes 1-D. Length-`K` vector containing the reduction axes. + * @param options carries optional attributes values + * @return a new instance of SparseReduceMax + * @see org.tensorflow.op.sparse.SparseReduceMax */ - public SparseAccumulatorApplyGradient sparseAccumulatorApplyGradient(Operand handle, - Operand localStep, Operand gradientIndices, Operand gradientValues, - Operand gradientShape, Boolean hasKnownShape) { - return SparseAccumulatorApplyGradient.create(scope, handle, localStep, gradientIndices, gradientValues, gradientShape, hasKnownShape); + public SparseReduceMax sparseReduceMax(Operand inputIndices, + Operand inputValues, Operand inputShape, Operand reductionAxes, + SparseReduceMax.Options... options) { + return SparseReduceMax.create(scope, inputIndices, inputValues, inputShape, reductionAxes, options); } /** @@ -551,75 +553,101 @@ public SparseAccumulatorApplyGradient sparseAccumulatorApplyGradient(Operand * @return a new instance of SparseReorder * @see org.tensorflow.op.sparse.SparseReorder */ - public SparseReorder sparseReorder(Operand inputIndices, Operand inputValues, - Operand inputShape) { + public SparseReorder sparseReorder(Operand inputIndices, Operand inputValues, + Operand inputShape) { return SparseReorder.create(scope, inputIndices, inputValues, inputShape); } /** - * Builds an {@link SparseCross} operation + * Builds an {@link SparseDenseCwiseMul} operation * - * @param indices 2-D. Indices of each input `SparseTensor`. - * @param values 1-D. values of each `SparseTensor`. - * @param shapes 1-D. Shapes of each `SparseTensor`. - * @param denseInputs 2-D. Columns represented by dense `Tensor`. - * @param hashedOutput If true, returns the hash of the cross instead of the string. - * @param numBuckets It is used if hashed_output is true. - * @param hashKey Specify the hash_key that will be used by the `FingerprintCat64` - * @param outType - * @param internalType - * @return a new instance of SparseCross - * @see org.tensorflow.op.sparse.SparseCross + * @param spIndices 2-D. `N x R` matrix with the indices of non-empty values in a + * @param spValues 1-D. `N` non-empty values corresponding to `sp_indices`. + * @param spShape 1-D. Shape of the input SparseTensor. + * @param dense `R`-D. The dense Tensor operand. + * @return a new instance of SparseDenseCwiseMul + * @see org.tensorflow.op.sparse.SparseDenseCwiseMul */ - public SparseCross sparseCross(Iterable> indices, - Iterable> values, Iterable> shapes, Iterable> denseInputs, - Boolean hashedOutput, Long numBuckets, Long hashKey, Class outType, - Class internalType) { - return SparseCross.create(scope, indices, values, shapes, denseInputs, hashedOutput, numBuckets, hashKey, outType, internalType); + public SparseDenseCwiseMul sparseDenseCwiseMul(Operand spIndices, + Operand spValues, Operand spShape, Operand dense) { + return SparseDenseCwiseMul.create(scope, spIndices, spValues, spShape, dense); } /** - * Builds an {@link SparseSegmentSqrtN} operation + * Builds an {@link DenseToDenseSetOperation} operation + * + * @param set1 `Tensor` with rank `n`. 1st `n-1` dimensions must be the same as `set2`. + * @param set2 `Tensor` with rank `n`. 1st `n-1` dimensions must be the same as `set1`. + * @param setOperation + * @param options carries optional attributes values + * @return a new instance of DenseToDenseSetOperation + * @see org.tensorflow.op.sparse.DenseToDenseSetOperation + */ + public DenseToDenseSetOperation denseToDenseSetOperation(Operand set1, Operand set2, + String setOperation, DenseToDenseSetOperation.Options... options) { + return DenseToDenseSetOperation.create(scope, set1, set2, setOperation, options); + } + + /** + * Builds an {@link SparseSegmentSumWithNumSegments} operation * * @param data * @param indices A 1-D tensor. Has same rank as `segment_ids`. * @param segmentIds A 1-D tensor. Values should be sorted and can be repeated. - * @return a new instance of SparseSegmentSqrtN - * @see org.tensorflow.op.sparse.SparseSegmentSqrtN + * @param numSegments Should equal the number of distinct segment IDs. + * @return a new instance of SparseSegmentSumWithNumSegments + * @see org.tensorflow.op.sparse.SparseSegmentSumWithNumSegments */ - public SparseSegmentSqrtN sparseSegmentSqrtN( - Operand data, Operand indices, Operand segmentIds) { - return SparseSegmentSqrtN.create(scope, data, indices, segmentIds); + public SparseSegmentSumWithNumSegments sparseSegmentSumWithNumSegments( + Operand data, Operand indices, Operand segmentIds, Operand numSegments) { + return SparseSegmentSumWithNumSegments.create(scope, data, indices, segmentIds, numSegments); } /** - * Builds an {@link SparseSlice} operation + * Builds an {@link SparseReduceMaxSparse} operation * - * @param indices 2-D tensor represents the indices of the sparse tensor. - * @param values 1-D tensor represents the values of the sparse tensor. - * @param shape 1-D. tensor represents the shape of the sparse tensor. - * @param start 1-D. tensor represents the start of the slice. - * @param size 1-D. tensor represents the size of the slice. - * @return a new instance of SparseSlice - * @see org.tensorflow.op.sparse.SparseSlice + * @param inputIndices 2-D. `N x R` matrix with the indices of non-empty values in a + * @param inputValues 1-D. `N` non-empty values corresponding to `input_indices`. + * @param inputShape 1-D. Shape of the input SparseTensor. + * @param reductionAxes 1-D. Length-`K` vector containing the reduction axes. + * @param options carries optional attributes values + * @return a new instance of SparseReduceMaxSparse + * @see org.tensorflow.op.sparse.SparseReduceMaxSparse */ - public SparseSlice sparseSlice(Operand indices, Operand values, - Operand shape, Operand start, Operand size) { - return SparseSlice.create(scope, indices, values, shape, start, size); + public SparseReduceMaxSparse sparseReduceMaxSparse( + Operand inputIndices, Operand inputValues, Operand inputShape, + Operand reductionAxes, SparseReduceMaxSparse.Options... options) { + return SparseReduceMaxSparse.create(scope, inputIndices, inputValues, inputShape, reductionAxes, options); } /** - * Builds an {@link SparseSoftmax} operation + * Builds an {@link AddSparseToTensorsMap} operation * - * @param spIndices 2-D. `NNZ x R` matrix with the indices of non-empty values in a - * @param spValues 1-D. `NNZ` non-empty values corresponding to `sp_indices`. - * @param spShape 1-D. Shape of the input SparseTensor. - * @return a new instance of SparseSoftmax - * @see org.tensorflow.op.sparse.SparseSoftmax + * @param sparseIndices 2-D. The `indices` of the `SparseTensor`. + * @param sparseValues 1-D. The `values` of the `SparseTensor`. + * @param sparseShape 1-D. The `shape` of the `SparseTensor`. + * @param options carries optional attributes values + * @return a new instance of AddSparseToTensorsMap + * @see org.tensorflow.op.sparse.AddSparseToTensorsMap */ - public SparseSoftmax sparseSoftmax(Operand spIndices, - Operand spValues, Operand spShape) { - return SparseSoftmax.create(scope, spIndices, spValues, spShape); + public AddSparseToTensorsMap addSparseToTensorsMap(Operand sparseIndices, + Operand sparseValues, Operand sparseShape, + AddSparseToTensorsMap.Options... options) { + return AddSparseToTensorsMap.create(scope, sparseIndices, sparseValues, sparseShape, options); + } + + /** + * Builds an {@link SparseAccumulatorTakeGradient} operation + * + * @param handle The handle to a SparseConditionalAccumulator. + * @param numRequired Number of gradients required before we return an aggregate. + * @param dtype The data type of accumulated gradients. Needs to correspond to the type + * @return a new instance of SparseAccumulatorTakeGradient + * @see org.tensorflow.op.sparse.SparseAccumulatorTakeGradient + */ + public SparseAccumulatorTakeGradient sparseAccumulatorTakeGradient(Operand handle, + Operand numRequired, DataType dtype) { + return SparseAccumulatorTakeGradient.create(scope, handle, numRequired, dtype); } /** @@ -632,26 +660,11 @@ public SparseSoftmax sparseSoftmax(Operand spIndices * @return a new instance of SparseSegmentSqrtNWithNumSegments * @see org.tensorflow.op.sparse.SparseSegmentSqrtNWithNumSegments */ - public SparseSegmentSqrtNWithNumSegments sparseSegmentSqrtNWithNumSegments( - Operand data, Operand indices, Operand segmentIds, Operand numSegments) { + public SparseSegmentSqrtNWithNumSegments sparseSegmentSqrtNWithNumSegments( + Operand data, Operand indices, Operand segmentIds, Operand numSegments) { return SparseSegmentSqrtNWithNumSegments.create(scope, data, indices, segmentIds, numSegments); } - /** - * Builds an {@link TakeManySparseFromTensorsMap} operation - * - * @param sparseHandles 1-D, The `N` serialized `SparseTensor` objects. - * @param dtype The `dtype` of the `SparseTensor` objects stored in the - * @param options carries optional attributes values - * @return a new instance of TakeManySparseFromTensorsMap - * @see org.tensorflow.op.sparse.TakeManySparseFromTensorsMap - */ - public TakeManySparseFromTensorsMap takeManySparseFromTensorsMap( - Operand sparseHandles, Class dtype, - TakeManySparseFromTensorsMap.Options... options) { - return TakeManySparseFromTensorsMap.create(scope, sparseHandles, dtype, options); - } - /** * Builds an {@link SparseTensorDenseMatMul} operation * @@ -663,76 +676,67 @@ public TakeManySparseFromTensorsMap takeManySparseFromTensorsMap( * @return a new instance of SparseTensorDenseMatMul * @see org.tensorflow.op.sparse.SparseTensorDenseMatMul */ - public SparseTensorDenseMatMul sparseTensorDenseMatMul( - Operand aIndices, Operand aValues, Operand aShape, Operand b, + public SparseTensorDenseMatMul sparseTensorDenseMatMul( + Operand aIndices, Operand aValues, Operand aShape, Operand b, SparseTensorDenseMatMul.Options... options) { return SparseTensorDenseMatMul.create(scope, aIndices, aValues, aShape, b, options); } /** - * Builds an {@link SparseSparseMaximum} operation + * Builds an {@link SparseMatMul} operation * - * @param aIndices 2-D. `N x R` matrix with the indices of non-empty values in a - * @param aValues 1-D. `N` non-empty values corresponding to `a_indices`. - * @param aShape 1-D. Shape of the input SparseTensor. - * @param bIndices counterpart to `a_indices` for the other operand. - * @param bValues counterpart to `a_values` for the other operand; must be of the same dtype. - * @param bShape counterpart to `a_shape` for the other operand; the two shapes must be equal. - * @return a new instance of SparseSparseMaximum - * @see org.tensorflow.op.sparse.SparseSparseMaximum + * @param a + * @param b + * @param options carries optional attributes values + * @return a new instance of SparseMatMul + * @see org.tensorflow.op.sparse.SparseMatMul */ - public SparseSparseMaximum sparseSparseMaximum(Operand aIndices, - Operand aValues, Operand aShape, Operand bIndices, Operand bValues, - Operand bShape) { - return SparseSparseMaximum.create(scope, aIndices, aValues, aShape, bIndices, bValues, bShape); + public SparseMatMul sparseMatMul(Operand a, + Operand b, SparseMatMul.Options... options) { + return SparseMatMul.create(scope, a, b, options); } /** - * Builds an {@link SparseDenseCwiseMul} operation + * Builds an {@link SparseDenseCwiseDiv} operation * * @param spIndices 2-D. `N x R` matrix with the indices of non-empty values in a * @param spValues 1-D. `N` non-empty values corresponding to `sp_indices`. * @param spShape 1-D. Shape of the input SparseTensor. * @param dense `R`-D. The dense Tensor operand. - * @return a new instance of SparseDenseCwiseMul - * @see org.tensorflow.op.sparse.SparseDenseCwiseMul + * @return a new instance of SparseDenseCwiseDiv + * @see org.tensorflow.op.sparse.SparseDenseCwiseDiv */ - public SparseDenseCwiseMul sparseDenseCwiseMul(Operand spIndices, - Operand spValues, Operand spShape, Operand dense) { - return SparseDenseCwiseMul.create(scope, spIndices, spValues, spShape, dense); + public SparseDenseCwiseDiv sparseDenseCwiseDiv(Operand spIndices, + Operand spValues, Operand spShape, Operand dense) { + return SparseDenseCwiseDiv.create(scope, spIndices, spValues, spShape, dense); } /** - * Builds an {@link SparseAdd} operation + * Builds an {@link SparseSegmentSqrtN} operation * - * @param aIndices 2-D. The `indices` of the first `SparseTensor`, size `[nnz, ndims]` Matrix. - * @param aValues 1-D. The `values` of the first `SparseTensor`, size `[nnz]` Vector. - * @param aShape 1-D. The `shape` of the first `SparseTensor`, size `[ndims]` Vector. - * @param bIndices 2-D. The `indices` of the second `SparseTensor`, size `[nnz, ndims]` Matrix. - * @param bValues 1-D. The `values` of the second `SparseTensor`, size `[nnz]` Vector. - * @param bShape 1-D. The `shape` of the second `SparseTensor`, size `[ndims]` Vector. - * @param thresh 0-D. The magnitude threshold that determines if an output value/index - * @return a new instance of SparseAdd - * @see org.tensorflow.op.sparse.SparseAdd + * @param data + * @param indices A 1-D tensor. Has same rank as `segment_ids`. + * @param segmentIds A 1-D tensor. Values should be sorted and can be repeated. + * @return a new instance of SparseSegmentSqrtN + * @see org.tensorflow.op.sparse.SparseSegmentSqrtN */ - public SparseAdd sparseAdd(Operand aIndices, Operand aValues, - Operand aShape, Operand bIndices, Operand bValues, Operand bShape, - Operand thresh) { - return SparseAdd.create(scope, aIndices, aValues, aShape, bIndices, bValues, bShape, thresh); + public SparseSegmentSqrtN sparseSegmentSqrtN( + Operand data, Operand indices, Operand segmentIds) { + return SparseSegmentSqrtN.create(scope, data, indices, segmentIds); } /** - * Builds an {@link SparseConcat} operation + * Builds an {@link TakeManySparseFromTensorsMap} operation * - * @param indices 2-D. Indices of each input `SparseTensor`. - * @param values 1-D. Non-empty values of each `SparseTensor`. - * @param shapes 1-D. Shapes of each `SparseTensor`. - * @param concatDim Dimension to concatenate along. Must be in range [-rank, rank), - * @return a new instance of SparseConcat - * @see org.tensorflow.op.sparse.SparseConcat + * @param sparseHandles 1-D, The `N` serialized `SparseTensor` objects. + * @param dtype The `dtype` of the `SparseTensor` objects stored in the + * @param options carries optional attributes values + * @return a new instance of TakeManySparseFromTensorsMap + * @see org.tensorflow.op.sparse.TakeManySparseFromTensorsMap */ - public SparseConcat sparseConcat(Iterable> indices, - Iterable> values, Iterable> shapes, Long concatDim) { - return SparseConcat.create(scope, indices, values, shapes, concatDim); + public TakeManySparseFromTensorsMap takeManySparseFromTensorsMap( + Operand sparseHandles, DataType dtype, + TakeManySparseFromTensorsMap.Options... options) { + return TakeManySparseFromTensorsMap.create(scope, sparseHandles, dtype, options); } } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/StringsOps.java b/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/StringsOps.java index cb91a10752c..85592ddd204 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/StringsOps.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/StringsOps.java @@ -1,6 +1,7 @@ package org.tensorflow.op; import java.util.List; +import org.tensorflow.DataType; import org.tensorflow.Operand; import org.tensorflow.op.strings.Join; import org.tensorflow.op.strings.ReduceJoin; @@ -17,6 +18,10 @@ import org.tensorflow.op.strings.ToNumber; import org.tensorflow.op.strings.UnicodeScript; import org.tensorflow.op.strings.UnicodeTranscode; +import org.tensorflow.types.TFloat; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.TString; +import org.tensorflow.types.family.TNumber; /** * An API for building {@code strings} operations as {@link Op Op}s @@ -31,15 +36,30 @@ public final class StringsOps { } /** - * Builds an {@link StringLength} operation + * Builds an {@link Substr} operation * - * @param input The string for which to compute the length. + * @param input Tensor of strings + * @param pos Scalar defining the position of first character in each substring + * @param len Scalar defining the number of characters to include in each substring * @param options carries optional attributes values - * @return a new instance of StringLength - * @see org.tensorflow.op.strings.StringLength + * @return a new instance of Substr + * @see org.tensorflow.op.strings.Substr */ - public StringLength stringLength(Operand input, StringLength.Options... options) { - return StringLength.create(scope, input, options); + public Substr substr(Operand input, Operand pos, Operand len, + Substr.Options... options) { + return Substr.create(scope, input, pos, len, options); + } + + /** + * Builds an {@link Join} operation + * + * @param inputs A list of string tensors. The tensors must all have the same shape, + * @param options carries optional attributes values + * @return a new instance of Join + * @see org.tensorflow.op.strings.Join + */ + public Join join(Iterable> inputs, Join.Options... options) { + return Join.create(scope, inputs, options); } /** @@ -62,47 +82,31 @@ public StringFormat stringFormat(Iterable> inputs, StringFormat.Optio * @return a new instance of ToHashBucketFast * @see org.tensorflow.op.strings.ToHashBucketFast */ - public ToHashBucketFast toHashBucketFast(Operand input, Long numBuckets) { + public ToHashBucketFast toHashBucketFast(Operand input, Long numBuckets) { return ToHashBucketFast.create(scope, input, numBuckets); } /** - * Builds an {@link Join} operation - * - * @param inputs A list of string tensors. The tensors must all have the same shape, - * @param options carries optional attributes values - * @return a new instance of Join - * @see org.tensorflow.op.strings.Join - */ - public Join join(Iterable> inputs, Join.Options... options) { - return Join.create(scope, inputs, options); - } - - /** - * Builds an {@link ToHashBucket} operation + * Builds an {@link Strip} operation * - * @param stringTensor - * @param numBuckets The number of buckets. - * @return a new instance of ToHashBucket - * @see org.tensorflow.op.strings.ToHashBucket + * @param input A string `Tensor` of any shape. + * @return a new instance of Strip + * @see org.tensorflow.op.strings.Strip */ - public ToHashBucket toHashBucket(Operand stringTensor, Long numBuckets) { - return ToHashBucket.create(scope, stringTensor, numBuckets); + public Strip strip(Operand input) { + return Strip.create(scope, input); } /** - * Builds an {@link RegexReplace} operation + * Builds an {@link RegexFullMatch} operation * - * @param input The text to be processed. - * @param pattern The regular expression to be matched in the `input` strings. - * @param rewrite The rewrite string to be substituted for the `pattern` expression where it is - * @param options carries optional attributes values - * @return a new instance of RegexReplace - * @see org.tensorflow.op.strings.RegexReplace + * @param input A string tensor of the text to be processed. + * @param pattern A scalar string tensor containing the regular expression to match the input. + * @return a new instance of RegexFullMatch + * @see org.tensorflow.op.strings.RegexFullMatch */ - public RegexReplace regexReplace(Operand input, Operand pattern, - Operand rewrite, RegexReplace.Options... options) { - return RegexReplace.create(scope, input, pattern, rewrite, options); + public RegexFullMatch regexFullMatch(Operand input, Operand pattern) { + return RegexFullMatch.create(scope, input, pattern); } /** @@ -112,22 +116,10 @@ public RegexReplace regexReplace(Operand input, Operand pattern, * @return a new instance of ToNumber * @see org.tensorflow.op.strings.ToNumber */ - public ToNumber toNumber(Operand stringTensor) { + public ToNumber toNumber(Operand stringTensor) { return ToNumber.create(scope, stringTensor); } - /** - * Builds an {@link ToNumber} operation - * - * @param stringTensor - * @param outType The numeric type to interpret each string in `string_tensor` as. - * @return a new instance of ToNumber - * @see org.tensorflow.op.strings.ToNumber - */ - public ToNumber toNumber(Operand stringTensor, Class outType) { - return ToNumber.create(scope, stringTensor, outType); - } - /** * Builds an {@link UnicodeTranscode} operation * @@ -138,20 +130,50 @@ public ToNumber toNumber(Operand stringTensor, Cla * @return a new instance of UnicodeTranscode * @see org.tensorflow.op.strings.UnicodeTranscode */ - public UnicodeTranscode unicodeTranscode(Operand input, String inputEncoding, + public UnicodeTranscode unicodeTranscode(Operand input, String inputEncoding, String outputEncoding, UnicodeTranscode.Options... options) { return UnicodeTranscode.create(scope, input, inputEncoding, outputEncoding, options); } /** - * Builds an {@link Strip} operation + * Builds an {@link RegexReplace} operation * - * @param input A string `Tensor` of any shape. - * @return a new instance of Strip - * @see org.tensorflow.op.strings.Strip + * @param input The text to be processed. + * @param pattern The regular expression to be matched in the `input` strings. + * @param rewrite The rewrite string to be substituted for the `pattern` expression where it is + * @param options carries optional attributes values + * @return a new instance of RegexReplace + * @see org.tensorflow.op.strings.RegexReplace */ - public Strip strip(Operand input) { - return Strip.create(scope, input); + public RegexReplace regexReplace(Operand input, Operand pattern, + Operand rewrite, RegexReplace.Options... options) { + return RegexReplace.create(scope, input, pattern, rewrite, options); + } + + /** + * Builds an {@link ToHashBucket} operation + * + * @param stringTensor + * @param numBuckets The number of buckets. + * @return a new instance of ToHashBucket + * @see org.tensorflow.op.strings.ToHashBucket + */ + public ToHashBucket toHashBucket(Operand stringTensor, Long numBuckets) { + return ToHashBucket.create(scope, stringTensor, numBuckets); + } + + /** + * Builds an {@link StringSplit} operation + * + * @param input `1-D` string `Tensor`, the strings to split. + * @param sep `0-D` string `Tensor`, the delimiter character. + * @param options carries optional attributes values + * @return a new instance of StringSplit + * @see org.tensorflow.op.strings.StringSplit + */ + public StringSplit stringSplit(Operand input, Operand sep, + StringSplit.Options... options) { + return StringSplit.create(scope, input, sep, options); } /** @@ -161,7 +183,7 @@ public Strip strip(Operand input) { * @return a new instance of UnicodeScript * @see org.tensorflow.op.strings.UnicodeScript */ - public UnicodeScript unicodeScript(Operand input) { + public UnicodeScript unicodeScript(Operand input) { return UnicodeScript.create(scope, input); } @@ -174,21 +196,22 @@ public UnicodeScript unicodeScript(Operand input) { * @return a new instance of ReduceJoin * @see org.tensorflow.op.strings.ReduceJoin */ - public ReduceJoin reduceJoin(Operand inputs, Operand reductionIndices, + public ReduceJoin reduceJoin(Operand inputs, Operand reductionIndices, ReduceJoin.Options... options) { return ReduceJoin.create(scope, inputs, reductionIndices, options); } /** - * Builds an {@link RegexFullMatch} operation + * Builds an {@link ToNumber} operation * - * @param input A string tensor of the text to be processed. - * @param pattern A scalar string tensor containing the regular expression to match the input. - * @return a new instance of RegexFullMatch - * @see org.tensorflow.op.strings.RegexFullMatch + * @param stringTensor + * @param outType The numeric type to interpret each string in `string_tensor` as. + * @return a new instance of ToNumber + * @see org.tensorflow.op.strings.ToNumber */ - public RegexFullMatch regexFullMatch(Operand input, Operand pattern) { - return RegexFullMatch.create(scope, input, pattern); + public ToNumber toNumber(Operand stringTensor, + DataType outType) { + return ToNumber.create(scope, stringTensor, outType); } /** @@ -200,37 +223,20 @@ public RegexFullMatch regexFullMatch(Operand input, Operand patt * @return a new instance of ToHashBucketStrong * @see org.tensorflow.op.strings.ToHashBucketStrong */ - public ToHashBucketStrong toHashBucketStrong(Operand input, Long numBuckets, + public ToHashBucketStrong toHashBucketStrong(Operand input, Long numBuckets, List key) { return ToHashBucketStrong.create(scope, input, numBuckets, key); } /** - * Builds an {@link Substr} operation - * - * @param input Tensor of strings - * @param pos Scalar defining the position of first character in each substring - * @param len Scalar defining the number of characters to include in each substring - * @param options carries optional attributes values - * @return a new instance of Substr - * @see org.tensorflow.op.strings.Substr - */ - public Substr substr(Operand input, Operand pos, Operand len, - Substr.Options... options) { - return Substr.create(scope, input, pos, len, options); - } - - /** - * Builds an {@link StringSplit} operation + * Builds an {@link StringLength} operation * - * @param input `1-D` string `Tensor`, the strings to split. - * @param sep `0-D` string `Tensor`, the delimiter character. + * @param input The string for which to compute the length. * @param options carries optional attributes values - * @return a new instance of StringSplit - * @see org.tensorflow.op.strings.StringSplit + * @return a new instance of StringLength + * @see org.tensorflow.op.strings.StringLength */ - public StringSplit stringSplit(Operand input, Operand sep, - StringSplit.Options... options) { - return StringSplit.create(scope, input, sep, options); + public StringLength stringLength(Operand input, StringLength.Options... options) { + return StringLength.create(scope, input, options); } } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/SummaryOps.java b/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/SummaryOps.java index e3ca7af8684..3ec64b93047 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/SummaryOps.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/SummaryOps.java @@ -7,6 +7,9 @@ import org.tensorflow.op.summary.MergeSummary; import org.tensorflow.op.summary.ScalarSummary; import org.tensorflow.op.summary.TensorSummary; +import org.tensorflow.types.TFloat; +import org.tensorflow.types.TString; +import org.tensorflow.types.family.TNumber; /** * An API for building {@code summary} operations as {@link Op Op}s @@ -20,44 +23,6 @@ public final class SummaryOps { this.scope = scope; } - /** - * Builds an {@link HistogramSummary} operation - * - * @param tag Scalar. Tag to use for the `Summary.Value`. - * @param values Any shape. Values to use to build the histogram. - * @return a new instance of HistogramSummary - * @see org.tensorflow.op.summary.HistogramSummary - */ - public HistogramSummary histogramSummary(Operand tag, - Operand values) { - return HistogramSummary.create(scope, tag, values); - } - - /** - * Builds an {@link TensorSummary} operation - * - * @param tag A string attached to this summary. Used for organization in TensorBoard. - * @param tensor A tensor to serialize. - * @param serializedSummaryMetadata A serialized SummaryMetadata proto. Contains plugin - * @return a new instance of TensorSummary - * @see org.tensorflow.op.summary.TensorSummary - */ - public TensorSummary tensorSummary(Operand tag, Operand tensor, - Operand serializedSummaryMetadata) { - return TensorSummary.create(scope, tag, tensor, serializedSummaryMetadata); - } - - /** - * Builds an {@link MergeSummary} operation - * - * @param inputs Can be of any shape. Each must contain serialized `Summary` protocol - * @return a new instance of MergeSummary - * @see org.tensorflow.op.summary.MergeSummary - */ - public MergeSummary mergeSummary(Iterable> inputs) { - return MergeSummary.create(scope, inputs); - } - /** * Builds an {@link AudioSummary} operation * @@ -68,8 +33,8 @@ public MergeSummary mergeSummary(Iterable> inputs) { * @return a new instance of AudioSummary * @see org.tensorflow.op.summary.AudioSummary */ - public AudioSummary audioSummary(Operand tag, Operand tensor, - Operand sampleRate, AudioSummary.Options... options) { + public AudioSummary audioSummary(Operand tag, Operand tensor, + Operand sampleRate, AudioSummary.Options... options) { return AudioSummary.create(scope, tag, tensor, sampleRate, options); } @@ -82,11 +47,24 @@ public AudioSummary audioSummary(Operand tag, Operand tensor, * @return a new instance of ImageSummary * @see org.tensorflow.op.summary.ImageSummary */ - public ImageSummary imageSummary(Operand tag, Operand tensor, + public ImageSummary imageSummary(Operand tag, Operand tensor, ImageSummary.Options... options) { return ImageSummary.create(scope, tag, tensor, options); } + /** + * Builds an {@link HistogramSummary} operation + * + * @param tag Scalar. Tag to use for the `Summary.Value`. + * @param values Any shape. Values to use to build the histogram. + * @return a new instance of HistogramSummary + * @see org.tensorflow.op.summary.HistogramSummary + */ + public HistogramSummary histogramSummary(Operand tag, + Operand values) { + return HistogramSummary.create(scope, tag, values); + } + /** * Builds an {@link ScalarSummary} operation * @@ -95,7 +73,32 @@ public ImageSummary imageSummary(Operand tag, Operand * @return a new instance of ScalarSummary * @see org.tensorflow.op.summary.ScalarSummary */ - public ScalarSummary scalarSummary(Operand tags, Operand values) { + public ScalarSummary scalarSummary(Operand tags, Operand values) { return ScalarSummary.create(scope, tags, values); } + + /** + * Builds an {@link TensorSummary} operation + * + * @param tag A string attached to this summary. Used for organization in TensorBoard. + * @param tensor A tensor to serialize. + * @param serializedSummaryMetadata A serialized SummaryMetadata proto. Contains plugin + * @return a new instance of TensorSummary + * @see org.tensorflow.op.summary.TensorSummary + */ + public TensorSummary tensorSummary(Operand tag, Operand tensor, + Operand serializedSummaryMetadata) { + return TensorSummary.create(scope, tag, tensor, serializedSummaryMetadata); + } + + /** + * Builds an {@link MergeSummary} operation + * + * @param inputs Can be of any shape. Each must contain serialized `Summary` protocol + * @return a new instance of MergeSummary + * @see org.tensorflow.op.summary.MergeSummary + */ + public MergeSummary mergeSummary(Iterable> inputs) { + return MergeSummary.create(scope, inputs); + } } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/TrainOps.java b/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/TrainOps.java index 1e4d2016f68..0c93a6e698b 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/TrainOps.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/TrainOps.java @@ -1,8 +1,9 @@ package org.tensorflow.op; import java.util.List; +import org.tensorflow.DataType; import org.tensorflow.Operand; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.train.AccumulatorApplyGradient; import org.tensorflow.op.train.AccumulatorNumAccumulated; import org.tensorflow.op.train.AccumulatorSetGlobalStep; @@ -63,6 +64,11 @@ import org.tensorflow.op.train.SparseApplyProximalGradientDescent; import org.tensorflow.op.train.SparseApplyRmsProp; import org.tensorflow.op.train.TileGrad; +import org.tensorflow.types.TFloat; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.TInt64; +import org.tensorflow.types.TString; +import org.tensorflow.types.family.TNumber; /** * An API for building {@code train} operations as {@link Op Op}s @@ -77,30 +83,7 @@ public final class TrainOps { } /** - * Builds an {@link ResourceSparseApplyAdagradDa} operation - * - * @param var Should be from a Variable(). - * @param gradientAccumulator Should be from a Variable(). - * @param gradientSquaredAccumulator Should be from a Variable(). - * @param grad The gradient. - * @param indices A vector of indices into the first dimension of var and accum. - * @param lr Learning rate. Must be a scalar. - * @param l1 L1 regularization. Must be a scalar. - * @param l2 L2 regularization. Must be a scalar. - * @param globalStep Training step number. Must be a scalar. - * @param options carries optional attributes values - * @return a new instance of ResourceSparseApplyAdagradDa - * @see org.tensorflow.op.train.ResourceSparseApplyAdagradDa - */ - public ResourceSparseApplyAdagradDa resourceSparseApplyAdagradDa( - Operand var, Operand gradientAccumulator, Operand gradientSquaredAccumulator, - Operand grad, Operand indices, Operand lr, Operand l1, Operand l2, - Operand globalStep, ResourceSparseApplyAdagradDa.Options... options) { - return ResourceSparseApplyAdagradDa.create(scope, var, gradientAccumulator, gradientSquaredAccumulator, grad, indices, lr, l1, l2, globalStep, options); - } - - /** - * Builds an {@link ResourceSparseApplyAdagrad} operation + * Builds an {@link SparseApplyAdagrad} operation * * @param var Should be from a Variable(). * @param accum Should be from a Variable(). @@ -108,13 +91,13 @@ public ResourceSparseApplyAdagradDa resourceSparseApplyAda * @param grad The gradient. * @param indices A vector of indices into the first dimension of var and accum. * @param options carries optional attributes values - * @return a new instance of ResourceSparseApplyAdagrad - * @see org.tensorflow.op.train.ResourceSparseApplyAdagrad + * @return a new instance of SparseApplyAdagrad + * @see org.tensorflow.op.train.SparseApplyAdagrad */ - public ResourceSparseApplyAdagrad resourceSparseApplyAdagrad(Operand var, - Operand accum, Operand lr, Operand grad, Operand indices, - ResourceSparseApplyAdagrad.Options... options) { - return ResourceSparseApplyAdagrad.create(scope, var, accum, lr, grad, indices, options); + public SparseApplyAdagrad sparseApplyAdagrad(Operand var, + Operand accum, Operand lr, Operand grad, Operand indices, + SparseApplyAdagrad.Options... options) { + return SparseApplyAdagrad.create(scope, var, accum, lr, grad, indices, options); } /** @@ -135,17 +118,25 @@ public ApplyMomentum applyMomentum(Operand var, Operand accum, Oper } /** - * Builds an {@link AccumulatorApplyGradient} operation + * Builds an {@link ResourceSparseApplyAdadelta} operation * - * @param handle The handle to a accumulator. - * @param localStep The local_step value at which the gradient was computed. - * @param gradient A tensor of the gradient to be accumulated. - * @return a new instance of AccumulatorApplyGradient - * @see org.tensorflow.op.train.AccumulatorApplyGradient + * @param var + * @param accum Should be from a Variable(). + * @param accumUpdate : Should be from a Variable(). + * @param lr Learning rate. Must be a scalar. + * @param rho Decay factor. Must be a scalar. + * @param epsilon Constant factor. Must be a scalar. + * @param grad The gradient. + * @param indices A vector of indices into the first dimension of var and accum. + * @param options carries optional attributes values + * @return a new instance of ResourceSparseApplyAdadelta + * @see org.tensorflow.op.train.ResourceSparseApplyAdadelta */ - public AccumulatorApplyGradient accumulatorApplyGradient(Operand handle, - Operand localStep, Operand gradient) { - return AccumulatorApplyGradient.create(scope, handle, localStep, gradient); + public ResourceSparseApplyAdadelta resourceSparseApplyAdadelta( + Operand var, Operand accum, Operand accumUpdate, Operand lr, Operand rho, + Operand epsilon, Operand grad, Operand indices, + ResourceSparseApplyAdadelta.Options... options) { + return ResourceSparseApplyAdadelta.create(scope, var, accum, accumUpdate, lr, rho, epsilon, grad, indices, options); } /** @@ -169,23 +160,72 @@ public ApplyAddSign applyAddSign(Operand var, Operand m, Operand } /** - * Builds an {@link ResourceApplyAddSign} operation + * Builds an {@link TileGrad} operation + * + * @param input + * @param multiples + * @return a new instance of TileGrad + * @see org.tensorflow.op.train.TileGrad + */ + public TileGrad tileGrad(Operand input, Operand multiples) { + return TileGrad.create(scope, input, multiples); + } + + /** + * Builds an {@link SparseApplyMomentum} operation * * @param var Should be from a Variable(). - * @param m Should be from a Variable(). - * @param lr Scaling factor. Must be a scalar. - * @param alpha Must be a scalar. - * @param signDecay Must be a scalar. - * @param beta Must be a scalar. + * @param accum Should be from a Variable(). + * @param lr Learning rate. Must be a scalar. * @param grad The gradient. + * @param indices A vector of indices into the first dimension of var and accum. + * @param momentum Momentum. Must be a scalar. * @param options carries optional attributes values - * @return a new instance of ResourceApplyAddSign - * @see org.tensorflow.op.train.ResourceApplyAddSign + * @return a new instance of SparseApplyMomentum + * @see org.tensorflow.op.train.SparseApplyMomentum */ - public ResourceApplyAddSign resourceApplyAddSign(Operand var, Operand m, Operand lr, - Operand alpha, Operand signDecay, Operand beta, Operand grad, - ResourceApplyAddSign.Options... options) { - return ResourceApplyAddSign.create(scope, var, m, lr, alpha, signDecay, beta, grad, options); + public SparseApplyMomentum sparseApplyMomentum(Operand var, + Operand accum, Operand lr, Operand grad, Operand indices, Operand momentum, + SparseApplyMomentum.Options... options) { + return SparseApplyMomentum.create(scope, var, accum, lr, grad, indices, momentum, options); + } + + /** + * Builds an {@link AccumulatorApplyGradient} operation + * + * @param handle The handle to a accumulator. + * @param localStep The local_step value at which the gradient was computed. + * @param gradient A tensor of the gradient to be accumulated. + * @return a new instance of AccumulatorApplyGradient + * @see org.tensorflow.op.train.AccumulatorApplyGradient + */ + public AccumulatorApplyGradient accumulatorApplyGradient(Operand handle, + Operand localStep, Operand gradient) { + return AccumulatorApplyGradient.create(scope, handle, localStep, gradient); + } + + /** + * Builds an {@link ResourceSparseApplyFtrl} operation + * + * @param var Should be from a Variable(). + * @param accum Should be from a Variable(). + * @param linear Should be from a Variable(). + * @param grad The gradient. + * @param indices A vector of indices into the first dimension of var and accum. + * @param lr Scaling factor. Must be a scalar. + * @param l1 L1 regularization. Must be a scalar. + * @param l2 L2 shrinkage regulariation. Must be a scalar. + * @param l2Shrinkage + * @param lrPower Scaling factor. Must be a scalar. + * @param options carries optional attributes values + * @return a new instance of ResourceSparseApplyFtrl + * @see org.tensorflow.op.train.ResourceSparseApplyFtrl + */ + public ResourceSparseApplyFtrl resourceSparseApplyFtrl(Operand var, + Operand accum, Operand linear, Operand grad, Operand indices, Operand lr, + Operand l1, Operand l2, Operand l2Shrinkage, Operand lrPower, + ResourceSparseApplyFtrl.Options... options) { + return ResourceSparseApplyFtrl.create(scope, var, accum, linear, grad, indices, lr, l1, l2, l2Shrinkage, lrPower, options); } /** @@ -212,56 +252,49 @@ public ApplyAdam applyAdam(Operand var, Operand m, Operand v, } /** - * Builds an {@link SaveSlices} operation - * - * @param filename Must have a single element. The name of the file to which we write the - * @param tensorNames Shape `[N]`. The names of the tensors to be saved. - * @param shapesAndSlices Shape `[N]`. The shapes and slice specifications to use when - * @param data `N` tensors to save. - * @return a new instance of SaveSlices - * @see org.tensorflow.op.train.SaveSlices - */ - public SaveSlices saveSlices(Operand filename, Operand tensorNames, - Operand shapesAndSlices, Iterable> data) { - return SaveSlices.create(scope, filename, tensorNames, shapesAndSlices, data); - } - - /** - * Builds an {@link AccumulatorTakeGradient} operation + * Builds an {@link ResourceSparseApplyProximalGradientDescent} operation * - * @param handle The handle to an accumulator. - * @param numRequired Number of gradients required before we return an aggregate. - * @param dtype The data type of accumulated gradients. Needs to correspond to the type - * @return a new instance of AccumulatorTakeGradient - * @see org.tensorflow.op.train.AccumulatorTakeGradient + * @param var Should be from a Variable(). + * @param alpha Scaling factor. Must be a scalar. + * @param l1 L1 regularization. Must be a scalar. + * @param l2 L2 regularization. Must be a scalar. + * @param grad The gradient. + * @param indices A vector of indices into the first dimension of var and accum. + * @param options carries optional attributes values + * @return a new instance of ResourceSparseApplyProximalGradientDescent + * @see org.tensorflow.op.train.ResourceSparseApplyProximalGradientDescent */ - public AccumulatorTakeGradient accumulatorTakeGradient(Operand handle, - Operand numRequired, Class dtype) { - return AccumulatorTakeGradient.create(scope, handle, numRequired, dtype); + public ResourceSparseApplyProximalGradientDescent resourceSparseApplyProximalGradientDescent( + Operand var, Operand alpha, Operand l1, Operand l2, Operand grad, + Operand indices, ResourceSparseApplyProximalGradientDescent.Options... options) { + return ResourceSparseApplyProximalGradientDescent.create(scope, var, alpha, l1, l2, grad, indices, options); } /** - * Builds an {@link NegTrain} operation + * Builds an {@link ResourceApplyAddSign} operation * - * @param wIn input word embedding. - * @param wOut output word embedding. - * @param examples A vector of word ids. - * @param labels A vector of word ids. - * @param lr - * @param vocabCount Count of words in the vocabulary. - * @param numNegativeSamples Number of negative samples per example. - * @return a new instance of NegTrain - * @see org.tensorflow.op.train.NegTrain + * @param var Should be from a Variable(). + * @param m Should be from a Variable(). + * @param lr Scaling factor. Must be a scalar. + * @param alpha Must be a scalar. + * @param signDecay Must be a scalar. + * @param beta Must be a scalar. + * @param grad The gradient. + * @param options carries optional attributes values + * @return a new instance of ResourceApplyAddSign + * @see org.tensorflow.op.train.ResourceApplyAddSign */ - public NegTrain negTrain(Operand wIn, Operand wOut, Operand examples, - Operand labels, Operand lr, List vocabCount, Long numNegativeSamples) { - return NegTrain.create(scope, wIn, wOut, examples, labels, lr, vocabCount, numNegativeSamples); + public ResourceApplyAddSign resourceApplyAddSign(Operand var, Operand m, Operand lr, + Operand alpha, Operand signDecay, Operand beta, Operand grad, + ResourceApplyAddSign.Options... options) { + return ResourceApplyAddSign.create(scope, var, m, lr, alpha, signDecay, beta, grad, options); } /** - * Builds an {@link ResourceSparseApplyRmsProp} operation + * Builds an {@link SparseApplyCenteredRmsProp} operation * * @param var Should be from a Variable(). + * @param mg Should be from a Variable(). * @param ms Should be from a Variable(). * @param mom Should be from a Variable(). * @param lr Scaling factor. Must be a scalar. @@ -271,34 +304,14 @@ public NegTrain negTrain(Operand wIn, Operand wOut, Operand ResourceSparseApplyRmsProp resourceSparseApplyRmsProp(Operand var, - Operand ms, Operand mom, Operand lr, Operand rho, Operand momentum, - Operand epsilon, Operand grad, Operand indices, - ResourceSparseApplyRmsProp.Options... options) { - return ResourceSparseApplyRmsProp.create(scope, var, ms, mom, lr, rho, momentum, epsilon, grad, indices, options); - } - - /** - * Builds an {@link SparseApplyProximalAdagrad} operation - * - * @param var Should be from a Variable(). - * @param accum Should be from a Variable(). - * @param lr Learning rate. Must be a scalar. - * @param l1 L1 regularization. Must be a scalar. - * @param l2 L2 regularization. Must be a scalar. - * @param grad The gradient. - * @param indices A vector of indices into the first dimension of var and accum. - * @param options carries optional attributes values - * @return a new instance of SparseApplyProximalAdagrad - * @see org.tensorflow.op.train.SparseApplyProximalAdagrad + * @return a new instance of SparseApplyCenteredRmsProp + * @see org.tensorflow.op.train.SparseApplyCenteredRmsProp */ - public SparseApplyProximalAdagrad sparseApplyProximalAdagrad( - Operand var, Operand accum, Operand lr, Operand l1, Operand l2, - Operand grad, Operand indices, SparseApplyProximalAdagrad.Options... options) { - return SparseApplyProximalAdagrad.create(scope, var, accum, lr, l1, l2, grad, indices, options); + public SparseApplyCenteredRmsProp sparseApplyCenteredRmsProp( + Operand var, Operand mg, Operand ms, Operand mom, Operand lr, Operand rho, + Operand momentum, Operand epsilon, Operand grad, Operand indices, + SparseApplyCenteredRmsProp.Options... options) { + return SparseApplyCenteredRmsProp.create(scope, var, mg, ms, mom, lr, rho, momentum, epsilon, grad, indices, options); } /** @@ -339,25 +352,6 @@ public ResourceApplyFtrl resourceApplyFtrl(Operand var, Operand accum, return ResourceApplyFtrl.create(scope, var, accum, linear, grad, lr, l1, l2, l2Shrinkage, lrPower, options); } - /** - * Builds an {@link SparseApplyMomentum} operation - * - * @param var Should be from a Variable(). - * @param accum Should be from a Variable(). - * @param lr Learning rate. Must be a scalar. - * @param grad The gradient. - * @param indices A vector of indices into the first dimension of var and accum. - * @param momentum Momentum. Must be a scalar. - * @param options carries optional attributes values - * @return a new instance of SparseApplyMomentum - * @see org.tensorflow.op.train.SparseApplyMomentum - */ - public SparseApplyMomentum sparseApplyMomentum(Operand var, - Operand accum, Operand lr, Operand grad, Operand indices, Operand momentum, - SparseApplyMomentum.Options... options) { - return SparseApplyMomentum.create(scope, var, accum, lr, grad, indices, momentum, options); - } - /** * Builds an {@link ApplyAdagrad} operation * @@ -415,48 +409,27 @@ public ApplyProximalAdagrad applyProximalAdagrad(Operand var, Operand< } /** - * Builds an {@link Save} operation + * Builds an {@link GenerateVocabRemapping} operation * - * @param prefix Must have a single element. The prefix of the V2 checkpoint to which we - * @param tensorNames shape {N}. The names of the tensors to be saved. - * @param shapeAndSlices shape {N}. The slice specs of the tensors to be saved. - * @param tensors `N` tensors to save. - * @return a new instance of Save - * @see org.tensorflow.op.train.Save + * @param newVocabFile Path to the new vocab file. + * @param oldVocabFile Path to the old vocab file. + * @param newVocabOffset How many entries into the new vocab file to start reading. + * @param numNewVocab Number of entries in the new vocab file to remap. + * @param options carries optional attributes values + * @return a new instance of GenerateVocabRemapping + * @see org.tensorflow.op.train.GenerateVocabRemapping */ - public Save save(Operand prefix, Operand tensorNames, - Operand shapeAndSlices, Iterable> tensors) { - return Save.create(scope, prefix, tensorNames, shapeAndSlices, tensors); + public GenerateVocabRemapping generateVocabRemapping(Operand newVocabFile, + Operand oldVocabFile, Long newVocabOffset, Long numNewVocab, + GenerateVocabRemapping.Options... options) { + return GenerateVocabRemapping.create(scope, newVocabFile, oldVocabFile, newVocabOffset, numNewVocab, options); } /** - * Builds an {@link SparseApplyRmsProp} operation + * Builds an {@link ApplyPowerSign} operation * * @param var Should be from a Variable(). - * @param ms Should be from a Variable(). - * @param mom Should be from a Variable(). - * @param lr Scaling factor. Must be a scalar. - * @param rho Decay rate. Must be a scalar. - * @param momentum - * @param epsilon Ridge term. Must be a scalar. - * @param grad The gradient. - * @param indices A vector of indices into the first dimension of var, ms and mom. - * @param options carries optional attributes values - * @return a new instance of SparseApplyRmsProp - * @see org.tensorflow.op.train.SparseApplyRmsProp - */ - public SparseApplyRmsProp sparseApplyRmsProp(Operand var, - Operand ms, Operand mom, Operand lr, Operand rho, Operand momentum, - Operand epsilon, Operand grad, Operand indices, - SparseApplyRmsProp.Options... options) { - return SparseApplyRmsProp.create(scope, var, ms, mom, lr, rho, momentum, epsilon, grad, indices, options); - } - - /** - * Builds an {@link ApplyPowerSign} operation - * - * @param var Should be from a Variable(). - * @param m Should be from a Variable(). + * @param m Should be from a Variable(). * @param lr Scaling factor. Must be a scalar. * @param logbase Must be a scalar. * @param signDecay Must be a scalar. @@ -472,43 +445,6 @@ public ApplyPowerSign applyPowerSign(Operand var, Operand m, Operan return ApplyPowerSign.create(scope, var, m, lr, logbase, signDecay, beta, grad, options); } - /** - * Builds an {@link SparseApplyAdagrad} operation - * - * @param var Should be from a Variable(). - * @param accum Should be from a Variable(). - * @param lr Learning rate. Must be a scalar. - * @param grad The gradient. - * @param indices A vector of indices into the first dimension of var and accum. - * @param options carries optional attributes values - * @return a new instance of SparseApplyAdagrad - * @see org.tensorflow.op.train.SparseApplyAdagrad - */ - public SparseApplyAdagrad sparseApplyAdagrad(Operand var, - Operand accum, Operand lr, Operand grad, Operand indices, - SparseApplyAdagrad.Options... options) { - return SparseApplyAdagrad.create(scope, var, accum, lr, grad, indices, options); - } - - /** - * Builds an {@link SparseApplyProximalGradientDescent} operation - * - * @param var Should be from a Variable(). - * @param alpha Scaling factor. Must be a scalar. - * @param l1 L1 regularization. Must be a scalar. - * @param l2 L2 regularization. Must be a scalar. - * @param grad The gradient. - * @param indices A vector of indices into the first dimension of var and accum. - * @param options carries optional attributes values - * @return a new instance of SparseApplyProximalGradientDescent - * @see org.tensorflow.op.train.SparseApplyProximalGradientDescent - */ - public SparseApplyProximalGradientDescent sparseApplyProximalGradientDescent( - Operand var, Operand alpha, Operand l1, Operand l2, Operand grad, - Operand indices, SparseApplyProximalGradientDescent.Options... options) { - return SparseApplyProximalGradientDescent.create(scope, var, alpha, l1, l2, grad, indices, options); - } - /** * Builds an {@link ApplyAdadelta} operation * @@ -530,53 +466,52 @@ public ApplyAdadelta applyAdadelta(Operand var, Operand accum, } /** - * Builds an {@link SdcaShrinkL1} operation + * Builds an {@link ResourceSparseApplyMomentum} operation * - * @param weights a list of vectors where each value is the weight associated with a - * @param l1 Symmetric l1 regularization strength. - * @param l2 Symmetric l2 regularization strength. Should be a positive float. - * @return a new instance of SdcaShrinkL1 - * @see org.tensorflow.op.train.SdcaShrinkL1 + * @param var Should be from a Variable(). + * @param accum Should be from a Variable(). + * @param lr Learning rate. Must be a scalar. + * @param grad The gradient. + * @param indices A vector of indices into the first dimension of var and accum. + * @param momentum Momentum. Must be a scalar. + * @param options carries optional attributes values + * @return a new instance of ResourceSparseApplyMomentum + * @see org.tensorflow.op.train.ResourceSparseApplyMomentum */ - public SdcaShrinkL1 sdcaShrinkL1(Iterable> weights, Float l1, Float l2) { - return SdcaShrinkL1.create(scope, weights, l1, l2); + public ResourceSparseApplyMomentum resourceSparseApplyMomentum( + Operand var, Operand accum, Operand lr, Operand grad, Operand indices, + Operand momentum, ResourceSparseApplyMomentum.Options... options) { + return ResourceSparseApplyMomentum.create(scope, var, accum, lr, grad, indices, momentum, options); } /** - * Builds an {@link Restore} operation + * Builds an {@link Save} operation * - * @param prefix Must have a single element. The prefix of a V2 checkpoint. - * @param tensorNames shape {N}. The names of the tensors to be restored. - * @param shapeAndSlices shape {N}. The slice specs of the tensors to be restored. - * @param dtypes shape {N}. The list of expected dtype for the tensors. Must match - * @return a new instance of Restore - * @see org.tensorflow.op.train.Restore + * @param prefix Must have a single element. The prefix of the V2 checkpoint to which we + * @param tensorNames shape {N}. The names of the tensors to be saved. + * @param shapeAndSlices shape {N}. The slice specs of the tensors to be saved. + * @param tensors `N` tensors to save. + * @return a new instance of Save + * @see org.tensorflow.op.train.Save */ - public Restore restore(Operand prefix, Operand tensorNames, - Operand shapeAndSlices, List> dtypes) { - return Restore.create(scope, prefix, tensorNames, shapeAndSlices, dtypes); + public Save save(Operand prefix, Operand tensorNames, + Operand shapeAndSlices, Iterable> tensors) { + return Save.create(scope, prefix, tensorNames, shapeAndSlices, tensors); } /** - * Builds an {@link ResourceSparseApplyAdadelta} operation + * Builds an {@link SaveSlices} operation * - * @param var - * @param accum Should be from a Variable(). - * @param accumUpdate : Should be from a Variable(). - * @param lr Learning rate. Must be a scalar. - * @param rho Decay factor. Must be a scalar. - * @param epsilon Constant factor. Must be a scalar. - * @param grad The gradient. - * @param indices A vector of indices into the first dimension of var and accum. - * @param options carries optional attributes values - * @return a new instance of ResourceSparseApplyAdadelta - * @see org.tensorflow.op.train.ResourceSparseApplyAdadelta + * @param filename Must have a single element. The name of the file to which we write the + * @param tensorNames Shape `[N]`. The names of the tensors to be saved. + * @param shapesAndSlices Shape `[N]`. The shapes and slice specifications to use when + * @param data `N` tensors to save. + * @return a new instance of SaveSlices + * @see org.tensorflow.op.train.SaveSlices */ - public ResourceSparseApplyAdadelta resourceSparseApplyAdadelta( - Operand var, Operand accum, Operand accumUpdate, Operand lr, Operand rho, - Operand epsilon, Operand grad, Operand indices, - ResourceSparseApplyAdadelta.Options... options) { - return ResourceSparseApplyAdadelta.create(scope, var, accum, accumUpdate, lr, rho, epsilon, grad, indices, options); + public SaveSlices saveSlices(Operand filename, Operand tensorNames, + Operand shapesAndSlices, Iterable> data) { + return SaveSlices.create(scope, filename, tensorNames, shapesAndSlices, data); } /** @@ -603,63 +538,70 @@ public ResourceApplyCenteredRmsProp resourceApplyCenteredRmsProp(Operand } /** - * Builds an {@link SparseApplyAdagradDa} operation + * Builds an {@link SparseApplyAdadelta} operation * - * @param var Should be from a Variable(). - * @param gradientAccumulator Should be from a Variable(). - * @param gradientSquaredAccumulator Should be from a Variable(). + * @param var + * @param accum Should be from a Variable(). + * @param accumUpdate : Should be from a Variable(). + * @param lr Learning rate. Must be a scalar. + * @param rho Decay factor. Must be a scalar. + * @param epsilon Constant factor. Must be a scalar. * @param grad The gradient. * @param indices A vector of indices into the first dimension of var and accum. - * @param lr Learning rate. Must be a scalar. - * @param l1 L1 regularization. Must be a scalar. - * @param l2 L2 regularization. Must be a scalar. - * @param globalStep Training step number. Must be a scalar. * @param options carries optional attributes values - * @return a new instance of SparseApplyAdagradDa - * @see org.tensorflow.op.train.SparseApplyAdagradDa + * @return a new instance of SparseApplyAdadelta + * @see org.tensorflow.op.train.SparseApplyAdadelta */ - public SparseApplyAdagradDa sparseApplyAdagradDa(Operand var, - Operand gradientAccumulator, Operand gradientSquaredAccumulator, Operand grad, - Operand indices, Operand lr, Operand l1, Operand l2, Operand globalStep, - SparseApplyAdagradDa.Options... options) { - return SparseApplyAdagradDa.create(scope, var, gradientAccumulator, gradientSquaredAccumulator, grad, indices, lr, l1, l2, globalStep, options); + public SparseApplyAdadelta sparseApplyAdadelta(Operand var, + Operand accum, Operand accumUpdate, Operand lr, Operand rho, Operand epsilon, + Operand grad, Operand indices, SparseApplyAdadelta.Options... options) { + return SparseApplyAdadelta.create(scope, var, accum, accumUpdate, lr, rho, epsilon, grad, indices, options); } /** - * Builds an {@link AccumulatorSetGlobalStep} operation + * Builds an {@link Restore} operation * - * @param handle The handle to an accumulator. - * @param newGlobalStep The new global_step value to set. - * @return a new instance of AccumulatorSetGlobalStep - * @see org.tensorflow.op.train.AccumulatorSetGlobalStep + * @param prefix Must have a single element. The prefix of a V2 checkpoint. + * @param tensorNames shape {N}. The names of the tensors to be restored. + * @param shapeAndSlices shape {N}. The slice specs of the tensors to be restored. + * @param dtypes shape {N}. The list of expected dtype for the tensors. Must match + * @return a new instance of Restore + * @see org.tensorflow.op.train.Restore */ - public AccumulatorSetGlobalStep accumulatorSetGlobalStep(Operand handle, - Operand newGlobalStep) { - return AccumulatorSetGlobalStep.create(scope, handle, newGlobalStep); + public Restore restore(Operand prefix, Operand tensorNames, + Operand shapeAndSlices, List> dtypes) { + return Restore.create(scope, prefix, tensorNames, shapeAndSlices, dtypes); } /** - * Builds an {@link ResourceSparseApplyFtrl} operation + * Builds an {@link ResourceApplyMomentum} operation * * @param var Should be from a Variable(). * @param accum Should be from a Variable(). - * @param linear Should be from a Variable(). - * @param grad The gradient. - * @param indices A vector of indices into the first dimension of var and accum. * @param lr Scaling factor. Must be a scalar. - * @param l1 L1 regularization. Must be a scalar. - * @param l2 L2 shrinkage regulariation. Must be a scalar. - * @param l2Shrinkage - * @param lrPower Scaling factor. Must be a scalar. + * @param grad The gradient. + * @param momentum Momentum. Must be a scalar. * @param options carries optional attributes values - * @return a new instance of ResourceSparseApplyFtrl - * @see org.tensorflow.op.train.ResourceSparseApplyFtrl + * @return a new instance of ResourceApplyMomentum + * @see org.tensorflow.op.train.ResourceApplyMomentum */ - public ResourceSparseApplyFtrl resourceSparseApplyFtrl(Operand var, - Operand accum, Operand linear, Operand grad, Operand indices, Operand lr, - Operand l1, Operand l2, Operand l2Shrinkage, Operand lrPower, - ResourceSparseApplyFtrl.Options... options) { - return ResourceSparseApplyFtrl.create(scope, var, accum, linear, grad, indices, lr, l1, l2, l2Shrinkage, lrPower, options); + public ResourceApplyMomentum resourceApplyMomentum(Operand var, Operand accum, + Operand lr, Operand grad, Operand momentum, + ResourceApplyMomentum.Options... options) { + return ResourceApplyMomentum.create(scope, var, accum, lr, grad, momentum, options); + } + + /** + * Builds an {@link AccumulatorSetGlobalStep} operation + * + * @param handle The handle to an accumulator. + * @param newGlobalStep The new global_step value to set. + * @return a new instance of AccumulatorSetGlobalStep + * @see org.tensorflow.op.train.AccumulatorSetGlobalStep + */ + public AccumulatorSetGlobalStep accumulatorSetGlobalStep(Operand handle, + Operand newGlobalStep) { + return AccumulatorSetGlobalStep.create(scope, handle, newGlobalStep); } /** @@ -685,56 +627,28 @@ public ApplyFtrl applyFtrl(Operand var, Operand accum, Operand l } /** - * Builds an {@link ResourceApplyMomentum} operation - * - * @param var Should be from a Variable(). - * @param accum Should be from a Variable(). - * @param lr Scaling factor. Must be a scalar. - * @param grad The gradient. - * @param momentum Momentum. Must be a scalar. - * @param options carries optional attributes values - * @return a new instance of ResourceApplyMomentum - * @see org.tensorflow.op.train.ResourceApplyMomentum - */ - public ResourceApplyMomentum resourceApplyMomentum(Operand var, Operand accum, - Operand lr, Operand grad, Operand momentum, - ResourceApplyMomentum.Options... options) { - return ResourceApplyMomentum.create(scope, var, accum, lr, grad, momentum, options); - } - - /** - * Builds an {@link RestoreSlice} operation + * Builds an {@link AccumulatorNumAccumulated} operation * - * @param filePattern Must have a single element. The pattern of the files from - * @param tensorName Must have a single element. The name of the tensor to be - * @param shapeAndSlice Scalar. The shapes and slice specifications to use when - * @param dt The type of the tensor to be restored. - * @param options carries optional attributes values - * @return a new instance of RestoreSlice - * @see org.tensorflow.op.train.RestoreSlice + * @param handle The handle to an accumulator. + * @return a new instance of AccumulatorNumAccumulated + * @see org.tensorflow.op.train.AccumulatorNumAccumulated */ - public RestoreSlice restoreSlice(Operand filePattern, Operand tensorName, - Operand shapeAndSlice, Class dt, RestoreSlice.Options... options) { - return RestoreSlice.create(scope, filePattern, tensorName, shapeAndSlice, dt, options); + public AccumulatorNumAccumulated accumulatorNumAccumulated(Operand handle) { + return AccumulatorNumAccumulated.create(scope, handle); } /** - * Builds an {@link ResourceSparseApplyMomentum} operation + * Builds an {@link MergeV2Checkpoints} operation * - * @param var Should be from a Variable(). - * @param accum Should be from a Variable(). - * @param lr Learning rate. Must be a scalar. - * @param grad The gradient. - * @param indices A vector of indices into the first dimension of var and accum. - * @param momentum Momentum. Must be a scalar. + * @param checkpointPrefixes prefixes of V2 checkpoints to merge. + * @param destinationPrefix scalar. The desired final prefix. Allowed to be the same * @param options carries optional attributes values - * @return a new instance of ResourceSparseApplyMomentum - * @see org.tensorflow.op.train.ResourceSparseApplyMomentum + * @return a new instance of MergeV2Checkpoints + * @see org.tensorflow.op.train.MergeV2Checkpoints */ - public ResourceSparseApplyMomentum resourceSparseApplyMomentum( - Operand var, Operand accum, Operand lr, Operand grad, Operand indices, - Operand momentum, ResourceSparseApplyMomentum.Options... options) { - return ResourceSparseApplyMomentum.create(scope, var, accum, lr, grad, indices, momentum, options); + public MergeV2Checkpoints mergeV2Checkpoints(Operand checkpointPrefixes, + Operand destinationPrefix, MergeV2Checkpoints.Options... options) { + return MergeV2Checkpoints.create(scope, checkpointPrefixes, destinationPrefix, options); } /** @@ -753,14 +667,23 @@ public ResourceApplyGradientDescent resourceApplyGradientDescent(Operand } /** - * Builds an {@link AccumulatorNumAccumulated} operation + * Builds an {@link ResourceApplyAdadelta} operation * - * @param handle The handle to an accumulator. - * @return a new instance of AccumulatorNumAccumulated - * @see org.tensorflow.op.train.AccumulatorNumAccumulated + * @param var Should be from a Variable(). + * @param accum Should be from a Variable(). + * @param accumUpdate Should be from a Variable(). + * @param lr Scaling factor. Must be a scalar. + * @param rho Decay factor. Must be a scalar. + * @param epsilon Constant factor. Must be a scalar. + * @param grad The gradient. + * @param options carries optional attributes values + * @return a new instance of ResourceApplyAdadelta + * @see org.tensorflow.op.train.ResourceApplyAdadelta */ - public AccumulatorNumAccumulated accumulatorNumAccumulated(Operand handle) { - return AccumulatorNumAccumulated.create(scope, handle); + public ResourceApplyAdadelta resourceApplyAdadelta(Operand var, Operand accum, + Operand accumUpdate, Operand lr, Operand rho, Operand epsilon, Operand grad, + ResourceApplyAdadelta.Options... options) { + return ResourceApplyAdadelta.create(scope, var, accum, accumUpdate, lr, rho, epsilon, grad, options); } /** @@ -777,23 +700,32 @@ public PreventGradient preventGradient(Operand input, } /** - * Builds an {@link ResourceApplyAdadelta} operation + * Builds an {@link ApplyGradientDescent} operation * * @param var Should be from a Variable(). - * @param accum Should be from a Variable(). - * @param accumUpdate Should be from a Variable(). - * @param lr Scaling factor. Must be a scalar. - * @param rho Decay factor. Must be a scalar. - * @param epsilon Constant factor. Must be a scalar. - * @param grad The gradient. + * @param alpha Scaling factor. Must be a scalar. + * @param delta The change. * @param options carries optional attributes values - * @return a new instance of ResourceApplyAdadelta - * @see org.tensorflow.op.train.ResourceApplyAdadelta + * @return a new instance of ApplyGradientDescent + * @see org.tensorflow.op.train.ApplyGradientDescent */ - public ResourceApplyAdadelta resourceApplyAdadelta(Operand var, Operand accum, - Operand accumUpdate, Operand lr, Operand rho, Operand epsilon, Operand grad, - ResourceApplyAdadelta.Options... options) { - return ResourceApplyAdadelta.create(scope, var, accum, accumUpdate, lr, rho, epsilon, grad, options); + public ApplyGradientDescent applyGradientDescent(Operand var, Operand alpha, + Operand delta, ApplyGradientDescent.Options... options) { + return ApplyGradientDescent.create(scope, var, alpha, delta, options); + } + + /** + * Builds an {@link AccumulatorTakeGradient} operation + * + * @param handle The handle to an accumulator. + * @param numRequired Number of gradients required before we return an aggregate. + * @param dtype The data type of accumulated gradients. Needs to correspond to the type + * @return a new instance of AccumulatorTakeGradient + * @see org.tensorflow.op.train.AccumulatorTakeGradient + */ + public AccumulatorTakeGradient accumulatorTakeGradient(Operand handle, + Operand numRequired, DataType dtype) { + return AccumulatorTakeGradient.create(scope, handle, numRequired, dtype); } /** @@ -813,24 +745,32 @@ public ResourceApplyAdadelta resourceApplyAdadelta(Operand var, Operand ResourceApplyAdagradDa resourceApplyAdagradDa(Operand var, Operand gradientAccumulator, Operand gradientSquaredAccumulator, Operand grad, - Operand lr, Operand l1, Operand l2, Operand globalStep, + Operand lr, Operand l1, Operand l2, Operand globalStep, ResourceApplyAdagradDa.Options... options) { return ResourceApplyAdagradDa.create(scope, var, gradientAccumulator, gradientSquaredAccumulator, grad, lr, l1, l2, globalStep, options); } /** - * Builds an {@link ApplyGradientDescent} operation + * Builds an {@link ResourceApplyAdam} operation * * @param var Should be from a Variable(). - * @param alpha Scaling factor. Must be a scalar. - * @param delta The change. + * @param m Should be from a Variable(). + * @param v Should be from a Variable(). + * @param beta1Power Must be a scalar. + * @param beta2Power Must be a scalar. + * @param lr Scaling factor. Must be a scalar. + * @param beta1 Momentum factor. Must be a scalar. + * @param beta2 Momentum factor. Must be a scalar. + * @param epsilon Ridge term. Must be a scalar. + * @param grad The gradient. * @param options carries optional attributes values - * @return a new instance of ApplyGradientDescent - * @see org.tensorflow.op.train.ApplyGradientDescent + * @return a new instance of ResourceApplyAdam + * @see org.tensorflow.op.train.ResourceApplyAdam */ - public ApplyGradientDescent applyGradientDescent(Operand var, Operand alpha, - Operand delta, ApplyGradientDescent.Options... options) { - return ApplyGradientDescent.create(scope, var, alpha, delta, options); + public ResourceApplyAdam resourceApplyAdam(Operand var, Operand m, Operand v, + Operand beta1Power, Operand beta2Power, Operand lr, Operand beta1, + Operand beta2, Operand epsilon, Operand grad, ResourceApplyAdam.Options... options) { + return ResourceApplyAdam.create(scope, var, m, v, beta1Power, beta2Power, lr, beta1, beta2, epsilon, grad, options); } /** @@ -845,48 +785,108 @@ public ApplyGradientDescent applyGradientDescent(Operand var, Operand< * @return a new instance of ResourceApplyProximalGradientDescent * @see org.tensorflow.op.train.ResourceApplyProximalGradientDescent */ - public ResourceApplyProximalGradientDescent resourceApplyProximalGradientDescent( - Operand var, Operand alpha, Operand l1, Operand l2, Operand delta, - ResourceApplyProximalGradientDescent.Options... options) { - return ResourceApplyProximalGradientDescent.create(scope, var, alpha, l1, l2, delta, options); + public ResourceApplyProximalGradientDescent resourceApplyProximalGradientDescent( + Operand var, Operand alpha, Operand l1, Operand l2, Operand delta, + ResourceApplyProximalGradientDescent.Options... options) { + return ResourceApplyProximalGradientDescent.create(scope, var, alpha, l1, l2, delta, options); + } + + /** + * Builds an {@link NegTrain} operation + * + * @param wIn input word embedding. + * @param wOut output word embedding. + * @param examples A vector of word ids. + * @param labels A vector of word ids. + * @param lr + * @param vocabCount Count of words in the vocabulary. + * @param numNegativeSamples Number of negative samples per example. + * @return a new instance of NegTrain + * @see org.tensorflow.op.train.NegTrain + */ + public NegTrain negTrain(Operand wIn, Operand wOut, Operand examples, + Operand labels, Operand lr, List vocabCount, Long numNegativeSamples) { + return NegTrain.create(scope, wIn, wOut, examples, labels, lr, vocabCount, numNegativeSamples); + } + + /** + * Builds an {@link SdcaShrinkL1} operation + * + * @param weights a list of vectors where each value is the weight associated with a + * @param l1 Symmetric l1 regularization strength. + * @param l2 Symmetric l2 regularization strength. Should be a positive float. + * @return a new instance of SdcaShrinkL1 + * @see org.tensorflow.op.train.SdcaShrinkL1 + */ + public SdcaShrinkL1 sdcaShrinkL1(Iterable> weights, Float l1, Float l2) { + return SdcaShrinkL1.create(scope, weights, l1, l2); + } + + /** + * Builds an {@link SparseApplyRmsProp} operation + * + * @param var Should be from a Variable(). + * @param ms Should be from a Variable(). + * @param mom Should be from a Variable(). + * @param lr Scaling factor. Must be a scalar. + * @param rho Decay rate. Must be a scalar. + * @param momentum + * @param epsilon Ridge term. Must be a scalar. + * @param grad The gradient. + * @param indices A vector of indices into the first dimension of var, ms and mom. + * @param options carries optional attributes values + * @return a new instance of SparseApplyRmsProp + * @see org.tensorflow.op.train.SparseApplyRmsProp + */ + public SparseApplyRmsProp sparseApplyRmsProp(Operand var, + Operand ms, Operand mom, Operand lr, Operand rho, Operand momentum, + Operand epsilon, Operand grad, Operand indices, + SparseApplyRmsProp.Options... options) { + return SparseApplyRmsProp.create(scope, var, ms, mom, lr, rho, momentum, epsilon, grad, indices, options); } /** - * Builds an {@link ResourceApplyAdam} operation + * Builds an {@link ResourceSparseApplyCenteredRmsProp} operation * * @param var Should be from a Variable(). - * @param m Should be from a Variable(). - * @param v Should be from a Variable(). - * @param beta1Power Must be a scalar. - * @param beta2Power Must be a scalar. + * @param mg Should be from a Variable(). + * @param ms Should be from a Variable(). + * @param mom Should be from a Variable(). * @param lr Scaling factor. Must be a scalar. - * @param beta1 Momentum factor. Must be a scalar. - * @param beta2 Momentum factor. Must be a scalar. + * @param rho Decay rate. Must be a scalar. + * @param momentum * @param epsilon Ridge term. Must be a scalar. * @param grad The gradient. + * @param indices A vector of indices into the first dimension of var, ms and mom. * @param options carries optional attributes values - * @return a new instance of ResourceApplyAdam - * @see org.tensorflow.op.train.ResourceApplyAdam + * @return a new instance of ResourceSparseApplyCenteredRmsProp + * @see org.tensorflow.op.train.ResourceSparseApplyCenteredRmsProp */ - public ResourceApplyAdam resourceApplyAdam(Operand var, Operand m, Operand v, - Operand beta1Power, Operand beta2Power, Operand lr, Operand beta1, - Operand beta2, Operand epsilon, Operand grad, ResourceApplyAdam.Options... options) { - return ResourceApplyAdam.create(scope, var, m, v, beta1Power, beta2Power, lr, beta1, beta2, epsilon, grad, options); + public ResourceSparseApplyCenteredRmsProp resourceSparseApplyCenteredRmsProp( + Operand var, Operand mg, Operand ms, Operand mom, Operand lr, Operand rho, + Operand momentum, Operand epsilon, Operand grad, Operand indices, + ResourceSparseApplyCenteredRmsProp.Options... options) { + return ResourceSparseApplyCenteredRmsProp.create(scope, var, mg, ms, mom, lr, rho, momentum, epsilon, grad, indices, options); } /** - * Builds an {@link SdcaFprint} operation + * Builds an {@link RestoreSlice} operation * - * @param input vector of strings to compute fingerprints on. - * @return a new instance of SdcaFprint - * @see org.tensorflow.op.train.SdcaFprint + * @param filePattern Must have a single element. The pattern of the files from + * @param tensorName Must have a single element. The name of the tensor to be + * @param shapeAndSlice Scalar. The shapes and slice specifications to use when + * @param dt The type of the tensor to be restored. + * @param options carries optional attributes values + * @return a new instance of RestoreSlice + * @see org.tensorflow.op.train.RestoreSlice */ - public SdcaFprint sdcaFprint(Operand input) { - return SdcaFprint.create(scope, input); + public RestoreSlice restoreSlice(Operand filePattern, Operand tensorName, + Operand shapeAndSlice, DataType dt, RestoreSlice.Options... options) { + return RestoreSlice.create(scope, filePattern, tensorName, shapeAndSlice, dt, options); } /** - * Builds an {@link ResourceSparseApplyProximalAdagrad} operation + * Builds an {@link SparseApplyProximalAdagrad} operation * * @param var Should be from a Variable(). * @param accum Should be from a Variable(). @@ -896,32 +896,13 @@ public SdcaFprint sdcaFprint(Operand input) { * @param grad The gradient. * @param indices A vector of indices into the first dimension of var and accum. * @param options carries optional attributes values - * @return a new instance of ResourceSparseApplyProximalAdagrad - * @see org.tensorflow.op.train.ResourceSparseApplyProximalAdagrad - */ - public ResourceSparseApplyProximalAdagrad resourceSparseApplyProximalAdagrad( - Operand var, Operand accum, Operand lr, Operand l1, Operand l2, - Operand grad, Operand indices, ResourceSparseApplyProximalAdagrad.Options... options) { - return ResourceSparseApplyProximalAdagrad.create(scope, var, accum, lr, l1, l2, grad, indices, options); - } - - /** - * Builds an {@link ResourceSparseApplyProximalGradientDescent} operation - * - * @param var Should be from a Variable(). - * @param alpha Scaling factor. Must be a scalar. - * @param l1 L1 regularization. Must be a scalar. - * @param l2 L2 regularization. Must be a scalar. - * @param grad The gradient. - * @param indices A vector of indices into the first dimension of var and accum. - * @param options carries optional attributes values - * @return a new instance of ResourceSparseApplyProximalGradientDescent - * @see org.tensorflow.op.train.ResourceSparseApplyProximalGradientDescent + * @return a new instance of SparseApplyProximalAdagrad + * @see org.tensorflow.op.train.SparseApplyProximalAdagrad */ - public ResourceSparseApplyProximalGradientDescent resourceSparseApplyProximalGradientDescent( - Operand var, Operand alpha, Operand l1, Operand l2, Operand grad, - Operand indices, ResourceSparseApplyProximalGradientDescent.Options... options) { - return ResourceSparseApplyProximalGradientDescent.create(scope, var, alpha, l1, l2, grad, indices, options); + public SparseApplyProximalAdagrad sparseApplyProximalAdagrad( + Operand var, Operand accum, Operand lr, Operand l1, Operand l2, + Operand grad, Operand indices, SparseApplyProximalAdagrad.Options... options) { + return SparseApplyProximalAdagrad.create(scope, var, accum, lr, l1, l2, grad, indices, options); } /** @@ -946,41 +927,67 @@ public ApplyRmsProp applyRmsProp(Operand var, Operand ms, Operand newVocabFile, - Operand oldVocabFile, Long newVocabOffset, Long numNewVocab, - GenerateVocabRemapping.Options... options) { - return GenerateVocabRemapping.create(scope, newVocabFile, oldVocabFile, newVocabOffset, numNewVocab, options); + public ResourceSparseApplyAdagrad resourceSparseApplyAdagrad( + Operand var, Operand accum, Operand lr, Operand grad, Operand indices, + ResourceSparseApplyAdagrad.Options... options) { + return ResourceSparseApplyAdagrad.create(scope, var, accum, lr, grad, indices, options); } /** - * Builds an {@link SparseApplyAdadelta} operation + * Builds an {@link SparseApplyAdagradDa} operation * - * @param var - * @param accum Should be from a Variable(). - * @param accumUpdate : Should be from a Variable(). + * @param var Should be from a Variable(). + * @param gradientAccumulator Should be from a Variable(). + * @param gradientSquaredAccumulator Should be from a Variable(). + * @param grad The gradient. + * @param indices A vector of indices into the first dimension of var and accum. * @param lr Learning rate. Must be a scalar. - * @param rho Decay factor. Must be a scalar. - * @param epsilon Constant factor. Must be a scalar. + * @param l1 L1 regularization. Must be a scalar. + * @param l2 L2 regularization. Must be a scalar. + * @param globalStep Training step number. Must be a scalar. + * @param options carries optional attributes values + * @return a new instance of SparseApplyAdagradDa + * @see org.tensorflow.op.train.SparseApplyAdagradDa + */ + public SparseApplyAdagradDa sparseApplyAdagradDa(Operand var, + Operand gradientAccumulator, Operand gradientSquaredAccumulator, Operand grad, + Operand indices, Operand lr, Operand l1, Operand l2, Operand globalStep, + SparseApplyAdagradDa.Options... options) { + return SparseApplyAdagradDa.create(scope, var, gradientAccumulator, gradientSquaredAccumulator, grad, indices, lr, l1, l2, globalStep, options); + } + + /** + * Builds an {@link ResourceSparseApplyAdagradDa} operation + * + * @param var Should be from a Variable(). + * @param gradientAccumulator Should be from a Variable(). + * @param gradientSquaredAccumulator Should be from a Variable(). * @param grad The gradient. * @param indices A vector of indices into the first dimension of var and accum. + * @param lr Learning rate. Must be a scalar. + * @param l1 L1 regularization. Must be a scalar. + * @param l2 L2 regularization. Must be a scalar. + * @param globalStep Training step number. Must be a scalar. * @param options carries optional attributes values - * @return a new instance of SparseApplyAdadelta - * @see org.tensorflow.op.train.SparseApplyAdadelta + * @return a new instance of ResourceSparseApplyAdagradDa + * @see org.tensorflow.op.train.ResourceSparseApplyAdagradDa */ - public SparseApplyAdadelta sparseApplyAdadelta(Operand var, - Operand accum, Operand accumUpdate, Operand lr, Operand rho, Operand epsilon, - Operand grad, Operand indices, SparseApplyAdadelta.Options... options) { - return SparseApplyAdadelta.create(scope, var, accum, accumUpdate, lr, rho, epsilon, grad, indices, options); + public ResourceSparseApplyAdagradDa resourceSparseApplyAdagradDa( + Operand var, Operand gradientAccumulator, Operand gradientSquaredAccumulator, + Operand grad, Operand indices, Operand lr, Operand l1, Operand l2, + Operand globalStep, ResourceSparseApplyAdagradDa.Options... options) { + return ResourceSparseApplyAdagradDa.create(scope, var, gradientAccumulator, gradientSquaredAccumulator, grad, indices, lr, l1, l2, globalStep, options); } /** @@ -1002,20 +1009,6 @@ public ResourceApplyProximalAdagrad resourceApplyProximalAdagrad(Operand return ResourceApplyProximalAdagrad.create(scope, var, accum, lr, l1, l2, grad, options); } - /** - * Builds an {@link ConditionalAccumulator} operation - * - * @param dtype The type of the value being accumulated. - * @param shape The shape of the values, can be [], in which case shape is unknown. - * @param options carries optional attributes values - * @return a new instance of ConditionalAccumulator - * @see org.tensorflow.op.train.ConditionalAccumulator - */ - public ConditionalAccumulator conditionalAccumulator(Class dtype, Shape shape, - ConditionalAccumulator.Options... options) { - return ConditionalAccumulator.create(scope, dtype, shape, options); - } - /** * Builds an {@link ResourceApplyPowerSign} operation * @@ -1054,30 +1047,6 @@ public ApplyProximalGradientDescent applyProximalGradientDescent(Operand< return ApplyProximalGradientDescent.create(scope, var, alpha, l1, l2, delta, options); } - /** - * Builds an {@link ResourceSparseApplyCenteredRmsProp} operation - * - * @param var Should be from a Variable(). - * @param mg Should be from a Variable(). - * @param ms Should be from a Variable(). - * @param mom Should be from a Variable(). - * @param lr Scaling factor. Must be a scalar. - * @param rho Decay rate. Must be a scalar. - * @param momentum - * @param epsilon Ridge term. Must be a scalar. - * @param grad The gradient. - * @param indices A vector of indices into the first dimension of var, ms and mom. - * @param options carries optional attributes values - * @return a new instance of ResourceSparseApplyCenteredRmsProp - * @see org.tensorflow.op.train.ResourceSparseApplyCenteredRmsProp - */ - public ResourceSparseApplyCenteredRmsProp resourceSparseApplyCenteredRmsProp( - Operand var, Operand mg, Operand ms, Operand mom, Operand lr, Operand rho, - Operand momentum, Operand epsilon, Operand grad, Operand indices, - ResourceSparseApplyCenteredRmsProp.Options... options) { - return ResourceSparseApplyCenteredRmsProp.create(scope, var, mg, ms, mom, lr, rho, momentum, epsilon, grad, indices, options); - } - /** * Builds an {@link SparseApplyFtrl} operation * @@ -1095,7 +1064,7 @@ public ResourceSparseApplyCenteredRmsProp resourceSparseAp * @return a new instance of SparseApplyFtrl * @see org.tensorflow.op.train.SparseApplyFtrl */ - public SparseApplyFtrl sparseApplyFtrl(Operand var, Operand accum, + public SparseApplyFtrl sparseApplyFtrl(Operand var, Operand accum, Operand linear, Operand grad, Operand indices, Operand lr, Operand l1, Operand l2, Operand l2Shrinkage, Operand lrPower, SparseApplyFtrl.Options... options) { @@ -1103,10 +1072,23 @@ public SparseApplyFtrl sparseApplyFtrl(Operand var, } /** - * Builds an {@link SparseApplyCenteredRmsProp} operation + * Builds an {@link ConditionalAccumulator} operation + * + * @param dtype The type of the value being accumulated. + * @param shape The shape of the values, can be [], in which case shape is unknown. + * @param options carries optional attributes values + * @return a new instance of ConditionalAccumulator + * @see org.tensorflow.op.train.ConditionalAccumulator + */ + public ConditionalAccumulator conditionalAccumulator(DataType dtype, Shape shape, + ConditionalAccumulator.Options... options) { + return ConditionalAccumulator.create(scope, dtype, shape, options); + } + + /** + * Builds an {@link ResourceSparseApplyRmsProp} operation * * @param var Should be from a Variable(). - * @param mg Should be from a Variable(). * @param ms Should be from a Variable(). * @param mom Should be from a Variable(). * @param lr Scaling factor. Must be a scalar. @@ -1116,28 +1098,25 @@ public SparseApplyFtrl sparseApplyFtrl(Operand var, * @param grad The gradient. * @param indices A vector of indices into the first dimension of var, ms and mom. * @param options carries optional attributes values - * @return a new instance of SparseApplyCenteredRmsProp - * @see org.tensorflow.op.train.SparseApplyCenteredRmsProp + * @return a new instance of ResourceSparseApplyRmsProp + * @see org.tensorflow.op.train.ResourceSparseApplyRmsProp */ - public SparseApplyCenteredRmsProp sparseApplyCenteredRmsProp( - Operand var, Operand mg, Operand ms, Operand mom, Operand lr, Operand rho, + public ResourceSparseApplyRmsProp resourceSparseApplyRmsProp( + Operand var, Operand ms, Operand mom, Operand lr, Operand rho, Operand momentum, Operand epsilon, Operand grad, Operand indices, - SparseApplyCenteredRmsProp.Options... options) { - return SparseApplyCenteredRmsProp.create(scope, var, mg, ms, mom, lr, rho, momentum, epsilon, grad, indices, options); + ResourceSparseApplyRmsProp.Options... options) { + return ResourceSparseApplyRmsProp.create(scope, var, ms, mom, lr, rho, momentum, epsilon, grad, indices, options); } /** - * Builds an {@link MergeV2Checkpoints} operation + * Builds an {@link SdcaFprint} operation * - * @param checkpointPrefixes prefixes of V2 checkpoints to merge. - * @param destinationPrefix scalar. The desired final prefix. Allowed to be the same - * @param options carries optional attributes values - * @return a new instance of MergeV2Checkpoints - * @see org.tensorflow.op.train.MergeV2Checkpoints + * @param input vector of strings to compute fingerprints on. + * @return a new instance of SdcaFprint + * @see org.tensorflow.op.train.SdcaFprint */ - public MergeV2Checkpoints mergeV2Checkpoints(Operand checkpointPrefixes, - Operand destinationPrefix, MergeV2Checkpoints.Options... options) { - return MergeV2Checkpoints.create(scope, checkpointPrefixes, destinationPrefix, options); + public SdcaFprint sdcaFprint(Operand input) { + return SdcaFprint.create(scope, input); } /** @@ -1157,20 +1136,47 @@ public MergeV2Checkpoints mergeV2Checkpoints(Operand checkpointPrefixes, */ public ApplyAdagradDa applyAdagradDa(Operand var, Operand gradientAccumulator, Operand gradientSquaredAccumulator, Operand grad, Operand lr, Operand l1, - Operand l2, Operand globalStep, ApplyAdagradDa.Options... options) { + Operand l2, Operand globalStep, ApplyAdagradDa.Options... options) { return ApplyAdagradDa.create(scope, var, gradientAccumulator, gradientSquaredAccumulator, grad, lr, l1, l2, globalStep, options); } /** - * Builds an {@link TileGrad} operation + * Builds an {@link SparseApplyProximalGradientDescent} operation * - * @param input - * @param multiples - * @return a new instance of TileGrad - * @see org.tensorflow.op.train.TileGrad + * @param var Should be from a Variable(). + * @param alpha Scaling factor. Must be a scalar. + * @param l1 L1 regularization. Must be a scalar. + * @param l2 L2 regularization. Must be a scalar. + * @param grad The gradient. + * @param indices A vector of indices into the first dimension of var and accum. + * @param options carries optional attributes values + * @return a new instance of SparseApplyProximalGradientDescent + * @see org.tensorflow.op.train.SparseApplyProximalGradientDescent */ - public TileGrad tileGrad(Operand input, Operand multiples) { - return TileGrad.create(scope, input, multiples); + public SparseApplyProximalGradientDescent sparseApplyProximalGradientDescent( + Operand var, Operand alpha, Operand l1, Operand l2, Operand grad, + Operand indices, SparseApplyProximalGradientDescent.Options... options) { + return SparseApplyProximalGradientDescent.create(scope, var, alpha, l1, l2, grad, indices, options); + } + + /** + * Builds an {@link ResourceSparseApplyProximalAdagrad} operation + * + * @param var Should be from a Variable(). + * @param accum Should be from a Variable(). + * @param lr Learning rate. Must be a scalar. + * @param l1 L1 regularization. Must be a scalar. + * @param l2 L2 regularization. Must be a scalar. + * @param grad The gradient. + * @param indices A vector of indices into the first dimension of var and accum. + * @param options carries optional attributes values + * @return a new instance of ResourceSparseApplyProximalAdagrad + * @see org.tensorflow.op.train.ResourceSparseApplyProximalAdagrad + */ + public ResourceSparseApplyProximalAdagrad resourceSparseApplyProximalAdagrad( + Operand var, Operand accum, Operand lr, Operand l1, Operand l2, + Operand grad, Operand indices, ResourceSparseApplyProximalAdagrad.Options... options) { + return ResourceSparseApplyProximalAdagrad.create(scope, var, accum, lr, l1, l2, grad, indices, options); } /** diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/Compute_func_Pointer_TF_OpKernelContext.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/Compute_func_Pointer_TF_OpKernelContext.java similarity index 76% rename from tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/Compute_func_Pointer_TF_OpKernelContext.java rename to tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/Compute_func_Pointer_TF_OpKernelContext.java index 00cdd257eee..3cb38cf2581 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/Compute_func_Pointer_TF_OpKernelContext.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/Compute_func_Pointer_TF_OpKernelContext.java @@ -1,14 +1,14 @@ // Targeted by JavaCPP version 1.5.1: DO NOT EDIT THIS FILE -package org.tensorflow.c_api; +package org.tensorflow.internal.c_api; import java.nio.*; import org.bytedeco.javacpp.*; import org.bytedeco.javacpp.annotation.*; -import static org.tensorflow.c_api.global.tensorflow.*; +import static org.tensorflow.internal.c_api.global.tensorflow.*; -@Properties(inherit = org.tensorflow.c_api.presets.tensorflow.class) +@Properties(inherit = org.tensorflow.internal.c_api.presets.tensorflow.class) public class Compute_func_Pointer_TF_OpKernelContext extends FunctionPointer { static { Loader.load(); } /** Pointer cast constructor. Invokes {@link Pointer#Pointer(Pointer)}. */ diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/Create_func_TF_OpKernelConstruction.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/Create_func_TF_OpKernelConstruction.java similarity index 91% rename from tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/Create_func_TF_OpKernelConstruction.java rename to tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/Create_func_TF_OpKernelConstruction.java index b36f6f488b0..7d9cf68a96e 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/Create_func_TF_OpKernelConstruction.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/Create_func_TF_OpKernelConstruction.java @@ -1,12 +1,12 @@ // Targeted by JavaCPP version 1.5.1: DO NOT EDIT THIS FILE -package org.tensorflow.c_api; +package org.tensorflow.internal.c_api; import java.nio.*; import org.bytedeco.javacpp.*; import org.bytedeco.javacpp.annotation.*; -import static org.tensorflow.c_api.global.tensorflow.*; +import static org.tensorflow.internal.c_api.global.tensorflow.*; // Allocates a new kernel builder and returns a pointer to it. @@ -37,7 +37,7 @@ // TF_RegisterKernelBuilder, which will take ownership of the pointer. If, for // some reason, the kernel builder will not be registered, the caller should // delete it with TF_DeleteKernelBuilder. -@Properties(inherit = org.tensorflow.c_api.presets.tensorflow.class) +@Properties(inherit = org.tensorflow.internal.c_api.presets.tensorflow.class) public class Create_func_TF_OpKernelConstruction extends FunctionPointer { static { Loader.load(); } /** Pointer cast constructor. Invokes {@link Pointer#Pointer(Pointer)}. */ diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/Deallocator_Pointer_long_Pointer.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/Deallocator_Pointer_long_Pointer.java similarity index 85% rename from tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/Deallocator_Pointer_long_Pointer.java rename to tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/Deallocator_Pointer_long_Pointer.java index 30f542407da..8ea3a0c7821 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/Deallocator_Pointer_long_Pointer.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/Deallocator_Pointer_long_Pointer.java @@ -1,12 +1,12 @@ // Targeted by JavaCPP version 1.5.1: DO NOT EDIT THIS FILE -package org.tensorflow.c_api; +package org.tensorflow.internal.c_api; import java.nio.*; import org.bytedeco.javacpp.*; import org.bytedeco.javacpp.annotation.*; -import static org.tensorflow.c_api.global.tensorflow.*; +import static org.tensorflow.internal.c_api.global.tensorflow.*; // Return a new tensor that holds the bytes data[0,len-1]. @@ -19,7 +19,7 @@ // May return NULL (and invoke the deallocator) if the provided data buffer // (data, len) is inconsistent with a tensor of the given TF_DataType // and the shape specified by (dima, num_dims). -@Properties(inherit = org.tensorflow.c_api.presets.tensorflow.class) +@Properties(inherit = org.tensorflow.internal.c_api.presets.tensorflow.class) public class Deallocator_Pointer_long_Pointer extends FunctionPointer { static { Loader.load(); } /** Pointer cast constructor. Invokes {@link Pointer#Pointer(Pointer)}. */ diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/Delete_func_Pointer.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/Delete_func_Pointer.java similarity index 73% rename from tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/Delete_func_Pointer.java rename to tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/Delete_func_Pointer.java index e19765c5be1..89a99f2c207 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/Delete_func_Pointer.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/Delete_func_Pointer.java @@ -1,14 +1,14 @@ // Targeted by JavaCPP version 1.5.1: DO NOT EDIT THIS FILE -package org.tensorflow.c_api; +package org.tensorflow.internal.c_api; import java.nio.*; import org.bytedeco.javacpp.*; import org.bytedeco.javacpp.annotation.*; -import static org.tensorflow.c_api.global.tensorflow.*; +import static org.tensorflow.internal.c_api.global.tensorflow.*; -@Properties(inherit = org.tensorflow.c_api.presets.tensorflow.class) +@Properties(inherit = org.tensorflow.internal.c_api.presets.tensorflow.class) public class Delete_func_Pointer extends FunctionPointer { static { Loader.load(); } /** Pointer cast constructor. Invokes {@link Pointer#Pointer(Pointer)}. */ diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/Listener_BytePointer.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/Listener_BytePointer.java similarity index 80% rename from tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/Listener_BytePointer.java rename to tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/Listener_BytePointer.java index 126bd63508b..5ae62d2d60a 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/Listener_BytePointer.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/Listener_BytePointer.java @@ -1,12 +1,12 @@ // Targeted by JavaCPP version 1.5.1: DO NOT EDIT THIS FILE -package org.tensorflow.c_api; +package org.tensorflow.internal.c_api; import java.nio.*; import org.bytedeco.javacpp.*; import org.bytedeco.javacpp.annotation.*; -import static org.tensorflow.c_api.global.tensorflow.*; +import static org.tensorflow.internal.c_api.global.tensorflow.*; // Register a listener method that processes printed messages. @@ -14,7 +14,7 @@ // If any listeners are registered, the print operator will call all listeners // with the printed messages and immediately return without writing to the // logs. -@Properties(inherit = org.tensorflow.c_api.presets.tensorflow.class) +@Properties(inherit = org.tensorflow.internal.c_api.presets.tensorflow.class) public class Listener_BytePointer extends FunctionPointer { static { Loader.load(); } /** Pointer cast constructor. Invokes {@link Pointer#Pointer(Pointer)}. */ diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/Listener_String.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/Listener_String.java similarity index 73% rename from tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/Listener_String.java rename to tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/Listener_String.java index 5f0924e8a04..853fff48998 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/Listener_String.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/Listener_String.java @@ -1,14 +1,14 @@ // Targeted by JavaCPP version 1.5.1: DO NOT EDIT THIS FILE -package org.tensorflow.c_api; +package org.tensorflow.internal.c_api; import java.nio.*; import org.bytedeco.javacpp.*; import org.bytedeco.javacpp.annotation.*; -import static org.tensorflow.c_api.global.tensorflow.*; +import static org.tensorflow.internal.c_api.global.tensorflow.*; -@Properties(inherit = org.tensorflow.c_api.presets.tensorflow.class) +@Properties(inherit = org.tensorflow.internal.c_api.presets.tensorflow.class) public class Listener_String extends FunctionPointer { static { Loader.load(); } /** Pointer cast constructor. Invokes {@link Pointer#Pointer(Pointer)}. */ diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/Shape_inference_func_TF_ShapeInferenceContext_TF_Status.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/Shape_inference_func_TF_ShapeInferenceContext_TF_Status.java similarity index 80% rename from tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/Shape_inference_func_TF_ShapeInferenceContext_TF_Status.java rename to tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/Shape_inference_func_TF_ShapeInferenceContext_TF_Status.java index dee746680a1..3aa62142056 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/Shape_inference_func_TF_ShapeInferenceContext_TF_Status.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/Shape_inference_func_TF_ShapeInferenceContext_TF_Status.java @@ -1,16 +1,16 @@ // Targeted by JavaCPP version 1.5.1: DO NOT EDIT THIS FILE -package org.tensorflow.c_api; +package org.tensorflow.internal.c_api; import java.nio.*; import org.bytedeco.javacpp.*; import org.bytedeco.javacpp.annotation.*; -import static org.tensorflow.c_api.global.tensorflow.*; +import static org.tensorflow.internal.c_api.global.tensorflow.*; // Sets the shape inference function for the op. -@Properties(inherit = org.tensorflow.c_api.presets.tensorflow.class) +@Properties(inherit = org.tensorflow.internal.c_api.presets.tensorflow.class) public class Shape_inference_func_TF_ShapeInferenceContext_TF_Status extends FunctionPointer { static { Loader.load(); } /** Pointer cast constructor. Invokes {@link Pointer#Pointer(Pointer)}. */ diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/TFE_Context.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/TFE_Context.java similarity index 81% rename from tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/TFE_Context.java rename to tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/TFE_Context.java index f0ec95e0916..98495f38704 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/TFE_Context.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/TFE_Context.java @@ -1,12 +1,12 @@ // Targeted by JavaCPP version 1.5.1: DO NOT EDIT THIS FILE -package org.tensorflow.c_api; +package org.tensorflow.internal.c_api; import java.nio.*; import org.bytedeco.javacpp.*; import org.bytedeco.javacpp.annotation.*; -import static org.tensorflow.c_api.global.tensorflow.*; +import static org.tensorflow.internal.c_api.global.tensorflow.*; // "Context" under which operations/functions are executed. It encapsulates @@ -16,7 +16,7 @@ // been deleted (with TFE_DeleteTensorHandle). // // TODO(ashankar): Merge with TF_Session? -@Opaque @Properties(inherit = org.tensorflow.c_api.presets.tensorflow.class) +@Opaque @Properties(inherit = org.tensorflow.internal.c_api.presets.tensorflow.class) public class TFE_Context extends Pointer { /** Empty constructor. Calls {@code super((Pointer)null)}. */ public TFE_Context() { super((Pointer)null); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/TFE_ContextOptions.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/TFE_ContextOptions.java similarity index 71% rename from tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/TFE_ContextOptions.java rename to tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/TFE_ContextOptions.java index 2d14cb174c9..608920913db 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/TFE_ContextOptions.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/TFE_ContextOptions.java @@ -1,16 +1,16 @@ // Targeted by JavaCPP version 1.5.1: DO NOT EDIT THIS FILE -package org.tensorflow.c_api; +package org.tensorflow.internal.c_api; import java.nio.*; import org.bytedeco.javacpp.*; import org.bytedeco.javacpp.annotation.*; -import static org.tensorflow.c_api.global.tensorflow.*; +import static org.tensorflow.internal.c_api.global.tensorflow.*; // #endif -@Opaque @Properties(inherit = org.tensorflow.c_api.presets.tensorflow.class) +@Opaque @Properties(inherit = org.tensorflow.internal.c_api.presets.tensorflow.class) public class TFE_ContextOptions extends Pointer { /** Empty constructor. Calls {@code super((Pointer)null)}. */ public TFE_ContextOptions() { super((Pointer)null); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/TFE_Op.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/TFE_Op.java similarity index 83% rename from tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/TFE_Op.java rename to tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/TFE_Op.java index 71746288ce1..4ae1f8aac15 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/TFE_Op.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/TFE_Op.java @@ -1,12 +1,12 @@ // Targeted by JavaCPP version 1.5.1: DO NOT EDIT THIS FILE -package org.tensorflow.c_api; +package org.tensorflow.internal.c_api; import java.nio.*; import org.bytedeco.javacpp.*; import org.bytedeco.javacpp.annotation.*; -import static org.tensorflow.c_api.global.tensorflow.*; +import static org.tensorflow.internal.c_api.global.tensorflow.*; // Description of the TensorFlow op to execute. @@ -20,7 +20,7 @@ // (2) TF_ColocateWith, TF_AddControlInput etc. do not make sense. // (3) Implementation detail: Avoid use of NodeBuilder/NodeDefBuilder since // the additional sanity checks there seem unnecessary; -@Opaque @Properties(inherit = org.tensorflow.c_api.presets.tensorflow.class) +@Opaque @Properties(inherit = org.tensorflow.internal.c_api.presets.tensorflow.class) public class TFE_Op extends Pointer { /** Empty constructor. Calls {@code super((Pointer)null)}. */ public TFE_Op() { super((Pointer)null); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/TFE_TensorDebugInfo.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/TFE_TensorDebugInfo.java similarity index 76% rename from tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/TFE_TensorDebugInfo.java rename to tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/TFE_TensorDebugInfo.java index 6d416a2049e..af4423e5017 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/TFE_TensorDebugInfo.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/TFE_TensorDebugInfo.java @@ -1,19 +1,19 @@ // Targeted by JavaCPP version 1.5.1: DO NOT EDIT THIS FILE -package org.tensorflow.c_api; +package org.tensorflow.internal.c_api; import java.nio.*; import org.bytedeco.javacpp.*; import org.bytedeco.javacpp.annotation.*; -import static org.tensorflow.c_api.global.tensorflow.*; +import static org.tensorflow.internal.c_api.global.tensorflow.*; // Debugging/Profiling information for TFE_TensorHandle // // TFE_TensorDebugInfo contains information useful for debugging and // profiling tensors. -@Opaque @Properties(inherit = org.tensorflow.c_api.presets.tensorflow.class) +@Opaque @Properties(inherit = org.tensorflow.internal.c_api.presets.tensorflow.class) public class TFE_TensorDebugInfo extends Pointer { /** Empty constructor. Calls {@code super((Pointer)null)}. */ public TFE_TensorDebugInfo() { super((Pointer)null); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/TFE_TensorHandle.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/TFE_TensorHandle.java similarity index 79% rename from tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/TFE_TensorHandle.java rename to tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/TFE_TensorHandle.java index eb9f0807d0f..c06f444f784 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/TFE_TensorHandle.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/TFE_TensorHandle.java @@ -1,12 +1,12 @@ // Targeted by JavaCPP version 1.5.1: DO NOT EDIT THIS FILE -package org.tensorflow.c_api; +package org.tensorflow.internal.c_api; import java.nio.*; import org.bytedeco.javacpp.*; import org.bytedeco.javacpp.annotation.*; -import static org.tensorflow.c_api.global.tensorflow.*; +import static org.tensorflow.internal.c_api.global.tensorflow.*; // A handle to a tensor on a device. @@ -14,7 +14,7 @@ // Like a TF_Tensor, a TFE_TensorHandle refers to a tensor with a value, shape, // type etc. Unlike a TF_Tensor, a TFE_TensorHandle may refer to such tensors // placed in memory of different devices or remote address spaces. -@Opaque @Properties(inherit = org.tensorflow.c_api.presets.tensorflow.class) +@Opaque @Properties(inherit = org.tensorflow.internal.c_api.presets.tensorflow.class) public class TFE_TensorHandle extends Pointer { /** Empty constructor. Calls {@code super((Pointer)null)}. */ public TFE_TensorHandle() { super((Pointer)null); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/TF_ApiDefMap.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/TF_ApiDefMap.java similarity index 82% rename from tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/TF_ApiDefMap.java rename to tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/TF_ApiDefMap.java index b44d0bcf86a..aa660609bbb 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/TF_ApiDefMap.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/TF_ApiDefMap.java @@ -1,12 +1,12 @@ // Targeted by JavaCPP version 1.5.1: DO NOT EDIT THIS FILE -package org.tensorflow.c_api; +package org.tensorflow.internal.c_api; import java.nio.*; import org.bytedeco.javacpp.*; import org.bytedeco.javacpp.annotation.*; -import static org.tensorflow.c_api.global.tensorflow.*; +import static org.tensorflow.internal.c_api.global.tensorflow.*; // TF_ApiDefMap encapsulates a collection of API definitions for an operation. @@ -17,7 +17,7 @@ // // The ApiDef messages are typically used to generate convenience wrapper // functions for TensorFlow operations in various language bindings. -@Opaque @Properties(inherit = org.tensorflow.c_api.presets.tensorflow.class) +@Opaque @Properties(inherit = org.tensorflow.internal.c_api.presets.tensorflow.class) public class TF_ApiDefMap extends Pointer { /** Empty constructor. Calls {@code super((Pointer)null)}. */ public TF_ApiDefMap() { super((Pointer)null); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/TF_AttrMetadata.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/TF_AttrMetadata.java similarity index 92% rename from tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/TF_AttrMetadata.java rename to tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/TF_AttrMetadata.java index 4a6f9127d6d..ad10acf2fe3 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/TF_AttrMetadata.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/TF_AttrMetadata.java @@ -1,16 +1,16 @@ // Targeted by JavaCPP version 1.5.1: DO NOT EDIT THIS FILE -package org.tensorflow.c_api; +package org.tensorflow.internal.c_api; import java.nio.*; import org.bytedeco.javacpp.*; import org.bytedeco.javacpp.annotation.*; -import static org.tensorflow.c_api.global.tensorflow.*; +import static org.tensorflow.internal.c_api.global.tensorflow.*; // TF_AttrMetadata describes the value of an attribute on an operation. -@Properties(inherit = org.tensorflow.c_api.presets.tensorflow.class) +@Properties(inherit = org.tensorflow.internal.c_api.presets.tensorflow.class) public class TF_AttrMetadata extends Pointer { static { Loader.load(); } /** Default native constructor. */ diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/TF_Buffer.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/TF_Buffer.java similarity index 88% rename from tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/TF_Buffer.java rename to tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/TF_Buffer.java index b091dff3712..03c1fd073f4 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/TF_Buffer.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/TF_Buffer.java @@ -1,12 +1,12 @@ // Targeted by JavaCPP version 1.5.1: DO NOT EDIT THIS FILE -package org.tensorflow.c_api; +package org.tensorflow.internal.c_api; import java.nio.*; import org.bytedeco.javacpp.*; import org.bytedeco.javacpp.annotation.*; -import static org.tensorflow.c_api.global.tensorflow.*; +import static org.tensorflow.internal.c_api.global.tensorflow.*; // -------------------------------------------------------------------------- @@ -17,8 +17,8 @@ // By default, TF_Buffer itself does not do any memory management of the // pointed-to block. If need be, users of this struct should specify how to // deallocate the block by setting the `data_deallocator` function pointer. -@Properties(inherit = org.tensorflow.c_api.presets.tensorflow.class) -public class TF_Buffer extends org.tensorflow.c_api.AbstractTF_Buffer { +@Properties(inherit = org.tensorflow.internal.c_api.presets.tensorflow.class) +public class TF_Buffer extends org.tensorflow.internal.c_api.AbstractTF_Buffer { static { Loader.load(); } /** Default native constructor. */ public TF_Buffer() { super((Pointer)null); allocate(); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/TF_DeprecatedSession.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/TF_DeprecatedSession.java similarity index 78% rename from tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/TF_DeprecatedSession.java rename to tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/TF_DeprecatedSession.java index 135364f6647..71b93fe248e 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/TF_DeprecatedSession.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/TF_DeprecatedSession.java @@ -1,12 +1,12 @@ // Targeted by JavaCPP version 1.5.1: DO NOT EDIT THIS FILE -package org.tensorflow.c_api; +package org.tensorflow.internal.c_api; import java.nio.*; import org.bytedeco.javacpp.*; import org.bytedeco.javacpp.annotation.*; -import static org.tensorflow.c_api.global.tensorflow.*; +import static org.tensorflow.internal.c_api.global.tensorflow.*; // -------------------------------------------------------------------------- @@ -14,7 +14,7 @@ // TF_ExtendGraph(). This deprecated API can be removed at any time without // notice. -@Opaque @Properties(inherit = org.tensorflow.c_api.presets.tensorflow.class) +@Opaque @Properties(inherit = org.tensorflow.internal.c_api.presets.tensorflow.class) public class TF_DeprecatedSession extends Pointer { /** Empty constructor. Calls {@code super((Pointer)null)}. */ public TF_DeprecatedSession() { super((Pointer)null); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/TF_DeviceList.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/TF_DeviceList.java similarity index 70% rename from tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/TF_DeviceList.java rename to tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/TF_DeviceList.java index 61a95ccdee9..5ade2133666 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/TF_DeviceList.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/TF_DeviceList.java @@ -1,15 +1,15 @@ // Targeted by JavaCPP version 1.5.1: DO NOT EDIT THIS FILE -package org.tensorflow.c_api; +package org.tensorflow.internal.c_api; import java.nio.*; import org.bytedeco.javacpp.*; import org.bytedeco.javacpp.annotation.*; -import static org.tensorflow.c_api.global.tensorflow.*; +import static org.tensorflow.internal.c_api.global.tensorflow.*; -@Opaque @Properties(inherit = org.tensorflow.c_api.presets.tensorflow.class) +@Opaque @Properties(inherit = org.tensorflow.internal.c_api.presets.tensorflow.class) public class TF_DeviceList extends Pointer { /** Empty constructor. Calls {@code super((Pointer)null)}. */ public TF_DeviceList() { super((Pointer)null); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/TF_DimensionHandle.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/TF_DimensionHandle.java similarity index 71% rename from tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/TF_DimensionHandle.java rename to tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/TF_DimensionHandle.java index 7cb8ff0fcd3..afa0eeef73d 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/TF_DimensionHandle.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/TF_DimensionHandle.java @@ -1,16 +1,16 @@ // Targeted by JavaCPP version 1.5.1: DO NOT EDIT THIS FILE -package org.tensorflow.c_api; +package org.tensorflow.internal.c_api; import java.nio.*; import org.bytedeco.javacpp.*; import org.bytedeco.javacpp.annotation.*; -import static org.tensorflow.c_api.global.tensorflow.*; +import static org.tensorflow.internal.c_api.global.tensorflow.*; // #endif -@Opaque @Properties(inherit = org.tensorflow.c_api.presets.tensorflow.class) +@Opaque @Properties(inherit = org.tensorflow.internal.c_api.presets.tensorflow.class) public class TF_DimensionHandle extends Pointer { /** Empty constructor. Calls {@code super((Pointer)null)}. */ public TF_DimensionHandle() { super((Pointer)null); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/TF_Function.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/TF_Function.java similarity index 77% rename from tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/TF_Function.java rename to tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/TF_Function.java index 89423c1da31..fac9f020704 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/TF_Function.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/TF_Function.java @@ -1,18 +1,18 @@ // Targeted by JavaCPP version 1.5.1: DO NOT EDIT THIS FILE -package org.tensorflow.c_api; +package org.tensorflow.internal.c_api; import java.nio.*; import org.bytedeco.javacpp.*; import org.bytedeco.javacpp.annotation.*; -import static org.tensorflow.c_api.global.tensorflow.*; +import static org.tensorflow.internal.c_api.global.tensorflow.*; // TF_Function is a grouping of operations with defined inputs and outputs. // Once created and added to graphs, functions can be invoked by creating an // operation whose operation type matches the function name. -@Opaque @Properties(inherit = org.tensorflow.c_api.presets.tensorflow.class) +@Opaque @Properties(inherit = org.tensorflow.internal.c_api.presets.tensorflow.class) public class TF_Function extends Pointer { /** Empty constructor. Calls {@code super((Pointer)null)}. */ public TF_Function() { super((Pointer)null); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/TF_FunctionOptions.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/TF_FunctionOptions.java similarity index 73% rename from tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/TF_FunctionOptions.java rename to tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/TF_FunctionOptions.java index 4005db8ea6f..0b88b031a12 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/TF_FunctionOptions.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/TF_FunctionOptions.java @@ -1,16 +1,16 @@ // Targeted by JavaCPP version 1.5.1: DO NOT EDIT THIS FILE -package org.tensorflow.c_api; +package org.tensorflow.internal.c_api; import java.nio.*; import org.bytedeco.javacpp.*; import org.bytedeco.javacpp.annotation.*; -import static org.tensorflow.c_api.global.tensorflow.*; +import static org.tensorflow.internal.c_api.global.tensorflow.*; // Function definition options. TODO(iga): Define and implement -@Opaque @Properties(inherit = org.tensorflow.c_api.presets.tensorflow.class) +@Opaque @Properties(inherit = org.tensorflow.internal.c_api.presets.tensorflow.class) public class TF_FunctionOptions extends Pointer { /** Empty constructor. Calls {@code super((Pointer)null)}. */ public TF_FunctionOptions() { super((Pointer)null); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/TF_Graph.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/TF_Graph.java similarity index 73% rename from tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/TF_Graph.java rename to tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/TF_Graph.java index 1ed1bd83735..7cbab9c65a8 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/TF_Graph.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/TF_Graph.java @@ -1,12 +1,12 @@ // Targeted by JavaCPP version 1.5.1: DO NOT EDIT THIS FILE -package org.tensorflow.c_api; +package org.tensorflow.internal.c_api; import java.nio.*; import org.bytedeco.javacpp.*; import org.bytedeco.javacpp.annotation.*; -import static org.tensorflow.c_api.global.tensorflow.*; +import static org.tensorflow.internal.c_api.global.tensorflow.*; // TODO(jeff,sanjay): @@ -17,8 +17,8 @@ // Represents a computation graph. Graphs may be shared between sessions. // Graphs are thread-safe when used as directed below. -@Opaque @Properties(inherit = org.tensorflow.c_api.presets.tensorflow.class) -public class TF_Graph extends org.tensorflow.c_api.AbstractTF_Graph { +@Opaque @Properties(inherit = org.tensorflow.internal.c_api.presets.tensorflow.class) +public class TF_Graph extends org.tensorflow.internal.c_api.AbstractTF_Graph { /** Empty constructor. Calls {@code super((Pointer)null)}. */ public TF_Graph() { super((Pointer)null); } /** Pointer cast constructor. Invokes {@link Pointer#Pointer(Pointer)}. */ diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/TF_ImportGraphDefOptions.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/TF_ImportGraphDefOptions.java similarity index 63% rename from tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/TF_ImportGraphDefOptions.java rename to tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/TF_ImportGraphDefOptions.java index 3ced996c971..55a0c0e756b 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/TF_ImportGraphDefOptions.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/TF_ImportGraphDefOptions.java @@ -1,18 +1,18 @@ // Targeted by JavaCPP version 1.5.1: DO NOT EDIT THIS FILE -package org.tensorflow.c_api; +package org.tensorflow.internal.c_api; import java.nio.*; import org.bytedeco.javacpp.*; import org.bytedeco.javacpp.annotation.*; -import static org.tensorflow.c_api.global.tensorflow.*; +import static org.tensorflow.internal.c_api.global.tensorflow.*; // TF_ImportGraphDefOptions holds options that can be passed to // TF_GraphImportGraphDef. -@Opaque @Properties(inherit = org.tensorflow.c_api.presets.tensorflow.class) -public class TF_ImportGraphDefOptions extends org.tensorflow.c_api.AbstractTF_ImportGraphDefOptions { +@Opaque @Properties(inherit = org.tensorflow.internal.c_api.presets.tensorflow.class) +public class TF_ImportGraphDefOptions extends org.tensorflow.internal.c_api.AbstractTF_ImportGraphDefOptions { /** Empty constructor. Calls {@code super((Pointer)null)}. */ public TF_ImportGraphDefOptions() { super((Pointer)null); } /** Pointer cast constructor. Invokes {@link Pointer#Pointer(Pointer)}. */ diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/TF_ImportGraphDefResults.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/TF_ImportGraphDefResults.java similarity index 75% rename from tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/TF_ImportGraphDefResults.java rename to tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/TF_ImportGraphDefResults.java index 5a64982d866..15554488087 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/TF_ImportGraphDefResults.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/TF_ImportGraphDefResults.java @@ -1,17 +1,17 @@ // Targeted by JavaCPP version 1.5.1: DO NOT EDIT THIS FILE -package org.tensorflow.c_api; +package org.tensorflow.internal.c_api; import java.nio.*; import org.bytedeco.javacpp.*; import org.bytedeco.javacpp.annotation.*; -import static org.tensorflow.c_api.global.tensorflow.*; +import static org.tensorflow.internal.c_api.global.tensorflow.*; // TF_ImportGraphDefResults holds results that are generated by // TF_GraphImportGraphDefWithResults(). -@Opaque @Properties(inherit = org.tensorflow.c_api.presets.tensorflow.class) +@Opaque @Properties(inherit = org.tensorflow.internal.c_api.presets.tensorflow.class) public class TF_ImportGraphDefResults extends Pointer { /** Empty constructor. Calls {@code super((Pointer)null)}. */ public TF_ImportGraphDefResults() { super((Pointer)null); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/TF_Input.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/TF_Input.java similarity index 85% rename from tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/TF_Input.java rename to tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/TF_Input.java index 2e1782d7fd6..cc6b37b1659 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/TF_Input.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/TF_Input.java @@ -1,16 +1,16 @@ // Targeted by JavaCPP version 1.5.1: DO NOT EDIT THIS FILE -package org.tensorflow.c_api; +package org.tensorflow.internal.c_api; import java.nio.*; import org.bytedeco.javacpp.*; import org.bytedeco.javacpp.annotation.*; -import static org.tensorflow.c_api.global.tensorflow.*; +import static org.tensorflow.internal.c_api.global.tensorflow.*; // Represents a specific input of an operation. -@Properties(inherit = org.tensorflow.c_api.presets.tensorflow.class) +@Properties(inherit = org.tensorflow.internal.c_api.presets.tensorflow.class) public class TF_Input extends Pointer { static { Loader.load(); } /** Default native constructor. */ diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/TF_KernelBuilder.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/TF_KernelBuilder.java similarity index 83% rename from tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/TF_KernelBuilder.java rename to tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/TF_KernelBuilder.java index 3932251835a..397fa3a417a 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/TF_KernelBuilder.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/TF_KernelBuilder.java @@ -1,12 +1,12 @@ // Targeted by JavaCPP version 1.5.1: DO NOT EDIT THIS FILE -package org.tensorflow.c_api; +package org.tensorflow.internal.c_api; import java.nio.*; import org.bytedeco.javacpp.*; import org.bytedeco.javacpp.annotation.*; -import static org.tensorflow.c_api.global.tensorflow.*; +import static org.tensorflow.internal.c_api.global.tensorflow.*; // -------------------------------------------------------------------------- @@ -22,7 +22,7 @@ // `TF_RegisterKernelBuilder`, which will allow TF to construct user-provided // kernels when necessary. -@Opaque @Properties(inherit = org.tensorflow.c_api.presets.tensorflow.class) +@Opaque @Properties(inherit = org.tensorflow.internal.c_api.presets.tensorflow.class) public class TF_KernelBuilder extends Pointer { /** Empty constructor. Calls {@code super((Pointer)null)}. */ public TF_KernelBuilder() { super((Pointer)null); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/TF_Library.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/TF_Library.java similarity index 77% rename from tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/TF_Library.java rename to tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/TF_Library.java index 48919a8fda1..d367aa20126 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/TF_Library.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/TF_Library.java @@ -1,19 +1,19 @@ // Targeted by JavaCPP version 1.5.1: DO NOT EDIT THIS FILE -package org.tensorflow.c_api; +package org.tensorflow.internal.c_api; import java.nio.*; import org.bytedeco.javacpp.*; import org.bytedeco.javacpp.annotation.*; -import static org.tensorflow.c_api.global.tensorflow.*; +import static org.tensorflow.internal.c_api.global.tensorflow.*; // -------------------------------------------------------------------------- // Load plugins containing custom ops and kernels // TF_Library holds information about dynamically loaded TensorFlow plugins. -@Opaque @Properties(inherit = org.tensorflow.c_api.presets.tensorflow.class) +@Opaque @Properties(inherit = org.tensorflow.internal.c_api.presets.tensorflow.class) public class TF_Library extends Pointer { /** Empty constructor. Calls {@code super((Pointer)null)}. */ public TF_Library() { super((Pointer)null); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/TF_OpDefinitionBuilder.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/TF_OpDefinitionBuilder.java similarity index 71% rename from tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/TF_OpDefinitionBuilder.java rename to tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/TF_OpDefinitionBuilder.java index 184cd487f26..7f708de3f24 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/TF_OpDefinitionBuilder.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/TF_OpDefinitionBuilder.java @@ -1,14 +1,14 @@ // Targeted by JavaCPP version 1.5.1: DO NOT EDIT THIS FILE -package org.tensorflow.c_api; +package org.tensorflow.internal.c_api; import java.nio.*; import org.bytedeco.javacpp.*; import org.bytedeco.javacpp.annotation.*; -import static org.tensorflow.c_api.global.tensorflow.*; +import static org.tensorflow.internal.c_api.global.tensorflow.*; -@Opaque @Properties(inherit = org.tensorflow.c_api.presets.tensorflow.class) +@Opaque @Properties(inherit = org.tensorflow.internal.c_api.presets.tensorflow.class) public class TF_OpDefinitionBuilder extends Pointer { /** Empty constructor. Calls {@code super((Pointer)null)}. */ public TF_OpDefinitionBuilder() { super((Pointer)null); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/TF_OpKernelConstruction.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/TF_OpKernelConstruction.java similarity index 71% rename from tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/TF_OpKernelConstruction.java rename to tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/TF_OpKernelConstruction.java index b9b393859fd..86b1b5f5665 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/TF_OpKernelConstruction.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/TF_OpKernelConstruction.java @@ -1,14 +1,14 @@ // Targeted by JavaCPP version 1.5.1: DO NOT EDIT THIS FILE -package org.tensorflow.c_api; +package org.tensorflow.internal.c_api; import java.nio.*; import org.bytedeco.javacpp.*; import org.bytedeco.javacpp.annotation.*; -import static org.tensorflow.c_api.global.tensorflow.*; +import static org.tensorflow.internal.c_api.global.tensorflow.*; -@Opaque @Properties(inherit = org.tensorflow.c_api.presets.tensorflow.class) +@Opaque @Properties(inherit = org.tensorflow.internal.c_api.presets.tensorflow.class) public class TF_OpKernelConstruction extends Pointer { /** Empty constructor. Calls {@code super((Pointer)null)}. */ public TF_OpKernelConstruction() { super((Pointer)null); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/TF_OpKernelContext.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/TF_OpKernelContext.java similarity index 71% rename from tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/TF_OpKernelContext.java rename to tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/TF_OpKernelContext.java index fbfa2527a67..1aceaf9edce 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/TF_OpKernelContext.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/TF_OpKernelContext.java @@ -1,14 +1,14 @@ // Targeted by JavaCPP version 1.5.1: DO NOT EDIT THIS FILE -package org.tensorflow.c_api; +package org.tensorflow.internal.c_api; import java.nio.*; import org.bytedeco.javacpp.*; import org.bytedeco.javacpp.annotation.*; -import static org.tensorflow.c_api.global.tensorflow.*; +import static org.tensorflow.internal.c_api.global.tensorflow.*; -@Opaque @Properties(inherit = org.tensorflow.c_api.presets.tensorflow.class) +@Opaque @Properties(inherit = org.tensorflow.internal.c_api.presets.tensorflow.class) public class TF_OpKernelContext extends Pointer { /** Empty constructor. Calls {@code super((Pointer)null)}. */ public TF_OpKernelContext() { super((Pointer)null); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/TF_Operation.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/TF_Operation.java similarity index 76% rename from tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/TF_Operation.java rename to tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/TF_Operation.java index 4ea255b423d..df5c028da80 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/TF_Operation.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/TF_Operation.java @@ -1,18 +1,18 @@ // Targeted by JavaCPP version 1.5.1: DO NOT EDIT THIS FILE -package org.tensorflow.c_api; +package org.tensorflow.internal.c_api; import java.nio.*; import org.bytedeco.javacpp.*; import org.bytedeco.javacpp.annotation.*; -import static org.tensorflow.c_api.global.tensorflow.*; +import static org.tensorflow.internal.c_api.global.tensorflow.*; // Operation that has been added to the graph. Valid until the graph is // deleted -- in particular adding a new operation to the graph does not // invalidate old TF_Operation* pointers. -@Opaque @Properties(inherit = org.tensorflow.c_api.presets.tensorflow.class) +@Opaque @Properties(inherit = org.tensorflow.internal.c_api.presets.tensorflow.class) public class TF_Operation extends Pointer { /** Empty constructor. Calls {@code super((Pointer)null)}. */ public TF_Operation() { super((Pointer)null); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/TF_OperationDescription.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/TF_OperationDescription.java similarity index 74% rename from tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/TF_OperationDescription.java rename to tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/TF_OperationDescription.java index 04f526bab77..8757cf6ee75 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/TF_OperationDescription.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/TF_OperationDescription.java @@ -1,16 +1,16 @@ // Targeted by JavaCPP version 1.5.1: DO NOT EDIT THIS FILE -package org.tensorflow.c_api; +package org.tensorflow.internal.c_api; import java.nio.*; import org.bytedeco.javacpp.*; import org.bytedeco.javacpp.annotation.*; -import static org.tensorflow.c_api.global.tensorflow.*; +import static org.tensorflow.internal.c_api.global.tensorflow.*; // Operation being built. The underlying graph must outlive this. -@Opaque @Properties(inherit = org.tensorflow.c_api.presets.tensorflow.class) +@Opaque @Properties(inherit = org.tensorflow.internal.c_api.presets.tensorflow.class) public class TF_OperationDescription extends Pointer { /** Empty constructor. Calls {@code super((Pointer)null)}. */ public TF_OperationDescription() { super((Pointer)null); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/TF_Output.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/TF_Output.java similarity index 85% rename from tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/TF_Output.java rename to tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/TF_Output.java index 3efb91eb7cd..5fb11c29fd1 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/TF_Output.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/TF_Output.java @@ -1,16 +1,16 @@ // Targeted by JavaCPP version 1.5.1: DO NOT EDIT THIS FILE -package org.tensorflow.c_api; +package org.tensorflow.internal.c_api; import java.nio.*; import org.bytedeco.javacpp.*; import org.bytedeco.javacpp.annotation.*; -import static org.tensorflow.c_api.global.tensorflow.*; +import static org.tensorflow.internal.c_api.global.tensorflow.*; // Represents a specific output of an operation. -@Properties(inherit = org.tensorflow.c_api.presets.tensorflow.class) +@Properties(inherit = org.tensorflow.internal.c_api.presets.tensorflow.class) public class TF_Output extends Pointer { static { Loader.load(); } /** Default native constructor. */ diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/TF_Server.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/TF_Server.java similarity index 83% rename from tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/TF_Server.java rename to tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/TF_Server.java index 00221c91734..84d8725d866 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/TF_Server.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/TF_Server.java @@ -1,12 +1,12 @@ // Targeted by JavaCPP version 1.5.1: DO NOT EDIT THIS FILE -package org.tensorflow.c_api; +package org.tensorflow.internal.c_api; import java.nio.*; import org.bytedeco.javacpp.*; import org.bytedeco.javacpp.annotation.*; -import static org.tensorflow.c_api.global.tensorflow.*; +import static org.tensorflow.internal.c_api.global.tensorflow.*; // -------------------------------------------------------------------------- @@ -18,7 +18,7 @@ // cluster. // In-process TensorFlow server. -@Opaque @Properties(inherit = org.tensorflow.c_api.presets.tensorflow.class) +@Opaque @Properties(inherit = org.tensorflow.internal.c_api.presets.tensorflow.class) public class TF_Server extends Pointer { /** Empty constructor. Calls {@code super((Pointer)null)}. */ public TF_Server() { super((Pointer)null); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/TF_Session.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/TF_Session.java similarity index 68% rename from tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/TF_Session.java rename to tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/TF_Session.java index a85038a5670..96fd0ba13c2 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/TF_Session.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/TF_Session.java @@ -1,12 +1,12 @@ // Targeted by JavaCPP version 1.5.1: DO NOT EDIT THIS FILE -package org.tensorflow.c_api; +package org.tensorflow.internal.c_api; import java.nio.*; import org.bytedeco.javacpp.*; import org.bytedeco.javacpp.annotation.*; -import static org.tensorflow.c_api.global.tensorflow.*; +import static org.tensorflow.internal.c_api.global.tensorflow.*; // TODO(josh11b): Register OpDef, available to all operations added @@ -15,8 +15,8 @@ // -------------------------------------------------------------------------- // API for driving Graph execution. -@Opaque @Properties(inherit = org.tensorflow.c_api.presets.tensorflow.class) -public class TF_Session extends org.tensorflow.c_api.AbstractTF_Session { +@Opaque @Properties(inherit = org.tensorflow.internal.c_api.presets.tensorflow.class) +public class TF_Session extends org.tensorflow.internal.c_api.AbstractTF_Session { /** Empty constructor. Calls {@code super((Pointer)null)}. */ public TF_Session() { super((Pointer)null); } /** Pointer cast constructor. Invokes {@link Pointer#Pointer(Pointer)}. */ diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/TF_SessionOptions.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/TF_SessionOptions.java similarity index 66% rename from tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/TF_SessionOptions.java rename to tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/TF_SessionOptions.java index ae7d7d48bf9..3d0eff0c2d2 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/TF_SessionOptions.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/TF_SessionOptions.java @@ -1,18 +1,18 @@ // Targeted by JavaCPP version 1.5.1: DO NOT EDIT THIS FILE -package org.tensorflow.c_api; +package org.tensorflow.internal.c_api; import java.nio.*; import org.bytedeco.javacpp.*; import org.bytedeco.javacpp.annotation.*; -import static org.tensorflow.c_api.global.tensorflow.*; +import static org.tensorflow.internal.c_api.global.tensorflow.*; // -------------------------------------------------------------------------- // TF_SessionOptions holds options that can be passed during session creation. -@Opaque @Properties(inherit = org.tensorflow.c_api.presets.tensorflow.class) -public class TF_SessionOptions extends org.tensorflow.c_api.AbstractTF_SessionOptions { +@Opaque @Properties(inherit = org.tensorflow.internal.c_api.presets.tensorflow.class) +public class TF_SessionOptions extends org.tensorflow.internal.c_api.AbstractTF_SessionOptions { /** Empty constructor. Calls {@code super((Pointer)null)}. */ public TF_SessionOptions() { super((Pointer)null); } /** Pointer cast constructor. Invokes {@link Pointer#Pointer(Pointer)}. */ diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/TF_ShapeHandle.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/TF_ShapeHandle.java similarity index 70% rename from tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/TF_ShapeHandle.java rename to tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/TF_ShapeHandle.java index 5c69f582182..be32e10bfe4 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/TF_ShapeHandle.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/TF_ShapeHandle.java @@ -1,14 +1,14 @@ // Targeted by JavaCPP version 1.5.1: DO NOT EDIT THIS FILE -package org.tensorflow.c_api; +package org.tensorflow.internal.c_api; import java.nio.*; import org.bytedeco.javacpp.*; import org.bytedeco.javacpp.annotation.*; -import static org.tensorflow.c_api.global.tensorflow.*; +import static org.tensorflow.internal.c_api.global.tensorflow.*; -@Opaque @Properties(inherit = org.tensorflow.c_api.presets.tensorflow.class) +@Opaque @Properties(inherit = org.tensorflow.internal.c_api.presets.tensorflow.class) public class TF_ShapeHandle extends Pointer { /** Empty constructor. Calls {@code super((Pointer)null)}. */ public TF_ShapeHandle() { super((Pointer)null); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/TF_ShapeInferenceContext.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/TF_ShapeInferenceContext.java similarity index 71% rename from tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/TF_ShapeInferenceContext.java rename to tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/TF_ShapeInferenceContext.java index 89c90706c56..9f5a95fd889 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/TF_ShapeInferenceContext.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/TF_ShapeInferenceContext.java @@ -1,14 +1,14 @@ // Targeted by JavaCPP version 1.5.1: DO NOT EDIT THIS FILE -package org.tensorflow.c_api; +package org.tensorflow.internal.c_api; import java.nio.*; import org.bytedeco.javacpp.*; import org.bytedeco.javacpp.annotation.*; -import static org.tensorflow.c_api.global.tensorflow.*; +import static org.tensorflow.internal.c_api.global.tensorflow.*; -@Opaque @Properties(inherit = org.tensorflow.c_api.presets.tensorflow.class) +@Opaque @Properties(inherit = org.tensorflow.internal.c_api.presets.tensorflow.class) public class TF_ShapeInferenceContext extends Pointer { /** Empty constructor. Calls {@code super((Pointer)null)}. */ public TF_ShapeInferenceContext() { super((Pointer)null); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/TF_Status.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/TF_Status.java similarity index 60% rename from tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/TF_Status.java rename to tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/TF_Status.java index cfa727ed7ff..b3fcf5356f3 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/TF_Status.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/TF_Status.java @@ -1,17 +1,17 @@ // Targeted by JavaCPP version 1.5.1: DO NOT EDIT THIS FILE -package org.tensorflow.c_api; +package org.tensorflow.internal.c_api; import java.nio.*; import org.bytedeco.javacpp.*; import org.bytedeco.javacpp.annotation.*; -import static org.tensorflow.c_api.global.tensorflow.*; +import static org.tensorflow.internal.c_api.global.tensorflow.*; // #endif -@Opaque @Properties(inherit = org.tensorflow.c_api.presets.tensorflow.class) -public class TF_Status extends org.tensorflow.c_api.AbstractTF_Status { +@Opaque @Properties(inherit = org.tensorflow.internal.c_api.presets.tensorflow.class) +public class TF_Status extends org.tensorflow.internal.c_api.AbstractTF_Status { /** Empty constructor. Calls {@code super((Pointer)null)}. */ public TF_Status() { super((Pointer)null); } /** Pointer cast constructor. Invokes {@link Pointer#Pointer(Pointer)}. */ diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/TF_Tensor.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/TF_Tensor.java similarity index 80% rename from tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/TF_Tensor.java rename to tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/TF_Tensor.java index e558ef6967e..31e44123c2c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/TF_Tensor.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/TF_Tensor.java @@ -1,12 +1,12 @@ // Targeted by JavaCPP version 1.5.1: DO NOT EDIT THIS FILE -package org.tensorflow.c_api; +package org.tensorflow.internal.c_api; import java.nio.*; import org.bytedeco.javacpp.*; import org.bytedeco.javacpp.annotation.*; -import static org.tensorflow.c_api.global.tensorflow.*; +import static org.tensorflow.internal.c_api.global.tensorflow.*; // #endif @@ -27,8 +27,8 @@ // is encoded at data[start_offset[i]]]. TF_StringEncode and TF_StringDecode // facilitate this encoding. -@Opaque @Properties(inherit = org.tensorflow.c_api.presets.tensorflow.class) -public class TF_Tensor extends org.tensorflow.c_api.AbstractTF_Tensor { +@Opaque @Properties(inherit = org.tensorflow.internal.c_api.presets.tensorflow.class) +public class TF_Tensor extends org.tensorflow.internal.c_api.AbstractTF_Tensor { /** Empty constructor. Calls {@code super((Pointer)null)}. */ public TF_Tensor() { super((Pointer)null); } /** Pointer cast constructor. Invokes {@link Pointer#Pointer(Pointer)}. */ diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/TF_WhileParams.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/TF_WhileParams.java similarity index 88% rename from tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/TF_WhileParams.java rename to tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/TF_WhileParams.java index 8282de2d75e..d531226a7be 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/TF_WhileParams.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/TF_WhileParams.java @@ -1,15 +1,15 @@ // Targeted by JavaCPP version 1.5.1: DO NOT EDIT THIS FILE -package org.tensorflow.c_api; +package org.tensorflow.internal.c_api; import java.nio.*; import org.bytedeco.javacpp.*; import org.bytedeco.javacpp.annotation.*; -import static org.tensorflow.c_api.global.tensorflow.*; +import static org.tensorflow.internal.c_api.global.tensorflow.*; -@Properties(inherit = org.tensorflow.c_api.presets.tensorflow.class) +@Properties(inherit = org.tensorflow.internal.c_api.presets.tensorflow.class) public class TF_WhileParams extends Pointer { static { Loader.load(); } /** Pointer cast constructor. Invokes {@link Pointer#Pointer(Pointer)}. */ diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/Tensor.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/Tensor.java similarity index 83% rename from tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/Tensor.java rename to tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/Tensor.java index 96c523c9030..84ff8778b02 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/Tensor.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/Tensor.java @@ -1,12 +1,12 @@ // Targeted by JavaCPP version 1.5.1: DO NOT EDIT THIS FILE -package org.tensorflow.c_api; +package org.tensorflow.internal.c_api; import java.nio.*; import org.bytedeco.javacpp.*; import org.bytedeco.javacpp.annotation.*; -import static org.tensorflow.c_api.global.tensorflow.*; +import static org.tensorflow.internal.c_api.global.tensorflow.*; /* end extern "C" */ // #endif @@ -16,7 +16,7 @@ // // TODO(ashankar): Figure out an alternative scheme that precludes the need for // these API-boundary breaking methods. -@Namespace("tensorflow") @Opaque @Properties(inherit = org.tensorflow.c_api.presets.tensorflow.class) +@Namespace("tensorflow") @Opaque @Properties(inherit = org.tensorflow.internal.c_api.presets.tensorflow.class) public class Tensor extends Pointer { /** Empty constructor. Calls {@code super((Pointer)null)}. */ public Tensor() { super((Pointer)null); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/global/tensorflow.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/global/tensorflow.java similarity index 99% rename from tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/global/tensorflow.java rename to tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/global/tensorflow.java index 1b29fe5f693..402032162c4 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/c_api/global/tensorflow.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/internal/c_api/global/tensorflow.java @@ -1,14 +1,14 @@ // Targeted by JavaCPP version 1.5.1: DO NOT EDIT THIS FILE -package org.tensorflow.c_api.global; +package org.tensorflow.internal.c_api.global; -import org.tensorflow.c_api.*; +import org.tensorflow.internal.c_api.*; import java.nio.*; import org.bytedeco.javacpp.*; import org.bytedeco.javacpp.annotation.*; -public class tensorflow extends org.tensorflow.c_api.presets.tensorflow { +public class tensorflow extends org.tensorflow.internal.c_api.presets.tensorflow { static { Loader.load(); } // Parsed from tensorflow/c/tf_attrtype.h diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/audio/AudioSpectrogram.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/audio/AudioSpectrogram.java index bf5df8c5108..1dcbdc28da5 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/audio/AudioSpectrogram.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/audio/AudioSpectrogram.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TFloat; /** * Produces a visualization of audio data over time. @@ -55,7 +56,7 @@ * resulting spectrogram as a PNG image. */ @Operator(group = "audio") -public final class AudioSpectrogram extends PrimitiveOp implements Operand { +public final class AudioSpectrogram extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.audio.AudioSpectrogram} @@ -88,7 +89,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of AudioSpectrogram */ - public static AudioSpectrogram create(Scope scope, Operand input, Long windowSize, Long stride, Options... options) { + public static AudioSpectrogram create(Scope scope, Operand input, Long windowSize, Long stride, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("AudioSpectrogram", scope.makeOpName("AudioSpectrogram")); opBuilder.addInput(input.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); @@ -115,16 +116,16 @@ public static Options magnitudeSquared(Boolean magnitudeSquared) { /** * 3D representation of the audio frequencies as an image. */ - public Output spectrogram() { + public Output spectrogram() { return spectrogram; } @Override - public Output asOutput() { + public Output asOutput() { return spectrogram; } - private Output spectrogram; + private Output spectrogram; private AudioSpectrogram(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/audio/DecodeWav.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/audio/DecodeWav.java index edfa440525f..4202e0f221e 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/audio/DecodeWav.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/audio/DecodeWav.java @@ -24,6 +24,9 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TFloat; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.TString; /** * Decode a 16-bit PCM WAV file to a float tensor. @@ -82,7 +85,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of DecodeWav */ - public static DecodeWav create(Scope scope, Operand contents, Options... options) { + public static DecodeWav create(Scope scope, Operand contents, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("DecodeWav", scope.makeOpName("DecodeWav")); opBuilder.addInput(contents.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); @@ -116,19 +119,19 @@ public static Options desiredSamples(Long desiredSamples) { /** * 2-D with shape `[length, channels]`. */ - public Output audio() { + public Output audio() { return audio; } /** * Scalar holding the sample rate found in the WAV header. */ - public Output sampleRate() { + public Output sampleRate() { return sampleRate; } - private Output audio; - private Output sampleRate; + private Output audio; + private Output sampleRate; private DecodeWav(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/audio/EncodeWav.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/audio/EncodeWav.java index d27962e74b1..5243e7f2539 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/audio/EncodeWav.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/audio/EncodeWav.java @@ -24,6 +24,9 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TFloat; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.TString; /** * Encode audio data using the WAV file format. @@ -37,7 +40,7 @@ * `sample_rate` is a scalar Tensor holding the rate to use (e.g. 44100). */ @Operator(group = "audio") -public final class EncodeWav extends PrimitiveOp implements Operand { +public final class EncodeWav extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new EncodeWav operation. @@ -47,7 +50,7 @@ public final class EncodeWav extends PrimitiveOp implements Operand { * @param sampleRate Scalar containing the sample frequency. * @return a new instance of EncodeWav */ - public static EncodeWav create(Scope scope, Operand audio, Operand sampleRate) { + public static EncodeWav create(Scope scope, Operand audio, Operand sampleRate) { OperationBuilder opBuilder = scope.env().opBuilder("EncodeWav", scope.makeOpName("EncodeWav")); opBuilder.addInput(audio.asOutput()); opBuilder.addInput(sampleRate.asOutput()); @@ -58,16 +61,16 @@ public static EncodeWav create(Scope scope, Operand audio, Operand contents() { + public Output contents() { return contents; } @Override - public Output asOutput() { + public Output asOutput() { return contents; } - private Output contents; + private Output contents; private EncodeWav(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/audio/Mfcc.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/audio/Mfcc.java index 46dd8f7de39..a8a3c14c07c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/audio/Mfcc.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/audio/Mfcc.java @@ -24,6 +24,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TFloat; +import org.tensorflow.types.TInt32; /** * Transforms a spectrogram into a form that's useful for speech recognition. @@ -36,7 +38,7 @@ * is a good resource to learn more. */ @Operator(group = "audio") -public final class Mfcc extends PrimitiveOp implements Operand { +public final class Mfcc extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.audio.Mfcc} @@ -96,7 +98,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of Mfcc */ - public static Mfcc create(Scope scope, Operand spectrogram, Operand sampleRate, Options... options) { + public static Mfcc create(Scope scope, Operand spectrogram, Operand sampleRate, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("Mfcc", scope.makeOpName("Mfcc")); opBuilder.addInput(spectrogram.asOutput()); opBuilder.addInput(sampleRate.asOutput()); @@ -152,16 +154,16 @@ public static Options dctCoefficientCount(Long dctCoefficientCount) { /** */ - public Output output() { + public Output output() { return output; } @Override - public Output asOutput() { + public Output asOutput() { return output; } - private Output output; + private Output output; private Mfcc(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/bitwise/BitwiseAnd.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/bitwise/BitwiseAnd.java index 0ce6491da8d..2b74ca95ac2 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/bitwise/BitwiseAnd.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/bitwise/BitwiseAnd.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Elementwise computes the bitwise AND of `x` and `y`. @@ -51,7 +52,7 @@ * @param data type for {@code z()} output */ @Operator(group = "bitwise") -public final class BitwiseAnd extends PrimitiveOp implements Operand { +public final class BitwiseAnd extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new BitwiseAnd operation. @@ -61,7 +62,7 @@ public final class BitwiseAnd extends PrimitiveOp implements O * @param y * @return a new instance of BitwiseAnd */ - public static BitwiseAnd create(Scope scope, Operand x, Operand y) { + public static BitwiseAnd create(Scope scope, Operand x, Operand y) { OperationBuilder opBuilder = scope.env().opBuilder("BitwiseAnd", scope.makeOpName("BitwiseAnd")); opBuilder.addInput(x.asOutput()); opBuilder.addInput(y.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/bitwise/BitwiseOr.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/bitwise/BitwiseOr.java index f90a598b69d..f4be59bccce 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/bitwise/BitwiseOr.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/bitwise/BitwiseOr.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Elementwise computes the bitwise OR of `x` and `y`. @@ -51,7 +52,7 @@ * @param data type for {@code z()} output */ @Operator(group = "bitwise") -public final class BitwiseOr extends PrimitiveOp implements Operand { +public final class BitwiseOr extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new BitwiseOr operation. @@ -61,7 +62,7 @@ public final class BitwiseOr extends PrimitiveOp implements Op * @param y * @return a new instance of BitwiseOr */ - public static BitwiseOr create(Scope scope, Operand x, Operand y) { + public static BitwiseOr create(Scope scope, Operand x, Operand y) { OperationBuilder opBuilder = scope.env().opBuilder("BitwiseOr", scope.makeOpName("BitwiseOr")); opBuilder.addInput(x.asOutput()); opBuilder.addInput(y.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/bitwise/BitwiseXor.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/bitwise/BitwiseXor.java index 143cf06cd47..4bbd7d0c355 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/bitwise/BitwiseXor.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/bitwise/BitwiseXor.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Elementwise computes the bitwise XOR of `x` and `y`. @@ -51,7 +52,7 @@ * @param data type for {@code z()} output */ @Operator(group = "bitwise") -public final class BitwiseXor extends PrimitiveOp implements Operand { +public final class BitwiseXor extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new BitwiseXor operation. @@ -61,7 +62,7 @@ public final class BitwiseXor extends PrimitiveOp implements O * @param y * @return a new instance of BitwiseXor */ - public static BitwiseXor create(Scope scope, Operand x, Operand y) { + public static BitwiseXor create(Scope scope, Operand x, Operand y) { OperationBuilder opBuilder = scope.env().opBuilder("BitwiseXor", scope.makeOpName("BitwiseXor")); opBuilder.addInput(x.asOutput()); opBuilder.addInput(y.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/bitwise/Invert.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/bitwise/Invert.java index 820b767124c..e110bdd5223 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/bitwise/Invert.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/bitwise/Invert.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Invert (flip) each bit of supported types; for example, type `uint8` value 01010101 becomes 10101010. @@ -72,7 +73,7 @@ * @param data type for {@code y()} output */ @Operator(group = "bitwise") -public final class Invert extends PrimitiveOp implements Operand { +public final class Invert extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new Invert operation. @@ -81,7 +82,7 @@ public final class Invert extends PrimitiveOp implements Opera * @param x * @return a new instance of Invert */ - public static Invert create(Scope scope, Operand x) { + public static Invert create(Scope scope, Operand x) { OperationBuilder opBuilder = scope.env().opBuilder("Invert", scope.makeOpName("Invert")); opBuilder.addInput(x.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/bitwise/LeftShift.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/bitwise/LeftShift.java index 542d99fa858..cdbd3f766c5 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/bitwise/LeftShift.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/bitwise/LeftShift.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Elementwise computes the bitwise left-shift of `x` and `y`. @@ -62,7 +63,7 @@ * @param data type for {@code z()} output */ @Operator(group = "bitwise") -public final class LeftShift extends PrimitiveOp implements Operand { +public final class LeftShift extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new LeftShift operation. @@ -72,7 +73,7 @@ public final class LeftShift extends PrimitiveOp implements Op * @param y * @return a new instance of LeftShift */ - public static LeftShift create(Scope scope, Operand x, Operand y) { + public static LeftShift create(Scope scope, Operand x, Operand y) { OperationBuilder opBuilder = scope.env().opBuilder("LeftShift", scope.makeOpName("LeftShift")); opBuilder.addInput(x.asOutput()); opBuilder.addInput(y.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/bitwise/RightShift.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/bitwise/RightShift.java index 7056bcd0bd7..546fe09f2b3 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/bitwise/RightShift.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/bitwise/RightShift.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Elementwise computes the bitwise right-shift of `x` and `y`. @@ -65,7 +66,7 @@ * @param data type for {@code z()} output */ @Operator(group = "bitwise") -public final class RightShift extends PrimitiveOp implements Operand { +public final class RightShift extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new RightShift operation. @@ -75,7 +76,7 @@ public final class RightShift extends PrimitiveOp implements O * @param y * @return a new instance of RightShift */ - public static RightShift create(Scope scope, Operand x, Operand y) { + public static RightShift create(Scope scope, Operand x, Operand y) { OperationBuilder opBuilder = scope.env().opBuilder("RightShift", scope.makeOpName("RightShift")); opBuilder.addInput(x.asOutput()); opBuilder.addInput(y.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/collective/AllReduce.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/collective/AllReduce.java index 4de01a25eb3..365b37d0800 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/collective/AllReduce.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/collective/AllReduce.java @@ -24,13 +24,14 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.family.TNumber; /** * Mutually reduces multiple tensors of identical type and shape. * * @param data type for {@code data()} output */ -public final class AllReduce extends PrimitiveOp implements Operand { +public final class AllReduce extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.collective.AllReduce} @@ -65,7 +66,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of AllReduce */ - public static AllReduce create(Scope scope, Operand input, Long groupSize, Long groupKey, Long instanceKey, String mergeOp, String finalOp, List subdivOffsets, Options... options) { + public static AllReduce create(Scope scope, Operand input, Long groupSize, Long groupKey, Long instanceKey, String mergeOp, String finalOp, List subdivOffsets, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("CollectiveReduce", scope.makeOpName("AllReduce")); opBuilder.addInput(input.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/collective/BroadcastRecv.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/collective/BroadcastRecv.java index a4139051b33..6b33f28a62c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/collective/BroadcastRecv.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/collective/BroadcastRecv.java @@ -22,16 +22,17 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.family.TNumber; /** * Receives a tensor value broadcast from another device. * * @param data type for {@code data()} output */ -public final class BroadcastRecv extends PrimitiveOp implements Operand { +public final class BroadcastRecv extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new BroadcastRecv operation. @@ -44,10 +45,10 @@ public final class BroadcastRecv extends PrimitiveOp implement * @param shape * @return a new instance of BroadcastRecv */ - public static BroadcastRecv create(Scope scope, Class T, Long groupSize, Long groupKey, Long instanceKey, Shape shape) { + public static BroadcastRecv create(Scope scope, DataType T, Long groupSize, Long groupKey, Long instanceKey, Shape shape) { OperationBuilder opBuilder = scope.env().opBuilder("CollectiveBcastRecv", scope.makeOpName("BroadcastRecv")); opBuilder = scope.applyControlDependencies(opBuilder); - opBuilder.setAttr("T", DataType.fromClass(T)); + opBuilder.setAttr("T", T); opBuilder.setAttr("group_size", groupSize); opBuilder.setAttr("group_key", groupKey); opBuilder.setAttr("instance_key", instanceKey); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/collective/BroadcastSend.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/collective/BroadcastSend.java index e841263806c..6298f51c912 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/collective/BroadcastSend.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/collective/BroadcastSend.java @@ -21,16 +21,17 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.family.TNumber; /** * Broadcasts a tensor value to one or more other devices. * * @param data type for {@code data()} output */ -public final class BroadcastSend extends PrimitiveOp implements Operand { +public final class BroadcastSend extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new BroadcastSend operation. @@ -43,7 +44,7 @@ public final class BroadcastSend extends PrimitiveOp implement * @param shape * @return a new instance of BroadcastSend */ - public static BroadcastSend create(Scope scope, Operand input, Long groupSize, Long groupKey, Long instanceKey, Shape shape) { + public static BroadcastSend create(Scope scope, Operand input, Long groupSize, Long groupKey, Long instanceKey, Shape shape) { OperationBuilder opBuilder = scope.env().opBuilder("CollectiveBcastSend", scope.makeOpName("BroadcastSend")); opBuilder.addInput(input.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/All.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/All.java index 39e34318b0d..3ed6b47d734 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/All.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/All.java @@ -24,6 +24,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TBool; +import org.tensorflow.types.family.TNumber; /** * Computes the "logical and" of elements across dimensions of a tensor. @@ -34,7 +36,7 @@ * retained with length 1. */ @Operator -public final class All extends PrimitiveOp implements Operand { +public final class All extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.core.All} @@ -65,7 +67,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of All */ - public static All create(Scope scope, Operand input, Operand axis, Options... options) { + public static All create(Scope scope, Operand input, Operand axis, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("All", scope.makeOpName("All")); opBuilder.addInput(input.asOutput()); opBuilder.addInput(axis.asOutput()); @@ -90,16 +92,16 @@ public static Options keepDims(Boolean keepDims) { /** * The reduced tensor. */ - public Output output() { + public Output output() { return output; } @Override - public Output asOutput() { + public Output asOutput() { return output; } - private Output output; + private Output output; private All(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/AllToAll.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/AllToAll.java index 03a58e54eac..4b9caedf640 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/AllToAll.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/AllToAll.java @@ -23,6 +23,7 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TInt32; /** * An Op to exchange data across TPU replicas. @@ -62,7 +63,7 @@ public final class AllToAll extends PrimitiveOp implements Operand { * size(group_assignment.get_shape()[1]) * @return a new instance of AllToAll */ - public static AllToAll create(Scope scope, Operand input, Operand groupAssignment, Long concatDimension, Long splitDimension, Long splitCount) { + public static AllToAll create(Scope scope, Operand input, Operand groupAssignment, Long concatDimension, Long splitDimension, Long splitCount) { OperationBuilder opBuilder = scope.env().opBuilder("AllToAll", scope.makeOpName("AllToAll")); opBuilder.addInput(input.asOutput()); opBuilder.addInput(groupAssignment.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/AnonymousIteratorV2.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/AnonymousIteratorV2.java index cf6443c0096..dc4138e68a6 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/AnonymousIteratorV2.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/AnonymousIteratorV2.java @@ -22,7 +22,7 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; @@ -39,12 +39,12 @@ public final class AnonymousIteratorV2 extends PrimitiveOp { * @param outputShapes * @return a new instance of AnonymousIteratorV2 */ - public static AnonymousIteratorV2 create(Scope scope, List> outputTypes, List outputShapes) { + public static AnonymousIteratorV2 create(Scope scope, List> outputTypes, List outputShapes) { OperationBuilder opBuilder = scope.env().opBuilder("AnonymousIteratorV2", scope.makeOpName("AnonymousIteratorV2")); opBuilder = scope.applyControlDependencies(opBuilder); DataType[] outputTypesArray = new DataType[outputTypes.size()]; for (int i = 0; i < outputTypesArray.length; ++i) { - outputTypesArray[i] = DataType.fromClass(outputTypes.get(i)); + outputTypesArray[i] = outputTypes.get(i); } opBuilder.setAttr("output_types", outputTypesArray); Shape[] outputShapesArray = new Shape[outputShapes.size()]; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/AnonymousMultiDeviceIterator.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/AnonymousMultiDeviceIterator.java index 1928b0a7e5a..c4b6656b38a 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/AnonymousMultiDeviceIterator.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/AnonymousMultiDeviceIterator.java @@ -22,7 +22,7 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; @@ -40,7 +40,7 @@ public final class AnonymousMultiDeviceIterator extends PrimitiveOp { * @param outputShapes * @return a new instance of AnonymousMultiDeviceIterator */ - public static AnonymousMultiDeviceIterator create(Scope scope, List devices, List> outputTypes, List outputShapes) { + public static AnonymousMultiDeviceIterator create(Scope scope, List devices, List> outputTypes, List outputShapes) { OperationBuilder opBuilder = scope.env().opBuilder("AnonymousMultiDeviceIterator", scope.makeOpName("AnonymousMultiDeviceIterator")); opBuilder = scope.applyControlDependencies(opBuilder); String[] devicesArray = new String[devices.size()]; @@ -50,7 +50,7 @@ public static AnonymousMultiDeviceIterator create(Scope scope, List devi opBuilder.setAttr("devices", devicesArray); DataType[] outputTypesArray = new DataType[outputTypes.size()]; for (int i = 0; i < outputTypesArray.length; ++i) { - outputTypesArray[i] = DataType.fromClass(outputTypes.get(i)); + outputTypesArray[i] = outputTypes.get(i); } opBuilder.setAttr("output_types", outputTypesArray); Shape[] outputShapesArray = new Shape[outputShapes.size()]; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/AnonymousRandomSeedGenerator.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/AnonymousRandomSeedGenerator.java index 4730df2cfd0..fbc6043a446 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/AnonymousRandomSeedGenerator.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/AnonymousRandomSeedGenerator.java @@ -23,6 +23,7 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TInt64; /** */ @@ -36,7 +37,7 @@ public final class AnonymousRandomSeedGenerator extends PrimitiveOp { * @param seed2 * @return a new instance of AnonymousRandomSeedGenerator */ - public static AnonymousRandomSeedGenerator create(Scope scope, Operand seed, Operand seed2) { + public static AnonymousRandomSeedGenerator create(Scope scope, Operand seed, Operand seed2) { OperationBuilder opBuilder = scope.env().opBuilder("AnonymousRandomSeedGenerator", scope.makeOpName("AnonymousRandomSeedGenerator")); opBuilder.addInput(seed.asOutput()); opBuilder.addInput(seed2.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Any.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Any.java index e068c220781..0e7c17e73b6 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Any.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Any.java @@ -24,6 +24,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TBool; +import org.tensorflow.types.family.TNumber; /** * Computes the "logical or" of elements across dimensions of a tensor. @@ -34,7 +36,7 @@ * retained with length 1. */ @Operator -public final class Any extends PrimitiveOp implements Operand { +public final class Any extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.core.Any} @@ -65,7 +67,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of Any */ - public static Any create(Scope scope, Operand input, Operand axis, Options... options) { + public static Any create(Scope scope, Operand input, Operand axis, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("Any", scope.makeOpName("Any")); opBuilder.addInput(input.asOutput()); opBuilder.addInput(axis.asOutput()); @@ -90,16 +92,16 @@ public static Options keepDims(Boolean keepDims) { /** * The reduced tensor. */ - public Output output() { + public Output output() { return output; } @Override - public Output asOutput() { + public Output asOutput() { return output; } - private Output output; + private Output output; private Any(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/AssertNextDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/AssertNextDataset.java index 9cb09ac9bda..221969ff071 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/AssertNextDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/AssertNextDataset.java @@ -23,9 +23,10 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TString; /** */ @@ -41,14 +42,14 @@ public final class AssertNextDataset extends PrimitiveOp implements Operand inputDataset, Operand transformations, List> outputTypes, List outputShapes) { + public static AssertNextDataset create(Scope scope, Operand inputDataset, Operand transformations, List> outputTypes, List outputShapes) { OperationBuilder opBuilder = scope.env().opBuilder("AssertNextDataset", scope.makeOpName("AssertNextDataset")); opBuilder.addInput(inputDataset.asOutput()); opBuilder.addInput(transformations.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); DataType[] outputTypesArray = new DataType[outputTypes.size()]; for (int i = 0; i < outputTypesArray.length; ++i) { - outputTypesArray[i] = DataType.fromClass(outputTypes.get(i)); + outputTypesArray[i] = outputTypes.get(i); } opBuilder.setAttr("output_types", outputTypesArray); Shape[] outputShapesArray = new Shape[outputShapes.size()]; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/AssertThat.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/AssertThat.java index 8b5b9a08602..c2d2d77463f 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/AssertThat.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/AssertThat.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TBool; /** * Asserts that the given condition is true. @@ -62,7 +63,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of AssertThat */ - public static AssertThat create(Scope scope, Operand condition, Iterable> data, Options... options) { + public static AssertThat create(Scope scope, Operand condition, Iterable> data, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("Assert", scope.makeOpName("AssertThat")); opBuilder.addInput(condition.asOutput()); opBuilder.addInputList(Operands.asOutputs(data)); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/AutoShardDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/AutoShardDataset.java index 2a2842ffa70..bc457c10460 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/AutoShardDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/AutoShardDataset.java @@ -23,9 +23,10 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TInt64; /** * Creates a dataset that shards the input dataset. @@ -51,7 +52,7 @@ public final class AutoShardDataset extends PrimitiveOp implements Operand inputDataset, Operand numWorkers, Operand index, List> outputTypes, List outputShapes) { + public static AutoShardDataset create(Scope scope, Operand inputDataset, Operand numWorkers, Operand index, List> outputTypes, List outputShapes) { OperationBuilder opBuilder = scope.env().opBuilder("AutoShardDataset", scope.makeOpName("AutoShardDataset")); opBuilder.addInput(inputDataset.asOutput()); opBuilder.addInput(numWorkers.asOutput()); @@ -59,7 +60,7 @@ public static AutoShardDataset create(Scope scope, Operand inputDataset, Oper opBuilder = scope.applyControlDependencies(opBuilder); DataType[] outputTypesArray = new DataType[outputTypes.size()]; for (int i = 0; i < outputTypesArray.length; ++i) { - outputTypesArray[i] = DataType.fromClass(outputTypes.get(i)); + outputTypesArray[i] = outputTypes.get(i); } opBuilder.setAttr("output_types", outputTypesArray); Shape[] outputShapesArray = new Shape[outputShapes.size()]; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Barrier.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Barrier.java index ddd2d81aa28..e9ed8a64f5d 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Barrier.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Barrier.java @@ -23,10 +23,11 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TString; /** * Defines a barrier that persists across different graph executions. @@ -41,7 +42,7 @@ * and may be updated using BarrierInsertMany. */ @Operator -public final class Barrier extends PrimitiveOp implements Operand { +public final class Barrier extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.core.Barrier} @@ -102,12 +103,12 @@ private Options() { * @param options carries optional attributes values * @return a new instance of Barrier */ - public static Barrier create(Scope scope, List> componentTypes, Options... options) { + public static Barrier create(Scope scope, List> componentTypes, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("Barrier", scope.makeOpName("Barrier")); opBuilder = scope.applyControlDependencies(opBuilder); DataType[] componentTypesArray = new DataType[componentTypes.size()]; for (int i = 0; i < componentTypesArray.length; ++i) { - componentTypesArray[i] = DataType.fromClass(componentTypes.get(i)); + componentTypesArray[i] = componentTypes.get(i); } opBuilder.setAttr("component_types", componentTypesArray); if (options != null) { @@ -169,16 +170,16 @@ public static Options sharedName(String sharedName) { /** * The handle to the barrier. */ - public Output handle() { + public Output handle() { return handle; } @Override - public Output asOutput() { + public Output asOutput() { return handle; } - private Output handle; + private Output handle; private Barrier(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BarrierClose.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BarrierClose.java index d0128be4bf5..b73f4127f84 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BarrierClose.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BarrierClose.java @@ -23,6 +23,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TString; /** * Closes the given barrier. @@ -66,7 +67,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of BarrierClose */ - public static BarrierClose create(Scope scope, Operand handle, Options... options) { + public static BarrierClose create(Scope scope, Operand handle, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("BarrierClose", scope.makeOpName("BarrierClose")); opBuilder.addInput(handle.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BarrierIncompleteSize.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BarrierIncompleteSize.java index 6a7a68f9f17..85830ddcc34 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BarrierIncompleteSize.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BarrierIncompleteSize.java @@ -24,12 +24,14 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.TString; /** * Computes the number of incomplete elements in the given barrier. */ @Operator -public final class BarrierIncompleteSize extends PrimitiveOp implements Operand { +public final class BarrierIncompleteSize extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new BarrierIncompleteSize operation. @@ -38,7 +40,7 @@ public final class BarrierIncompleteSize extends PrimitiveOp implements Operand< * @param handle The handle to a barrier. * @return a new instance of BarrierIncompleteSize */ - public static BarrierIncompleteSize create(Scope scope, Operand handle) { + public static BarrierIncompleteSize create(Scope scope, Operand handle) { OperationBuilder opBuilder = scope.env().opBuilder("BarrierIncompleteSize", scope.makeOpName("BarrierIncompleteSize")); opBuilder.addInput(handle.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); @@ -49,16 +51,16 @@ public static BarrierIncompleteSize create(Scope scope, Operand handle) * The number of incomplete elements (i.e. those with some of their value * components not set) in the barrier. */ - public Output size() { + public Output size() { return size; } @Override - public Output asOutput() { + public Output asOutput() { return size; } - private Output size; + private Output size; private BarrierIncompleteSize(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BarrierInsertMany.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BarrierInsertMany.java index 396b099eda3..f9234c30ae4 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BarrierInsertMany.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BarrierInsertMany.java @@ -23,6 +23,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TString; /** * For each key, assigns the respective value to the specified component. @@ -46,7 +47,7 @@ public final class BarrierInsertMany extends PrimitiveOp { * @param componentIndex The component of the barrier elements that is being assigned. * @return a new instance of BarrierInsertMany */ - public static BarrierInsertMany create(Scope scope, Operand handle, Operand keys, Operand values, Long componentIndex) { + public static BarrierInsertMany create(Scope scope, Operand handle, Operand keys, Operand values, Long componentIndex) { OperationBuilder opBuilder = scope.env().opBuilder("BarrierInsertMany", scope.makeOpName("BarrierInsertMany")); opBuilder.addInput(handle.asOutput()); opBuilder.addInput(keys.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BarrierReadySize.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BarrierReadySize.java index 224d7c35f62..1218eb85915 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BarrierReadySize.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BarrierReadySize.java @@ -24,12 +24,14 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.TString; /** * Computes the number of complete elements in the given barrier. */ @Operator -public final class BarrierReadySize extends PrimitiveOp implements Operand { +public final class BarrierReadySize extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new BarrierReadySize operation. @@ -38,7 +40,7 @@ public final class BarrierReadySize extends PrimitiveOp implements Operand handle) { + public static BarrierReadySize create(Scope scope, Operand handle) { OperationBuilder opBuilder = scope.env().opBuilder("BarrierReadySize", scope.makeOpName("BarrierReadySize")); opBuilder.addInput(handle.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); @@ -49,16 +51,16 @@ public static BarrierReadySize create(Scope scope, Operand handle) { * The number of complete elements (i.e. those with all of their value * components set) in the barrier. */ - public Output size() { + public Output size() { return size; } @Override - public Output asOutput() { + public Output asOutput() { return size; } - private Output size; + private Output size; private BarrierReadySize(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BarrierTakeMany.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BarrierTakeMany.java index cc665d85999..cc09957acf9 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BarrierTakeMany.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BarrierTakeMany.java @@ -27,6 +27,9 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.TInt64; +import org.tensorflow.types.TString; /** * Takes the given number of completed elements from a barrier. @@ -93,14 +96,14 @@ private Options() { * @param options carries optional attributes values * @return a new instance of BarrierTakeMany */ - public static BarrierTakeMany create(Scope scope, Operand handle, Operand numElements, List> componentTypes, Options... options) { + public static BarrierTakeMany create(Scope scope, Operand handle, Operand numElements, List> componentTypes, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("BarrierTakeMany", scope.makeOpName("BarrierTakeMany")); opBuilder.addInput(handle.asOutput()); opBuilder.addInput(numElements.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); DataType[] componentTypesArray = new DataType[componentTypes.size()]; for (int i = 0; i < componentTypesArray.length; ++i) { - componentTypesArray[i] = DataType.fromClass(componentTypes.get(i)); + componentTypesArray[i] = componentTypes.get(i); } opBuilder.setAttr("component_types", componentTypesArray); if (options != null) { @@ -148,14 +151,14 @@ public static Options timeoutMs(Long timeoutMs) { * These indices refer to the batch in which the values were placed into the * barrier (starting with MIN_LONG and increasing with each BarrierInsertMany). */ - public Output indices() { + public Output indices() { return indices; } /** * A one-dimensional tensor of keys, with length num_elements. */ - public Output keys() { + public Output keys() { return keys; } @@ -167,8 +170,8 @@ public List> values() { return values; } - private Output indices; - private Output keys; + private Output indices; + private Output keys; private List> values; private BarrierTakeMany(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Batch.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Batch.java index bda8162d846..69c2c8d9e29 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Batch.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Batch.java @@ -27,6 +27,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt64; /** * Batches all input tensors nondeterministically. @@ -215,19 +216,19 @@ public List> batchedTensors() { /** */ - public Output batchIndex() { + public Output batchIndex() { return batchIndex; } /** */ - public Output id() { + public Output id() { return id; } private List> batchedTensors; - private Output batchIndex; - private Output id; + private Output batchIndex; + private Output id; private Batch(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BatchToSpace.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BatchToSpace.java index 331b44ff979..d445cb617d6 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BatchToSpace.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BatchToSpace.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * BatchToSpace for 4-D tensors of type T. @@ -57,7 +58,7 @@ public final class BatchToSpace extends PrimitiveOp implements Operand { * @param blockSize * @return a new instance of BatchToSpace */ - public static BatchToSpace create(Scope scope, Operand input, Operand crops, Long blockSize) { + public static BatchToSpace create(Scope scope, Operand input, Operand crops, Long blockSize) { OperationBuilder opBuilder = scope.env().opBuilder("BatchToSpace", scope.makeOpName("BatchToSpace")); opBuilder.addInput(input.asOutput()); opBuilder.addInput(crops.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BatchToSpaceNd.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BatchToSpaceNd.java index 93b8e560911..33dcec61ebc 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BatchToSpaceNd.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BatchToSpaceNd.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * BatchToSpace for N-D tensors of type T. @@ -144,7 +145,7 @@ public final class BatchToSpaceNd extends PrimitiveOp implements Operand { * * @return a new instance of BatchToSpaceNd */ - public static BatchToSpaceNd create(Scope scope, Operand input, Operand blockShape, Operand crops) { + public static BatchToSpaceNd create(Scope scope, Operand input, Operand blockShape, Operand crops) { OperationBuilder opBuilder = scope.env().opBuilder("BatchToSpaceND", scope.makeOpName("BatchToSpaceNd")); opBuilder.addInput(input.asOutput()); opBuilder.addInput(blockShape.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Bitcast.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Bitcast.java index 868b3655460..6c9b3d1d39b 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Bitcast.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Bitcast.java @@ -91,11 +91,11 @@ public final class Bitcast extends PrimitiveOp implements Operand { * @param type * @return a new instance of Bitcast */ - public static Bitcast create(Scope scope, Operand input, Class type) { + public static Bitcast create(Scope scope, Operand input, DataType type) { OperationBuilder opBuilder = scope.env().opBuilder("Bitcast", scope.makeOpName("Bitcast")); opBuilder.addInput(input.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); - opBuilder.setAttr("type", DataType.fromClass(type)); + opBuilder.setAttr("type", type); return new Bitcast(opBuilder.build()); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BlockLSTM.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BlockLSTM.java index b0397841588..ddbce8a0453 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BlockLSTM.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BlockLSTM.java @@ -23,6 +23,8 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TInt64; +import org.tensorflow.types.family.TNumber; /** * Computes the LSTM cell forward propagation for all the time steps. @@ -47,7 +49,7 @@ * * @param data type for {@code i()} output */ -public final class BlockLSTM extends PrimitiveOp { +public final class BlockLSTM extends PrimitiveOp { /** * Optional attributes for {@link org.tensorflow.op.core.BlockLSTM} @@ -103,7 +105,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of BlockLSTM */ - public static BlockLSTM create(Scope scope, Operand seqLenMax, Operand x, Operand csPrev, Operand hPrev, Operand w, Operand wci, Operand wcf, Operand wco, Operand b, Options... options) { + public static BlockLSTM create(Scope scope, Operand seqLenMax, Operand x, Operand csPrev, Operand hPrev, Operand w, Operand wci, Operand wcf, Operand wco, Operand b, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("BlockLSTM", scope.makeOpName("BlockLSTM")); opBuilder.addInput(seqLenMax.asOutput()); opBuilder.addInput(x.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BlockLSTMGrad.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BlockLSTMGrad.java index 07877ee24fd..0ab525b450c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BlockLSTMGrad.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BlockLSTMGrad.java @@ -23,6 +23,8 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TInt64; +import org.tensorflow.types.family.TNumber; /** * Computes the LSTM cell backward propagation for the entire time sequence. @@ -31,7 +33,7 @@ * * @param data type for {@code xGrad()} output */ -public final class BlockLSTMGrad extends PrimitiveOp { +public final class BlockLSTMGrad extends PrimitiveOp { /** * Factory method to create a class wrapping a new BlockLSTMGrad operation. @@ -59,7 +61,7 @@ public final class BlockLSTMGrad extends PrimitiveOp { * @param usePeephole Whether to use peephole weights. * @return a new instance of BlockLSTMGrad */ - public static BlockLSTMGrad create(Scope scope, Operand seqLenMax, Operand x, Operand csPrev, Operand hPrev, Operand w, Operand wci, Operand wcf, Operand wco, Operand b, Operand i, Operand cs, Operand f, Operand o, Operand ci, Operand co, Operand h, Operand csGrad, Operand hGrad, Boolean usePeephole) { + public static BlockLSTMGrad create(Scope scope, Operand seqLenMax, Operand x, Operand csPrev, Operand hPrev, Operand w, Operand wci, Operand wcf, Operand wco, Operand b, Operand i, Operand cs, Operand f, Operand o, Operand ci, Operand co, Operand h, Operand csGrad, Operand hGrad, Boolean usePeephole) { OperationBuilder opBuilder = scope.env().opBuilder("BlockLSTMGrad", scope.makeOpName("BlockLSTMGrad")); opBuilder.addInput(seqLenMax.asOutput()); opBuilder.addInput(x.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BoostedTreesAggregateStats.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BoostedTreesAggregateStats.java index f17db08d961..b55391e142d 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BoostedTreesAggregateStats.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BoostedTreesAggregateStats.java @@ -23,13 +23,15 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TFloat; +import org.tensorflow.types.TInt32; /** * Aggregates the summary of accumulated stats for the batch. *

* The summary stats contains gradients and hessians accumulated for each node, feature dimension id and bucket. */ -public final class BoostedTreesAggregateStats extends PrimitiveOp implements Operand { +public final class BoostedTreesAggregateStats extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new BoostedTreesAggregateStats operation. @@ -43,7 +45,7 @@ public final class BoostedTreesAggregateStats extends PrimitiveOp implements Ope * @param numBuckets int; equals to the maximum possible value of bucketized feature. * @return a new instance of BoostedTreesAggregateStats */ - public static BoostedTreesAggregateStats create(Scope scope, Operand nodeIds, Operand gradients, Operand hessians, Operand feature, Long maxSplits, Long numBuckets) { + public static BoostedTreesAggregateStats create(Scope scope, Operand nodeIds, Operand gradients, Operand hessians, Operand feature, Long maxSplits, Long numBuckets) { OperationBuilder opBuilder = scope.env().opBuilder("BoostedTreesAggregateStats", scope.makeOpName("BoostedTreesAggregateStats")); opBuilder.addInput(nodeIds.asOutput()); opBuilder.addInput(gradients.asOutput()); @@ -59,16 +61,16 @@ public static BoostedTreesAggregateStats create(Scope scope, Operand no * output Rank 4 Tensor (shape=[splits, feature_dimension, buckets, logits_dimension + hessian_dimension]) * containing accumulated stats for each node, feature dimension and bucket. */ - public Output statsSummary() { + public Output statsSummary() { return statsSummary; } @Override - public Output asOutput() { + public Output asOutput() { return statsSummary; } - private Output statsSummary; + private Output statsSummary; private BoostedTreesAggregateStats(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BoostedTreesBucketize.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BoostedTreesBucketize.java index 8b401786262..1b75c417a7f 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BoostedTreesBucketize.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BoostedTreesBucketize.java @@ -27,6 +27,8 @@ import org.tensorflow.op.Operands; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TFloat; +import org.tensorflow.types.TInt32; /** * Bucketize each feature based on bucket boundaries. @@ -34,7 +36,7 @@ * An op that returns a list of float tensors, where each tensor represents the * bucketized values for a single feature. */ -public final class BoostedTreesBucketize extends PrimitiveOp implements Iterable> { +public final class BoostedTreesBucketize extends PrimitiveOp implements Iterable> { /** * Factory method to create a class wrapping a new BoostedTreesBucketize operation. @@ -45,7 +47,7 @@ public final class BoostedTreesBucketize extends PrimitiveOp implements Iterable * feature. * @return a new instance of BoostedTreesBucketize */ - public static BoostedTreesBucketize create(Scope scope, Iterable> floatValues, Iterable> bucketBoundaries) { + public static BoostedTreesBucketize create(Scope scope, Iterable> floatValues, Iterable> bucketBoundaries) { OperationBuilder opBuilder = scope.env().opBuilder("BoostedTreesBucketize", scope.makeOpName("BoostedTreesBucketize")); opBuilder.addInputList(Operands.asOutputs(floatValues)); opBuilder.addInputList(Operands.asOutputs(bucketBoundaries)); @@ -56,24 +58,24 @@ public static BoostedTreesBucketize create(Scope scope, Iterable> /** * int; List of Rank 1 Tensors each containing the bucketized values for a single feature. */ - public List> buckets() { + public List> buckets() { return buckets; } @Override @SuppressWarnings({"rawtypes", "unchecked"}) - public Iterator> iterator() { + public Iterator> iterator() { return (Iterator) buckets.iterator(); } - private List> buckets; + private List> buckets; @SuppressWarnings("unchecked") private BoostedTreesBucketize(Operation operation) { super(operation); int outputIdx = 0; int bucketsLength = operation.outputListLength("buckets"); - buckets = Arrays.asList((Output[])operation.outputList(outputIdx, bucketsLength)); + buckets = Arrays.asList((Output[])operation.outputList(outputIdx, bucketsLength)); outputIdx += bucketsLength; } } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BoostedTreesCalculateBestFeatureSplit.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BoostedTreesCalculateBestFeatureSplit.java index 20c180ca72e..3e90fead098 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BoostedTreesCalculateBestFeatureSplit.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BoostedTreesCalculateBestFeatureSplit.java @@ -23,6 +23,9 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TFloat; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.TString; /** * Calculates gains for each feature and returns the best possible split information for the feature. @@ -71,7 +74,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of BoostedTreesCalculateBestFeatureSplit */ - public static BoostedTreesCalculateBestFeatureSplit create(Scope scope, Operand nodeIdRange, Operand statsSummary, Operand l1, Operand l2, Operand treeComplexity, Operand minNodeWeight, Long logitsDimension, Options... options) { + public static BoostedTreesCalculateBestFeatureSplit create(Scope scope, Operand nodeIdRange, Operand statsSummary, Operand l1, Operand l2, Operand treeComplexity, Operand minNodeWeight, Long logitsDimension, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("BoostedTreesCalculateBestFeatureSplit", scope.makeOpName("BoostedTreesCalculateBestFeatureSplit")); opBuilder.addInput(nodeIdRange.asOutput()); opBuilder.addInput(statsSummary.asOutput()); @@ -101,59 +104,59 @@ public static Options splitType(String splitType) { /** * A Rank 1 tensors indicating possible split node ids for each feature. The length of the list is num_features, but each tensor has different size as each feature provides different possible nodes. See above for details like shapes and sizes. */ - public Output nodeIds() { + public Output nodeIds() { return nodeIds; } /** * A Rank 1 tensors indicating the best gains for each feature to split for certain nodes. See above for details like shapes and sizes. */ - public Output gains() { + public Output gains() { return gains; } /** * A Rank 1 tensors indicating the best feature dimension for each feature to split for certain nodes if the feature is multi-dimension. See above for details like shapes and sizes. */ - public Output featureDimensions() { + public Output featureDimensions() { return featureDimensions; } /** * A Rank 1 tensors indicating the bucket id to compare with (as a threshold) for split in each node. See above for details like shapes and sizes. */ - public Output thresholds() { + public Output thresholds() { return thresholds; } /** * A Rank 2 tensors indicating the contribution of the left nodes when branching from parent nodes (given by the tensor element in the output node_ids_list) to the left direction by the given threshold for each feature. This value will be used to make the left node value by adding to the parent node value. Second dimension size is 1 for 1-dimensional logits, but would be larger for multi-class problems. See above for details like shapes and sizes. */ - public Output leftNodeContribs() { + public Output leftNodeContribs() { return leftNodeContribs; } /** * A Rank 2 tensors, with the same shape/conditions as left_node_contribs_list, but just that the value is for the right node. */ - public Output rightNodeContribs() { + public Output rightNodeContribs() { return rightNodeContribs; } /** * A Rank 1 tensors indicating the which direction to go if data is missing. See above for details like shapes and sizes. */ - public Output splitWithDefaultDirections() { + public Output splitWithDefaultDirections() { return splitWithDefaultDirections; } - private Output nodeIds; - private Output gains; - private Output featureDimensions; - private Output thresholds; - private Output leftNodeContribs; - private Output rightNodeContribs; - private Output splitWithDefaultDirections; + private Output nodeIds; + private Output gains; + private Output featureDimensions; + private Output thresholds; + private Output leftNodeContribs; + private Output rightNodeContribs; + private Output splitWithDefaultDirections; private BoostedTreesCalculateBestFeatureSplit(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BoostedTreesCalculateBestGainsPerFeature.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BoostedTreesCalculateBestGainsPerFeature.java index 42494896ec2..f0a5032f108 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BoostedTreesCalculateBestGainsPerFeature.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BoostedTreesCalculateBestGainsPerFeature.java @@ -26,6 +26,8 @@ import org.tensorflow.op.Operands; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TFloat; +import org.tensorflow.types.TInt32; /** * Calculates gains for each feature and returns the best possible split information for the feature. @@ -54,7 +56,7 @@ public final class BoostedTreesCalculateBestGainsPerFeature extends PrimitiveOp * @param maxSplits the number of nodes that can be split in the whole tree. Used as a dimension of output tensors. * @return a new instance of BoostedTreesCalculateBestGainsPerFeature */ - public static BoostedTreesCalculateBestGainsPerFeature create(Scope scope, Operand nodeIdRange, Iterable> statsSummaryList, Operand l1, Operand l2, Operand treeComplexity, Operand minNodeWeight, Long maxSplits) { + public static BoostedTreesCalculateBestGainsPerFeature create(Scope scope, Operand nodeIdRange, Iterable> statsSummaryList, Operand l1, Operand l2, Operand treeComplexity, Operand minNodeWeight, Long maxSplits) { OperationBuilder opBuilder = scope.env().opBuilder("BoostedTreesCalculateBestGainsPerFeature", scope.makeOpName("BoostedTreesCalculateBestGainsPerFeature")); opBuilder.addInput(nodeIdRange.asOutput()); opBuilder.addInputList(Operands.asOutputs(statsSummaryList)); @@ -70,62 +72,62 @@ public static BoostedTreesCalculateBestGainsPerFeature create(Scope scope, Opera /** * An output list of Rank 1 tensors indicating possible split node ids for each feature. The length of the list is num_features, but each tensor has different size as each feature provides different possible nodes. See above for details like shapes and sizes. */ - public List> nodeIdsList() { + public List> nodeIdsList() { return nodeIdsList; } /** * An output list of Rank 1 tensors indicating the best gains for each feature to split for certain nodes. See above for details like shapes and sizes. */ - public List> gainsList() { + public List> gainsList() { return gainsList; } /** * An output list of Rank 1 tensors indicating the bucket id to compare with (as a threshold) for split in each node. See above for details like shapes and sizes. */ - public List> thresholdsList() { + public List> thresholdsList() { return thresholdsList; } /** * A list of Rank 2 tensors indicating the contribution of the left nodes when branching from parent nodes (given by the tensor element in the output node_ids_list) to the left direction by the given threshold for each feature. This value will be used to make the left node value by adding to the parent node value. Second dimension size is 1 for 1-dimensional logits, but would be larger for multi-class problems. See above for details like shapes and sizes. */ - public List> leftNodeContribsList() { + public List> leftNodeContribsList() { return leftNodeContribsList; } /** * A list of Rank 2 tensors, with the same shape/conditions as left_node_contribs_list, but just that the value is for the right node. */ - public List> rightNodeContribsList() { + public List> rightNodeContribsList() { return rightNodeContribsList; } - private List> nodeIdsList; - private List> gainsList; - private List> thresholdsList; - private List> leftNodeContribsList; - private List> rightNodeContribsList; + private List> nodeIdsList; + private List> gainsList; + private List> thresholdsList; + private List> leftNodeContribsList; + private List> rightNodeContribsList; @SuppressWarnings("unchecked") private BoostedTreesCalculateBestGainsPerFeature(Operation operation) { super(operation); int outputIdx = 0; int nodeIdsListLength = operation.outputListLength("node_ids_list"); - nodeIdsList = Arrays.asList((Output[])operation.outputList(outputIdx, nodeIdsListLength)); + nodeIdsList = Arrays.asList((Output[])operation.outputList(outputIdx, nodeIdsListLength)); outputIdx += nodeIdsListLength; int gainsListLength = operation.outputListLength("gains_list"); - gainsList = Arrays.asList((Output[])operation.outputList(outputIdx, gainsListLength)); + gainsList = Arrays.asList((Output[])operation.outputList(outputIdx, gainsListLength)); outputIdx += gainsListLength; int thresholdsListLength = operation.outputListLength("thresholds_list"); - thresholdsList = Arrays.asList((Output[])operation.outputList(outputIdx, thresholdsListLength)); + thresholdsList = Arrays.asList((Output[])operation.outputList(outputIdx, thresholdsListLength)); outputIdx += thresholdsListLength; int leftNodeContribsListLength = operation.outputListLength("left_node_contribs_list"); - leftNodeContribsList = Arrays.asList((Output[])operation.outputList(outputIdx, leftNodeContribsListLength)); + leftNodeContribsList = Arrays.asList((Output[])operation.outputList(outputIdx, leftNodeContribsListLength)); outputIdx += leftNodeContribsListLength; int rightNodeContribsListLength = operation.outputListLength("right_node_contribs_list"); - rightNodeContribsList = Arrays.asList((Output[])operation.outputList(outputIdx, rightNodeContribsListLength)); + rightNodeContribsList = Arrays.asList((Output[])operation.outputList(outputIdx, rightNodeContribsListLength)); outputIdx += rightNodeContribsListLength; } } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BoostedTreesCenterBias.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BoostedTreesCenterBias.java index 073c7c08d70..632db799992 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BoostedTreesCenterBias.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BoostedTreesCenterBias.java @@ -23,11 +23,13 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TBool; +import org.tensorflow.types.TFloat; /** * Calculates the prior from the training data (the bias) and fills in the first node with the logits' prior. Returns a boolean indicating whether to continue centering. */ -public final class BoostedTreesCenterBias extends PrimitiveOp implements Operand { +public final class BoostedTreesCenterBias extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new BoostedTreesCenterBias operation. @@ -40,7 +42,7 @@ public final class BoostedTreesCenterBias extends PrimitiveOp implements Operand * @param l2 l2 regularization factor on leaf weights, per instance based. * @return a new instance of BoostedTreesCenterBias */ - public static BoostedTreesCenterBias create(Scope scope, Operand treeEnsembleHandle, Operand meanGradients, Operand meanHessians, Operand l1, Operand l2) { + public static BoostedTreesCenterBias create(Scope scope, Operand treeEnsembleHandle, Operand meanGradients, Operand meanHessians, Operand l1, Operand l2) { OperationBuilder opBuilder = scope.env().opBuilder("BoostedTreesCenterBias", scope.makeOpName("BoostedTreesCenterBias")); opBuilder.addInput(treeEnsembleHandle.asOutput()); opBuilder.addInput(meanGradients.asOutput()); @@ -54,16 +56,16 @@ public static BoostedTreesCenterBias create(Scope scope, Operand treeEnsemble /** * Bool, whether to continue bias centering. */ - public Output continueCentering() { + public Output continueCentering() { return continueCentering; } @Override - public Output asOutput() { + public Output asOutput() { return continueCentering; } - private Output continueCentering; + private Output continueCentering; private BoostedTreesCenterBias(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BoostedTreesCreateEnsemble.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BoostedTreesCreateEnsemble.java index e2b119b58db..ed730f33d3b 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BoostedTreesCreateEnsemble.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BoostedTreesCreateEnsemble.java @@ -22,6 +22,8 @@ import org.tensorflow.OperationBuilder; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TInt64; +import org.tensorflow.types.TString; /** * Creates a tree ensemble model and returns a handle to it. @@ -37,7 +39,7 @@ public final class BoostedTreesCreateEnsemble extends PrimitiveOp { * @param treeEnsembleSerialized Serialized proto of the tree ensemble. * @return a new instance of BoostedTreesCreateEnsemble */ - public static BoostedTreesCreateEnsemble create(Scope scope, Operand treeEnsembleHandle, Operand stampToken, Operand treeEnsembleSerialized) { + public static BoostedTreesCreateEnsemble create(Scope scope, Operand treeEnsembleHandle, Operand stampToken, Operand treeEnsembleSerialized) { OperationBuilder opBuilder = scope.env().opBuilder("BoostedTreesCreateEnsemble", scope.makeOpName("BoostedTreesCreateEnsemble")); opBuilder.addInput(treeEnsembleHandle.asOutput()); opBuilder.addInput(stampToken.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BoostedTreesCreateQuantileStreamResource.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BoostedTreesCreateQuantileStreamResource.java index bb0a22e376b..b83527f70bf 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BoostedTreesCreateQuantileStreamResource.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BoostedTreesCreateQuantileStreamResource.java @@ -22,6 +22,8 @@ import org.tensorflow.OperationBuilder; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TFloat; +import org.tensorflow.types.TInt64; /** * Create the Resource for Quantile Streams. @@ -57,7 +59,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of BoostedTreesCreateQuantileStreamResource */ - public static BoostedTreesCreateQuantileStreamResource create(Scope scope, Operand quantileStreamResourceHandle, Operand epsilon, Operand numStreams, Options... options) { + public static BoostedTreesCreateQuantileStreamResource create(Scope scope, Operand quantileStreamResourceHandle, Operand epsilon, Operand numStreams, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("BoostedTreesCreateQuantileStreamResource", scope.makeOpName("BoostedTreesCreateQuantileStreamResource")); opBuilder.addInput(quantileStreamResourceHandle.asOutput()); opBuilder.addInput(epsilon.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BoostedTreesDeserializeEnsemble.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BoostedTreesDeserializeEnsemble.java index 2e92849ccbc..f5f21376a82 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BoostedTreesDeserializeEnsemble.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BoostedTreesDeserializeEnsemble.java @@ -22,6 +22,8 @@ import org.tensorflow.OperationBuilder; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TInt64; +import org.tensorflow.types.TString; /** * Deserializes a serialized tree ensemble config and replaces current tree @@ -39,7 +41,7 @@ public final class BoostedTreesDeserializeEnsemble extends PrimitiveOp { * @param treeEnsembleSerialized Serialized proto of the ensemble. * @return a new instance of BoostedTreesDeserializeEnsemble */ - public static BoostedTreesDeserializeEnsemble create(Scope scope, Operand treeEnsembleHandle, Operand stampToken, Operand treeEnsembleSerialized) { + public static BoostedTreesDeserializeEnsemble create(Scope scope, Operand treeEnsembleHandle, Operand stampToken, Operand treeEnsembleSerialized) { OperationBuilder opBuilder = scope.env().opBuilder("BoostedTreesDeserializeEnsemble", scope.makeOpName("BoostedTreesDeserializeEnsemble")); opBuilder.addInput(treeEnsembleHandle.asOutput()); opBuilder.addInput(stampToken.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BoostedTreesExampleDebugOutputs.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BoostedTreesExampleDebugOutputs.java index e52e99387d0..63a6d4a4f0a 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BoostedTreesExampleDebugOutputs.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BoostedTreesExampleDebugOutputs.java @@ -24,6 +24,8 @@ import org.tensorflow.op.Operands; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.TString; /** * Debugging/model interpretability outputs for each example. @@ -32,7 +34,7 @@ * such as getting split feature ids and logits after each split along the decision * path used to compute directional feature contributions. */ -public final class BoostedTreesExampleDebugOutputs extends PrimitiveOp implements Operand { +public final class BoostedTreesExampleDebugOutputs extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new BoostedTreesExampleDebugOutputs operation. @@ -45,7 +47,7 @@ public final class BoostedTreesExampleDebugOutputs extends PrimitiveOp implement * examples_debug_outputs_serialized. * @return a new instance of BoostedTreesExampleDebugOutputs */ - public static BoostedTreesExampleDebugOutputs create(Scope scope, Operand treeEnsembleHandle, Iterable> bucketizedFeatures, Long logitsDimension) { + public static BoostedTreesExampleDebugOutputs create(Scope scope, Operand treeEnsembleHandle, Iterable> bucketizedFeatures, Long logitsDimension) { OperationBuilder opBuilder = scope.env().opBuilder("BoostedTreesExampleDebugOutputs", scope.makeOpName("BoostedTreesExampleDebugOutputs")); opBuilder.addInput(treeEnsembleHandle.asOutput()); opBuilder.addInputList(Operands.asOutputs(bucketizedFeatures)); @@ -57,16 +59,16 @@ public static BoostedTreesExampleDebugOutputs create(Scope scope, Operand tre /** * Output rank 1 Tensor containing a proto serialized as a string for each example. */ - public Output examplesDebugOutputsSerialized() { + public Output examplesDebugOutputsSerialized() { return examplesDebugOutputsSerialized; } @Override - public Output asOutput() { + public Output asOutput() { return examplesDebugOutputsSerialized; } - private Output examplesDebugOutputsSerialized; + private Output examplesDebugOutputsSerialized; private BoostedTreesExampleDebugOutputs(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BoostedTreesFlushQuantileSummaries.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BoostedTreesFlushQuantileSummaries.java index 24c2a3398e5..a84b8fec4b2 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BoostedTreesFlushQuantileSummaries.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BoostedTreesFlushQuantileSummaries.java @@ -26,6 +26,7 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TFloat; /** * Flush the quantile summaries from each quantile stream resource. @@ -34,7 +35,7 @@ * Each summary Tensor is rank 2, containing summaries (value, weight, min_rank, * max_rank) for a single feature. */ -public final class BoostedTreesFlushQuantileSummaries extends PrimitiveOp implements Iterable> { +public final class BoostedTreesFlushQuantileSummaries extends PrimitiveOp implements Iterable> { /** * Factory method to create a class wrapping a new BoostedTreesFlushQuantileSummaries operation. @@ -54,24 +55,24 @@ public static BoostedTreesFlushQuantileSummaries create(Scope scope, Operand /** */ - public List> summaries() { + public List> summaries() { return summaries; } @Override @SuppressWarnings({"rawtypes", "unchecked"}) - public Iterator> iterator() { + public Iterator> iterator() { return (Iterator) summaries.iterator(); } - private List> summaries; + private List> summaries; @SuppressWarnings("unchecked") private BoostedTreesFlushQuantileSummaries(Operation operation) { super(operation); int outputIdx = 0; int summariesLength = operation.outputListLength("summaries"); - summaries = Arrays.asList((Output[])operation.outputList(outputIdx, summariesLength)); + summaries = Arrays.asList((Output[])operation.outputList(outputIdx, summariesLength)); outputIdx += summariesLength; } } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BoostedTreesGetEnsembleStates.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BoostedTreesGetEnsembleStates.java index 1795701419e..d64222c136d 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BoostedTreesGetEnsembleStates.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BoostedTreesGetEnsembleStates.java @@ -23,6 +23,8 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.TInt64; /** * Retrieves the tree ensemble resource stamp token, number of trees and growing statistics. @@ -46,28 +48,28 @@ public static BoostedTreesGetEnsembleStates create(Scope scope, Operand treeE /** * Stamp token of the tree ensemble resource. */ - public Output stampToken() { + public Output stampToken() { return stampToken; } /** * The number of trees in the tree ensemble resource. */ - public Output numTrees() { + public Output numTrees() { return numTrees; } /** * The number of trees that were finished successfully. */ - public Output numFinalizedTrees() { + public Output numFinalizedTrees() { return numFinalizedTrees; } /** * The number of layers we attempted to build (but not necessarily succeeded). */ - public Output numAttemptedLayers() { + public Output numAttemptedLayers() { return numAttemptedLayers; } @@ -75,15 +77,15 @@ public Output numAttemptedLayers() { * Rank size 2 tensor that contains start and end ids of the nodes in the latest * layer. */ - public Output lastLayerNodesRange() { + public Output lastLayerNodesRange() { return lastLayerNodesRange; } - private Output stampToken; - private Output numTrees; - private Output numFinalizedTrees; - private Output numAttemptedLayers; - private Output lastLayerNodesRange; + private Output stampToken; + private Output numTrees; + private Output numFinalizedTrees; + private Output numAttemptedLayers; + private Output lastLayerNodesRange; private BoostedTreesGetEnsembleStates(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BoostedTreesMakeQuantileSummaries.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BoostedTreesMakeQuantileSummaries.java index 8dc77b16bc8..1781b0b9d8e 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BoostedTreesMakeQuantileSummaries.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BoostedTreesMakeQuantileSummaries.java @@ -27,6 +27,7 @@ import org.tensorflow.op.Operands; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TFloat; /** * Makes the summary of quantiles for the batch. @@ -34,7 +35,7 @@ * An op that takes a list of tensors (one tensor per feature) and outputs the * quantile summaries for each tensor. */ -public final class BoostedTreesMakeQuantileSummaries extends PrimitiveOp implements Iterable> { +public final class BoostedTreesMakeQuantileSummaries extends PrimitiveOp implements Iterable> { /** * Factory method to create a class wrapping a new BoostedTreesMakeQuantileSummaries operation. @@ -45,7 +46,7 @@ public final class BoostedTreesMakeQuantileSummaries extends PrimitiveOp impleme * @param epsilon float; The required maximum approximation error. * @return a new instance of BoostedTreesMakeQuantileSummaries */ - public static BoostedTreesMakeQuantileSummaries create(Scope scope, Iterable> floatValues, Operand exampleWeights, Operand epsilon) { + public static BoostedTreesMakeQuantileSummaries create(Scope scope, Iterable> floatValues, Operand exampleWeights, Operand epsilon) { OperationBuilder opBuilder = scope.env().opBuilder("BoostedTreesMakeQuantileSummaries", scope.makeOpName("BoostedTreesMakeQuantileSummaries")); opBuilder.addInputList(Operands.asOutputs(floatValues)); opBuilder.addInput(exampleWeights.asOutput()); @@ -58,24 +59,24 @@ public static BoostedTreesMakeQuantileSummaries create(Scope scope, Iterable> summaries() { + public List> summaries() { return summaries; } @Override @SuppressWarnings({"rawtypes", "unchecked"}) - public Iterator> iterator() { + public Iterator> iterator() { return (Iterator) summaries.iterator(); } - private List> summaries; + private List> summaries; @SuppressWarnings("unchecked") private BoostedTreesMakeQuantileSummaries(Operation operation) { super(operation); int outputIdx = 0; int summariesLength = operation.outputListLength("summaries"); - summaries = Arrays.asList((Output[])operation.outputList(outputIdx, summariesLength)); + summaries = Arrays.asList((Output[])operation.outputList(outputIdx, summariesLength)); outputIdx += summariesLength; } } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BoostedTreesMakeStatsSummary.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BoostedTreesMakeStatsSummary.java index b6275455cfc..21e4904f177 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BoostedTreesMakeStatsSummary.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BoostedTreesMakeStatsSummary.java @@ -24,13 +24,15 @@ import org.tensorflow.op.Operands; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TFloat; +import org.tensorflow.types.TInt32; /** * Makes the summary of accumulated stats for the batch. *

* The summary stats contains gradients and hessians accumulated into the corresponding node and bucket for each example. */ -public final class BoostedTreesMakeStatsSummary extends PrimitiveOp implements Operand { +public final class BoostedTreesMakeStatsSummary extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new BoostedTreesMakeStatsSummary operation. @@ -44,7 +46,7 @@ public final class BoostedTreesMakeStatsSummary extends PrimitiveOp implements O * @param numBuckets int; equals to the maximum possible value of bucketized feature. * @return a new instance of BoostedTreesMakeStatsSummary */ - public static BoostedTreesMakeStatsSummary create(Scope scope, Operand nodeIds, Operand gradients, Operand hessians, Iterable> bucketizedFeaturesList, Long maxSplits, Long numBuckets) { + public static BoostedTreesMakeStatsSummary create(Scope scope, Operand nodeIds, Operand gradients, Operand hessians, Iterable> bucketizedFeaturesList, Long maxSplits, Long numBuckets) { OperationBuilder opBuilder = scope.env().opBuilder("BoostedTreesMakeStatsSummary", scope.makeOpName("BoostedTreesMakeStatsSummary")); opBuilder.addInput(nodeIds.asOutput()); opBuilder.addInput(gradients.asOutput()); @@ -59,16 +61,16 @@ public static BoostedTreesMakeStatsSummary create(Scope scope, Operand /** * output Rank 4 Tensor (shape=[#features, #splits, #buckets, 2]) containing accumulated stats put into the corresponding node and bucket. The first index of 4th dimension refers to gradients, and the second to hessians. */ - public Output statsSummary() { + public Output statsSummary() { return statsSummary; } @Override - public Output asOutput() { + public Output asOutput() { return statsSummary; } - private Output statsSummary; + private Output statsSummary; private BoostedTreesMakeStatsSummary(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BoostedTreesPredict.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BoostedTreesPredict.java index 2c23019ed58..c8e607bed1e 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BoostedTreesPredict.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BoostedTreesPredict.java @@ -24,6 +24,8 @@ import org.tensorflow.op.Operands; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TFloat; +import org.tensorflow.types.TInt32; /** * Runs multiple additive regression ensemble predictors on input instances and @@ -31,7 +33,7 @@ * computes the logits. It is designed to be used during prediction. * It traverses all the trees and calculates the final score for each instance. */ -public final class BoostedTreesPredict extends PrimitiveOp implements Operand { +public final class BoostedTreesPredict extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new BoostedTreesPredict operation. @@ -44,7 +46,7 @@ public final class BoostedTreesPredict extends PrimitiveOp implements Operand treeEnsembleHandle, Iterable> bucketizedFeatures, Long logitsDimension) { + public static BoostedTreesPredict create(Scope scope, Operand treeEnsembleHandle, Iterable> bucketizedFeatures, Long logitsDimension) { OperationBuilder opBuilder = scope.env().opBuilder("BoostedTreesPredict", scope.makeOpName("BoostedTreesPredict")); opBuilder.addInput(treeEnsembleHandle.asOutput()); opBuilder.addInputList(Operands.asOutputs(bucketizedFeatures)); @@ -56,16 +58,16 @@ public static BoostedTreesPredict create(Scope scope, Operand treeEnsembleHan /** * Output rank 2 Tensor containing logits for each example. */ - public Output logits() { + public Output logits() { return logits; } @Override - public Output asOutput() { + public Output asOutput() { return logits; } - private Output logits; + private Output logits; private BoostedTreesPredict(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BoostedTreesQuantileStreamResourceAddSummaries.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BoostedTreesQuantileStreamResourceAddSummaries.java index e53d3020267..182866fd6e6 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BoostedTreesQuantileStreamResourceAddSummaries.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BoostedTreesQuantileStreamResourceAddSummaries.java @@ -23,6 +23,7 @@ import org.tensorflow.op.Operands; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TFloat; /** * Add the quantile summaries to each quantile stream resource. @@ -41,7 +42,7 @@ public final class BoostedTreesQuantileStreamResourceAddSummaries extends Primit * @param summaries string; List of Rank 2 Tensor each containing the summaries for a single feature. * @return a new instance of BoostedTreesQuantileStreamResourceAddSummaries */ - public static BoostedTreesQuantileStreamResourceAddSummaries create(Scope scope, Operand quantileStreamResourceHandle, Iterable> summaries) { + public static BoostedTreesQuantileStreamResourceAddSummaries create(Scope scope, Operand quantileStreamResourceHandle, Iterable> summaries) { OperationBuilder opBuilder = scope.env().opBuilder("BoostedTreesQuantileStreamResourceAddSummaries", scope.makeOpName("BoostedTreesQuantileStreamResourceAddSummaries")); opBuilder.addInput(quantileStreamResourceHandle.asOutput()); opBuilder.addInputList(Operands.asOutputs(summaries)); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BoostedTreesQuantileStreamResourceDeserialize.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BoostedTreesQuantileStreamResourceDeserialize.java index 35541661a6c..388dbebbbb2 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BoostedTreesQuantileStreamResourceDeserialize.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BoostedTreesQuantileStreamResourceDeserialize.java @@ -23,6 +23,7 @@ import org.tensorflow.op.Operands; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TFloat; /** * Deserialize bucket boundaries and ready flag into current QuantileAccumulator. @@ -39,7 +40,7 @@ public final class BoostedTreesQuantileStreamResourceDeserialize extends Primiti * @param bucketBoundaries float; List of Rank 1 Tensors each containing the bucket boundaries for a feature. * @return a new instance of BoostedTreesQuantileStreamResourceDeserialize */ - public static BoostedTreesQuantileStreamResourceDeserialize create(Scope scope, Operand quantileStreamResourceHandle, Iterable> bucketBoundaries) { + public static BoostedTreesQuantileStreamResourceDeserialize create(Scope scope, Operand quantileStreamResourceHandle, Iterable> bucketBoundaries) { OperationBuilder opBuilder = scope.env().opBuilder("BoostedTreesQuantileStreamResourceDeserialize", scope.makeOpName("BoostedTreesQuantileStreamResourceDeserialize")); opBuilder.addInput(quantileStreamResourceHandle.asOutput()); opBuilder.addInputList(Operands.asOutputs(bucketBoundaries)); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BoostedTreesQuantileStreamResourceFlush.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BoostedTreesQuantileStreamResourceFlush.java index 0420c6b2842..eab27aeb708 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BoostedTreesQuantileStreamResourceFlush.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BoostedTreesQuantileStreamResourceFlush.java @@ -22,6 +22,7 @@ import org.tensorflow.OperationBuilder; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TInt64; /** * Flush the summaries for a quantile stream resource. @@ -63,7 +64,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of BoostedTreesQuantileStreamResourceFlush */ - public static BoostedTreesQuantileStreamResourceFlush create(Scope scope, Operand quantileStreamResourceHandle, Operand numBuckets, Options... options) { + public static BoostedTreesQuantileStreamResourceFlush create(Scope scope, Operand quantileStreamResourceHandle, Operand numBuckets, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("BoostedTreesQuantileStreamResourceFlush", scope.makeOpName("BoostedTreesQuantileStreamResourceFlush")); opBuilder.addInput(quantileStreamResourceHandle.asOutput()); opBuilder.addInput(numBuckets.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BoostedTreesQuantileStreamResourceGetBucketBoundaries.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BoostedTreesQuantileStreamResourceGetBucketBoundaries.java index 2226f9c8084..93ce9b96285 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BoostedTreesQuantileStreamResourceGetBucketBoundaries.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BoostedTreesQuantileStreamResourceGetBucketBoundaries.java @@ -26,6 +26,7 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TFloat; /** * Generate the bucket boundaries for each feature based on accumulated summaries. @@ -33,7 +34,7 @@ * An op that returns a list of float tensors for a quantile stream resource. Each * tensor is Rank 1 containing bucket boundaries for a single feature. */ -public final class BoostedTreesQuantileStreamResourceGetBucketBoundaries extends PrimitiveOp implements Iterable> { +public final class BoostedTreesQuantileStreamResourceGetBucketBoundaries extends PrimitiveOp implements Iterable> { /** * Factory method to create a class wrapping a new BoostedTreesQuantileStreamResourceGetBucketBoundaries operation. @@ -54,24 +55,24 @@ public static BoostedTreesQuantileStreamResourceGetBucketBoundaries create(Scope /** * float; List of Rank 1 Tensors each containing the bucket boundaries for a feature. */ - public List> bucketBoundaries() { + public List> bucketBoundaries() { return bucketBoundaries; } @Override @SuppressWarnings({"rawtypes", "unchecked"}) - public Iterator> iterator() { + public Iterator> iterator() { return (Iterator) bucketBoundaries.iterator(); } - private List> bucketBoundaries; + private List> bucketBoundaries; @SuppressWarnings("unchecked") private BoostedTreesQuantileStreamResourceGetBucketBoundaries(Operation operation) { super(operation); int outputIdx = 0; int bucketBoundariesLength = operation.outputListLength("bucket_boundaries"); - bucketBoundaries = Arrays.asList((Output[])operation.outputList(outputIdx, bucketBoundariesLength)); + bucketBoundaries = Arrays.asList((Output[])operation.outputList(outputIdx, bucketBoundariesLength)); outputIdx += bucketBoundariesLength; } } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BoostedTreesSerializeEnsemble.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BoostedTreesSerializeEnsemble.java index fc5f528d3e3..268541ad6f8 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BoostedTreesSerializeEnsemble.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BoostedTreesSerializeEnsemble.java @@ -23,6 +23,8 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TInt64; +import org.tensorflow.types.TString; /** * Serializes the tree ensemble to a proto. @@ -46,19 +48,19 @@ public static BoostedTreesSerializeEnsemble create(Scope scope, Operand treeE /** * Stamp token of the tree ensemble resource. */ - public Output stampToken() { + public Output stampToken() { return stampToken; } /** * Serialized proto of the ensemble. */ - public Output treeEnsembleSerialized() { + public Output treeEnsembleSerialized() { return treeEnsembleSerialized; } - private Output stampToken; - private Output treeEnsembleSerialized; + private Output stampToken; + private Output treeEnsembleSerialized; private BoostedTreesSerializeEnsemble(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BoostedTreesSparseAggregateStats.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BoostedTreesSparseAggregateStats.java index 5c73e14a295..cd2f5d33289 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BoostedTreesSparseAggregateStats.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BoostedTreesSparseAggregateStats.java @@ -23,6 +23,8 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TFloat; +import org.tensorflow.types.TInt32; /** * Aggregates the summary of accumulated stats for the batch. @@ -51,7 +53,7 @@ public final class BoostedTreesSparseAggregateStats extends PrimitiveOp { * @param numBuckets int; equals to the maximum possible value of bucketized feature + 1. * @return a new instance of BoostedTreesSparseAggregateStats */ - public static BoostedTreesSparseAggregateStats create(Scope scope, Operand nodeIds, Operand gradients, Operand hessians, Operand featureIndices, Operand featureValues, Operand featureShape, Long maxSplits, Long numBuckets) { + public static BoostedTreesSparseAggregateStats create(Scope scope, Operand nodeIds, Operand gradients, Operand hessians, Operand featureIndices, Operand featureValues, Operand featureShape, Long maxSplits, Long numBuckets) { OperationBuilder opBuilder = scope.env().opBuilder("BoostedTreesSparseAggregateStats", scope.makeOpName("BoostedTreesSparseAggregateStats")); opBuilder.addInput(nodeIds.asOutput()); opBuilder.addInput(gradients.asOutput()); @@ -70,14 +72,14 @@ public static BoostedTreesSparseAggregateStats create(Scope scope, Operand statsSummaryIndices() { + public Output statsSummaryIndices() { return statsSummaryIndices; } /** * output Rank 1 Tensor (shape=[number of non zero statistics]) */ - public Output statsSummaryValues() { + public Output statsSummaryValues() { return statsSummaryValues; } @@ -89,13 +91,13 @@ public Output statsSummaryValues() { * as logits dimension when diagonal hessian is used, or label_dimension^2 when full * hessian is used. */ - public Output statsSummaryShape() { + public Output statsSummaryShape() { return statsSummaryShape; } - private Output statsSummaryIndices; - private Output statsSummaryValues; - private Output statsSummaryShape; + private Output statsSummaryIndices; + private Output statsSummaryValues; + private Output statsSummaryShape; private BoostedTreesSparseAggregateStats(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BoostedTreesSparseCalculateBestFeatureSplit.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BoostedTreesSparseCalculateBestFeatureSplit.java index 4818a57985b..48f193ac74d 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BoostedTreesSparseCalculateBestFeatureSplit.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BoostedTreesSparseCalculateBestFeatureSplit.java @@ -23,6 +23,9 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TFloat; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.TString; /** * Calculates gains for each feature and returns the best possible split information for the feature. @@ -73,7 +76,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of BoostedTreesSparseCalculateBestFeatureSplit */ - public static BoostedTreesSparseCalculateBestFeatureSplit create(Scope scope, Operand nodeIdRange, Operand statsSummaryIndices, Operand statsSummaryValues, Operand statsSummaryShape, Operand l1, Operand l2, Operand treeComplexity, Operand minNodeWeight, Long logitsDimension, Options... options) { + public static BoostedTreesSparseCalculateBestFeatureSplit create(Scope scope, Operand nodeIdRange, Operand statsSummaryIndices, Operand statsSummaryValues, Operand statsSummaryShape, Operand l1, Operand l2, Operand treeComplexity, Operand minNodeWeight, Long logitsDimension, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("BoostedTreesSparseCalculateBestFeatureSplit", scope.makeOpName("BoostedTreesSparseCalculateBestFeatureSplit")); opBuilder.addInput(nodeIdRange.asOutput()); opBuilder.addInput(statsSummaryIndices.asOutput()); @@ -105,28 +108,28 @@ public static Options splitType(String splitType) { /** * A Rank 1 tensor indicating possible node ids that can be split. */ - public Output nodeIds() { + public Output nodeIds() { return nodeIds; } /** * A Rank 1 tensor indicating the best gains to split each node. */ - public Output gains() { + public Output gains() { return gains; } /** * A Rank 1 tensor indicating the best feature dimension for each feature to split for each node. */ - public Output featureDimensions() { + public Output featureDimensions() { return featureDimensions; } /** * A Rank 1 tensor indicating the bucket id to compare with (as a threshold) for split in each node. */ - public Output thresholds() { + public Output thresholds() { return thresholds; } @@ -134,31 +137,31 @@ public Output thresholds() { * A Rank 2 tensor indicating the contribution of the left nodes when branching from parent nodes to the left direction by the given threshold for each feature. * This value will be used to make the left node value by adding to the parent node value. Second dimension size is logits dimension. */ - public Output leftNodeContribs() { + public Output leftNodeContribs() { return leftNodeContribs; } /** * A Rank 2 tensor, with the same shape/conditions as left_node_contribs_list, but just that the value is for the right node. */ - public Output rightNodeContribs() { + public Output rightNodeContribs() { return rightNodeContribs; } /** * A Rank 1 tensor indicating which direction to go if data is missing. */ - public Output splitWithDefaultDirections() { + public Output splitWithDefaultDirections() { return splitWithDefaultDirections; } - private Output nodeIds; - private Output gains; - private Output featureDimensions; - private Output thresholds; - private Output leftNodeContribs; - private Output rightNodeContribs; - private Output splitWithDefaultDirections; + private Output nodeIds; + private Output gains; + private Output featureDimensions; + private Output thresholds; + private Output leftNodeContribs; + private Output rightNodeContribs; + private Output splitWithDefaultDirections; private BoostedTreesSparseCalculateBestFeatureSplit(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BoostedTreesTrainingPredict.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BoostedTreesTrainingPredict.java index 44c950bb510..d7cb2a7f3d6 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BoostedTreesTrainingPredict.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BoostedTreesTrainingPredict.java @@ -24,6 +24,8 @@ import org.tensorflow.op.Operands; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TFloat; +import org.tensorflow.types.TInt32; /** * Runs multiple additive regression ensemble predictors on input instances and @@ -49,7 +51,7 @@ public final class BoostedTreesTrainingPredict extends PrimitiveOp { * shape. * @return a new instance of BoostedTreesTrainingPredict */ - public static BoostedTreesTrainingPredict create(Scope scope, Operand treeEnsembleHandle, Operand cachedTreeIds, Operand cachedNodeIds, Iterable> bucketizedFeatures, Long logitsDimension) { + public static BoostedTreesTrainingPredict create(Scope scope, Operand treeEnsembleHandle, Operand cachedTreeIds, Operand cachedNodeIds, Iterable> bucketizedFeatures, Long logitsDimension) { OperationBuilder opBuilder = scope.env().opBuilder("BoostedTreesTrainingPredict", scope.makeOpName("BoostedTreesTrainingPredict")); opBuilder.addInput(treeEnsembleHandle.asOutput()); opBuilder.addInput(cachedTreeIds.asOutput()); @@ -64,27 +66,27 @@ public static BoostedTreesTrainingPredict create(Scope scope, Operand treeEns * Rank 2 Tensor containing logits update (with respect to cached * values stored) for each example. */ - public Output partialLogits() { + public Output partialLogits() { return partialLogits; } /** * Rank 1 Tensor containing new tree ids for each example. */ - public Output treeIds() { + public Output treeIds() { return treeIds; } /** * Rank 1 Tensor containing new node ids in the new tree_ids. */ - public Output nodeIds() { + public Output nodeIds() { return nodeIds; } - private Output partialLogits; - private Output treeIds; - private Output nodeIds; + private Output partialLogits; + private Output treeIds; + private Output nodeIds; private BoostedTreesTrainingPredict(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BoostedTreesUpdateEnsemble.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BoostedTreesUpdateEnsemble.java index 982e6d2a751..46399d6bb9e 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BoostedTreesUpdateEnsemble.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BoostedTreesUpdateEnsemble.java @@ -23,6 +23,8 @@ import org.tensorflow.op.Operands; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TFloat; +import org.tensorflow.types.TInt32; /** * Updates the tree ensemble by either adding a layer to the last tree being grown @@ -55,7 +57,7 @@ public final class BoostedTreesUpdateEnsemble extends PrimitiveOp { * @param pruningMode 0-No pruning, 1-Pre-pruning, 2-Post-pruning. * @return a new instance of BoostedTreesUpdateEnsemble */ - public static BoostedTreesUpdateEnsemble create(Scope scope, Operand treeEnsembleHandle, Operand featureIds, Iterable> nodeIds, Iterable> gains, Iterable> thresholds, Iterable> leftNodeContribs, Iterable> rightNodeContribs, Operand maxDepth, Operand learningRate, Long pruningMode) { + public static BoostedTreesUpdateEnsemble create(Scope scope, Operand treeEnsembleHandle, Operand featureIds, Iterable> nodeIds, Iterable> gains, Iterable> thresholds, Iterable> leftNodeContribs, Iterable> rightNodeContribs, Operand maxDepth, Operand learningRate, Long pruningMode) { OperationBuilder opBuilder = scope.env().opBuilder("BoostedTreesUpdateEnsemble", scope.makeOpName("BoostedTreesUpdateEnsemble")); opBuilder.addInput(treeEnsembleHandle.asOutput()); opBuilder.addInput(featureIds.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BroadcastDynamicShape.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BroadcastDynamicShape.java index cccaa287ae4..8313eea28fe 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BroadcastDynamicShape.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BroadcastDynamicShape.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Return the shape of s0 op s1 with broadcast. @@ -34,7 +35,7 @@ * @param data type for {@code r0()} output */ @Operator -public final class BroadcastDynamicShape extends PrimitiveOp implements Operand { +public final class BroadcastDynamicShape extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new BroadcastDynamicShape operation. @@ -44,7 +45,7 @@ public final class BroadcastDynamicShape extends PrimitiveOp i * @param s1 * @return a new instance of BroadcastDynamicShape */ - public static BroadcastDynamicShape create(Scope scope, Operand s0, Operand s1) { + public static BroadcastDynamicShape create(Scope scope, Operand s0, Operand s1) { OperationBuilder opBuilder = scope.env().opBuilder("BroadcastArgs", scope.makeOpName("BroadcastDynamicShape")); opBuilder.addInput(s0.asOutput()); opBuilder.addInput(s1.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BroadcastGradientArgs.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BroadcastGradientArgs.java index 4669ffd6ec7..4d12dac7278 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BroadcastGradientArgs.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BroadcastGradientArgs.java @@ -23,6 +23,7 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.family.TNumber; /** * Return the reduction indices for computing gradients of s0 op s1 with broadcast. @@ -31,7 +32,7 @@ * * @param data type for {@code r0()} output */ -public final class BroadcastGradientArgs extends PrimitiveOp { +public final class BroadcastGradientArgs extends PrimitiveOp { /** * Factory method to create a class wrapping a new BroadcastGradientArgs operation. @@ -41,7 +42,7 @@ public final class BroadcastGradientArgs extends PrimitiveOp { * @param s1 * @return a new instance of BroadcastGradientArgs */ - public static BroadcastGradientArgs create(Scope scope, Operand s0, Operand s1) { + public static BroadcastGradientArgs create(Scope scope, Operand s0, Operand s1) { OperationBuilder opBuilder = scope.env().opBuilder("BroadcastGradientArgs", scope.makeOpName("BroadcastGradientArgs")); opBuilder.addInput(s0.asOutput()); opBuilder.addInput(s1.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BroadcastTo.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BroadcastTo.java index 85b41994abc..0cfebc55c6c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BroadcastTo.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BroadcastTo.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Broadcast an array for a compatible shape. @@ -59,7 +60,7 @@ public final class BroadcastTo extends PrimitiveOp implements Operand { * @param shape An 1-D `int` Tensor. The shape of the desired output. * @return a new instance of BroadcastTo */ - public static BroadcastTo create(Scope scope, Operand input, Operand shape) { + public static BroadcastTo create(Scope scope, Operand input, Operand shape) { OperationBuilder opBuilder = scope.env().opBuilder("BroadcastTo", scope.makeOpName("BroadcastTo")); opBuilder.addInput(input.asOutput()); opBuilder.addInput(shape.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Bucketize.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Bucketize.java index b0c7c71e1f6..161c4307257 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Bucketize.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Bucketize.java @@ -25,6 +25,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.family.TNumber; /** * Bucketizes 'input' based on 'boundaries'. @@ -41,7 +43,7 @@ * [1, 3]] */ @Operator -public final class Bucketize extends PrimitiveOp implements Operand { +public final class Bucketize extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new Bucketize operation. @@ -51,7 +53,7 @@ public final class Bucketize extends PrimitiveOp implements Operand { * @param boundaries A sorted list of floats gives the boundary of the buckets. * @return a new instance of Bucketize */ - public static Bucketize create(Scope scope, Operand input, List boundaries) { + public static Bucketize create(Scope scope, Operand input, List boundaries) { OperationBuilder opBuilder = scope.env().opBuilder("Bucketize", scope.makeOpName("Bucketize")); opBuilder.addInput(input.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); @@ -70,16 +72,16 @@ public static Bucketize create(Scope scope, Operand input, * Equivalent to np.digitize. * @end_compatibility */ - public Output output() { + public Output output() { return output; } @Override - public Output asOutput() { + public Output asOutput() { return output; } - private Output output; + private Output output; private Bucketize(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/CSVDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/CSVDataset.java index 715c9c48d16..79e4142422c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/CSVDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/CSVDataset.java @@ -22,10 +22,13 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.Operands; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TBool; +import org.tensorflow.types.TInt64; +import org.tensorflow.types.TString; /** */ @@ -47,7 +50,7 @@ public final class CSVDataset extends PrimitiveOp implements Operand { * @param outputShapes * @return a new instance of CSVDataset */ - public static CSVDataset create(Scope scope, Operand filenames, Operand compressionType, Operand bufferSize, Operand header, Operand fieldDelim, Operand useQuoteDelim, Operand naValue, Operand selectCols, Iterable> recordDefaults, List outputShapes) { + public static CSVDataset create(Scope scope, Operand filenames, Operand compressionType, Operand bufferSize, Operand header, Operand fieldDelim, Operand useQuoteDelim, Operand naValue, Operand selectCols, Iterable> recordDefaults, List outputShapes) { OperationBuilder opBuilder = scope.env().opBuilder("CSVDataset", scope.makeOpName("CSVDataset")); opBuilder.addInput(filenames.asOutput()); opBuilder.addInput(compressionType.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/CacheDatasetV2.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/CacheDatasetV2.java index 622e8984f2d..c83d34315d2 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/CacheDatasetV2.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/CacheDatasetV2.java @@ -23,9 +23,10 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TString; /** */ @@ -42,7 +43,7 @@ public final class CacheDatasetV2 extends PrimitiveOp implements Operand * @param outputShapes * @return a new instance of CacheDatasetV2 */ - public static CacheDatasetV2 create(Scope scope, Operand inputDataset, Operand filename, Operand cache, List> outputTypes, List outputShapes) { + public static CacheDatasetV2 create(Scope scope, Operand inputDataset, Operand filename, Operand cache, List> outputTypes, List outputShapes) { OperationBuilder opBuilder = scope.env().opBuilder("CacheDatasetV2", scope.makeOpName("CacheDatasetV2")); opBuilder.addInput(inputDataset.asOutput()); opBuilder.addInput(filename.asOutput()); @@ -50,7 +51,7 @@ public static CacheDatasetV2 create(Scope scope, Operand inputDataset, Operan opBuilder = scope.applyControlDependencies(opBuilder); DataType[] outputTypesArray = new DataType[outputTypes.size()]; for (int i = 0; i < outputTypesArray.length; ++i) { - outputTypesArray[i] = DataType.fromClass(outputTypes.get(i)); + outputTypesArray[i] = outputTypes.get(i); } opBuilder.setAttr("output_types", outputTypesArray); Shape[] outputShapesArray = new Shape[outputShapes.size()]; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ChooseFastestDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ChooseFastestDataset.java index a6f8594b793..c212ac8e639 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ChooseFastestDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ChooseFastestDataset.java @@ -23,7 +23,7 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.Operands; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; @@ -42,14 +42,14 @@ public final class ChooseFastestDataset extends PrimitiveOp implements Operand> inputDatasets, Long numExperiments, List> outputTypes, List outputShapes) { + public static ChooseFastestDataset create(Scope scope, Iterable> inputDatasets, Long numExperiments, List> outputTypes, List outputShapes) { OperationBuilder opBuilder = scope.env().opBuilder("ChooseFastestDataset", scope.makeOpName("ChooseFastestDataset")); opBuilder.addInputList(Operands.asOutputs(inputDatasets)); opBuilder = scope.applyControlDependencies(opBuilder); opBuilder.setAttr("num_experiments", numExperiments); DataType[] outputTypesArray = new DataType[outputTypes.size()]; for (int i = 0; i < outputTypesArray.length; ++i) { - outputTypesArray[i] = DataType.fromClass(outputTypes.get(i)); + outputTypesArray[i] = outputTypes.get(i); } opBuilder.setAttr("output_types", outputTypesArray); Shape[] outputShapesArray = new Shape[outputShapes.size()]; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/CollectiveGather.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/CollectiveGather.java index cde655cedc0..b5e6c3456fa 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/CollectiveGather.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/CollectiveGather.java @@ -21,16 +21,17 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.family.TNumber; /** * Mutually accumulates multiple tensors of identical type and shape. * * @param data type for {@code data()} output */ -public final class CollectiveGather extends PrimitiveOp implements Operand { +public final class CollectiveGather extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new CollectiveGather operation. @@ -43,7 +44,7 @@ public final class CollectiveGather extends PrimitiveOp implem * @param shape * @return a new instance of CollectiveGather */ - public static CollectiveGather create(Scope scope, Operand input, Long groupSize, Long groupKey, Long instanceKey, Shape shape) { + public static CollectiveGather create(Scope scope, Operand input, Long groupSize, Long groupKey, Long instanceKey, Shape shape) { OperationBuilder opBuilder = scope.env().opBuilder("CollectiveGather", scope.makeOpName("CollectiveGather")); opBuilder.addInput(input.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/CollectivePermute.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/CollectivePermute.java index c27139b06d9..7084cc20f2b 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/CollectivePermute.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/CollectivePermute.java @@ -23,6 +23,7 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TInt32; /** * An Op to permute tensors across replicated TPU instances. @@ -46,7 +47,7 @@ public final class CollectivePermute extends PrimitiveOp implements Operand CollectivePermute create(Scope scope, Operand input, Operand sourceTargetPairs) { + public static CollectivePermute create(Scope scope, Operand input, Operand sourceTargetPairs) { OperationBuilder opBuilder = scope.env().opBuilder("CollectivePermute", scope.makeOpName("CollectivePermute")); opBuilder.addInput(input.asOutput()); opBuilder.addInput(sourceTargetPairs.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/CombinedNonMaxSuppression.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/CombinedNonMaxSuppression.java index f24124aa0fd..fa1079b0800 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/CombinedNonMaxSuppression.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/CombinedNonMaxSuppression.java @@ -24,6 +24,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TFloat; +import org.tensorflow.types.TInt32; /** * Greedily selects a subset of bounding boxes in descending order of score, @@ -98,7 +100,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of CombinedNonMaxSuppression */ - public static CombinedNonMaxSuppression create(Scope scope, Operand boxes, Operand scores, Operand maxOutputSizePerClass, Operand maxTotalSize, Operand iouThreshold, Operand scoreThreshold, Options... options) { + public static CombinedNonMaxSuppression create(Scope scope, Operand boxes, Operand scores, Operand maxOutputSizePerClass, Operand maxTotalSize, Operand iouThreshold, Operand scoreThreshold, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("CombinedNonMaxSuppression", scope.makeOpName("CombinedNonMaxSuppression")); opBuilder.addInput(boxes.asOutput()); opBuilder.addInput(scores.asOutput()); @@ -144,7 +146,7 @@ public static Options clipBoxes(Boolean clipBoxes) { * A [batch_size, max_detections, 4] float32 tensor * containing the non-max suppressed boxes. */ - public Output nmsedBoxes() { + public Output nmsedBoxes() { return nmsedBoxes; } @@ -152,7 +154,7 @@ public Output nmsedBoxes() { * A [batch_size, max_detections] float32 tensor * containing the scores for the boxes. */ - public Output nmsedScores() { + public Output nmsedScores() { return nmsedScores; } @@ -160,7 +162,7 @@ public Output nmsedScores() { * A [batch_size, max_detections] float32 tensor * containing the classes for the boxes. */ - public Output nmsedClasses() { + public Output nmsedClasses() { return nmsedClasses; } @@ -170,14 +172,14 @@ public Output nmsedClasses() { * nms_boxes[i], nms_scores[i] and nms_class[i] are valid. The rest of the * entries are zero paddings. */ - public Output validDetections() { + public Output validDetections() { return validDetections; } - private Output nmsedBoxes; - private Output nmsedScores; - private Output nmsedClasses; - private Output validDetections; + private Output nmsedBoxes; + private Output nmsedScores; + private Output nmsedClasses; + private Output validDetections; private CombinedNonMaxSuppression(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Concat.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Concat.java index b14f6c04f42..b1aa0063844 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Concat.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Concat.java @@ -25,6 +25,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Concatenates tensors along one dimension. @@ -44,7 +45,7 @@ public final class Concat extends PrimitiveOp implements Operand { * range [-rank(values), rank(values)). * @return a new instance of Concat */ - public static Concat create(Scope scope, Iterable> values, Operand axis) { + public static Concat create(Scope scope, Iterable> values, Operand axis) { OperationBuilder opBuilder = scope.env().opBuilder("ConcatV2", scope.makeOpName("Concat")); opBuilder.addInputList(Operands.asOutputs(values)); opBuilder.addInput(axis.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ConfigureDistributedTPU.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ConfigureDistributedTPU.java index c1e9a06e03f..a582e58049d 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ConfigureDistributedTPU.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ConfigureDistributedTPU.java @@ -23,11 +23,12 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TString; /** * Sets up the centralized structures for a distributed TPU system. */ -public final class ConfigureDistributedTPU extends PrimitiveOp implements Operand { +public final class ConfigureDistributedTPU extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.core.ConfigureDistributedTPU} @@ -119,16 +120,16 @@ public static Options isGlobalInit(Boolean isGlobalInit) { * A serialized tensorflow.tpu.TopologyProto that describes the TPU * topology. */ - public Output topology() { + public Output topology() { return topology; } @Override - public Output asOutput() { + public Output asOutput() { return topology; } - private Output topology; + private Output topology; private ConfigureDistributedTPU(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/CountUpTo.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/CountUpTo.java index a3bedbfa400..bc19b44f5fa 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/CountUpTo.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/CountUpTo.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Increments 'ref' until it reaches 'limit'. @@ -31,7 +32,7 @@ * @param data type for {@code output()} output */ @Operator -public final class CountUpTo extends PrimitiveOp implements Operand { +public final class CountUpTo extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new CountUpTo operation. @@ -42,7 +43,7 @@ public final class CountUpTo extends PrimitiveOp implements Op * 'OutOfRange' error. * @return a new instance of CountUpTo */ - public static CountUpTo create(Scope scope, Operand ref, Long limit) { + public static CountUpTo create(Scope scope, Operand ref, Long limit) { OperationBuilder opBuilder = scope.env().opBuilder("CountUpTo", scope.makeOpName("CountUpTo")); opBuilder.addInput(ref.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/CrossReplicaSum.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/CrossReplicaSum.java index 0fd6d9177b6..5c54b0d2bf4 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/CrossReplicaSum.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/CrossReplicaSum.java @@ -23,6 +23,8 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.family.TNumber; /** * An Op to sum inputs across replicated TPU instances. @@ -36,7 +38,7 @@ * * @param data type for {@code output()} output */ -public final class CrossReplicaSum extends PrimitiveOp implements Operand { +public final class CrossReplicaSum extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new CrossReplicaSum operation. @@ -48,7 +50,7 @@ public final class CrossReplicaSum extends PrimitiveOp impleme * replica ids in the ith subgroup. * @return a new instance of CrossReplicaSum */ - public static CrossReplicaSum create(Scope scope, Operand input, Operand groupAssignment) { + public static CrossReplicaSum create(Scope scope, Operand input, Operand groupAssignment) { OperationBuilder opBuilder = scope.env().opBuilder("CrossReplicaSum", scope.makeOpName("CrossReplicaSum")); opBuilder.addInput(input.asOutput()); opBuilder.addInput(groupAssignment.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/CudnnRNNBackpropV3.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/CudnnRNNBackpropV3.java index 2be49c97997..e61fb9ffe32 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/CudnnRNNBackpropV3.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/CudnnRNNBackpropV3.java @@ -23,6 +23,8 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.family.TNumber; /** * Backprop step of CudnnRNNV3. @@ -77,7 +79,7 @@ * * @param data type for {@code inputBackprop()} output */ -public final class CudnnRNNBackpropV3 extends PrimitiveOp { +public final class CudnnRNNBackpropV3 extends PrimitiveOp { /** * Optional attributes for {@link org.tensorflow.op.core.CudnnRNNBackpropV3} @@ -181,7 +183,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of CudnnRNNBackpropV3 */ - public static CudnnRNNBackpropV3 create(Scope scope, Operand input, Operand inputH, Operand inputC, Operand params, Operand sequenceLengths, Operand output, Operand outputH, Operand outputC, Operand outputBackprop, Operand outputHBackprop, Operand outputCBackprop, Operand reserveSpace, Operand hostReserved, Options... options) { + public static CudnnRNNBackpropV3 create(Scope scope, Operand input, Operand inputH, Operand inputC, Operand params, Operand sequenceLengths, Operand output, Operand outputH, Operand outputC, Operand outputBackprop, Operand outputHBackprop, Operand outputCBackprop, Operand reserveSpace, Operand hostReserved, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("CudnnRNNBackpropV3", scope.makeOpName("CudnnRNNBackpropV3")); opBuilder.addInput(input.asOutput()); opBuilder.addInput(inputH.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/CudnnRNNCanonicalToParamsV2.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/CudnnRNNCanonicalToParamsV2.java index acc0913384a..3e285c0dca4 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/CudnnRNNCanonicalToParamsV2.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/CudnnRNNCanonicalToParamsV2.java @@ -25,6 +25,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.family.TNumber; /** * Converts CudnnRNN params from canonical form to usable form. It supports the projection in LSTM. @@ -63,7 +65,7 @@ * @param data type for {@code params()} output */ @Operator -public final class CudnnRNNCanonicalToParamsV2 extends PrimitiveOp implements Operand { +public final class CudnnRNNCanonicalToParamsV2 extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.core.CudnnRNNCanonicalToParamsV2} @@ -150,7 +152,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of CudnnRNNCanonicalToParamsV2 */ - public static CudnnRNNCanonicalToParamsV2 create(Scope scope, Operand numLayers, Operand numUnits, Operand inputSize, Iterable> weights, Iterable> biases, Options... options) { + public static CudnnRNNCanonicalToParamsV2 create(Scope scope, Operand numLayers, Operand numUnits, Operand inputSize, Iterable> weights, Iterable> biases, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("CudnnRNNCanonicalToParamsV2", scope.makeOpName("CudnnRNNCanonicalToParamsV2")); opBuilder.addInput(numLayers.asOutput()); opBuilder.addInput(numUnits.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/CudnnRNNParamsToCanonicalV2.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/CudnnRNNParamsToCanonicalV2.java index e1386573c3a..29371bac24d 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/CudnnRNNParamsToCanonicalV2.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/CudnnRNNParamsToCanonicalV2.java @@ -26,6 +26,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.family.TNumber; /** * Retrieves CudnnRNN params in canonical form. It supports the projection in LSTM. @@ -64,7 +66,7 @@ * @param data type for {@code weights()} output */ @Operator -public final class CudnnRNNParamsToCanonicalV2 extends PrimitiveOp { +public final class CudnnRNNParamsToCanonicalV2 extends PrimitiveOp { /** * Optional attributes for {@link org.tensorflow.op.core.CudnnRNNParamsToCanonicalV2} @@ -152,7 +154,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of CudnnRNNParamsToCanonicalV2 */ - public static CudnnRNNParamsToCanonicalV2 create(Scope scope, Operand numLayers, Operand numUnits, Operand inputSize, Operand params, Long numParamsWeights, Long numParamsBiases, Options... options) { + public static CudnnRNNParamsToCanonicalV2 create(Scope scope, Operand numLayers, Operand numUnits, Operand inputSize, Operand params, Long numParamsWeights, Long numParamsBiases, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("CudnnRNNParamsToCanonicalV2", scope.makeOpName("CudnnRNNParamsToCanonicalV2")); opBuilder.addInput(numLayers.asOutput()); opBuilder.addInput(numUnits.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/CudnnRNNV3.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/CudnnRNNV3.java index 2786a410b16..5a3257d65fd 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/CudnnRNNV3.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/CudnnRNNV3.java @@ -23,6 +23,8 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.family.TNumber; /** * A RNN backed by cuDNN. @@ -67,7 +69,7 @@ * * @param data type for {@code output()} output */ -public final class CudnnRNNV3 extends PrimitiveOp { +public final class CudnnRNNV3 extends PrimitiveOp { /** * Optional attributes for {@link org.tensorflow.op.core.CudnnRNNV3} @@ -172,7 +174,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of CudnnRNNV3 */ - public static CudnnRNNV3 create(Scope scope, Operand input, Operand inputH, Operand inputC, Operand params, Operand sequenceLengths, Options... options) { + public static CudnnRNNV3 create(Scope scope, Operand input, Operand inputH, Operand inputC, Operand params, Operand sequenceLengths, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("CudnnRNNV3", scope.makeOpName("CudnnRNNV3")); opBuilder.addInput(input.asOutput()); opBuilder.addInput(inputH.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/CumulativeLogsumexp.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/CumulativeLogsumexp.java index 4ac0ae657c0..5f2a3b83e1d 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/CumulativeLogsumexp.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/CumulativeLogsumexp.java @@ -23,6 +23,7 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.family.TNumber; /** * Compute the cumulative product of the tensor `x` along `axis`. @@ -47,7 +48,7 @@ * * @param data type for {@code out()} output */ -public final class CumulativeLogsumexp extends PrimitiveOp implements Operand { +public final class CumulativeLogsumexp extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.core.CumulativeLogsumexp} @@ -87,7 +88,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of CumulativeLogsumexp */ - public static CumulativeLogsumexp create(Scope scope, Operand x, Operand axis, Options... options) { + public static CumulativeLogsumexp create(Scope scope, Operand x, Operand axis, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("CumulativeLogsumexp", scope.makeOpName("CumulativeLogsumexp")); opBuilder.addInput(x.asOutput()); opBuilder.addInput(axis.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/DatasetCardinality.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/DatasetCardinality.java index 26cc47eef2a..1a6094d5a92 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/DatasetCardinality.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/DatasetCardinality.java @@ -23,13 +23,14 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TInt64; /** * Returns the cardinality of `input_dataset`. *

* Returns the cardinality of `input_dataset`. */ -public final class DatasetCardinality extends PrimitiveOp implements Operand { +public final class DatasetCardinality extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new DatasetCardinality operation. @@ -49,16 +50,16 @@ public static DatasetCardinality create(Scope scope, Operand inputDataset) { * The cardinality of `input_dataset`. Named constants are used to represent * infinite and unknown cardinality. */ - public Output cardinality() { + public Output cardinality() { return cardinality; } @Override - public Output asOutput() { + public Output asOutput() { return cardinality; } - private Output cardinality; + private Output cardinality; private DatasetCardinality(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/DatasetFromGraph.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/DatasetFromGraph.java index 100706ba1a8..74ebb325df1 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/DatasetFromGraph.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/DatasetFromGraph.java @@ -23,6 +23,7 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TString; /** * Creates a dataset from the given `graph_def`. @@ -38,7 +39,7 @@ public final class DatasetFromGraph extends PrimitiveOp implements Operand graphDef) { + public static DatasetFromGraph create(Scope scope, Operand graphDef) { OperationBuilder opBuilder = scope.env().opBuilder("DatasetFromGraph", scope.makeOpName("DatasetFromGraph")); opBuilder.addInput(graphDef.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/DecodePaddedRaw.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/DecodePaddedRaw.java index eb71ab6e692..8638cd7d4be 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/DecodePaddedRaw.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/DecodePaddedRaw.java @@ -25,6 +25,9 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.TString; +import org.tensorflow.types.family.TNumber; /** * Reinterpret the bytes of a string as a vector of numbers. @@ -32,7 +35,7 @@ * @param data type for {@code output()} output */ @Operator -public final class DecodePaddedRaw extends PrimitiveOp implements Operand { +public final class DecodePaddedRaw extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.core.DecodePaddedRaw} @@ -65,12 +68,12 @@ private Options() { * @param options carries optional attributes values * @return a new instance of DecodePaddedRaw */ - public static DecodePaddedRaw create(Scope scope, Operand inputBytes, Operand fixedLength, Class outType, Options... options) { + public static DecodePaddedRaw create(Scope scope, Operand inputBytes, Operand fixedLength, DataType outType, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("DecodePaddedRaw", scope.makeOpName("DecodePaddedRaw")); opBuilder.addInput(inputBytes.asOutput()); opBuilder.addInput(fixedLength.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); - opBuilder.setAttr("out_type", DataType.fromClass(outType)); + opBuilder.setAttr("out_type", outType); if (options != null) { for (Options opts : options) { if (opts.littleEndian != null) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/DecodeProto.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/DecodeProto.java index 9f188ce008c..705511a0386 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/DecodeProto.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/DecodeProto.java @@ -26,6 +26,8 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.TString; /** * The op extracts fields from a serialized protocol buffers message into tensors. @@ -130,7 +132,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of DecodeProto */ - public static DecodeProto create(Scope scope, Operand bytes, String messageType, List fieldNames, List> outputTypes, Options... options) { + public static DecodeProto create(Scope scope, Operand bytes, String messageType, List fieldNames, List> outputTypes, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("DecodeProtoV2", scope.makeOpName("DecodeProto")); opBuilder.addInput(bytes.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); @@ -142,7 +144,7 @@ public static DecodeProto create(Scope scope, Operand bytes, String mess opBuilder.setAttr("field_names", fieldNamesArray); DataType[] outputTypesArray = new DataType[outputTypes.size()]; for (int i = 0; i < outputTypesArray.length; ++i) { - outputTypesArray[i] = DataType.fromClass(outputTypes.get(i)); + outputTypesArray[i] = outputTypes.get(i); } opBuilder.setAttr("output_types", outputTypesArray); if (options != null) { @@ -188,7 +190,7 @@ public static Options sanitize(Boolean sanitize) { * Each entry is the number of values found for the corresponding field. * Optional fields may have 0 or 1 values. */ - public Output sizes() { + public Output sizes() { return sizes; } @@ -201,7 +203,7 @@ public List> values() { return values; } - private Output sizes; + private Output sizes; private List> values; private DecodeProto(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/DeleteSessionTensor.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/DeleteSessionTensor.java index 7024c12928e..4da393ce1af 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/DeleteSessionTensor.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/DeleteSessionTensor.java @@ -23,6 +23,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TString; /** * Delete the tensor specified by its handle in the session. @@ -37,7 +38,7 @@ public final class DeleteSessionTensor extends PrimitiveOp { * @param handle The handle for a tensor stored in the session state. * @return a new instance of DeleteSessionTensor */ - public static DeleteSessionTensor create(Scope scope, Operand handle) { + public static DeleteSessionTensor create(Scope scope, Operand handle) { OperationBuilder opBuilder = scope.env().opBuilder("DeleteSessionTensor", scope.makeOpName("DeleteSessionTensor")); opBuilder.addInput(handle.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/DirectedInterleaveDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/DirectedInterleaveDataset.java index 7d15d488267..f783eaf98ba 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/DirectedInterleaveDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/DirectedInterleaveDataset.java @@ -23,7 +23,7 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.Operands; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; @@ -45,14 +45,14 @@ public final class DirectedInterleaveDataset extends PrimitiveOp implements Oper * @param outputShapes * @return a new instance of DirectedInterleaveDataset */ - public static DirectedInterleaveDataset create(Scope scope, Operand selectorInputDataset, Iterable> dataInputDatasets, List> outputTypes, List outputShapes) { + public static DirectedInterleaveDataset create(Scope scope, Operand selectorInputDataset, Iterable> dataInputDatasets, List> outputTypes, List outputShapes) { OperationBuilder opBuilder = scope.env().opBuilder("DirectedInterleaveDataset", scope.makeOpName("DirectedInterleaveDataset")); opBuilder.addInput(selectorInputDataset.asOutput()); opBuilder.addInputList(Operands.asOutputs(dataInputDatasets)); opBuilder = scope.applyControlDependencies(opBuilder); DataType[] outputTypesArray = new DataType[outputTypes.size()]; for (int i = 0; i < outputTypesArray.length; ++i) { - outputTypesArray[i] = DataType.fromClass(outputTypes.get(i)); + outputTypesArray[i] = outputTypes.get(i); } opBuilder.setAttr("output_types", outputTypesArray); Shape[] outputShapesArray = new Shape[outputShapes.size()]; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/DrawBoundingBoxesV2.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/DrawBoundingBoxesV2.java index dc344bcadf5..d7ff0d089ac 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/DrawBoundingBoxesV2.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/DrawBoundingBoxesV2.java @@ -24,6 +24,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TFloat; +import org.tensorflow.types.family.TNumber; /** * Draw bounding boxes on a batch of images. @@ -43,7 +45,7 @@ * @param data type for {@code output()} output */ @Operator -public final class DrawBoundingBoxesV2 extends PrimitiveOp implements Operand { +public final class DrawBoundingBoxesV2 extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new DrawBoundingBoxesV2 operation. @@ -55,7 +57,7 @@ public final class DrawBoundingBoxesV2 extends PrimitiveOp imp * @param colors 2-D. A list of RGBA colors to cycle through for the boxes. * @return a new instance of DrawBoundingBoxesV2 */ - public static DrawBoundingBoxesV2 create(Scope scope, Operand images, Operand boxes, Operand colors) { + public static DrawBoundingBoxesV2 create(Scope scope, Operand images, Operand boxes, Operand colors) { OperationBuilder opBuilder = scope.env().opBuilder("DrawBoundingBoxesV2", scope.makeOpName("DrawBoundingBoxesV2")); opBuilder.addInput(images.asOutput()); opBuilder.addInput(boxes.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/DynamicPartition.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/DynamicPartition.java index c06b8b156dd..8d6313fe0d6 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/DynamicPartition.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/DynamicPartition.java @@ -27,6 +27,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt32; /** * Partitions `data` into `num_partitions` tensors using indices from `partitions`. @@ -79,7 +80,7 @@ public final class DynamicPartition extends PrimitiveOp implements Iterable DynamicPartition create(Scope scope, Operand data, Operand partitions, Long numPartitions) { + public static DynamicPartition create(Scope scope, Operand data, Operand partitions, Long numPartitions) { OperationBuilder opBuilder = scope.env().opBuilder("DynamicPartition", scope.makeOpName("DynamicPartition")); opBuilder.addInput(data.asOutput()); opBuilder.addInput(partitions.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/DynamicStitch.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/DynamicStitch.java index 864bc9631b0..fe49e5104d2 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/DynamicStitch.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/DynamicStitch.java @@ -25,6 +25,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt32; /** * Interleave the values from the `data` tensors into a single tensor. @@ -97,7 +98,7 @@ public final class DynamicStitch extends PrimitiveOp implements Operand { * @param data * @return a new instance of DynamicStitch */ - public static DynamicStitch create(Scope scope, Iterable> indices, Iterable> data) { + public static DynamicStitch create(Scope scope, Iterable> indices, Iterable> data) { OperationBuilder opBuilder = scope.env().opBuilder("DynamicStitch", scope.makeOpName("DynamicStitch")); opBuilder.addInputList(Operands.asOutputs(indices)); opBuilder.addInputList(Operands.asOutputs(data)); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/EditDistance.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/EditDistance.java index 6cd854fcc3a..53ff3987357 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/EditDistance.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/EditDistance.java @@ -24,6 +24,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TFloat; +import org.tensorflow.types.TInt64; /** * Computes the (possibly normalized) Levenshtein Edit Distance. @@ -36,7 +38,7 @@ * The inputs are: */ @Operator -public final class EditDistance extends PrimitiveOp implements Operand { +public final class EditDistance extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.core.EditDistance} @@ -77,7 +79,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of EditDistance */ - public static EditDistance create(Scope scope, Operand hypothesisIndices, Operand hypothesisValues, Operand hypothesisShape, Operand truthIndices, Operand truthValues, Operand truthShape, Options... options) { + public static EditDistance create(Scope scope, Operand hypothesisIndices, Operand hypothesisValues, Operand hypothesisShape, Operand truthIndices, Operand truthValues, Operand truthShape, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("EditDistance", scope.makeOpName("EditDistance")); opBuilder.addInput(hypothesisIndices.asOutput()); opBuilder.addInput(hypothesisValues.asOutput()); @@ -137,16 +139,16 @@ public static Options normalize(Boolean normalize) { * output = [[inf, 1.0], // (0,0): no truth, (0,1): no hypothesis * [0.5, 1.0]] // (1,0): addition, (1,1): no hypothesis */ - public Output output() { + public Output output() { return output; } @Override - public Output asOutput() { + public Output asOutput() { return output; } - private Output output; + private Output output; private EditDistance(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Empty.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Empty.java index 1d15b16bb04..acbe02b7ad9 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Empty.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Empty.java @@ -25,6 +25,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt32; /** * Creates a tensor with the given shape. @@ -64,11 +65,11 @@ private Options() { * @param options carries optional attributes values * @return a new instance of Empty */ - public static Empty create(Scope scope, Operand shape, Class dtype, Options... options) { + public static Empty create(Scope scope, Operand shape, DataType dtype, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("Empty", scope.makeOpName("Empty")); opBuilder.addInput(shape.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); - opBuilder.setAttr("dtype", DataType.fromClass(dtype)); + opBuilder.setAttr("dtype", dtype); if (options != null) { for (Options opts : options) { if (opts.init != null) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/EmptyTensorList.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/EmptyTensorList.java index f933e1d3c34..98cba1cdcff 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/EmptyTensorList.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/EmptyTensorList.java @@ -25,6 +25,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.family.TNumber; /** * Creates and returns an empty tensor list. @@ -48,12 +50,12 @@ public final class EmptyTensorList extends PrimitiveOp implements Operand EmptyTensorList create(Scope scope, Operand elementShape, Operand maxNumElements, Class elementDtype) { + public static EmptyTensorList create(Scope scope, Operand elementShape, Operand maxNumElements, DataType elementDtype) { OperationBuilder opBuilder = scope.env().opBuilder("EmptyTensorList", scope.makeOpName("EmptyTensorList")); opBuilder.addInput(elementShape.asOutput()); opBuilder.addInput(maxNumElements.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); - opBuilder.setAttr("element_dtype", DataType.fromClass(elementDtype)); + opBuilder.setAttr("element_dtype", elementDtype); return new EmptyTensorList(opBuilder.build()); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/EncodeProto.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/EncodeProto.java index 2bcaec9aa45..c3a9c16a2dc 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/EncodeProto.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/EncodeProto.java @@ -25,6 +25,8 @@ import org.tensorflow.op.Operands; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.TString; /** * The op serializes protobuf messages provided in the input tensors. @@ -70,7 +72,7 @@ * - A "bytes://", in which protocol descriptors are created from ``, * which is expected to be a `FileDescriptorSet` serialized as a string. */ -public final class EncodeProto extends PrimitiveOp implements Operand { +public final class EncodeProto extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.core.EncodeProto} @@ -102,7 +104,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of EncodeProto */ - public static EncodeProto create(Scope scope, Operand sizes, Iterable> values, List fieldNames, String messageType, Options... options) { + public static EncodeProto create(Scope scope, Operand sizes, Iterable> values, List fieldNames, String messageType, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("EncodeProto", scope.makeOpName("EncodeProto")); opBuilder.addInput(sizes.asOutput()); opBuilder.addInputList(Operands.asOutputs(values)); @@ -133,16 +135,16 @@ public static Options descriptorSource(String descriptorSource) { /** * Tensor of serialized protos with shape `batch_shape`. */ - public Output bytes() { + public Output bytes() { return bytes; } @Override - public Output asOutput() { + public Output asOutput() { return bytes; } - private Output bytes; + private Output bytes; private EncodeProto(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/EnqueueTPUEmbeddingIntegerBatch.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/EnqueueTPUEmbeddingIntegerBatch.java index d17275aebb0..eafd8f76a5c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/EnqueueTPUEmbeddingIntegerBatch.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/EnqueueTPUEmbeddingIntegerBatch.java @@ -23,6 +23,8 @@ import org.tensorflow.op.Operands; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.TString; /** * An op that enqueues a list of input batch tensors to TPUEmbedding. @@ -62,7 +64,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of EnqueueTPUEmbeddingIntegerBatch */ - public static EnqueueTPUEmbeddingIntegerBatch create(Scope scope, Iterable> batch, Operand modeOverride, Options... options) { + public static EnqueueTPUEmbeddingIntegerBatch create(Scope scope, Iterable> batch, Operand modeOverride, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("EnqueueTPUEmbeddingIntegerBatch", scope.makeOpName("EnqueueTPUEmbeddingIntegerBatch")); opBuilder.addInputList(Operands.asOutputs(batch)); opBuilder.addInput(modeOverride.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/EnqueueTPUEmbeddingSparseBatch.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/EnqueueTPUEmbeddingSparseBatch.java index 489907b3137..4d0d30a9cc3 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/EnqueueTPUEmbeddingSparseBatch.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/EnqueueTPUEmbeddingSparseBatch.java @@ -24,6 +24,8 @@ import org.tensorflow.op.Operands; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TString; +import org.tensorflow.types.family.TNumber; /** * An op that enqueues TPUEmbedding input indices from a SparseTensor. @@ -93,7 +95,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of EnqueueTPUEmbeddingSparseBatch */ - public static EnqueueTPUEmbeddingSparseBatch create(Scope scope, Iterable> sampleIndices, Iterable> embeddingIndices, Iterable> aggregationWeights, Operand modeOverride, Options... options) { + public static EnqueueTPUEmbeddingSparseBatch create(Scope scope, Iterable> sampleIndices, Iterable> embeddingIndices, Iterable> aggregationWeights, Operand modeOverride, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("EnqueueTPUEmbeddingSparseBatch", scope.makeOpName("EnqueueTPUEmbeddingSparseBatch")); opBuilder.addInputList(Operands.asOutputs(sampleIndices)); opBuilder.addInputList(Operands.asOutputs(embeddingIndices)); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/EnqueueTPUEmbeddingSparseTensorBatch.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/EnqueueTPUEmbeddingSparseTensorBatch.java index 74418c46616..163c3ae5d9f 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/EnqueueTPUEmbeddingSparseTensorBatch.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/EnqueueTPUEmbeddingSparseTensorBatch.java @@ -24,6 +24,8 @@ import org.tensorflow.op.Operands; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TString; +import org.tensorflow.types.family.TNumber; /** * Eases the porting of code that uses tf.nn.embedding_lookup_sparse(). @@ -106,7 +108,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of EnqueueTPUEmbeddingSparseTensorBatch */ - public static EnqueueTPUEmbeddingSparseTensorBatch create(Scope scope, Iterable> sampleIndices, Iterable> embeddingIndices, Iterable> aggregationWeights, Operand modeOverride, List tableIds, Options... options) { + public static EnqueueTPUEmbeddingSparseTensorBatch create(Scope scope, Iterable> sampleIndices, Iterable> embeddingIndices, Iterable> aggregationWeights, Operand modeOverride, List tableIds, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("EnqueueTPUEmbeddingSparseTensorBatch", scope.makeOpName("EnqueueTPUEmbeddingSparseTensorBatch")); opBuilder.addInputList(Operands.asOutputs(sampleIndices)); opBuilder.addInputList(Operands.asOutputs(embeddingIndices)); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/EnsureShape.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/EnsureShape.java index 8d808e65730..ac4ca4a10c4 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/EnsureShape.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/EnsureShape.java @@ -21,7 +21,7 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/EuclideanNorm.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/EuclideanNorm.java index d1fa6d0bd5c..cac122d5dd3 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/EuclideanNorm.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/EuclideanNorm.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Computes the euclidean norm of elements across dimensions of a tensor. @@ -67,7 +68,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of EuclideanNorm */ - public static EuclideanNorm create(Scope scope, Operand input, Operand axis, Options... options) { + public static EuclideanNorm create(Scope scope, Operand input, Operand axis, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("EuclideanNorm", scope.makeOpName("EuclideanNorm")); opBuilder.addInput(input.asOutput()); opBuilder.addInput(axis.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExpandDims.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExpandDims.java index 192a86a4cbf..5acef7f3dad 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExpandDims.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExpandDims.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Inserts a dimension of 1 into a tensor's shape. @@ -72,7 +73,7 @@ public final class ExpandDims extends PrimitiveOp implements Operand { * `[-rank(input) - 1, rank(input)]`. * @return a new instance of ExpandDims */ - public static ExpandDims create(Scope scope, Operand input, Operand axis) { + public static ExpandDims create(Scope scope, Operand input, Operand axis) { OperationBuilder opBuilder = scope.env().opBuilder("ExpandDims", scope.makeOpName("ExpandDims")); opBuilder.addInput(input.asOutput()); opBuilder.addInput(axis.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalAutoShardDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalAutoShardDataset.java index 9f8a0a3b8c1..017a100b508 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalAutoShardDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalAutoShardDataset.java @@ -23,9 +23,10 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TInt64; /** * Creates a dataset that shards the input dataset. @@ -51,7 +52,7 @@ public final class ExperimentalAutoShardDataset extends PrimitiveOp implements O * @param outputShapes * @return a new instance of ExperimentalAutoShardDataset */ - public static ExperimentalAutoShardDataset create(Scope scope, Operand inputDataset, Operand numWorkers, Operand index, List> outputTypes, List outputShapes) { + public static ExperimentalAutoShardDataset create(Scope scope, Operand inputDataset, Operand numWorkers, Operand index, List> outputTypes, List outputShapes) { OperationBuilder opBuilder = scope.env().opBuilder("ExperimentalAutoShardDataset", scope.makeOpName("ExperimentalAutoShardDataset")); opBuilder.addInput(inputDataset.asOutput()); opBuilder.addInput(numWorkers.asOutput()); @@ -59,7 +60,7 @@ public static ExperimentalAutoShardDataset create(Scope scope, Operand inputD opBuilder = scope.applyControlDependencies(opBuilder); DataType[] outputTypesArray = new DataType[outputTypes.size()]; for (int i = 0; i < outputTypesArray.length; ++i) { - outputTypesArray[i] = DataType.fromClass(outputTypes.get(i)); + outputTypesArray[i] = outputTypes.get(i); } opBuilder.setAttr("output_types", outputTypesArray); Shape[] outputShapesArray = new Shape[outputShapes.size()]; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalBytesProducedStatsDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalBytesProducedStatsDataset.java index 667105314ae..e3fcb5fe6b4 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalBytesProducedStatsDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalBytesProducedStatsDataset.java @@ -23,9 +23,10 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TString; /** * Records the bytes size of each element of `input_dataset` in a StatsAggregator. @@ -42,14 +43,14 @@ public final class ExperimentalBytesProducedStatsDataset extends PrimitiveOp imp * @param outputShapes * @return a new instance of ExperimentalBytesProducedStatsDataset */ - public static ExperimentalBytesProducedStatsDataset create(Scope scope, Operand inputDataset, Operand tag, List> outputTypes, List outputShapes) { + public static ExperimentalBytesProducedStatsDataset create(Scope scope, Operand inputDataset, Operand tag, List> outputTypes, List outputShapes) { OperationBuilder opBuilder = scope.env().opBuilder("ExperimentalBytesProducedStatsDataset", scope.makeOpName("ExperimentalBytesProducedStatsDataset")); opBuilder.addInput(inputDataset.asOutput()); opBuilder.addInput(tag.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); DataType[] outputTypesArray = new DataType[outputTypes.size()]; for (int i = 0; i < outputTypesArray.length; ++i) { - outputTypesArray[i] = DataType.fromClass(outputTypes.get(i)); + outputTypesArray[i] = outputTypes.get(i); } opBuilder.setAttr("output_types", outputTypesArray); Shape[] outputShapesArray = new Shape[outputShapes.size()]; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalChooseFastestDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalChooseFastestDataset.java index 402b1096985..b555b5cd974 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalChooseFastestDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalChooseFastestDataset.java @@ -23,7 +23,7 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.Operands; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; @@ -42,14 +42,14 @@ public final class ExperimentalChooseFastestDataset extends PrimitiveOp implemen * @param outputShapes * @return a new instance of ExperimentalChooseFastestDataset */ - public static ExperimentalChooseFastestDataset create(Scope scope, Iterable> inputDatasets, Long numExperiments, List> outputTypes, List outputShapes) { + public static ExperimentalChooseFastestDataset create(Scope scope, Iterable> inputDatasets, Long numExperiments, List> outputTypes, List outputShapes) { OperationBuilder opBuilder = scope.env().opBuilder("ExperimentalChooseFastestDataset", scope.makeOpName("ExperimentalChooseFastestDataset")); opBuilder.addInputList(Operands.asOutputs(inputDatasets)); opBuilder = scope.applyControlDependencies(opBuilder); opBuilder.setAttr("num_experiments", numExperiments); DataType[] outputTypesArray = new DataType[outputTypes.size()]; for (int i = 0; i < outputTypesArray.length; ++i) { - outputTypesArray[i] = DataType.fromClass(outputTypes.get(i)); + outputTypesArray[i] = outputTypes.get(i); } opBuilder.setAttr("output_types", outputTypesArray); Shape[] outputShapesArray = new Shape[outputShapes.size()]; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalDatasetCardinality.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalDatasetCardinality.java index 4a81173ed9a..91f62690849 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalDatasetCardinality.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalDatasetCardinality.java @@ -23,13 +23,14 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TInt64; /** * Returns the cardinality of `input_dataset`. *

* Returns the cardinality of `input_dataset`. */ -public final class ExperimentalDatasetCardinality extends PrimitiveOp implements Operand { +public final class ExperimentalDatasetCardinality extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new ExperimentalDatasetCardinality operation. @@ -49,16 +50,16 @@ public static ExperimentalDatasetCardinality create(Scope scope, Operand inpu * The cardinality of `input_dataset`. Named constants are used to represent * infinite and unknown cardinality. */ - public Output cardinality() { + public Output cardinality() { return cardinality; } @Override - public Output asOutput() { + public Output asOutput() { return cardinality; } - private Output cardinality; + private Output cardinality; private ExperimentalDatasetCardinality(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalDatasetToTFRecord.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalDatasetToTFRecord.java index 77f0a40e7fd..2243a662b33 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalDatasetToTFRecord.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalDatasetToTFRecord.java @@ -22,6 +22,7 @@ import org.tensorflow.OperationBuilder; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TString; /** * Writes the given dataset to the given file using the TFRecord format. @@ -38,7 +39,7 @@ public final class ExperimentalDatasetToTFRecord extends PrimitiveOp { * compression), (ii) "ZLIB", or (iii) "GZIP". * @return a new instance of ExperimentalDatasetToTFRecord */ - public static ExperimentalDatasetToTFRecord create(Scope scope, Operand inputDataset, Operand filename, Operand compressionType) { + public static ExperimentalDatasetToTFRecord create(Scope scope, Operand inputDataset, Operand filename, Operand compressionType) { OperationBuilder opBuilder = scope.env().opBuilder("ExperimentalDatasetToTFRecord", scope.makeOpName("ExperimentalDatasetToTFRecord")); opBuilder.addInput(inputDataset.asOutput()); opBuilder.addInput(filename.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalDenseToSparseBatchDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalDenseToSparseBatchDataset.java index 7a0095b0a05..6369c5f0a84 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalDenseToSparseBatchDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalDenseToSparseBatchDataset.java @@ -23,9 +23,10 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TInt64; /** * Creates a dataset that batches input elements into a SparseTensor. @@ -46,7 +47,7 @@ public final class ExperimentalDenseToSparseBatchDataset extends PrimitiveOp imp * @param outputShapes * @return a new instance of ExperimentalDenseToSparseBatchDataset */ - public static ExperimentalDenseToSparseBatchDataset create(Scope scope, Operand inputDataset, Operand batchSize, Operand rowShape, List> outputTypes, List outputShapes) { + public static ExperimentalDenseToSparseBatchDataset create(Scope scope, Operand inputDataset, Operand batchSize, Operand rowShape, List> outputTypes, List outputShapes) { OperationBuilder opBuilder = scope.env().opBuilder("ExperimentalDenseToSparseBatchDataset", scope.makeOpName("ExperimentalDenseToSparseBatchDataset")); opBuilder.addInput(inputDataset.asOutput()); opBuilder.addInput(batchSize.asOutput()); @@ -54,7 +55,7 @@ public static ExperimentalDenseToSparseBatchDataset create(Scope scope, Operand< opBuilder = scope.applyControlDependencies(opBuilder); DataType[] outputTypesArray = new DataType[outputTypes.size()]; for (int i = 0; i < outputTypesArray.length; ++i) { - outputTypesArray[i] = DataType.fromClass(outputTypes.get(i)); + outputTypesArray[i] = outputTypes.get(i); } opBuilder.setAttr("output_types", outputTypesArray); Shape[] outputShapesArray = new Shape[outputShapes.size()]; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalLatencyStatsDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalLatencyStatsDataset.java index 787c91bb9e2..b21985da711 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalLatencyStatsDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalLatencyStatsDataset.java @@ -23,9 +23,10 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TString; /** * Records the latency of producing `input_dataset` elements in a StatsAggregator. @@ -42,14 +43,14 @@ public final class ExperimentalLatencyStatsDataset extends PrimitiveOp implement * @param outputShapes * @return a new instance of ExperimentalLatencyStatsDataset */ - public static ExperimentalLatencyStatsDataset create(Scope scope, Operand inputDataset, Operand tag, List> outputTypes, List outputShapes) { + public static ExperimentalLatencyStatsDataset create(Scope scope, Operand inputDataset, Operand tag, List> outputTypes, List outputShapes) { OperationBuilder opBuilder = scope.env().opBuilder("ExperimentalLatencyStatsDataset", scope.makeOpName("ExperimentalLatencyStatsDataset")); opBuilder.addInput(inputDataset.asOutput()); opBuilder.addInput(tag.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); DataType[] outputTypesArray = new DataType[outputTypes.size()]; for (int i = 0; i < outputTypesArray.length; ++i) { - outputTypesArray[i] = DataType.fromClass(outputTypes.get(i)); + outputTypesArray[i] = outputTypes.get(i); } opBuilder.setAttr("output_types", outputTypesArray); Shape[] outputShapesArray = new Shape[outputShapes.size()]; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalMatchingFilesDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalMatchingFilesDataset.java index 0508f121e7b..e945cf88d28 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalMatchingFilesDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalMatchingFilesDataset.java @@ -23,6 +23,7 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TString; /** */ @@ -35,7 +36,7 @@ public final class ExperimentalMatchingFilesDataset extends PrimitiveOp implemen * @param patterns * @return a new instance of ExperimentalMatchingFilesDataset */ - public static ExperimentalMatchingFilesDataset create(Scope scope, Operand patterns) { + public static ExperimentalMatchingFilesDataset create(Scope scope, Operand patterns) { OperationBuilder opBuilder = scope.env().opBuilder("ExperimentalMatchingFilesDataset", scope.makeOpName("ExperimentalMatchingFilesDataset")); opBuilder.addInput(patterns.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalMaxIntraOpParallelismDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalMaxIntraOpParallelismDataset.java index 57c5b91add8..cc234707f63 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalMaxIntraOpParallelismDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalMaxIntraOpParallelismDataset.java @@ -23,9 +23,10 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TInt64; /** * Creates a dataset that overrides the maximum intra-op parallelism. @@ -42,14 +43,14 @@ public final class ExperimentalMaxIntraOpParallelismDataset extends PrimitiveOp * @param outputShapes * @return a new instance of ExperimentalMaxIntraOpParallelismDataset */ - public static ExperimentalMaxIntraOpParallelismDataset create(Scope scope, Operand inputDataset, Operand maxIntraOpParallelism, List> outputTypes, List outputShapes) { + public static ExperimentalMaxIntraOpParallelismDataset create(Scope scope, Operand inputDataset, Operand maxIntraOpParallelism, List> outputTypes, List outputShapes) { OperationBuilder opBuilder = scope.env().opBuilder("ExperimentalMaxIntraOpParallelismDataset", scope.makeOpName("ExperimentalMaxIntraOpParallelismDataset")); opBuilder.addInput(inputDataset.asOutput()); opBuilder.addInput(maxIntraOpParallelism.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); DataType[] outputTypesArray = new DataType[outputTypes.size()]; for (int i = 0; i < outputTypesArray.length; ++i) { - outputTypesArray[i] = DataType.fromClass(outputTypes.get(i)); + outputTypesArray[i] = outputTypes.get(i); } opBuilder.setAttr("output_types", outputTypesArray); Shape[] outputShapesArray = new Shape[outputShapes.size()]; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalParseExampleDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalParseExampleDataset.java index eae72a12ee0..cc5c676b182 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalParseExampleDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalParseExampleDataset.java @@ -23,10 +23,11 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.Operands; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TInt64; /** * Transforms `input_dataset` containing `Example` protos as vectors of DT_STRING into a dataset of `Tensor` or `SparseTensor` objects representing the parsed features. @@ -81,7 +82,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of ExperimentalParseExampleDataset */ - public static ExperimentalParseExampleDataset create(Scope scope, Operand inputDataset, Operand numParallelCalls, Iterable> denseDefaults, List sparseKeys, List denseKeys, List> sparseTypes, List denseShapes, List> outputTypes, List outputShapes, Options... options) { + public static ExperimentalParseExampleDataset create(Scope scope, Operand inputDataset, Operand numParallelCalls, Iterable> denseDefaults, List sparseKeys, List denseKeys, List> sparseTypes, List denseShapes, List> outputTypes, List outputShapes, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("ExperimentalParseExampleDataset", scope.makeOpName("ExperimentalParseExampleDataset")); opBuilder.addInput(inputDataset.asOutput()); opBuilder.addInput(numParallelCalls.asOutput()); @@ -99,7 +100,7 @@ public static ExperimentalParseExampleDataset create(Scope scope, Operand inp opBuilder.setAttr("dense_keys", denseKeysArray); DataType[] sparseTypesArray = new DataType[sparseTypes.size()]; for (int i = 0; i < sparseTypesArray.length; ++i) { - sparseTypesArray[i] = DataType.fromClass(sparseTypes.get(i)); + sparseTypesArray[i] = sparseTypes.get(i); } opBuilder.setAttr("sparse_types", sparseTypesArray); Shape[] denseShapesArray = new Shape[denseShapes.size()]; @@ -109,7 +110,7 @@ public static ExperimentalParseExampleDataset create(Scope scope, Operand inp opBuilder.setAttr("dense_shapes", denseShapesArray); DataType[] outputTypesArray = new DataType[outputTypes.size()]; for (int i = 0; i < outputTypesArray.length; ++i) { - outputTypesArray[i] = DataType.fromClass(outputTypes.get(i)); + outputTypesArray[i] = outputTypes.get(i); } opBuilder.setAttr("output_types", outputTypesArray); Shape[] outputShapesArray = new Shape[outputShapes.size()]; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalPrivateThreadPoolDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalPrivateThreadPoolDataset.java index cea1ae5081e..d8138e1681b 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalPrivateThreadPoolDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalPrivateThreadPoolDataset.java @@ -23,9 +23,10 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TInt64; /** * Creates a dataset that uses a custom thread pool to compute `input_dataset`. @@ -42,14 +43,14 @@ public final class ExperimentalPrivateThreadPoolDataset extends PrimitiveOp impl * @param outputShapes * @return a new instance of ExperimentalPrivateThreadPoolDataset */ - public static ExperimentalPrivateThreadPoolDataset create(Scope scope, Operand inputDataset, Operand numThreads, List> outputTypes, List outputShapes) { + public static ExperimentalPrivateThreadPoolDataset create(Scope scope, Operand inputDataset, Operand numThreads, List> outputTypes, List outputShapes) { OperationBuilder opBuilder = scope.env().opBuilder("ExperimentalPrivateThreadPoolDataset", scope.makeOpName("ExperimentalPrivateThreadPoolDataset")); opBuilder.addInput(inputDataset.asOutput()); opBuilder.addInput(numThreads.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); DataType[] outputTypesArray = new DataType[outputTypes.size()]; for (int i = 0; i < outputTypesArray.length; ++i) { - outputTypesArray[i] = DataType.fromClass(outputTypes.get(i)); + outputTypesArray[i] = outputTypes.get(i); } opBuilder.setAttr("output_types", outputTypesArray); Shape[] outputShapesArray = new Shape[outputShapes.size()]; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalRandomDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalRandomDataset.java index 7a524b3f46f..bd56ebaba02 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalRandomDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalRandomDataset.java @@ -23,9 +23,10 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TInt64; /** * Creates a Dataset that returns pseudorandom numbers. @@ -44,14 +45,14 @@ public final class ExperimentalRandomDataset extends PrimitiveOp implements Oper * @param outputShapes * @return a new instance of ExperimentalRandomDataset */ - public static ExperimentalRandomDataset create(Scope scope, Operand seed, Operand seed2, List> outputTypes, List outputShapes) { + public static ExperimentalRandomDataset create(Scope scope, Operand seed, Operand seed2, List> outputTypes, List outputShapes) { OperationBuilder opBuilder = scope.env().opBuilder("ExperimentalRandomDataset", scope.makeOpName("ExperimentalRandomDataset")); opBuilder.addInput(seed.asOutput()); opBuilder.addInput(seed2.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); DataType[] outputTypesArray = new DataType[outputTypes.size()]; for (int i = 0; i < outputTypesArray.length; ++i) { - outputTypesArray[i] = DataType.fromClass(outputTypes.get(i)); + outputTypesArray[i] = outputTypes.get(i); } opBuilder.setAttr("output_types", outputTypesArray); Shape[] outputShapesArray = new Shape[outputShapes.size()]; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalRebatchDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalRebatchDataset.java index 1165d155e34..2fa797baea6 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalRebatchDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalRebatchDataset.java @@ -23,9 +23,10 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TInt64; /** * Creates a dataset that changes the batch size. @@ -67,14 +68,14 @@ private Options() { * @param options carries optional attributes values * @return a new instance of ExperimentalRebatchDataset */ - public static ExperimentalRebatchDataset create(Scope scope, Operand inputDataset, Operand numReplicas, List> outputTypes, List outputShapes, Options... options) { + public static ExperimentalRebatchDataset create(Scope scope, Operand inputDataset, Operand numReplicas, List> outputTypes, List outputShapes, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("ExperimentalRebatchDataset", scope.makeOpName("ExperimentalRebatchDataset")); opBuilder.addInput(inputDataset.asOutput()); opBuilder.addInput(numReplicas.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); DataType[] outputTypesArray = new DataType[outputTypes.size()]; for (int i = 0; i < outputTypesArray.length; ++i) { - outputTypesArray[i] = DataType.fromClass(outputTypes.get(i)); + outputTypesArray[i] = outputTypes.get(i); } opBuilder.setAttr("output_types", outputTypesArray); Shape[] outputShapesArray = new Shape[outputShapes.size()]; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalSetStatsAggregatorDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalSetStatsAggregatorDataset.java index d29f82a6ee9..276a7611a87 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalSetStatsAggregatorDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalSetStatsAggregatorDataset.java @@ -23,9 +23,10 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TString; /** */ @@ -43,7 +44,7 @@ public final class ExperimentalSetStatsAggregatorDataset extends PrimitiveOp imp * @param outputShapes * @return a new instance of ExperimentalSetStatsAggregatorDataset */ - public static ExperimentalSetStatsAggregatorDataset create(Scope scope, Operand inputDataset, Operand statsAggregator, Operand tag, Operand counterPrefix, List> outputTypes, List outputShapes) { + public static ExperimentalSetStatsAggregatorDataset create(Scope scope, Operand inputDataset, Operand statsAggregator, Operand tag, Operand counterPrefix, List> outputTypes, List outputShapes) { OperationBuilder opBuilder = scope.env().opBuilder("ExperimentalSetStatsAggregatorDataset", scope.makeOpName("ExperimentalSetStatsAggregatorDataset")); opBuilder.addInput(inputDataset.asOutput()); opBuilder.addInput(statsAggregator.asOutput()); @@ -52,7 +53,7 @@ public static ExperimentalSetStatsAggregatorDataset create(Scope scope, Operand< opBuilder = scope.applyControlDependencies(opBuilder); DataType[] outputTypesArray = new DataType[outputTypes.size()]; for (int i = 0; i < outputTypesArray.length; ++i) { - outputTypesArray[i] = DataType.fromClass(outputTypes.get(i)); + outputTypesArray[i] = outputTypes.get(i); } opBuilder.setAttr("output_types", outputTypesArray); Shape[] outputShapesArray = new Shape[outputShapes.size()]; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalSlidingWindowDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalSlidingWindowDataset.java index 77b38724316..bb6a63ee9e3 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalSlidingWindowDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalSlidingWindowDataset.java @@ -23,9 +23,10 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TInt64; /** * Creates a dataset that passes a sliding window over `input_dataset`. @@ -47,7 +48,7 @@ public final class ExperimentalSlidingWindowDataset extends PrimitiveOp implemen * @param outputShapes * @return a new instance of ExperimentalSlidingWindowDataset */ - public static ExperimentalSlidingWindowDataset create(Scope scope, Operand inputDataset, Operand windowSize, Operand windowShift, Operand windowStride, List> outputTypes, List outputShapes) { + public static ExperimentalSlidingWindowDataset create(Scope scope, Operand inputDataset, Operand windowSize, Operand windowShift, Operand windowStride, List> outputTypes, List outputShapes) { OperationBuilder opBuilder = scope.env().opBuilder("ExperimentalSlidingWindowDataset", scope.makeOpName("ExperimentalSlidingWindowDataset")); opBuilder.addInput(inputDataset.asOutput()); opBuilder.addInput(windowSize.asOutput()); @@ -56,7 +57,7 @@ public static ExperimentalSlidingWindowDataset create(Scope scope, Operand in opBuilder = scope.applyControlDependencies(opBuilder); DataType[] outputTypesArray = new DataType[outputTypes.size()]; for (int i = 0; i < outputTypesArray.length; ++i) { - outputTypesArray[i] = DataType.fromClass(outputTypes.get(i)); + outputTypesArray[i] = outputTypes.get(i); } opBuilder.setAttr("output_types", outputTypesArray); Shape[] outputShapesArray = new Shape[outputShapes.size()]; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalSqlDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalSqlDataset.java index d576d457738..a314c68ec18 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalSqlDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalSqlDataset.java @@ -23,9 +23,10 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TString; /** * Creates a dataset that executes a SQL query and emits rows of the result set. @@ -43,7 +44,7 @@ public final class ExperimentalSqlDataset extends PrimitiveOp implements Operand * @param outputShapes * @return a new instance of ExperimentalSqlDataset */ - public static ExperimentalSqlDataset create(Scope scope, Operand driverName, Operand dataSourceName, Operand query, List> outputTypes, List outputShapes) { + public static ExperimentalSqlDataset create(Scope scope, Operand driverName, Operand dataSourceName, Operand query, List> outputTypes, List outputShapes) { OperationBuilder opBuilder = scope.env().opBuilder("ExperimentalSqlDataset", scope.makeOpName("ExperimentalSqlDataset")); opBuilder.addInput(driverName.asOutput()); opBuilder.addInput(dataSourceName.asOutput()); @@ -51,7 +52,7 @@ public static ExperimentalSqlDataset create(Scope scope, Operand driverN opBuilder = scope.applyControlDependencies(opBuilder); DataType[] outputTypesArray = new DataType[outputTypes.size()]; for (int i = 0; i < outputTypesArray.length; ++i) { - outputTypesArray[i] = DataType.fromClass(outputTypes.get(i)); + outputTypesArray[i] = outputTypes.get(i); } opBuilder.setAttr("output_types", outputTypesArray); Shape[] outputShapesArray = new Shape[outputShapes.size()]; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalStatsAggregatorSummary.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalStatsAggregatorSummary.java index 39aedb8a8c2..623b0f834b5 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalStatsAggregatorSummary.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalStatsAggregatorSummary.java @@ -23,11 +23,12 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TString; /** * Produces a summary of any statistics recorded by the given statistics manager. */ -public final class ExperimentalStatsAggregatorSummary extends PrimitiveOp implements Operand { +public final class ExperimentalStatsAggregatorSummary extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new ExperimentalStatsAggregatorSummary operation. @@ -45,16 +46,16 @@ public static ExperimentalStatsAggregatorSummary create(Scope scope, Operand /** */ - public Output summary() { + public Output summary() { return summary; } @Override - public Output asOutput() { + public Output asOutput() { return summary; } - private Output summary; + private Output summary; private ExperimentalStatsAggregatorSummary(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalUnbatchDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalUnbatchDataset.java index 060cb11ccc0..6a9fd9b6e54 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalUnbatchDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalUnbatchDataset.java @@ -23,7 +23,7 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; @@ -41,13 +41,13 @@ public final class ExperimentalUnbatchDataset extends PrimitiveOp implements Ope * @param outputShapes * @return a new instance of ExperimentalUnbatchDataset */ - public static ExperimentalUnbatchDataset create(Scope scope, Operand inputDataset, List> outputTypes, List outputShapes) { + public static ExperimentalUnbatchDataset create(Scope scope, Operand inputDataset, List> outputTypes, List outputShapes) { OperationBuilder opBuilder = scope.env().opBuilder("ExperimentalUnbatchDataset", scope.makeOpName("ExperimentalUnbatchDataset")); opBuilder.addInput(inputDataset.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); DataType[] outputTypesArray = new DataType[outputTypes.size()]; for (int i = 0; i < outputTypesArray.length; ++i) { - outputTypesArray[i] = DataType.fromClass(outputTypes.get(i)); + outputTypesArray[i] = outputTypes.get(i); } opBuilder.setAttr("output_types", outputTypesArray); Shape[] outputShapesArray = new Shape[outputShapes.size()]; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExtractVolumePatches.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExtractVolumePatches.java index 526b749e8f2..e787ca1e551 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExtractVolumePatches.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExtractVolumePatches.java @@ -25,6 +25,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Extract `patches` from `input` and put them in the "depth" output dimension. 3D extension of `extract_image_patches`. @@ -32,7 +33,7 @@ * @param data type for {@code patches()} output */ @Operator -public final class ExtractVolumePatches extends PrimitiveOp implements Operand { +public final class ExtractVolumePatches extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new ExtractVolumePatches operation. @@ -52,7 +53,7 @@ public final class ExtractVolumePatches extends PrimitiveOp im * * @return a new instance of ExtractVolumePatches */ - public static ExtractVolumePatches create(Scope scope, Operand input, List ksizes, List strides, String padding) { + public static ExtractVolumePatches create(Scope scope, Operand input, List ksizes, List strides, String padding) { OperationBuilder opBuilder = scope.env().opBuilder("ExtractVolumePatches", scope.makeOpName("ExtractVolumePatches")); opBuilder.addInput(input.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Fill.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Fill.java index 4bd71e2aa29..37d28b0003e 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Fill.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Fill.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Creates a tensor filled with a scalar value. @@ -68,7 +69,7 @@ public final class Fill extends PrimitiveOp implements Operand { * @end_compatibility * @return a new instance of Fill */ - public static Fill create(Scope scope, Operand dims, Operand value) { + public static Fill create(Scope scope, Operand dims, Operand value) { OperationBuilder opBuilder = scope.env().opBuilder("Fill", scope.makeOpName("Fill")); opBuilder.addInput(dims.asOutput()); opBuilder.addInput(value.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Fingerprint.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Fingerprint.java index 70fe53cb11b..87b46b02b4f 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Fingerprint.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Fingerprint.java @@ -24,7 +24,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; -import org.tensorflow.types.UInt8; +import org.tensorflow.types.TString; +import org.tensorflow.types.TUInt8; /** * Generates fingerprint values. @@ -59,7 +60,7 @@ * Fingerprint(ReduceJoin(data))` in general. */ @Operator -public final class Fingerprint extends PrimitiveOp implements Operand { +public final class Fingerprint extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new Fingerprint operation. @@ -70,7 +71,7 @@ public final class Fingerprint extends PrimitiveOp implements Operand { * `farmhash::fingerprint64`. * @return a new instance of Fingerprint */ - public static Fingerprint create(Scope scope, Operand data, Operand method) { + public static Fingerprint create(Scope scope, Operand data, Operand method) { OperationBuilder opBuilder = scope.env().opBuilder("Fingerprint", scope.makeOpName("Fingerprint")); opBuilder.addInput(data.asOutput()); opBuilder.addInput(method.asOutput()); @@ -83,16 +84,16 @@ public static Fingerprint create(Scope scope, Operand data, Operand fingerprint() { + public Output fingerprint() { return fingerprint; } @Override - public Output asOutput() { + public Output asOutput() { return fingerprint; } - private Output fingerprint; + private Output fingerprint; private Fingerprint(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/FusedBatchNormGradV3.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/FusedBatchNormGradV3.java index 9e9ab0f9b5d..c881b04d65d 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/FusedBatchNormGradV3.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/FusedBatchNormGradV3.java @@ -24,6 +24,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TFloat; +import org.tensorflow.types.family.TNumber; /** * Gradient for batch normalization. @@ -35,7 +37,7 @@ * @param data type for {@code scaleBackprop()} output */ @Operator -public final class FusedBatchNormGradV3 extends PrimitiveOp { +public final class FusedBatchNormGradV3 extends PrimitiveOp { /** * Optional attributes for {@link org.tensorflow.op.core.FusedBatchNormGradV3} @@ -98,7 +100,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of FusedBatchNormGradV3 */ - public static FusedBatchNormGradV3 create(Scope scope, Operand yBackprop, Operand x, Operand scale, Operand reserveSpace1, Operand reserveSpace2, Operand reserveSpace3, Options... options) { + public static FusedBatchNormGradV3 create(Scope scope, Operand yBackprop, Operand x, Operand scale, Operand reserveSpace1, Operand reserveSpace2, Operand reserveSpace3, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("FusedBatchNormGradV3", scope.makeOpName("FusedBatchNormGradV3")); opBuilder.addInput(yBackprop.asOutput()); opBuilder.addInput(x.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/FusedBatchNormV3.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/FusedBatchNormV3.java index 1c3240c2e2a..ac08e36805b 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/FusedBatchNormV3.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/FusedBatchNormV3.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Batch normalization. @@ -35,7 +36,7 @@ * @param data type for {@code batchMean()} output */ @Operator -public final class FusedBatchNormV3 extends PrimitiveOp { +public final class FusedBatchNormV3 extends PrimitiveOp { /** * Optional attributes for {@link org.tensorflow.op.core.FusedBatchNormV3} @@ -89,7 +90,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of FusedBatchNormV3 */ - public static FusedBatchNormV3 create(Scope scope, Operand x, Operand scale, Operand offset, Operand mean, Operand variance, Options... options) { + public static FusedBatchNormV3 create(Scope scope, Operand x, Operand scale, Operand offset, Operand mean, Operand variance, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("FusedBatchNormV3", scope.makeOpName("FusedBatchNormV3")); opBuilder.addInput(x.asOutput()); opBuilder.addInput(scale.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/GRUBlockCell.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/GRUBlockCell.java index c7c83573a0f..e36e80a2438 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/GRUBlockCell.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/GRUBlockCell.java @@ -23,6 +23,7 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.family.TNumber; /** * Computes the GRU cell forward propagation for 1 time step. @@ -74,7 +75,7 @@ * * @param data type for {@code r()} output */ -public final class GRUBlockCell extends PrimitiveOp { +public final class GRUBlockCell extends PrimitiveOp { /** * Factory method to create a class wrapping a new GRUBlockCell operation. @@ -88,7 +89,7 @@ public final class GRUBlockCell extends PrimitiveOp { * @param bC * @return a new instance of GRUBlockCell */ - public static GRUBlockCell create(Scope scope, Operand x, Operand hPrev, Operand wRu, Operand wC, Operand bRu, Operand bC) { + public static GRUBlockCell create(Scope scope, Operand x, Operand hPrev, Operand wRu, Operand wC, Operand bRu, Operand bC) { OperationBuilder opBuilder = scope.env().opBuilder("GRUBlockCell", scope.makeOpName("GRUBlockCell")); opBuilder.addInput(x.asOutput()); opBuilder.addInput(hPrev.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/GRUBlockCellGrad.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/GRUBlockCellGrad.java index 23b4a6cd51b..558e751aac8 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/GRUBlockCellGrad.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/GRUBlockCellGrad.java @@ -23,6 +23,7 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.family.TNumber; /** * Computes the GRU cell back-propagation for 1 time step. @@ -110,7 +111,7 @@ * * @param data type for {@code dX()} output */ -public final class GRUBlockCellGrad extends PrimitiveOp { +public final class GRUBlockCellGrad extends PrimitiveOp { /** * Factory method to create a class wrapping a new GRUBlockCellGrad operation. @@ -128,7 +129,7 @@ public final class GRUBlockCellGrad extends PrimitiveOp { * @param dH * @return a new instance of GRUBlockCellGrad */ - public static GRUBlockCellGrad create(Scope scope, Operand x, Operand hPrev, Operand wRu, Operand wC, Operand bRu, Operand bC, Operand r, Operand u, Operand c, Operand dH) { + public static GRUBlockCellGrad create(Scope scope, Operand x, Operand hPrev, Operand wRu, Operand wC, Operand bRu, Operand bC, Operand r, Operand u, Operand c, Operand dH) { OperationBuilder opBuilder = scope.env().opBuilder("GRUBlockCellGrad", scope.makeOpName("GRUBlockCellGrad")); opBuilder.addInput(x.asOutput()); opBuilder.addInput(hPrev.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Gather.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Gather.java index 991c94ae988..4515f92624d 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Gather.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Gather.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Gather slices from `params` axis `axis` according to `indices`. @@ -90,7 +91,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of Gather */ - public static Gather create(Scope scope, Operand params, Operand indices, Operand axis, Options... options) { + public static Gather create(Scope scope, Operand params, Operand indices, Operand axis, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("GatherV2", scope.makeOpName("Gather")); opBuilder.addInput(params.asOutput()); opBuilder.addInput(indices.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/GatherNd.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/GatherNd.java index ea44591dc45..076604f7d8a 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/GatherNd.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/GatherNd.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Gather slices from `params` into a Tensor with shape specified by `indices`. @@ -134,7 +135,7 @@ public final class GatherNd extends PrimitiveOp implements Operand { * @param indices Index tensor. * @return a new instance of GatherNd */ - public static GatherNd create(Scope scope, Operand params, Operand indices) { + public static GatherNd create(Scope scope, Operand params, Operand indices) { OperationBuilder opBuilder = scope.env().opBuilder("GatherNd", scope.makeOpName("GatherNd")); opBuilder.addInput(params.asOutput()); opBuilder.addInput(indices.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/GetSessionTensor.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/GetSessionTensor.java index c4cb100757d..7dc8155433c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/GetSessionTensor.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/GetSessionTensor.java @@ -25,6 +25,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TString; /** * Get the value of the tensor specified by its handle. @@ -42,11 +43,11 @@ public final class GetSessionTensor extends PrimitiveOp implements Operand * @param dtype The type of the output value. * @return a new instance of GetSessionTensor */ - public static GetSessionTensor create(Scope scope, Operand handle, Class dtype) { + public static GetSessionTensor create(Scope scope, Operand handle, DataType dtype) { OperationBuilder opBuilder = scope.env().opBuilder("GetSessionTensor", scope.makeOpName("GetSessionTensor")); opBuilder.addInput(handle.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); - opBuilder.setAttr("dtype", DataType.fromClass(dtype)); + opBuilder.setAttr("dtype", dtype); return new GetSessionTensor(opBuilder.build()); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/HashTable.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/HashTable.java index cc9fae9b021..3c5875459e6 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/HashTable.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/HashTable.java @@ -85,11 +85,11 @@ private Options() { * @param options carries optional attributes values * @return a new instance of HashTable */ - public static HashTable create(Scope scope, Class keyDtype, Class valueDtype, Options... options) { + public static HashTable create(Scope scope, DataType keyDtype, DataType valueDtype, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("HashTableV2", scope.makeOpName("HashTable")); opBuilder = scope.applyControlDependencies(opBuilder); - opBuilder.setAttr("key_dtype", DataType.fromClass(keyDtype)); - opBuilder.setAttr("value_dtype", DataType.fromClass(valueDtype)); + opBuilder.setAttr("key_dtype", keyDtype); + opBuilder.setAttr("value_dtype", valueDtype); if (options != null) { for (Options opts : options) { if (opts.container != null) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/HistogramFixedWidth.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/HistogramFixedWidth.java index 2d87208ea3d..564e0004a1f 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/HistogramFixedWidth.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/HistogramFixedWidth.java @@ -25,6 +25,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.family.TNumber; /** * Return histogram of values. @@ -48,7 +50,7 @@ * @param data type for {@code out()} output */ @Operator -public final class HistogramFixedWidth extends PrimitiveOp implements Operand { +public final class HistogramFixedWidth extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new HistogramFixedWidth operation. @@ -62,13 +64,13 @@ public final class HistogramFixedWidth extends PrimitiveOp imp * @param dtype * @return a new instance of HistogramFixedWidth */ - public static HistogramFixedWidth create(Scope scope, Operand values, Operand valueRange, Operand nbins, Class dtype) { + public static HistogramFixedWidth create(Scope scope, Operand values, Operand valueRange, Operand nbins, DataType dtype) { OperationBuilder opBuilder = scope.env().opBuilder("HistogramFixedWidth", scope.makeOpName("HistogramFixedWidth")); opBuilder.addInput(values.asOutput()); opBuilder.addInput(valueRange.asOutput()); opBuilder.addInput(nbins.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); - opBuilder.setAttr("dtype", DataType.fromClass(dtype)); + opBuilder.setAttr("dtype", dtype); return new HistogramFixedWidth(opBuilder.build()); } @@ -83,8 +85,8 @@ public static HistogramFixedWidth create * @param nbins Scalar `int32 Tensor`. Number of histogram bins. * @return a new instance of HistogramFixedWidth */ - public static HistogramFixedWidth create(Scope scope, Operand values, Operand valueRange, Operand nbins) { - return create(scope, values, valueRange, nbins, Integer.class); + public static HistogramFixedWidth create(Scope scope, Operand values, Operand valueRange, Operand nbins) { + return create(scope, values, valueRange, nbins, TInt32.DTYPE); } /** diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/IgnoreErrorsDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/IgnoreErrorsDataset.java index 0af926e3717..fe640488aea 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/IgnoreErrorsDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/IgnoreErrorsDataset.java @@ -23,7 +23,7 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; @@ -41,13 +41,13 @@ public final class IgnoreErrorsDataset extends PrimitiveOp implements Operand inputDataset, List> outputTypes, List outputShapes) { + public static IgnoreErrorsDataset create(Scope scope, Operand inputDataset, List> outputTypes, List outputShapes) { OperationBuilder opBuilder = scope.env().opBuilder("IgnoreErrorsDataset", scope.makeOpName("IgnoreErrorsDataset")); opBuilder.addInput(inputDataset.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); DataType[] outputTypesArray = new DataType[outputTypes.size()]; for (int i = 0; i < outputTypesArray.length; ++i) { - outputTypesArray[i] = DataType.fromClass(outputTypes.get(i)); + outputTypesArray[i] = outputTypes.get(i); } opBuilder.setAttr("output_types", outputTypesArray); Shape[] outputShapesArray = new Shape[outputShapes.size()]; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ImmutableConst.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ImmutableConst.java index aa8e8b3e664..2662b3793af 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ImmutableConst.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ImmutableConst.java @@ -22,7 +22,7 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; @@ -47,10 +47,10 @@ public final class ImmutableConst extends PrimitiveOp implements Operand { * NewReadOnlyMemoryRegionFromFile in tensorflow::Env. * @return a new instance of ImmutableConst */ - public static ImmutableConst create(Scope scope, Class dtype, Shape shape, String memoryRegionName) { + public static ImmutableConst create(Scope scope, DataType dtype, Shape shape, String memoryRegionName) { OperationBuilder opBuilder = scope.env().opBuilder("ImmutableConst", scope.makeOpName("ImmutableConst")); opBuilder = scope.applyControlDependencies(opBuilder); - opBuilder.setAttr("dtype", DataType.fromClass(dtype)); + opBuilder.setAttr("dtype", dtype); opBuilder.setAttr("shape", shape); opBuilder.setAttr("memory_region_name", memoryRegionName); return new ImmutableConst(opBuilder.build()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/InfeedDequeue.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/InfeedDequeue.java index 1e8474c966e..ce69b3d64e7 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/InfeedDequeue.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/InfeedDequeue.java @@ -22,7 +22,7 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; @@ -41,10 +41,10 @@ public final class InfeedDequeue extends PrimitiveOp implements Operand { * @param shape The shape of the tensor. * @return a new instance of InfeedDequeue */ - public static InfeedDequeue create(Scope scope, Class dtype, Shape shape) { + public static InfeedDequeue create(Scope scope, DataType dtype, Shape shape) { OperationBuilder opBuilder = scope.env().opBuilder("InfeedDequeue", scope.makeOpName("InfeedDequeue")); opBuilder = scope.applyControlDependencies(opBuilder); - opBuilder.setAttr("dtype", DataType.fromClass(dtype)); + opBuilder.setAttr("dtype", dtype); opBuilder.setAttr("shape", shape); return new InfeedDequeue(opBuilder.build()); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/InfeedDequeueTuple.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/InfeedDequeueTuple.java index 207bd126831..5ecb91f5643 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/InfeedDequeueTuple.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/InfeedDequeueTuple.java @@ -25,7 +25,7 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; @@ -42,12 +42,12 @@ public final class InfeedDequeueTuple extends PrimitiveOp implements Iterable> dtypes, List shapes) { + public static InfeedDequeueTuple create(Scope scope, List> dtypes, List shapes) { OperationBuilder opBuilder = scope.env().opBuilder("InfeedDequeueTuple", scope.makeOpName("InfeedDequeueTuple")); opBuilder = scope.applyControlDependencies(opBuilder); DataType[] dtypesArray = new DataType[dtypes.size()]; for (int i = 0; i < dtypesArray.length; ++i) { - dtypesArray[i] = DataType.fromClass(dtypes.get(i)); + dtypesArray[i] = dtypes.get(i); } opBuilder.setAttr("dtypes", dtypesArray); Shape[] shapesArray = new Shape[shapes.size()]; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/InfeedEnqueue.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/InfeedEnqueue.java index 74251f1d1d6..10e38ce0f13 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/InfeedEnqueue.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/InfeedEnqueue.java @@ -21,7 +21,7 @@ import org.tensorflow.Operand; import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/InfeedEnqueueTuple.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/InfeedEnqueueTuple.java index 1dec27d3a40..f97a09a501c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/InfeedEnqueueTuple.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/InfeedEnqueueTuple.java @@ -21,7 +21,7 @@ import org.tensorflow.Operand; import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.Operands; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/InitializeTableFromTextFile.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/InitializeTableFromTextFile.java index f28b98709c2..db2ca0cb283 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/InitializeTableFromTextFile.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/InitializeTableFromTextFile.java @@ -23,6 +23,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TString; /** * Initializes a table from a text file. @@ -81,7 +82,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of InitializeTableFromTextFile */ - public static InitializeTableFromTextFile create(Scope scope, Operand tableHandle, Operand filename, Long keyIndex, Long valueIndex, Options... options) { + public static InitializeTableFromTextFile create(Scope scope, Operand tableHandle, Operand filename, Long keyIndex, Long valueIndex, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("InitializeTableFromTextFileV2", scope.makeOpName("InitializeTableFromTextFile")); opBuilder.addInput(tableHandle.asOutput()); opBuilder.addInput(filename.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/InplaceAdd.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/InplaceAdd.java index 5bc86ea6a6c..8afbf626212 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/InplaceAdd.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/InplaceAdd.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt32; /** * Adds v into specified rows of x. @@ -44,7 +45,7 @@ public final class InplaceAdd extends PrimitiveOp implements Operand { * @param v A `Tensor` of type T. Same dimension sizes as x except the first dimension, which must be the same as i's size. * @return a new instance of InplaceAdd */ - public static InplaceAdd create(Scope scope, Operand x, Operand i, Operand v) { + public static InplaceAdd create(Scope scope, Operand x, Operand i, Operand v) { OperationBuilder opBuilder = scope.env().opBuilder("InplaceAdd", scope.makeOpName("InplaceAdd")); opBuilder.addInput(x.asOutput()); opBuilder.addInput(i.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/InplaceSub.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/InplaceSub.java index 81e027b52a8..232d2ecf607 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/InplaceSub.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/InplaceSub.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt32; /** * Subtracts `v` into specified rows of `x`. @@ -44,7 +45,7 @@ public final class InplaceSub extends PrimitiveOp implements Operand { * @param v A `Tensor` of type T. Same dimension sizes as x except the first dimension, which must be the same as i's size. * @return a new instance of InplaceSub */ - public static InplaceSub create(Scope scope, Operand x, Operand i, Operand v) { + public static InplaceSub create(Scope scope, Operand x, Operand i, Operand v) { OperationBuilder opBuilder = scope.env().opBuilder("InplaceSub", scope.makeOpName("InplaceSub")); opBuilder.addInput(x.asOutput()); opBuilder.addInput(i.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/InplaceUpdate.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/InplaceUpdate.java index 3ba6530eed3..77d11c0f852 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/InplaceUpdate.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/InplaceUpdate.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt32; /** * Updates specified rows with values in `v`. @@ -44,7 +45,7 @@ public final class InplaceUpdate extends PrimitiveOp implements Operand { * @param v A `Tensor` of type T. Same dimension sizes as x except the first dimension, which must be the same as i's size. * @return a new instance of InplaceUpdate */ - public static InplaceUpdate create(Scope scope, Operand x, Operand i, Operand v) { + public static InplaceUpdate create(Scope scope, Operand x, Operand i, Operand v) { OperationBuilder opBuilder = scope.env().opBuilder("InplaceUpdate", scope.makeOpName("InplaceUpdate")); opBuilder.addInput(x.asOutput()); opBuilder.addInput(i.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/IsBoostedTreesEnsembleInitialized.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/IsBoostedTreesEnsembleInitialized.java index cbe3b016340..6b764d2475c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/IsBoostedTreesEnsembleInitialized.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/IsBoostedTreesEnsembleInitialized.java @@ -23,11 +23,12 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TBool; /** * Checks whether a tree ensemble has been initialized. */ -public final class IsBoostedTreesEnsembleInitialized extends PrimitiveOp implements Operand { +public final class IsBoostedTreesEnsembleInitialized extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new IsBoostedTreesEnsembleInitialized operation. @@ -46,16 +47,16 @@ public static IsBoostedTreesEnsembleInitialized create(Scope scope, Operand t /** * output boolean on whether it is initialized or not. */ - public Output isInitialized() { + public Output isInitialized() { return isInitialized; } @Override - public Output asOutput() { + public Output asOutput() { return isInitialized; } - private Output isInitialized; + private Output isInitialized; private IsBoostedTreesEnsembleInitialized(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/IsBoostedTreesQuantileStreamResourceInitialized.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/IsBoostedTreesQuantileStreamResourceInitialized.java index 26855e129fb..5b287ae41eb 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/IsBoostedTreesQuantileStreamResourceInitialized.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/IsBoostedTreesQuantileStreamResourceInitialized.java @@ -23,13 +23,14 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TBool; /** * Checks whether a quantile stream has been initialized. *

* An Op that checks if quantile stream resource is initialized. */ -public final class IsBoostedTreesQuantileStreamResourceInitialized extends PrimitiveOp implements Operand { +public final class IsBoostedTreesQuantileStreamResourceInitialized extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new IsBoostedTreesQuantileStreamResourceInitialized operation. @@ -48,16 +49,16 @@ public static IsBoostedTreesQuantileStreamResourceInitialized create(Scope scope /** * bool; True if the resource is initialized, False otherwise. */ - public Output isInitialized() { + public Output isInitialized() { return isInitialized; } @Override - public Output asOutput() { + public Output asOutput() { return isInitialized; } - private Output isInitialized; + private Output isInitialized; private IsBoostedTreesQuantileStreamResourceInitialized(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/IsVariableInitialized.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/IsVariableInitialized.java index 6c4b9a691b7..c0b98a85b03 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/IsVariableInitialized.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/IsVariableInitialized.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TBool; /** * Checks whether a tensor has been initialized. @@ -31,7 +32,7 @@ * Outputs boolean scalar indicating whether the tensor has been initialized. */ @Operator -public final class IsVariableInitialized extends PrimitiveOp implements Operand { +public final class IsVariableInitialized extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new IsVariableInitialized operation. @@ -49,16 +50,16 @@ public static IsVariableInitialized create(Scope scope, Operand ref) { /** */ - public Output isInitialized() { + public Output isInitialized() { return isInitialized; } @Override - public Output asOutput() { + public Output asOutput() { return isInitialized; } - private Output isInitialized; + private Output isInitialized; private IsVariableInitialized(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/IteratorGetDevice.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/IteratorGetDevice.java index 73fd7065fbc..7ec76ed7e37 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/IteratorGetDevice.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/IteratorGetDevice.java @@ -23,11 +23,12 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TString; /** * Returns the name of the device on which `resource` has been placed. */ -public final class IteratorGetDevice extends PrimitiveOp implements Operand { +public final class IteratorGetDevice extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new IteratorGetDevice operation. @@ -45,16 +46,16 @@ public static IteratorGetDevice create(Scope scope, Operand resource) { /** */ - public Output device() { + public Output device() { return device; } @Override - public Output asOutput() { + public Output asOutput() { return device; } - private Output device; + private Output device; private IteratorGetDevice(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/KMC2ChainInitialization.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/KMC2ChainInitialization.java index 288c9c82caf..27882ba4b2f 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/KMC2ChainInitialization.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/KMC2ChainInitialization.java @@ -23,6 +23,8 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TFloat; +import org.tensorflow.types.TInt64; /** * Returns the index of a data point that should be added to the seed set. @@ -32,7 +34,7 @@ * of the k-MC^2 algorithm and returns the index of one candidate point to be added * as an additional cluster center. */ -public final class KMC2ChainInitialization extends PrimitiveOp implements Operand { +public final class KMC2ChainInitialization extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new KMC2ChainInitialization operation. @@ -43,7 +45,7 @@ public final class KMC2ChainInitialization extends PrimitiveOp implements Operan * @param seed Scalar. Seed for initializing the random number generator. * @return a new instance of KMC2ChainInitialization */ - public static KMC2ChainInitialization create(Scope scope, Operand distances, Operand seed) { + public static KMC2ChainInitialization create(Scope scope, Operand distances, Operand seed) { OperationBuilder opBuilder = scope.env().opBuilder("KMC2ChainInitialization", scope.makeOpName("KMC2ChainInitialization")); opBuilder.addInput(distances.asOutput()); opBuilder.addInput(seed.asOutput()); @@ -54,16 +56,16 @@ public static KMC2ChainInitialization create(Scope scope, Operand distanc /** * Scalar with the index of the sampled point. */ - public Output index() { + public Output index() { return index; } @Override - public Output asOutput() { + public Output asOutput() { return index; } - private Output index; + private Output index; private KMC2ChainInitialization(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/KmeansPlusPlusInitialization.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/KmeansPlusPlusInitialization.java index 6e85daf6fef..23fde1a4b99 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/KmeansPlusPlusInitialization.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/KmeansPlusPlusInitialization.java @@ -23,6 +23,8 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TFloat; +import org.tensorflow.types.TInt64; /** * Selects num_to_sample rows of input using the KMeans++ criterion. @@ -32,7 +34,7 @@ * distance from the nearest row selected thus far till num_to_sample rows have * been sampled. */ -public final class KmeansPlusPlusInitialization extends PrimitiveOp implements Operand { +public final class KmeansPlusPlusInitialization extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new KmeansPlusPlusInitialization operation. @@ -47,7 +49,7 @@ public final class KmeansPlusPlusInitialization extends PrimitiveOp implements O * heuristic is used to sample O(log(num_to_sample)) additional points. * @return a new instance of KmeansPlusPlusInitialization */ - public static KmeansPlusPlusInitialization create(Scope scope, Operand points, Operand numToSample, Operand seed, Operand numRetriesPerSample) { + public static KmeansPlusPlusInitialization create(Scope scope, Operand points, Operand numToSample, Operand seed, Operand numRetriesPerSample) { OperationBuilder opBuilder = scope.env().opBuilder("KmeansPlusPlusInitialization", scope.makeOpName("KmeansPlusPlusInitialization")); opBuilder.addInput(points.asOutput()); opBuilder.addInput(numToSample.asOutput()); @@ -60,16 +62,16 @@ public static KmeansPlusPlusInitialization create(Scope scope, Operand po /** * Matrix of shape (num_to_sample, d). The sampled rows. */ - public Output samples() { + public Output samples() { return samples; } @Override - public Output asOutput() { + public Output asOutput() { return samples; } - private Output samples; + private Output samples; private KmeansPlusPlusInitialization(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LMDBDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LMDBDataset.java index 4c709d74aeb..b96d471e847 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LMDBDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LMDBDataset.java @@ -23,9 +23,10 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TString; /** */ @@ -40,13 +41,13 @@ public final class LMDBDataset extends PrimitiveOp implements Operand { * @param outputShapes * @return a new instance of LMDBDataset */ - public static LMDBDataset create(Scope scope, Operand filenames, List> outputTypes, List outputShapes) { + public static LMDBDataset create(Scope scope, Operand filenames, List> outputTypes, List outputShapes) { OperationBuilder opBuilder = scope.env().opBuilder("LMDBDataset", scope.makeOpName("LMDBDataset")); opBuilder.addInput(filenames.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); DataType[] outputTypesArray = new DataType[outputTypes.size()]; for (int i = 0; i < outputTypesArray.length; ++i) { - outputTypesArray[i] = DataType.fromClass(outputTypes.get(i)); + outputTypesArray[i] = outputTypes.get(i); } opBuilder.setAttr("output_types", outputTypesArray); Shape[] outputShapesArray = new Shape[outputShapes.size()]; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LSTMBlockCell.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LSTMBlockCell.java index ef7ef171c14..22f81f6b971 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LSTMBlockCell.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LSTMBlockCell.java @@ -23,6 +23,7 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.family.TNumber; /** * Computes the LSTM cell forward propagation for 1 time step. @@ -54,7 +55,7 @@ * * @param data type for {@code i()} output */ -public final class LSTMBlockCell extends PrimitiveOp { +public final class LSTMBlockCell extends PrimitiveOp { /** * Optional attributes for {@link org.tensorflow.op.core.LSTMBlockCell} @@ -108,7 +109,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of LSTMBlockCell */ - public static LSTMBlockCell create(Scope scope, Operand x, Operand csPrev, Operand hPrev, Operand w, Operand wci, Operand wcf, Operand wco, Operand b, Options... options) { + public static LSTMBlockCell create(Scope scope, Operand x, Operand csPrev, Operand hPrev, Operand w, Operand wci, Operand wcf, Operand wco, Operand b, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("LSTMBlockCell", scope.makeOpName("LSTMBlockCell")); opBuilder.addInput(x.asOutput()); opBuilder.addInput(csPrev.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LSTMBlockCellGrad.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LSTMBlockCellGrad.java index 25da21a31e9..6868cfe4e94 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LSTMBlockCellGrad.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LSTMBlockCellGrad.java @@ -23,6 +23,7 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.family.TNumber; /** * Computes the LSTM cell backward propagation for 1 timestep. @@ -31,7 +32,7 @@ * * @param data type for {@code csPrevGrad()} output */ -public final class LSTMBlockCellGrad extends PrimitiveOp { +public final class LSTMBlockCellGrad extends PrimitiveOp { /** * Factory method to create a class wrapping a new LSTMBlockCellGrad operation. @@ -56,7 +57,7 @@ public final class LSTMBlockCellGrad extends PrimitiveOp { * @param usePeephole Whether the cell uses peephole connections. * @return a new instance of LSTMBlockCellGrad */ - public static LSTMBlockCellGrad create(Scope scope, Operand x, Operand csPrev, Operand hPrev, Operand w, Operand wci, Operand wcf, Operand wco, Operand b, Operand i, Operand cs, Operand f, Operand o, Operand ci, Operand co, Operand csGrad, Operand hGrad, Boolean usePeephole) { + public static LSTMBlockCellGrad create(Scope scope, Operand x, Operand csPrev, Operand hPrev, Operand w, Operand wci, Operand wcf, Operand wco, Operand b, Operand i, Operand cs, Operand f, Operand o, Operand ci, Operand co, Operand csGrad, Operand hGrad, Boolean usePeephole) { OperationBuilder opBuilder = scope.env().opBuilder("LSTMBlockCellGrad", scope.makeOpName("LSTMBlockCellGrad")); opBuilder.addInput(x.asOutput()); opBuilder.addInput(csPrev.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LinSpace.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LinSpace.java index faae8c19de3..1d6d6103ef7 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LinSpace.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LinSpace.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Generates values in an interval. @@ -41,7 +42,7 @@ * @param data type for {@code output()} output */ @Operator -public final class LinSpace extends PrimitiveOp implements Operand { +public final class LinSpace extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new LinSpace operation. @@ -52,7 +53,7 @@ public final class LinSpace extends PrimitiveOp implements Ope * @param num 0-D tensor. Number of values to generate. * @return a new instance of LinSpace */ - public static LinSpace create(Scope scope, Operand start, Operand stop, Operand num) { + public static LinSpace create(Scope scope, Operand start, Operand stop, Operand num) { OperationBuilder opBuilder = scope.env().opBuilder("LinSpace", scope.makeOpName("LinSpace")); opBuilder.addInput(start.asOutput()); opBuilder.addInput(stop.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LoadTPUEmbeddingADAMParameters.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LoadTPUEmbeddingADAMParameters.java index a0953b8c570..b6e4fd0fcac 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LoadTPUEmbeddingADAMParameters.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LoadTPUEmbeddingADAMParameters.java @@ -22,6 +22,7 @@ import org.tensorflow.OperationBuilder; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TFloat; /** * Load ADAM embedding parameters. @@ -74,7 +75,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of LoadTPUEmbeddingADAMParameters */ - public static LoadTPUEmbeddingADAMParameters create(Scope scope, Operand parameters, Operand momenta, Operand velocities, Long numShards, Long shardId, Options... options) { + public static LoadTPUEmbeddingADAMParameters create(Scope scope, Operand parameters, Operand momenta, Operand velocities, Long numShards, Long shardId, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("LoadTPUEmbeddingADAMParameters", scope.makeOpName("LoadTPUEmbeddingADAMParameters")); opBuilder.addInput(parameters.asOutput()); opBuilder.addInput(momenta.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LoadTPUEmbeddingADAMParametersGradAccumDebug.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LoadTPUEmbeddingADAMParametersGradAccumDebug.java index d6f48806bb9..5bfa7517eac 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LoadTPUEmbeddingADAMParametersGradAccumDebug.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LoadTPUEmbeddingADAMParametersGradAccumDebug.java @@ -22,6 +22,7 @@ import org.tensorflow.OperationBuilder; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TFloat; /** * Load ADAM embedding parameters with debug support. @@ -75,7 +76,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of LoadTPUEmbeddingADAMParametersGradAccumDebug */ - public static LoadTPUEmbeddingADAMParametersGradAccumDebug create(Scope scope, Operand parameters, Operand momenta, Operand velocities, Operand gradientAccumulators, Long numShards, Long shardId, Options... options) { + public static LoadTPUEmbeddingADAMParametersGradAccumDebug create(Scope scope, Operand parameters, Operand momenta, Operand velocities, Operand gradientAccumulators, Long numShards, Long shardId, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("LoadTPUEmbeddingADAMParametersGradAccumDebug", scope.makeOpName("LoadTPUEmbeddingADAMParametersGradAccumDebug")); opBuilder.addInput(parameters.asOutput()); opBuilder.addInput(momenta.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LoadTPUEmbeddingAdadeltaParameters.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LoadTPUEmbeddingAdadeltaParameters.java index 231e74b0b4f..8651c2e7039 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LoadTPUEmbeddingAdadeltaParameters.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LoadTPUEmbeddingAdadeltaParameters.java @@ -22,6 +22,7 @@ import org.tensorflow.OperationBuilder; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TFloat; /** * Load Adadelta embedding parameters. @@ -74,7 +75,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of LoadTPUEmbeddingAdadeltaParameters */ - public static LoadTPUEmbeddingAdadeltaParameters create(Scope scope, Operand parameters, Operand accumulators, Operand updates, Long numShards, Long shardId, Options... options) { + public static LoadTPUEmbeddingAdadeltaParameters create(Scope scope, Operand parameters, Operand accumulators, Operand updates, Long numShards, Long shardId, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("LoadTPUEmbeddingAdadeltaParameters", scope.makeOpName("LoadTPUEmbeddingAdadeltaParameters")); opBuilder.addInput(parameters.asOutput()); opBuilder.addInput(accumulators.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LoadTPUEmbeddingAdadeltaParametersGradAccumDebug.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LoadTPUEmbeddingAdadeltaParametersGradAccumDebug.java index f77aaa25199..edb262f7ab6 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LoadTPUEmbeddingAdadeltaParametersGradAccumDebug.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LoadTPUEmbeddingAdadeltaParametersGradAccumDebug.java @@ -22,6 +22,7 @@ import org.tensorflow.OperationBuilder; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TFloat; /** * Load Adadelta parameters with debug support. @@ -75,7 +76,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of LoadTPUEmbeddingAdadeltaParametersGradAccumDebug */ - public static LoadTPUEmbeddingAdadeltaParametersGradAccumDebug create(Scope scope, Operand parameters, Operand accumulators, Operand updates, Operand gradientAccumulators, Long numShards, Long shardId, Options... options) { + public static LoadTPUEmbeddingAdadeltaParametersGradAccumDebug create(Scope scope, Operand parameters, Operand accumulators, Operand updates, Operand gradientAccumulators, Long numShards, Long shardId, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("LoadTPUEmbeddingAdadeltaParametersGradAccumDebug", scope.makeOpName("LoadTPUEmbeddingAdadeltaParametersGradAccumDebug")); opBuilder.addInput(parameters.asOutput()); opBuilder.addInput(accumulators.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LoadTPUEmbeddingAdagradParameters.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LoadTPUEmbeddingAdagradParameters.java index c88e1ae8aef..925d12cd38b 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LoadTPUEmbeddingAdagradParameters.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LoadTPUEmbeddingAdagradParameters.java @@ -22,6 +22,7 @@ import org.tensorflow.OperationBuilder; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TFloat; /** * Load Adagrad embedding parameters. @@ -73,7 +74,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of LoadTPUEmbeddingAdagradParameters */ - public static LoadTPUEmbeddingAdagradParameters create(Scope scope, Operand parameters, Operand accumulators, Long numShards, Long shardId, Options... options) { + public static LoadTPUEmbeddingAdagradParameters create(Scope scope, Operand parameters, Operand accumulators, Long numShards, Long shardId, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("LoadTPUEmbeddingAdagradParameters", scope.makeOpName("LoadTPUEmbeddingAdagradParameters")); opBuilder.addInput(parameters.asOutput()); opBuilder.addInput(accumulators.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LoadTPUEmbeddingAdagradParametersGradAccumDebug.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LoadTPUEmbeddingAdagradParametersGradAccumDebug.java index 3964656c45c..f0f5beb2c54 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LoadTPUEmbeddingAdagradParametersGradAccumDebug.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LoadTPUEmbeddingAdagradParametersGradAccumDebug.java @@ -22,6 +22,7 @@ import org.tensorflow.OperationBuilder; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TFloat; /** * Load Adagrad embedding parameters with debug support. @@ -74,7 +75,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of LoadTPUEmbeddingAdagradParametersGradAccumDebug */ - public static LoadTPUEmbeddingAdagradParametersGradAccumDebug create(Scope scope, Operand parameters, Operand accumulators, Operand gradientAccumulators, Long numShards, Long shardId, Options... options) { + public static LoadTPUEmbeddingAdagradParametersGradAccumDebug create(Scope scope, Operand parameters, Operand accumulators, Operand gradientAccumulators, Long numShards, Long shardId, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("LoadTPUEmbeddingAdagradParametersGradAccumDebug", scope.makeOpName("LoadTPUEmbeddingAdagradParametersGradAccumDebug")); opBuilder.addInput(parameters.asOutput()); opBuilder.addInput(accumulators.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LoadTPUEmbeddingCenteredRMSPropParameters.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LoadTPUEmbeddingCenteredRMSPropParameters.java index f975ebb4b39..daa6bf81f6b 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LoadTPUEmbeddingCenteredRMSPropParameters.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LoadTPUEmbeddingCenteredRMSPropParameters.java @@ -22,6 +22,7 @@ import org.tensorflow.OperationBuilder; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TFloat; /** * Load centered RMSProp embedding parameters. @@ -75,7 +76,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of LoadTPUEmbeddingCenteredRMSPropParameters */ - public static LoadTPUEmbeddingCenteredRMSPropParameters create(Scope scope, Operand parameters, Operand ms, Operand mom, Operand mg, Long numShards, Long shardId, Options... options) { + public static LoadTPUEmbeddingCenteredRMSPropParameters create(Scope scope, Operand parameters, Operand ms, Operand mom, Operand mg, Long numShards, Long shardId, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("LoadTPUEmbeddingCenteredRMSPropParameters", scope.makeOpName("LoadTPUEmbeddingCenteredRMSPropParameters")); opBuilder.addInput(parameters.asOutput()); opBuilder.addInput(ms.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LoadTPUEmbeddingFTRLParameters.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LoadTPUEmbeddingFTRLParameters.java index f8d95d7a950..97e6ad050f6 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LoadTPUEmbeddingFTRLParameters.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LoadTPUEmbeddingFTRLParameters.java @@ -22,6 +22,7 @@ import org.tensorflow.OperationBuilder; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TFloat; /** * Load FTRL embedding parameters. @@ -74,7 +75,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of LoadTPUEmbeddingFTRLParameters */ - public static LoadTPUEmbeddingFTRLParameters create(Scope scope, Operand parameters, Operand accumulators, Operand linears, Long numShards, Long shardId, Options... options) { + public static LoadTPUEmbeddingFTRLParameters create(Scope scope, Operand parameters, Operand accumulators, Operand linears, Long numShards, Long shardId, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("LoadTPUEmbeddingFTRLParameters", scope.makeOpName("LoadTPUEmbeddingFTRLParameters")); opBuilder.addInput(parameters.asOutput()); opBuilder.addInput(accumulators.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LoadTPUEmbeddingFTRLParametersGradAccumDebug.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LoadTPUEmbeddingFTRLParametersGradAccumDebug.java index 9d3768d0b80..4f336388828 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LoadTPUEmbeddingFTRLParametersGradAccumDebug.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LoadTPUEmbeddingFTRLParametersGradAccumDebug.java @@ -22,6 +22,7 @@ import org.tensorflow.OperationBuilder; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TFloat; /** * Load FTRL embedding parameters with debug support. @@ -75,7 +76,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of LoadTPUEmbeddingFTRLParametersGradAccumDebug */ - public static LoadTPUEmbeddingFTRLParametersGradAccumDebug create(Scope scope, Operand parameters, Operand accumulators, Operand linears, Operand gradientAccumulators, Long numShards, Long shardId, Options... options) { + public static LoadTPUEmbeddingFTRLParametersGradAccumDebug create(Scope scope, Operand parameters, Operand accumulators, Operand linears, Operand gradientAccumulators, Long numShards, Long shardId, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("LoadTPUEmbeddingFTRLParametersGradAccumDebug", scope.makeOpName("LoadTPUEmbeddingFTRLParametersGradAccumDebug")); opBuilder.addInput(parameters.asOutput()); opBuilder.addInput(accumulators.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LoadTPUEmbeddingMDLAdagradLightParameters.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LoadTPUEmbeddingMDLAdagradLightParameters.java index 7cc48270b2f..1749e34446f 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LoadTPUEmbeddingMDLAdagradLightParameters.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LoadTPUEmbeddingMDLAdagradLightParameters.java @@ -22,6 +22,7 @@ import org.tensorflow.OperationBuilder; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TFloat; /** * Load MDL Adagrad Light embedding parameters. @@ -75,7 +76,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of LoadTPUEmbeddingMDLAdagradLightParameters */ - public static LoadTPUEmbeddingMDLAdagradLightParameters create(Scope scope, Operand parameters, Operand accumulators, Operand weights, Operand benefits, Long numShards, Long shardId, Options... options) { + public static LoadTPUEmbeddingMDLAdagradLightParameters create(Scope scope, Operand parameters, Operand accumulators, Operand weights, Operand benefits, Long numShards, Long shardId, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("LoadTPUEmbeddingMDLAdagradLightParameters", scope.makeOpName("LoadTPUEmbeddingMDLAdagradLightParameters")); opBuilder.addInput(parameters.asOutput()); opBuilder.addInput(accumulators.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LoadTPUEmbeddingMomentumParameters.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LoadTPUEmbeddingMomentumParameters.java index 88db883b9e1..bb43b57a0c9 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LoadTPUEmbeddingMomentumParameters.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LoadTPUEmbeddingMomentumParameters.java @@ -22,6 +22,7 @@ import org.tensorflow.OperationBuilder; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TFloat; /** * Load Momentum embedding parameters. @@ -73,7 +74,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of LoadTPUEmbeddingMomentumParameters */ - public static LoadTPUEmbeddingMomentumParameters create(Scope scope, Operand parameters, Operand momenta, Long numShards, Long shardId, Options... options) { + public static LoadTPUEmbeddingMomentumParameters create(Scope scope, Operand parameters, Operand momenta, Long numShards, Long shardId, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("LoadTPUEmbeddingMomentumParameters", scope.makeOpName("LoadTPUEmbeddingMomentumParameters")); opBuilder.addInput(parameters.asOutput()); opBuilder.addInput(momenta.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LoadTPUEmbeddingMomentumParametersGradAccumDebug.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LoadTPUEmbeddingMomentumParametersGradAccumDebug.java index 5dfedf47805..4ac4933de50 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LoadTPUEmbeddingMomentumParametersGradAccumDebug.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LoadTPUEmbeddingMomentumParametersGradAccumDebug.java @@ -22,6 +22,7 @@ import org.tensorflow.OperationBuilder; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TFloat; /** * Load Momentum embedding parameters with debug support. @@ -74,7 +75,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of LoadTPUEmbeddingMomentumParametersGradAccumDebug */ - public static LoadTPUEmbeddingMomentumParametersGradAccumDebug create(Scope scope, Operand parameters, Operand momenta, Operand gradientAccumulators, Long numShards, Long shardId, Options... options) { + public static LoadTPUEmbeddingMomentumParametersGradAccumDebug create(Scope scope, Operand parameters, Operand momenta, Operand gradientAccumulators, Long numShards, Long shardId, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("LoadTPUEmbeddingMomentumParametersGradAccumDebug", scope.makeOpName("LoadTPUEmbeddingMomentumParametersGradAccumDebug")); opBuilder.addInput(parameters.asOutput()); opBuilder.addInput(momenta.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LoadTPUEmbeddingProximalAdagradParameters.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LoadTPUEmbeddingProximalAdagradParameters.java index c60005b7095..5c1208b863e 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LoadTPUEmbeddingProximalAdagradParameters.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LoadTPUEmbeddingProximalAdagradParameters.java @@ -22,6 +22,7 @@ import org.tensorflow.OperationBuilder; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TFloat; /** * Load proximal Adagrad embedding parameters. @@ -73,7 +74,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of LoadTPUEmbeddingProximalAdagradParameters */ - public static LoadTPUEmbeddingProximalAdagradParameters create(Scope scope, Operand parameters, Operand accumulators, Long numShards, Long shardId, Options... options) { + public static LoadTPUEmbeddingProximalAdagradParameters create(Scope scope, Operand parameters, Operand accumulators, Long numShards, Long shardId, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("LoadTPUEmbeddingProximalAdagradParameters", scope.makeOpName("LoadTPUEmbeddingProximalAdagradParameters")); opBuilder.addInput(parameters.asOutput()); opBuilder.addInput(accumulators.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LoadTPUEmbeddingProximalAdagradParametersGradAccumDebug.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LoadTPUEmbeddingProximalAdagradParametersGradAccumDebug.java index 10f10fdb7df..732623f5944 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LoadTPUEmbeddingProximalAdagradParametersGradAccumDebug.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LoadTPUEmbeddingProximalAdagradParametersGradAccumDebug.java @@ -22,6 +22,7 @@ import org.tensorflow.OperationBuilder; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TFloat; /** * Load proximal Adagrad embedding parameters with debug support. @@ -74,7 +75,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of LoadTPUEmbeddingProximalAdagradParametersGradAccumDebug */ - public static LoadTPUEmbeddingProximalAdagradParametersGradAccumDebug create(Scope scope, Operand parameters, Operand accumulators, Operand gradientAccumulators, Long numShards, Long shardId, Options... options) { + public static LoadTPUEmbeddingProximalAdagradParametersGradAccumDebug create(Scope scope, Operand parameters, Operand accumulators, Operand gradientAccumulators, Long numShards, Long shardId, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("LoadTPUEmbeddingProximalAdagradParametersGradAccumDebug", scope.makeOpName("LoadTPUEmbeddingProximalAdagradParametersGradAccumDebug")); opBuilder.addInput(parameters.asOutput()); opBuilder.addInput(accumulators.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LoadTPUEmbeddingRMSPropParameters.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LoadTPUEmbeddingRMSPropParameters.java index 9ec503b9234..cf62e37c0be 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LoadTPUEmbeddingRMSPropParameters.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LoadTPUEmbeddingRMSPropParameters.java @@ -22,6 +22,7 @@ import org.tensorflow.OperationBuilder; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TFloat; /** * Load RMSProp embedding parameters. @@ -74,7 +75,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of LoadTPUEmbeddingRMSPropParameters */ - public static LoadTPUEmbeddingRMSPropParameters create(Scope scope, Operand parameters, Operand ms, Operand mom, Long numShards, Long shardId, Options... options) { + public static LoadTPUEmbeddingRMSPropParameters create(Scope scope, Operand parameters, Operand ms, Operand mom, Long numShards, Long shardId, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("LoadTPUEmbeddingRMSPropParameters", scope.makeOpName("LoadTPUEmbeddingRMSPropParameters")); opBuilder.addInput(parameters.asOutput()); opBuilder.addInput(ms.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LoadTPUEmbeddingRMSPropParametersGradAccumDebug.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LoadTPUEmbeddingRMSPropParametersGradAccumDebug.java index ba1e8b49334..b7e77d2468e 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LoadTPUEmbeddingRMSPropParametersGradAccumDebug.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LoadTPUEmbeddingRMSPropParametersGradAccumDebug.java @@ -22,6 +22,7 @@ import org.tensorflow.OperationBuilder; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TFloat; /** * Load RMSProp embedding parameters with debug support. @@ -75,7 +76,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of LoadTPUEmbeddingRMSPropParametersGradAccumDebug */ - public static LoadTPUEmbeddingRMSPropParametersGradAccumDebug create(Scope scope, Operand parameters, Operand ms, Operand mom, Operand gradientAccumulators, Long numShards, Long shardId, Options... options) { + public static LoadTPUEmbeddingRMSPropParametersGradAccumDebug create(Scope scope, Operand parameters, Operand ms, Operand mom, Operand gradientAccumulators, Long numShards, Long shardId, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("LoadTPUEmbeddingRMSPropParametersGradAccumDebug", scope.makeOpName("LoadTPUEmbeddingRMSPropParametersGradAccumDebug")); opBuilder.addInput(parameters.asOutput()); opBuilder.addInput(ms.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LoadTPUEmbeddingStochasticGradientDescentParameters.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LoadTPUEmbeddingStochasticGradientDescentParameters.java index cf9c2d8c503..9015494b7ae 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LoadTPUEmbeddingStochasticGradientDescentParameters.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LoadTPUEmbeddingStochasticGradientDescentParameters.java @@ -22,6 +22,7 @@ import org.tensorflow.OperationBuilder; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TFloat; /** * Load SGD embedding parameters. @@ -72,7 +73,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of LoadTPUEmbeddingStochasticGradientDescentParameters */ - public static LoadTPUEmbeddingStochasticGradientDescentParameters create(Scope scope, Operand parameters, Long numShards, Long shardId, Options... options) { + public static LoadTPUEmbeddingStochasticGradientDescentParameters create(Scope scope, Operand parameters, Long numShards, Long shardId, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("LoadTPUEmbeddingStochasticGradientDescentParameters", scope.makeOpName("LoadTPUEmbeddingStochasticGradientDescentParameters")); opBuilder.addInput(parameters.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LookupTableExport.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LookupTableExport.java index b3c82d2778e..1d8ebda25cb 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LookupTableExport.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LookupTableExport.java @@ -44,12 +44,12 @@ public final class LookupTableExport extends PrimitiveOp { * @param Tvalues * @return a new instance of LookupTableExport */ - public static LookupTableExport create(Scope scope, Operand tableHandle, Class Tkeys, Class Tvalues) { + public static LookupTableExport create(Scope scope, Operand tableHandle, DataType Tkeys, DataType Tvalues) { OperationBuilder opBuilder = scope.env().opBuilder("LookupTableExportV2", scope.makeOpName("LookupTableExport")); opBuilder.addInput(tableHandle.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); - opBuilder.setAttr("Tkeys", DataType.fromClass(Tkeys)); - opBuilder.setAttr("Tvalues", DataType.fromClass(Tvalues)); + opBuilder.setAttr("Tkeys", Tkeys); + opBuilder.setAttr("Tvalues", Tvalues); return new LookupTableExport(opBuilder.build()); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LookupTableSize.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LookupTableSize.java index 70c26a789fb..9516edfbfd6 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LookupTableSize.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LookupTableSize.java @@ -24,12 +24,13 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt64; /** * Computes the number of elements in the given table. */ @Operator -public final class LookupTableSize extends PrimitiveOp implements Operand { +public final class LookupTableSize extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new LookupTableSize operation. @@ -48,16 +49,16 @@ public static LookupTableSize create(Scope scope, Operand tableHandle) { /** * Scalar that contains number of elements in the table. */ - public Output size() { + public Output size() { return size; } @Override - public Output asOutput() { + public Output asOutput() { return size; } - private Output size; + private Output size; private LookupTableSize(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LoopCond.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LoopCond.java index e92f4d96123..7a18737817b 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LoopCond.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LoopCond.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TBool; /** * Forwards the input to the output. @@ -32,7 +33,7 @@ * "pivot" switches of a loop. */ @Operator -public final class LoopCond extends PrimitiveOp implements Operand { +public final class LoopCond extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new LoopCond operation. @@ -41,7 +42,7 @@ public final class LoopCond extends PrimitiveOp implements Operand { * @param input A boolean scalar, representing the branch predicate of the Switch op. * @return a new instance of LoopCond */ - public static LoopCond create(Scope scope, Operand input) { + public static LoopCond create(Scope scope, Operand input) { OperationBuilder opBuilder = scope.env().opBuilder("LoopCond", scope.makeOpName("LoopCond")); opBuilder.addInput(input.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); @@ -51,16 +52,16 @@ public static LoopCond create(Scope scope, Operand input) { /** * The same tensor as `input`. */ - public Output output() { + public Output output() { return output; } @Override - public Output asOutput() { + public Output asOutput() { return output; } - private Output output; + private Output output; private LoopCond(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LowerBound.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LowerBound.java index e53704e3fa1..390d4e72424 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LowerBound.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LowerBound.java @@ -24,6 +24,8 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.family.TNumber; /** * Applies lower_bound(sorted_search_values, values) along each row. @@ -48,7 +50,7 @@ * * @param data type for {@code output()} output */ -public final class LowerBound extends PrimitiveOp implements Operand { +public final class LowerBound extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new LowerBound operation. @@ -60,12 +62,12 @@ public final class LowerBound extends PrimitiveOp implements O * @param outType * @return a new instance of LowerBound */ - public static LowerBound create(Scope scope, Operand sortedInputs, Operand values, Class outType) { + public static LowerBound create(Scope scope, Operand sortedInputs, Operand values, DataType outType) { OperationBuilder opBuilder = scope.env().opBuilder("LowerBound", scope.makeOpName("LowerBound")); opBuilder.addInput(sortedInputs.asOutput()); opBuilder.addInput(values.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); - opBuilder.setAttr("out_type", DataType.fromClass(outType)); + opBuilder.setAttr("out_type", outType); return new LowerBound(opBuilder.build()); } @@ -78,8 +80,8 @@ public static LowerBound create(Scope scope, Operand * the values that will be searched for in `sorted_search_values`. * @return a new instance of LowerBound */ - public static LowerBound create(Scope scope, Operand sortedInputs, Operand values) { - return create(scope, sortedInputs, values, Integer.class); + public static LowerBound create(Scope scope, Operand sortedInputs, Operand values) { + return create(scope, sortedInputs, values, TInt32.DTYPE); } /** diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Lu.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Lu.java index d26a2ee3d5e..a6ef5c31818 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Lu.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Lu.java @@ -25,6 +25,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.family.TNumber; /** * Computes the LU decomposition of one or more square matrices. @@ -51,7 +53,7 @@ * @param data type for {@code p()} output */ @Operator -public final class Lu extends PrimitiveOp { +public final class Lu extends PrimitiveOp { /** * Factory method to create a class wrapping a new Lu operation. @@ -62,11 +64,11 @@ public final class Lu extends PrimitiveOp { * @param outputIdxType * @return a new instance of Lu */ - public static Lu create(Scope scope, Operand input, Class outputIdxType) { + public static Lu create(Scope scope, Operand input, DataType outputIdxType) { OperationBuilder opBuilder = scope.env().opBuilder("Lu", scope.makeOpName("Lu")); opBuilder.addInput(input.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); - opBuilder.setAttr("output_idx_type", DataType.fromClass(outputIdxType)); + opBuilder.setAttr("output_idx_type", outputIdxType); return new Lu(opBuilder.build()); } @@ -78,8 +80,8 @@ public static Lu create(Scope scope, Operand inpu * size `[M, M]`. * @return a new instance of Lu */ - public static Lu create(Scope scope, Operand input) { - return create(scope, input, Integer.class); + public static Lu create(Scope scope, Operand input) { + return create(scope, input, TInt32.DTYPE); } /** diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MapClear.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MapClear.java index 88bddc291ea..df9044b1fa9 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MapClear.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MapClear.java @@ -85,12 +85,12 @@ private Options() { * @param options carries optional attributes values * @return a new instance of MapClear */ - public static MapClear create(Scope scope, List> dtypes, Options... options) { + public static MapClear create(Scope scope, List> dtypes, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("MapClear", scope.makeOpName("MapClear")); opBuilder = scope.applyControlDependencies(opBuilder); DataType[] dtypesArray = new DataType[dtypes.size()]; for (int i = 0; i < dtypesArray.length; ++i) { - dtypesArray[i] = DataType.fromClass(dtypes.get(i)); + dtypesArray[i] = dtypes.get(i); } opBuilder.setAttr("dtypes", dtypesArray); if (options != null) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MapIncompleteSize.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MapIncompleteSize.java index 16f0173e649..07f086fbd68 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MapIncompleteSize.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MapIncompleteSize.java @@ -26,12 +26,13 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt32; /** * Op returns the number of incomplete elements in the underlying container. */ @Operator -public final class MapIncompleteSize extends PrimitiveOp implements Operand { +public final class MapIncompleteSize extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.core.MapIncompleteSize} @@ -87,12 +88,12 @@ private Options() { * @param options carries optional attributes values * @return a new instance of MapIncompleteSize */ - public static MapIncompleteSize create(Scope scope, List> dtypes, Options... options) { + public static MapIncompleteSize create(Scope scope, List> dtypes, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("MapIncompleteSize", scope.makeOpName("MapIncompleteSize")); opBuilder = scope.applyControlDependencies(opBuilder); DataType[] dtypesArray = new DataType[dtypes.size()]; for (int i = 0; i < dtypesArray.length; ++i) { - dtypesArray[i] = DataType.fromClass(dtypes.get(i)); + dtypesArray[i] = dtypes.get(i); } opBuilder.setAttr("dtypes", dtypesArray); if (options != null) { @@ -144,16 +145,16 @@ public static Options sharedName(String sharedName) { /** */ - public Output size() { + public Output size() { return size; } @Override - public Output asOutput() { + public Output asOutput() { return size; } - private Output size; + private Output size; private MapIncompleteSize(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MapPeek.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MapPeek.java index 64ce0f02e53..8d37f01404a 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MapPeek.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MapPeek.java @@ -28,6 +28,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.TInt64; /** * Op peeks at the values at the specified key. If the @@ -94,14 +96,14 @@ private Options() { * @param options carries optional attributes values * @return a new instance of MapPeek */ - public static MapPeek create(Scope scope, Operand key, Operand indices, List> dtypes, Options... options) { + public static MapPeek create(Scope scope, Operand key, Operand indices, List> dtypes, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("MapPeek", scope.makeOpName("MapPeek")); opBuilder.addInput(key.asOutput()); opBuilder.addInput(indices.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); DataType[] dtypesArray = new DataType[dtypes.size()]; for (int i = 0; i < dtypesArray.length; ++i) { - dtypesArray[i] = DataType.fromClass(dtypes.get(i)); + dtypesArray[i] = dtypes.get(i); } opBuilder.setAttr("dtypes", dtypesArray); if (options != null) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MapSize.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MapSize.java index 3e9be2a9586..44b4aacdba4 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MapSize.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MapSize.java @@ -26,12 +26,13 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt32; /** * Op returns the number of elements in the underlying container. */ @Operator -public final class MapSize extends PrimitiveOp implements Operand { +public final class MapSize extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.core.MapSize} @@ -87,12 +88,12 @@ private Options() { * @param options carries optional attributes values * @return a new instance of MapSize */ - public static MapSize create(Scope scope, List> dtypes, Options... options) { + public static MapSize create(Scope scope, List> dtypes, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("MapSize", scope.makeOpName("MapSize")); opBuilder = scope.applyControlDependencies(opBuilder); DataType[] dtypesArray = new DataType[dtypes.size()]; for (int i = 0; i < dtypesArray.length; ++i) { - dtypesArray[i] = DataType.fromClass(dtypes.get(i)); + dtypesArray[i] = dtypes.get(i); } opBuilder.setAttr("dtypes", dtypesArray); if (options != null) { @@ -144,16 +145,16 @@ public static Options sharedName(String sharedName) { /** */ - public Output size() { + public Output size() { return size; } @Override - public Output asOutput() { + public Output asOutput() { return size; } - private Output size; + private Output size; private MapSize(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MapStage.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MapStage.java index 5ef7f865654..6b51660063c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MapStage.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MapStage.java @@ -26,6 +26,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.TInt64; /** * Stage (key, values) in the underlying container which behaves like a hashtable. @@ -93,7 +95,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of MapStage */ - public static MapStage create(Scope scope, Operand key, Operand indices, Iterable> values, List> dtypes, Options... options) { + public static MapStage create(Scope scope, Operand key, Operand indices, Iterable> values, List> dtypes, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("MapStage", scope.makeOpName("MapStage")); opBuilder.addInput(key.asOutput()); opBuilder.addInput(indices.asOutput()); @@ -101,7 +103,7 @@ public static MapStage create(Scope scope, Operand key, Operand i opBuilder = scope.applyControlDependencies(opBuilder); DataType[] dtypesArray = new DataType[dtypes.size()]; for (int i = 0; i < dtypesArray.length; ++i) { - dtypesArray[i] = DataType.fromClass(dtypes.get(i)); + dtypesArray[i] = dtypes.get(i); } opBuilder.setAttr("dtypes", dtypesArray); if (options != null) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MapUnstage.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MapUnstage.java index ddca39c3c20..7d28caa6ade 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MapUnstage.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MapUnstage.java @@ -28,6 +28,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.TInt64; /** * Op removes and returns the values associated with the key @@ -94,14 +96,14 @@ private Options() { * @param options carries optional attributes values * @return a new instance of MapUnstage */ - public static MapUnstage create(Scope scope, Operand key, Operand indices, List> dtypes, Options... options) { + public static MapUnstage create(Scope scope, Operand key, Operand indices, List> dtypes, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("MapUnstage", scope.makeOpName("MapUnstage")); opBuilder.addInput(key.asOutput()); opBuilder.addInput(indices.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); DataType[] dtypesArray = new DataType[dtypes.size()]; for (int i = 0; i < dtypesArray.length; ++i) { - dtypesArray[i] = DataType.fromClass(dtypes.get(i)); + dtypesArray[i] = dtypes.get(i); } opBuilder.setAttr("dtypes", dtypesArray); if (options != null) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MapUnstageNoKey.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MapUnstageNoKey.java index eeca07c036b..9e95fd7a736 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MapUnstageNoKey.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MapUnstageNoKey.java @@ -27,6 +27,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.TInt64; /** * Op removes and returns a random (key, value) @@ -92,13 +94,13 @@ private Options() { * @param options carries optional attributes values * @return a new instance of MapUnstageNoKey */ - public static MapUnstageNoKey create(Scope scope, Operand indices, List> dtypes, Options... options) { + public static MapUnstageNoKey create(Scope scope, Operand indices, List> dtypes, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("MapUnstageNoKey", scope.makeOpName("MapUnstageNoKey")); opBuilder.addInput(indices.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); DataType[] dtypesArray = new DataType[dtypes.size()]; for (int i = 0; i < dtypesArray.length; ++i) { - dtypesArray[i] = DataType.fromClass(dtypes.get(i)); + dtypesArray[i] = dtypes.get(i); } opBuilder.setAttr("dtypes", dtypesArray); if (options != null) { @@ -150,7 +152,7 @@ public static Options sharedName(String sharedName) { /** */ - public Output key() { + public Output key() { return key; } @@ -160,7 +162,7 @@ public List> values() { return values; } - private Output key; + private Output key; private List> values; private MapUnstageNoKey(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MatrixDiagPartV2.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MatrixDiagPartV2.java index b1c87b73d25..b16181b1890 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MatrixDiagPartV2.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MatrixDiagPartV2.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt32; /** * Returns the batched diagonal part of a batched tensor. @@ -113,7 +114,7 @@ public final class MatrixDiagPartV2 extends PrimitiveOp implements Operand * Default is 0. * @return a new instance of MatrixDiagPartV2 */ - public static MatrixDiagPartV2 create(Scope scope, Operand input, Operand k, Operand paddingValue) { + public static MatrixDiagPartV2 create(Scope scope, Operand input, Operand k, Operand paddingValue) { OperationBuilder opBuilder = scope.env().opBuilder("MatrixDiagPartV2", scope.makeOpName("MatrixDiagPartV2")); opBuilder.addInput(input.asOutput()); opBuilder.addInput(k.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MatrixDiagV2.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MatrixDiagV2.java index 2e2c0f93385..d3821c25b29 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MatrixDiagV2.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MatrixDiagV2.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt32; /** * Returns a batched diagonal tensor with given batched diagonal values. @@ -137,7 +138,7 @@ public final class MatrixDiagV2 extends PrimitiveOp implements Operand { * Default is 0. * @return a new instance of MatrixDiagV2 */ - public static MatrixDiagV2 create(Scope scope, Operand diagonal, Operand k, Operand numRows, Operand numCols, Operand paddingValue) { + public static MatrixDiagV2 create(Scope scope, Operand diagonal, Operand k, Operand numRows, Operand numCols, Operand paddingValue) { OperationBuilder opBuilder = scope.env().opBuilder("MatrixDiagV2", scope.makeOpName("MatrixDiagV2")); opBuilder.addInput(diagonal.asOutput()); opBuilder.addInput(k.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MatrixSetDiagV2.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MatrixSetDiagV2.java index 74f5edadc7c..9a2abad7d2d 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MatrixSetDiagV2.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MatrixSetDiagV2.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt32; /** * Returns a batched matrix tensor with new batched diagonal values. @@ -115,7 +116,7 @@ public final class MatrixSetDiagV2 extends PrimitiveOp implements Operand * of a matrix band. `k[0]` must not be larger than `k[1]`. * @return a new instance of MatrixSetDiagV2 */ - public static MatrixSetDiagV2 create(Scope scope, Operand input, Operand diagonal, Operand k) { + public static MatrixSetDiagV2 create(Scope scope, Operand input, Operand diagonal, Operand k) { OperationBuilder opBuilder = scope.env().opBuilder("MatrixSetDiagV2", scope.makeOpName("MatrixSetDiagV2")); opBuilder.addInput(input.asOutput()); opBuilder.addInput(diagonal.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Max.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Max.java index 972e8e142e1..040238704f1 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Max.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Max.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Computes the maximum of elements across dimensions of a tensor. @@ -67,7 +68,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of Max */ - public static Max create(Scope scope, Operand input, Operand axis, Options... options) { + public static Max create(Scope scope, Operand input, Operand axis, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("Max", scope.makeOpName("Max")); opBuilder.addInput(input.asOutput()); opBuilder.addInput(axis.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MaxIntraOpParallelismDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MaxIntraOpParallelismDataset.java index e442fbf7f4a..d92127d9445 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MaxIntraOpParallelismDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MaxIntraOpParallelismDataset.java @@ -23,9 +23,10 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TInt64; /** * Creates a dataset that overrides the maximum intra-op parallelism. @@ -42,14 +43,14 @@ public final class MaxIntraOpParallelismDataset extends PrimitiveOp implements O * @param outputShapes * @return a new instance of MaxIntraOpParallelismDataset */ - public static MaxIntraOpParallelismDataset create(Scope scope, Operand inputDataset, Operand maxIntraOpParallelism, List> outputTypes, List outputShapes) { + public static MaxIntraOpParallelismDataset create(Scope scope, Operand inputDataset, Operand maxIntraOpParallelism, List> outputTypes, List outputShapes) { OperationBuilder opBuilder = scope.env().opBuilder("MaxIntraOpParallelismDataset", scope.makeOpName("MaxIntraOpParallelismDataset")); opBuilder.addInput(inputDataset.asOutput()); opBuilder.addInput(maxIntraOpParallelism.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); DataType[] outputTypesArray = new DataType[outputTypes.size()]; for (int i = 0; i < outputTypesArray.length; ++i) { - outputTypesArray[i] = DataType.fromClass(outputTypes.get(i)); + outputTypesArray[i] = outputTypes.get(i); } opBuilder.setAttr("output_types", outputTypesArray); Shape[] outputShapesArray = new Shape[outputShapes.size()]; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Merge.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Merge.java index 2961b1cfcd5..aee1acdc05f 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Merge.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Merge.java @@ -25,6 +25,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt32; /** * Forwards the value of an available tensor from `inputs` to `output`. @@ -64,12 +65,12 @@ public Output output() { /** * The index of the chosen input tensor in `inputs`. */ - public Output valueIndex() { + public Output valueIndex() { return valueIndex; } private Output output; - private Output valueIndex; + private Output valueIndex; private Merge(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Min.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Min.java index cb8f427ac36..942ec4c7d0c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Min.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Min.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Computes the minimum of elements across dimensions of a tensor. @@ -67,7 +68,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of Min */ - public static Min create(Scope scope, Operand input, Operand axis, Options... options) { + public static Min create(Scope scope, Operand input, Operand axis, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("Min", scope.makeOpName("Min")); opBuilder.addInput(input.asOutput()); opBuilder.addInput(axis.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MirrorPad.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MirrorPad.java index 99953ee05c4..9b6b2f92f1b 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MirrorPad.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MirrorPad.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Pads a tensor with mirrored values. @@ -73,7 +74,7 @@ public final class MirrorPad extends PrimitiveOp implements Operand { * it is `[1, 2, 3, 3, 2]` in symmetric mode. * @return a new instance of MirrorPad */ - public static MirrorPad create(Scope scope, Operand input, Operand paddings, String mode) { + public static MirrorPad create(Scope scope, Operand input, Operand paddings, String mode) { OperationBuilder opBuilder = scope.env().opBuilder("MirrorPad", scope.makeOpName("MirrorPad")); opBuilder.addInput(input.asOutput()); opBuilder.addInput(paddings.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MirrorPadGrad.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MirrorPadGrad.java index fcf5d332647..2941a386ecf 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MirrorPadGrad.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MirrorPadGrad.java @@ -23,6 +23,7 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.family.TNumber; /** * Gradient op for `MirrorPad` op. This op folds a mirror-padded tensor. @@ -60,7 +61,7 @@ public final class MirrorPadGrad extends PrimitiveOp implements Operand { * @param mode The mode used in the `MirrorPad` op. * @return a new instance of MirrorPadGrad */ - public static MirrorPadGrad create(Scope scope, Operand input, Operand paddings, String mode) { + public static MirrorPadGrad create(Scope scope, Operand input, Operand paddings, String mode) { OperationBuilder opBuilder = scope.env().opBuilder("MirrorPadGrad", scope.makeOpName("MirrorPadGrad")); opBuilder.addInput(input.asOutput()); opBuilder.addInput(paddings.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MutableDenseHashTable.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MutableDenseHashTable.java index 68e1d135043..eecb53c76f7 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MutableDenseHashTable.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MutableDenseHashTable.java @@ -22,7 +22,7 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; @@ -119,12 +119,12 @@ private Options() { * @param options carries optional attributes values * @return a new instance of MutableDenseHashTable */ - public static MutableDenseHashTable create(Scope scope, Operand emptyKey, Operand deletedKey, Class valueDtype, Options... options) { + public static MutableDenseHashTable create(Scope scope, Operand emptyKey, Operand deletedKey, DataType valueDtype, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("MutableDenseHashTableV2", scope.makeOpName("MutableDenseHashTable")); opBuilder.addInput(emptyKey.asOutput()); opBuilder.addInput(deletedKey.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); - opBuilder.setAttr("value_dtype", DataType.fromClass(valueDtype)); + opBuilder.setAttr("value_dtype", valueDtype); if (options != null) { for (Options opts : options) { if (opts.container != null) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MutableHashTable.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MutableHashTable.java index cba8c552089..12437d5df38 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MutableHashTable.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MutableHashTable.java @@ -85,11 +85,11 @@ private Options() { * @param options carries optional attributes values * @return a new instance of MutableHashTable */ - public static MutableHashTable create(Scope scope, Class keyDtype, Class valueDtype, Options... options) { + public static MutableHashTable create(Scope scope, DataType keyDtype, DataType valueDtype, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("MutableHashTableV2", scope.makeOpName("MutableHashTable")); opBuilder = scope.applyControlDependencies(opBuilder); - opBuilder.setAttr("key_dtype", DataType.fromClass(keyDtype)); - opBuilder.setAttr("value_dtype", DataType.fromClass(valueDtype)); + opBuilder.setAttr("key_dtype", keyDtype); + opBuilder.setAttr("value_dtype", valueDtype); if (options != null) { for (Options opts : options) { if (opts.container != null) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MutableHashTableOfTensors.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MutableHashTableOfTensors.java index 8c8ee00ad51..2e09f65fdd4 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MutableHashTableOfTensors.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MutableHashTableOfTensors.java @@ -22,7 +22,7 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; @@ -94,11 +94,11 @@ private Options() { * @param options carries optional attributes values * @return a new instance of MutableHashTableOfTensors */ - public static MutableHashTableOfTensors create(Scope scope, Class keyDtype, Class valueDtype, Options... options) { + public static MutableHashTableOfTensors create(Scope scope, DataType keyDtype, DataType valueDtype, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("MutableHashTableOfTensorsV2", scope.makeOpName("MutableHashTableOfTensors")); opBuilder = scope.applyControlDependencies(opBuilder); - opBuilder.setAttr("key_dtype", DataType.fromClass(keyDtype)); - opBuilder.setAttr("value_dtype", DataType.fromClass(valueDtype)); + opBuilder.setAttr("key_dtype", keyDtype); + opBuilder.setAttr("value_dtype", valueDtype); if (options != null) { for (Options opts : options) { if (opts.container != null) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/NcclAllReduce.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/NcclAllReduce.java index 5e4b0906308..22968256120 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/NcclAllReduce.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/NcclAllReduce.java @@ -23,6 +23,7 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.family.TNumber; /** * Outputs a tensor containing the reduction across all input tensors. @@ -42,7 +43,7 @@ * * @param data type for {@code data()} output */ -public final class NcclAllReduce extends PrimitiveOp implements Operand { +public final class NcclAllReduce extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new NcclAllReduce operation. @@ -54,7 +55,7 @@ public final class NcclAllReduce extends PrimitiveOp implement * @param sharedName * @return a new instance of NcclAllReduce */ - public static NcclAllReduce create(Scope scope, Operand input, String reduction, Long numDevices, String sharedName) { + public static NcclAllReduce create(Scope scope, Operand input, String reduction, Long numDevices, String sharedName) { OperationBuilder opBuilder = scope.env().opBuilder("NcclAllReduce", scope.makeOpName("NcclAllReduce")); opBuilder.addInput(input.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/NcclBroadcast.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/NcclBroadcast.java index 0432ae7ae02..6033852e0c1 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/NcclBroadcast.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/NcclBroadcast.java @@ -21,9 +21,10 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.family.TNumber; /** * Sends `input` to all devices that are connected to the output. @@ -40,7 +41,7 @@ * * @param data type for {@code output()} output */ -public final class NcclBroadcast extends PrimitiveOp implements Operand { +public final class NcclBroadcast extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new NcclBroadcast operation. @@ -50,7 +51,7 @@ public final class NcclBroadcast extends PrimitiveOp implement * @param shape * @return a new instance of NcclBroadcast */ - public static NcclBroadcast create(Scope scope, Operand input, Shape shape) { + public static NcclBroadcast create(Scope scope, Operand input, Shape shape) { OperationBuilder opBuilder = scope.env().opBuilder("NcclBroadcast", scope.makeOpName("NcclBroadcast")); opBuilder.addInput(input.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/NcclReduce.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/NcclReduce.java index b8049a21dc1..19bc62bd69c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/NcclReduce.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/NcclReduce.java @@ -24,6 +24,7 @@ import org.tensorflow.op.Operands; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.family.TNumber; /** * Reduces `input` from `num_devices` using `reduction` to a single device. @@ -39,7 +40,7 @@ * * @param data type for {@code data()} output */ -public final class NcclReduce extends PrimitiveOp implements Operand { +public final class NcclReduce extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new NcclReduce operation. @@ -49,7 +50,7 @@ public final class NcclReduce extends PrimitiveOp implements O * @param reduction * @return a new instance of NcclReduce */ - public static NcclReduce create(Scope scope, Iterable> input, String reduction) { + public static NcclReduce create(Scope scope, Iterable> input, String reduction) { OperationBuilder opBuilder = scope.env().opBuilder("NcclReduce", scope.makeOpName("NcclReduce")); opBuilder.addInputList(Operands.asOutputs(input)); opBuilder = scope.applyControlDependencies(opBuilder); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/NearestNeighbors.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/NearestNeighbors.java index b6ed3c1721c..c3b2b0615f4 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/NearestNeighbors.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/NearestNeighbors.java @@ -23,6 +23,8 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TFloat; +import org.tensorflow.types.TInt64; /** * Selects the k nearest centers for each point. @@ -43,7 +45,7 @@ public final class NearestNeighbors extends PrimitiveOp { * only m centers are returned. * @return a new instance of NearestNeighbors */ - public static NearestNeighbors create(Scope scope, Operand points, Operand centers, Operand k) { + public static NearestNeighbors create(Scope scope, Operand points, Operand centers, Operand k) { OperationBuilder opBuilder = scope.env().opBuilder("NearestNeighbors", scope.makeOpName("NearestNeighbors")); opBuilder.addInput(points.asOutput()); opBuilder.addInput(centers.asOutput()); @@ -56,7 +58,7 @@ public static NearestNeighbors create(Scope scope, Operand points, Operan * Matrix of shape (n, min(m, k)). Each row contains the indices of the centers * closest to the corresponding point, ordered by increasing distance. */ - public Output nearestCenterIndices() { + public Output nearestCenterIndices() { return nearestCenterIndices; } @@ -64,12 +66,12 @@ public Output nearestCenterIndices() { * Matrix of shape (n, min(m, k)). Each row contains the squared L2 distance to the * corresponding center in nearest_center_indices. */ - public Output nearestCenterDistances() { + public Output nearestCenterDistances() { return nearestCenterDistances; } - private Output nearestCenterIndices; - private Output nearestCenterDistances; + private Output nearestCenterIndices; + private Output nearestCenterDistances; private NearestNeighbors(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/NextAfter.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/NextAfter.java index a4b8b296274..6a35190af7a 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/NextAfter.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/NextAfter.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Returns the next representable value of `x1` in the direction of `x2`, element-wise. @@ -39,7 +40,7 @@ * @param data type for {@code output()} output */ @Operator -public final class NextAfter extends PrimitiveOp implements Operand { +public final class NextAfter extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new NextAfter operation. @@ -49,7 +50,7 @@ public final class NextAfter extends PrimitiveOp implements Op * @param x2 * @return a new instance of NextAfter */ - public static NextAfter create(Scope scope, Operand x1, Operand x2) { + public static NextAfter create(Scope scope, Operand x1, Operand x2) { OperationBuilder opBuilder = scope.env().opBuilder("NextAfter", scope.makeOpName("NextAfter")); opBuilder.addInput(x1.asOutput()); opBuilder.addInput(x2.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/NonDeterministicInts.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/NonDeterministicInts.java index 5879a315640..3c7f9cb6802 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/NonDeterministicInts.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/NonDeterministicInts.java @@ -24,6 +24,7 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TInt64; /** * Non-deterministically generates some integers. @@ -42,11 +43,11 @@ public final class NonDeterministicInts extends PrimitiveOp implements Operan * @param dtype The type of the output. * @return a new instance of NonDeterministicInts */ - public static NonDeterministicInts create(Scope scope, Operand shape, Class dtype) { + public static NonDeterministicInts create(Scope scope, Operand shape, DataType dtype) { OperationBuilder opBuilder = scope.env().opBuilder("NonDeterministicInts", scope.makeOpName("NonDeterministicInts")); opBuilder.addInput(shape.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); - opBuilder.setAttr("dtype", DataType.fromClass(dtype)); + opBuilder.setAttr("dtype", dtype); return new NonDeterministicInts(opBuilder.build()); } @@ -57,8 +58,8 @@ public static NonDeterministicInts create(Scope scope, Operand shap * @param shape The shape of the output tensor. * @return a new instance of NonDeterministicInts */ - public static NonDeterministicInts create(Scope scope, Operand shape) { - return create(scope, shape, Long.class); + public static NonDeterministicInts create(Scope scope, Operand shape) { + return create(scope, shape, TInt64.DTYPE); } /** diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/NonMaxSuppressionV5.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/NonMaxSuppressionV5.java index 11dbb4bc35c..84a97b27098 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/NonMaxSuppressionV5.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/NonMaxSuppressionV5.java @@ -24,6 +24,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.family.TNumber; /** * Greedily selects a subset of bounding boxes in descending order of score, @@ -54,7 +56,7 @@ * @param data type for {@code selectedScores()} output */ @Operator -public final class NonMaxSuppressionV5 extends PrimitiveOp { +public final class NonMaxSuppressionV5 extends PrimitiveOp { /** * Optional attributes for {@link org.tensorflow.op.core.NonMaxSuppressionV5} @@ -95,7 +97,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of NonMaxSuppressionV5 */ - public static NonMaxSuppressionV5 create(Scope scope, Operand boxes, Operand scores, Operand maxOutputSize, Operand iouThreshold, Operand scoreThreshold, Operand softNmsSigma, Options... options) { + public static NonMaxSuppressionV5 create(Scope scope, Operand boxes, Operand scores, Operand maxOutputSize, Operand iouThreshold, Operand scoreThreshold, Operand softNmsSigma, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("NonMaxSuppressionV5", scope.makeOpName("NonMaxSuppressionV5")); opBuilder.addInput(boxes.asOutput()); opBuilder.addInput(scores.asOutput()); @@ -126,7 +128,7 @@ public static Options padToMaxOutputSize(Boolean padToMaxOutputSize) { * A 1-D integer tensor of shape `[M]` representing the selected * indices from the boxes tensor, where `M <= max_output_size`. */ - public Output selectedIndices() { + public Output selectedIndices() { return selectedIndices; } @@ -144,13 +146,13 @@ public Output selectedScores() { * A 0-D integer tensor representing the number of valid elements in * `selected_indices`, with the valid elements appearing first. */ - public Output validOutputs() { + public Output validOutputs() { return validOutputs; } - private Output selectedIndices; + private Output selectedIndices; private Output selectedScores; - private Output validOutputs; + private Output validOutputs; private NonMaxSuppressionV5(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/NonSerializableDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/NonSerializableDataset.java index 957f9117696..6bdd651cf69 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/NonSerializableDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/NonSerializableDataset.java @@ -23,7 +23,7 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; @@ -40,13 +40,13 @@ public final class NonSerializableDataset extends PrimitiveOp implements Operand * @param outputShapes * @return a new instance of NonSerializableDataset */ - public static NonSerializableDataset create(Scope scope, Operand inputDataset, List> outputTypes, List outputShapes) { + public static NonSerializableDataset create(Scope scope, Operand inputDataset, List> outputTypes, List outputShapes) { OperationBuilder opBuilder = scope.env().opBuilder("NonSerializableDataset", scope.makeOpName("NonSerializableDataset")); opBuilder.addInput(inputDataset.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); DataType[] outputTypesArray = new DataType[outputTypes.size()]; for (int i = 0; i < outputTypesArray.length; ++i) { - outputTypesArray[i] = DataType.fromClass(outputTypes.get(i)); + outputTypesArray[i] = outputTypes.get(i); } opBuilder.setAttr("output_types", outputTypesArray); Shape[] outputShapesArray = new Shape[outputShapes.size()]; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/OneHot.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/OneHot.java index 52699a4e758..9dbb831c894 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/OneHot.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/OneHot.java @@ -24,6 +24,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.family.TNumber; /** * Returns a one-hot tensor. @@ -144,7 +146,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of OneHot */ - public static OneHot create(Scope scope, Operand indices, Operand depth, Operand onValue, Operand offValue, Options... options) { + public static OneHot create(Scope scope, Operand indices, Operand depth, Operand onValue, Operand offValue, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("OneHot", scope.makeOpName("OneHot")); opBuilder.addInput(indices.asOutput()); opBuilder.addInput(depth.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/OrderedMapClear.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/OrderedMapClear.java index dff8119bfec..6053386e175 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/OrderedMapClear.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/OrderedMapClear.java @@ -85,12 +85,12 @@ private Options() { * @param options carries optional attributes values * @return a new instance of OrderedMapClear */ - public static OrderedMapClear create(Scope scope, List> dtypes, Options... options) { + public static OrderedMapClear create(Scope scope, List> dtypes, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("OrderedMapClear", scope.makeOpName("OrderedMapClear")); opBuilder = scope.applyControlDependencies(opBuilder); DataType[] dtypesArray = new DataType[dtypes.size()]; for (int i = 0; i < dtypesArray.length; ++i) { - dtypesArray[i] = DataType.fromClass(dtypes.get(i)); + dtypesArray[i] = dtypes.get(i); } opBuilder.setAttr("dtypes", dtypesArray); if (options != null) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/OrderedMapIncompleteSize.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/OrderedMapIncompleteSize.java index 63cca530ab3..8993afee755 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/OrderedMapIncompleteSize.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/OrderedMapIncompleteSize.java @@ -26,12 +26,13 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt32; /** * Op returns the number of incomplete elements in the underlying container. */ @Operator -public final class OrderedMapIncompleteSize extends PrimitiveOp implements Operand { +public final class OrderedMapIncompleteSize extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.core.OrderedMapIncompleteSize} @@ -87,12 +88,12 @@ private Options() { * @param options carries optional attributes values * @return a new instance of OrderedMapIncompleteSize */ - public static OrderedMapIncompleteSize create(Scope scope, List> dtypes, Options... options) { + public static OrderedMapIncompleteSize create(Scope scope, List> dtypes, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("OrderedMapIncompleteSize", scope.makeOpName("OrderedMapIncompleteSize")); opBuilder = scope.applyControlDependencies(opBuilder); DataType[] dtypesArray = new DataType[dtypes.size()]; for (int i = 0; i < dtypesArray.length; ++i) { - dtypesArray[i] = DataType.fromClass(dtypes.get(i)); + dtypesArray[i] = dtypes.get(i); } opBuilder.setAttr("dtypes", dtypesArray); if (options != null) { @@ -144,16 +145,16 @@ public static Options sharedName(String sharedName) { /** */ - public Output size() { + public Output size() { return size; } @Override - public Output asOutput() { + public Output asOutput() { return size; } - private Output size; + private Output size; private OrderedMapIncompleteSize(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/OrderedMapPeek.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/OrderedMapPeek.java index 6c6a80c7663..6e7c1e82bef 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/OrderedMapPeek.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/OrderedMapPeek.java @@ -28,6 +28,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.TInt64; /** * Op peeks at the values at the specified key. If the @@ -95,14 +97,14 @@ private Options() { * @param options carries optional attributes values * @return a new instance of OrderedMapPeek */ - public static OrderedMapPeek create(Scope scope, Operand key, Operand indices, List> dtypes, Options... options) { + public static OrderedMapPeek create(Scope scope, Operand key, Operand indices, List> dtypes, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("OrderedMapPeek", scope.makeOpName("OrderedMapPeek")); opBuilder.addInput(key.asOutput()); opBuilder.addInput(indices.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); DataType[] dtypesArray = new DataType[dtypes.size()]; for (int i = 0; i < dtypesArray.length; ++i) { - dtypesArray[i] = DataType.fromClass(dtypes.get(i)); + dtypesArray[i] = dtypes.get(i); } opBuilder.setAttr("dtypes", dtypesArray); if (options != null) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/OrderedMapSize.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/OrderedMapSize.java index ffbaf307d8d..ada4ac290aa 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/OrderedMapSize.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/OrderedMapSize.java @@ -26,12 +26,13 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt32; /** * Op returns the number of elements in the underlying container. */ @Operator -public final class OrderedMapSize extends PrimitiveOp implements Operand { +public final class OrderedMapSize extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.core.OrderedMapSize} @@ -87,12 +88,12 @@ private Options() { * @param options carries optional attributes values * @return a new instance of OrderedMapSize */ - public static OrderedMapSize create(Scope scope, List> dtypes, Options... options) { + public static OrderedMapSize create(Scope scope, List> dtypes, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("OrderedMapSize", scope.makeOpName("OrderedMapSize")); opBuilder = scope.applyControlDependencies(opBuilder); DataType[] dtypesArray = new DataType[dtypes.size()]; for (int i = 0; i < dtypesArray.length; ++i) { - dtypesArray[i] = DataType.fromClass(dtypes.get(i)); + dtypesArray[i] = dtypes.get(i); } opBuilder.setAttr("dtypes", dtypesArray); if (options != null) { @@ -144,16 +145,16 @@ public static Options sharedName(String sharedName) { /** */ - public Output size() { + public Output size() { return size; } @Override - public Output asOutput() { + public Output asOutput() { return size; } - private Output size; + private Output size; private OrderedMapSize(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/OrderedMapStage.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/OrderedMapStage.java index 0c34ed4f0ce..c136bdd0aba 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/OrderedMapStage.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/OrderedMapStage.java @@ -26,6 +26,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.TInt64; /** * Stage (key, values) in the underlying container which behaves like a ordered @@ -95,7 +97,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of OrderedMapStage */ - public static OrderedMapStage create(Scope scope, Operand key, Operand indices, Iterable> values, List> dtypes, Options... options) { + public static OrderedMapStage create(Scope scope, Operand key, Operand indices, Iterable> values, List> dtypes, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("OrderedMapStage", scope.makeOpName("OrderedMapStage")); opBuilder.addInput(key.asOutput()); opBuilder.addInput(indices.asOutput()); @@ -103,7 +105,7 @@ public static OrderedMapStage create(Scope scope, Operand key, Operand key, Operand indices, List> dtypes, Options... options) { + public static OrderedMapUnstage create(Scope scope, Operand key, Operand indices, List> dtypes, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("OrderedMapUnstage", scope.makeOpName("OrderedMapUnstage")); opBuilder.addInput(key.asOutput()); opBuilder.addInput(indices.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); DataType[] dtypesArray = new DataType[dtypes.size()]; for (int i = 0; i < dtypesArray.length; ++i) { - dtypesArray[i] = DataType.fromClass(dtypes.get(i)); + dtypesArray[i] = dtypes.get(i); } opBuilder.setAttr("dtypes", dtypesArray); if (options != null) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/OrderedMapUnstageNoKey.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/OrderedMapUnstageNoKey.java index d63d6fe1d7c..ecff3c7435f 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/OrderedMapUnstageNoKey.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/OrderedMapUnstageNoKey.java @@ -27,6 +27,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.TInt64; /** * Op removes and returns the (key, value) element with the smallest @@ -92,13 +94,13 @@ private Options() { * @param options carries optional attributes values * @return a new instance of OrderedMapUnstageNoKey */ - public static OrderedMapUnstageNoKey create(Scope scope, Operand indices, List> dtypes, Options... options) { + public static OrderedMapUnstageNoKey create(Scope scope, Operand indices, List> dtypes, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("OrderedMapUnstageNoKey", scope.makeOpName("OrderedMapUnstageNoKey")); opBuilder.addInput(indices.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); DataType[] dtypesArray = new DataType[dtypes.size()]; for (int i = 0; i < dtypesArray.length; ++i) { - dtypesArray[i] = DataType.fromClass(dtypes.get(i)); + dtypesArray[i] = dtypes.get(i); } opBuilder.setAttr("dtypes", dtypesArray); if (options != null) { @@ -150,7 +152,7 @@ public static Options sharedName(String sharedName) { /** */ - public Output key() { + public Output key() { return key; } @@ -160,7 +162,7 @@ public List> values() { return values; } - private Output key; + private Output key; private List> values; private OrderedMapUnstageNoKey(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/OutfeedDequeue.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/OutfeedDequeue.java index ac446dc9ee2..9917b7e37b1 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/OutfeedDequeue.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/OutfeedDequeue.java @@ -22,7 +22,7 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; @@ -65,10 +65,10 @@ private Options() { * @param options carries optional attributes values * @return a new instance of OutfeedDequeue */ - public static OutfeedDequeue create(Scope scope, Class dtype, Shape shape, Options... options) { + public static OutfeedDequeue create(Scope scope, DataType dtype, Shape shape, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("OutfeedDequeue", scope.makeOpName("OutfeedDequeue")); opBuilder = scope.applyControlDependencies(opBuilder); - opBuilder.setAttr("dtype", DataType.fromClass(dtype)); + opBuilder.setAttr("dtype", dtype); opBuilder.setAttr("shape", shape); if (options != null) { for (Options opts : options) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/OutfeedDequeueTuple.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/OutfeedDequeueTuple.java index 72d7f3b5ca1..78a50267d70 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/OutfeedDequeueTuple.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/OutfeedDequeueTuple.java @@ -25,7 +25,7 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; @@ -67,12 +67,12 @@ private Options() { * @param options carries optional attributes values * @return a new instance of OutfeedDequeueTuple */ - public static OutfeedDequeueTuple create(Scope scope, List> dtypes, List shapes, Options... options) { + public static OutfeedDequeueTuple create(Scope scope, List> dtypes, List shapes, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("OutfeedDequeueTuple", scope.makeOpName("OutfeedDequeueTuple")); opBuilder = scope.applyControlDependencies(opBuilder); DataType[] dtypesArray = new DataType[dtypes.size()]; for (int i = 0; i < dtypesArray.length; ++i) { - dtypesArray[i] = DataType.fromClass(dtypes.get(i)); + dtypesArray[i] = dtypes.get(i); } opBuilder.setAttr("dtypes", dtypesArray); Shape[] shapesArray = new Shape[shapes.size()]; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Pad.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Pad.java index 60352327c31..ef8c15579a6 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Pad.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Pad.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Pads a tensor. @@ -67,7 +68,7 @@ public final class Pad extends PrimitiveOp implements Operand { * @param constantValues * @return a new instance of Pad */ - public static Pad create(Scope scope, Operand input, Operand paddings, Operand constantValues) { + public static Pad create(Scope scope, Operand input, Operand paddings, Operand constantValues) { OperationBuilder opBuilder = scope.env().opBuilder("PadV2", scope.makeOpName("Pad")); opBuilder.addInput(input.asOutput()); opBuilder.addInput(paddings.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ParallelConcat.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ParallelConcat.java index 8928b8b2748..e9ef04b407c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ParallelConcat.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ParallelConcat.java @@ -21,7 +21,7 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.Operands; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ParallelDynamicStitch.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ParallelDynamicStitch.java index 020810e0544..45c65c15cf9 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ParallelDynamicStitch.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ParallelDynamicStitch.java @@ -25,6 +25,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt32; /** * Interleave the values from the `data` tensors into a single tensor. @@ -96,7 +97,7 @@ public final class ParallelDynamicStitch extends PrimitiveOp implements Opera * @param data * @return a new instance of ParallelDynamicStitch */ - public static ParallelDynamicStitch create(Scope scope, Iterable> indices, Iterable> data) { + public static ParallelDynamicStitch create(Scope scope, Iterable> indices, Iterable> data) { OperationBuilder opBuilder = scope.env().opBuilder("ParallelDynamicStitch", scope.makeOpName("ParallelDynamicStitch")); opBuilder.addInputList(Operands.asOutputs(indices)); opBuilder.addInputList(Operands.asOutputs(data)); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Placeholder.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Placeholder.java index 153670ce63c..60c42462e6f 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Placeholder.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Placeholder.java @@ -22,7 +22,7 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; @@ -67,10 +67,10 @@ private Options() { * @param options carries optional attributes values * @return a new instance of Placeholder */ - public static Placeholder create(Scope scope, Class dtype, Options... options) { + public static Placeholder create(Scope scope, DataType dtype, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("Placeholder", scope.makeOpName("Placeholder")); opBuilder = scope.applyControlDependencies(opBuilder); - opBuilder.setAttr("dtype", DataType.fromClass(dtype)); + opBuilder.setAttr("dtype", dtype); if (options != null) { for (Options opts : options) { if (opts.shape != null) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/PlaceholderWithDefault.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/PlaceholderWithDefault.java index 9790ec20136..74a04f515b9 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/PlaceholderWithDefault.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/PlaceholderWithDefault.java @@ -21,7 +21,7 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Prelinearize.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Prelinearize.java index 6c641999b5b..6b505081b77 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Prelinearize.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Prelinearize.java @@ -22,7 +22,7 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/PrelinearizeTuple.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/PrelinearizeTuple.java index bf99fa5f7f7..a127039b9f7 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/PrelinearizeTuple.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/PrelinearizeTuple.java @@ -22,7 +22,7 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.Operands; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Print.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Print.java index 50fb5aae36c..e1fe600afe7 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Print.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Print.java @@ -23,6 +23,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TString; /** * Prints a string scalar. @@ -68,7 +69,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of Print */ - public static Print create(Scope scope, Operand input, Options... options) { + public static Print create(Scope scope, Operand input, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("PrintV2", scope.makeOpName("Print")); opBuilder.addInput(input.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/PrivateThreadPoolDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/PrivateThreadPoolDataset.java index fce679d83e1..915815dc5d6 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/PrivateThreadPoolDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/PrivateThreadPoolDataset.java @@ -23,9 +23,10 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TInt64; /** * Creates a dataset that uses a custom thread pool to compute `input_dataset`. @@ -42,14 +43,14 @@ public final class PrivateThreadPoolDataset extends PrimitiveOp implements Opera * @param outputShapes * @return a new instance of PrivateThreadPoolDataset */ - public static PrivateThreadPoolDataset create(Scope scope, Operand inputDataset, Operand numThreads, List> outputTypes, List outputShapes) { + public static PrivateThreadPoolDataset create(Scope scope, Operand inputDataset, Operand numThreads, List> outputTypes, List outputShapes) { OperationBuilder opBuilder = scope.env().opBuilder("PrivateThreadPoolDataset", scope.makeOpName("PrivateThreadPoolDataset")); opBuilder.addInput(inputDataset.asOutput()); opBuilder.addInput(numThreads.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); DataType[] outputTypesArray = new DataType[outputTypes.size()]; for (int i = 0; i < outputTypesArray.length; ++i) { - outputTypesArray[i] = DataType.fromClass(outputTypes.get(i)); + outputTypesArray[i] = outputTypes.get(i); } opBuilder.setAttr("output_types", outputTypesArray); Shape[] outputShapesArray = new Shape[outputShapes.size()]; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Prod.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Prod.java index e3051043a2c..09c95882f47 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Prod.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Prod.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Computes the product of elements across dimensions of a tensor. @@ -67,7 +68,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of Prod */ - public static Prod create(Scope scope, Operand input, Operand axis, Options... options) { + public static Prod create(Scope scope, Operand input, Operand axis, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("Prod", scope.makeOpName("Prod")); opBuilder.addInput(input.asOutput()); opBuilder.addInput(axis.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/QuantizedConcat.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/QuantizedConcat.java index 1b3b2217dfb..a40ca29a9da 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/QuantizedConcat.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/QuantizedConcat.java @@ -25,6 +25,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TFloat; +import org.tensorflow.types.TInt32; /** * Concatenates quantized tensors along one dimension. @@ -46,7 +48,7 @@ public final class QuantizedConcat extends PrimitiveOp { * @param inputMaxes The maximum scalar values for each of the input tensors. * @return a new instance of QuantizedConcat */ - public static QuantizedConcat create(Scope scope, Operand concatDim, Iterable> values, Iterable> inputMins, Iterable> inputMaxes) { + public static QuantizedConcat create(Scope scope, Operand concatDim, Iterable> values, Iterable> inputMins, Iterable> inputMaxes) { OperationBuilder opBuilder = scope.env().opBuilder("QuantizedConcat", scope.makeOpName("QuantizedConcat")); opBuilder.addInput(concatDim.asOutput()); opBuilder.addInputList(Operands.asOutputs(values)); @@ -68,20 +70,20 @@ public Output output() { /** * The float value that the minimum quantized output value represents. */ - public Output outputMin() { + public Output outputMin() { return outputMin; } /** * The float value that the maximum quantized output value represents. */ - public Output outputMax() { + public Output outputMax() { return outputMax; } private Output output; - private Output outputMin; - private Output outputMax; + private Output outputMin; + private Output outputMax; private QuantizedConcat(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/QuantizedConcatV2.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/QuantizedConcatV2.java index f96ca92943e..7abb28ceb18 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/QuantizedConcatV2.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/QuantizedConcatV2.java @@ -25,6 +25,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TFloat; +import org.tensorflow.types.family.TNumber; /** * @param data type for {@code output()} output @@ -42,7 +44,7 @@ public final class QuantizedConcatV2 extends PrimitiveOp { * @param inputMaxes * @return a new instance of QuantizedConcatV2 */ - public static QuantizedConcatV2 create(Scope scope, Iterable> values, Operand axis, Iterable> inputMins, Iterable> inputMaxes) { + public static QuantizedConcatV2 create(Scope scope, Iterable> values, Operand axis, Iterable> inputMins, Iterable> inputMaxes) { OperationBuilder opBuilder = scope.env().opBuilder("QuantizedConcatV2", scope.makeOpName("QuantizedConcatV2")); opBuilder.addInputList(Operands.asOutputs(values)); opBuilder.addInput(axis.asOutput()); @@ -60,19 +62,19 @@ public Output output() { /** */ - public Output outputMin() { + public Output outputMin() { return outputMin; } /** */ - public Output outputMax() { + public Output outputMax() { return outputMax; } private Output output; - private Output outputMin; - private Output outputMax; + private Output outputMin; + private Output outputMax; private QuantizedConcatV2(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/QuantizedConv2DAndRelu.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/QuantizedConv2DAndRelu.java index 9edd60a2ea4..ce67e95cfa9 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/QuantizedConv2DAndRelu.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/QuantizedConv2DAndRelu.java @@ -25,6 +25,7 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TFloat; /** * @param data type for {@code output()} output @@ -75,7 +76,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of QuantizedConv2DAndRelu */ - public static QuantizedConv2DAndRelu create(Scope scope, Operand input, Operand filter, Operand minInput, Operand maxInput, Operand minFilter, Operand maxFilter, Class outType, List strides, String padding, Options... options) { + public static QuantizedConv2DAndRelu create(Scope scope, Operand input, Operand filter, Operand minInput, Operand maxInput, Operand minFilter, Operand maxFilter, DataType outType, List strides, String padding, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("QuantizedConv2DAndRelu", scope.makeOpName("QuantizedConv2DAndRelu")); opBuilder.addInput(input.asOutput()); opBuilder.addInput(filter.asOutput()); @@ -84,7 +85,7 @@ public static QuantizedConv2DAndRelu create(Scope scope, Operand opBuilder.addInput(minFilter.asOutput()); opBuilder.addInput(maxFilter.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); - opBuilder.setAttr("out_type", DataType.fromClass(outType)); + opBuilder.setAttr("out_type", outType); long[] stridesArray = new long[strides.size()]; for (int i = 0; i < stridesArray.length; ++i) { stridesArray[i] = strides.get(i); @@ -134,19 +135,19 @@ public Output output() { /** */ - public Output minOutput() { + public Output minOutput() { return minOutput; } /** */ - public Output maxOutput() { + public Output maxOutput() { return maxOutput; } private Output output; - private Output minOutput; - private Output maxOutput; + private Output minOutput; + private Output maxOutput; private QuantizedConv2DAndRelu(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/QuantizedConv2DAndReluAndRequantize.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/QuantizedConv2DAndReluAndRequantize.java index 7fc5911a5b4..671877c9885 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/QuantizedConv2DAndReluAndRequantize.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/QuantizedConv2DAndReluAndRequantize.java @@ -25,6 +25,7 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TFloat; /** * @param data type for {@code output()} output @@ -77,7 +78,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of QuantizedConv2DAndReluAndRequantize */ - public static QuantizedConv2DAndReluAndRequantize create(Scope scope, Operand input, Operand filter, Operand minInput, Operand maxInput, Operand minFilter, Operand maxFilter, Operand minFreezedOutput, Operand maxFreezedOutput, Class outType, List strides, String padding, Options... options) { + public static QuantizedConv2DAndReluAndRequantize create(Scope scope, Operand input, Operand filter, Operand minInput, Operand maxInput, Operand minFilter, Operand maxFilter, Operand minFreezedOutput, Operand maxFreezedOutput, DataType outType, List strides, String padding, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("QuantizedConv2DAndReluAndRequantize", scope.makeOpName("QuantizedConv2DAndReluAndRequantize")); opBuilder.addInput(input.asOutput()); opBuilder.addInput(filter.asOutput()); @@ -88,7 +89,7 @@ public static QuantizedConv2DAndReluAndRequantize create(Scope scop opBuilder.addInput(minFreezedOutput.asOutput()); opBuilder.addInput(maxFreezedOutput.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); - opBuilder.setAttr("out_type", DataType.fromClass(outType)); + opBuilder.setAttr("out_type", outType); long[] stridesArray = new long[strides.size()]; for (int i = 0; i < stridesArray.length; ++i) { stridesArray[i] = strides.get(i); @@ -138,19 +139,19 @@ public Output output() { /** */ - public Output minOutput() { + public Output minOutput() { return minOutput; } /** */ - public Output maxOutput() { + public Output maxOutput() { return maxOutput; } private Output output; - private Output minOutput; - private Output maxOutput; + private Output minOutput; + private Output maxOutput; private QuantizedConv2DAndReluAndRequantize(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/QuantizedConv2DAndRequantize.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/QuantizedConv2DAndRequantize.java index 2cc2367cfb2..5135c91cacc 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/QuantizedConv2DAndRequantize.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/QuantizedConv2DAndRequantize.java @@ -25,6 +25,7 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TFloat; /** * @param data type for {@code output()} output @@ -77,7 +78,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of QuantizedConv2DAndRequantize */ - public static QuantizedConv2DAndRequantize create(Scope scope, Operand input, Operand filter, Operand minInput, Operand maxInput, Operand minFilter, Operand maxFilter, Operand minFreezedOutput, Operand maxFreezedOutput, Class outType, List strides, String padding, Options... options) { + public static QuantizedConv2DAndRequantize create(Scope scope, Operand input, Operand filter, Operand minInput, Operand maxInput, Operand minFilter, Operand maxFilter, Operand minFreezedOutput, Operand maxFreezedOutput, DataType outType, List strides, String padding, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("QuantizedConv2DAndRequantize", scope.makeOpName("QuantizedConv2DAndRequantize")); opBuilder.addInput(input.asOutput()); opBuilder.addInput(filter.asOutput()); @@ -88,7 +89,7 @@ public static QuantizedConv2DAndRequantize create(Scope scope, Oper opBuilder.addInput(minFreezedOutput.asOutput()); opBuilder.addInput(maxFreezedOutput.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); - opBuilder.setAttr("out_type", DataType.fromClass(outType)); + opBuilder.setAttr("out_type", outType); long[] stridesArray = new long[strides.size()]; for (int i = 0; i < stridesArray.length; ++i) { stridesArray[i] = strides.get(i); @@ -138,19 +139,19 @@ public Output output() { /** */ - public Output minOutput() { + public Output minOutput() { return minOutput; } /** */ - public Output maxOutput() { + public Output maxOutput() { return maxOutput; } private Output output; - private Output minOutput; - private Output maxOutput; + private Output minOutput; + private Output maxOutput; private QuantizedConv2DAndRequantize(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/QuantizedConv2DPerChannel.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/QuantizedConv2DPerChannel.java index 476a1edc0ac..07ce16373f4 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/QuantizedConv2DPerChannel.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/QuantizedConv2DPerChannel.java @@ -25,6 +25,7 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TFloat; /** * Computes QuantizedConv2D per channel. @@ -68,7 +69,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of QuantizedConv2DPerChannel */ - public static QuantizedConv2DPerChannel create(Scope scope, Operand input, Operand filter, Operand minInput, Operand maxInput, Operand minFilter, Operand maxFilter, Class outType, List strides, String padding, Options... options) { + public static QuantizedConv2DPerChannel create(Scope scope, Operand input, Operand filter, Operand minInput, Operand maxInput, Operand minFilter, Operand maxFilter, DataType outType, List strides, String padding, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("QuantizedConv2DPerChannel", scope.makeOpName("QuantizedConv2DPerChannel")); opBuilder.addInput(input.asOutput()); opBuilder.addInput(filter.asOutput()); @@ -77,7 +78,7 @@ public static QuantizedConv2DPerChannel create(Scope scope, Operand opBuilder.addInput(minFilter.asOutput()); opBuilder.addInput(maxFilter.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); - opBuilder.setAttr("out_type", DataType.fromClass(outType)); + opBuilder.setAttr("out_type", outType); long[] stridesArray = new long[strides.size()]; for (int i = 0; i < stridesArray.length; ++i) { stridesArray[i] = strides.get(i); @@ -115,20 +116,20 @@ public Output output() { /** * The minimum value of the final output tensor. */ - public Output minOutput() { + public Output minOutput() { return minOutput; } /** * The maximum value of the final output tensor. */ - public Output maxOutput() { + public Output maxOutput() { return maxOutput; } private Output output; - private Output minOutput; - private Output maxOutput; + private Output minOutput; + private Output maxOutput; private QuantizedConv2DPerChannel(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/QuantizedConv2DWithBias.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/QuantizedConv2DWithBias.java index 1f668d2ee70..14c5e0f3208 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/QuantizedConv2DWithBias.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/QuantizedConv2DWithBias.java @@ -25,6 +25,7 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TFloat; /** * @param data type for {@code output()} output @@ -76,7 +77,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of QuantizedConv2DWithBias */ - public static QuantizedConv2DWithBias create(Scope scope, Operand input, Operand filter, Operand bias, Operand minInput, Operand maxInput, Operand minFilter, Operand maxFilter, Class outType, List strides, String padding, Options... options) { + public static QuantizedConv2DWithBias create(Scope scope, Operand input, Operand filter, Operand bias, Operand minInput, Operand maxInput, Operand minFilter, Operand maxFilter, DataType outType, List strides, String padding, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("QuantizedConv2DWithBias", scope.makeOpName("QuantizedConv2DWithBias")); opBuilder.addInput(input.asOutput()); opBuilder.addInput(filter.asOutput()); @@ -86,7 +87,7 @@ public static QuantizedConv2DWithBias create(Scope scope, Operand output() { /** */ - public Output minOutput() { + public Output minOutput() { return minOutput; } /** */ - public Output maxOutput() { + public Output maxOutput() { return maxOutput; } private Output output; - private Output minOutput; - private Output maxOutput; + private Output minOutput; + private Output maxOutput; private QuantizedConv2DWithBias(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/QuantizedConv2DWithBiasAndRelu.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/QuantizedConv2DWithBiasAndRelu.java index 10b1f56fdfa..8c3a14facd8 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/QuantizedConv2DWithBiasAndRelu.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/QuantizedConv2DWithBiasAndRelu.java @@ -25,6 +25,7 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TFloat; /** * @param data type for {@code output()} output @@ -76,7 +77,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of QuantizedConv2DWithBiasAndRelu */ - public static QuantizedConv2DWithBiasAndRelu create(Scope scope, Operand input, Operand filter, Operand bias, Operand minInput, Operand maxInput, Operand minFilter, Operand maxFilter, Class outType, List strides, String padding, Options... options) { + public static QuantizedConv2DWithBiasAndRelu create(Scope scope, Operand input, Operand filter, Operand bias, Operand minInput, Operand maxInput, Operand minFilter, Operand maxFilter, DataType outType, List strides, String padding, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("QuantizedConv2DWithBiasAndRelu", scope.makeOpName("QuantizedConv2DWithBiasAndRelu")); opBuilder.addInput(input.asOutput()); opBuilder.addInput(filter.asOutput()); @@ -86,7 +87,7 @@ public static QuantizedConv2DWithBiasAndRelu create(Scope scope, Op opBuilder.addInput(minFilter.asOutput()); opBuilder.addInput(maxFilter.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); - opBuilder.setAttr("out_type", DataType.fromClass(outType)); + opBuilder.setAttr("out_type", outType); long[] stridesArray = new long[strides.size()]; for (int i = 0; i < stridesArray.length; ++i) { stridesArray[i] = strides.get(i); @@ -136,19 +137,19 @@ public Output output() { /** */ - public Output minOutput() { + public Output minOutput() { return minOutput; } /** */ - public Output maxOutput() { + public Output maxOutput() { return maxOutput; } private Output output; - private Output minOutput; - private Output maxOutput; + private Output minOutput; + private Output maxOutput; private QuantizedConv2DWithBiasAndRelu(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/QuantizedConv2DWithBiasAndReluAndRequantize.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/QuantizedConv2DWithBiasAndReluAndRequantize.java index c8bbdc3ecb1..711f92329e6 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/QuantizedConv2DWithBiasAndReluAndRequantize.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/QuantizedConv2DWithBiasAndReluAndRequantize.java @@ -25,6 +25,7 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TFloat; /** * @param data type for {@code output()} output @@ -78,7 +79,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of QuantizedConv2DWithBiasAndReluAndRequantize */ - public static QuantizedConv2DWithBiasAndReluAndRequantize create(Scope scope, Operand input, Operand filter, Operand bias, Operand minInput, Operand maxInput, Operand minFilter, Operand maxFilter, Operand minFreezedOutput, Operand maxFreezedOutput, Class outType, List strides, String padding, Options... options) { + public static QuantizedConv2DWithBiasAndReluAndRequantize create(Scope scope, Operand input, Operand filter, Operand bias, Operand minInput, Operand maxInput, Operand minFilter, Operand maxFilter, Operand minFreezedOutput, Operand maxFreezedOutput, DataType outType, List strides, String padding, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("QuantizedConv2DWithBiasAndReluAndRequantize", scope.makeOpName("QuantizedConv2DWithBiasAndReluAndRequantize")); opBuilder.addInput(input.asOutput()); opBuilder.addInput(filter.asOutput()); @@ -90,7 +91,7 @@ public static QuantizedConv2DWithBiasAndReluAndRequantize create opBuilder.addInput(minFreezedOutput.asOutput()); opBuilder.addInput(maxFreezedOutput.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); - opBuilder.setAttr("out_type", DataType.fromClass(outType)); + opBuilder.setAttr("out_type", outType); long[] stridesArray = new long[strides.size()]; for (int i = 0; i < stridesArray.length; ++i) { stridesArray[i] = strides.get(i); @@ -140,19 +141,19 @@ public Output output() { /** */ - public Output minOutput() { + public Output minOutput() { return minOutput; } /** */ - public Output maxOutput() { + public Output maxOutput() { return maxOutput; } private Output output; - private Output minOutput; - private Output maxOutput; + private Output minOutput; + private Output maxOutput; private QuantizedConv2DWithBiasAndReluAndRequantize(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/QuantizedConv2DWithBiasAndRequantize.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/QuantizedConv2DWithBiasAndRequantize.java index 17c11264934..537342d4cb2 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/QuantizedConv2DWithBiasAndRequantize.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/QuantizedConv2DWithBiasAndRequantize.java @@ -25,6 +25,7 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TFloat; /** * @param data type for {@code output()} output @@ -78,7 +79,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of QuantizedConv2DWithBiasAndRequantize */ - public static QuantizedConv2DWithBiasAndRequantize create(Scope scope, Operand input, Operand filter, Operand bias, Operand minInput, Operand maxInput, Operand minFilter, Operand maxFilter, Operand minFreezedOutput, Operand maxFreezedOutput, Class outType, List strides, String padding, Options... options) { + public static QuantizedConv2DWithBiasAndRequantize create(Scope scope, Operand input, Operand filter, Operand bias, Operand minInput, Operand maxInput, Operand minFilter, Operand maxFilter, Operand minFreezedOutput, Operand maxFreezedOutput, DataType outType, List strides, String padding, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("QuantizedConv2DWithBiasAndRequantize", scope.makeOpName("QuantizedConv2DWithBiasAndRequantize")); opBuilder.addInput(input.asOutput()); opBuilder.addInput(filter.asOutput()); @@ -90,7 +91,7 @@ public static QuantizedConv2DWithBiasAndRequantize create(Scope opBuilder.addInput(minFreezedOutput.asOutput()); opBuilder.addInput(maxFreezedOutput.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); - opBuilder.setAttr("out_type", DataType.fromClass(outType)); + opBuilder.setAttr("out_type", outType); long[] stridesArray = new long[strides.size()]; for (int i = 0; i < stridesArray.length; ++i) { stridesArray[i] = strides.get(i); @@ -140,19 +141,19 @@ public Output output() { /** */ - public Output minOutput() { + public Output minOutput() { return minOutput; } /** */ - public Output maxOutput() { + public Output maxOutput() { return maxOutput; } private Output output; - private Output minOutput; - private Output maxOutput; + private Output minOutput; + private Output maxOutput; private QuantizedConv2DWithBiasAndRequantize(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/QuantizedConv2DWithBiasSignedSumAndReluAndRequantize.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/QuantizedConv2DWithBiasSignedSumAndReluAndRequantize.java index 818d6f539b0..4d97d21e02c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/QuantizedConv2DWithBiasSignedSumAndReluAndRequantize.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/QuantizedConv2DWithBiasSignedSumAndReluAndRequantize.java @@ -25,6 +25,7 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TFloat; /** * @param data type for {@code output()} output @@ -81,7 +82,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of QuantizedConv2DWithBiasSignedSumAndReluAndRequantize */ - public static QuantizedConv2DWithBiasSignedSumAndReluAndRequantize create(Scope scope, Operand input, Operand filter, Operand bias, Operand minInput, Operand maxInput, Operand minFilter, Operand maxFilter, Operand minFreezedOutput, Operand maxFreezedOutput, Operand summand, Operand minSummand, Operand maxSummand, Class outType, List strides, String padding, Options... options) { + public static QuantizedConv2DWithBiasSignedSumAndReluAndRequantize create(Scope scope, Operand input, Operand filter, Operand bias, Operand minInput, Operand maxInput, Operand minFilter, Operand maxFilter, Operand minFreezedOutput, Operand maxFreezedOutput, Operand summand, Operand minSummand, Operand maxSummand, DataType outType, List strides, String padding, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("QuantizedConv2DWithBiasSignedSumAndReluAndRequantize", scope.makeOpName("QuantizedConv2DWithBiasSignedSumAndReluAndRequantize")); opBuilder.addInput(input.asOutput()); opBuilder.addInput(filter.asOutput()); @@ -96,7 +97,7 @@ public static QuantizedConv2DWithBiasSignedSumAndReluAndRequanti opBuilder.addInput(minSummand.asOutput()); opBuilder.addInput(maxSummand.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); - opBuilder.setAttr("out_type", DataType.fromClass(outType)); + opBuilder.setAttr("out_type", outType); long[] stridesArray = new long[strides.size()]; for (int i = 0; i < stridesArray.length; ++i) { stridesArray[i] = strides.get(i); @@ -146,19 +147,19 @@ public Output output() { /** */ - public Output minOutput() { + public Output minOutput() { return minOutput; } /** */ - public Output maxOutput() { + public Output maxOutput() { return maxOutput; } private Output output; - private Output minOutput; - private Output maxOutput; + private Output minOutput; + private Output maxOutput; private QuantizedConv2DWithBiasSignedSumAndReluAndRequantize(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/QuantizedConv2DWithBiasSumAndRelu.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/QuantizedConv2DWithBiasSumAndRelu.java index f9434882938..48f8ebd03cb 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/QuantizedConv2DWithBiasSumAndRelu.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/QuantizedConv2DWithBiasSumAndRelu.java @@ -25,6 +25,7 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TFloat; /** * @param data type for {@code output()} output @@ -77,7 +78,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of QuantizedConv2DWithBiasSumAndRelu */ - public static QuantizedConv2DWithBiasSumAndRelu create(Scope scope, Operand input, Operand filter, Operand bias, Operand minInput, Operand maxInput, Operand minFilter, Operand maxFilter, Operand summand, Class outType, List strides, String padding, Options... options) { + public static QuantizedConv2DWithBiasSumAndRelu create(Scope scope, Operand input, Operand filter, Operand bias, Operand minInput, Operand maxInput, Operand minFilter, Operand maxFilter, Operand summand, DataType outType, List strides, String padding, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("QuantizedConv2DWithBiasSumAndRelu", scope.makeOpName("QuantizedConv2DWithBiasSumAndRelu")); opBuilder.addInput(input.asOutput()); opBuilder.addInput(filter.asOutput()); @@ -88,7 +89,7 @@ public static QuantizedConv2DWithBiasSumAndRelu create(Scope scope, opBuilder.addInput(maxFilter.asOutput()); opBuilder.addInput(summand.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); - opBuilder.setAttr("out_type", DataType.fromClass(outType)); + opBuilder.setAttr("out_type", outType); long[] stridesArray = new long[strides.size()]; for (int i = 0; i < stridesArray.length; ++i) { stridesArray[i] = strides.get(i); @@ -138,19 +139,19 @@ public Output output() { /** */ - public Output minOutput() { + public Output minOutput() { return minOutput; } /** */ - public Output maxOutput() { + public Output maxOutput() { return maxOutput; } private Output output; - private Output minOutput; - private Output maxOutput; + private Output minOutput; + private Output maxOutput; private QuantizedConv2DWithBiasSumAndRelu(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/QuantizedConv2DWithBiasSumAndReluAndRequantize.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/QuantizedConv2DWithBiasSumAndReluAndRequantize.java index abbd0f2742d..5c4d6c7f820 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/QuantizedConv2DWithBiasSumAndReluAndRequantize.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/QuantizedConv2DWithBiasSumAndReluAndRequantize.java @@ -25,6 +25,7 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TFloat; /** * @param data type for {@code output()} output @@ -81,7 +82,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of QuantizedConv2DWithBiasSumAndReluAndRequantize */ - public static QuantizedConv2DWithBiasSumAndReluAndRequantize create(Scope scope, Operand input, Operand filter, Operand bias, Operand minInput, Operand maxInput, Operand minFilter, Operand maxFilter, Operand minFreezedOutput, Operand maxFreezedOutput, Operand summand, Operand minSummand, Operand maxSummand, Class outType, List strides, String padding, Options... options) { + public static QuantizedConv2DWithBiasSumAndReluAndRequantize create(Scope scope, Operand input, Operand filter, Operand bias, Operand minInput, Operand maxInput, Operand minFilter, Operand maxFilter, Operand minFreezedOutput, Operand maxFreezedOutput, Operand summand, Operand minSummand, Operand maxSummand, DataType outType, List strides, String padding, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("QuantizedConv2DWithBiasSumAndReluAndRequantize", scope.makeOpName("QuantizedConv2DWithBiasSumAndReluAndRequantize")); opBuilder.addInput(input.asOutput()); opBuilder.addInput(filter.asOutput()); @@ -96,7 +97,7 @@ public static QuantizedConv2DWithBiasSumAndReluAndRequantize opBuilder.addInput(minSummand.asOutput()); opBuilder.addInput(maxSummand.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); - opBuilder.setAttr("out_type", DataType.fromClass(outType)); + opBuilder.setAttr("out_type", outType); long[] stridesArray = new long[strides.size()]; for (int i = 0; i < stridesArray.length; ++i) { stridesArray[i] = strides.get(i); @@ -146,19 +147,19 @@ public Output output() { /** */ - public Output minOutput() { + public Output minOutput() { return minOutput; } /** */ - public Output maxOutput() { + public Output maxOutput() { return maxOutput; } private Output output; - private Output minOutput; - private Output maxOutput; + private Output minOutput; + private Output maxOutput; private QuantizedConv2DWithBiasSumAndReluAndRequantize(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/QuantizedDepthwiseConv2D.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/QuantizedDepthwiseConv2D.java index f578ea30f5a..71d3dde6137 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/QuantizedDepthwiseConv2D.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/QuantizedDepthwiseConv2D.java @@ -25,6 +25,7 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TFloat; /** * Computes quantized depthwise Conv2D. @@ -68,7 +69,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of QuantizedDepthwiseConv2D */ - public static QuantizedDepthwiseConv2D create(Scope scope, Operand input, Operand filter, Operand minInput, Operand maxInput, Operand minFilter, Operand maxFilter, Class outType, List strides, String padding, Options... options) { + public static QuantizedDepthwiseConv2D create(Scope scope, Operand input, Operand filter, Operand minInput, Operand maxInput, Operand minFilter, Operand maxFilter, DataType outType, List strides, String padding, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("QuantizedDepthwiseConv2D", scope.makeOpName("QuantizedDepthwiseConv2D")); opBuilder.addInput(input.asOutput()); opBuilder.addInput(filter.asOutput()); @@ -77,7 +78,7 @@ public static QuantizedDepthwiseConv2D create(Scope scope, Operand< opBuilder.addInput(minFilter.asOutput()); opBuilder.addInput(maxFilter.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); - opBuilder.setAttr("out_type", DataType.fromClass(outType)); + opBuilder.setAttr("out_type", outType); long[] stridesArray = new long[strides.size()]; for (int i = 0; i < stridesArray.length; ++i) { stridesArray[i] = strides.get(i); @@ -115,20 +116,20 @@ public Output output() { /** * The float value that the minimum quantized output value represents. */ - public Output minOutput() { + public Output minOutput() { return minOutput; } /** * The float value that the maximum quantized output value represents. */ - public Output maxOutput() { + public Output maxOutput() { return maxOutput; } private Output output; - private Output minOutput; - private Output maxOutput; + private Output minOutput; + private Output maxOutput; private QuantizedDepthwiseConv2D(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/QuantizedDepthwiseConv2DWithBias.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/QuantizedDepthwiseConv2DWithBias.java index 7ef96750fbd..3e6fd851ca3 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/QuantizedDepthwiseConv2DWithBias.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/QuantizedDepthwiseConv2DWithBias.java @@ -25,6 +25,7 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TFloat; /** * Computes quantized depthwise Conv2D with Bias. @@ -69,7 +70,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of QuantizedDepthwiseConv2DWithBias */ - public static QuantizedDepthwiseConv2DWithBias create(Scope scope, Operand input, Operand filter, Operand bias, Operand minInput, Operand maxInput, Operand minFilter, Operand maxFilter, Class outType, List strides, String padding, Options... options) { + public static QuantizedDepthwiseConv2DWithBias create(Scope scope, Operand input, Operand filter, Operand bias, Operand minInput, Operand maxInput, Operand minFilter, Operand maxFilter, DataType outType, List strides, String padding, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("QuantizedDepthwiseConv2DWithBias", scope.makeOpName("QuantizedDepthwiseConv2DWithBias")); opBuilder.addInput(input.asOutput()); opBuilder.addInput(filter.asOutput()); @@ -79,7 +80,7 @@ public static QuantizedDepthwiseConv2DWithBias create(Scope scope, opBuilder.addInput(minFilter.asOutput()); opBuilder.addInput(maxFilter.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); - opBuilder.setAttr("out_type", DataType.fromClass(outType)); + opBuilder.setAttr("out_type", outType); long[] stridesArray = new long[strides.size()]; for (int i = 0; i < stridesArray.length; ++i) { stridesArray[i] = strides.get(i); @@ -117,20 +118,20 @@ public Output output() { /** * The float value that the minimum quantized output value represents. */ - public Output minOutput() { + public Output minOutput() { return minOutput; } /** * The float value that the maximum quantized output value represents. */ - public Output maxOutput() { + public Output maxOutput() { return maxOutput; } private Output output; - private Output minOutput; - private Output maxOutput; + private Output minOutput; + private Output maxOutput; private QuantizedDepthwiseConv2DWithBias(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/QuantizedDepthwiseConv2DWithBiasAndRelu.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/QuantizedDepthwiseConv2DWithBiasAndRelu.java index 8609f9b0a6c..8a76bbe49f2 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/QuantizedDepthwiseConv2DWithBiasAndRelu.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/QuantizedDepthwiseConv2DWithBiasAndRelu.java @@ -25,6 +25,7 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TFloat; /** * Computes quantized depthwise Conv2D with Bias and Relu. @@ -69,7 +70,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of QuantizedDepthwiseConv2DWithBiasAndRelu */ - public static QuantizedDepthwiseConv2DWithBiasAndRelu create(Scope scope, Operand input, Operand filter, Operand bias, Operand minInput, Operand maxInput, Operand minFilter, Operand maxFilter, Class outType, List strides, String padding, Options... options) { + public static QuantizedDepthwiseConv2DWithBiasAndRelu create(Scope scope, Operand input, Operand filter, Operand bias, Operand minInput, Operand maxInput, Operand minFilter, Operand maxFilter, DataType outType, List strides, String padding, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("QuantizedDepthwiseConv2DWithBiasAndRelu", scope.makeOpName("QuantizedDepthwiseConv2DWithBiasAndRelu")); opBuilder.addInput(input.asOutput()); opBuilder.addInput(filter.asOutput()); @@ -79,7 +80,7 @@ public static QuantizedDepthwiseConv2DWithBiasAndRelu create(Scope opBuilder.addInput(minFilter.asOutput()); opBuilder.addInput(maxFilter.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); - opBuilder.setAttr("out_type", DataType.fromClass(outType)); + opBuilder.setAttr("out_type", outType); long[] stridesArray = new long[strides.size()]; for (int i = 0; i < stridesArray.length; ++i) { stridesArray[i] = strides.get(i); @@ -117,20 +118,20 @@ public Output output() { /** * The float value that the minimum quantized output value represents. */ - public Output minOutput() { + public Output minOutput() { return minOutput; } /** * The float value that the maximum quantized output value represents. */ - public Output maxOutput() { + public Output maxOutput() { return maxOutput; } private Output output; - private Output minOutput; - private Output maxOutput; + private Output minOutput; + private Output maxOutput; private QuantizedDepthwiseConv2DWithBiasAndRelu(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/QuantizedDepthwiseConv2DWithBiasAndReluAndRequantize.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/QuantizedDepthwiseConv2DWithBiasAndReluAndRequantize.java index ac46d0f12f1..b63a3710138 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/QuantizedDepthwiseConv2DWithBiasAndReluAndRequantize.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/QuantizedDepthwiseConv2DWithBiasAndReluAndRequantize.java @@ -25,6 +25,7 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TFloat; /** * Computes quantized depthwise Conv2D with Bias, Relu and Requantize. @@ -71,7 +72,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of QuantizedDepthwiseConv2DWithBiasAndReluAndRequantize */ - public static QuantizedDepthwiseConv2DWithBiasAndReluAndRequantize create(Scope scope, Operand input, Operand filter, Operand bias, Operand minInput, Operand maxInput, Operand minFilter, Operand maxFilter, Operand minFreezedOutput, Operand maxFreezedOutput, Class outType, List strides, String padding, Options... options) { + public static QuantizedDepthwiseConv2DWithBiasAndReluAndRequantize create(Scope scope, Operand input, Operand filter, Operand bias, Operand minInput, Operand maxInput, Operand minFilter, Operand maxFilter, Operand minFreezedOutput, Operand maxFreezedOutput, DataType outType, List strides, String padding, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("QuantizedDepthwiseConv2DWithBiasAndReluAndRequantize", scope.makeOpName("QuantizedDepthwiseConv2DWithBiasAndReluAndRequantize")); opBuilder.addInput(input.asOutput()); opBuilder.addInput(filter.asOutput()); @@ -83,7 +84,7 @@ public static QuantizedDepthwiseConv2DWithBiasAndReluAndRequantize< opBuilder.addInput(minFreezedOutput.asOutput()); opBuilder.addInput(maxFreezedOutput.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); - opBuilder.setAttr("out_type", DataType.fromClass(outType)); + opBuilder.setAttr("out_type", outType); long[] stridesArray = new long[strides.size()]; for (int i = 0; i < stridesArray.length; ++i) { stridesArray[i] = strides.get(i); @@ -121,20 +122,20 @@ public Output output() { /** * The float value that the minimum quantized output value represents. */ - public Output minOutput() { + public Output minOutput() { return minOutput; } /** * The float value that the maximum quantized output value represents. */ - public Output maxOutput() { + public Output maxOutput() { return maxOutput; } private Output output; - private Output minOutput; - private Output maxOutput; + private Output minOutput; + private Output maxOutput; private QuantizedDepthwiseConv2DWithBiasAndReluAndRequantize(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/QuantizedMatMulWithBias.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/QuantizedMatMulWithBias.java index ab2a5e9f58d..53955dcc101 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/QuantizedMatMulWithBias.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/QuantizedMatMulWithBias.java @@ -24,6 +24,7 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TFloat; /** * Performs a quantized matrix multiplication of `a` by the matrix `b` with bias @@ -92,7 +93,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of QuantizedMatMulWithBias */ - public static QuantizedMatMulWithBias create(Scope scope, Operand a, Operand b, Operand bias, Operand minA, Operand maxA, Operand minB, Operand maxB, Class Toutput, Options... options) { + public static QuantizedMatMulWithBias create(Scope scope, Operand a, Operand b, Operand bias, Operand minA, Operand maxA, Operand minB, Operand maxB, DataType Toutput, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("QuantizedMatMulWithBias", scope.makeOpName("QuantizedMatMulWithBias")); opBuilder.addInput(a.asOutput()); opBuilder.addInput(b.asOutput()); @@ -102,7 +103,7 @@ public static QuantizedMatMulWithBias create(Scope scope, Operan opBuilder.addInput(minB.asOutput()); opBuilder.addInput(maxB.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); - opBuilder.setAttr("Toutput", DataType.fromClass(Toutput)); + opBuilder.setAttr("Toutput", Toutput); if (options != null) { for (Options opts : options) { if (opts.transposeA != null) { @@ -149,20 +150,20 @@ public Output out() { /** * The float value that the lowest quantized output value represents. */ - public Output minOut() { + public Output minOut() { return minOut; } /** * The float value that the highest quantized output value represents. */ - public Output maxOut() { + public Output maxOut() { return maxOut; } private Output out; - private Output minOut; - private Output maxOut; + private Output minOut; + private Output maxOut; private QuantizedMatMulWithBias(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/QuantizedMatMulWithBiasAndRelu.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/QuantizedMatMulWithBiasAndRelu.java index ae3c8fc7782..269763490d7 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/QuantizedMatMulWithBiasAndRelu.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/QuantizedMatMulWithBiasAndRelu.java @@ -24,6 +24,7 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TFloat; /** * Perform a quantized matrix multiplication of `a` by the matrix `b` with bias @@ -93,7 +94,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of QuantizedMatMulWithBiasAndRelu */ - public static QuantizedMatMulWithBiasAndRelu create(Scope scope, Operand a, Operand b, Operand bias, Operand minA, Operand maxA, Operand minB, Operand maxB, Class Toutput, Options... options) { + public static QuantizedMatMulWithBiasAndRelu create(Scope scope, Operand a, Operand b, Operand bias, Operand minA, Operand maxA, Operand minB, Operand maxB, DataType Toutput, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("QuantizedMatMulWithBiasAndRelu", scope.makeOpName("QuantizedMatMulWithBiasAndRelu")); opBuilder.addInput(a.asOutput()); opBuilder.addInput(b.asOutput()); @@ -103,7 +104,7 @@ public static QuantizedMatMulWithBiasAndRelu create(Scope scope, Op opBuilder.addInput(minB.asOutput()); opBuilder.addInput(maxB.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); - opBuilder.setAttr("Toutput", DataType.fromClass(Toutput)); + opBuilder.setAttr("Toutput", Toutput); if (options != null) { for (Options opts : options) { if (opts.transposeA != null) { @@ -150,20 +151,20 @@ public Output out() { /** * The float value that the lowest quantized output value represents. */ - public Output minOut() { + public Output minOut() { return minOut; } /** * The float value that the highest quantized output value represents. */ - public Output maxOut() { + public Output maxOut() { return maxOut; } private Output out; - private Output minOut; - private Output maxOut; + private Output minOut; + private Output maxOut; private QuantizedMatMulWithBiasAndRelu(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/QuantizedMatMulWithBiasAndReluAndRequantize.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/QuantizedMatMulWithBiasAndReluAndRequantize.java index b279bf5212b..e01aaaa92b1 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/QuantizedMatMulWithBiasAndReluAndRequantize.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/QuantizedMatMulWithBiasAndReluAndRequantize.java @@ -24,6 +24,7 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TFloat; /** * Perform a quantized matrix multiplication of `a` by the matrix `b` with bias @@ -96,7 +97,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of QuantizedMatMulWithBiasAndReluAndRequantize */ - public static QuantizedMatMulWithBiasAndReluAndRequantize create(Scope scope, Operand a, Operand b, Operand bias, Operand minA, Operand maxA, Operand minB, Operand maxB, Operand minFreezedOutput, Operand maxFreezedOutput, Class Toutput, Options... options) { + public static QuantizedMatMulWithBiasAndReluAndRequantize create(Scope scope, Operand a, Operand b, Operand bias, Operand minA, Operand maxA, Operand minB, Operand maxB, Operand minFreezedOutput, Operand maxFreezedOutput, DataType Toutput, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("QuantizedMatMulWithBiasAndReluAndRequantize", scope.makeOpName("QuantizedMatMulWithBiasAndReluAndRequantize")); opBuilder.addInput(a.asOutput()); opBuilder.addInput(b.asOutput()); @@ -108,7 +109,7 @@ public static QuantizedMatMulWithBiasAndReluAndRequantize create opBuilder.addInput(minFreezedOutput.asOutput()); opBuilder.addInput(maxFreezedOutput.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); - opBuilder.setAttr("Toutput", DataType.fromClass(Toutput)); + opBuilder.setAttr("Toutput", Toutput); if (options != null) { for (Options opts : options) { if (opts.transposeA != null) { @@ -155,20 +156,20 @@ public Output out() { /** * The float value that the lowest quantized output value represents. */ - public Output minOut() { + public Output minOut() { return minOut; } /** * The float value that the highest quantized output value represents. */ - public Output maxOut() { + public Output maxOut() { return maxOut; } private Output out; - private Output minOut; - private Output maxOut; + private Output minOut; + private Output maxOut; private QuantizedMatMulWithBiasAndReluAndRequantize(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/QuantizedReshape.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/QuantizedReshape.java index 30690c85754..8cf12d9c978 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/QuantizedReshape.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/QuantizedReshape.java @@ -24,6 +24,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TFloat; +import org.tensorflow.types.family.TNumber; /** * Reshapes a quantized tensor as per the Reshape op. @@ -45,7 +47,7 @@ public final class QuantizedReshape extends PrimitiveOp { * @param inputMax The maximum value of the input. * @return a new instance of QuantizedReshape */ - public static QuantizedReshape create(Scope scope, Operand tensor, Operand shape, Operand inputMin, Operand inputMax) { + public static QuantizedReshape create(Scope scope, Operand tensor, Operand shape, Operand inputMin, Operand inputMax) { OperationBuilder opBuilder = scope.env().opBuilder("QuantizedReshape", scope.makeOpName("QuantizedReshape")); opBuilder.addInput(tensor.asOutput()); opBuilder.addInput(shape.asOutput()); @@ -64,20 +66,20 @@ public Output output() { /** * This value is copied from input_min. */ - public Output outputMin() { + public Output outputMin() { return outputMin; } /** * This value is copied from input_max. */ - public Output outputMax() { + public Output outputMax() { return outputMax; } private Output output; - private Output outputMin; - private Output outputMax; + private Output outputMin; + private Output outputMax; private QuantizedReshape(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RaggedGather.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RaggedGather.java index 67f9a822f07..de02bacb0c7 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RaggedGather.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RaggedGather.java @@ -26,6 +26,7 @@ import org.tensorflow.op.Operands; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.family.TNumber; /** * Gather ragged slices from `params` axis `0` according to `indices`. @@ -61,7 +62,7 @@ * @param data type for {@code outputNestedSplits()} output * @param data type for {@code outputDenseValues()} output */ -public final class RaggedGather extends PrimitiveOp { +public final class RaggedGather extends PrimitiveOp { /** * Factory method to create a class wrapping a new RaggedGather operation. @@ -79,7 +80,7 @@ public final class RaggedGather extends PrimitiveOp { * `indices.shape.ndims + params.ragged_rank - 1`. * @return a new instance of RaggedGather */ - public static RaggedGather create(Scope scope, Iterable> paramsNestedSplits, Operand paramsDenseValues, Operand indices, Long OUTPUTRAGGEDRANK) { + public static RaggedGather create(Scope scope, Iterable> paramsNestedSplits, Operand paramsDenseValues, Operand indices, Long OUTPUTRAGGEDRANK) { OperationBuilder opBuilder = scope.env().opBuilder("RaggedGather", scope.makeOpName("RaggedGather")); opBuilder.addInputList(Operands.asOutputs(paramsNestedSplits)); opBuilder.addInput(paramsDenseValues.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RaggedRange.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RaggedRange.java index dc892365e41..50da43448bf 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RaggedRange.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RaggedRange.java @@ -24,6 +24,8 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TInt64; +import org.tensorflow.types.family.TNumber; /** * Returns a `RaggedTensor` containing the specified sequences of numbers. @@ -48,7 +50,7 @@ * @param data type for {@code rtNestedSplits()} output * @param data type for {@code rtDenseValues()} output */ -public final class RaggedRange extends PrimitiveOp { +public final class RaggedRange extends PrimitiveOp { /** * Factory method to create a class wrapping a new RaggedRange operation. @@ -60,13 +62,13 @@ public final class RaggedRange extends Primi * @param Tsplits * @return a new instance of RaggedRange */ - public static RaggedRange create(Scope scope, Operand starts, Operand limits, Operand deltas, Class Tsplits) { + public static RaggedRange create(Scope scope, Operand starts, Operand limits, Operand deltas, DataType Tsplits) { OperationBuilder opBuilder = scope.env().opBuilder("RaggedRange", scope.makeOpName("RaggedRange")); opBuilder.addInput(starts.asOutput()); opBuilder.addInput(limits.asOutput()); opBuilder.addInput(deltas.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); - opBuilder.setAttr("Tsplits", DataType.fromClass(Tsplits)); + opBuilder.setAttr("Tsplits", Tsplits); return new RaggedRange(opBuilder.build()); } @@ -79,8 +81,8 @@ public static RaggedRange create(Scop * @param deltas The deltas of each range. * @return a new instance of RaggedRange */ - public static RaggedRange create(Scope scope, Operand starts, Operand limits, Operand deltas) { - return create(scope, starts, limits, deltas, Long.class); + public static RaggedRange create(Scope scope, Operand starts, Operand limits, Operand deltas) { + return create(scope, starts, limits, deltas, TInt64.DTYPE); } /** diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RaggedTensorFromVariant.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RaggedTensorFromVariant.java index 11872cfec53..946e240cfe8 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RaggedTensorFromVariant.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RaggedTensorFromVariant.java @@ -26,6 +26,7 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.family.TNumber; /** * Decodes a `variant` Tensor into a `RaggedTensor`. @@ -46,7 +47,7 @@ * @param data type for {@code outputNestedSplits()} output * @param data type for {@code outputDenseValues()} output */ -public final class RaggedTensorFromVariant extends PrimitiveOp { +public final class RaggedTensorFromVariant extends PrimitiveOp { /** * Factory method to create a class wrapping a new RaggedTensorFromVariant operation. @@ -61,14 +62,14 @@ public final class RaggedTensorFromVariant extends Primitiv * @param Tsplits * @return a new instance of RaggedTensorFromVariant */ - public static RaggedTensorFromVariant create(Scope scope, Operand encodedRagged, Long inputRaggedRank, Long outputRaggedRank, Class Tvalues, Class Tsplits) { + public static RaggedTensorFromVariant create(Scope scope, Operand encodedRagged, Long inputRaggedRank, Long outputRaggedRank, DataType Tvalues, DataType Tsplits) { OperationBuilder opBuilder = scope.env().opBuilder("RaggedTensorFromVariant", scope.makeOpName("RaggedTensorFromVariant")); opBuilder.addInput(encodedRagged.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); opBuilder.setAttr("input_ragged_rank", inputRaggedRank); opBuilder.setAttr("output_ragged_rank", outputRaggedRank); - opBuilder.setAttr("Tvalues", DataType.fromClass(Tvalues)); - opBuilder.setAttr("Tsplits", DataType.fromClass(Tsplits)); + opBuilder.setAttr("Tvalues", Tvalues); + opBuilder.setAttr("Tsplits", Tsplits); return new RaggedTensorFromVariant(opBuilder.build()); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RaggedTensorToSparse.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RaggedTensorToSparse.java index d537d03c812..98ef046b792 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RaggedTensorToSparse.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RaggedTensorToSparse.java @@ -24,6 +24,8 @@ import org.tensorflow.op.Operands; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TInt64; +import org.tensorflow.types.family.TNumber; /** * Converts a `RaggedTensor` into a `SparseTensor` with the same values. @@ -44,7 +46,7 @@ public final class RaggedTensorToSparse extends PrimitiveOp { * @param rtDenseValues The `flat_values` for the `RaggedTensor`. * @return a new instance of RaggedTensorToSparse */ - public static RaggedTensorToSparse create(Scope scope, Iterable> rtNestedSplits, Operand rtDenseValues) { + public static RaggedTensorToSparse create(Scope scope, Iterable> rtNestedSplits, Operand rtDenseValues) { OperationBuilder opBuilder = scope.env().opBuilder("RaggedTensorToSparse", scope.makeOpName("RaggedTensorToSparse")); opBuilder.addInputList(Operands.asOutputs(rtNestedSplits)); opBuilder.addInput(rtDenseValues.asOutput()); @@ -55,7 +57,7 @@ public static RaggedTensorToSparse create(Scope scope, /** * The indices for the `SparseTensor`. */ - public Output sparseIndices() { + public Output sparseIndices() { return sparseIndices; } @@ -69,13 +71,13 @@ public Output sparseValues() { /** * `sparse_dense_shape` is a tight bounding box of the input `RaggedTensor`. */ - public Output sparseDenseShape() { + public Output sparseDenseShape() { return sparseDenseShape; } - private Output sparseIndices; + private Output sparseIndices; private Output sparseValues; - private Output sparseDenseShape; + private Output sparseDenseShape; private RaggedTensorToSparse(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RaggedTensorToVariant.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RaggedTensorToVariant.java index 2abde17cfb8..d32bf9f2195 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RaggedTensorToVariant.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RaggedTensorToVariant.java @@ -24,6 +24,7 @@ import org.tensorflow.op.Operands; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.family.TNumber; /** * Encodes a `RaggedTensor` into a `variant` Tensor. @@ -53,7 +54,7 @@ public final class RaggedTensorToVariant extends PrimitiveOp implements Operand< * @param batchedInput A `bool` denoting whether the input is a batched `RaggedTensor`. * @return a new instance of RaggedTensorToVariant */ - public static RaggedTensorToVariant create(Scope scope, Iterable> rtNestedSplits, Operand rtDenseValues, Boolean batchedInput) { + public static RaggedTensorToVariant create(Scope scope, Iterable> rtNestedSplits, Operand rtDenseValues, Boolean batchedInput) { OperationBuilder opBuilder = scope.env().opBuilder("RaggedTensorToVariant", scope.makeOpName("RaggedTensorToVariant")); opBuilder.addInputList(Operands.asOutputs(rtNestedSplits)); opBuilder.addInput(rtDenseValues.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Range.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Range.java index 2c30b5449c3..a8042b801ca 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Range.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Range.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Creates a sequence of numbers. @@ -43,7 +44,7 @@ * @param data type for {@code output()} output */ @Operator -public final class Range extends PrimitiveOp implements Operand { +public final class Range extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new Range operation. @@ -54,7 +55,7 @@ public final class Range extends PrimitiveOp implements Operan * @param delta 0-D (scalar). Optional. Default is 1. Number that increments `start`. * @return a new instance of Range */ - public static Range create(Scope scope, Operand start, Operand limit, Operand delta) { + public static Range create(Scope scope, Operand start, Operand limit, Operand delta) { OperationBuilder opBuilder = scope.env().opBuilder("Range", scope.makeOpName("Range")); opBuilder.addInput(start.asOutput()); opBuilder.addInput(limit.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Rank.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Rank.java index 49d3ebc13fc..98e3b61798c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Rank.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Rank.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt32; /** * Returns the rank of a tensor. @@ -41,7 +42,7 @@ * of the tensor. Rank is also known as "order", "degree", or "ndims." */ @Operator -public final class Rank extends PrimitiveOp implements Operand { +public final class Rank extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new Rank operation. @@ -59,16 +60,16 @@ public static Rank create(Scope scope, Operand input) { /** */ - public Output output() { + public Output output() { return output; } @Override - public Output asOutput() { + public Output asOutput() { return output; } - private Output output; + private Output output; private Rank(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ReadVariableOp.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ReadVariableOp.java index 1a3370eda14..1e3065ae06c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ReadVariableOp.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ReadVariableOp.java @@ -49,11 +49,11 @@ public final class ReadVariableOp extends PrimitiveOp implements Operand { * @param dtype the dtype of the value. * @return a new instance of ReadVariableOp */ - public static ReadVariableOp create(Scope scope, Operand resource, Class dtype) { + public static ReadVariableOp create(Scope scope, Operand resource, DataType dtype) { OperationBuilder opBuilder = scope.env().opBuilder("ReadVariableOp", scope.makeOpName("ReadVariableOp")); opBuilder.addInput(resource.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); - opBuilder.setAttr("dtype", DataType.fromClass(dtype)); + opBuilder.setAttr("dtype", dtype); return new ReadVariableOp(opBuilder.build()); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RebatchDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RebatchDataset.java index afd9cdd3008..d728bd1913f 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RebatchDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RebatchDataset.java @@ -23,9 +23,10 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TInt64; /** * Creates a dataset that changes the batch size. @@ -67,14 +68,14 @@ private Options() { * @param options carries optional attributes values * @return a new instance of RebatchDataset */ - public static RebatchDataset create(Scope scope, Operand inputDataset, Operand numReplicas, List> outputTypes, List outputShapes, Options... options) { + public static RebatchDataset create(Scope scope, Operand inputDataset, Operand numReplicas, List> outputTypes, List outputShapes, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("RebatchDataset", scope.makeOpName("RebatchDataset")); opBuilder.addInput(inputDataset.asOutput()); opBuilder.addInput(numReplicas.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); DataType[] outputTypesArray = new DataType[outputTypes.size()]; for (int i = 0; i < outputTypesArray.length; ++i) { - outputTypesArray[i] = DataType.fromClass(outputTypes.get(i)); + outputTypesArray[i] = outputTypes.get(i); } opBuilder.setAttr("output_types", outputTypesArray); Shape[] outputShapesArray = new Shape[outputShapes.size()]; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RecvTPUEmbeddingActivations.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RecvTPUEmbeddingActivations.java index 88ca08f3eca..2a67a9700cf 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RecvTPUEmbeddingActivations.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RecvTPUEmbeddingActivations.java @@ -26,6 +26,7 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TFloat; /** * An op that receives embedding activations on the TPU. @@ -37,7 +38,7 @@ * one Tensor of activations per table specified in the model. There can be at * most one RecvTPUEmbeddingActivations op in the TPU graph. */ -public final class RecvTPUEmbeddingActivations extends PrimitiveOp implements Iterable> { +public final class RecvTPUEmbeddingActivations extends PrimitiveOp implements Iterable> { /** * Factory method to create a class wrapping a new RecvTPUEmbeddingActivations operation. @@ -60,24 +61,24 @@ public static RecvTPUEmbeddingActivations create(Scope scope, Long numOutputs, S * A TensorList of embedding activations containing one Tensor per * embedding table in the model. */ - public List> outputs() { + public List> outputs() { return outputs; } @Override @SuppressWarnings({"rawtypes", "unchecked"}) - public Iterator> iterator() { + public Iterator> iterator() { return (Iterator) outputs.iterator(); } - private List> outputs; + private List> outputs; @SuppressWarnings("unchecked") private RecvTPUEmbeddingActivations(Operation operation) { super(operation); int outputIdx = 0; int outputsLength = operation.outputListLength("outputs"); - outputs = Arrays.asList((Output[])operation.outputList(outputIdx, outputsLength)); + outputs = Arrays.asList((Output[])operation.outputList(outputIdx, outputsLength)); outputIdx += outputsLength; } } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ReduceAll.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ReduceAll.java index d4a76da4258..977b9cc6bb4 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ReduceAll.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ReduceAll.java @@ -24,6 +24,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TBool; +import org.tensorflow.types.family.TNumber; /** * Computes the "logical and" of elements across dimensions of a tensor. @@ -34,7 +36,7 @@ * retained with length 1. */ @Operator -public final class ReduceAll extends PrimitiveOp implements Operand { +public final class ReduceAll extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.core.ReduceAll} @@ -65,7 +67,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of ReduceAll */ - public static ReduceAll create(Scope scope, Operand input, Operand axis, Options... options) { + public static ReduceAll create(Scope scope, Operand input, Operand axis, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("All", scope.makeOpName("ReduceAll")); opBuilder.addInput(input.asOutput()); opBuilder.addInput(axis.asOutput()); @@ -90,16 +92,16 @@ public static Options keepDims(Boolean keepDims) { /** * The reduced tensor. */ - public Output output() { + public Output output() { return output; } @Override - public Output asOutput() { + public Output asOutput() { return output; } - private Output output; + private Output output; private ReduceAll(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ReduceAny.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ReduceAny.java index 4157226c067..5339e415442 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ReduceAny.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ReduceAny.java @@ -24,6 +24,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TBool; +import org.tensorflow.types.family.TNumber; /** * Computes the "logical or" of elements across dimensions of a tensor. @@ -34,7 +36,7 @@ * retained with length 1. */ @Operator -public final class ReduceAny extends PrimitiveOp implements Operand { +public final class ReduceAny extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.core.ReduceAny} @@ -65,7 +67,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of ReduceAny */ - public static ReduceAny create(Scope scope, Operand input, Operand axis, Options... options) { + public static ReduceAny create(Scope scope, Operand input, Operand axis, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("Any", scope.makeOpName("ReduceAny")); opBuilder.addInput(input.asOutput()); opBuilder.addInput(axis.asOutput()); @@ -90,16 +92,16 @@ public static Options keepDims(Boolean keepDims) { /** * The reduced tensor. */ - public Output output() { + public Output output() { return output; } @Override - public Output asOutput() { + public Output asOutput() { return output; } - private Output output; + private Output output; private ReduceAny(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ReduceMax.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ReduceMax.java index 95f3672a434..4cd379cd9f8 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ReduceMax.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ReduceMax.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Computes the maximum of elements across dimensions of a tensor. @@ -67,7 +68,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of ReduceMax */ - public static ReduceMax create(Scope scope, Operand input, Operand axis, Options... options) { + public static ReduceMax create(Scope scope, Operand input, Operand axis, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("Max", scope.makeOpName("ReduceMax")); opBuilder.addInput(input.asOutput()); opBuilder.addInput(axis.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ReduceMin.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ReduceMin.java index 81d2a4d913e..aa641fc0335 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ReduceMin.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ReduceMin.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Computes the minimum of elements across dimensions of a tensor. @@ -67,7 +68,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of ReduceMin */ - public static ReduceMin create(Scope scope, Operand input, Operand axis, Options... options) { + public static ReduceMin create(Scope scope, Operand input, Operand axis, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("Min", scope.makeOpName("ReduceMin")); opBuilder.addInput(input.asOutput()); opBuilder.addInput(axis.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ReduceProd.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ReduceProd.java index 981758183be..ba81e81e211 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ReduceProd.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ReduceProd.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Computes the product of elements across dimensions of a tensor. @@ -67,7 +68,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of ReduceProd */ - public static ReduceProd create(Scope scope, Operand input, Operand axis, Options... options) { + public static ReduceProd create(Scope scope, Operand input, Operand axis, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("Prod", scope.makeOpName("ReduceProd")); opBuilder.addInput(input.asOutput()); opBuilder.addInput(axis.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ReduceSum.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ReduceSum.java index 013432ca778..8f6b80a383a 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ReduceSum.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ReduceSum.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Computes the sum of elements across dimensions of a tensor. @@ -67,7 +68,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of ReduceSum */ - public static ReduceSum create(Scope scope, Operand input, Operand axis, Options... options) { + public static ReduceSum create(Scope scope, Operand input, Operand axis, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("Sum", scope.makeOpName("ReduceSum")); opBuilder.addInput(input.asOutput()); opBuilder.addInput(axis.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RefMerge.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RefMerge.java index 5a30ee939c1..5641a9c75bf 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RefMerge.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RefMerge.java @@ -24,6 +24,7 @@ import org.tensorflow.op.Operands; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TInt32; /** * Forwards the value of an available tensor from `inputs` to `output`. @@ -62,12 +63,12 @@ public Output output() { /** * The index of the chosen input tensor in `inputs`. */ - public Output valueIndex() { + public Output valueIndex() { return valueIndex; } private Output output; - private Output valueIndex; + private Output valueIndex; private RefMerge(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RefSelect.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RefSelect.java index 712b82fa40d..bb77b5f9028 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RefSelect.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RefSelect.java @@ -25,6 +25,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt32; /** * Forwards the `index`th element of `inputs` to `output`. @@ -42,7 +43,7 @@ public final class RefSelect extends PrimitiveOp implements Operand { * @param inputs A list of ref tensors, one of which will be forwarded to `output`. * @return a new instance of RefSelect */ - public static RefSelect create(Scope scope, Operand index, Iterable> inputs) { + public static RefSelect create(Scope scope, Operand index, Iterable> inputs) { OperationBuilder opBuilder = scope.env().opBuilder("RefSelect", scope.makeOpName("RefSelect")); opBuilder.addInput(index.asOutput()); opBuilder.addInputList(Operands.asOutputs(inputs)); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RefSwitch.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RefSwitch.java index 3017e9de59a..36bef644688 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RefSwitch.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RefSwitch.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TBool; /** * Forwards the ref tensor `data` to the output port determined by `pred`. @@ -46,7 +47,7 @@ public final class RefSwitch extends PrimitiveOp { * @param pred A scalar that specifies which output port will receive data. * @return a new instance of RefSwitch */ - public static RefSwitch create(Scope scope, Operand data, Operand pred) { + public static RefSwitch create(Scope scope, Operand data, Operand pred) { OperationBuilder opBuilder = scope.env().opBuilder("RefSwitch", scope.makeOpName("RefSwitch")); opBuilder.addInput(data.asOutput()); opBuilder.addInput(pred.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RemoteFusedGraphExecute.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RemoteFusedGraphExecute.java index a9593b1272a..9f03b1d58c8 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RemoteFusedGraphExecute.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RemoteFusedGraphExecute.java @@ -54,13 +54,13 @@ public final class RemoteFusedGraphExecute extends PrimitiveOp implements Iterab * of RemoteFusedGraphExecuteInfo which contains graph specifications. * @return a new instance of RemoteFusedGraphExecute */ - public static RemoteFusedGraphExecute create(Scope scope, Iterable> inputs, List> Toutputs, String serializedRemoteFusedGraphExecuteInfo) { + public static RemoteFusedGraphExecute create(Scope scope, Iterable> inputs, List> Toutputs, String serializedRemoteFusedGraphExecuteInfo) { OperationBuilder opBuilder = scope.env().opBuilder("RemoteFusedGraphExecute", scope.makeOpName("RemoteFusedGraphExecute")); opBuilder.addInputList(Operands.asOutputs(inputs)); opBuilder = scope.applyControlDependencies(opBuilder); DataType[] ToutputsArray = new DataType[Toutputs.size()]; for (int i = 0; i < ToutputsArray.length; ++i) { - ToutputsArray[i] = DataType.fromClass(Toutputs.get(i)); + ToutputsArray[i] = Toutputs.get(i); } opBuilder.setAttr("Toutputs", ToutputsArray); opBuilder.setAttr("serialized_remote_fused_graph_execute_info", serializedRemoteFusedGraphExecuteInfo); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RequantizationRangePerChannel.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RequantizationRangePerChannel.java index e2d507496de..79b76961c80 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RequantizationRangePerChannel.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RequantizationRangePerChannel.java @@ -23,6 +23,7 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TFloat; /** * Computes requantization range per channel. @@ -40,7 +41,7 @@ public final class RequantizationRangePerChannel extends PrimitiveOp { * Example: set this to 6 for Relu6. * @return a new instance of RequantizationRangePerChannel */ - public static RequantizationRangePerChannel create(Scope scope, Operand input, Operand inputMin, Operand inputMax, Float clipValueMax) { + public static RequantizationRangePerChannel create(Scope scope, Operand input, Operand inputMin, Operand inputMax, Float clipValueMax) { OperationBuilder opBuilder = scope.env().opBuilder("RequantizationRangePerChannel", scope.makeOpName("RequantizationRangePerChannel")); opBuilder.addInput(input.asOutput()); opBuilder.addInput(inputMin.asOutput()); @@ -53,19 +54,19 @@ public static RequantizationRangePerChannel create(Scope scope, Operand i /** * The minimum value of the final output tensor */ - public Output outputMin() { + public Output outputMin() { return outputMin; } /** * The maximum value of the final output tensor. */ - public Output outputMax() { + public Output outputMax() { return outputMax; } - private Output outputMin; - private Output outputMax; + private Output outputMin; + private Output outputMax; private RequantizationRangePerChannel(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RequantizePerChannel.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RequantizePerChannel.java index 67aed0b4cfb..586ca9b275e 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RequantizePerChannel.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RequantizePerChannel.java @@ -24,6 +24,7 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TFloat; /** * Requantizes input with min and max values known per channel. @@ -44,7 +45,7 @@ public final class RequantizePerChannel extends PrimitiveOp { * @param outType The quantized type of output tensor that needs to be converted. * @return a new instance of RequantizePerChannel */ - public static RequantizePerChannel create(Scope scope, Operand input, Operand inputMin, Operand inputMax, Operand requestedOutputMin, Operand requestedOutputMax, Class outType) { + public static RequantizePerChannel create(Scope scope, Operand input, Operand inputMin, Operand inputMax, Operand requestedOutputMin, Operand requestedOutputMax, DataType outType) { OperationBuilder opBuilder = scope.env().opBuilder("RequantizePerChannel", scope.makeOpName("RequantizePerChannel")); opBuilder.addInput(input.asOutput()); opBuilder.addInput(inputMin.asOutput()); @@ -52,7 +53,7 @@ public static RequantizePerChannel create(Scope scope, Operand inpu opBuilder.addInput(requestedOutputMin.asOutput()); opBuilder.addInput(requestedOutputMax.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); - opBuilder.setAttr("out_type", DataType.fromClass(outType)); + opBuilder.setAttr("out_type", outType); return new RequantizePerChannel(opBuilder.build()); } @@ -66,20 +67,20 @@ public Output output() { /** * The minimum value of the final output tensor */ - public Output outputMin() { + public Output outputMin() { return outputMin; } /** * The maximum value of the final output tensor. */ - public Output outputMax() { + public Output outputMax() { return outputMax; } private Output output; - private Output outputMin; - private Output outputMax; + private Output outputMin; + private Output outputMax; private RequantizePerChannel(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Reshape.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Reshape.java index 0fa6e78cdb0..2c6faa52d43 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Reshape.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Reshape.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Reshapes a tensor. @@ -98,7 +99,7 @@ public final class Reshape extends PrimitiveOp implements Operand { * @param shape Defines the shape of the output tensor. * @return a new instance of Reshape */ - public static Reshape create(Scope scope, Operand tensor, Operand shape) { + public static Reshape create(Scope scope, Operand tensor, Operand shape) { OperationBuilder opBuilder = scope.env().opBuilder("Reshape", scope.makeOpName("Reshape")); opBuilder.addInput(tensor.asOutput()); opBuilder.addInput(shape.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceAccumulatorApplyGradient.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceAccumulatorApplyGradient.java index ef5e8796149..5307c7b669d 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceAccumulatorApplyGradient.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceAccumulatorApplyGradient.java @@ -22,6 +22,7 @@ import org.tensorflow.OperationBuilder; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TInt64; /** * Applies a gradient to a given accumulator. @@ -39,7 +40,7 @@ public final class ResourceAccumulatorApplyGradient extends PrimitiveOp { * @param gradient A tensor of the gradient to be accumulated. * @return a new instance of ResourceAccumulatorApplyGradient */ - public static ResourceAccumulatorApplyGradient create(Scope scope, Operand handle, Operand localStep, Operand gradient) { + public static ResourceAccumulatorApplyGradient create(Scope scope, Operand handle, Operand localStep, Operand gradient) { OperationBuilder opBuilder = scope.env().opBuilder("ResourceAccumulatorApplyGradient", scope.makeOpName("ResourceAccumulatorApplyGradient")); opBuilder.addInput(handle.asOutput()); opBuilder.addInput(localStep.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceAccumulatorNumAccumulated.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceAccumulatorNumAccumulated.java index da40320c80b..947a7545b0f 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceAccumulatorNumAccumulated.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceAccumulatorNumAccumulated.java @@ -23,11 +23,12 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TInt32; /** * Returns the number of gradients aggregated in the given accumulators. */ -public final class ResourceAccumulatorNumAccumulated extends PrimitiveOp implements Operand { +public final class ResourceAccumulatorNumAccumulated extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new ResourceAccumulatorNumAccumulated operation. @@ -46,16 +47,16 @@ public static ResourceAccumulatorNumAccumulated create(Scope scope, Operand h /** * The number of gradients aggregated in the given accumulator. */ - public Output numAccumulated() { + public Output numAccumulated() { return numAccumulated; } @Override - public Output asOutput() { + public Output asOutput() { return numAccumulated; } - private Output numAccumulated; + private Output numAccumulated; private ResourceAccumulatorNumAccumulated(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceAccumulatorSetGlobalStep.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceAccumulatorSetGlobalStep.java index 1ff57263c61..c4e6240a192 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceAccumulatorSetGlobalStep.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceAccumulatorSetGlobalStep.java @@ -22,6 +22,7 @@ import org.tensorflow.OperationBuilder; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TInt64; /** * Updates the accumulator with a new value for global_step. @@ -39,7 +40,7 @@ public final class ResourceAccumulatorSetGlobalStep extends PrimitiveOp { * @param newGlobalStep The new global_step value to set. * @return a new instance of ResourceAccumulatorSetGlobalStep */ - public static ResourceAccumulatorSetGlobalStep create(Scope scope, Operand handle, Operand newGlobalStep) { + public static ResourceAccumulatorSetGlobalStep create(Scope scope, Operand handle, Operand newGlobalStep) { OperationBuilder opBuilder = scope.env().opBuilder("ResourceAccumulatorSetGlobalStep", scope.makeOpName("ResourceAccumulatorSetGlobalStep")); opBuilder.addInput(handle.asOutput()); opBuilder.addInput(newGlobalStep.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceAccumulatorTakeGradient.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceAccumulatorTakeGradient.java index 9d5b66ceb24..3651bf07986 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceAccumulatorTakeGradient.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceAccumulatorTakeGradient.java @@ -24,6 +24,7 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TInt32; /** * Extracts the average gradient in the given ConditionalAccumulator. @@ -48,12 +49,12 @@ public final class ResourceAccumulatorTakeGradient extends PrimitiveOp implem * of the accumulator. * @return a new instance of ResourceAccumulatorTakeGradient */ - public static ResourceAccumulatorTakeGradient create(Scope scope, Operand handle, Operand numRequired, Class dtype) { + public static ResourceAccumulatorTakeGradient create(Scope scope, Operand handle, Operand numRequired, DataType dtype) { OperationBuilder opBuilder = scope.env().opBuilder("ResourceAccumulatorTakeGradient", scope.makeOpName("ResourceAccumulatorTakeGradient")); opBuilder.addInput(handle.asOutput()); opBuilder.addInput(numRequired.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); - opBuilder.setAttr("dtype", DataType.fromClass(dtype)); + opBuilder.setAttr("dtype", dtype); return new ResourceAccumulatorTakeGradient(opBuilder.build()); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceConditionalAccumulator.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceConditionalAccumulator.java index de60fa0a487..7bef7f1c040 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceConditionalAccumulator.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceConditionalAccumulator.java @@ -22,7 +22,7 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; @@ -88,10 +88,10 @@ private Options() { * @param options carries optional attributes values * @return a new instance of ResourceConditionalAccumulator */ - public static ResourceConditionalAccumulator create(Scope scope, Class dtype, Shape shape, Options... options) { + public static ResourceConditionalAccumulator create(Scope scope, DataType dtype, Shape shape, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("ResourceConditionalAccumulator", scope.makeOpName("ResourceConditionalAccumulator")); opBuilder = scope.applyControlDependencies(opBuilder); - opBuilder.setAttr("dtype", DataType.fromClass(dtype)); + opBuilder.setAttr("dtype", dtype); opBuilder.setAttr("shape", shape); if (options != null) { for (Options opts : options) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceCountUpTo.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceCountUpTo.java index fe7c6337e4b..6df56292821 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceCountUpTo.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceCountUpTo.java @@ -25,6 +25,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Increments variable pointed to by 'resource' until it reaches 'limit'. @@ -32,7 +33,7 @@ * @param data type for {@code output()} output */ @Operator -public final class ResourceCountUpTo extends PrimitiveOp implements Operand { +public final class ResourceCountUpTo extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new ResourceCountUpTo operation. @@ -44,12 +45,12 @@ public final class ResourceCountUpTo extends PrimitiveOp imple * @param T * @return a new instance of ResourceCountUpTo */ - public static ResourceCountUpTo create(Scope scope, Operand resource, Long limit, Class T) { + public static ResourceCountUpTo create(Scope scope, Operand resource, Long limit, DataType T) { OperationBuilder opBuilder = scope.env().opBuilder("ResourceCountUpTo", scope.makeOpName("ResourceCountUpTo")); opBuilder.addInput(resource.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); opBuilder.setAttr("limit", limit); - opBuilder.setAttr("T", DataType.fromClass(T)); + opBuilder.setAttr("T", T); return new ResourceCountUpTo(opBuilder.build()); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceGather.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceGather.java index a3a2f7a2288..3d5127c5639 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceGather.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceGather.java @@ -25,6 +25,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Gather slices from the variable pointed to by `resource` according to `indices`. @@ -86,12 +87,12 @@ private Options() { * @param options carries optional attributes values * @return a new instance of ResourceGather */ - public static ResourceGather create(Scope scope, Operand resource, Operand indices, Class dtype, Options... options) { + public static ResourceGather create(Scope scope, Operand resource, Operand indices, DataType dtype, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("ResourceGather", scope.makeOpName("ResourceGather")); opBuilder.addInput(resource.asOutput()); opBuilder.addInput(indices.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); - opBuilder.setAttr("dtype", DataType.fromClass(dtype)); + opBuilder.setAttr("dtype", dtype); if (options != null) { for (Options opts : options) { if (opts.batchDims != null) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceGatherNd.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceGatherNd.java index 8adcf5c55c5..d6d5de3b271 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceGatherNd.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceGatherNd.java @@ -25,6 +25,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * @param data type for {@code output()} output @@ -41,12 +42,12 @@ public final class ResourceGatherNd extends PrimitiveOp implements Operand * @param dtype * @return a new instance of ResourceGatherNd */ - public static ResourceGatherNd create(Scope scope, Operand resource, Operand indices, Class dtype) { + public static ResourceGatherNd create(Scope scope, Operand resource, Operand indices, DataType dtype) { OperationBuilder opBuilder = scope.env().opBuilder("ResourceGatherNd", scope.makeOpName("ResourceGatherNd")); opBuilder.addInput(resource.asOutput()); opBuilder.addInput(indices.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); - opBuilder.setAttr("dtype", DataType.fromClass(dtype)); + opBuilder.setAttr("dtype", dtype); return new ResourceGatherNd(opBuilder.build()); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterAdd.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterAdd.java index 6613f3138d3..4620c46693e 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterAdd.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterAdd.java @@ -23,6 +23,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Adds sparse updates to the variable referenced by `resource`. @@ -59,7 +60,7 @@ public final class ResourceScatterAdd extends PrimitiveOp { * @param updates A tensor of updated values to add to `ref`. * @return a new instance of ResourceScatterAdd */ - public static ResourceScatterAdd create(Scope scope, Operand resource, Operand indices, Operand updates) { + public static ResourceScatterAdd create(Scope scope, Operand resource, Operand indices, Operand updates) { OperationBuilder opBuilder = scope.env().opBuilder("ResourceScatterAdd", scope.makeOpName("ResourceScatterAdd")); opBuilder.addInput(resource.asOutput()); opBuilder.addInput(indices.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterDiv.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterDiv.java index 1f70e2a874b..7727c19466e 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterDiv.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterDiv.java @@ -23,6 +23,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Divides sparse updates into the variable referenced by `resource`. @@ -59,7 +60,7 @@ public final class ResourceScatterDiv extends PrimitiveOp { * @param updates A tensor of updated values to add to `ref`. * @return a new instance of ResourceScatterDiv */ - public static ResourceScatterDiv create(Scope scope, Operand resource, Operand indices, Operand updates) { + public static ResourceScatterDiv create(Scope scope, Operand resource, Operand indices, Operand updates) { OperationBuilder opBuilder = scope.env().opBuilder("ResourceScatterDiv", scope.makeOpName("ResourceScatterDiv")); opBuilder.addInput(resource.asOutput()); opBuilder.addInput(indices.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterMax.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterMax.java index 69e9850cb37..62648988b3a 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterMax.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterMax.java @@ -23,6 +23,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Reduces sparse updates into the variable referenced by `resource` using the `max` operation. @@ -59,7 +60,7 @@ public final class ResourceScatterMax extends PrimitiveOp { * @param updates A tensor of updated values to add to `ref`. * @return a new instance of ResourceScatterMax */ - public static ResourceScatterMax create(Scope scope, Operand resource, Operand indices, Operand updates) { + public static ResourceScatterMax create(Scope scope, Operand resource, Operand indices, Operand updates) { OperationBuilder opBuilder = scope.env().opBuilder("ResourceScatterMax", scope.makeOpName("ResourceScatterMax")); opBuilder.addInput(resource.asOutput()); opBuilder.addInput(indices.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterMin.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterMin.java index c472a12b382..daaa55635f6 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterMin.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterMin.java @@ -23,6 +23,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Reduces sparse updates into the variable referenced by `resource` using the `min` operation. @@ -59,7 +60,7 @@ public final class ResourceScatterMin extends PrimitiveOp { * @param updates A tensor of updated values to add to `ref`. * @return a new instance of ResourceScatterMin */ - public static ResourceScatterMin create(Scope scope, Operand resource, Operand indices, Operand updates) { + public static ResourceScatterMin create(Scope scope, Operand resource, Operand indices, Operand updates) { OperationBuilder opBuilder = scope.env().opBuilder("ResourceScatterMin", scope.makeOpName("ResourceScatterMin")); opBuilder.addInput(resource.asOutput()); opBuilder.addInput(indices.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterMul.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterMul.java index 46d7fd5bfe1..2f5a34344bc 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterMul.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterMul.java @@ -23,6 +23,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Multiplies sparse updates into the variable referenced by `resource`. @@ -59,7 +60,7 @@ public final class ResourceScatterMul extends PrimitiveOp { * @param updates A tensor of updated values to add to `ref`. * @return a new instance of ResourceScatterMul */ - public static ResourceScatterMul create(Scope scope, Operand resource, Operand indices, Operand updates) { + public static ResourceScatterMul create(Scope scope, Operand resource, Operand indices, Operand updates) { OperationBuilder opBuilder = scope.env().opBuilder("ResourceScatterMul", scope.makeOpName("ResourceScatterMul")); opBuilder.addInput(resource.asOutput()); opBuilder.addInput(indices.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterNdAdd.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterNdAdd.java index ec2462b03ad..2faacd35f3d 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterNdAdd.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterNdAdd.java @@ -23,6 +23,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Applies sparse addition to individual values or slices in a Variable. @@ -93,7 +94,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of ResourceScatterNdAdd */ - public static ResourceScatterNdAdd create(Scope scope, Operand ref, Operand indices, Operand updates, Options... options) { + public static ResourceScatterNdAdd create(Scope scope, Operand ref, Operand indices, Operand updates, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("ResourceScatterNdAdd", scope.makeOpName("ResourceScatterNdAdd")); opBuilder.addInput(ref.asOutput()); opBuilder.addInput(indices.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterNdSub.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterNdSub.java index 2c0ba2ac5b5..b5583841bb5 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterNdSub.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterNdSub.java @@ -23,6 +23,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Applies sparse subtraction to individual values or slices in a Variable. @@ -93,7 +94,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of ResourceScatterNdSub */ - public static ResourceScatterNdSub create(Scope scope, Operand ref, Operand indices, Operand updates, Options... options) { + public static ResourceScatterNdSub create(Scope scope, Operand ref, Operand indices, Operand updates, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("ResourceScatterNdSub", scope.makeOpName("ResourceScatterNdSub")); opBuilder.addInput(ref.asOutput()); opBuilder.addInput(indices.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterNdUpdate.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterNdUpdate.java index 167fa47d22d..69eeb62ca73 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterNdUpdate.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterNdUpdate.java @@ -23,6 +23,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Applies sparse `updates` to individual values or slices within a given @@ -95,7 +96,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of ResourceScatterNdUpdate */ - public static ResourceScatterNdUpdate create(Scope scope, Operand ref, Operand indices, Operand updates, Options... options) { + public static ResourceScatterNdUpdate create(Scope scope, Operand ref, Operand indices, Operand updates, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("ResourceScatterNdUpdate", scope.makeOpName("ResourceScatterNdUpdate")); opBuilder.addInput(ref.asOutput()); opBuilder.addInput(indices.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterSub.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterSub.java index ec8ab22718a..e3df9718d84 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterSub.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterSub.java @@ -23,6 +23,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Subtracts sparse updates from the variable referenced by `resource`. @@ -59,7 +60,7 @@ public final class ResourceScatterSub extends PrimitiveOp { * @param updates A tensor of updated values to add to `ref`. * @return a new instance of ResourceScatterSub */ - public static ResourceScatterSub create(Scope scope, Operand resource, Operand indices, Operand updates) { + public static ResourceScatterSub create(Scope scope, Operand resource, Operand indices, Operand updates) { OperationBuilder opBuilder = scope.env().opBuilder("ResourceScatterSub", scope.makeOpName("ResourceScatterSub")); opBuilder.addInput(resource.asOutput()); opBuilder.addInput(indices.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterUpdate.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterUpdate.java index e97d9551725..5dd723faf21 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterUpdate.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterUpdate.java @@ -23,6 +23,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Assigns sparse updates to the variable referenced by `resource`. @@ -50,7 +51,7 @@ public final class ResourceScatterUpdate extends PrimitiveOp { * @param updates A tensor of updated values to add to `ref`. * @return a new instance of ResourceScatterUpdate */ - public static ResourceScatterUpdate create(Scope scope, Operand resource, Operand indices, Operand updates) { + public static ResourceScatterUpdate create(Scope scope, Operand resource, Operand indices, Operand updates) { OperationBuilder opBuilder = scope.env().opBuilder("ResourceScatterUpdate", scope.makeOpName("ResourceScatterUpdate")); opBuilder.addInput(resource.asOutput()); opBuilder.addInput(indices.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceSparseApplyAdagradV2.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceSparseApplyAdagradV2.java index b794f208966..bc2b233ae6f 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceSparseApplyAdagradV2.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceSparseApplyAdagradV2.java @@ -22,6 +22,7 @@ import org.tensorflow.OperationBuilder; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.family.TNumber; /** * Update relevant entries in '*var' and '*accum' according to the adagrad scheme. @@ -75,7 +76,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of ResourceSparseApplyAdagradV2 */ - public static ResourceSparseApplyAdagradV2 create(Scope scope, Operand var, Operand accum, Operand lr, Operand epsilon, Operand grad, Operand indices, Options... options) { + public static ResourceSparseApplyAdagradV2 create(Scope scope, Operand var, Operand accum, Operand lr, Operand epsilon, Operand grad, Operand indices, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("ResourceSparseApplyAdagradV2", scope.makeOpName("ResourceSparseApplyAdagradV2")); opBuilder.addInput(var.asOutput()); opBuilder.addInput(accum.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceSparseApplyKerasMomentum.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceSparseApplyKerasMomentum.java index 6c70febbb1f..67e3f83e84a 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceSparseApplyKerasMomentum.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceSparseApplyKerasMomentum.java @@ -23,6 +23,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Update relevant entries in '*var' and '*accum' according to the momentum scheme. @@ -82,7 +83,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of ResourceSparseApplyKerasMomentum */ - public static ResourceSparseApplyKerasMomentum create(Scope scope, Operand var, Operand accum, Operand lr, Operand grad, Operand indices, Operand momentum, Options... options) { + public static ResourceSparseApplyKerasMomentum create(Scope scope, Operand var, Operand accum, Operand lr, Operand grad, Operand indices, Operand momentum, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("ResourceSparseApplyKerasMomentum", scope.makeOpName("ResourceSparseApplyKerasMomentum")); opBuilder.addInput(var.asOutput()); opBuilder.addInput(accum.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceStridedSliceAssign.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceStridedSliceAssign.java index 020b03db452..09aec9c033d 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceStridedSliceAssign.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceStridedSliceAssign.java @@ -23,6 +23,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Assign `value` to the sliced l-value reference of `ref`. @@ -104,7 +105,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of ResourceStridedSliceAssign */ - public static ResourceStridedSliceAssign create(Scope scope, Operand ref, Operand begin, Operand end, Operand strides, Operand value, Options... options) { + public static ResourceStridedSliceAssign create(Scope scope, Operand ref, Operand begin, Operand end, Operand strides, Operand value, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("ResourceStridedSliceAssign", scope.makeOpName("ResourceStridedSliceAssign")); opBuilder.addInput(ref.asOutput()); opBuilder.addInput(begin.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RetrieveTPUEmbeddingADAMParameters.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RetrieveTPUEmbeddingADAMParameters.java index 1a60282c2c1..a6d5f856026 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RetrieveTPUEmbeddingADAMParameters.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RetrieveTPUEmbeddingADAMParameters.java @@ -22,6 +22,7 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TFloat; /** * Retrieve ADAM embedding parameters. @@ -105,27 +106,27 @@ public static Options tableName(String tableName) { /** * Parameter parameters updated by the ADAM optimization algorithm. */ - public Output parameters() { + public Output parameters() { return parameters; } /** * Parameter momenta updated by the ADAM optimization algorithm. */ - public Output momenta() { + public Output momenta() { return momenta; } /** * Parameter velocities updated by the ADAM optimization algorithm. */ - public Output velocities() { + public Output velocities() { return velocities; } - private Output parameters; - private Output momenta; - private Output velocities; + private Output parameters; + private Output momenta; + private Output velocities; private RetrieveTPUEmbeddingADAMParameters(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RetrieveTPUEmbeddingADAMParametersGradAccumDebug.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RetrieveTPUEmbeddingADAMParametersGradAccumDebug.java index f88660ce979..040adf32ee7 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RetrieveTPUEmbeddingADAMParametersGradAccumDebug.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RetrieveTPUEmbeddingADAMParametersGradAccumDebug.java @@ -22,6 +22,7 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TFloat; /** * Retrieve ADAM embedding parameters with debug support. @@ -105,35 +106,35 @@ public static Options tableName(String tableName) { /** * Parameter parameters updated by the ADAM optimization algorithm. */ - public Output parameters() { + public Output parameters() { return parameters; } /** * Parameter momenta updated by the ADAM optimization algorithm. */ - public Output momenta() { + public Output momenta() { return momenta; } /** * Parameter velocities updated by the ADAM optimization algorithm. */ - public Output velocities() { + public Output velocities() { return velocities; } /** * Parameter gradient_accumulators updated by the ADAM optimization algorithm. */ - public Output gradientAccumulators() { + public Output gradientAccumulators() { return gradientAccumulators; } - private Output parameters; - private Output momenta; - private Output velocities; - private Output gradientAccumulators; + private Output parameters; + private Output momenta; + private Output velocities; + private Output gradientAccumulators; private RetrieveTPUEmbeddingADAMParametersGradAccumDebug(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RetrieveTPUEmbeddingAdadeltaParameters.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RetrieveTPUEmbeddingAdadeltaParameters.java index 9a8eabbf2d8..74dbebd1a67 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RetrieveTPUEmbeddingAdadeltaParameters.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RetrieveTPUEmbeddingAdadeltaParameters.java @@ -22,6 +22,7 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TFloat; /** * Retrieve Adadelta embedding parameters. @@ -105,27 +106,27 @@ public static Options tableName(String tableName) { /** * Parameter parameters updated by the Adadelta optimization algorithm. */ - public Output parameters() { + public Output parameters() { return parameters; } /** * Parameter accumulators updated by the Adadelta optimization algorithm. */ - public Output accumulators() { + public Output accumulators() { return accumulators; } /** * Parameter updates updated by the Adadelta optimization algorithm. */ - public Output updates() { + public Output updates() { return updates; } - private Output parameters; - private Output accumulators; - private Output updates; + private Output parameters; + private Output accumulators; + private Output updates; private RetrieveTPUEmbeddingAdadeltaParameters(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RetrieveTPUEmbeddingAdadeltaParametersGradAccumDebug.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RetrieveTPUEmbeddingAdadeltaParametersGradAccumDebug.java index ab5776d7159..e0c20e01f3f 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RetrieveTPUEmbeddingAdadeltaParametersGradAccumDebug.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RetrieveTPUEmbeddingAdadeltaParametersGradAccumDebug.java @@ -22,6 +22,7 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TFloat; /** * Retrieve Adadelta embedding parameters with debug support. @@ -105,35 +106,35 @@ public static Options tableName(String tableName) { /** * Parameter parameters updated by the Adadelta optimization algorithm. */ - public Output parameters() { + public Output parameters() { return parameters; } /** * Parameter accumulators updated by the Adadelta optimization algorithm. */ - public Output accumulators() { + public Output accumulators() { return accumulators; } /** * Parameter updates updated by the Adadelta optimization algorithm. */ - public Output updates() { + public Output updates() { return updates; } /** * Parameter gradient_accumulators updated by the Adadelta optimization algorithm. */ - public Output gradientAccumulators() { + public Output gradientAccumulators() { return gradientAccumulators; } - private Output parameters; - private Output accumulators; - private Output updates; - private Output gradientAccumulators; + private Output parameters; + private Output accumulators; + private Output updates; + private Output gradientAccumulators; private RetrieveTPUEmbeddingAdadeltaParametersGradAccumDebug(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RetrieveTPUEmbeddingAdagradParameters.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RetrieveTPUEmbeddingAdagradParameters.java index 8e2e3bb6ab6..4731b432cab 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RetrieveTPUEmbeddingAdagradParameters.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RetrieveTPUEmbeddingAdagradParameters.java @@ -22,6 +22,7 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TFloat; /** * Retrieve Adagrad embedding parameters. @@ -105,19 +106,19 @@ public static Options tableName(String tableName) { /** * Parameter parameters updated by the Adagrad optimization algorithm. */ - public Output parameters() { + public Output parameters() { return parameters; } /** * Parameter accumulators updated by the Adagrad optimization algorithm. */ - public Output accumulators() { + public Output accumulators() { return accumulators; } - private Output parameters; - private Output accumulators; + private Output parameters; + private Output accumulators; private RetrieveTPUEmbeddingAdagradParameters(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RetrieveTPUEmbeddingAdagradParametersGradAccumDebug.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RetrieveTPUEmbeddingAdagradParametersGradAccumDebug.java index 16f10db96fe..8dddf6e9d6d 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RetrieveTPUEmbeddingAdagradParametersGradAccumDebug.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RetrieveTPUEmbeddingAdagradParametersGradAccumDebug.java @@ -22,6 +22,7 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TFloat; /** * Retrieve Adagrad embedding parameters with debug support. @@ -105,27 +106,27 @@ public static Options tableName(String tableName) { /** * Parameter parameters updated by the Adagrad optimization algorithm. */ - public Output parameters() { + public Output parameters() { return parameters; } /** * Parameter accumulators updated by the Adagrad optimization algorithm. */ - public Output accumulators() { + public Output accumulators() { return accumulators; } /** * Parameter gradient_accumulators updated by the Adagrad optimization algorithm. */ - public Output gradientAccumulators() { + public Output gradientAccumulators() { return gradientAccumulators; } - private Output parameters; - private Output accumulators; - private Output gradientAccumulators; + private Output parameters; + private Output accumulators; + private Output gradientAccumulators; private RetrieveTPUEmbeddingAdagradParametersGradAccumDebug(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RetrieveTPUEmbeddingCenteredRMSPropParameters.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RetrieveTPUEmbeddingCenteredRMSPropParameters.java index 079c968978d..ed3b32a7d59 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RetrieveTPUEmbeddingCenteredRMSPropParameters.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RetrieveTPUEmbeddingCenteredRMSPropParameters.java @@ -22,6 +22,7 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TFloat; /** * Retrieve centered RMSProp embedding parameters. @@ -105,35 +106,35 @@ public static Options tableName(String tableName) { /** * Parameter parameters updated by the centered RMSProp optimization algorithm. */ - public Output parameters() { + public Output parameters() { return parameters; } /** * Parameter ms updated by the centered RMSProp optimization algorithm. */ - public Output ms() { + public Output ms() { return ms; } /** * Parameter mom updated by the centered RMSProp optimization algorithm. */ - public Output mom() { + public Output mom() { return mom; } /** * Parameter mg updated by the centered RMSProp optimization algorithm. */ - public Output mg() { + public Output mg() { return mg; } - private Output parameters; - private Output ms; - private Output mom; - private Output mg; + private Output parameters; + private Output ms; + private Output mom; + private Output mg; private RetrieveTPUEmbeddingCenteredRMSPropParameters(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RetrieveTPUEmbeddingFTRLParameters.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RetrieveTPUEmbeddingFTRLParameters.java index 0de5292c378..54c5241a0a1 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RetrieveTPUEmbeddingFTRLParameters.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RetrieveTPUEmbeddingFTRLParameters.java @@ -22,6 +22,7 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TFloat; /** * Retrieve FTRL embedding parameters. @@ -105,27 +106,27 @@ public static Options tableName(String tableName) { /** * Parameter parameters updated by the FTRL optimization algorithm. */ - public Output parameters() { + public Output parameters() { return parameters; } /** * Parameter accumulators updated by the FTRL optimization algorithm. */ - public Output accumulators() { + public Output accumulators() { return accumulators; } /** * Parameter linears updated by the FTRL optimization algorithm. */ - public Output linears() { + public Output linears() { return linears; } - private Output parameters; - private Output accumulators; - private Output linears; + private Output parameters; + private Output accumulators; + private Output linears; private RetrieveTPUEmbeddingFTRLParameters(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RetrieveTPUEmbeddingFTRLParametersGradAccumDebug.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RetrieveTPUEmbeddingFTRLParametersGradAccumDebug.java index 32c61428018..f7264fcf8e3 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RetrieveTPUEmbeddingFTRLParametersGradAccumDebug.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RetrieveTPUEmbeddingFTRLParametersGradAccumDebug.java @@ -22,6 +22,7 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TFloat; /** * Retrieve FTRL embedding parameters with debug support. @@ -105,35 +106,35 @@ public static Options tableName(String tableName) { /** * Parameter parameters updated by the FTRL optimization algorithm. */ - public Output parameters() { + public Output parameters() { return parameters; } /** * Parameter accumulators updated by the FTRL optimization algorithm. */ - public Output accumulators() { + public Output accumulators() { return accumulators; } /** * Parameter linears updated by the FTRL optimization algorithm. */ - public Output linears() { + public Output linears() { return linears; } /** * Parameter gradient_accumulators updated by the FTRL optimization algorithm. */ - public Output gradientAccumulators() { + public Output gradientAccumulators() { return gradientAccumulators; } - private Output parameters; - private Output accumulators; - private Output linears; - private Output gradientAccumulators; + private Output parameters; + private Output accumulators; + private Output linears; + private Output gradientAccumulators; private RetrieveTPUEmbeddingFTRLParametersGradAccumDebug(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RetrieveTPUEmbeddingMDLAdagradLightParameters.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RetrieveTPUEmbeddingMDLAdagradLightParameters.java index 5436bcfcedf..796171a08e6 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RetrieveTPUEmbeddingMDLAdagradLightParameters.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RetrieveTPUEmbeddingMDLAdagradLightParameters.java @@ -22,6 +22,7 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TFloat; /** * Retrieve MDL Adagrad Light embedding parameters. @@ -105,35 +106,35 @@ public static Options tableName(String tableName) { /** * Parameter parameters updated by the MDL Adagrad Light optimization algorithm. */ - public Output parameters() { + public Output parameters() { return parameters; } /** * Parameter accumulators updated by the MDL Adagrad Light optimization algorithm. */ - public Output accumulators() { + public Output accumulators() { return accumulators; } /** * Parameter weights updated by the MDL Adagrad Light optimization algorithm. */ - public Output weights() { + public Output weights() { return weights; } /** * Parameter benefits updated by the MDL Adagrad Light optimization algorithm. */ - public Output benefits() { + public Output benefits() { return benefits; } - private Output parameters; - private Output accumulators; - private Output weights; - private Output benefits; + private Output parameters; + private Output accumulators; + private Output weights; + private Output benefits; private RetrieveTPUEmbeddingMDLAdagradLightParameters(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RetrieveTPUEmbeddingMomentumParameters.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RetrieveTPUEmbeddingMomentumParameters.java index d086985a7a1..4b5bb17bd4a 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RetrieveTPUEmbeddingMomentumParameters.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RetrieveTPUEmbeddingMomentumParameters.java @@ -22,6 +22,7 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TFloat; /** * Retrieve Momentum embedding parameters. @@ -105,19 +106,19 @@ public static Options tableName(String tableName) { /** * Parameter parameters updated by the Momentum optimization algorithm. */ - public Output parameters() { + public Output parameters() { return parameters; } /** * Parameter momenta updated by the Momentum optimization algorithm. */ - public Output momenta() { + public Output momenta() { return momenta; } - private Output parameters; - private Output momenta; + private Output parameters; + private Output momenta; private RetrieveTPUEmbeddingMomentumParameters(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RetrieveTPUEmbeddingMomentumParametersGradAccumDebug.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RetrieveTPUEmbeddingMomentumParametersGradAccumDebug.java index ed7cde14464..c9017b8c1ce 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RetrieveTPUEmbeddingMomentumParametersGradAccumDebug.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RetrieveTPUEmbeddingMomentumParametersGradAccumDebug.java @@ -22,6 +22,7 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TFloat; /** * Retrieve Momentum embedding parameters with debug support. @@ -105,27 +106,27 @@ public static Options tableName(String tableName) { /** * Parameter parameters updated by the Momentum optimization algorithm. */ - public Output parameters() { + public Output parameters() { return parameters; } /** * Parameter momenta updated by the Momentum optimization algorithm. */ - public Output momenta() { + public Output momenta() { return momenta; } /** * Parameter gradient_accumulators updated by the Momentum optimization algorithm. */ - public Output gradientAccumulators() { + public Output gradientAccumulators() { return gradientAccumulators; } - private Output parameters; - private Output momenta; - private Output gradientAccumulators; + private Output parameters; + private Output momenta; + private Output gradientAccumulators; private RetrieveTPUEmbeddingMomentumParametersGradAccumDebug(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RetrieveTPUEmbeddingProximalAdagradParameters.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RetrieveTPUEmbeddingProximalAdagradParameters.java index 16332f64e84..a4c0d307590 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RetrieveTPUEmbeddingProximalAdagradParameters.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RetrieveTPUEmbeddingProximalAdagradParameters.java @@ -22,6 +22,7 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TFloat; /** * Retrieve proximal Adagrad embedding parameters. @@ -105,19 +106,19 @@ public static Options tableName(String tableName) { /** * Parameter parameters updated by the proximal Adagrad optimization algorithm. */ - public Output parameters() { + public Output parameters() { return parameters; } /** * Parameter accumulators updated by the proximal Adagrad optimization algorithm. */ - public Output accumulators() { + public Output accumulators() { return accumulators; } - private Output parameters; - private Output accumulators; + private Output parameters; + private Output accumulators; private RetrieveTPUEmbeddingProximalAdagradParameters(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RetrieveTPUEmbeddingProximalAdagradParametersGradAccumDebug.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RetrieveTPUEmbeddingProximalAdagradParametersGradAccumDebug.java index e02ecc04d40..7af385f0145 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RetrieveTPUEmbeddingProximalAdagradParametersGradAccumDebug.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RetrieveTPUEmbeddingProximalAdagradParametersGradAccumDebug.java @@ -22,6 +22,7 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TFloat; /** * Retrieve proximal Adagrad embedding parameters with debug support. @@ -105,27 +106,27 @@ public static Options tableName(String tableName) { /** * Parameter parameters updated by the proximal Adagrad optimization algorithm. */ - public Output parameters() { + public Output parameters() { return parameters; } /** * Parameter accumulators updated by the proximal Adagrad optimization algorithm. */ - public Output accumulators() { + public Output accumulators() { return accumulators; } /** * Parameter gradient_accumulators updated by the proximal Adagrad optimization algorithm. */ - public Output gradientAccumulators() { + public Output gradientAccumulators() { return gradientAccumulators; } - private Output parameters; - private Output accumulators; - private Output gradientAccumulators; + private Output parameters; + private Output accumulators; + private Output gradientAccumulators; private RetrieveTPUEmbeddingProximalAdagradParametersGradAccumDebug(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RetrieveTPUEmbeddingRMSPropParameters.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RetrieveTPUEmbeddingRMSPropParameters.java index ae84f309a9c..33551f49b5c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RetrieveTPUEmbeddingRMSPropParameters.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RetrieveTPUEmbeddingRMSPropParameters.java @@ -22,6 +22,7 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TFloat; /** * Retrieve RMSProp embedding parameters. @@ -105,27 +106,27 @@ public static Options tableName(String tableName) { /** * Parameter parameters updated by the RMSProp optimization algorithm. */ - public Output parameters() { + public Output parameters() { return parameters; } /** * Parameter ms updated by the RMSProp optimization algorithm. */ - public Output ms() { + public Output ms() { return ms; } /** * Parameter mom updated by the RMSProp optimization algorithm. */ - public Output mom() { + public Output mom() { return mom; } - private Output parameters; - private Output ms; - private Output mom; + private Output parameters; + private Output ms; + private Output mom; private RetrieveTPUEmbeddingRMSPropParameters(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RetrieveTPUEmbeddingRMSPropParametersGradAccumDebug.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RetrieveTPUEmbeddingRMSPropParametersGradAccumDebug.java index 606e5724937..ee4454c29af 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RetrieveTPUEmbeddingRMSPropParametersGradAccumDebug.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RetrieveTPUEmbeddingRMSPropParametersGradAccumDebug.java @@ -22,6 +22,7 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TFloat; /** * Retrieve RMSProp embedding parameters with debug support. @@ -105,35 +106,35 @@ public static Options tableName(String tableName) { /** * Parameter parameters updated by the RMSProp optimization algorithm. */ - public Output parameters() { + public Output parameters() { return parameters; } /** * Parameter ms updated by the RMSProp optimization algorithm. */ - public Output ms() { + public Output ms() { return ms; } /** * Parameter mom updated by the RMSProp optimization algorithm. */ - public Output mom() { + public Output mom() { return mom; } /** * Parameter gradient_accumulators updated by the RMSProp optimization algorithm. */ - public Output gradientAccumulators() { + public Output gradientAccumulators() { return gradientAccumulators; } - private Output parameters; - private Output ms; - private Output mom; - private Output gradientAccumulators; + private Output parameters; + private Output ms; + private Output mom; + private Output gradientAccumulators; private RetrieveTPUEmbeddingRMSPropParametersGradAccumDebug(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RetrieveTPUEmbeddingStochasticGradientDescentParameters.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RetrieveTPUEmbeddingStochasticGradientDescentParameters.java index 6d6fdb253eb..834caa3bc3b 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RetrieveTPUEmbeddingStochasticGradientDescentParameters.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RetrieveTPUEmbeddingStochasticGradientDescentParameters.java @@ -23,6 +23,7 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TFloat; /** * Retrieve SGD embedding parameters. @@ -32,7 +33,7 @@ * the correct embedding table configuration. For example, this op is * used to retrieve updated parameters before saving a checkpoint. */ -public final class RetrieveTPUEmbeddingStochasticGradientDescentParameters extends PrimitiveOp implements Operand { +public final class RetrieveTPUEmbeddingStochasticGradientDescentParameters extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.core.RetrieveTPUEmbeddingStochasticGradientDescentParameters} @@ -106,16 +107,16 @@ public static Options tableName(String tableName) { /** * Parameter parameters updated by the stochastic gradient descent optimization algorithm. */ - public Output parameters() { + public Output parameters() { return parameters; } @Override - public Output asOutput() { + public Output asOutput() { return parameters; } - private Output parameters; + private Output parameters; private RetrieveTPUEmbeddingStochasticGradientDescentParameters(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Reverse.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Reverse.java index 750ba20f0b6..bf543399137 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Reverse.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Reverse.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Reverses specific dimensions of a tensor. @@ -89,7 +90,7 @@ public final class Reverse extends PrimitiveOp implements Operand { * `[-rank(tensor), rank(tensor))`. * @return a new instance of Reverse */ - public static Reverse create(Scope scope, Operand tensor, Operand axis) { + public static Reverse create(Scope scope, Operand tensor, Operand axis) { OperationBuilder opBuilder = scope.env().opBuilder("ReverseV2", scope.makeOpName("Reverse")); opBuilder.addInput(tensor.asOutput()); opBuilder.addInput(axis.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ReverseSequence.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ReverseSequence.java index 27e60dd41fe..9bbbfc35239 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ReverseSequence.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ReverseSequence.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Reverses variable length slices. @@ -116,7 +117,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of ReverseSequence */ - public static ReverseSequence create(Scope scope, Operand input, Operand seqLengths, Long seqDim, Options... options) { + public static ReverseSequence create(Scope scope, Operand input, Operand seqLengths, Long seqDim, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("ReverseSequence", scope.makeOpName("ReverseSequence")); opBuilder.addInput(input.asOutput()); opBuilder.addInput(seqLengths.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RngSkip.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RngSkip.java index 048deecbc7e..df092de6c8e 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RngSkip.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RngSkip.java @@ -22,6 +22,7 @@ import org.tensorflow.OperationBuilder; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TInt64; /** * Advance the counter of a counter-based RNG. @@ -42,7 +43,7 @@ public final class RngSkip extends PrimitiveOp { * @param delta The amount of advancement. * @return a new instance of RngSkip */ - public static RngSkip create(Scope scope, Operand resource, Operand algorithm, Operand delta) { + public static RngSkip create(Scope scope, Operand resource, Operand algorithm, Operand delta) { OperationBuilder opBuilder = scope.env().opBuilder("RngSkip", scope.makeOpName("RngSkip")); opBuilder.addInput(resource.asOutput()); opBuilder.addInput(algorithm.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Roll.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Roll.java index 25b0c1582ca..87eeaa95859 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Roll.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Roll.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Rolls the elements of a tensor along an axis. @@ -69,7 +70,7 @@ public final class Roll extends PrimitiveOp implements Operand { * axis. * @return a new instance of Roll */ - public static Roll create(Scope scope, Operand input, Operand shift, Operand axis) { + public static Roll create(Scope scope, Operand input, Operand shift, Operand axis) { OperationBuilder opBuilder = scope.env().opBuilder("Roll", scope.makeOpName("Roll")); opBuilder.addInput(input.asOutput()); opBuilder.addInput(shift.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Rpc.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Rpc.java index 1d5552c4728..441553da5f4 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Rpc.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Rpc.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TString; /** * Perform batches of RPC requests. @@ -73,7 +74,7 @@ * See the `TryRpc` op if you prefer to handle RPC failures manually in the graph. */ @Operator -public final class Rpc extends PrimitiveOp implements Operand { +public final class Rpc extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.core.Rpc} @@ -133,7 +134,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of Rpc */ - public static Rpc create(Scope scope, Operand address, Operand method, Operand request, Options... options) { + public static Rpc create(Scope scope, Operand address, Operand method, Operand request, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("Rpc", scope.makeOpName("Rpc")); opBuilder.addInput(address.asOutput()); opBuilder.addInput(method.asOutput()); @@ -184,16 +185,16 @@ public static Options timeoutInMs(Long timeoutInMs) { /** * Same shape as `request`. Serialized proto strings: the rpc responses. */ - public Output response() { + public Output response() { return response; } @Override - public Output asOutput() { + public Output asOutput() { return response; } - private Output response; + private Output response; private Rpc(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/SamplingDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/SamplingDataset.java index 86db550e242..0e22cb780a8 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/SamplingDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/SamplingDataset.java @@ -23,9 +23,11 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TFloat; +import org.tensorflow.types.TInt64; /** * Creates a dataset that contains `rate` elements from the `input_dataset`. @@ -45,7 +47,7 @@ public final class SamplingDataset extends PrimitiveOp implements Operand inputDataset, Operand rate, Operand seed, Operand seed2, List> outputTypes, List outputShapes) { + public static SamplingDataset create(Scope scope, Operand inputDataset, Operand rate, Operand seed, Operand seed2, List> outputTypes, List outputShapes) { OperationBuilder opBuilder = scope.env().opBuilder("SamplingDataset", scope.makeOpName("SamplingDataset")); opBuilder.addInput(inputDataset.asOutput()); opBuilder.addInput(rate.asOutput()); @@ -54,7 +56,7 @@ public static SamplingDataset create(Scope scope, Operand inputDataset, Opera opBuilder = scope.applyControlDependencies(opBuilder); DataType[] outputTypesArray = new DataType[outputTypes.size()]; for (int i = 0; i < outputTypesArray.length; ++i) { - outputTypesArray[i] = DataType.fromClass(outputTypes.get(i)); + outputTypesArray[i] = outputTypes.get(i); } opBuilder.setAttr("output_types", outputTypesArray); Shape[] outputShapesArray = new Shape[outputShapes.size()]; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ScaleAndTranslate.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ScaleAndTranslate.java index e5012bbb32d..a7c7b93c690 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ScaleAndTranslate.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ScaleAndTranslate.java @@ -24,11 +24,14 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TFloat; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.family.TNumber; /** */ @Operator -public final class ScaleAndTranslate extends PrimitiveOp implements Operand { +public final class ScaleAndTranslate extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.core.ScaleAndTranslate} @@ -69,7 +72,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of ScaleAndTranslate */ - public static ScaleAndTranslate create(Scope scope, Operand images, Operand size, Operand scale, Operand translation, Options... options) { + public static ScaleAndTranslate create(Scope scope, Operand images, Operand size, Operand scale, Operand translation, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("ScaleAndTranslate", scope.makeOpName("ScaleAndTranslate")); opBuilder.addInput(images.asOutput()); opBuilder.addInput(size.asOutput()); @@ -105,16 +108,16 @@ public static Options antialias(Boolean antialias) { /** */ - public Output resizedImages() { + public Output resizedImages() { return resizedImages; } @Override - public Output asOutput() { + public Output asOutput() { return resizedImages; } - private Output resizedImages; + private Output resizedImages; private ScaleAndTranslate(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ScaleAndTranslateGrad.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ScaleAndTranslateGrad.java index f61d3e7d91c..f3e17ead8d7 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ScaleAndTranslateGrad.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ScaleAndTranslateGrad.java @@ -23,11 +23,13 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TFloat; +import org.tensorflow.types.family.TNumber; /** * @param data type for {@code output()} output */ -public final class ScaleAndTranslateGrad extends PrimitiveOp implements Operand { +public final class ScaleAndTranslateGrad extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.core.ScaleAndTranslateGrad} @@ -68,7 +70,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of ScaleAndTranslateGrad */ - public static ScaleAndTranslateGrad create(Scope scope, Operand grads, Operand originalImage, Operand scale, Operand translation, Options... options) { + public static ScaleAndTranslateGrad create(Scope scope, Operand grads, Operand originalImage, Operand scale, Operand translation, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("ScaleAndTranslateGrad", scope.makeOpName("ScaleAndTranslateGrad")); opBuilder.addInput(grads.asOutput()); opBuilder.addInput(originalImage.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ScatterAdd.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ScatterAdd.java index 5ef403ff99b..30770e4bc20 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ScatterAdd.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ScatterAdd.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Adds sparse updates to a variable reference. @@ -86,7 +87,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of ScatterAdd */ - public static ScatterAdd create(Scope scope, Operand ref, Operand indices, Operand updates, Options... options) { + public static ScatterAdd create(Scope scope, Operand ref, Operand indices, Operand updates, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("ScatterAdd", scope.makeOpName("ScatterAdd")); opBuilder.addInput(ref.asOutput()); opBuilder.addInput(indices.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ScatterDiv.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ScatterDiv.java index f11f7d27bf9..c51b03091e8 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ScatterDiv.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ScatterDiv.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Divides a variable reference by sparse updates. @@ -82,7 +83,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of ScatterDiv */ - public static ScatterDiv create(Scope scope, Operand ref, Operand indices, Operand updates, Options... options) { + public static ScatterDiv create(Scope scope, Operand ref, Operand indices, Operand updates, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("ScatterDiv", scope.makeOpName("ScatterDiv")); opBuilder.addInput(ref.asOutput()); opBuilder.addInput(indices.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ScatterMax.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ScatterMax.java index 6e9e717f0dd..52ad66aca60 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ScatterMax.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ScatterMax.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Reduces sparse updates into a variable reference using the `max` operation. @@ -54,7 +55,7 @@ * @param data type for {@code outputRef()} output */ @Operator -public final class ScatterMax extends PrimitiveOp implements Operand { +public final class ScatterMax extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.core.ScatterMax} @@ -86,7 +87,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of ScatterMax */ - public static ScatterMax create(Scope scope, Operand ref, Operand indices, Operand updates, Options... options) { + public static ScatterMax create(Scope scope, Operand ref, Operand indices, Operand updates, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("ScatterMax", scope.makeOpName("ScatterMax")); opBuilder.addInput(ref.asOutput()); opBuilder.addInput(indices.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ScatterMin.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ScatterMin.java index ac026b21ceb..0893257e9fc 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ScatterMin.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ScatterMin.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Reduces sparse updates into a variable reference using the `min` operation. @@ -54,7 +55,7 @@ * @param data type for {@code outputRef()} output */ @Operator -public final class ScatterMin extends PrimitiveOp implements Operand { +public final class ScatterMin extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.core.ScatterMin} @@ -86,7 +87,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of ScatterMin */ - public static ScatterMin create(Scope scope, Operand ref, Operand indices, Operand updates, Options... options) { + public static ScatterMin create(Scope scope, Operand ref, Operand indices, Operand updates, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("ScatterMin", scope.makeOpName("ScatterMin")); opBuilder.addInput(ref.asOutput()); opBuilder.addInput(indices.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ScatterMul.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ScatterMul.java index 19a49ba8d69..0931579ee2a 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ScatterMul.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ScatterMul.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Multiplies sparse updates into a variable reference. @@ -82,7 +83,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of ScatterMul */ - public static ScatterMul create(Scope scope, Operand ref, Operand indices, Operand updates, Options... options) { + public static ScatterMul create(Scope scope, Operand ref, Operand indices, Operand updates, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("ScatterMul", scope.makeOpName("ScatterMul")); opBuilder.addInput(ref.asOutput()); opBuilder.addInput(indices.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ScatterNd.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ScatterNd.java index ddba3889939..7e924b5e27f 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ScatterNd.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ScatterNd.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Scatter `updates` into a new tensor according to `indices`. @@ -121,7 +122,7 @@ public final class ScatterNd extends PrimitiveOp implements Operand { * @param shape 1-D. The shape of the resulting tensor. * @return a new instance of ScatterNd */ - public static ScatterNd create(Scope scope, Operand indices, Operand updates, Operand shape) { + public static ScatterNd create(Scope scope, Operand indices, Operand updates, Operand shape) { OperationBuilder opBuilder = scope.env().opBuilder("ScatterNd", scope.makeOpName("ScatterNd")); opBuilder.addInput(indices.asOutput()); opBuilder.addInput(updates.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ScatterNdAdd.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ScatterNdAdd.java index ad997e2b67a..47875c2950a 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ScatterNdAdd.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ScatterNdAdd.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Applies sparse addition to individual values or slices in a Variable. @@ -96,7 +97,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of ScatterNdAdd */ - public static ScatterNdAdd create(Scope scope, Operand ref, Operand indices, Operand updates, Options... options) { + public static ScatterNdAdd create(Scope scope, Operand ref, Operand indices, Operand updates, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("ScatterNdAdd", scope.makeOpName("ScatterNdAdd")); opBuilder.addInput(ref.asOutput()); opBuilder.addInput(indices.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ScatterNdNonAliasingAdd.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ScatterNdNonAliasingAdd.java index c2466d58877..573a48495d0 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ScatterNdNonAliasingAdd.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ScatterNdNonAliasingAdd.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Applies sparse addition to `input` using individual values or slices @@ -78,7 +79,7 @@ public final class ScatterNdNonAliasingAdd extends PrimitiveOp implements Ope * to add to `input`. * @return a new instance of ScatterNdNonAliasingAdd */ - public static ScatterNdNonAliasingAdd create(Scope scope, Operand input, Operand indices, Operand updates) { + public static ScatterNdNonAliasingAdd create(Scope scope, Operand input, Operand indices, Operand updates) { OperationBuilder opBuilder = scope.env().opBuilder("ScatterNdNonAliasingAdd", scope.makeOpName("ScatterNdNonAliasingAdd")); opBuilder.addInput(input.asOutput()); opBuilder.addInput(indices.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ScatterNdSub.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ScatterNdSub.java index 989d2085ad9..567e80af5f7 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ScatterNdSub.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ScatterNdSub.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Applies sparse subtraction to individual values or slices in a Variable. @@ -98,7 +99,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of ScatterNdSub */ - public static ScatterNdSub create(Scope scope, Operand ref, Operand indices, Operand updates, Options... options) { + public static ScatterNdSub create(Scope scope, Operand ref, Operand indices, Operand updates, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("ScatterNdSub", scope.makeOpName("ScatterNdSub")); opBuilder.addInput(ref.asOutput()); opBuilder.addInput(indices.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ScatterNdUpdate.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ScatterNdUpdate.java index e9465e76800..7c11dbfaa7f 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ScatterNdUpdate.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ScatterNdUpdate.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Applies sparse `updates` to individual values or slices within a given @@ -100,7 +101,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of ScatterNdUpdate */ - public static ScatterNdUpdate create(Scope scope, Operand ref, Operand indices, Operand updates, Options... options) { + public static ScatterNdUpdate create(Scope scope, Operand ref, Operand indices, Operand updates, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("ScatterNdUpdate", scope.makeOpName("ScatterNdUpdate")); opBuilder.addInput(ref.asOutput()); opBuilder.addInput(indices.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ScatterSub.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ScatterSub.java index 80086275101..e9733a393e0 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ScatterSub.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ScatterSub.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Subtracts sparse updates to a variable reference. @@ -85,7 +86,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of ScatterSub */ - public static ScatterSub create(Scope scope, Operand ref, Operand indices, Operand updates, Options... options) { + public static ScatterSub create(Scope scope, Operand ref, Operand indices, Operand updates, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("ScatterSub", scope.makeOpName("ScatterSub")); opBuilder.addInput(ref.asOutput()); opBuilder.addInput(indices.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ScatterUpdate.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ScatterUpdate.java index d9b272a03dd..ef1235b7e65 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ScatterUpdate.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ScatterUpdate.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Applies sparse updates to a variable reference. @@ -89,7 +90,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of ScatterUpdate */ - public static ScatterUpdate create(Scope scope, Operand ref, Operand indices, Operand updates, Options... options) { + public static ScatterUpdate create(Scope scope, Operand ref, Operand indices, Operand updates, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("ScatterUpdate", scope.makeOpName("ScatterUpdate")); opBuilder.addInput(ref.asOutput()); opBuilder.addInput(indices.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/SelectV2.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/SelectV2.java index a3241878b9b..ee2b248d27e 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/SelectV2.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/SelectV2.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TBool; /** * @param data type for {@code output()} output @@ -40,7 +41,7 @@ public final class SelectV2 extends PrimitiveOp implements Operand { * @param e * @return a new instance of SelectV2 */ - public static SelectV2 create(Scope scope, Operand condition, Operand t, Operand e) { + public static SelectV2 create(Scope scope, Operand condition, Operand t, Operand e) { OperationBuilder opBuilder = scope.env().opBuilder("SelectV2", scope.makeOpName("SelectV2")); opBuilder.addInput(condition.asOutput()); opBuilder.addInput(t.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/SendTPUEmbeddingGradients.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/SendTPUEmbeddingGradients.java index 4c575124a88..d103ecb1164 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/SendTPUEmbeddingGradients.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/SendTPUEmbeddingGradients.java @@ -23,6 +23,7 @@ import org.tensorflow.op.Operands; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TFloat; /** * Performs gradient updates of embedding tables. @@ -48,7 +49,7 @@ public final class SendTPUEmbeddingGradients extends PrimitiveOp { * @param config Serialized TPUEmbeddingConfiguration proto. * @return a new instance of SendTPUEmbeddingGradients */ - public static SendTPUEmbeddingGradients create(Scope scope, Iterable> inputs, Iterable> learningRates, String config) { + public static SendTPUEmbeddingGradients create(Scope scope, Iterable> inputs, Iterable> learningRates, String config) { OperationBuilder opBuilder = scope.env().opBuilder("SendTPUEmbeddingGradients", scope.makeOpName("SendTPUEmbeddingGradients")); opBuilder.addInputList(Operands.asOutputs(inputs)); opBuilder.addInputList(Operands.asOutputs(learningRates)); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/SetDiff1d.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/SetDiff1d.java index f7de18583d1..13aba72677c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/SetDiff1d.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/SetDiff1d.java @@ -25,6 +25,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.family.TNumber; /** * Computes the difference between two lists of numbers or strings. @@ -53,7 +55,7 @@ * @param data type for {@code idx()} output */ @Operator -public final class SetDiff1d extends PrimitiveOp { +public final class SetDiff1d extends PrimitiveOp { /** * Factory method to create a class wrapping a new SetDiff1d operation. @@ -64,12 +66,12 @@ public final class SetDiff1d extends PrimitiveOp { * @param outIdx * @return a new instance of SetDiff1d */ - public static SetDiff1d create(Scope scope, Operand x, Operand y, Class outIdx) { + public static SetDiff1d create(Scope scope, Operand x, Operand y, DataType outIdx) { OperationBuilder opBuilder = scope.env().opBuilder("ListDiff", scope.makeOpName("SetDiff1d")); opBuilder.addInput(x.asOutput()); opBuilder.addInput(y.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); - opBuilder.setAttr("out_idx", DataType.fromClass(outIdx)); + opBuilder.setAttr("out_idx", outIdx); return new SetDiff1d(opBuilder.build()); } @@ -81,8 +83,8 @@ public static SetDiff1d create(Scope scope, Operand< * @param y 1-D. Values to remove. * @return a new instance of SetDiff1d */ - public static SetDiff1d create(Scope scope, Operand x, Operand y) { - return create(scope, x, y, Integer.class); + public static SetDiff1d create(Scope scope, Operand x, Operand y) { + return create(scope, x, y, TInt32.DTYPE); } /** diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/SetSize.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/SetSize.java index 02a1241ec23..719ca3c3894 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/SetSize.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/SetSize.java @@ -24,6 +24,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.TInt64; /** * Number of unique elements along last dimension of input `set`. @@ -36,7 +38,7 @@ * indices. */ @Operator -public final class SetSize extends PrimitiveOp implements Operand { +public final class SetSize extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.core.SetSize} @@ -67,7 +69,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of SetSize */ - public static SetSize create(Scope scope, Operand setIndices, Operand setValues, Operand setShape, Options... options) { + public static SetSize create(Scope scope, Operand setIndices, Operand setValues, Operand setShape, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("SetSize", scope.makeOpName("SetSize")); opBuilder.addInput(setIndices.asOutput()); opBuilder.addInput(setValues.asOutput()); @@ -95,16 +97,16 @@ public static Options validateIndices(Boolean validateIndices) { * `n-1` dimensions as `set`. Each value is the number of unique elements in * the corresponding `[0...n-1]` dimension of `set`. */ - public Output size() { + public Output size() { return size; } @Override - public Output asOutput() { + public Output asOutput() { return size; } - private Output size; + private Output size; private SetSize(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Shape.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Shape.java index 84c85161ebb..8a7d92e4762 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Shape.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Shape.java @@ -25,6 +25,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.family.TNumber; /** * Returns the shape of a tensor. @@ -41,7 +43,7 @@ * @param data type for {@code output()} output */ @Operator -public final class Shape extends PrimitiveOp implements Operand { +public final class Shape extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new Shape operation. @@ -51,11 +53,11 @@ public final class Shape extends PrimitiveOp implements Operan * @param outType * @return a new instance of Shape */ - public static Shape create(Scope scope, Operand input, Class outType) { + public static Shape create(Scope scope, Operand input, DataType outType) { OperationBuilder opBuilder = scope.env().opBuilder("Shape", scope.makeOpName("Shape")); opBuilder.addInput(input.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); - opBuilder.setAttr("out_type", DataType.fromClass(outType)); + opBuilder.setAttr("out_type", outType); return new Shape(opBuilder.build()); } @@ -66,8 +68,8 @@ public static Shape create(Scope scope, Operand inpu * @param input * @return a new instance of Shape */ - public static Shape create(Scope scope, Operand input) { - return create(scope, input, Integer.class); + public static Shape create(Scope scope, Operand input) { + return create(scope, input, TInt32.DTYPE); } /** diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ShapeN.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ShapeN.java index 686f6c9884f..70abd7f996d 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ShapeN.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ShapeN.java @@ -29,6 +29,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.family.TNumber; /** * Returns shape of tensors. @@ -38,7 +40,7 @@ * @param data type for {@code output()} output */ @Operator -public final class ShapeN extends PrimitiveOp implements Iterable> { +public final class ShapeN extends PrimitiveOp implements Iterable> { /** * Factory method to create a class wrapping a new ShapeN operation. @@ -48,11 +50,11 @@ public final class ShapeN extends PrimitiveOp implements Itera * @param outType * @return a new instance of ShapeN */ - public static ShapeN create(Scope scope, Iterable> input, Class outType) { + public static ShapeN create(Scope scope, Iterable> input, DataType outType) { OperationBuilder opBuilder = scope.env().opBuilder("ShapeN", scope.makeOpName("ShapeN")); opBuilder.addInputList(Operands.asOutputs(input)); opBuilder = scope.applyControlDependencies(opBuilder); - opBuilder.setAttr("out_type", DataType.fromClass(outType)); + opBuilder.setAttr("out_type", outType); return new ShapeN(opBuilder.build()); } @@ -63,8 +65,8 @@ public static ShapeN create(Scope scope, Iterable ShapeN create(Scope scope, Iterable> input) { - return create(scope, input, Integer.class); + public static ShapeN create(Scope scope, Iterable> input) { + return create(scope, input, TInt32.DTYPE); } /** diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ShardDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ShardDataset.java index ba5acf442ee..d8055110720 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ShardDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ShardDataset.java @@ -23,9 +23,10 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TInt64; /** * Creates a `Dataset` that includes only 1/`num_shards` of this dataset. @@ -63,7 +64,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of ShardDataset */ - public static ShardDataset create(Scope scope, Operand inputDataset, Operand numShards, Operand index, List> outputTypes, List outputShapes, Options... options) { + public static ShardDataset create(Scope scope, Operand inputDataset, Operand numShards, Operand index, List> outputTypes, List outputShapes, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("ShardDataset", scope.makeOpName("ShardDataset")); opBuilder.addInput(inputDataset.asOutput()); opBuilder.addInput(numShards.asOutput()); @@ -71,7 +72,7 @@ public static ShardDataset create(Scope scope, Operand inputDataset, Operand< opBuilder = scope.applyControlDependencies(opBuilder); DataType[] outputTypesArray = new DataType[outputTypes.size()]; for (int i = 0; i < outputTypesArray.length; ++i) { - outputTypesArray[i] = DataType.fromClass(outputTypes.get(i)); + outputTypesArray[i] = outputTypes.get(i); } opBuilder.setAttr("output_types", outputTypesArray); Shape[] outputShapesArray = new Shape[outputShapes.size()]; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ShuffleDatasetV2.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ShuffleDatasetV2.java index 2c494712878..375b72c1da8 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ShuffleDatasetV2.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ShuffleDatasetV2.java @@ -23,9 +23,10 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TInt64; /** */ @@ -42,7 +43,7 @@ public final class ShuffleDatasetV2 extends PrimitiveOp implements Operand inputDataset, Operand bufferSize, Operand seedGenerator, List> outputTypes, List outputShapes) { + public static ShuffleDatasetV2 create(Scope scope, Operand inputDataset, Operand bufferSize, Operand seedGenerator, List> outputTypes, List outputShapes) { OperationBuilder opBuilder = scope.env().opBuilder("ShuffleDatasetV2", scope.makeOpName("ShuffleDatasetV2")); opBuilder.addInput(inputDataset.asOutput()); opBuilder.addInput(bufferSize.asOutput()); @@ -50,7 +51,7 @@ public static ShuffleDatasetV2 create(Scope scope, Operand inputDataset, Oper opBuilder = scope.applyControlDependencies(opBuilder); DataType[] outputTypesArray = new DataType[outputTypes.size()]; for (int i = 0; i < outputTypesArray.length; ++i) { - outputTypesArray[i] = DataType.fromClass(outputTypes.get(i)); + outputTypesArray[i] = outputTypes.get(i); } opBuilder.setAttr("output_types", outputTypesArray); Shape[] outputShapesArray = new Shape[outputShapes.size()]; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Size.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Size.java index 2b3c84e4ac0..3f2c3e53bfa 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Size.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Size.java @@ -25,6 +25,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.family.TNumber; /** * Returns the size of a tensor. @@ -42,7 +44,7 @@ * @param data type for {@code output()} output */ @Operator -public final class Size extends PrimitiveOp implements Operand { +public final class Size extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new Size operation. @@ -52,11 +54,11 @@ public final class Size extends PrimitiveOp implements Operand * @param outType * @return a new instance of Size */ - public static Size create(Scope scope, Operand input, Class outType) { + public static Size create(Scope scope, Operand input, DataType outType) { OperationBuilder opBuilder = scope.env().opBuilder("Size", scope.makeOpName("Size")); opBuilder.addInput(input.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); - opBuilder.setAttr("out_type", DataType.fromClass(outType)); + opBuilder.setAttr("out_type", outType); return new Size(opBuilder.build()); } @@ -67,8 +69,8 @@ public static Size create(Scope scope, Operand input * @param input * @return a new instance of Size */ - public static Size create(Scope scope, Operand input) { - return create(scope, input, Integer.class); + public static Size create(Scope scope, Operand input) { + return create(scope, input, TInt32.DTYPE); } /** diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Skipgram.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Skipgram.java index 612f394d615..d305126af82 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Skipgram.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Skipgram.java @@ -23,6 +23,9 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.TInt64; +import org.tensorflow.types.TString; /** * Parses a text file and creates a batch of examples. @@ -125,59 +128,59 @@ public static Options subsample(Float subsample) { /** * A vector of words in the corpus. */ - public Output vocabWord() { + public Output vocabWord() { return vocabWord; } /** * Frequencies of words. Sorted in the non-ascending order. */ - public Output vocabFreq() { + public Output vocabFreq() { return vocabFreq; } /** * Number of words per epoch in the data file. */ - public Output wordsPerEpoch() { + public Output wordsPerEpoch() { return wordsPerEpoch; } /** * The current epoch number. */ - public Output currentEpoch() { + public Output currentEpoch() { return currentEpoch; } /** * The total number of words processed so far. */ - public Output totalWordsProcessed() { + public Output totalWordsProcessed() { return totalWordsProcessed; } /** * A vector of word ids. */ - public Output examples() { + public Output examples() { return examples; } /** * A vector of word ids. */ - public Output labels() { + public Output labels() { return labels; } - private Output vocabWord; - private Output vocabFreq; - private Output wordsPerEpoch; - private Output currentEpoch; - private Output totalWordsProcessed; - private Output examples; - private Output labels; + private Output vocabWord; + private Output vocabFreq; + private Output wordsPerEpoch; + private Output currentEpoch; + private Output totalWordsProcessed; + private Output examples; + private Output labels; private Skipgram(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/SleepDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/SleepDataset.java index 70b419697be..870559adbcc 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/SleepDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/SleepDataset.java @@ -23,9 +23,10 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TInt64; /** */ @@ -41,14 +42,14 @@ public final class SleepDataset extends PrimitiveOp implements Operand { * @param outputShapes * @return a new instance of SleepDataset */ - public static SleepDataset create(Scope scope, Operand inputDataset, Operand sleepMicroseconds, List> outputTypes, List outputShapes) { + public static SleepDataset create(Scope scope, Operand inputDataset, Operand sleepMicroseconds, List> outputTypes, List outputShapes) { OperationBuilder opBuilder = scope.env().opBuilder("SleepDataset", scope.makeOpName("SleepDataset")); opBuilder.addInput(inputDataset.asOutput()); opBuilder.addInput(sleepMicroseconds.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); DataType[] outputTypesArray = new DataType[outputTypes.size()]; for (int i = 0; i < outputTypesArray.length; ++i) { - outputTypesArray[i] = DataType.fromClass(outputTypes.get(i)); + outputTypesArray[i] = outputTypes.get(i); } opBuilder.setAttr("output_types", outputTypesArray); Shape[] outputShapesArray = new Shape[outputShapes.size()]; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Slice.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Slice.java index fe591d2c7f3..eb3a8e36b6e 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Slice.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Slice.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Return a slice from 'input'. @@ -53,7 +54,7 @@ public final class Slice extends PrimitiveOp implements Operand { * size[i] = input.dim_size(i) - begin[i]). * @return a new instance of Slice */ - public static Slice create(Scope scope, Operand input, Operand begin, Operand size) { + public static Slice create(Scope scope, Operand input, Operand begin, Operand size) { OperationBuilder opBuilder = scope.env().opBuilder("Slice", scope.makeOpName("Slice")); opBuilder.addInput(input.asOutput()); opBuilder.addInput(begin.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/SlidingWindowDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/SlidingWindowDataset.java index 117a4738579..b816c50ee2d 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/SlidingWindowDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/SlidingWindowDataset.java @@ -23,9 +23,10 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TInt64; /** * Creates a dataset that passes a sliding window over `input_dataset`. @@ -47,7 +48,7 @@ public final class SlidingWindowDataset extends PrimitiveOp implements Operand inputDataset, Operand windowSize, Operand windowShift, Operand windowStride, List> outputTypes, List outputShapes) { + public static SlidingWindowDataset create(Scope scope, Operand inputDataset, Operand windowSize, Operand windowShift, Operand windowStride, List> outputTypes, List outputShapes) { OperationBuilder opBuilder = scope.env().opBuilder("SlidingWindowDataset", scope.makeOpName("SlidingWindowDataset")); opBuilder.addInput(inputDataset.asOutput()); opBuilder.addInput(windowSize.asOutput()); @@ -56,7 +57,7 @@ public static SlidingWindowDataset create(Scope scope, Operand inputDataset, opBuilder = scope.applyControlDependencies(opBuilder); DataType[] outputTypesArray = new DataType[outputTypes.size()]; for (int i = 0; i < outputTypesArray.length; ++i) { - outputTypesArray[i] = DataType.fromClass(outputTypes.get(i)); + outputTypesArray[i] = outputTypes.get(i); } opBuilder.setAttr("output_types", outputTypesArray); Shape[] outputShapesArray = new Shape[outputShapes.size()]; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/SnapshotDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/SnapshotDataset.java index 24ba2438bbf..168e304493f 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/SnapshotDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/SnapshotDataset.java @@ -23,9 +23,10 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TString; /** * Creates a dataset that will write to / read from a snapshot. @@ -139,14 +140,14 @@ private Options() { * @param options carries optional attributes values * @return a new instance of SnapshotDataset */ - public static SnapshotDataset create(Scope scope, Operand inputDataset, Operand path, List> outputTypes, List outputShapes, Options... options) { + public static SnapshotDataset create(Scope scope, Operand inputDataset, Operand path, List> outputTypes, List outputShapes, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("SnapshotDataset", scope.makeOpName("SnapshotDataset")); opBuilder.addInput(inputDataset.asOutput()); opBuilder.addInput(path.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); DataType[] outputTypesArray = new DataType[outputTypes.size()]; for (int i = 0; i < outputTypesArray.length; ++i) { - outputTypesArray[i] = DataType.fromClass(outputTypes.get(i)); + outputTypesArray[i] = outputTypes.get(i); } opBuilder.setAttr("output_types", outputTypesArray); Shape[] outputShapesArray = new Shape[outputShapes.size()]; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/SpaceToBatchNd.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/SpaceToBatchNd.java index 986a0477372..d1bd5bf6459 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/SpaceToBatchNd.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/SpaceToBatchNd.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * SpaceToBatch for N-D tensors of type T. @@ -143,7 +144,7 @@ public final class SpaceToBatchNd extends PrimitiveOp implements Operand { * regular convolution. * @return a new instance of SpaceToBatchNd */ - public static SpaceToBatchNd create(Scope scope, Operand input, Operand blockShape, Operand paddings) { + public static SpaceToBatchNd create(Scope scope, Operand input, Operand blockShape, Operand paddings) { OperationBuilder opBuilder = scope.env().opBuilder("SpaceToBatchND", scope.makeOpName("SpaceToBatchNd")); opBuilder.addInput(input.asOutput()); opBuilder.addInput(blockShape.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/SparseApplyAdagradV2.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/SparseApplyAdagradV2.java index bb5d24d6dba..9c1c6930990 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/SparseApplyAdagradV2.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/SparseApplyAdagradV2.java @@ -23,6 +23,7 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.family.TNumber; /** * Update relevant entries in '*var' and '*accum' according to the adagrad scheme. @@ -78,7 +79,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of SparseApplyAdagradV2 */ - public static SparseApplyAdagradV2 create(Scope scope, Operand var, Operand accum, Operand lr, Operand epsilon, Operand grad, Operand indices, Options... options) { + public static SparseApplyAdagradV2 create(Scope scope, Operand var, Operand accum, Operand lr, Operand epsilon, Operand grad, Operand indices, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("SparseApplyAdagradV2", scope.makeOpName("SparseApplyAdagradV2")); opBuilder.addInput(var.asOutput()); opBuilder.addInput(accum.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Split.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Split.java index f07b4ef8898..bb00161603a 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Split.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Split.java @@ -27,6 +27,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt32; /** * Splits a tensor into `num_split` tensors along one dimension. @@ -47,7 +48,7 @@ public final class Split extends PrimitiveOp implements Iterable> * `value.shape[split_dim]`. * @return a new instance of Split */ - public static Split create(Scope scope, Operand axis, Operand value, Long numSplit) { + public static Split create(Scope scope, Operand axis, Operand value, Long numSplit) { OperationBuilder opBuilder = scope.env().opBuilder("Split", scope.makeOpName("Split")); opBuilder.addInput(axis.asOutput()); opBuilder.addInput(value.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/SplitV.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/SplitV.java index bc2ca20f0a8..7f928062eab 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/SplitV.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/SplitV.java @@ -27,6 +27,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.family.TNumber; /** * Splits a tensor into `num_split` tensors along one dimension. @@ -49,7 +51,7 @@ public final class SplitV extends PrimitiveOp implements Iterable> * @param numSplit * @return a new instance of SplitV */ - public static SplitV create(Scope scope, Operand value, Operand sizeSplits, Operand axis, Long numSplit) { + public static SplitV create(Scope scope, Operand value, Operand sizeSplits, Operand axis, Long numSplit) { OperationBuilder opBuilder = scope.env().opBuilder("SplitV", scope.makeOpName("SplitV")); opBuilder.addInput(value.asOutput()); opBuilder.addInput(sizeSplits.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/StageClear.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/StageClear.java index a8232f541ff..9fcebb07647 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/StageClear.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/StageClear.java @@ -85,12 +85,12 @@ private Options() { * @param options carries optional attributes values * @return a new instance of StageClear */ - public static StageClear create(Scope scope, List> dtypes, Options... options) { + public static StageClear create(Scope scope, List> dtypes, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("StageClear", scope.makeOpName("StageClear")); opBuilder = scope.applyControlDependencies(opBuilder); DataType[] dtypesArray = new DataType[dtypes.size()]; for (int i = 0; i < dtypesArray.length; ++i) { - dtypesArray[i] = DataType.fromClass(dtypes.get(i)); + dtypesArray[i] = dtypes.get(i); } opBuilder.setAttr("dtypes", dtypesArray); if (options != null) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/StagePeek.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/StagePeek.java index c2b76b92ec0..6872a56a4a3 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/StagePeek.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/StagePeek.java @@ -28,6 +28,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt32; /** * Op peeks at the values at the specified index. If the @@ -94,13 +95,13 @@ private Options() { * @param options carries optional attributes values * @return a new instance of StagePeek */ - public static StagePeek create(Scope scope, Operand index, List> dtypes, Options... options) { + public static StagePeek create(Scope scope, Operand index, List> dtypes, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("StagePeek", scope.makeOpName("StagePeek")); opBuilder.addInput(index.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); DataType[] dtypesArray = new DataType[dtypes.size()]; for (int i = 0; i < dtypesArray.length; ++i) { - dtypesArray[i] = DataType.fromClass(dtypes.get(i)); + dtypesArray[i] = dtypes.get(i); } opBuilder.setAttr("dtypes", dtypesArray); if (options != null) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/StageSize.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/StageSize.java index 1822f34ed99..c2998294caa 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/StageSize.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/StageSize.java @@ -26,12 +26,13 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt32; /** * Op returns the number of elements in the underlying container. */ @Operator -public final class StageSize extends PrimitiveOp implements Operand { +public final class StageSize extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.core.StageSize} @@ -87,12 +88,12 @@ private Options() { * @param options carries optional attributes values * @return a new instance of StageSize */ - public static StageSize create(Scope scope, List> dtypes, Options... options) { + public static StageSize create(Scope scope, List> dtypes, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("StageSize", scope.makeOpName("StageSize")); opBuilder = scope.applyControlDependencies(opBuilder); DataType[] dtypesArray = new DataType[dtypes.size()]; for (int i = 0; i < dtypesArray.length; ++i) { - dtypesArray[i] = DataType.fromClass(dtypes.get(i)); + dtypesArray[i] = dtypes.get(i); } opBuilder.setAttr("dtypes", dtypesArray); if (options != null) { @@ -144,16 +145,16 @@ public static Options sharedName(String sharedName) { /** */ - public Output size() { + public Output size() { return size; } @Override - public Output asOutput() { + public Output asOutput() { return size; } - private Output size; + private Output size; private StageSize(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/StatefulRandomBinomial.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/StatefulRandomBinomial.java index 10f78abfbd8..0d00e4f994a 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/StatefulRandomBinomial.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/StatefulRandomBinomial.java @@ -25,12 +25,14 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt64; +import org.tensorflow.types.family.TNumber; /** * @param data type for {@code output()} output */ @Operator -public final class StatefulRandomBinomial extends PrimitiveOp implements Operand { +public final class StatefulRandomBinomial extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new StatefulRandomBinomial operation. @@ -44,7 +46,7 @@ public final class StatefulRandomBinomial extends PrimitiveOp * @param dtype * @return a new instance of StatefulRandomBinomial */ - public static StatefulRandomBinomial create(Scope scope, Operand resource, Operand algorithm, Operand shape, Operand counts, Operand probs, Class dtype) { + public static StatefulRandomBinomial create(Scope scope, Operand resource, Operand algorithm, Operand shape, Operand counts, Operand probs, DataType dtype) { OperationBuilder opBuilder = scope.env().opBuilder("StatefulRandomBinomial", scope.makeOpName("StatefulRandomBinomial")); opBuilder.addInput(resource.asOutput()); opBuilder.addInput(algorithm.asOutput()); @@ -52,7 +54,7 @@ public static StatefulRan opBuilder.addInput(counts.asOutput()); opBuilder.addInput(probs.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); - opBuilder.setAttr("dtype", DataType.fromClass(dtype)); + opBuilder.setAttr("dtype", dtype); return new StatefulRandomBinomial(opBuilder.build()); } @@ -67,8 +69,8 @@ public static StatefulRan * @param probs * @return a new instance of StatefulRandomBinomial */ - public static StatefulRandomBinomial create(Scope scope, Operand resource, Operand algorithm, Operand shape, Operand counts, Operand probs) { - return create(scope, resource, algorithm, shape, counts, probs, Long.class); + public static StatefulRandomBinomial create(Scope scope, Operand resource, Operand algorithm, Operand shape, Operand counts, Operand probs) { + return create(scope, resource, algorithm, shape, counts, probs, TInt64.DTYPE); } /** diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/StatefulStandardNormal.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/StatefulStandardNormal.java index f0f61c60ec8..bd32964990c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/StatefulStandardNormal.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/StatefulStandardNormal.java @@ -25,6 +25,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TFloat; /** * Outputs random values from a normal distribution. This op is deprecated in favor of op 'StatefulStandardNormalV2' @@ -45,12 +46,12 @@ public final class StatefulStandardNormal extends PrimitiveOp implements Oper * @param dtype The type of the output. * @return a new instance of StatefulStandardNormal */ - public static StatefulStandardNormal create(Scope scope, Operand resource, Operand shape, Class dtype) { + public static StatefulStandardNormal create(Scope scope, Operand resource, Operand shape, DataType dtype) { OperationBuilder opBuilder = scope.env().opBuilder("StatefulStandardNormal", scope.makeOpName("StatefulStandardNormal")); opBuilder.addInput(resource.asOutput()); opBuilder.addInput(shape.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); - opBuilder.setAttr("dtype", DataType.fromClass(dtype)); + opBuilder.setAttr("dtype", dtype); return new StatefulStandardNormal(opBuilder.build()); } @@ -62,8 +63,8 @@ public static StatefulStandardNormal create(Scope scope, Operand re * @param shape The shape of the output tensor. * @return a new instance of StatefulStandardNormal */ - public static StatefulStandardNormal create(Scope scope, Operand resource, Operand shape) { - return create(scope, resource, shape, Float.class); + public static StatefulStandardNormal create(Scope scope, Operand resource, Operand shape) { + return create(scope, resource, shape, TFloat.DTYPE); } /** diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/StatefulStandardNormalV2.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/StatefulStandardNormalV2.java index 0e12656238d..26b4fc2828a 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/StatefulStandardNormalV2.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/StatefulStandardNormalV2.java @@ -25,6 +25,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TFloat; +import org.tensorflow.types.TInt64; /** * Outputs random values from a normal distribution. @@ -46,13 +48,13 @@ public final class StatefulStandardNormalV2 extends PrimitiveOp implements Op * @param dtype The type of the output. * @return a new instance of StatefulStandardNormalV2 */ - public static StatefulStandardNormalV2 create(Scope scope, Operand resource, Operand algorithm, Operand shape, Class dtype) { + public static StatefulStandardNormalV2 create(Scope scope, Operand resource, Operand algorithm, Operand shape, DataType dtype) { OperationBuilder opBuilder = scope.env().opBuilder("StatefulStandardNormalV2", scope.makeOpName("StatefulStandardNormalV2")); opBuilder.addInput(resource.asOutput()); opBuilder.addInput(algorithm.asOutput()); opBuilder.addInput(shape.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); - opBuilder.setAttr("dtype", DataType.fromClass(dtype)); + opBuilder.setAttr("dtype", dtype); return new StatefulStandardNormalV2(opBuilder.build()); } @@ -65,8 +67,8 @@ public static StatefulStandardNormalV2 create(Scope scope, Operand * @param shape The shape of the output tensor. * @return a new instance of StatefulStandardNormalV2 */ - public static StatefulStandardNormalV2 create(Scope scope, Operand resource, Operand algorithm, Operand shape) { - return create(scope, resource, algorithm, shape, Float.class); + public static StatefulStandardNormalV2 create(Scope scope, Operand resource, Operand algorithm, Operand shape) { + return create(scope, resource, algorithm, shape, TFloat.DTYPE); } /** diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/StatefulTruncatedNormal.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/StatefulTruncatedNormal.java index fd190a04c0d..c7ff0be20c8 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/StatefulTruncatedNormal.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/StatefulTruncatedNormal.java @@ -24,6 +24,8 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TFloat; +import org.tensorflow.types.TInt64; /** * Outputs random values from a truncated normal distribution. @@ -46,13 +48,13 @@ public final class StatefulTruncatedNormal extends PrimitiveOp implements Ope * @param dtype The type of the output. * @return a new instance of StatefulTruncatedNormal */ - public static StatefulTruncatedNormal create(Scope scope, Operand resource, Operand algorithm, Operand shape, Class dtype) { + public static StatefulTruncatedNormal create(Scope scope, Operand resource, Operand algorithm, Operand shape, DataType dtype) { OperationBuilder opBuilder = scope.env().opBuilder("StatefulTruncatedNormal", scope.makeOpName("StatefulTruncatedNormal")); opBuilder.addInput(resource.asOutput()); opBuilder.addInput(algorithm.asOutput()); opBuilder.addInput(shape.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); - opBuilder.setAttr("dtype", DataType.fromClass(dtype)); + opBuilder.setAttr("dtype", dtype); return new StatefulTruncatedNormal(opBuilder.build()); } @@ -65,8 +67,8 @@ public static StatefulTruncatedNormal create(Scope scope, Operand r * @param shape The shape of the output tensor. * @return a new instance of StatefulTruncatedNormal */ - public static StatefulTruncatedNormal create(Scope scope, Operand resource, Operand algorithm, Operand shape) { - return create(scope, resource, algorithm, shape, Float.class); + public static StatefulTruncatedNormal create(Scope scope, Operand resource, Operand algorithm, Operand shape) { + return create(scope, resource, algorithm, shape, TFloat.DTYPE); } /** diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/StatefulUniform.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/StatefulUniform.java index e38edeff019..e657ffc68ab 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/StatefulUniform.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/StatefulUniform.java @@ -24,6 +24,8 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TFloat; +import org.tensorflow.types.TInt64; /** * Outputs random values from a uniform distribution. @@ -45,13 +47,13 @@ public final class StatefulUniform extends PrimitiveOp implements Operand * @param dtype The type of the output. * @return a new instance of StatefulUniform */ - public static StatefulUniform create(Scope scope, Operand resource, Operand algorithm, Operand shape, Class dtype) { + public static StatefulUniform create(Scope scope, Operand resource, Operand algorithm, Operand shape, DataType dtype) { OperationBuilder opBuilder = scope.env().opBuilder("StatefulUniform", scope.makeOpName("StatefulUniform")); opBuilder.addInput(resource.asOutput()); opBuilder.addInput(algorithm.asOutput()); opBuilder.addInput(shape.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); - opBuilder.setAttr("dtype", DataType.fromClass(dtype)); + opBuilder.setAttr("dtype", dtype); return new StatefulUniform(opBuilder.build()); } @@ -64,8 +66,8 @@ public static StatefulUniform create(Scope scope, Operand resource, * @param shape The shape of the output tensor. * @return a new instance of StatefulUniform */ - public static StatefulUniform create(Scope scope, Operand resource, Operand algorithm, Operand shape) { - return create(scope, resource, algorithm, shape, Float.class); + public static StatefulUniform create(Scope scope, Operand resource, Operand algorithm, Operand shape) { + return create(scope, resource, algorithm, shape, TFloat.DTYPE); } /** diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/StatefulUniformFullInt.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/StatefulUniformFullInt.java index 03d3a5c7c8a..638a9f0e617 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/StatefulUniformFullInt.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/StatefulUniformFullInt.java @@ -24,6 +24,7 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TInt64; /** * Outputs random integers from a uniform distribution. @@ -44,13 +45,13 @@ public final class StatefulUniformFullInt extends PrimitiveOp implements Oper * @param dtype The type of the output. * @return a new instance of StatefulUniformFullInt */ - public static StatefulUniformFullInt create(Scope scope, Operand resource, Operand algorithm, Operand shape, Class dtype) { + public static StatefulUniformFullInt create(Scope scope, Operand resource, Operand algorithm, Operand shape, DataType dtype) { OperationBuilder opBuilder = scope.env().opBuilder("StatefulUniformFullInt", scope.makeOpName("StatefulUniformFullInt")); opBuilder.addInput(resource.asOutput()); opBuilder.addInput(algorithm.asOutput()); opBuilder.addInput(shape.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); - opBuilder.setAttr("dtype", DataType.fromClass(dtype)); + opBuilder.setAttr("dtype", dtype); return new StatefulUniformFullInt(opBuilder.build()); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/StatefulUniformInt.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/StatefulUniformInt.java index c68cdf33f00..f456e3e9142 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/StatefulUniformInt.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/StatefulUniformInt.java @@ -23,6 +23,7 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TInt64; /** * Outputs random integers from a uniform distribution. @@ -50,7 +51,7 @@ public final class StatefulUniformInt extends PrimitiveOp implements Operand< * @param maxval Maximum value (exclusive, scalar). * @return a new instance of StatefulUniformInt */ - public static StatefulUniformInt create(Scope scope, Operand resource, Operand algorithm, Operand shape, Operand minval, Operand maxval) { + public static StatefulUniformInt create(Scope scope, Operand resource, Operand algorithm, Operand shape, Operand minval, Operand maxval) { OperationBuilder opBuilder = scope.env().opBuilder("StatefulUniformInt", scope.makeOpName("StatefulUniformInt")); opBuilder.addInput(resource.asOutput()); opBuilder.addInput(algorithm.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/StridedSlice.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/StridedSlice.java index 0e8361c5688..600bf02daad 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/StridedSlice.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/StridedSlice.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Return a strided slice from `input`. @@ -210,7 +211,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of StridedSlice */ - public static StridedSlice create(Scope scope, Operand input, Operand begin, Operand end, Operand strides, Options... options) { + public static StridedSlice create(Scope scope, Operand input, Operand begin, Operand end, Operand strides, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("StridedSlice", scope.makeOpName("StridedSlice")); opBuilder.addInput(input.asOutput()); opBuilder.addInput(begin.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/StridedSliceAssign.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/StridedSliceAssign.java index a08e68bcf52..86f9612843b 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/StridedSliceAssign.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/StridedSliceAssign.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Assign `value` to the sliced l-value reference of `ref`. @@ -107,7 +108,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of StridedSliceAssign */ - public static StridedSliceAssign create(Scope scope, Operand ref, Operand begin, Operand end, Operand strides, Operand value, Options... options) { + public static StridedSliceAssign create(Scope scope, Operand ref, Operand begin, Operand end, Operand strides, Operand value, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("StridedSliceAssign", scope.makeOpName("StridedSliceAssign")); opBuilder.addInput(ref.asOutput()); opBuilder.addInput(begin.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/StridedSliceGrad.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/StridedSliceGrad.java index d2db9ddf8b9..6d4312c229c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/StridedSliceGrad.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/StridedSliceGrad.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Returns the gradient of `StridedSlice`. @@ -109,7 +110,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of StridedSliceGrad */ - public static StridedSliceGrad create(Scope scope, Operand shape, Operand begin, Operand end, Operand strides, Operand dy, Options... options) { + public static StridedSliceGrad create(Scope scope, Operand shape, Operand begin, Operand end, Operand strides, Operand dy, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("StridedSliceGrad", scope.makeOpName("StridedSliceGrad")); opBuilder.addInput(shape.asOutput()); opBuilder.addInput(begin.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/StringLower.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/StringLower.java index d9552ccee37..39d8f789254 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/StringLower.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/StringLower.java @@ -24,11 +24,12 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TString; /** */ @Operator -public final class StringLower extends PrimitiveOp implements Operand { +public final class StringLower extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.core.StringLower} @@ -57,7 +58,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of StringLower */ - public static StringLower create(Scope scope, Operand input, Options... options) { + public static StringLower create(Scope scope, Operand input, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("StringLower", scope.makeOpName("StringLower")); opBuilder.addInput(input.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); @@ -80,16 +81,16 @@ public static Options encoding(String encoding) { /** */ - public Output output() { + public Output output() { return output; } @Override - public Output asOutput() { + public Output asOutput() { return output; } - private Output output; + private Output output; private StringLower(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/StringNGrams.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/StringNGrams.java index 82818eaad6b..d805d7bff8e 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/StringNGrams.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/StringNGrams.java @@ -25,6 +25,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TString; +import org.tensorflow.types.family.TNumber; /** * Creates ngrams from ragged string data. @@ -36,7 +38,7 @@ * @param data type for {@code ngramsSplits()} output */ @Operator -public final class StringNGrams extends PrimitiveOp { +public final class StringNGrams extends PrimitiveOp { /** * Factory method to create a class wrapping a new StringNGrams operation. @@ -58,7 +60,7 @@ public final class StringNGrams extends PrimitiveOp { * @param preserveShortSequences * @return a new instance of StringNGrams */ - public static StringNGrams create(Scope scope, Operand data, Operand dataSplits, String separator, List ngramWidths, String leftPad, String rightPad, Long padWidth, Boolean preserveShortSequences) { + public static StringNGrams create(Scope scope, Operand data, Operand dataSplits, String separator, List ngramWidths, String leftPad, String rightPad, Long padWidth, Boolean preserveShortSequences) { OperationBuilder opBuilder = scope.env().opBuilder("StringNGrams", scope.makeOpName("StringNGrams")); opBuilder.addInput(data.asOutput()); opBuilder.addInput(dataSplits.asOutput()); @@ -79,7 +81,7 @@ public static StringNGrams create(Scope scope, Operand ngrams() { + public Output ngrams() { return ngrams; } @@ -90,7 +92,7 @@ public Output ngramsSplits() { return ngramsSplits; } - private Output ngrams; + private Output ngrams; private Output ngramsSplits; private StringNGrams(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/StringUpper.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/StringUpper.java index 5a6792f855c..2453bb9e33d 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/StringUpper.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/StringUpper.java @@ -24,11 +24,12 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TString; /** */ @Operator -public final class StringUpper extends PrimitiveOp implements Operand { +public final class StringUpper extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.core.StringUpper} @@ -57,7 +58,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of StringUpper */ - public static StringUpper create(Scope scope, Operand input, Options... options) { + public static StringUpper create(Scope scope, Operand input, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("StringUpper", scope.makeOpName("StringUpper")); opBuilder.addInput(input.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); @@ -80,16 +81,16 @@ public static Options encoding(String encoding) { /** */ - public Output output() { + public Output output() { return output; } @Override - public Output asOutput() { + public Output asOutput() { return output; } - private Output output; + private Output output; private StringUpper(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Sum.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Sum.java index 71f003c2a3b..0262e892c8e 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Sum.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Sum.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Computes the sum of elements across dimensions of a tensor. @@ -67,7 +68,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of Sum */ - public static Sum create(Scope scope, Operand input, Operand axis, Options... options) { + public static Sum create(Scope scope, Operand input, Operand axis, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("Sum", scope.makeOpName("Sum")); opBuilder.addInput(input.asOutput()); opBuilder.addInput(axis.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/SwitchCond.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/SwitchCond.java index 111d0d3fd21..a7689e036b1 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/SwitchCond.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/SwitchCond.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TBool; /** * Forwards `data` to the output port determined by `pred`. @@ -46,7 +47,7 @@ public final class SwitchCond extends PrimitiveOp { * @param pred A scalar that specifies which output port will receive data. * @return a new instance of SwitchCond */ - public static SwitchCond create(Scope scope, Operand data, Operand pred) { + public static SwitchCond create(Scope scope, Operand data, Operand pred) { OperationBuilder opBuilder = scope.env().opBuilder("Switch", scope.makeOpName("SwitchCond")); opBuilder.addInput(data.asOutput()); opBuilder.addInput(pred.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TPUCompilationResult.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TPUCompilationResult.java index 2504c60fa08..468a2d9d539 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TPUCompilationResult.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TPUCompilationResult.java @@ -23,11 +23,12 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TString; /** * CompilationResultProto indicating the status of the TPU compilation. */ -public final class TPUCompilationResult extends PrimitiveOp implements Operand { +public final class TPUCompilationResult extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new TPUCompilationResult operation. @@ -43,16 +44,16 @@ public static TPUCompilationResult create(Scope scope) { /** */ - public Output output() { + public Output output() { return output; } @Override - public Output asOutput() { + public Output asOutput() { return output; } - private Output output; + private Output output; private TPUCompilationResult(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TPUEmbeddingActivations.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TPUEmbeddingActivations.java index 04769e14ff1..af55d307d7d 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TPUEmbeddingActivations.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TPUEmbeddingActivations.java @@ -23,6 +23,7 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TFloat; /** * An op enabling differentiation of TPU Embeddings. @@ -33,7 +34,7 @@ * differentiation of graphs containing embeddings via the TPU Embedding Python * libraries. */ -public final class TPUEmbeddingActivations extends PrimitiveOp implements Operand { +public final class TPUEmbeddingActivations extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new TPUEmbeddingActivations operation. @@ -47,7 +48,7 @@ public final class TPUEmbeddingActivations extends PrimitiveOp implements Operan * activations. * @return a new instance of TPUEmbeddingActivations */ - public static TPUEmbeddingActivations create(Scope scope, Operand embeddingVariable, Operand slicedActivations, Long tableId, Long lookupId) { + public static TPUEmbeddingActivations create(Scope scope, Operand embeddingVariable, Operand slicedActivations, Long tableId, Long lookupId) { OperationBuilder opBuilder = scope.env().opBuilder("TPUEmbeddingActivations", scope.makeOpName("TPUEmbeddingActivations")); opBuilder.addInput(embeddingVariable.asOutput()); opBuilder.addInput(slicedActivations.asOutput()); @@ -59,16 +60,16 @@ public static TPUEmbeddingActivations create(Scope scope, Operand embeddi /** */ - public Output output() { + public Output output() { return output; } @Override - public Output asOutput() { + public Output asOutput() { return output; } - private Output output; + private Output output; private TPUEmbeddingActivations(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TPUOrdinalSelector.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TPUOrdinalSelector.java index 3c1cf19fa90..a1e008b340f 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TPUOrdinalSelector.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TPUOrdinalSelector.java @@ -23,6 +23,7 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TInt32; /** * A TPU core selector Op. @@ -31,7 +32,7 @@ * (for regular inference) to execute the TPU program on. The output is * consumed by TPUPartitionedCall. */ -public final class TPUOrdinalSelector extends PrimitiveOp implements Operand { +public final class TPUOrdinalSelector extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new TPUOrdinalSelector operation. @@ -48,16 +49,16 @@ public static TPUOrdinalSelector create(Scope scope) { /** * A vector 1 or more TPU cores. */ - public Output deviceOrdinals() { + public Output deviceOrdinals() { return deviceOrdinals; } @Override - public Output asOutput() { + public Output asOutput() { return deviceOrdinals; } - private Output deviceOrdinals; + private Output deviceOrdinals; private TPUOrdinalSelector(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TemporaryVariable.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TemporaryVariable.java index cf6fd881f25..862282d1554 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TemporaryVariable.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TemporaryVariable.java @@ -22,7 +22,7 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; @@ -79,11 +79,11 @@ private Options() { * @param options carries optional attributes values * @return a new instance of TemporaryVariable */ - public static TemporaryVariable create(Scope scope, Shape shape, Class dtype, Options... options) { + public static TemporaryVariable create(Scope scope, Shape shape, DataType dtype, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("TemporaryVariable", scope.makeOpName("TemporaryVariable")); opBuilder = scope.applyControlDependencies(opBuilder); opBuilder.setAttr("shape", shape); - opBuilder.setAttr("dtype", DataType.fromClass(dtype)); + opBuilder.setAttr("dtype", dtype); if (options != null) { for (Options opts : options) { if (opts.varName != null) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArray.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArray.java index ff6879c5973..4179e7707de 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArray.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArray.java @@ -22,10 +22,12 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TFloat; +import org.tensorflow.types.TInt32; /** * An array of Tensors of given size. @@ -111,11 +113,11 @@ private Options() { * @param options carries optional attributes values * @return a new instance of TensorArray */ - public static TensorArray create(Scope scope, Operand size, Class dtype, Options... options) { + public static TensorArray create(Scope scope, Operand size, DataType dtype, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("TensorArrayV3", scope.makeOpName("TensorArray")); opBuilder.addInput(size.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); - opBuilder.setAttr("dtype", DataType.fromClass(dtype)); + opBuilder.setAttr("dtype", dtype); if (options != null) { for (Options opts : options) { if (opts.elementShape != null) { @@ -195,12 +197,12 @@ public Output handle() { /** * A scalar used to control gradient flow. */ - public Output flow() { + public Output flow() { return flow; } private Output handle; - private Output flow; + private Output flow; private TensorArray(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArrayConcat.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArrayConcat.java index a1ebefdb5d3..f2164e72042 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArrayConcat.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArrayConcat.java @@ -22,10 +22,12 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TFloat; +import org.tensorflow.types.TInt64; /** * Concat the elements from the TensorArray into value `value`. @@ -78,12 +80,12 @@ private Options() { * @param options carries optional attributes values * @return a new instance of TensorArrayConcat */ - public static TensorArrayConcat create(Scope scope, Operand handle, Operand flowIn, Class dtype, Options... options) { + public static TensorArrayConcat create(Scope scope, Operand handle, Operand flowIn, DataType dtype, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("TensorArrayConcatV3", scope.makeOpName("TensorArrayConcat")); opBuilder.addInput(handle.asOutput()); opBuilder.addInput(flowIn.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); - opBuilder.setAttr("dtype", DataType.fromClass(dtype)); + opBuilder.setAttr("dtype", dtype); if (options != null) { for (Options opts : options) { if (opts.elementShapeExcept0 != null) { @@ -117,12 +119,12 @@ public Output value() { * value output. In the example above, this would be the values: * `(n1, n2, ..., n(T-1))`. */ - public Output lengths() { + public Output lengths() { return lengths; } private Output value; - private Output lengths; + private Output lengths; private TensorArrayConcat(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArrayGather.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArrayGather.java index b278852627a..0d7620a1cb4 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArrayGather.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArrayGather.java @@ -22,10 +22,12 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TFloat; +import org.tensorflow.types.TInt32; /** * Gather specific elements from the TensorArray into output `value`. @@ -69,13 +71,13 @@ private Options() { * @param options carries optional attributes values * @return a new instance of TensorArrayGather */ - public static TensorArrayGather create(Scope scope, Operand handle, Operand indices, Operand flowIn, Class dtype, Options... options) { + public static TensorArrayGather create(Scope scope, Operand handle, Operand indices, Operand flowIn, DataType dtype, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("TensorArrayGatherV3", scope.makeOpName("TensorArrayGather")); opBuilder.addInput(handle.asOutput()); opBuilder.addInput(indices.asOutput()); opBuilder.addInput(flowIn.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); - opBuilder.setAttr("dtype", DataType.fromClass(dtype)); + opBuilder.setAttr("dtype", dtype); if (options != null) { for (Options opts : options) { if (opts.elementShape != null) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArrayGrad.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArrayGrad.java index d16394fcf2d..634e8008a1e 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArrayGrad.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArrayGrad.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TFloat; /** * Creates a TensorArray for storing the gradients of values in the given handle. @@ -78,7 +79,7 @@ public final class TensorArrayGrad extends PrimitiveOp { * to return. * @return a new instance of TensorArrayGrad */ - public static TensorArrayGrad create(Scope scope, Operand handle, Operand flowIn, String source) { + public static TensorArrayGrad create(Scope scope, Operand handle, Operand flowIn, String source) { OperationBuilder opBuilder = scope.env().opBuilder("TensorArrayGradV3", scope.makeOpName("TensorArrayGrad")); opBuilder.addInput(handle.asOutput()); opBuilder.addInput(flowIn.asOutput()); @@ -95,12 +96,12 @@ public Output gradHandle() { /** */ - public Output flowOut() { + public Output flowOut() { return flowOut; } private Output gradHandle; - private Output flowOut; + private Output flowOut; private TensorArrayGrad(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArrayGradWithShape.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArrayGradWithShape.java index 26fb985b1b4..7abf799834b 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArrayGradWithShape.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArrayGradWithShape.java @@ -24,6 +24,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TFloat; +import org.tensorflow.types.TInt32; /** * Creates a TensorArray for storing multiple gradients of values in the given handle. @@ -49,7 +51,7 @@ public final class TensorArrayGradWithShape extends PrimitiveOp { * to return. * @return a new instance of TensorArrayGradWithShape */ - public static TensorArrayGradWithShape create(Scope scope, Operand handle, Operand flowIn, Operand shapeToPrepend, String source) { + public static TensorArrayGradWithShape create(Scope scope, Operand handle, Operand flowIn, Operand shapeToPrepend, String source) { OperationBuilder opBuilder = scope.env().opBuilder("TensorArrayGradWithShape", scope.makeOpName("TensorArrayGradWithShape")); opBuilder.addInput(handle.asOutput()); opBuilder.addInput(flowIn.asOutput()); @@ -67,12 +69,12 @@ public Output gradHandle() { /** */ - public Output flowOut() { + public Output flowOut() { return flowOut; } private Output gradHandle; - private Output flowOut; + private Output flowOut; private TensorArrayGradWithShape(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArrayPack.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArrayPack.java index d7d12c53177..24397abdb0a 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArrayPack.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArrayPack.java @@ -22,10 +22,12 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TFloat; +import org.tensorflow.types.TString; /** * @param data type for {@code value()} output @@ -62,12 +64,12 @@ private Options() { * @param options carries optional attributes values * @return a new instance of TensorArrayPack */ - public static TensorArrayPack create(Scope scope, Operand handle, Operand flowIn, Class dtype, Options... options) { + public static TensorArrayPack create(Scope scope, Operand handle, Operand flowIn, DataType dtype, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("TensorArrayPack", scope.makeOpName("TensorArrayPack")); opBuilder.addInput(handle.asOutput()); opBuilder.addInput(flowIn.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); - opBuilder.setAttr("dtype", DataType.fromClass(dtype)); + opBuilder.setAttr("dtype", dtype); if (options != null) { for (Options opts : options) { if (opts.elementShape != null) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArrayRead.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArrayRead.java index 73c7e2046f6..9e315d9071c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArrayRead.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArrayRead.java @@ -25,6 +25,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TFloat; +import org.tensorflow.types.TInt32; /** * Read an element from the TensorArray into output `value`. @@ -44,13 +46,13 @@ public final class TensorArrayRead extends PrimitiveOp implements Operand * @param dtype The type of the elem that is returned. * @return a new instance of TensorArrayRead */ - public static TensorArrayRead create(Scope scope, Operand handle, Operand index, Operand flowIn, Class dtype) { + public static TensorArrayRead create(Scope scope, Operand handle, Operand index, Operand flowIn, DataType dtype) { OperationBuilder opBuilder = scope.env().opBuilder("TensorArrayReadV3", scope.makeOpName("TensorArrayRead")); opBuilder.addInput(handle.asOutput()); opBuilder.addInput(index.asOutput()); opBuilder.addInput(flowIn.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); - opBuilder.setAttr("dtype", DataType.fromClass(dtype)); + opBuilder.setAttr("dtype", dtype); return new TensorArrayRead(opBuilder.build()); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArrayScatter.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArrayScatter.java index f67302ef00b..3bdd24978d3 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArrayScatter.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArrayScatter.java @@ -24,6 +24,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TFloat; +import org.tensorflow.types.TInt32; /** * Scatter the data from the input value into specific TensorArray elements. @@ -31,7 +33,7 @@ * `indices` must be a vector, its length must match the first dim of `value`. */ @Operator -public final class TensorArrayScatter extends PrimitiveOp implements Operand { +public final class TensorArrayScatter extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new TensorArrayScatter operation. @@ -43,7 +45,7 @@ public final class TensorArrayScatter extends PrimitiveOp implements Operand TensorArrayScatter create(Scope scope, Operand handle, Operand indices, Operand value, Operand flowIn) { + public static TensorArrayScatter create(Scope scope, Operand handle, Operand indices, Operand value, Operand flowIn) { OperationBuilder opBuilder = scope.env().opBuilder("TensorArrayScatterV3", scope.makeOpName("TensorArrayScatter")); opBuilder.addInput(handle.asOutput()); opBuilder.addInput(indices.asOutput()); @@ -56,16 +58,16 @@ public static TensorArrayScatter create(Scope scope, Operand handle, Oper /** * A float scalar that enforces proper chaining of operations. */ - public Output flowOut() { + public Output flowOut() { return flowOut; } @Override - public Output asOutput() { + public Output asOutput() { return flowOut; } - private Output flowOut; + private Output flowOut; private TensorArrayScatter(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArraySize.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArraySize.java index 1ff64e8d978..f6e5036eaab 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArraySize.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArraySize.java @@ -24,12 +24,14 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TFloat; +import org.tensorflow.types.TInt32; /** * Get the current size of the TensorArray. */ @Operator -public final class TensorArraySize extends PrimitiveOp implements Operand { +public final class TensorArraySize extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new TensorArraySize operation. @@ -39,7 +41,7 @@ public final class TensorArraySize extends PrimitiveOp implements Operand handle, Operand flowIn) { + public static TensorArraySize create(Scope scope, Operand handle, Operand flowIn) { OperationBuilder opBuilder = scope.env().opBuilder("TensorArraySizeV3", scope.makeOpName("TensorArraySize")); opBuilder.addInput(handle.asOutput()); opBuilder.addInput(flowIn.asOutput()); @@ -50,16 +52,16 @@ public static TensorArraySize create(Scope scope, Operand handle, Operand size() { + public Output size() { return size; } @Override - public Output asOutput() { + public Output asOutput() { return size; } - private Output size; + private Output size; private TensorArraySize(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArraySplit.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArraySplit.java index 92d1998daff..5c5acbc4b17 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArraySplit.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArraySplit.java @@ -24,6 +24,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TFloat; +import org.tensorflow.types.TInt64; /** * Split the data from the input value into TensorArray elements. @@ -51,7 +53,7 @@ * */ @Operator -public final class TensorArraySplit extends PrimitiveOp implements Operand { +public final class TensorArraySplit extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new TensorArraySplit operation. @@ -64,7 +66,7 @@ public final class TensorArraySplit extends PrimitiveOp implements Operand TensorArraySplit create(Scope scope, Operand handle, Operand value, Operand lengths, Operand flowIn) { + public static TensorArraySplit create(Scope scope, Operand handle, Operand value, Operand lengths, Operand flowIn) { OperationBuilder opBuilder = scope.env().opBuilder("TensorArraySplitV3", scope.makeOpName("TensorArraySplit")); opBuilder.addInput(handle.asOutput()); opBuilder.addInput(value.asOutput()); @@ -77,16 +79,16 @@ public static TensorArraySplit create(Scope scope, Operand handle, Operan /** * A float scalar that enforces proper chaining of operations. */ - public Output flowOut() { + public Output flowOut() { return flowOut; } @Override - public Output asOutput() { + public Output asOutput() { return flowOut; } - private Output flowOut; + private Output flowOut; private TensorArraySplit(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArrayUnpack.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArrayUnpack.java index 7123f91ca2f..d4fd8c1ea8d 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArrayUnpack.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArrayUnpack.java @@ -24,11 +24,13 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TFloat; +import org.tensorflow.types.TString; /** */ @Operator -public final class TensorArrayUnpack extends PrimitiveOp implements Operand { +public final class TensorArrayUnpack extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new TensorArrayUnpack operation. @@ -39,7 +41,7 @@ public final class TensorArrayUnpack extends PrimitiveOp implements Operand TensorArrayUnpack create(Scope scope, Operand handle, Operand value, Operand flowIn) { + public static TensorArrayUnpack create(Scope scope, Operand handle, Operand value, Operand flowIn) { OperationBuilder opBuilder = scope.env().opBuilder("TensorArrayUnpack", scope.makeOpName("TensorArrayUnpack")); opBuilder.addInput(handle.asOutput()); opBuilder.addInput(value.asOutput()); @@ -50,16 +52,16 @@ public static TensorArrayUnpack create(Scope scope, Operand handle, /** */ - public Output flowOut() { + public Output flowOut() { return flowOut; } @Override - public Output asOutput() { + public Output asOutput() { return flowOut; } - private Output flowOut; + private Output flowOut; private TensorArrayUnpack(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArrayWrite.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArrayWrite.java index ba7b307491d..dc65873f207 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArrayWrite.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArrayWrite.java @@ -24,12 +24,14 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TFloat; +import org.tensorflow.types.TInt32; /** * Push an element onto the tensor_array. */ @Operator -public final class TensorArrayWrite extends PrimitiveOp implements Operand { +public final class TensorArrayWrite extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new TensorArrayWrite operation. @@ -41,7 +43,7 @@ public final class TensorArrayWrite extends PrimitiveOp implements Operand TensorArrayWrite create(Scope scope, Operand handle, Operand index, Operand value, Operand flowIn) { + public static TensorArrayWrite create(Scope scope, Operand handle, Operand index, Operand value, Operand flowIn) { OperationBuilder opBuilder = scope.env().opBuilder("TensorArrayWriteV3", scope.makeOpName("TensorArrayWrite")); opBuilder.addInput(handle.asOutput()); opBuilder.addInput(index.asOutput()); @@ -54,16 +56,16 @@ public static TensorArrayWrite create(Scope scope, Operand handle, Operan /** * A float scalar that enforces proper chaining of operations. */ - public Output flowOut() { + public Output flowOut() { return flowOut; } @Override - public Output asOutput() { + public Output asOutput() { return flowOut; } - private Output flowOut; + private Output flowOut; private TensorArrayWrite(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorForestCreateTreeVariable.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorForestCreateTreeVariable.java index 5e77b4929ad..7d376f8b2eb 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorForestCreateTreeVariable.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorForestCreateTreeVariable.java @@ -22,6 +22,7 @@ import org.tensorflow.OperationBuilder; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TString; /** * Creates a tree resource and returns a handle to it. @@ -36,7 +37,7 @@ public final class TensorForestCreateTreeVariable extends PrimitiveOp { * @param treeConfig Serialized proto string of the boosted_trees.Tree. * @return a new instance of TensorForestCreateTreeVariable */ - public static TensorForestCreateTreeVariable create(Scope scope, Operand treeHandle, Operand treeConfig) { + public static TensorForestCreateTreeVariable create(Scope scope, Operand treeHandle, Operand treeConfig) { OperationBuilder opBuilder = scope.env().opBuilder("TensorForestCreateTreeVariable", scope.makeOpName("TensorForestCreateTreeVariable")); opBuilder.addInput(treeHandle.asOutput()); opBuilder.addInput(treeConfig.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorForestTreeDeserialize.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorForestTreeDeserialize.java index 1587f244af8..81dc608b273 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorForestTreeDeserialize.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorForestTreeDeserialize.java @@ -22,6 +22,7 @@ import org.tensorflow.OperationBuilder; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TString; /** * Deserializes a proto into the tree handle @@ -36,7 +37,7 @@ public final class TensorForestTreeDeserialize extends PrimitiveOp { * @param treeConfig Serialied proto string of the boosted_trees.Tree proto. * @return a new instance of TensorForestTreeDeserialize */ - public static TensorForestTreeDeserialize create(Scope scope, Operand treeHandle, Operand treeConfig) { + public static TensorForestTreeDeserialize create(Scope scope, Operand treeHandle, Operand treeConfig) { OperationBuilder opBuilder = scope.env().opBuilder("TensorForestTreeDeserialize", scope.makeOpName("TensorForestTreeDeserialize")); opBuilder.addInput(treeHandle.asOutput()); opBuilder.addInput(treeConfig.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorForestTreeIsInitializedOp.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorForestTreeIsInitializedOp.java index 154d6368488..1fd3f1c29c0 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorForestTreeIsInitializedOp.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorForestTreeIsInitializedOp.java @@ -23,11 +23,12 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TBool; /** * Checks whether a tree has been initialized. */ -public final class TensorForestTreeIsInitializedOp extends PrimitiveOp implements Operand { +public final class TensorForestTreeIsInitializedOp extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new TensorForestTreeIsInitializedOp operation. @@ -46,16 +47,16 @@ public static TensorForestTreeIsInitializedOp create(Scope scope, Operand tre /** * Whether the tree is initialized. */ - public Output isInitialized() { + public Output isInitialized() { return isInitialized; } @Override - public Output asOutput() { + public Output asOutput() { return isInitialized; } - private Output isInitialized; + private Output isInitialized; private TensorForestTreeIsInitializedOp(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorForestTreePredict.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorForestTreePredict.java index dcbd95d11ed..f6589857f6d 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorForestTreePredict.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorForestTreePredict.java @@ -23,11 +23,12 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TFloat; /** * Output the logits for the given input data */ -public final class TensorForestTreePredict extends PrimitiveOp implements Operand { +public final class TensorForestTreePredict extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new TensorForestTreePredict operation. @@ -38,7 +39,7 @@ public final class TensorForestTreePredict extends PrimitiveOp implements Operan * @param logitsDimension Scalar, dimension of the logits. * @return a new instance of TensorForestTreePredict */ - public static TensorForestTreePredict create(Scope scope, Operand treeHandle, Operand denseFeatures, Long logitsDimension) { + public static TensorForestTreePredict create(Scope scope, Operand treeHandle, Operand denseFeatures, Long logitsDimension) { OperationBuilder opBuilder = scope.env().opBuilder("TensorForestTreePredict", scope.makeOpName("TensorForestTreePredict")); opBuilder.addInput(treeHandle.asOutput()); opBuilder.addInput(denseFeatures.asOutput()); @@ -50,16 +51,16 @@ public static TensorForestTreePredict create(Scope scope, Operand treeHandle, /** * The logits predictions from the tree for each instance in the batch. */ - public Output logits() { + public Output logits() { return logits; } @Override - public Output asOutput() { + public Output asOutput() { return logits; } - private Output logits; + private Output logits; private TensorForestTreePredict(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorForestTreeSerialize.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorForestTreeSerialize.java index 2f2f9d65770..86f0cb9715b 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorForestTreeSerialize.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorForestTreeSerialize.java @@ -23,11 +23,12 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TString; /** * Serializes the tree handle to a proto */ -public final class TensorForestTreeSerialize extends PrimitiveOp implements Operand { +public final class TensorForestTreeSerialize extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new TensorForestTreeSerialize operation. @@ -46,16 +47,16 @@ public static TensorForestTreeSerialize create(Scope scope, Operand treeHandl /** * Serialied proto string of the tree resource. */ - public Output treeConfig() { + public Output treeConfig() { return treeConfig; } @Override - public Output asOutput() { + public Output asOutput() { return treeConfig; } - private Output treeConfig; + private Output treeConfig; private TensorForestTreeSerialize(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorForestTreeSize.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorForestTreeSize.java index 754be16d3a8..23a4b12f856 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorForestTreeSize.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorForestTreeSize.java @@ -23,11 +23,12 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TInt32; /** * Get the number of nodes in a tree */ -public final class TensorForestTreeSize extends PrimitiveOp implements Operand { +public final class TensorForestTreeSize extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new TensorForestTreeSize operation. @@ -46,16 +47,16 @@ public static TensorForestTreeSize create(Scope scope, Operand treeHandle) { /** * The size of the tree. */ - public Output treeSize() { + public Output treeSize() { return treeSize; } @Override - public Output asOutput() { + public Output asOutput() { return treeSize; } - private Output treeSize; + private Output treeSize; private TensorForestTreeSize(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListConcat.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListConcat.java index 7e4cbb155ca..6f0cd88602c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListConcat.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListConcat.java @@ -22,10 +22,11 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt64; /** * Concats all tensors in the list along the 0th dimension. @@ -70,11 +71,11 @@ private Options() { * @param options carries optional attributes values * @return a new instance of TensorListConcat */ - public static TensorListConcat create(Scope scope, Operand inputHandle, Class elementDtype, Options... options) { + public static TensorListConcat create(Scope scope, Operand inputHandle, DataType elementDtype, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("TensorListConcat", scope.makeOpName("TensorListConcat")); opBuilder.addInput(inputHandle.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); - opBuilder.setAttr("element_dtype", DataType.fromClass(elementDtype)); + opBuilder.setAttr("element_dtype", elementDtype); if (options != null) { for (Options opts : options) { if (opts.elementShape != null) { @@ -100,12 +101,12 @@ public Output tensor() { /** */ - public Output lengths() { + public Output lengths() { return lengths; } private Output tensor; - private Output lengths; + private Output lengths; private TensorListConcat(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListConcatLists.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListConcatLists.java index 0fb9e873943..08bc621e62a 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListConcatLists.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListConcatLists.java @@ -40,12 +40,12 @@ public final class TensorListConcatLists extends PrimitiveOp implements Operand< * @param elementDtype * @return a new instance of TensorListConcatLists */ - public static TensorListConcatLists create(Scope scope, Operand inputA, Operand inputB, Class elementDtype) { + public static TensorListConcatLists create(Scope scope, Operand inputA, Operand inputB, DataType elementDtype) { OperationBuilder opBuilder = scope.env().opBuilder("TensorListConcatLists", scope.makeOpName("TensorListConcatLists")); opBuilder.addInput(inputA.asOutput()); opBuilder.addInput(inputB.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); - opBuilder.setAttr("element_dtype", DataType.fromClass(elementDtype)); + opBuilder.setAttr("element_dtype", elementDtype); return new TensorListConcatLists(opBuilder.build()); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListConcatV2.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListConcatV2.java index 9cfadcd50ba..f2d86f40597 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListConcatV2.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListConcatV2.java @@ -25,6 +25,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt64; +import org.tensorflow.types.family.TNumber; /** * Concats all tensors in the list along the 0th dimension. @@ -57,13 +59,13 @@ public final class TensorListConcatV2 extends PrimitiveOp { * @param elementDtype * @return a new instance of TensorListConcatV2 */ - public static TensorListConcatV2 create(Scope scope, Operand inputHandle, Operand elementShape, Operand leadingDims, Class elementDtype) { + public static TensorListConcatV2 create(Scope scope, Operand inputHandle, Operand elementShape, Operand leadingDims, DataType elementDtype) { OperationBuilder opBuilder = scope.env().opBuilder("TensorListConcatV2", scope.makeOpName("TensorListConcatV2")); opBuilder.addInput(inputHandle.asOutput()); opBuilder.addInput(elementShape.asOutput()); opBuilder.addInput(leadingDims.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); - opBuilder.setAttr("element_dtype", DataType.fromClass(elementDtype)); + opBuilder.setAttr("element_dtype", elementDtype); return new TensorListConcatV2(opBuilder.build()); } @@ -75,12 +77,12 @@ public Output tensor() { /** */ - public Output lengths() { + public Output lengths() { return lengths; } private Output tensor; - private Output lengths; + private Output lengths; private TensorListConcatV2(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListElementShape.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListElementShape.java index 2a2fc172c2b..1c328a345dd 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListElementShape.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListElementShape.java @@ -25,6 +25,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * The shape of the elements of the given list, as a tensor. @@ -35,7 +36,7 @@ * @param data type for {@code elementShape()} output */ @Operator -public final class TensorListElementShape extends PrimitiveOp implements Operand { +public final class TensorListElementShape extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new TensorListElementShape operation. @@ -45,11 +46,11 @@ public final class TensorListElementShape extends PrimitiveOp * @param shapeType * @return a new instance of TensorListElementShape */ - public static TensorListElementShape create(Scope scope, Operand inputHandle, Class shapeType) { + public static TensorListElementShape create(Scope scope, Operand inputHandle, DataType shapeType) { OperationBuilder opBuilder = scope.env().opBuilder("TensorListElementShape", scope.makeOpName("TensorListElementShape")); opBuilder.addInput(inputHandle.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); - opBuilder.setAttr("shape_type", DataType.fromClass(shapeType)); + opBuilder.setAttr("shape_type", shapeType); return new TensorListElementShape(opBuilder.build()); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListFromTensor.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListFromTensor.java index 4d68d970eb8..6374c888d84 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListFromTensor.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListFromTensor.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Creates a TensorList which, when stacked, has the value of `tensor`. @@ -44,7 +45,7 @@ public final class TensorListFromTensor extends PrimitiveOp implements Operand TensorListFromTensor create(Scope scope, Operand tensor, Operand elementShape) { + public static TensorListFromTensor create(Scope scope, Operand tensor, Operand elementShape) { OperationBuilder opBuilder = scope.env().opBuilder("TensorListFromTensor", scope.makeOpName("TensorListFromTensor")); opBuilder.addInput(tensor.asOutput()); opBuilder.addInput(elementShape.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListGather.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListGather.java index 6f54e07d340..e7ff94ee87a 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListGather.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListGather.java @@ -25,6 +25,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt32; /** * Creates a Tensor by indexing into the TensorList. @@ -51,13 +52,13 @@ public final class TensorListGather extends PrimitiveOp implements Operand * @param elementDtype * @return a new instance of TensorListGather */ - public static TensorListGather create(Scope scope, Operand inputHandle, Operand indices, Operand elementShape, Class elementDtype) { + public static TensorListGather create(Scope scope, Operand inputHandle, Operand indices, Operand elementShape, DataType elementDtype) { OperationBuilder opBuilder = scope.env().opBuilder("TensorListGather", scope.makeOpName("TensorListGather")); opBuilder.addInput(inputHandle.asOutput()); opBuilder.addInput(indices.asOutput()); opBuilder.addInput(elementShape.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); - opBuilder.setAttr("element_dtype", DataType.fromClass(elementDtype)); + opBuilder.setAttr("element_dtype", elementDtype); return new TensorListGather(opBuilder.build()); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListGetItem.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListGetItem.java index 7accbc95616..270375e33a2 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListGetItem.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListGetItem.java @@ -25,6 +25,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt32; /** * @param data type for {@code item()} output @@ -42,13 +43,13 @@ public final class TensorListGetItem extends PrimitiveOp implements Operand TensorListGetItem create(Scope scope, Operand inputHandle, Operand index, Operand elementShape, Class elementDtype) { + public static TensorListGetItem create(Scope scope, Operand inputHandle, Operand index, Operand elementShape, DataType elementDtype) { OperationBuilder opBuilder = scope.env().opBuilder("TensorListGetItem", scope.makeOpName("TensorListGetItem")); opBuilder.addInput(inputHandle.asOutput()); opBuilder.addInput(index.asOutput()); opBuilder.addInput(elementShape.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); - opBuilder.setAttr("element_dtype", DataType.fromClass(elementDtype)); + opBuilder.setAttr("element_dtype", elementDtype); return new TensorListGetItem(opBuilder.build()); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListLength.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListLength.java index 68a2a09c424..f0a5747633a 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListLength.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListLength.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt32; /** * Returns the number of tensors in the input tensor list. @@ -32,7 +33,7 @@ * length: the number of tensors in the list */ @Operator -public final class TensorListLength extends PrimitiveOp implements Operand { +public final class TensorListLength extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new TensorListLength operation. @@ -50,16 +51,16 @@ public static TensorListLength create(Scope scope, Operand inputHandle) { /** */ - public Output length() { + public Output length() { return length; } @Override - public Output asOutput() { + public Output asOutput() { return length; } - private Output length; + private Output length; private TensorListLength(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListPopBack.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListPopBack.java index 57c0528f747..71e51bd5388 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListPopBack.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListPopBack.java @@ -25,6 +25,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt32; /** * Returns the last element of the input list as well as a list with all but that element. @@ -50,12 +51,12 @@ public final class TensorListPopBack extends PrimitiveOp { * @param elementDtype * @return a new instance of TensorListPopBack */ - public static TensorListPopBack create(Scope scope, Operand inputHandle, Operand elementShape, Class elementDtype) { + public static TensorListPopBack create(Scope scope, Operand inputHandle, Operand elementShape, DataType elementDtype) { OperationBuilder opBuilder = scope.env().opBuilder("TensorListPopBack", scope.makeOpName("TensorListPopBack")); opBuilder.addInput(inputHandle.asOutput()); opBuilder.addInput(elementShape.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); - opBuilder.setAttr("element_dtype", DataType.fromClass(elementDtype)); + opBuilder.setAttr("element_dtype", elementDtype); return new TensorListPopBack(opBuilder.build()); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListReserve.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListReserve.java index e6cbc6172cc..fe361c22f73 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListReserve.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListReserve.java @@ -25,6 +25,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.family.TNumber; /** * List of the given size with empty elements. @@ -46,12 +48,12 @@ public final class TensorListReserve extends PrimitiveOp implements Operand TensorListReserve create(Scope scope, Operand elementShape, Operand numElements, Class elementDtype) { + public static TensorListReserve create(Scope scope, Operand elementShape, Operand numElements, DataType elementDtype) { OperationBuilder opBuilder = scope.env().opBuilder("TensorListReserve", scope.makeOpName("TensorListReserve")); opBuilder.addInput(elementShape.asOutput()); opBuilder.addInput(numElements.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); - opBuilder.setAttr("element_dtype", DataType.fromClass(elementDtype)); + opBuilder.setAttr("element_dtype", elementDtype); return new TensorListReserve(opBuilder.build()); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListResize.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListResize.java index 5b7721a8584..8998c9bec90 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListResize.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListResize.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt32; /** * Resizes the list. @@ -44,7 +45,7 @@ public final class TensorListResize extends PrimitiveOp implements Operand inputHandle, Operand size) { + public static TensorListResize create(Scope scope, Operand inputHandle, Operand size) { OperationBuilder opBuilder = scope.env().opBuilder("TensorListResize", scope.makeOpName("TensorListResize")); opBuilder.addInput(inputHandle.asOutput()); opBuilder.addInput(size.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListScatter.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListScatter.java index 2c852c7f612..55f7c832e5a 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListScatter.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListScatter.java @@ -24,6 +24,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.family.TNumber; /** * Creates a TensorList by indexing into a Tensor. @@ -49,7 +51,7 @@ public final class TensorListScatter extends PrimitiveOp implements Operand TensorListScatter create(Scope scope, Operand tensor, Operand indices, Operand elementShape) { + public static TensorListScatter create(Scope scope, Operand tensor, Operand indices, Operand elementShape) { OperationBuilder opBuilder = scope.env().opBuilder("TensorListScatter", scope.makeOpName("TensorListScatter")); opBuilder.addInput(tensor.asOutput()); opBuilder.addInput(indices.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListScatterIntoExistingList.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListScatterIntoExistingList.java index 8b174850855..a57b738d828 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListScatterIntoExistingList.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListScatterIntoExistingList.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt32; /** * Scatters tensor at indices in an input list. @@ -48,7 +49,7 @@ public final class TensorListScatterIntoExistingList extends PrimitiveOp impleme * @param indices * @return a new instance of TensorListScatterIntoExistingList */ - public static TensorListScatterIntoExistingList create(Scope scope, Operand inputHandle, Operand tensor, Operand indices) { + public static TensorListScatterIntoExistingList create(Scope scope, Operand inputHandle, Operand tensor, Operand indices) { OperationBuilder opBuilder = scope.env().opBuilder("TensorListScatterIntoExistingList", scope.makeOpName("TensorListScatterIntoExistingList")); opBuilder.addInput(inputHandle.asOutput()); opBuilder.addInput(tensor.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListScatterV2.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListScatterV2.java index 26037b18856..10bcd87aeab 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListScatterV2.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListScatterV2.java @@ -24,6 +24,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.family.TNumber; /** * Creates a TensorList by indexing into a Tensor. @@ -53,7 +55,7 @@ public final class TensorListScatterV2 extends PrimitiveOp implements Operand TensorListScatterV2 create(Scope scope, Operand tensor, Operand indices, Operand elementShape, Operand numElements) { + public static TensorListScatterV2 create(Scope scope, Operand tensor, Operand indices, Operand elementShape, Operand numElements) { OperationBuilder opBuilder = scope.env().opBuilder("TensorListScatterV2", scope.makeOpName("TensorListScatterV2")); opBuilder.addInput(tensor.asOutput()); opBuilder.addInput(indices.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListSetItem.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListSetItem.java index b2c6887ea52..13f1f90a024 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListSetItem.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListSetItem.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt32; /** */ @@ -39,7 +40,7 @@ public final class TensorListSetItem extends PrimitiveOp implements Operand TensorListSetItem create(Scope scope, Operand inputHandle, Operand index, Operand item) { + public static TensorListSetItem create(Scope scope, Operand inputHandle, Operand index, Operand item) { OperationBuilder opBuilder = scope.env().opBuilder("TensorListSetItem", scope.makeOpName("TensorListSetItem")); opBuilder.addInput(inputHandle.asOutput()); opBuilder.addInput(index.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListSplit.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListSplit.java index 1aabadcea15..de344f32e79 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListSplit.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListSplit.java @@ -24,6 +24,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt64; +import org.tensorflow.types.family.TNumber; /** * Splits a tensor into a list. @@ -48,7 +50,7 @@ public final class TensorListSplit extends PrimitiveOp implements Operand TensorListSplit create(Scope scope, Operand tensor, Operand elementShape, Operand lengths) { + public static TensorListSplit create(Scope scope, Operand tensor, Operand elementShape, Operand lengths) { OperationBuilder opBuilder = scope.env().opBuilder("TensorListSplit", scope.makeOpName("TensorListSplit")); opBuilder.addInput(tensor.asOutput()); opBuilder.addInput(elementShape.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListStack.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListStack.java index 0e7c18a51fc..1227e52a828 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListStack.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListStack.java @@ -25,6 +25,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt32; /** * Stacks all tensors in the list. @@ -70,12 +71,12 @@ private Options() { * @param options carries optional attributes values * @return a new instance of TensorListStack */ - public static TensorListStack create(Scope scope, Operand inputHandle, Operand elementShape, Class elementDtype, Options... options) { + public static TensorListStack create(Scope scope, Operand inputHandle, Operand elementShape, DataType elementDtype, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("TensorListStack", scope.makeOpName("TensorListStack")); opBuilder.addInput(inputHandle.asOutput()); opBuilder.addInput(elementShape.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); - opBuilder.setAttr("element_dtype", DataType.fromClass(elementDtype)); + opBuilder.setAttr("element_dtype", elementDtype); if (options != null) { for (Options opts : options) { if (opts.numElements != null) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorScatterAdd.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorScatterAdd.java index 2254d8cc222..c8aae87abf9 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorScatterAdd.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorScatterAdd.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Adds sparse `updates` to an existing tensor according to `indices`. @@ -103,7 +104,7 @@ public final class TensorScatterAdd extends PrimitiveOp implements Operand * @param updates Updates to scatter into output. * @return a new instance of TensorScatterAdd */ - public static TensorScatterAdd create(Scope scope, Operand tensor, Operand indices, Operand updates) { + public static TensorScatterAdd create(Scope scope, Operand tensor, Operand indices, Operand updates) { OperationBuilder opBuilder = scope.env().opBuilder("TensorScatterAdd", scope.makeOpName("TensorScatterAdd")); opBuilder.addInput(tensor.asOutput()); opBuilder.addInput(indices.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorScatterSub.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorScatterSub.java index 5c721652041..50d80af65b9 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorScatterSub.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorScatterSub.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Subtracts sparse `updates` from an existing tensor according to `indices`. @@ -103,7 +104,7 @@ public final class TensorScatterSub extends PrimitiveOp implements Operand * @param updates Updates to scatter into output. * @return a new instance of TensorScatterSub */ - public static TensorScatterSub create(Scope scope, Operand tensor, Operand indices, Operand updates) { + public static TensorScatterSub create(Scope scope, Operand tensor, Operand indices, Operand updates) { OperationBuilder opBuilder = scope.env().opBuilder("TensorScatterSub", scope.makeOpName("TensorScatterSub")); opBuilder.addInput(tensor.asOutput()); opBuilder.addInput(indices.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorScatterUpdate.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorScatterUpdate.java index f8337f3d3d8..b1d098f076b 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorScatterUpdate.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorScatterUpdate.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Scatter `updates` into an existing tensor according to `indices`. @@ -114,7 +115,7 @@ public final class TensorScatterUpdate extends PrimitiveOp implements Operand * @param updates Updates to scatter into output. * @return a new instance of TensorScatterUpdate */ - public static TensorScatterUpdate create(Scope scope, Operand tensor, Operand indices, Operand updates) { + public static TensorScatterUpdate create(Scope scope, Operand tensor, Operand indices, Operand updates) { OperationBuilder opBuilder = scope.env().opBuilder("TensorScatterUpdate", scope.makeOpName("TensorScatterUpdate")); opBuilder.addInput(tensor.asOutput()); opBuilder.addInput(indices.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorStridedSliceUpdate.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorStridedSliceUpdate.java index 8d55b509994..f495c2da149 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorStridedSliceUpdate.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorStridedSliceUpdate.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Assign `value` to the sliced l-value reference of `input`. @@ -107,7 +108,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of TensorStridedSliceUpdate */ - public static TensorStridedSliceUpdate create(Scope scope, Operand input, Operand begin, Operand end, Operand strides, Operand value, Options... options) { + public static TensorStridedSliceUpdate create(Scope scope, Operand input, Operand begin, Operand end, Operand strides, Operand value, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("TensorStridedSliceUpdate", scope.makeOpName("TensorStridedSliceUpdate")); opBuilder.addInput(input.asOutput()); opBuilder.addInput(begin.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ThreadPoolDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ThreadPoolDataset.java index fa1ac884355..743a66768e9 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ThreadPoolDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ThreadPoolDataset.java @@ -23,7 +23,7 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; @@ -42,14 +42,14 @@ public final class ThreadPoolDataset extends PrimitiveOp implements Operand inputDataset, Operand threadPool, List> outputTypes, List outputShapes) { + public static ThreadPoolDataset create(Scope scope, Operand inputDataset, Operand threadPool, List> outputTypes, List outputShapes) { OperationBuilder opBuilder = scope.env().opBuilder("ThreadPoolDataset", scope.makeOpName("ThreadPoolDataset")); opBuilder.addInput(inputDataset.asOutput()); opBuilder.addInput(threadPool.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); DataType[] outputTypesArray = new DataType[outputTypes.size()]; for (int i = 0; i < outputTypesArray.length; ++i) { - outputTypesArray[i] = DataType.fromClass(outputTypes.get(i)); + outputTypesArray[i] = outputTypes.get(i); } opBuilder.setAttr("output_types", outputTypesArray); Shape[] outputShapesArray = new Shape[outputShapes.size()]; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Tile.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Tile.java index f1d174cce9a..21003eee93c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Tile.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Tile.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Constructs a tensor by tiling a given tensor. @@ -47,7 +48,7 @@ public final class Tile extends PrimitiveOp implements Operand { * @param multiples 1-D. Length must be the same as the number of dimensions in `input` * @return a new instance of Tile */ - public static Tile create(Scope scope, Operand input, Operand multiples) { + public static Tile create(Scope scope, Operand input, Operand multiples) { OperationBuilder opBuilder = scope.env().opBuilder("Tile", scope.makeOpName("Tile")); opBuilder.addInput(input.asOutput()); opBuilder.addInput(multiples.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Timestamp.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Timestamp.java index 4db9d22f4b2..8966533ef97 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Timestamp.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Timestamp.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TDouble; /** * Provides the time since epoch in seconds. @@ -34,7 +35,7 @@ * to the graph. */ @Operator -public final class Timestamp extends PrimitiveOp implements Operand { +public final class Timestamp extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new Timestamp operation. @@ -50,16 +51,16 @@ public static Timestamp create(Scope scope) { /** */ - public Output ts() { + public Output ts() { return ts; } @Override - public Output asOutput() { + public Output asOutput() { return ts; } - private Output ts; + private Output ts; private Timestamp(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TryRpc.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TryRpc.java index b0b8a5b7d60..95f429d8bac 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TryRpc.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TryRpc.java @@ -24,6 +24,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.TString; /** * Perform batches of RPC requests. @@ -135,7 +137,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of TryRpc */ - public static TryRpc create(Scope scope, Operand address, Operand method, Operand request, Options... options) { + public static TryRpc create(Scope scope, Operand address, Operand method, Operand request, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("TryRpc", scope.makeOpName("TryRpc")); opBuilder.addInput(address.asOutput()); opBuilder.addInput(method.asOutput()); @@ -186,14 +188,14 @@ public static Options timeoutInMs(Long timeoutInMs) { /** * Same shape as `request`. Serialized proto strings: the rpc responses. */ - public Output response() { + public Output response() { return response; } /** * Same shape as `request`. Values correspond to tensorflow Status enum codes. */ - public Output statusCode() { + public Output statusCode() { return statusCode; } @@ -201,13 +203,13 @@ public Output statusCode() { * Same shape as `request`. Values correspond to Status messages * returned from the RPC calls. */ - public Output statusMessage() { + public Output statusMessage() { return statusMessage; } - private Output response; - private Output statusCode; - private Output statusMessage; + private Output response; + private Output statusCode; + private Output statusMessage; private TryRpc(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Unbatch.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Unbatch.java index 6250f31703d..e3fcea78282 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Unbatch.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Unbatch.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt64; /** * Reverses the operation of Batch for a single output Tensor. @@ -91,7 +92,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of Unbatch */ - public static Unbatch create(Scope scope, Operand batchedTensor, Operand batchIndex, Operand id, Long timeoutMicros, Options... options) { + public static Unbatch create(Scope scope, Operand batchedTensor, Operand batchIndex, Operand id, Long timeoutMicros, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("Unbatch", scope.makeOpName("Unbatch")); opBuilder.addInput(batchedTensor.asOutput()); opBuilder.addInput(batchIndex.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/UnbatchGrad.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/UnbatchGrad.java index 801444645cb..8eabfb62a3a 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/UnbatchGrad.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/UnbatchGrad.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt64; /** * Gradient of Unbatch. @@ -87,7 +88,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of UnbatchGrad */ - public static UnbatchGrad create(Scope scope, Operand originalInput, Operand batchIndex, Operand grad, Operand id, Options... options) { + public static UnbatchGrad create(Scope scope, Operand originalInput, Operand batchIndex, Operand grad, Operand id, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("UnbatchGrad", scope.makeOpName("UnbatchGrad")); opBuilder.addInput(originalInput.asOutput()); opBuilder.addInput(batchIndex.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/UnicodeDecode.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/UnicodeDecode.java index 36c46dd3a06..b98d39feba8 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/UnicodeDecode.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/UnicodeDecode.java @@ -24,6 +24,10 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.TInt64; +import org.tensorflow.types.TString; +import org.tensorflow.types.family.TNumber; /** * Decodes each string in `input` into a sequence of Unicode code points. @@ -47,7 +51,7 @@ * * @param data type for {@code rowSplits()} output */ -public final class UnicodeDecode extends PrimitiveOp { +public final class UnicodeDecode extends PrimitiveOp { /** * Optional attributes for {@link org.tensorflow.op.core.UnicodeDecode} @@ -108,12 +112,12 @@ private Options() { * @param options carries optional attributes values * @return a new instance of UnicodeDecode */ - public static UnicodeDecode create(Scope scope, Operand input, String inputEncoding, Class Tsplits, Options... options) { + public static UnicodeDecode create(Scope scope, Operand input, String inputEncoding, DataType Tsplits, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("UnicodeDecode", scope.makeOpName("UnicodeDecode")); opBuilder.addInput(input.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); opBuilder.setAttr("input_encoding", inputEncoding); - opBuilder.setAttr("Tsplits", DataType.fromClass(Tsplits)); + opBuilder.setAttr("Tsplits", Tsplits); if (options != null) { for (Options opts : options) { if (opts.errors != null) { @@ -141,8 +145,8 @@ public static UnicodeDecode create(Scope scope, Operand create(Scope scope, Operand input, String inputEncoding, Options... options) { - return create(scope, input, inputEncoding, Long.class, options); + public static UnicodeDecode create(Scope scope, Operand input, String inputEncoding, Options... options) { + return create(scope, input, inputEncoding, TInt64.DTYPE, options); } /** @@ -186,12 +190,12 @@ public Output rowSplits() { /** * A 1D int32 Tensor containing the decoded codepoints. */ - public Output charValues() { + public Output charValues() { return charValues; } private Output rowSplits; - private Output charValues; + private Output charValues; private UnicodeDecode(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/UnicodeEncode.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/UnicodeEncode.java index 93304921ef3..8c2d0da4cf7 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/UnicodeEncode.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/UnicodeEncode.java @@ -23,6 +23,9 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.TString; +import org.tensorflow.types.family.TNumber; /** * Encode a tensor of ints into unicode strings. @@ -43,7 +46,7 @@ * } * */ -public final class UnicodeEncode extends PrimitiveOp implements Operand { +public final class UnicodeEncode extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.core.UnicodeEncode} @@ -95,7 +98,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of UnicodeEncode */ - public static UnicodeEncode create(Scope scope, Operand inputValues, Operand inputSplits, String outputEncoding, Options... options) { + public static UnicodeEncode create(Scope scope, Operand inputValues, Operand inputSplits, String outputEncoding, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("UnicodeEncode", scope.makeOpName("UnicodeEncode")); opBuilder.addInput(inputValues.asOutput()); opBuilder.addInput(inputSplits.asOutput()); @@ -140,16 +143,16 @@ public static Options replacementChar(Long replacementChar) { /** * The 1-D Tensor of strings encoded from the provided unicode codepoints. */ - public Output output() { + public Output output() { return output; } @Override - public Output asOutput() { + public Output asOutput() { return output; } - private Output output; + private Output output; private UnicodeEncode(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Unique.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Unique.java index ae743e96409..2b081bd36e9 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Unique.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Unique.java @@ -25,6 +25,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.family.TNumber; /** * Finds unique elements along an axis of a tensor. @@ -73,7 +75,7 @@ * @param data type for {@code idx()} output */ @Operator -public final class Unique extends PrimitiveOp { +public final class Unique extends PrimitiveOp { /** * Factory method to create a class wrapping a new Unique operation. @@ -85,12 +87,12 @@ public final class Unique extends PrimitiveOp { * @param outIdx * @return a new instance of Unique */ - public static Unique create(Scope scope, Operand x, Operand axis, Class outIdx) { + public static Unique create(Scope scope, Operand x, Operand axis, DataType outIdx) { OperationBuilder opBuilder = scope.env().opBuilder("UniqueV2", scope.makeOpName("Unique")); opBuilder.addInput(x.asOutput()); opBuilder.addInput(axis.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); - opBuilder.setAttr("out_idx", DataType.fromClass(outIdx)); + opBuilder.setAttr("out_idx", outIdx); return new Unique(opBuilder.build()); } @@ -103,8 +105,8 @@ public static Unique create(Scope * find the unique elements. * @return a new instance of Unique */ - public static Unique create(Scope scope, Operand x, Operand axis) { - return create(scope, x, axis, Integer.class); + public static Unique create(Scope scope, Operand x, Operand axis) { + return create(scope, x, axis, TInt32.DTYPE); } /** diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/UniqueDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/UniqueDataset.java index f07590cdf22..38a5add2c7b 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/UniqueDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/UniqueDataset.java @@ -23,7 +23,7 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; @@ -41,13 +41,13 @@ public final class UniqueDataset extends PrimitiveOp implements Operand * @param outputShapes * @return a new instance of UniqueDataset */ - public static UniqueDataset create(Scope scope, Operand inputDataset, List> outputTypes, List outputShapes) { + public static UniqueDataset create(Scope scope, Operand inputDataset, List> outputTypes, List outputShapes) { OperationBuilder opBuilder = scope.env().opBuilder("UniqueDataset", scope.makeOpName("UniqueDataset")); opBuilder.addInput(inputDataset.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); DataType[] outputTypesArray = new DataType[outputTypes.size()]; for (int i = 0; i < outputTypesArray.length; ++i) { - outputTypesArray[i] = DataType.fromClass(outputTypes.get(i)); + outputTypesArray[i] = outputTypes.get(i); } opBuilder.setAttr("output_types", outputTypesArray); Shape[] outputShapesArray = new Shape[outputShapes.size()]; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/UniqueWithCounts.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/UniqueWithCounts.java index 63e7435ec8b..a9e1a960b53 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/UniqueWithCounts.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/UniqueWithCounts.java @@ -25,6 +25,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.family.TNumber; /** * Finds unique elements along an axis of a tensor. @@ -77,7 +79,7 @@ * @param data type for {@code idx()} output */ @Operator -public final class UniqueWithCounts extends PrimitiveOp { +public final class UniqueWithCounts extends PrimitiveOp { /** * Factory method to create a class wrapping a new UniqueWithCounts operation. @@ -89,12 +91,12 @@ public final class UniqueWithCounts extends PrimitiveOp { * @param outIdx * @return a new instance of UniqueWithCounts */ - public static UniqueWithCounts create(Scope scope, Operand x, Operand axis, Class outIdx) { + public static UniqueWithCounts create(Scope scope, Operand x, Operand axis, DataType outIdx) { OperationBuilder opBuilder = scope.env().opBuilder("UniqueWithCountsV2", scope.makeOpName("UniqueWithCounts")); opBuilder.addInput(x.asOutput()); opBuilder.addInput(axis.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); - opBuilder.setAttr("out_idx", DataType.fromClass(outIdx)); + opBuilder.setAttr("out_idx", outIdx); return new UniqueWithCounts(opBuilder.build()); } @@ -107,8 +109,8 @@ public static UniqueWithCounts cre * find the unique elements. * @return a new instance of UniqueWithCounts */ - public static UniqueWithCounts create(Scope scope, Operand x, Operand axis) { - return create(scope, x, axis, Integer.class); + public static UniqueWithCounts create(Scope scope, Operand x, Operand axis) { + return create(scope, x, axis, TInt32.DTYPE); } /** diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/UnravelIndex.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/UnravelIndex.java index b73ecb4699c..41a684814d6 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/UnravelIndex.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/UnravelIndex.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Converts a flat index or array of flat indices into a tuple of @@ -37,7 +38,7 @@ * @param data type for {@code output()} output */ @Operator -public final class UnravelIndex extends PrimitiveOp implements Operand { +public final class UnravelIndex extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new UnravelIndex operation. @@ -49,7 +50,7 @@ public final class UnravelIndex extends PrimitiveOp implements * indices. * @return a new instance of UnravelIndex */ - public static UnravelIndex create(Scope scope, Operand indices, Operand dims) { + public static UnravelIndex create(Scope scope, Operand indices, Operand dims) { OperationBuilder opBuilder = scope.env().opBuilder("UnravelIndex", scope.makeOpName("UnravelIndex")); opBuilder.addInput(indices.asOutput()); opBuilder.addInput(dims.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/UnsortedSegmentJoin.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/UnsortedSegmentJoin.java index c25175c3a02..3cac7377989 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/UnsortedSegmentJoin.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/UnsortedSegmentJoin.java @@ -24,6 +24,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TString; +import org.tensorflow.types.family.TNumber; /** * Joins the elements of `inputs` based on `segment_ids`. @@ -56,7 +58,7 @@ * */ @Operator -public final class UnsortedSegmentJoin extends PrimitiveOp implements Operand { +public final class UnsortedSegmentJoin extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.core.UnsortedSegmentJoin} @@ -88,7 +90,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of UnsortedSegmentJoin */ - public static UnsortedSegmentJoin create(Scope scope, Operand inputs, Operand segmentIds, Operand numSegments, Options... options) { + public static UnsortedSegmentJoin create(Scope scope, Operand inputs, Operand segmentIds, Operand numSegments, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("UnsortedSegmentJoin", scope.makeOpName("UnsortedSegmentJoin")); opBuilder.addInput(inputs.asOutput()); opBuilder.addInput(segmentIds.asOutput()); @@ -113,16 +115,16 @@ public static Options separator(String separator) { /** */ - public Output output() { + public Output output() { return output; } @Override - public Output asOutput() { + public Output asOutput() { return output; } - private Output output; + private Output output; private UnsortedSegmentJoin(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Unstage.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Unstage.java index 1655c06b038..61d62da99fe 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Unstage.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Unstage.java @@ -92,12 +92,12 @@ private Options() { * @param options carries optional attributes values * @return a new instance of Unstage */ - public static Unstage create(Scope scope, List> dtypes, Options... options) { + public static Unstage create(Scope scope, List> dtypes, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("Unstage", scope.makeOpName("Unstage")); opBuilder = scope.applyControlDependencies(opBuilder); DataType[] dtypesArray = new DataType[dtypes.size()]; for (int i = 0; i < dtypesArray.length; ++i) { - dtypesArray[i] = DataType.fromClass(dtypes.get(i)); + dtypesArray[i] = dtypes.get(i); } opBuilder.setAttr("dtypes", dtypesArray); if (options != null) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/UpperBound.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/UpperBound.java index 70c8e8769dd..390ad06f6f6 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/UpperBound.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/UpperBound.java @@ -24,6 +24,8 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.family.TNumber; /** * Applies upper_bound(sorted_search_values, values) along each row. @@ -48,7 +50,7 @@ * * @param data type for {@code output()} output */ -public final class UpperBound extends PrimitiveOp implements Operand { +public final class UpperBound extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new UpperBound operation. @@ -60,12 +62,12 @@ public final class UpperBound extends PrimitiveOp implements O * @param outType * @return a new instance of UpperBound */ - public static UpperBound create(Scope scope, Operand sortedInputs, Operand values, Class outType) { + public static UpperBound create(Scope scope, Operand sortedInputs, Operand values, DataType outType) { OperationBuilder opBuilder = scope.env().opBuilder("UpperBound", scope.makeOpName("UpperBound")); opBuilder.addInput(sortedInputs.asOutput()); opBuilder.addInput(values.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); - opBuilder.setAttr("out_type", DataType.fromClass(outType)); + opBuilder.setAttr("out_type", outType); return new UpperBound(opBuilder.build()); } @@ -78,8 +80,8 @@ public static UpperBound create(Scope scope, Operand * the values that will be searched for in `sorted_search_values`. * @return a new instance of UpperBound */ - public static UpperBound create(Scope scope, Operand sortedInputs, Operand values) { - return create(scope, sortedInputs, values, Integer.class); + public static UpperBound create(Scope scope, Operand sortedInputs, Operand values) { + return create(scope, sortedInputs, values, TInt32.DTYPE); } /** diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/VarHandleOp.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/VarHandleOp.java index 86ac34af81c..82df6ed84ae 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/VarHandleOp.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/VarHandleOp.java @@ -22,7 +22,7 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; @@ -71,10 +71,10 @@ private Options() { * @param options carries optional attributes values * @return a new instance of VarHandleOp */ - public static VarHandleOp create(Scope scope, Class dtype, Shape shape, Options... options) { + public static VarHandleOp create(Scope scope, DataType dtype, Shape shape, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("VarHandleOp", scope.makeOpName("VarHandleOp")); opBuilder = scope.applyControlDependencies(opBuilder); - opBuilder.setAttr("dtype", DataType.fromClass(dtype)); + opBuilder.setAttr("dtype", dtype); opBuilder.setAttr("shape", shape); if (options != null) { for (Options opts : options) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/VarIsInitializedOp.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/VarIsInitializedOp.java index bae968632b6..3a3cdd0dd50 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/VarIsInitializedOp.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/VarIsInitializedOp.java @@ -24,12 +24,13 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TBool; /** * Checks whether a resource handle-based variable has been initialized. */ @Operator -public final class VarIsInitializedOp extends PrimitiveOp implements Operand { +public final class VarIsInitializedOp extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new VarIsInitializedOp operation. @@ -49,16 +50,16 @@ public static VarIsInitializedOp create(Scope scope, Operand resource) { * a scalar boolean which is true if the variable has been * initialized. */ - public Output isInitialized() { + public Output isInitialized() { return isInitialized; } @Override - public Output asOutput() { + public Output asOutput() { return isInitialized; } - private Output isInitialized; + private Output isInitialized; private VarIsInitializedOp(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Variable.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Variable.java index 8c017bf8682..fd967f399be 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Variable.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Variable.java @@ -22,7 +22,7 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; @@ -78,11 +78,11 @@ private Options() { * @param options carries optional attributes values * @return a new instance of Variable */ - public static Variable create(Scope scope, Shape shape, Class dtype, Options... options) { + public static Variable create(Scope scope, Shape shape, DataType dtype, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("VariableV2", scope.makeOpName("Variable")); opBuilder = scope.applyControlDependencies(opBuilder); opBuilder.setAttr("shape", shape); - opBuilder.setAttr("dtype", DataType.fromClass(dtype)); + opBuilder.setAttr("dtype", dtype); if (options != null) { for (Options opts : options) { if (opts.container != null) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/VariableShape.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/VariableShape.java index 6e3d1e0a65d..586c753d4c4 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/VariableShape.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/VariableShape.java @@ -25,6 +25,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.family.TNumber; /** * Returns the shape of the variable pointed to by `resource`. @@ -41,7 +43,7 @@ * @param data type for {@code output()} output */ @Operator -public final class VariableShape extends PrimitiveOp implements Operand { +public final class VariableShape extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new VariableShape operation. @@ -51,11 +53,11 @@ public final class VariableShape extends PrimitiveOp implement * @param outType * @return a new instance of VariableShape */ - public static VariableShape create(Scope scope, Operand input, Class outType) { + public static VariableShape create(Scope scope, Operand input, DataType outType) { OperationBuilder opBuilder = scope.env().opBuilder("VariableShape", scope.makeOpName("VariableShape")); opBuilder.addInput(input.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); - opBuilder.setAttr("out_type", DataType.fromClass(outType)); + opBuilder.setAttr("out_type", outType); return new VariableShape(opBuilder.build()); } @@ -66,8 +68,8 @@ public static VariableShape create(Scope scope, Operand * @param input * @return a new instance of VariableShape */ - public static VariableShape create(Scope scope, Operand input) { - return create(scope, input, Integer.class); + public static VariableShape create(Scope scope, Operand input) { + return create(scope, input, TInt32.DTYPE); } /** diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Where.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Where.java index cb344ae0e1d..86bde9908a9 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Where.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Where.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt64; /** * Returns locations of nonzero / true values in a tensor. @@ -89,7 +90,7 @@ * */ @Operator -public final class Where extends PrimitiveOp implements Operand { +public final class Where extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new Where operation. @@ -107,16 +108,16 @@ public static Where create(Scope scope, Operand condition) { /** */ - public Output index() { + public Output index() { return index; } @Override - public Output asOutput() { + public Output asOutput() { return index; } - private Output index; + private Output index; private Where(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Where3.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Where3.java index 3450e63be8d..49bb8167ba2 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Where3.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Where3.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TBool; /** * Selects elements from `x` or `y`, depending on `condition`. @@ -83,7 +84,7 @@ public final class Where3 extends PrimitiveOp implements Operand { * @param y = A `Tensor` with the same type and shape as `x`. * @return a new instance of Where3 */ - public static Where3 create(Scope scope, Operand condition, Operand x, Operand y) { + public static Where3 create(Scope scope, Operand condition, Operand x, Operand y) { OperationBuilder opBuilder = scope.env().opBuilder("Select", scope.makeOpName("Where3")); opBuilder.addInput(condition.asOutput()); opBuilder.addInput(x.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/WorkerHeartbeat.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/WorkerHeartbeat.java index fb2a52de7a0..26e30ce69db 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/WorkerHeartbeat.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/WorkerHeartbeat.java @@ -23,6 +23,7 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TString; /** * Worker heartbeat op. @@ -30,7 +31,7 @@ * Heartbeats may be sent periodically to indicate the coordinator is still active, * to retrieve the current worker status and to expedite shutdown when necessary. */ -public final class WorkerHeartbeat extends PrimitiveOp implements Operand { +public final class WorkerHeartbeat extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new WorkerHeartbeat operation. @@ -39,7 +40,7 @@ public final class WorkerHeartbeat extends PrimitiveOp implements Operand request) { + public static WorkerHeartbeat create(Scope scope, Operand request) { OperationBuilder opBuilder = scope.env().opBuilder("WorkerHeartbeat", scope.makeOpName("WorkerHeartbeat")); opBuilder.addInput(request.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); @@ -49,16 +50,16 @@ public static WorkerHeartbeat create(Scope scope, Operand request) { /** * A string tensor containing a serialized WorkerHeartbeatResponse */ - public Output response() { + public Output response() { return response; } @Override - public Output asOutput() { + public Output asOutput() { return response; } - private Output response; + private Output response; private WorkerHeartbeat(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/WriteKafka.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/WriteKafka.java new file mode 100644 index 00000000000..7b3016dd7b4 --- /dev/null +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/WriteKafka.java @@ -0,0 +1,70 @@ +/* Copyright 2018 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +=======================================================================*/ + +// This class has been generated, DO NOT EDIT! + +package org.tensorflow.op.core; + +import org.tensorflow.Operand; +import org.tensorflow.Operation; +import org.tensorflow.OperationBuilder; +import org.tensorflow.Output; +import org.tensorflow.op.PrimitiveOp; +import org.tensorflow.op.Scope; +import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TString; + +/** + */ +@Operator +public final class WriteKafka extends PrimitiveOp implements Operand { + + /** + * Factory method to create a class wrapping a new WriteKafka operation. + * + * @param scope current scope + * @param message + * @param topic + * @param servers + * @return a new instance of WriteKafka + */ + public static WriteKafka create(Scope scope, Operand message, Operand topic, Operand servers) { + OperationBuilder opBuilder = scope.env().opBuilder("WriteKafka", scope.makeOpName("WriteKafka")); + opBuilder.addInput(message.asOutput()); + opBuilder.addInput(topic.asOutput()); + opBuilder.addInput(servers.asOutput()); + opBuilder = scope.applyControlDependencies(opBuilder); + return new WriteKafka(opBuilder.build()); + } + + /** + */ + public Output content() { + return content; + } + + @Override + public Output asOutput() { + return content; + } + + private Output content; + + private WriteKafka(Operation operation) { + super(operation); + int outputIdx = 0; + content = operation.output(outputIdx++); + } +} diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/WriteRawProtoSummary.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/WriteRawProtoSummary.java index bf6df0f2f75..7d2a16905c2 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/WriteRawProtoSummary.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/WriteRawProtoSummary.java @@ -22,6 +22,8 @@ import org.tensorflow.OperationBuilder; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TInt64; +import org.tensorflow.types.TString; /** */ @@ -36,7 +38,7 @@ public final class WriteRawProtoSummary extends PrimitiveOp { * @param tensor * @return a new instance of WriteRawProtoSummary */ - public static WriteRawProtoSummary create(Scope scope, Operand writer, Operand step, Operand tensor) { + public static WriteRawProtoSummary create(Scope scope, Operand writer, Operand step, Operand tensor) { OperationBuilder opBuilder = scope.env().opBuilder("WriteRawProtoSummary", scope.makeOpName("WriteRawProtoSummary")); opBuilder.addInput(writer.asOutput()); opBuilder.addInput(step.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/AnonymousIterator.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/AnonymousIterator.java index 8c32480c5d0..0a25926992d 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/AnonymousIterator.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/AnonymousIterator.java @@ -23,7 +23,7 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; @@ -42,12 +42,12 @@ public final class AnonymousIterator extends PrimitiveOp implements Operand> outputTypes, List outputShapes) { + public static AnonymousIterator create(Scope scope, List> outputTypes, List outputShapes) { OperationBuilder opBuilder = scope.env().opBuilder("AnonymousIterator", scope.makeOpName("AnonymousIterator")); opBuilder = scope.applyControlDependencies(opBuilder); DataType[] outputTypesArray = new DataType[outputTypes.size()]; for (int i = 0; i < outputTypesArray.length; ++i) { - outputTypesArray[i] = DataType.fromClass(outputTypes.get(i)); + outputTypesArray[i] = outputTypes.get(i); } opBuilder.setAttr("output_types", outputTypesArray); Shape[] outputShapesArray = new Shape[outputShapes.size()]; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/BatchDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/BatchDataset.java index c594bd3bac9..479a2a55dc3 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/BatchDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/BatchDataset.java @@ -23,9 +23,11 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TBool; +import org.tensorflow.types.TInt64; /** * Creates a dataset that batches `batch_size` elements from `input_dataset`. @@ -64,7 +66,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of BatchDataset */ - public static BatchDataset create(Scope scope, Operand inputDataset, Operand batchSize, Operand dropRemainder, List> outputTypes, List outputShapes, Options... options) { + public static BatchDataset create(Scope scope, Operand inputDataset, Operand batchSize, Operand dropRemainder, List> outputTypes, List outputShapes, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("BatchDatasetV2", scope.makeOpName("BatchDataset")); opBuilder.addInput(inputDataset.asOutput()); opBuilder.addInput(batchSize.asOutput()); @@ -72,7 +74,7 @@ public static BatchDataset create(Scope scope, Operand inputDataset, Operand< opBuilder = scope.applyControlDependencies(opBuilder); DataType[] outputTypesArray = new DataType[outputTypes.size()]; for (int i = 0; i < outputTypesArray.length; ++i) { - outputTypesArray[i] = DataType.fromClass(outputTypes.get(i)); + outputTypesArray[i] = outputTypes.get(i); } opBuilder.setAttr("output_types", outputTypesArray); Shape[] outputShapesArray = new Shape[outputShapes.size()]; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/BytesProducedStatsDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/BytesProducedStatsDataset.java index 700e1946b4e..1ca99944e76 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/BytesProducedStatsDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/BytesProducedStatsDataset.java @@ -23,9 +23,10 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TString; /** * Records the bytes size of each element of `input_dataset` in a StatsAggregator. @@ -42,14 +43,14 @@ public final class BytesProducedStatsDataset extends PrimitiveOp implements Oper * @param outputShapes * @return a new instance of BytesProducedStatsDataset */ - public static BytesProducedStatsDataset create(Scope scope, Operand inputDataset, Operand tag, List> outputTypes, List outputShapes) { + public static BytesProducedStatsDataset create(Scope scope, Operand inputDataset, Operand tag, List> outputTypes, List outputShapes) { OperationBuilder opBuilder = scope.env().opBuilder("BytesProducedStatsDataset", scope.makeOpName("BytesProducedStatsDataset")); opBuilder.addInput(inputDataset.asOutput()); opBuilder.addInput(tag.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); DataType[] outputTypesArray = new DataType[outputTypes.size()]; for (int i = 0; i < outputTypesArray.length; ++i) { - outputTypesArray[i] = DataType.fromClass(outputTypes.get(i)); + outputTypesArray[i] = outputTypes.get(i); } opBuilder.setAttr("output_types", outputTypesArray); Shape[] outputShapesArray = new Shape[outputShapes.size()]; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/CacheDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/CacheDataset.java index 4d101f3b01d..f1260ce30fa 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/CacheDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/CacheDataset.java @@ -23,9 +23,10 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TString; /** * Creates a dataset that caches elements from `input_dataset`. @@ -48,14 +49,14 @@ public final class CacheDataset extends PrimitiveOp implements Operand { * @param outputShapes * @return a new instance of CacheDataset */ - public static CacheDataset create(Scope scope, Operand inputDataset, Operand filename, List> outputTypes, List outputShapes) { + public static CacheDataset create(Scope scope, Operand inputDataset, Operand filename, List> outputTypes, List outputShapes) { OperationBuilder opBuilder = scope.env().opBuilder("CacheDataset", scope.makeOpName("CacheDataset")); opBuilder.addInput(inputDataset.asOutput()); opBuilder.addInput(filename.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); DataType[] outputTypesArray = new DataType[outputTypes.size()]; for (int i = 0; i < outputTypesArray.length; ++i) { - outputTypesArray[i] = DataType.fromClass(outputTypes.get(i)); + outputTypesArray[i] = outputTypes.get(i); } opBuilder.setAttr("output_types", outputTypesArray); Shape[] outputShapesArray = new Shape[outputShapes.size()]; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ConcatenateDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ConcatenateDataset.java index 792b569027b..d37453d2294 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ConcatenateDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ConcatenateDataset.java @@ -23,7 +23,7 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; @@ -42,14 +42,14 @@ public final class ConcatenateDataset extends PrimitiveOp implements Operand inputDataset, Operand anotherDataset, List> outputTypes, List outputShapes) { + public static ConcatenateDataset create(Scope scope, Operand inputDataset, Operand anotherDataset, List> outputTypes, List outputShapes) { OperationBuilder opBuilder = scope.env().opBuilder("ConcatenateDataset", scope.makeOpName("ConcatenateDataset")); opBuilder.addInput(inputDataset.asOutput()); opBuilder.addInput(anotherDataset.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); DataType[] outputTypesArray = new DataType[outputTypes.size()]; for (int i = 0; i < outputTypesArray.length; ++i) { - outputTypesArray[i] = DataType.fromClass(outputTypes.get(i)); + outputTypesArray[i] = outputTypes.get(i); } opBuilder.setAttr("output_types", outputTypesArray); Shape[] outputShapesArray = new Shape[outputShapes.size()]; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/DatasetToGraph.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/DatasetToGraph.java index 28518414f5b..56df2ca0ac0 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/DatasetToGraph.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/DatasetToGraph.java @@ -23,13 +23,14 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TString; /** * Returns a serialized GraphDef representing `input_dataset`. *

* Returns a graph representation for `input_dataset`. */ -public final class DatasetToGraph extends PrimitiveOp implements Operand { +public final class DatasetToGraph extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new DatasetToGraph operation. @@ -48,16 +49,16 @@ public static DatasetToGraph create(Scope scope, Operand inputDataset) { /** * The graph representation of the dataset (as serialized GraphDef). */ - public Output graph() { + public Output graph() { return graph; } @Override - public Output asOutput() { + public Output asOutput() { return graph; } - private Output graph; + private Output graph; private DatasetToGraph(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/DatasetToSingleElement.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/DatasetToSingleElement.java index bd9843a560e..dcfb288f51a 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/DatasetToSingleElement.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/DatasetToSingleElement.java @@ -25,7 +25,7 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; @@ -43,13 +43,13 @@ public final class DatasetToSingleElement extends PrimitiveOp implements Iterabl * @param outputShapes * @return a new instance of DatasetToSingleElement */ - public static DatasetToSingleElement create(Scope scope, Operand dataset, List> outputTypes, List outputShapes) { + public static DatasetToSingleElement create(Scope scope, Operand dataset, List> outputTypes, List outputShapes) { OperationBuilder opBuilder = scope.env().opBuilder("DatasetToSingleElement", scope.makeOpName("DatasetToSingleElement")); opBuilder.addInput(dataset.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); DataType[] outputTypesArray = new DataType[outputTypes.size()]; for (int i = 0; i < outputTypesArray.length; ++i) { - outputTypesArray[i] = DataType.fromClass(outputTypes.get(i)); + outputTypesArray[i] = outputTypes.get(i); } opBuilder.setAttr("output_types", outputTypesArray); Shape[] outputShapesArray = new Shape[outputShapes.size()]; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/DatasetToTfRecord.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/DatasetToTfRecord.java index 18e3cb86616..4836127810b 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/DatasetToTfRecord.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/DatasetToTfRecord.java @@ -22,6 +22,7 @@ import org.tensorflow.OperationBuilder; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TString; /** * Writes the given dataset to the given file using the TFRecord format. @@ -38,7 +39,7 @@ public final class DatasetToTfRecord extends PrimitiveOp { * compression), (ii) "ZLIB", or (iii) "GZIP". * @return a new instance of DatasetToTfRecord */ - public static DatasetToTfRecord create(Scope scope, Operand inputDataset, Operand filename, Operand compressionType) { + public static DatasetToTfRecord create(Scope scope, Operand inputDataset, Operand filename, Operand compressionType) { OperationBuilder opBuilder = scope.env().opBuilder("DatasetToTFRecord", scope.makeOpName("DatasetToTfRecord")); opBuilder.addInput(inputDataset.asOutput()); opBuilder.addInput(filename.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/DenseToSparseBatchDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/DenseToSparseBatchDataset.java index 90dc80bc15a..2db55af3810 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/DenseToSparseBatchDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/DenseToSparseBatchDataset.java @@ -23,9 +23,10 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TInt64; /** * Creates a dataset that batches input elements into a SparseTensor. @@ -46,7 +47,7 @@ public final class DenseToSparseBatchDataset extends PrimitiveOp implements Oper * @param outputShapes * @return a new instance of DenseToSparseBatchDataset */ - public static DenseToSparseBatchDataset create(Scope scope, Operand inputDataset, Operand batchSize, Operand rowShape, List> outputTypes, List outputShapes) { + public static DenseToSparseBatchDataset create(Scope scope, Operand inputDataset, Operand batchSize, Operand rowShape, List> outputTypes, List outputShapes) { OperationBuilder opBuilder = scope.env().opBuilder("DenseToSparseBatchDataset", scope.makeOpName("DenseToSparseBatchDataset")); opBuilder.addInput(inputDataset.asOutput()); opBuilder.addInput(batchSize.asOutput()); @@ -54,7 +55,7 @@ public static DenseToSparseBatchDataset create(Scope scope, Operand inputData opBuilder = scope.applyControlDependencies(opBuilder); DataType[] outputTypesArray = new DataType[outputTypes.size()]; for (int i = 0; i < outputTypesArray.length; ++i) { - outputTypesArray[i] = DataType.fromClass(outputTypes.get(i)); + outputTypesArray[i] = outputTypes.get(i); } opBuilder.setAttr("output_types", outputTypesArray); Shape[] outputShapesArray = new Shape[outputShapes.size()]; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalAssertNextDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalAssertNextDataset.java index a2f9d112692..3f57f25027b 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalAssertNextDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalAssertNextDataset.java @@ -23,9 +23,10 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TString; /** */ @@ -41,14 +42,14 @@ public final class ExperimentalAssertNextDataset extends PrimitiveOp implements * @param outputShapes * @return a new instance of ExperimentalAssertNextDataset */ - public static ExperimentalAssertNextDataset create(Scope scope, Operand inputDataset, Operand transformations, List> outputTypes, List outputShapes) { + public static ExperimentalAssertNextDataset create(Scope scope, Operand inputDataset, Operand transformations, List> outputTypes, List outputShapes) { OperationBuilder opBuilder = scope.env().opBuilder("ExperimentalAssertNextDataset", scope.makeOpName("ExperimentalAssertNextDataset")); opBuilder.addInput(inputDataset.asOutput()); opBuilder.addInput(transformations.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); DataType[] outputTypesArray = new DataType[outputTypes.size()]; for (int i = 0; i < outputTypesArray.length; ++i) { - outputTypesArray[i] = DataType.fromClass(outputTypes.get(i)); + outputTypesArray[i] = outputTypes.get(i); } opBuilder.setAttr("output_types", outputTypesArray); Shape[] outputShapesArray = new Shape[outputShapes.size()]; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalCsvDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalCsvDataset.java index 3a697cfe391..54934cadc20 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalCsvDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalCsvDataset.java @@ -22,10 +22,13 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.Operands; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TBool; +import org.tensorflow.types.TInt64; +import org.tensorflow.types.TString; /** */ @@ -47,7 +50,7 @@ public final class ExperimentalCsvDataset extends PrimitiveOp implements Operand * @param outputShapes * @return a new instance of ExperimentalCsvDataset */ - public static ExperimentalCsvDataset create(Scope scope, Operand filenames, Operand compressionType, Operand bufferSize, Operand header, Operand fieldDelim, Operand useQuoteDelim, Operand naValue, Operand selectCols, Iterable> recordDefaults, List outputShapes) { + public static ExperimentalCsvDataset create(Scope scope, Operand filenames, Operand compressionType, Operand bufferSize, Operand header, Operand fieldDelim, Operand useQuoteDelim, Operand naValue, Operand selectCols, Iterable> recordDefaults, List outputShapes) { OperationBuilder opBuilder = scope.env().opBuilder("ExperimentalCSVDataset", scope.makeOpName("ExperimentalCsvDataset")); opBuilder.addInput(filenames.asOutput()); opBuilder.addInput(compressionType.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalDirectedInterleaveDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalDirectedInterleaveDataset.java index 39086287aa5..eb86ee659fd 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalDirectedInterleaveDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalDirectedInterleaveDataset.java @@ -23,7 +23,7 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.Operands; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; @@ -45,14 +45,14 @@ public final class ExperimentalDirectedInterleaveDataset extends PrimitiveOp imp * @param outputShapes * @return a new instance of ExperimentalDirectedInterleaveDataset */ - public static ExperimentalDirectedInterleaveDataset create(Scope scope, Operand selectorInputDataset, Iterable> dataInputDatasets, List> outputTypes, List outputShapes) { + public static ExperimentalDirectedInterleaveDataset create(Scope scope, Operand selectorInputDataset, Iterable> dataInputDatasets, List> outputTypes, List outputShapes) { OperationBuilder opBuilder = scope.env().opBuilder("ExperimentalDirectedInterleaveDataset", scope.makeOpName("ExperimentalDirectedInterleaveDataset")); opBuilder.addInput(selectorInputDataset.asOutput()); opBuilder.addInputList(Operands.asOutputs(dataInputDatasets)); opBuilder = scope.applyControlDependencies(opBuilder); DataType[] outputTypesArray = new DataType[outputTypes.size()]; for (int i = 0; i < outputTypesArray.length; ++i) { - outputTypesArray[i] = DataType.fromClass(outputTypes.get(i)); + outputTypesArray[i] = outputTypes.get(i); } opBuilder.setAttr("output_types", outputTypesArray); Shape[] outputShapesArray = new Shape[outputShapes.size()]; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalIgnoreErrorsDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalIgnoreErrorsDataset.java index 79b9a24ad61..da4727840f6 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalIgnoreErrorsDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalIgnoreErrorsDataset.java @@ -23,7 +23,7 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; @@ -41,13 +41,13 @@ public final class ExperimentalIgnoreErrorsDataset extends PrimitiveOp implement * @param outputShapes * @return a new instance of ExperimentalIgnoreErrorsDataset */ - public static ExperimentalIgnoreErrorsDataset create(Scope scope, Operand inputDataset, List> outputTypes, List outputShapes) { + public static ExperimentalIgnoreErrorsDataset create(Scope scope, Operand inputDataset, List> outputTypes, List outputShapes) { OperationBuilder opBuilder = scope.env().opBuilder("ExperimentalIgnoreErrorsDataset", scope.makeOpName("ExperimentalIgnoreErrorsDataset")); opBuilder.addInput(inputDataset.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); DataType[] outputTypesArray = new DataType[outputTypes.size()]; for (int i = 0; i < outputTypesArray.length; ++i) { - outputTypesArray[i] = DataType.fromClass(outputTypes.get(i)); + outputTypesArray[i] = outputTypes.get(i); } opBuilder.setAttr("output_types", outputTypesArray); Shape[] outputShapesArray = new Shape[outputShapes.size()]; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalIteratorGetDevice.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalIteratorGetDevice.java index 0ff6ed8ba6a..b8d0ea73c24 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalIteratorGetDevice.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalIteratorGetDevice.java @@ -23,11 +23,12 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TString; /** * Returns the name of the device on which `resource` has been placed. */ -public final class ExperimentalIteratorGetDevice extends PrimitiveOp implements Operand { +public final class ExperimentalIteratorGetDevice extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new ExperimentalIteratorGetDevice operation. @@ -45,16 +46,16 @@ public static ExperimentalIteratorGetDevice create(Scope scope, Operand resou /** */ - public Output device() { + public Output device() { return device; } @Override - public Output asOutput() { + public Output asOutput() { return device; } - private Output device; + private Output device; private ExperimentalIteratorGetDevice(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalLmdbDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalLmdbDataset.java index e7ff7edb297..b130658c074 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalLmdbDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalLmdbDataset.java @@ -23,9 +23,10 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TString; /** */ @@ -40,13 +41,13 @@ public final class ExperimentalLmdbDataset extends PrimitiveOp implements Operan * @param outputShapes * @return a new instance of ExperimentalLmdbDataset */ - public static ExperimentalLmdbDataset create(Scope scope, Operand filenames, List> outputTypes, List outputShapes) { + public static ExperimentalLmdbDataset create(Scope scope, Operand filenames, List> outputTypes, List outputShapes) { OperationBuilder opBuilder = scope.env().opBuilder("ExperimentalLMDBDataset", scope.makeOpName("ExperimentalLmdbDataset")); opBuilder.addInput(filenames.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); DataType[] outputTypesArray = new DataType[outputTypes.size()]; for (int i = 0; i < outputTypesArray.length; ++i) { - outputTypesArray[i] = DataType.fromClass(outputTypes.get(i)); + outputTypesArray[i] = outputTypes.get(i); } opBuilder.setAttr("output_types", outputTypesArray); Shape[] outputShapesArray = new Shape[outputShapes.size()]; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalNonSerializableDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalNonSerializableDataset.java index ec86f58fe33..5f49a069940 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalNonSerializableDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalNonSerializableDataset.java @@ -23,7 +23,7 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; @@ -40,13 +40,13 @@ public final class ExperimentalNonSerializableDataset extends PrimitiveOp implem * @param outputShapes * @return a new instance of ExperimentalNonSerializableDataset */ - public static ExperimentalNonSerializableDataset create(Scope scope, Operand inputDataset, List> outputTypes, List outputShapes) { + public static ExperimentalNonSerializableDataset create(Scope scope, Operand inputDataset, List> outputTypes, List outputShapes) { OperationBuilder opBuilder = scope.env().opBuilder("ExperimentalNonSerializableDataset", scope.makeOpName("ExperimentalNonSerializableDataset")); opBuilder.addInput(inputDataset.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); DataType[] outputTypesArray = new DataType[outputTypes.size()]; for (int i = 0; i < outputTypesArray.length; ++i) { - outputTypesArray[i] = DataType.fromClass(outputTypes.get(i)); + outputTypesArray[i] = outputTypes.get(i); } opBuilder.setAttr("output_types", outputTypesArray); Shape[] outputShapesArray = new Shape[outputShapes.size()]; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalSleepDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalSleepDataset.java index 97ddc80cce9..6460da0a1ee 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalSleepDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalSleepDataset.java @@ -23,9 +23,10 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TInt64; /** */ @@ -41,14 +42,14 @@ public final class ExperimentalSleepDataset extends PrimitiveOp implements Opera * @param outputShapes * @return a new instance of ExperimentalSleepDataset */ - public static ExperimentalSleepDataset create(Scope scope, Operand inputDataset, Operand sleepMicroseconds, List> outputTypes, List outputShapes) { + public static ExperimentalSleepDataset create(Scope scope, Operand inputDataset, Operand sleepMicroseconds, List> outputTypes, List outputShapes) { OperationBuilder opBuilder = scope.env().opBuilder("ExperimentalSleepDataset", scope.makeOpName("ExperimentalSleepDataset")); opBuilder.addInput(inputDataset.asOutput()); opBuilder.addInput(sleepMicroseconds.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); DataType[] outputTypesArray = new DataType[outputTypes.size()]; for (int i = 0; i < outputTypesArray.length; ++i) { - outputTypesArray[i] = DataType.fromClass(outputTypes.get(i)); + outputTypesArray[i] = outputTypes.get(i); } opBuilder.setAttr("output_types", outputTypesArray); Shape[] outputShapesArray = new Shape[outputShapes.size()]; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalThreadPoolDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalThreadPoolDataset.java index 3971d80dba5..375502193fe 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalThreadPoolDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalThreadPoolDataset.java @@ -23,7 +23,7 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; @@ -42,14 +42,14 @@ public final class ExperimentalThreadPoolDataset extends PrimitiveOp implements * @param outputShapes * @return a new instance of ExperimentalThreadPoolDataset */ - public static ExperimentalThreadPoolDataset create(Scope scope, Operand inputDataset, Operand threadPool, List> outputTypes, List outputShapes) { + public static ExperimentalThreadPoolDataset create(Scope scope, Operand inputDataset, Operand threadPool, List> outputTypes, List outputShapes) { OperationBuilder opBuilder = scope.env().opBuilder("ExperimentalThreadPoolDataset", scope.makeOpName("ExperimentalThreadPoolDataset")); opBuilder.addInput(inputDataset.asOutput()); opBuilder.addInput(threadPool.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); DataType[] outputTypesArray = new DataType[outputTypes.size()]; for (int i = 0; i < outputTypesArray.length; ++i) { - outputTypesArray[i] = DataType.fromClass(outputTypes.get(i)); + outputTypesArray[i] = outputTypes.get(i); } opBuilder.setAttr("output_types", outputTypesArray); Shape[] outputShapesArray = new Shape[outputShapes.size()]; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalUniqueDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalUniqueDataset.java index b63464c3aeb..1257ad94c90 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalUniqueDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalUniqueDataset.java @@ -23,7 +23,7 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; @@ -41,13 +41,13 @@ public final class ExperimentalUniqueDataset extends PrimitiveOp implements Oper * @param outputShapes * @return a new instance of ExperimentalUniqueDataset */ - public static ExperimentalUniqueDataset create(Scope scope, Operand inputDataset, List> outputTypes, List outputShapes) { + public static ExperimentalUniqueDataset create(Scope scope, Operand inputDataset, List> outputTypes, List outputShapes) { OperationBuilder opBuilder = scope.env().opBuilder("ExperimentalUniqueDataset", scope.makeOpName("ExperimentalUniqueDataset")); opBuilder.addInput(inputDataset.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); DataType[] outputTypesArray = new DataType[outputTypes.size()]; for (int i = 0; i < outputTypesArray.length; ++i) { - outputTypesArray[i] = DataType.fromClass(outputTypes.get(i)); + outputTypesArray[i] = outputTypes.get(i); } opBuilder.setAttr("output_types", outputTypesArray); Shape[] outputShapesArray = new Shape[outputShapes.size()]; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/FilterByLastComponentDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/FilterByLastComponentDataset.java index 8eddecb919f..84d1cedc840 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/FilterByLastComponentDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/FilterByLastComponentDataset.java @@ -23,7 +23,7 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; @@ -41,13 +41,13 @@ public final class FilterByLastComponentDataset extends PrimitiveOp implements O * @param outputShapes * @return a new instance of FilterByLastComponentDataset */ - public static FilterByLastComponentDataset create(Scope scope, Operand inputDataset, List> outputTypes, List outputShapes) { + public static FilterByLastComponentDataset create(Scope scope, Operand inputDataset, List> outputTypes, List outputShapes) { OperationBuilder opBuilder = scope.env().opBuilder("FilterByLastComponentDataset", scope.makeOpName("FilterByLastComponentDataset")); opBuilder.addInput(inputDataset.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); DataType[] outputTypesArray = new DataType[outputTypes.size()]; for (int i = 0; i < outputTypesArray.length; ++i) { - outputTypesArray[i] = DataType.fromClass(outputTypes.get(i)); + outputTypesArray[i] = outputTypes.get(i); } opBuilder.setAttr("output_types", outputTypesArray); Shape[] outputShapesArray = new Shape[outputShapes.size()]; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/FixedLengthRecordDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/FixedLengthRecordDataset.java index 5745ad001b5..7e94b80879c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/FixedLengthRecordDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/FixedLengthRecordDataset.java @@ -23,6 +23,8 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TInt64; +import org.tensorflow.types.TString; /** */ @@ -40,7 +42,7 @@ public final class FixedLengthRecordDataset extends PrimitiveOp implements Opera * @param compressionType * @return a new instance of FixedLengthRecordDataset */ - public static FixedLengthRecordDataset create(Scope scope, Operand filenames, Operand headerBytes, Operand recordBytes, Operand footerBytes, Operand bufferSize, Operand compressionType) { + public static FixedLengthRecordDataset create(Scope scope, Operand filenames, Operand headerBytes, Operand recordBytes, Operand footerBytes, Operand bufferSize, Operand compressionType) { OperationBuilder opBuilder = scope.env().opBuilder("FixedLengthRecordDatasetV2", scope.makeOpName("FixedLengthRecordDataset")); opBuilder.addInput(filenames.asOutput()); opBuilder.addInput(headerBytes.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/Iterator.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/Iterator.java index 0ff360a0836..abed9295156 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/Iterator.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/Iterator.java @@ -23,7 +23,7 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; @@ -41,14 +41,14 @@ public final class Iterator extends PrimitiveOp implements Operand { * @param outputShapes * @return a new instance of Iterator */ - public static Iterator create(Scope scope, String sharedName, String container, List> outputTypes, List outputShapes) { + public static Iterator create(Scope scope, String sharedName, String container, List> outputTypes, List outputShapes) { OperationBuilder opBuilder = scope.env().opBuilder("IteratorV2", scope.makeOpName("Iterator")); opBuilder = scope.applyControlDependencies(opBuilder); opBuilder.setAttr("shared_name", sharedName); opBuilder.setAttr("container", container); DataType[] outputTypesArray = new DataType[outputTypes.size()]; for (int i = 0; i < outputTypesArray.length; ++i) { - outputTypesArray[i] = DataType.fromClass(outputTypes.get(i)); + outputTypesArray[i] = outputTypes.get(i); } opBuilder.setAttr("output_types", outputTypesArray); Shape[] outputShapesArray = new Shape[outputShapes.size()]; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/IteratorFromStringHandle.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/IteratorFromStringHandle.java index 74b4b5cae8f..222146a3668 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/IteratorFromStringHandle.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/IteratorFromStringHandle.java @@ -23,9 +23,10 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TString; /** */ @@ -59,13 +60,13 @@ private Options() { * @param options carries optional attributes values * @return a new instance of IteratorFromStringHandle */ - public static IteratorFromStringHandle create(Scope scope, Operand stringHandle, List> outputTypes, Options... options) { + public static IteratorFromStringHandle create(Scope scope, Operand stringHandle, List> outputTypes, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("IteratorFromStringHandleV2", scope.makeOpName("IteratorFromStringHandle")); opBuilder.addInput(stringHandle.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); DataType[] outputTypesArray = new DataType[outputTypes.size()]; for (int i = 0; i < outputTypesArray.length; ++i) { - outputTypesArray[i] = DataType.fromClass(outputTypes.get(i)); + outputTypesArray[i] = outputTypes.get(i); } opBuilder.setAttr("output_types", outputTypesArray); if (options != null) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/IteratorGetNext.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/IteratorGetNext.java index 5965a8119e8..9c76b3877bb 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/IteratorGetNext.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/IteratorGetNext.java @@ -25,7 +25,7 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; @@ -45,13 +45,13 @@ public final class IteratorGetNext extends PrimitiveOp implements Iterable iterator, List> outputTypes, List outputShapes) { + public static IteratorGetNext create(Scope scope, Operand iterator, List> outputTypes, List outputShapes) { OperationBuilder opBuilder = scope.env().opBuilder("IteratorGetNext", scope.makeOpName("IteratorGetNext")); opBuilder.addInput(iterator.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); DataType[] outputTypesArray = new DataType[outputTypes.size()]; for (int i = 0; i < outputTypesArray.length; ++i) { - outputTypesArray[i] = DataType.fromClass(outputTypes.get(i)); + outputTypesArray[i] = outputTypes.get(i); } opBuilder.setAttr("output_types", outputTypesArray); Shape[] outputShapesArray = new Shape[outputShapes.size()]; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/IteratorGetNextAsOptional.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/IteratorGetNextAsOptional.java index 6fdcd47cfbf..5207cd7b9cd 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/IteratorGetNextAsOptional.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/IteratorGetNextAsOptional.java @@ -23,7 +23,7 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; @@ -43,13 +43,13 @@ public final class IteratorGetNextAsOptional extends PrimitiveOp implements Oper * @param outputShapes * @return a new instance of IteratorGetNextAsOptional */ - public static IteratorGetNextAsOptional create(Scope scope, Operand iterator, List> outputTypes, List outputShapes) { + public static IteratorGetNextAsOptional create(Scope scope, Operand iterator, List> outputTypes, List outputShapes) { OperationBuilder opBuilder = scope.env().opBuilder("IteratorGetNextAsOptional", scope.makeOpName("IteratorGetNextAsOptional")); opBuilder.addInput(iterator.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); DataType[] outputTypesArray = new DataType[outputTypes.size()]; for (int i = 0; i < outputTypesArray.length; ++i) { - outputTypesArray[i] = DataType.fromClass(outputTypes.get(i)); + outputTypesArray[i] = outputTypes.get(i); } opBuilder.setAttr("output_types", outputTypesArray); Shape[] outputShapesArray = new Shape[outputShapes.size()]; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/IteratorGetNextSync.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/IteratorGetNextSync.java index 3a6220283ba..1ca187fd43b 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/IteratorGetNextSync.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/IteratorGetNextSync.java @@ -25,7 +25,7 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; @@ -50,13 +50,13 @@ public final class IteratorGetNextSync extends PrimitiveOp implements Iterable iterator, List> outputTypes, List outputShapes) { + public static IteratorGetNextSync create(Scope scope, Operand iterator, List> outputTypes, List outputShapes) { OperationBuilder opBuilder = scope.env().opBuilder("IteratorGetNextSync", scope.makeOpName("IteratorGetNextSync")); opBuilder.addInput(iterator.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); DataType[] outputTypesArray = new DataType[outputTypes.size()]; for (int i = 0; i < outputTypesArray.length; ++i) { - outputTypesArray[i] = DataType.fromClass(outputTypes.get(i)); + outputTypesArray[i] = outputTypes.get(i); } opBuilder.setAttr("output_types", outputTypesArray); Shape[] outputShapesArray = new Shape[outputShapes.size()]; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/IteratorToStringHandle.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/IteratorToStringHandle.java index 260ae89deb5..734c8def224 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/IteratorToStringHandle.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/IteratorToStringHandle.java @@ -24,12 +24,13 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TString; /** * Converts the given `resource_handle` representing an iterator to a string. */ @Operator(group = "data") -public final class IteratorToStringHandle extends PrimitiveOp implements Operand { +public final class IteratorToStringHandle extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new IteratorToStringHandle operation. @@ -48,16 +49,16 @@ public static IteratorToStringHandle create(Scope scope, Operand resourceHand /** * A string representation of the given handle. */ - public Output stringHandle() { + public Output stringHandle() { return stringHandle; } @Override - public Output asOutput() { + public Output asOutput() { return stringHandle; } - private Output stringHandle; + private Output stringHandle; private IteratorToStringHandle(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/LatencyStatsDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/LatencyStatsDataset.java index 6b92e81c155..2a940c9ee54 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/LatencyStatsDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/LatencyStatsDataset.java @@ -23,9 +23,10 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TString; /** * Records the latency of producing `input_dataset` elements in a StatsAggregator. @@ -42,14 +43,14 @@ public final class LatencyStatsDataset extends PrimitiveOp implements Operand inputDataset, Operand tag, List> outputTypes, List outputShapes) { + public static LatencyStatsDataset create(Scope scope, Operand inputDataset, Operand tag, List> outputTypes, List outputShapes) { OperationBuilder opBuilder = scope.env().opBuilder("LatencyStatsDataset", scope.makeOpName("LatencyStatsDataset")); opBuilder.addInput(inputDataset.asOutput()); opBuilder.addInput(tag.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); DataType[] outputTypesArray = new DataType[outputTypes.size()]; for (int i = 0; i < outputTypesArray.length; ++i) { - outputTypesArray[i] = DataType.fromClass(outputTypes.get(i)); + outputTypesArray[i] = outputTypes.get(i); } opBuilder.setAttr("output_types", outputTypesArray); Shape[] outputShapesArray = new Shape[outputShapes.size()]; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/LeakyReluGrad.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/LeakyReluGrad.java index 35b86c1f9a8..d9236d7d384 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/LeakyReluGrad.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/LeakyReluGrad.java @@ -23,13 +23,14 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.family.TNumber; /** * Computes rectified linear gradients for a LeakyRelu operation. * * @param data type for {@code backprops()} output */ -public final class LeakyReluGrad extends PrimitiveOp implements Operand { +public final class LeakyReluGrad extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.data.LeakyReluGrad} @@ -60,7 +61,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of LeakyReluGrad */ - public static LeakyReluGrad create(Scope scope, Operand gradients, Operand features, Options... options) { + public static LeakyReluGrad create(Scope scope, Operand gradients, Operand features, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("LeakyReluGrad", scope.makeOpName("LeakyReluGrad")); opBuilder.addInput(gradients.asOutput()); opBuilder.addInput(features.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/MatchingFilesDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/MatchingFilesDataset.java index b8fdd733dba..1fda906b21b 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/MatchingFilesDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/MatchingFilesDataset.java @@ -23,6 +23,7 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TString; /** */ @@ -35,7 +36,7 @@ public final class MatchingFilesDataset extends PrimitiveOp implements Operand patterns) { + public static MatchingFilesDataset create(Scope scope, Operand patterns) { OperationBuilder opBuilder = scope.env().opBuilder("MatchingFilesDataset", scope.makeOpName("MatchingFilesDataset")); opBuilder.addInput(patterns.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ModelDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ModelDataset.java index 674dd0819cd..ddb9efb7408 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ModelDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ModelDataset.java @@ -23,7 +23,7 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; @@ -72,13 +72,13 @@ private Options() { * @param options carries optional attributes values * @return a new instance of ModelDataset */ - public static ModelDataset create(Scope scope, Operand inputDataset, List> outputTypes, List outputShapes, Options... options) { + public static ModelDataset create(Scope scope, Operand inputDataset, List> outputTypes, List outputShapes, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("ModelDataset", scope.makeOpName("ModelDataset")); opBuilder.addInput(inputDataset.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); DataType[] outputTypesArray = new DataType[outputTypes.size()]; for (int i = 0; i < outputTypesArray.length; ++i) { - outputTypesArray[i] = DataType.fromClass(outputTypes.get(i)); + outputTypesArray[i] = outputTypes.get(i); } opBuilder.setAttr("output_types", outputTypesArray); Shape[] outputShapesArray = new Shape[outputShapes.size()]; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/MultiDeviceIterator.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/MultiDeviceIterator.java index c7d53fabf40..8e8882f98f0 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/MultiDeviceIterator.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/MultiDeviceIterator.java @@ -23,7 +23,7 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; @@ -45,7 +45,7 @@ public final class MultiDeviceIterator extends PrimitiveOp implements Operand devices, String sharedName, String container, List> outputTypes, List outputShapes) { + public static MultiDeviceIterator create(Scope scope, List devices, String sharedName, String container, List> outputTypes, List outputShapes) { OperationBuilder opBuilder = scope.env().opBuilder("MultiDeviceIterator", scope.makeOpName("MultiDeviceIterator")); opBuilder = scope.applyControlDependencies(opBuilder); String[] devicesArray = new String[devices.size()]; @@ -57,7 +57,7 @@ public static MultiDeviceIterator create(Scope scope, List devices, Stri opBuilder.setAttr("container", container); DataType[] outputTypesArray = new DataType[outputTypes.size()]; for (int i = 0; i < outputTypesArray.length; ++i) { - outputTypesArray[i] = DataType.fromClass(outputTypes.get(i)); + outputTypesArray[i] = outputTypes.get(i); } opBuilder.setAttr("output_types", outputTypesArray); Shape[] outputShapesArray = new Shape[outputShapes.size()]; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/MultiDeviceIteratorFromStringHandle.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/MultiDeviceIteratorFromStringHandle.java index d4ea259b9b7..f16e81b4aab 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/MultiDeviceIteratorFromStringHandle.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/MultiDeviceIteratorFromStringHandle.java @@ -23,9 +23,10 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TString; /** * Generates a MultiDeviceIterator resource from its provided string handle. @@ -60,13 +61,13 @@ private Options() { * @param options carries optional attributes values * @return a new instance of MultiDeviceIteratorFromStringHandle */ - public static MultiDeviceIteratorFromStringHandle create(Scope scope, Operand stringHandle, List> outputTypes, Options... options) { + public static MultiDeviceIteratorFromStringHandle create(Scope scope, Operand stringHandle, List> outputTypes, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("MultiDeviceIteratorFromStringHandle", scope.makeOpName("MultiDeviceIteratorFromStringHandle")); opBuilder.addInput(stringHandle.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); DataType[] outputTypesArray = new DataType[outputTypes.size()]; for (int i = 0; i < outputTypesArray.length; ++i) { - outputTypesArray[i] = DataType.fromClass(outputTypes.get(i)); + outputTypesArray[i] = outputTypes.get(i); } opBuilder.setAttr("output_types", outputTypesArray); if (options != null) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/MultiDeviceIteratorGetNextFromShard.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/MultiDeviceIteratorGetNextFromShard.java index 4dc63877b76..df65d1f249e 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/MultiDeviceIteratorGetNextFromShard.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/MultiDeviceIteratorGetNextFromShard.java @@ -25,9 +25,11 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.TInt64; /** * Gets next element for the provided shard number. @@ -45,7 +47,7 @@ public final class MultiDeviceIteratorGetNextFromShard extends PrimitiveOp imple * @param outputShapes The list of shapes being produced. * @return a new instance of MultiDeviceIteratorGetNextFromShard */ - public static MultiDeviceIteratorGetNextFromShard create(Scope scope, Operand multiDeviceIterator, Operand shardNum, Operand incarnationId, List> outputTypes, List outputShapes) { + public static MultiDeviceIteratorGetNextFromShard create(Scope scope, Operand multiDeviceIterator, Operand shardNum, Operand incarnationId, List> outputTypes, List outputShapes) { OperationBuilder opBuilder = scope.env().opBuilder("MultiDeviceIteratorGetNextFromShard", scope.makeOpName("MultiDeviceIteratorGetNextFromShard")); opBuilder.addInput(multiDeviceIterator.asOutput()); opBuilder.addInput(shardNum.asOutput()); @@ -53,7 +55,7 @@ public static MultiDeviceIteratorGetNextFromShard create(Scope scope, Operand opBuilder = scope.applyControlDependencies(opBuilder); DataType[] outputTypesArray = new DataType[outputTypes.size()]; for (int i = 0; i < outputTypesArray.length; ++i) { - outputTypesArray[i] = DataType.fromClass(outputTypes.get(i)); + outputTypesArray[i] = outputTypes.get(i); } opBuilder.setAttr("output_types", outputTypesArray); Shape[] outputShapesArray = new Shape[outputShapes.size()]; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/MultiDeviceIteratorInit.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/MultiDeviceIteratorInit.java index db3c3056a4f..ac1050d9448 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/MultiDeviceIteratorInit.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/MultiDeviceIteratorInit.java @@ -23,11 +23,12 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TInt64; /** * Initializes the multi device iterator with the given dataset. */ -public final class MultiDeviceIteratorInit extends PrimitiveOp implements Operand { +public final class MultiDeviceIteratorInit extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new MultiDeviceIteratorInit operation. @@ -38,7 +39,7 @@ public final class MultiDeviceIteratorInit extends PrimitiveOp implements Operan * @param maxBufferSize The maximum size of the host side per device buffer to keep. * @return a new instance of MultiDeviceIteratorInit */ - public static MultiDeviceIteratorInit create(Scope scope, Operand dataset, Operand multiDeviceIterator, Operand maxBufferSize) { + public static MultiDeviceIteratorInit create(Scope scope, Operand dataset, Operand multiDeviceIterator, Operand maxBufferSize) { OperationBuilder opBuilder = scope.env().opBuilder("MultiDeviceIteratorInit", scope.makeOpName("MultiDeviceIteratorInit")); opBuilder.addInput(dataset.asOutput()); opBuilder.addInput(multiDeviceIterator.asOutput()); @@ -51,16 +52,16 @@ public static MultiDeviceIteratorInit create(Scope scope, Operand dataset, Op * An int64 indicating which incarnation of the MultiDeviceIterator * is running. */ - public Output incarnationId() { + public Output incarnationId() { return incarnationId; } @Override - public Output asOutput() { + public Output asOutput() { return incarnationId; } - private Output incarnationId; + private Output incarnationId; private MultiDeviceIteratorInit(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/MultiDeviceIteratorToStringHandle.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/MultiDeviceIteratorToStringHandle.java index 7afe979686e..fc787b28a94 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/MultiDeviceIteratorToStringHandle.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/MultiDeviceIteratorToStringHandle.java @@ -23,11 +23,12 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TString; /** * Produces a string handle for the given MultiDeviceIterator. */ -public final class MultiDeviceIteratorToStringHandle extends PrimitiveOp implements Operand { +public final class MultiDeviceIteratorToStringHandle extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new MultiDeviceIteratorToStringHandle operation. @@ -46,16 +47,16 @@ public static MultiDeviceIteratorToStringHandle create(Scope scope, Operand m /** * A string representing the resource. */ - public Output stringHandle() { + public Output stringHandle() { return stringHandle; } @Override - public Output asOutput() { + public Output asOutput() { return stringHandle; } - private Output stringHandle; + private Output stringHandle; private MultiDeviceIteratorToStringHandle(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/OptimizeDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/OptimizeDataset.java index e10d976296f..d52f8304162 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/OptimizeDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/OptimizeDataset.java @@ -23,9 +23,10 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TString; /** * Creates a dataset by applying optimizations to `input_dataset`. @@ -64,14 +65,14 @@ private Options() { * @param options carries optional attributes values * @return a new instance of OptimizeDataset */ - public static OptimizeDataset create(Scope scope, Operand inputDataset, Operand optimizations, List> outputTypes, List outputShapes, Options... options) { + public static OptimizeDataset create(Scope scope, Operand inputDataset, Operand optimizations, List> outputTypes, List outputShapes, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("OptimizeDataset", scope.makeOpName("OptimizeDataset")); opBuilder.addInput(inputDataset.asOutput()); opBuilder.addInput(optimizations.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); DataType[] outputTypesArray = new DataType[outputTypes.size()]; for (int i = 0; i < outputTypesArray.length; ++i) { - outputTypesArray[i] = DataType.fromClass(outputTypes.get(i)); + outputTypesArray[i] = outputTypes.get(i); } opBuilder.setAttr("output_types", outputTypesArray); Shape[] outputShapesArray = new Shape[outputShapes.size()]; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/OptionalGetValue.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/OptionalGetValue.java index de21fc8a37d..fea5a88875c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/OptionalGetValue.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/OptionalGetValue.java @@ -25,7 +25,7 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; @@ -45,13 +45,13 @@ public final class OptionalGetValue extends PrimitiveOp implements Iterable optional, List> outputTypes, List outputShapes) { + public static OptionalGetValue create(Scope scope, Operand optional, List> outputTypes, List outputShapes) { OperationBuilder opBuilder = scope.env().opBuilder("OptionalGetValue", scope.makeOpName("OptionalGetValue")); opBuilder.addInput(optional.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); DataType[] outputTypesArray = new DataType[outputTypes.size()]; for (int i = 0; i < outputTypesArray.length; ++i) { - outputTypesArray[i] = DataType.fromClass(outputTypes.get(i)); + outputTypesArray[i] = outputTypes.get(i); } opBuilder.setAttr("output_types", outputTypesArray); Shape[] outputShapesArray = new Shape[outputShapes.size()]; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/OptionalHasValue.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/OptionalHasValue.java index a748bf1f05d..c32d88e4e57 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/OptionalHasValue.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/OptionalHasValue.java @@ -24,12 +24,13 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TBool; /** * Returns true if and only if the given Optional variant has a value. */ @Operator(group = "data") -public final class OptionalHasValue extends PrimitiveOp implements Operand { +public final class OptionalHasValue extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new OptionalHasValue operation. @@ -47,16 +48,16 @@ public static OptionalHasValue create(Scope scope, Operand optional) { /** */ - public Output hasValue() { + public Output hasValue() { return hasValue; } @Override - public Output asOutput() { + public Output asOutput() { return hasValue; } - private Output hasValue; + private Output hasValue; private OptionalHasValue(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/PaddedBatchDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/PaddedBatchDataset.java index 5873b6ba110..f9dca01fd60 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/PaddedBatchDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/PaddedBatchDataset.java @@ -22,10 +22,12 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.Operands; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TBool; +import org.tensorflow.types.TInt64; /** * Creates a dataset that batches and pads `batch_size` elements from the input. @@ -70,7 +72,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of PaddedBatchDataset */ - public static PaddedBatchDataset create(Scope scope, Operand inputDataset, Operand batchSize, Iterable> paddedShapes, Iterable> paddingValues, Operand dropRemainder, List outputShapes, Options... options) { + public static PaddedBatchDataset create(Scope scope, Operand inputDataset, Operand batchSize, Iterable> paddedShapes, Iterable> paddingValues, Operand dropRemainder, List outputShapes, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("PaddedBatchDatasetV2", scope.makeOpName("PaddedBatchDataset")); opBuilder.addInput(inputDataset.asOutput()); opBuilder.addInput(batchSize.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ParseExampleDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ParseExampleDataset.java index f04a9b09629..7272319c35d 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ParseExampleDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ParseExampleDataset.java @@ -23,10 +23,11 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.Operands; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TInt64; /** * Transforms `input_dataset` containing `Example` protos as vectors of DT_STRING into a dataset of `Tensor` or `SparseTensor` objects representing the parsed features. @@ -81,7 +82,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of ParseExampleDataset */ - public static ParseExampleDataset create(Scope scope, Operand inputDataset, Operand numParallelCalls, Iterable> denseDefaults, List sparseKeys, List denseKeys, List> sparseTypes, List denseShapes, List> outputTypes, List outputShapes, Options... options) { + public static ParseExampleDataset create(Scope scope, Operand inputDataset, Operand numParallelCalls, Iterable> denseDefaults, List sparseKeys, List denseKeys, List> sparseTypes, List denseShapes, List> outputTypes, List outputShapes, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("ParseExampleDataset", scope.makeOpName("ParseExampleDataset")); opBuilder.addInput(inputDataset.asOutput()); opBuilder.addInput(numParallelCalls.asOutput()); @@ -99,7 +100,7 @@ public static ParseExampleDataset create(Scope scope, Operand inputDataset, O opBuilder.setAttr("dense_keys", denseKeysArray); DataType[] sparseTypesArray = new DataType[sparseTypes.size()]; for (int i = 0; i < sparseTypesArray.length; ++i) { - sparseTypesArray[i] = DataType.fromClass(sparseTypes.get(i)); + sparseTypesArray[i] = sparseTypes.get(i); } opBuilder.setAttr("sparse_types", sparseTypesArray); Shape[] denseShapesArray = new Shape[denseShapes.size()]; @@ -109,7 +110,7 @@ public static ParseExampleDataset create(Scope scope, Operand inputDataset, O opBuilder.setAttr("dense_shapes", denseShapesArray); DataType[] outputTypesArray = new DataType[outputTypes.size()]; for (int i = 0; i < outputTypesArray.length; ++i) { - outputTypesArray[i] = DataType.fromClass(outputTypes.get(i)); + outputTypesArray[i] = outputTypes.get(i); } opBuilder.setAttr("output_types", outputTypesArray); Shape[] outputShapesArray = new Shape[outputShapes.size()]; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/PrefetchDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/PrefetchDataset.java index 096630a8aa4..4a58eabfb18 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/PrefetchDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/PrefetchDataset.java @@ -23,9 +23,10 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TInt64; /** * Creates a dataset that asynchronously prefetches elements from `input_dataset`. @@ -63,14 +64,14 @@ private Options() { * @param options carries optional attributes values * @return a new instance of PrefetchDataset */ - public static PrefetchDataset create(Scope scope, Operand inputDataset, Operand bufferSize, List> outputTypes, List outputShapes, Options... options) { + public static PrefetchDataset create(Scope scope, Operand inputDataset, Operand bufferSize, List> outputTypes, List outputShapes, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("PrefetchDataset", scope.makeOpName("PrefetchDataset")); opBuilder.addInput(inputDataset.asOutput()); opBuilder.addInput(bufferSize.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); DataType[] outputTypesArray = new DataType[outputTypes.size()]; for (int i = 0; i < outputTypesArray.length; ++i) { - outputTypesArray[i] = DataType.fromClass(outputTypes.get(i)); + outputTypesArray[i] = outputTypes.get(i); } opBuilder.setAttr("output_types", outputTypesArray); Shape[] outputShapesArray = new Shape[outputShapes.size()]; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/RandomDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/RandomDataset.java index 71df62da0f7..540906e012d 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/RandomDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/RandomDataset.java @@ -23,9 +23,10 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TInt64; /** * Creates a Dataset that returns pseudorandom numbers. @@ -44,14 +45,14 @@ public final class RandomDataset extends PrimitiveOp implements Operand * @param outputShapes * @return a new instance of RandomDataset */ - public static RandomDataset create(Scope scope, Operand seed, Operand seed2, List> outputTypes, List outputShapes) { + public static RandomDataset create(Scope scope, Operand seed, Operand seed2, List> outputTypes, List outputShapes) { OperationBuilder opBuilder = scope.env().opBuilder("RandomDataset", scope.makeOpName("RandomDataset")); opBuilder.addInput(seed.asOutput()); opBuilder.addInput(seed2.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); DataType[] outputTypesArray = new DataType[outputTypes.size()]; for (int i = 0; i < outputTypesArray.length; ++i) { - outputTypesArray[i] = DataType.fromClass(outputTypes.get(i)); + outputTypesArray[i] = outputTypes.get(i); } opBuilder.setAttr("output_types", outputTypesArray); Shape[] outputShapesArray = new Shape[outputShapes.size()]; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/RangeDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/RangeDataset.java index 7b15aa0072c..feb417604d7 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/RangeDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/RangeDataset.java @@ -23,9 +23,10 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TInt64; /** * Creates a dataset with a range of values. Corresponds to python's xrange. @@ -43,7 +44,7 @@ public final class RangeDataset extends PrimitiveOp implements Operand { * @param outputShapes * @return a new instance of RangeDataset */ - public static RangeDataset create(Scope scope, Operand start, Operand stop, Operand step, List> outputTypes, List outputShapes) { + public static RangeDataset create(Scope scope, Operand start, Operand stop, Operand step, List> outputTypes, List outputShapes) { OperationBuilder opBuilder = scope.env().opBuilder("RangeDataset", scope.makeOpName("RangeDataset")); opBuilder.addInput(start.asOutput()); opBuilder.addInput(stop.asOutput()); @@ -51,7 +52,7 @@ public static RangeDataset create(Scope scope, Operand start, Operand * @param outputShapes * @return a new instance of RepeatDataset */ - public static RepeatDataset create(Scope scope, Operand inputDataset, Operand count, List> outputTypes, List outputShapes) { + public static RepeatDataset create(Scope scope, Operand inputDataset, Operand count, List> outputTypes, List outputShapes) { OperationBuilder opBuilder = scope.env().opBuilder("RepeatDataset", scope.makeOpName("RepeatDataset")); opBuilder.addInput(inputDataset.asOutput()); opBuilder.addInput(count.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); DataType[] outputTypesArray = new DataType[outputTypes.size()]; for (int i = 0; i < outputTypesArray.length; ++i) { - outputTypesArray[i] = DataType.fromClass(outputTypes.get(i)); + outputTypesArray[i] = outputTypes.get(i); } opBuilder.setAttr("output_types", outputTypesArray); Shape[] outputShapesArray = new Shape[outputShapes.size()]; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/SetStatsAggregatorDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/SetStatsAggregatorDataset.java index 48af6285bb5..13531d71b74 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/SetStatsAggregatorDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/SetStatsAggregatorDataset.java @@ -23,9 +23,10 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TString; /** */ @@ -43,7 +44,7 @@ public final class SetStatsAggregatorDataset extends PrimitiveOp implements Oper * @param outputShapes * @return a new instance of SetStatsAggregatorDataset */ - public static SetStatsAggregatorDataset create(Scope scope, Operand inputDataset, Operand statsAggregator, Operand tag, Operand counterPrefix, List> outputTypes, List outputShapes) { + public static SetStatsAggregatorDataset create(Scope scope, Operand inputDataset, Operand statsAggregator, Operand tag, Operand counterPrefix, List> outputTypes, List outputShapes) { OperationBuilder opBuilder = scope.env().opBuilder("SetStatsAggregatorDataset", scope.makeOpName("SetStatsAggregatorDataset")); opBuilder.addInput(inputDataset.asOutput()); opBuilder.addInput(statsAggregator.asOutput()); @@ -52,7 +53,7 @@ public static SetStatsAggregatorDataset create(Scope scope, Operand inputData opBuilder = scope.applyControlDependencies(opBuilder); DataType[] outputTypesArray = new DataType[outputTypes.size()]; for (int i = 0; i < outputTypesArray.length; ++i) { - outputTypesArray[i] = DataType.fromClass(outputTypes.get(i)); + outputTypesArray[i] = outputTypes.get(i); } opBuilder.setAttr("output_types", outputTypesArray); Shape[] outputShapesArray = new Shape[outputShapes.size()]; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ShuffleAndRepeatDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ShuffleAndRepeatDataset.java index ceab49af5b6..6541e0b3e8b 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ShuffleAndRepeatDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ShuffleAndRepeatDataset.java @@ -23,9 +23,10 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TInt64; /** * Creates a dataset that shuffles and repeats elements from `input_dataset` @@ -52,7 +53,7 @@ public final class ShuffleAndRepeatDataset extends PrimitiveOp implements Operan * @param outputShapes * @return a new instance of ShuffleAndRepeatDataset */ - public static ShuffleAndRepeatDataset create(Scope scope, Operand inputDataset, Operand bufferSize, Operand seed, Operand seed2, Operand count, List> outputTypes, List outputShapes) { + public static ShuffleAndRepeatDataset create(Scope scope, Operand inputDataset, Operand bufferSize, Operand seed, Operand seed2, Operand count, List> outputTypes, List outputShapes) { OperationBuilder opBuilder = scope.env().opBuilder("ShuffleAndRepeatDataset", scope.makeOpName("ShuffleAndRepeatDataset")); opBuilder.addInput(inputDataset.asOutput()); opBuilder.addInput(bufferSize.asOutput()); @@ -62,7 +63,7 @@ public static ShuffleAndRepeatDataset create(Scope scope, Operand inputDatase opBuilder = scope.applyControlDependencies(opBuilder); DataType[] outputTypesArray = new DataType[outputTypes.size()]; for (int i = 0; i < outputTypesArray.length; ++i) { - outputTypesArray[i] = DataType.fromClass(outputTypes.get(i)); + outputTypesArray[i] = outputTypes.get(i); } opBuilder.setAttr("output_types", outputTypesArray); Shape[] outputShapesArray = new Shape[outputShapes.size()]; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ShuffleDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ShuffleDataset.java index 52742e28d8a..344cada9b03 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ShuffleDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ShuffleDataset.java @@ -23,9 +23,10 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TInt64; /** * Creates a dataset that shuffles elements from `input_dataset` pseudorandomly. @@ -72,7 +73,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of ShuffleDataset */ - public static ShuffleDataset create(Scope scope, Operand inputDataset, Operand bufferSize, Operand seed, Operand seed2, List> outputTypes, List outputShapes, Options... options) { + public static ShuffleDataset create(Scope scope, Operand inputDataset, Operand bufferSize, Operand seed, Operand seed2, List> outputTypes, List outputShapes, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("ShuffleDataset", scope.makeOpName("ShuffleDataset")); opBuilder.addInput(inputDataset.asOutput()); opBuilder.addInput(bufferSize.asOutput()); @@ -81,7 +82,7 @@ public static ShuffleDataset create(Scope scope, Operand inputDataset, Operan opBuilder = scope.applyControlDependencies(opBuilder); DataType[] outputTypesArray = new DataType[outputTypes.size()]; for (int i = 0; i < outputTypesArray.length; ++i) { - outputTypesArray[i] = DataType.fromClass(outputTypes.get(i)); + outputTypesArray[i] = outputTypes.get(i); } opBuilder.setAttr("output_types", outputTypesArray); Shape[] outputShapesArray = new Shape[outputShapes.size()]; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/SkipDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/SkipDataset.java index fe94dd1ac72..3c41ef89369 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/SkipDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/SkipDataset.java @@ -23,9 +23,10 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TInt64; /** * Creates a dataset that skips `count` elements from the `input_dataset`. @@ -43,14 +44,14 @@ public final class SkipDataset extends PrimitiveOp implements Operand { * @param outputShapes * @return a new instance of SkipDataset */ - public static SkipDataset create(Scope scope, Operand inputDataset, Operand count, List> outputTypes, List outputShapes) { + public static SkipDataset create(Scope scope, Operand inputDataset, Operand count, List> outputTypes, List outputShapes) { OperationBuilder opBuilder = scope.env().opBuilder("SkipDataset", scope.makeOpName("SkipDataset")); opBuilder.addInput(inputDataset.asOutput()); opBuilder.addInput(count.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); DataType[] outputTypesArray = new DataType[outputTypes.size()]; for (int i = 0; i < outputTypesArray.length; ++i) { - outputTypesArray[i] = DataType.fromClass(outputTypes.get(i)); + outputTypesArray[i] = outputTypes.get(i); } opBuilder.setAttr("output_types", outputTypesArray); Shape[] outputShapesArray = new Shape[outputShapes.size()]; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/SparseTensorSliceDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/SparseTensorSliceDataset.java index 96b63e4f1c8..e5b703f23c3 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/SparseTensorSliceDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/SparseTensorSliceDataset.java @@ -23,6 +23,7 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TInt64; /** * Creates a dataset that splits a SparseTensor into elements row-wise. @@ -38,7 +39,7 @@ public final class SparseTensorSliceDataset extends PrimitiveOp implements Opera * @param denseShape * @return a new instance of SparseTensorSliceDataset */ - public static SparseTensorSliceDataset create(Scope scope, Operand indices, Operand values, Operand denseShape) { + public static SparseTensorSliceDataset create(Scope scope, Operand indices, Operand values, Operand denseShape) { OperationBuilder opBuilder = scope.env().opBuilder("SparseTensorSliceDataset", scope.makeOpName("SparseTensorSliceDataset")); opBuilder.addInput(indices.asOutput()); opBuilder.addInput(values.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/SqlDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/SqlDataset.java index 6f942382557..78d445fbdc5 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/SqlDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/SqlDataset.java @@ -23,9 +23,10 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TString; /** * Creates a dataset that executes a SQL query and emits rows of the result set. @@ -43,7 +44,7 @@ public final class SqlDataset extends PrimitiveOp implements Operand { * @param outputShapes * @return a new instance of SqlDataset */ - public static SqlDataset create(Scope scope, Operand driverName, Operand dataSourceName, Operand query, List> outputTypes, List outputShapes) { + public static SqlDataset create(Scope scope, Operand driverName, Operand dataSourceName, Operand query, List> outputTypes, List outputShapes) { OperationBuilder opBuilder = scope.env().opBuilder("SqlDataset", scope.makeOpName("SqlDataset")); opBuilder.addInput(driverName.asOutput()); opBuilder.addInput(dataSourceName.asOutput()); @@ -51,7 +52,7 @@ public static SqlDataset create(Scope scope, Operand driverName, Operand opBuilder = scope.applyControlDependencies(opBuilder); DataType[] outputTypesArray = new DataType[outputTypes.size()]; for (int i = 0; i < outputTypesArray.length; ++i) { - outputTypesArray[i] = DataType.fromClass(outputTypes.get(i)); + outputTypesArray[i] = outputTypes.get(i); } opBuilder.setAttr("output_types", outputTypesArray); Shape[] outputShapesArray = new Shape[outputShapes.size()]; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/TakeDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/TakeDataset.java index 8fa273a7d18..113dd76933a 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/TakeDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/TakeDataset.java @@ -23,9 +23,10 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TInt64; /** * Creates a dataset that contains `count` elements from the `input_dataset`. @@ -44,14 +45,14 @@ public final class TakeDataset extends PrimitiveOp implements Operand { * @param outputShapes * @return a new instance of TakeDataset */ - public static TakeDataset create(Scope scope, Operand inputDataset, Operand count, List> outputTypes, List outputShapes) { + public static TakeDataset create(Scope scope, Operand inputDataset, Operand count, List> outputTypes, List outputShapes) { OperationBuilder opBuilder = scope.env().opBuilder("TakeDataset", scope.makeOpName("TakeDataset")); opBuilder.addInput(inputDataset.asOutput()); opBuilder.addInput(count.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); DataType[] outputTypesArray = new DataType[outputTypes.size()]; for (int i = 0; i < outputTypesArray.length; ++i) { - outputTypesArray[i] = DataType.fromClass(outputTypes.get(i)); + outputTypesArray[i] = outputTypes.get(i); } opBuilder.setAttr("output_types", outputTypesArray); Shape[] outputShapesArray = new Shape[outputShapes.size()]; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/TensorDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/TensorDataset.java index 9af25709b76..b71b05ad0e0 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/TensorDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/TensorDataset.java @@ -22,7 +22,7 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.Operands; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/TensorSliceDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/TensorSliceDataset.java index 7b2ac67022a..0830c01cdc4 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/TensorSliceDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/TensorSliceDataset.java @@ -22,7 +22,7 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.Operands; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/TextLineDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/TextLineDataset.java index bde1fa9762f..2b6117325e9 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/TextLineDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/TextLineDataset.java @@ -23,6 +23,8 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TInt64; +import org.tensorflow.types.TString; /** * Creates a dataset that emits the lines of one or more text files. @@ -40,7 +42,7 @@ public final class TextLineDataset extends PrimitiveOp implements Operand filenames, Operand compressionType, Operand bufferSize) { + public static TextLineDataset create(Scope scope, Operand filenames, Operand compressionType, Operand bufferSize) { OperationBuilder opBuilder = scope.env().opBuilder("TextLineDataset", scope.makeOpName("TextLineDataset")); opBuilder.addInput(filenames.asOutput()); opBuilder.addInput(compressionType.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/TfRecordDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/TfRecordDataset.java index 558c8cf0532..5b5d2fb8dc0 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/TfRecordDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/TfRecordDataset.java @@ -23,6 +23,8 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TInt64; +import org.tensorflow.types.TString; /** * Creates a dataset that emits the records from one or more TFRecord files. @@ -41,7 +43,7 @@ public final class TfRecordDataset extends PrimitiveOp implements Operand filenames, Operand compressionType, Operand bufferSize) { + public static TfRecordDataset create(Scope scope, Operand filenames, Operand compressionType, Operand bufferSize) { OperationBuilder opBuilder = scope.env().opBuilder("TFRecordDataset", scope.makeOpName("TfRecordDataset")); opBuilder.addInput(filenames.asOutput()); opBuilder.addInput(compressionType.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/UnbatchDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/UnbatchDataset.java index 826f48f42d4..2cbf5d5f10f 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/UnbatchDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/UnbatchDataset.java @@ -23,7 +23,7 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; @@ -41,13 +41,13 @@ public final class UnbatchDataset extends PrimitiveOp implements Operand * @param outputShapes * @return a new instance of UnbatchDataset */ - public static UnbatchDataset create(Scope scope, Operand inputDataset, List> outputTypes, List outputShapes) { + public static UnbatchDataset create(Scope scope, Operand inputDataset, List> outputTypes, List outputShapes) { OperationBuilder opBuilder = scope.env().opBuilder("UnbatchDataset", scope.makeOpName("UnbatchDataset")); opBuilder.addInput(inputDataset.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); DataType[] outputTypesArray = new DataType[outputTypes.size()]; for (int i = 0; i < outputTypesArray.length; ++i) { - outputTypesArray[i] = DataType.fromClass(outputTypes.get(i)); + outputTypesArray[i] = outputTypes.get(i); } opBuilder.setAttr("output_types", outputTypesArray); Shape[] outputShapesArray = new Shape[outputShapes.size()]; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/WindowDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/WindowDataset.java index fcaaf2c1d75..76c9fda3faa 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/WindowDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/WindowDataset.java @@ -23,9 +23,11 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TBool; +import org.tensorflow.types.TInt64; /** * A dataset that creates window datasets from the input dataset. @@ -48,7 +50,7 @@ public final class WindowDataset extends PrimitiveOp implements Operand * @param outputShapes * @return a new instance of WindowDataset */ - public static WindowDataset create(Scope scope, Operand inputDataset, Operand size, Operand shift, Operand stride, Operand dropRemainder, List> outputTypes, List outputShapes) { + public static WindowDataset create(Scope scope, Operand inputDataset, Operand size, Operand shift, Operand stride, Operand dropRemainder, List> outputTypes, List outputShapes) { OperationBuilder opBuilder = scope.env().opBuilder("WindowDataset", scope.makeOpName("WindowDataset")); opBuilder.addInput(inputDataset.asOutput()); opBuilder.addInput(size.asOutput()); @@ -58,7 +60,7 @@ public static WindowDataset create(Scope scope, Operand inputDataset, Operand opBuilder = scope.applyControlDependencies(opBuilder); DataType[] outputTypesArray = new DataType[outputTypes.size()]; for (int i = 0; i < outputTypesArray.length; ++i) { - outputTypesArray[i] = DataType.fromClass(outputTypes.get(i)); + outputTypesArray[i] = outputTypes.get(i); } opBuilder.setAttr("output_types", outputTypesArray); Shape[] outputShapesArray = new Shape[outputShapes.size()]; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ZipDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ZipDataset.java index 2d57e4ae891..78cff7d4037 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ZipDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ZipDataset.java @@ -23,7 +23,7 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.Operands; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; @@ -42,13 +42,13 @@ public final class ZipDataset extends PrimitiveOp implements Operand { * @param outputShapes * @return a new instance of ZipDataset */ - public static ZipDataset create(Scope scope, Iterable> inputDatasets, List> outputTypes, List outputShapes) { + public static ZipDataset create(Scope scope, Iterable> inputDatasets, List> outputTypes, List outputShapes) { OperationBuilder opBuilder = scope.env().opBuilder("ZipDataset", scope.makeOpName("ZipDataset")); opBuilder.addInputList(Operands.asOutputs(inputDatasets)); opBuilder = scope.applyControlDependencies(opBuilder); DataType[] outputTypesArray = new DataType[outputTypes.size()]; for (int i = 0; i < outputTypesArray.length; ++i) { - outputTypesArray[i] = DataType.fromClass(outputTypes.get(i)); + outputTypesArray[i] = outputTypes.get(i); } opBuilder.setAttr("output_types", outputTypesArray); Shape[] outputShapesArray = new Shape[outputShapes.size()]; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/dtypes/AsString.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/dtypes/AsString.java index 8cafae3ce4a..4fc47978381 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/dtypes/AsString.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/dtypes/AsString.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TString; /** * Converts each entry in the given tensor to strings. @@ -35,7 +36,7 @@ * tutorial. */ @Operator(group = "dtypes") -public final class AsString extends PrimitiveOp implements Operand { +public final class AsString extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.dtypes.AsString} @@ -173,16 +174,16 @@ public static Options fill(String fill) { /** */ - public Output output() { + public Output output() { return output; } @Override - public Output asOutput() { + public Output asOutput() { return output; } - private Output output; + private Output output; private AsString(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/dtypes/Cast.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/dtypes/Cast.java index 68383454081..f68d3dc5959 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/dtypes/Cast.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/dtypes/Cast.java @@ -62,11 +62,11 @@ private Options() { * @param options carries optional attributes values * @return a new instance of Cast */ - public static Cast create(Scope scope, Operand x, Class DstT, Options... options) { + public static Cast create(Scope scope, Operand x, DataType DstT, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("Cast", scope.makeOpName("Cast")); opBuilder.addInput(x.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); - opBuilder.setAttr("DstT", DataType.fromClass(DstT)); + opBuilder.setAttr("DstT", DstT); if (options != null) { for (Options opts : options) { if (opts.Truncate != null) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/dtypes/Complex.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/dtypes/Complex.java index dbb221ec065..3f36709f15e 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/dtypes/Complex.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/dtypes/Complex.java @@ -25,6 +25,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Converts two real numbers to a complex number. @@ -58,12 +59,12 @@ public final class Complex extends PrimitiveOp implements Operand { * @param Tout * @return a new instance of Complex */ - public static Complex create(Scope scope, Operand real, Operand imag, Class Tout) { + public static Complex create(Scope scope, Operand real, Operand imag, DataType Tout) { OperationBuilder opBuilder = scope.env().opBuilder("Complex", scope.makeOpName("Complex")); opBuilder.addInput(real.asOutput()); opBuilder.addInput(imag.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); - opBuilder.setAttr("Tout", DataType.fromClass(Tout)); + opBuilder.setAttr("Tout", Tout); return new Complex(opBuilder.build()); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/AdjustContrast.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/AdjustContrast.java index 4133440f9d5..62584c36e80 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/AdjustContrast.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/AdjustContrast.java @@ -24,6 +24,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TFloat; +import org.tensorflow.types.family.TNumber; /** * Adjust the contrast of one or more images. @@ -41,7 +43,7 @@ * @param data type for {@code output()} output */ @Operator(group = "image") -public final class AdjustContrast extends PrimitiveOp implements Operand { +public final class AdjustContrast extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new AdjustContrast operation. @@ -51,7 +53,7 @@ public final class AdjustContrast extends PrimitiveOp implemen * @param contrastFactor A float multiplier for adjusting contrast. * @return a new instance of AdjustContrast */ - public static AdjustContrast create(Scope scope, Operand images, Operand contrastFactor) { + public static AdjustContrast create(Scope scope, Operand images, Operand contrastFactor) { OperationBuilder opBuilder = scope.env().opBuilder("AdjustContrastv2", scope.makeOpName("AdjustContrast")); opBuilder.addInput(images.asOutput()); opBuilder.addInput(contrastFactor.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/AdjustHue.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/AdjustHue.java index 67eb95e5faa..a1f7a2c8bb4 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/AdjustHue.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/AdjustHue.java @@ -24,6 +24,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TFloat; +import org.tensorflow.types.family.TNumber; /** * Adjust the hue of one or more images. @@ -38,7 +40,7 @@ * @param data type for {@code output()} output */ @Operator(group = "image") -public final class AdjustHue extends PrimitiveOp implements Operand { +public final class AdjustHue extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new AdjustHue operation. @@ -48,7 +50,7 @@ public final class AdjustHue extends PrimitiveOp implements Op * @param delta A float delta to add to the hue. * @return a new instance of AdjustHue */ - public static AdjustHue create(Scope scope, Operand images, Operand delta) { + public static AdjustHue create(Scope scope, Operand images, Operand delta) { OperationBuilder opBuilder = scope.env().opBuilder("AdjustHue", scope.makeOpName("AdjustHue")); opBuilder.addInput(images.asOutput()); opBuilder.addInput(delta.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/AdjustSaturation.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/AdjustSaturation.java index e1397a5942e..66126e06029 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/AdjustSaturation.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/AdjustSaturation.java @@ -24,6 +24,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TFloat; +import org.tensorflow.types.family.TNumber; /** * Adjust the saturation of one or more images. @@ -38,7 +40,7 @@ * @param data type for {@code output()} output */ @Operator(group = "image") -public final class AdjustSaturation extends PrimitiveOp implements Operand { +public final class AdjustSaturation extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new AdjustSaturation operation. @@ -48,7 +50,7 @@ public final class AdjustSaturation extends PrimitiveOp implem * @param scale A float scale to add to the saturation. * @return a new instance of AdjustSaturation */ - public static AdjustSaturation create(Scope scope, Operand images, Operand scale) { + public static AdjustSaturation create(Scope scope, Operand images, Operand scale) { OperationBuilder opBuilder = scope.env().opBuilder("AdjustSaturation", scope.makeOpName("AdjustSaturation")); opBuilder.addInput(images.asOutput()); opBuilder.addInput(scale.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/CropAndResize.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/CropAndResize.java index 3e012342d61..07abdec38ee 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/CropAndResize.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/CropAndResize.java @@ -24,6 +24,9 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TFloat; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.family.TNumber; /** * Extracts crops from the input image tensor and resizes them. @@ -45,7 +48,7 @@ * `align_corners=True`. */ @Operator(group = "image") -public final class CropAndResize extends PrimitiveOp implements Operand { +public final class CropAndResize extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.image.CropAndResize} @@ -102,7 +105,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of CropAndResize */ - public static CropAndResize create(Scope scope, Operand image, Operand boxes, Operand boxInd, Operand cropSize, Options... options) { + public static CropAndResize create(Scope scope, Operand image, Operand boxes, Operand boxInd, Operand cropSize, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("CropAndResize", scope.makeOpName("CropAndResize")); opBuilder.addInput(image.asOutput()); opBuilder.addInput(boxes.asOutput()); @@ -141,16 +144,16 @@ public static Options extrapolationValue(Float extrapolationValue) { /** * A 4-D tensor of shape `[num_boxes, crop_height, crop_width, depth]`. */ - public Output crops() { + public Output crops() { return crops; } @Override - public Output asOutput() { + public Output asOutput() { return crops; } - private Output crops; + private Output crops; private CropAndResize(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/CropAndResizeGradBoxes.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/CropAndResizeGradBoxes.java index bbece0dd10c..3720428c6e0 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/CropAndResizeGradBoxes.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/CropAndResizeGradBoxes.java @@ -24,12 +24,15 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TFloat; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.family.TNumber; /** * Computes the gradient of the crop_and_resize op wrt the input boxes tensor. */ @Operator(group = "image") -public final class CropAndResizeGradBoxes extends PrimitiveOp implements Operand { +public final class CropAndResizeGradBoxes extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.image.CropAndResizeGradBoxes} @@ -73,7 +76,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of CropAndResizeGradBoxes */ - public static CropAndResizeGradBoxes create(Scope scope, Operand grads, Operand image, Operand boxes, Operand boxInd, Options... options) { + public static CropAndResizeGradBoxes create(Scope scope, Operand grads, Operand image, Operand boxes, Operand boxInd, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("CropAndResizeGradBoxes", scope.makeOpName("CropAndResizeGradBoxes")); opBuilder.addInput(grads.asOutput()); opBuilder.addInput(image.asOutput()); @@ -101,16 +104,16 @@ public static Options method(String method) { /** * A 2-D tensor of shape `[num_boxes, 4]`. */ - public Output output() { + public Output output() { return output; } @Override - public Output asOutput() { + public Output asOutput() { return output; } - private Output output; + private Output output; private CropAndResizeGradBoxes(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/CropAndResizeGradImage.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/CropAndResizeGradImage.java index c53c14b2de4..9552e8dbc4c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/CropAndResizeGradImage.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/CropAndResizeGradImage.java @@ -25,6 +25,9 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TFloat; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.family.TNumber; /** * Computes the gradient of the crop_and_resize op wrt the input image tensor. @@ -32,7 +35,7 @@ * @param data type for {@code output()} output */ @Operator(group = "image") -public final class CropAndResizeGradImage extends PrimitiveOp implements Operand { +public final class CropAndResizeGradImage extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.image.CropAndResizeGradImage} @@ -78,14 +81,14 @@ private Options() { * @param options carries optional attributes values * @return a new instance of CropAndResizeGradImage */ - public static CropAndResizeGradImage create(Scope scope, Operand grads, Operand boxes, Operand boxInd, Operand imageSize, Class T, Options... options) { + public static CropAndResizeGradImage create(Scope scope, Operand grads, Operand boxes, Operand boxInd, Operand imageSize, DataType T, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("CropAndResizeGradImage", scope.makeOpName("CropAndResizeGradImage")); opBuilder.addInput(grads.asOutput()); opBuilder.addInput(boxes.asOutput()); opBuilder.addInput(boxInd.asOutput()); opBuilder.addInput(imageSize.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); - opBuilder.setAttr("T", DataType.fromClass(T)); + opBuilder.setAttr("T", T); if (options != null) { for (Options opts : options) { if (opts.method != null) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/DecodeAndCropJpeg.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/DecodeAndCropJpeg.java index 5573175d7e8..8f8ecec8052 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/DecodeAndCropJpeg.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/DecodeAndCropJpeg.java @@ -24,7 +24,9 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; -import org.tensorflow.types.UInt8; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.TString; +import org.tensorflow.types.TUInt8; /** * Decode and Crop a JPEG-encoded image to a uint8 tensor. @@ -55,7 +57,7 @@ * decoding partial jpeg image. */ @Operator(group = "image") -public final class DecodeAndCropJpeg extends PrimitiveOp implements Operand { +public final class DecodeAndCropJpeg extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.image.DecodeAndCropJpeg} @@ -137,7 +139,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of DecodeAndCropJpeg */ - public static DecodeAndCropJpeg create(Scope scope, Operand contents, Operand cropWindow, Options... options) { + public static DecodeAndCropJpeg create(Scope scope, Operand contents, Operand cropWindow, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("DecodeAndCropJpeg", scope.makeOpName("DecodeAndCropJpeg")); opBuilder.addInput(contents.asOutput()); opBuilder.addInput(cropWindow.asOutput()); @@ -219,16 +221,16 @@ public static Options dctMethod(String dctMethod) { /** * 3-D with shape `[height, width, channels]`.. */ - public Output image() { + public Output image() { return image; } @Override - public Output asOutput() { + public Output asOutput() { return image; } - private Output image; + private Output image; private DecodeAndCropJpeg(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/DecodeBmp.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/DecodeBmp.java index 9911c28450c..18b16ffcf7f 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/DecodeBmp.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/DecodeBmp.java @@ -24,7 +24,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; -import org.tensorflow.types.UInt8; +import org.tensorflow.types.TString; +import org.tensorflow.types.TUInt8; /** * Decode the first frame of a BMP-encoded image to a uint8 tensor. @@ -44,7 +45,7 @@ * 4: output an RGBA image. */ @Operator(group = "image") -public final class DecodeBmp extends PrimitiveOp implements Operand { +public final class DecodeBmp extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.image.DecodeBmp} @@ -73,7 +74,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of DecodeBmp */ - public static DecodeBmp create(Scope scope, Operand contents, Options... options) { + public static DecodeBmp create(Scope scope, Operand contents, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("DecodeBmp", scope.makeOpName("DecodeBmp")); opBuilder.addInput(contents.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); @@ -97,16 +98,16 @@ public static Options channels(Long channels) { /** * 3-D with shape `[height, width, channels]`. RGB order */ - public Output image() { + public Output image() { return image; } @Override - public Output asOutput() { + public Output asOutput() { return image; } - private Output image; + private Output image; private DecodeBmp(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/DecodeGif.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/DecodeGif.java index 2e9f29eb6b3..0042ffeac39 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/DecodeGif.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/DecodeGif.java @@ -24,7 +24,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; -import org.tensorflow.types.UInt8; +import org.tensorflow.types.TString; +import org.tensorflow.types.TUInt8; /** * Decode the frame(s) of a GIF-encoded image to a uint8 tensor. @@ -39,7 +40,7 @@ * `tf.image.decode_image`. */ @Operator(group = "image") -public final class DecodeGif extends PrimitiveOp implements Operand { +public final class DecodeGif extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new DecodeGif operation. @@ -48,7 +49,7 @@ public final class DecodeGif extends PrimitiveOp implements Operand { * @param contents 0-D. The GIF-encoded image. * @return a new instance of DecodeGif */ - public static DecodeGif create(Scope scope, Operand contents) { + public static DecodeGif create(Scope scope, Operand contents) { OperationBuilder opBuilder = scope.env().opBuilder("DecodeGif", scope.makeOpName("DecodeGif")); opBuilder.addInput(contents.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); @@ -58,16 +59,16 @@ public static DecodeGif create(Scope scope, Operand contents) { /** * 4-D with shape `[num_frames, height, width, 3]`. RGB channel order. */ - public Output image() { + public Output image() { return image; } @Override - public Output asOutput() { + public Output asOutput() { return image; } - private Output image; + private Output image; private DecodeGif(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/DecodeJpeg.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/DecodeJpeg.java index 4fe7c18cb99..b0ff7c262f5 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/DecodeJpeg.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/DecodeJpeg.java @@ -24,7 +24,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; -import org.tensorflow.types.UInt8; +import org.tensorflow.types.TString; +import org.tensorflow.types.TUInt8; /** * Decode a JPEG-encoded image to a uint8 tensor. @@ -55,7 +56,7 @@ * the same, though it is cleaner to use `tf.image.decode_image`. */ @Operator(group = "image") -public final class DecodeJpeg extends PrimitiveOp implements Operand { +public final class DecodeJpeg extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.image.DecodeJpeg} @@ -136,7 +137,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of DecodeJpeg */ - public static DecodeJpeg create(Scope scope, Operand contents, Options... options) { + public static DecodeJpeg create(Scope scope, Operand contents, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("DecodeJpeg", scope.makeOpName("DecodeJpeg")); opBuilder.addInput(contents.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); @@ -217,16 +218,16 @@ public static Options dctMethod(String dctMethod) { /** * 3-D with shape `[height, width, channels]`.. */ - public Output image() { + public Output image() { return image; } @Override - public Output asOutput() { + public Output asOutput() { return image; } - private Output image; + private Output image; private DecodeJpeg(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/DecodePng.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/DecodePng.java index 2788de66b7f..fff7dbdf3d2 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/DecodePng.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/DecodePng.java @@ -25,7 +25,9 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; -import org.tensorflow.types.UInt8; +import org.tensorflow.types.TString; +import org.tensorflow.types.TUInt8; +import org.tensorflow.types.family.TNumber; /** * Decode a PNG-encoded image to a uint8 or uint16 tensor. @@ -57,7 +59,7 @@ * @param data type for {@code image()} output */ @Operator(group = "image") -public final class DecodePng extends PrimitiveOp implements Operand { +public final class DecodePng extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.image.DecodePng} @@ -87,11 +89,11 @@ private Options() { * @param options carries optional attributes values * @return a new instance of DecodePng */ - public static DecodePng create(Scope scope, Operand contents, Class dtype, Options... options) { + public static DecodePng create(Scope scope, Operand contents, DataType dtype, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("DecodePng", scope.makeOpName("DecodePng")); opBuilder.addInput(contents.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); - opBuilder.setAttr("dtype", DataType.fromClass(dtype)); + opBuilder.setAttr("dtype", dtype); if (options != null) { for (Options opts : options) { if (opts.channels != null) { @@ -110,8 +112,8 @@ public static DecodePng create(Scope scope, Operand create(Scope scope, Operand contents, Options... options) { - return create(scope, contents, UInt8.class, options); + public static DecodePng create(Scope scope, Operand contents, Options... options) { + return create(scope, contents, TUInt8.DTYPE, options); } /** diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/DrawBoundingBoxes.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/DrawBoundingBoxes.java index 34976c72e89..17b72c38089 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/DrawBoundingBoxes.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/DrawBoundingBoxes.java @@ -24,6 +24,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TFloat; +import org.tensorflow.types.family.TNumber; /** * Draw bounding boxes on a batch of images. @@ -43,7 +45,7 @@ * @param data type for {@code output()} output */ @Operator(group = "image") -public final class DrawBoundingBoxes extends PrimitiveOp implements Operand { +public final class DrawBoundingBoxes extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new DrawBoundingBoxes operation. @@ -54,7 +56,7 @@ public final class DrawBoundingBoxes extends PrimitiveOp imple * boxes. * @return a new instance of DrawBoundingBoxes */ - public static DrawBoundingBoxes create(Scope scope, Operand images, Operand boxes) { + public static DrawBoundingBoxes create(Scope scope, Operand images, Operand boxes) { OperationBuilder opBuilder = scope.env().opBuilder("DrawBoundingBoxes", scope.makeOpName("DrawBoundingBoxes")); opBuilder.addInput(images.asOutput()); opBuilder.addInput(boxes.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/EncodeJpeg.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/EncodeJpeg.java index 59fe6db7989..2063a7a10b2 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/EncodeJpeg.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/EncodeJpeg.java @@ -24,7 +24,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; -import org.tensorflow.types.UInt8; +import org.tensorflow.types.TString; +import org.tensorflow.types.TUInt8; /** * JPEG-encode an image. @@ -56,7 +57,7 @@ * 3: Output an RGB image. */ @Operator(group = "image") -public final class EncodeJpeg extends PrimitiveOp implements Operand { +public final class EncodeJpeg extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.image.EncodeJpeg} @@ -158,7 +159,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of EncodeJpeg */ - public static EncodeJpeg create(Scope scope, Operand image, Options... options) { + public static EncodeJpeg create(Scope scope, Operand image, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("EncodeJpeg", scope.makeOpName("EncodeJpeg")); opBuilder.addInput(image.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); @@ -263,16 +264,16 @@ public static Options xmpMetadata(String xmpMetadata) { /** * 0-D. JPEG-encoded image. */ - public Output contents() { + public Output contents() { return contents; } @Override - public Output asOutput() { + public Output asOutput() { return contents; } - private Output contents; + private Output contents; private EncodeJpeg(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/EncodeJpegVariableQuality.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/EncodeJpegVariableQuality.java index be0c80ba4a9..2a26b0e765b 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/EncodeJpegVariableQuality.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/EncodeJpegVariableQuality.java @@ -24,7 +24,9 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; -import org.tensorflow.types.UInt8; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.TString; +import org.tensorflow.types.TUInt8; /** * JPEG encode input image with provided compression quality. @@ -34,7 +36,7 @@ * */ @Operator(group = "image") -public final class EncodeJpegVariableQuality extends PrimitiveOp implements Operand { +public final class EncodeJpegVariableQuality extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new EncodeJpegVariableQuality operation. @@ -44,7 +46,7 @@ public final class EncodeJpegVariableQuality extends PrimitiveOp implements Oper * @param quality An int quality to encode to. * @return a new instance of EncodeJpegVariableQuality */ - public static EncodeJpegVariableQuality create(Scope scope, Operand images, Operand quality) { + public static EncodeJpegVariableQuality create(Scope scope, Operand images, Operand quality) { OperationBuilder opBuilder = scope.env().opBuilder("EncodeJpegVariableQuality", scope.makeOpName("EncodeJpegVariableQuality")); opBuilder.addInput(images.asOutput()); opBuilder.addInput(quality.asOutput()); @@ -55,16 +57,16 @@ public static EncodeJpegVariableQuality create(Scope scope, Operand image /** * 0-D. JPEG-encoded image. */ - public Output contents() { + public Output contents() { return contents; } @Override - public Output asOutput() { + public Output asOutput() { return contents; } - private Output contents; + private Output contents; private EncodeJpegVariableQuality(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/EncodePng.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/EncodePng.java index e033df5281f..24ce36e83e1 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/EncodePng.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/EncodePng.java @@ -24,6 +24,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TString; +import org.tensorflow.types.family.TNumber; /** * PNG-encode an image. @@ -49,7 +51,7 @@ * the smallest output, but is slower. */ @Operator(group = "image") -public final class EncodePng extends PrimitiveOp implements Operand { +public final class EncodePng extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.image.EncodePng} @@ -78,7 +80,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of EncodePng */ - public static EncodePng create(Scope scope, Operand image, Options... options) { + public static EncodePng create(Scope scope, Operand image, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("EncodePng", scope.makeOpName("EncodePng")); opBuilder.addInput(image.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); @@ -102,16 +104,16 @@ public static Options compression(Long compression) { /** * 0-D. PNG-encoded image. */ - public Output contents() { + public Output contents() { return contents; } @Override - public Output asOutput() { + public Output asOutput() { return contents; } - private Output contents; + private Output contents; private EncodePng(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/ExtractGlimpse.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/ExtractGlimpse.java index e1cfec69dc1..4729b67f918 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/ExtractGlimpse.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/ExtractGlimpse.java @@ -24,6 +24,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TFloat; +import org.tensorflow.types.TInt32; /** * Extracts a glimpse from the input tensor. @@ -56,7 +58,7 @@ * numbers of pixels. */ @Operator(group = "image") -public final class ExtractGlimpse extends PrimitiveOp implements Operand { +public final class ExtractGlimpse extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.image.ExtractGlimpse} @@ -123,7 +125,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of ExtractGlimpse */ - public static ExtractGlimpse create(Scope scope, Operand input, Operand size, Operand offsets, Options... options) { + public static ExtractGlimpse create(Scope scope, Operand input, Operand size, Operand offsets, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("ExtractGlimpse", scope.makeOpName("ExtractGlimpse")); opBuilder.addInput(input.asOutput()); opBuilder.addInput(size.asOutput()); @@ -186,16 +188,16 @@ public static Options noise(String noise) { * A tensor representing the glimpses `[batch_size, * glimpse_height, glimpse_width, channels]`. */ - public Output glimpse() { + public Output glimpse() { return glimpse; } @Override - public Output asOutput() { + public Output asOutput() { return glimpse; } - private Output glimpse; + private Output glimpse; private ExtractGlimpse(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/ExtractImagePatches.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/ExtractImagePatches.java index f8a52338103..b19468ad35e 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/ExtractImagePatches.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/ExtractImagePatches.java @@ -25,6 +25,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Extract `patches` from `images` and put them in the "depth" output dimension. @@ -32,7 +33,7 @@ * @param data type for {@code patches()} output */ @Operator(group = "image") -public final class ExtractImagePatches extends PrimitiveOp implements Operand { +public final class ExtractImagePatches extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new ExtractImagePatches operation. @@ -51,7 +52,7 @@ public final class ExtractImagePatches extends PrimitiveOp imp * @param padding The type of padding algorithm to use. * @return a new instance of ExtractImagePatches */ - public static ExtractImagePatches create(Scope scope, Operand images, List ksizes, List strides, List rates, String padding) { + public static ExtractImagePatches create(Scope scope, Operand images, List ksizes, List strides, List rates, String padding) { OperationBuilder opBuilder = scope.env().opBuilder("ExtractImagePatches", scope.makeOpName("ExtractImagePatches")); opBuilder.addInput(images.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/ExtractJpegShape.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/ExtractJpegShape.java index 85f9b22f619..e99229b2f00 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/ExtractJpegShape.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/ExtractJpegShape.java @@ -25,6 +25,9 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.TString; +import org.tensorflow.types.family.TNumber; /** * Extract the shape information of a JPEG-encoded image. @@ -34,7 +37,7 @@ * @param data type for {@code imageShape()} output */ @Operator(group = "image") -public final class ExtractJpegShape extends PrimitiveOp implements Operand { +public final class ExtractJpegShape extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new ExtractJpegShape operation. @@ -45,11 +48,11 @@ public final class ExtractJpegShape extends PrimitiveOp implem * Defaults to int32. * @return a new instance of ExtractJpegShape */ - public static ExtractJpegShape create(Scope scope, Operand contents, Class outputType) { + public static ExtractJpegShape create(Scope scope, Operand contents, DataType outputType) { OperationBuilder opBuilder = scope.env().opBuilder("ExtractJpegShape", scope.makeOpName("ExtractJpegShape")); opBuilder.addInput(contents.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); - opBuilder.setAttr("output_type", DataType.fromClass(outputType)); + opBuilder.setAttr("output_type", outputType); return new ExtractJpegShape(opBuilder.build()); } @@ -60,8 +63,8 @@ public static ExtractJpegShape create(Scope scope, Operand * @param contents 0-D. The JPEG-encoded image. * @return a new instance of ExtractJpegShape */ - public static ExtractJpegShape create(Scope scope, Operand contents) { - return create(scope, contents, Integer.class); + public static ExtractJpegShape create(Scope scope, Operand contents) { + return create(scope, contents, TInt32.DTYPE); } /** diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/HsvToRgb.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/HsvToRgb.java index a6dede6b80b..370ae45b60d 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/HsvToRgb.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/HsvToRgb.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Convert one or more images from HSV to RGB. @@ -37,7 +38,7 @@ * @param data type for {@code output()} output */ @Operator(group = "image") -public final class HsvToRgb extends PrimitiveOp implements Operand { +public final class HsvToRgb extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new HsvToRgb operation. @@ -46,7 +47,7 @@ public final class HsvToRgb extends PrimitiveOp implements Ope * @param images 1-D or higher rank. HSV data to convert. Last dimension must be size 3. * @return a new instance of HsvToRgb */ - public static HsvToRgb create(Scope scope, Operand images) { + public static HsvToRgb create(Scope scope, Operand images) { OperationBuilder opBuilder = scope.env().opBuilder("HSVToRGB", scope.makeOpName("HsvToRgb")); opBuilder.addInput(images.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/NonMaxSuppression.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/NonMaxSuppression.java index 9cd2bbedece..2ab8dc3bb33 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/NonMaxSuppression.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/NonMaxSuppression.java @@ -24,6 +24,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.family.TNumber; /** * Greedily selects a subset of bounding boxes in descending order of score, @@ -85,7 +87,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of NonMaxSuppression */ - public static NonMaxSuppression create(Scope scope, Operand boxes, Operand scores, Operand maxOutputSize, Operand iouThreshold, Operand scoreThreshold, Options... options) { + public static NonMaxSuppression create(Scope scope, Operand boxes, Operand scores, Operand maxOutputSize, Operand iouThreshold, Operand scoreThreshold, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("NonMaxSuppressionV4", scope.makeOpName("NonMaxSuppression")); opBuilder.addInput(boxes.asOutput()); opBuilder.addInput(scores.asOutput()); @@ -115,7 +117,7 @@ public static Options padToMaxOutputSize(Boolean padToMaxOutputSize) { * A 1-D integer tensor of shape `[M]` representing the selected * indices from the boxes tensor, where `M <= max_output_size`. */ - public Output selectedIndices() { + public Output selectedIndices() { return selectedIndices; } @@ -123,12 +125,12 @@ public Output selectedIndices() { * A 0-D integer tensor representing the number of valid elements in * `selected_indices`, with the valid elements appearing first. */ - public Output validOutputs() { + public Output validOutputs() { return validOutputs; } - private Output selectedIndices; - private Output validOutputs; + private Output selectedIndices; + private Output validOutputs; private NonMaxSuppression(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/NonMaxSuppressionWithOverlaps.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/NonMaxSuppressionWithOverlaps.java index 01972dc3749..41470052ee2 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/NonMaxSuppressionWithOverlaps.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/NonMaxSuppressionWithOverlaps.java @@ -24,6 +24,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TFloat; +import org.tensorflow.types.TInt32; /** * Greedily selects a subset of bounding boxes in descending order of score, @@ -44,7 +46,7 @@ * selected_boxes = tf.gather(boxes, selected_indices) */ @Operator(group = "image") -public final class NonMaxSuppressionWithOverlaps extends PrimitiveOp implements Operand { +public final class NonMaxSuppressionWithOverlaps extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new NonMaxSuppressionWithOverlaps operation. @@ -62,7 +64,7 @@ public final class NonMaxSuppressionWithOverlaps extends PrimitiveOp implements * boxes based on score. * @return a new instance of NonMaxSuppressionWithOverlaps */ - public static NonMaxSuppressionWithOverlaps create(Scope scope, Operand overlaps, Operand scores, Operand maxOutputSize, Operand overlapThreshold, Operand scoreThreshold) { + public static NonMaxSuppressionWithOverlaps create(Scope scope, Operand overlaps, Operand scores, Operand maxOutputSize, Operand overlapThreshold, Operand scoreThreshold) { OperationBuilder opBuilder = scope.env().opBuilder("NonMaxSuppressionWithOverlaps", scope.makeOpName("NonMaxSuppressionWithOverlaps")); opBuilder.addInput(overlaps.asOutput()); opBuilder.addInput(scores.asOutput()); @@ -77,16 +79,16 @@ public static NonMaxSuppressionWithOverlaps create(Scope scope, Operand o * A 1-D integer tensor of shape `[M]` representing the selected * indices from the boxes tensor, where `M <= max_output_size`. */ - public Output selectedIndices() { + public Output selectedIndices() { return selectedIndices; } @Override - public Output asOutput() { + public Output asOutput() { return selectedIndices; } - private Output selectedIndices; + private Output selectedIndices; private NonMaxSuppressionWithOverlaps(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/QuantizedResizeBilinear.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/QuantizedResizeBilinear.java index dc14050baa3..505e42c55b2 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/QuantizedResizeBilinear.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/QuantizedResizeBilinear.java @@ -24,6 +24,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TFloat; +import org.tensorflow.types.TInt32; /** * Resize quantized `images` to `size` using quantized bilinear interpolation. @@ -76,7 +78,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of QuantizedResizeBilinear */ - public static QuantizedResizeBilinear create(Scope scope, Operand images, Operand size, Operand min, Operand max, Options... options) { + public static QuantizedResizeBilinear create(Scope scope, Operand images, Operand size, Operand min, Operand max, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("QuantizedResizeBilinear", scope.makeOpName("QuantizedResizeBilinear")); opBuilder.addInput(images.asOutput()); opBuilder.addInput(size.asOutput()); @@ -121,19 +123,19 @@ public Output resizedImages() { /** */ - public Output outMin() { + public Output outMin() { return outMin; } /** */ - public Output outMax() { + public Output outMax() { return outMax; } private Output resizedImages; - private Output outMin; - private Output outMax; + private Output outMin; + private Output outMax; private QuantizedResizeBilinear(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/RandomCrop.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/RandomCrop.java index f3ca09d6b4e..76f16d463c8 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/RandomCrop.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/RandomCrop.java @@ -24,6 +24,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt64; +import org.tensorflow.types.family.TNumber; /** * Randomly crop `image`. @@ -38,7 +40,7 @@ * @param data type for {@code output()} output */ @Operator(group = "image") -public final class RandomCrop extends PrimitiveOp implements Operand { +public final class RandomCrop extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.image.RandomCrop} @@ -79,7 +81,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of RandomCrop */ - public static RandomCrop create(Scope scope, Operand image, Operand size, Options... options) { + public static RandomCrop create(Scope scope, Operand image, Operand size, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("RandomCrop", scope.makeOpName("RandomCrop")); opBuilder.addInput(image.asOutput()); opBuilder.addInput(size.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/ResizeArea.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/ResizeArea.java index dd01529633b..d0439ec6dcc 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/ResizeArea.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/ResizeArea.java @@ -24,6 +24,9 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TFloat; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.family.TNumber; /** * Resize `images` to `size` using area interpolation. @@ -41,7 +44,7 @@ * area that intersects the footprint. This is the same as OpenCV's INTER_AREA. */ @Operator(group = "image") -public final class ResizeArea extends PrimitiveOp implements Operand { +public final class ResizeArea extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.image.ResizeArea} @@ -73,7 +76,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of ResizeArea */ - public static ResizeArea create(Scope scope, Operand images, Operand size, Options... options) { + public static ResizeArea create(Scope scope, Operand images, Operand size, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("ResizeArea", scope.makeOpName("ResizeArea")); opBuilder.addInput(images.asOutput()); opBuilder.addInput(size.asOutput()); @@ -100,16 +103,16 @@ public static Options alignCorners(Boolean alignCorners) { * 4-D with shape * `[batch, new_height, new_width, channels]`. */ - public Output resizedImages() { + public Output resizedImages() { return resizedImages; } @Override - public Output asOutput() { + public Output asOutput() { return resizedImages; } - private Output resizedImages; + private Output resizedImages; private ResizeArea(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/ResizeBicubic.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/ResizeBicubic.java index 1186b26ae2a..3f9c1496da3 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/ResizeBicubic.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/ResizeBicubic.java @@ -24,6 +24,9 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TFloat; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.family.TNumber; /** * Resize `images` to `size` using bicubic interpolation. @@ -31,7 +34,7 @@ * Input images can be of different types but output images are always float. */ @Operator(group = "image") -public final class ResizeBicubic extends PrimitiveOp implements Operand { +public final class ResizeBicubic extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.image.ResizeBicubic} @@ -72,7 +75,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of ResizeBicubic */ - public static ResizeBicubic create(Scope scope, Operand images, Operand size, Options... options) { + public static ResizeBicubic create(Scope scope, Operand images, Operand size, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("ResizeBicubic", scope.makeOpName("ResizeBicubic")); opBuilder.addInput(images.asOutput()); opBuilder.addInput(size.asOutput()); @@ -109,16 +112,16 @@ public static Options halfPixelCenters(Boolean halfPixelCenters) { * 4-D with shape * `[batch, new_height, new_width, channels]`. */ - public Output resizedImages() { + public Output resizedImages() { return resizedImages; } @Override - public Output asOutput() { + public Output asOutput() { return resizedImages; } - private Output resizedImages; + private Output resizedImages; private ResizeBicubic(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/ResizeBicubicGrad.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/ResizeBicubicGrad.java index ceaf9dd4227..58a22b171d0 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/ResizeBicubicGrad.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/ResizeBicubicGrad.java @@ -23,13 +23,15 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TFloat; +import org.tensorflow.types.family.TNumber; /** * Computes the gradient of bicubic interpolation. * * @param data type for {@code output()} output */ -public final class ResizeBicubicGrad extends PrimitiveOp implements Operand { +public final class ResizeBicubicGrad extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.image.ResizeBicubicGrad} @@ -70,7 +72,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of ResizeBicubicGrad */ - public static ResizeBicubicGrad create(Scope scope, Operand grads, Operand originalImage, Options... options) { + public static ResizeBicubicGrad create(Scope scope, Operand grads, Operand originalImage, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("ResizeBicubicGrad", scope.makeOpName("ResizeBicubicGrad")); opBuilder.addInput(grads.asOutput()); opBuilder.addInput(originalImage.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/ResizeBilinear.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/ResizeBilinear.java index 56ac725a0e8..06e4a135097 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/ResizeBilinear.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/ResizeBilinear.java @@ -24,6 +24,9 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TFloat; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.family.TNumber; /** * Resize `images` to `size` using bilinear interpolation. @@ -31,7 +34,7 @@ * Input images can be of different types but output images are always float. */ @Operator(group = "image") -public final class ResizeBilinear extends PrimitiveOp implements Operand { +public final class ResizeBilinear extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.image.ResizeBilinear} @@ -72,7 +75,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of ResizeBilinear */ - public static ResizeBilinear create(Scope scope, Operand images, Operand size, Options... options) { + public static ResizeBilinear create(Scope scope, Operand images, Operand size, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("ResizeBilinear", scope.makeOpName("ResizeBilinear")); opBuilder.addInput(images.asOutput()); opBuilder.addInput(size.asOutput()); @@ -109,16 +112,16 @@ public static Options halfPixelCenters(Boolean halfPixelCenters) { * 4-D with shape * `[batch, new_height, new_width, channels]`. */ - public Output resizedImages() { + public Output resizedImages() { return resizedImages; } @Override - public Output asOutput() { + public Output asOutput() { return resizedImages; } - private Output resizedImages; + private Output resizedImages; private ResizeBilinear(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/ResizeBilinearGrad.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/ResizeBilinearGrad.java index f6e303d785e..54d0bcd4aa8 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/ResizeBilinearGrad.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/ResizeBilinearGrad.java @@ -23,13 +23,15 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TFloat; +import org.tensorflow.types.family.TNumber; /** * Computes the gradient of bilinear interpolation. * * @param data type for {@code output()} output */ -public final class ResizeBilinearGrad extends PrimitiveOp implements Operand { +public final class ResizeBilinearGrad extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.image.ResizeBilinearGrad} @@ -70,7 +72,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of ResizeBilinearGrad */ - public static ResizeBilinearGrad create(Scope scope, Operand grads, Operand originalImage, Options... options) { + public static ResizeBilinearGrad create(Scope scope, Operand grads, Operand originalImage, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("ResizeBilinearGrad", scope.makeOpName("ResizeBilinearGrad")); opBuilder.addInput(grads.asOutput()); opBuilder.addInput(originalImage.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/ResizeNearestNeighbor.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/ResizeNearestNeighbor.java index 499a2d7120d..067a37ff291 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/ResizeNearestNeighbor.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/ResizeNearestNeighbor.java @@ -24,6 +24,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.family.TNumber; /** * Resize `images` to `size` using nearest neighbor interpolation. @@ -31,7 +33,7 @@ * @param data type for {@code resizedImages()} output */ @Operator(group = "image") -public final class ResizeNearestNeighbor extends PrimitiveOp implements Operand { +public final class ResizeNearestNeighbor extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.image.ResizeNearestNeighbor} @@ -72,7 +74,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of ResizeNearestNeighbor */ - public static ResizeNearestNeighbor create(Scope scope, Operand images, Operand size, Options... options) { + public static ResizeNearestNeighbor create(Scope scope, Operand images, Operand size, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("ResizeNearestNeighbor", scope.makeOpName("ResizeNearestNeighbor")); opBuilder.addInput(images.asOutput()); opBuilder.addInput(size.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/ResizeNearestNeighborGrad.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/ResizeNearestNeighborGrad.java index 7e2e0132acf..bd0f7b6aa95 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/ResizeNearestNeighborGrad.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/ResizeNearestNeighborGrad.java @@ -23,13 +23,15 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.family.TNumber; /** * Computes the gradient of nearest neighbor interpolation. * * @param data type for {@code output()} output */ -public final class ResizeNearestNeighborGrad extends PrimitiveOp implements Operand { +public final class ResizeNearestNeighborGrad extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.image.ResizeNearestNeighborGrad} @@ -70,7 +72,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of ResizeNearestNeighborGrad */ - public static ResizeNearestNeighborGrad create(Scope scope, Operand grads, Operand size, Options... options) { + public static ResizeNearestNeighborGrad create(Scope scope, Operand grads, Operand size, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("ResizeNearestNeighborGrad", scope.makeOpName("ResizeNearestNeighborGrad")); opBuilder.addInput(grads.asOutput()); opBuilder.addInput(size.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/RgbToHsv.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/RgbToHsv.java index 1242eb3e345..1a5ff371243 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/RgbToHsv.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/RgbToHsv.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Converts one or more images from RGB to HSV. @@ -39,7 +40,7 @@ * @param data type for {@code output()} output */ @Operator(group = "image") -public final class RgbToHsv extends PrimitiveOp implements Operand { +public final class RgbToHsv extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new RgbToHsv operation. @@ -48,7 +49,7 @@ public final class RgbToHsv extends PrimitiveOp implements Ope * @param images 1-D or higher rank. RGB data to convert. Last dimension must be size 3. * @return a new instance of RgbToHsv */ - public static RgbToHsv create(Scope scope, Operand images) { + public static RgbToHsv create(Scope scope, Operand images) { OperationBuilder opBuilder = scope.env().opBuilder("RGBToHSV", scope.makeOpName("RgbToHsv")); opBuilder.addInput(images.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/SampleDistortedBoundingBox.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/SampleDistortedBoundingBox.java index d6ce5294ea7..0b2ec39ce89 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/SampleDistortedBoundingBox.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/SampleDistortedBoundingBox.java @@ -25,6 +25,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TFloat; +import org.tensorflow.types.family.TNumber; /** * Generate a single randomly distorted bounding box for an image. @@ -69,7 +71,7 @@ * @param data type for {@code begin()} output */ @Operator(group = "image") -public final class SampleDistortedBoundingBox extends PrimitiveOp { +public final class SampleDistortedBoundingBox extends PrimitiveOp { /** * Optional attributes for {@link org.tensorflow.op.image.SampleDistortedBoundingBox} @@ -157,7 +159,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of SampleDistortedBoundingBox */ - public static SampleDistortedBoundingBox create(Scope scope, Operand imageSize, Operand boundingBoxes, Operand minObjectCovered, Options... options) { + public static SampleDistortedBoundingBox create(Scope scope, Operand imageSize, Operand boundingBoxes, Operand minObjectCovered, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("SampleDistortedBoundingBoxV2", scope.makeOpName("SampleDistortedBoundingBox")); opBuilder.addInput(imageSize.asOutput()); opBuilder.addInput(boundingBoxes.asOutput()); @@ -266,13 +268,13 @@ public Output size() { * 3-D with shape `[1, 1, 4]` containing the distorted bounding box. * Provide as input to `tf.image.draw_bounding_boxes`. */ - public Output bboxes() { + public Output bboxes() { return bboxes; } private Output begin; private Output size; - private Output bboxes; + private Output bboxes; private SampleDistortedBoundingBox(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/DecodeBase64.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/DecodeBase64.java index 1735129f05a..877e5389789 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/DecodeBase64.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/DecodeBase64.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TString; /** * Decode web-safe base64-encoded strings. @@ -32,7 +33,7 @@ * Web-safe means that input must use - and _ instead of + and /. */ @Operator(group = "io") -public final class DecodeBase64 extends PrimitiveOp implements Operand { +public final class DecodeBase64 extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new DecodeBase64 operation. @@ -41,7 +42,7 @@ public final class DecodeBase64 extends PrimitiveOp implements Operand { * @param input Base64 strings to decode. * @return a new instance of DecodeBase64 */ - public static DecodeBase64 create(Scope scope, Operand input) { + public static DecodeBase64 create(Scope scope, Operand input) { OperationBuilder opBuilder = scope.env().opBuilder("DecodeBase64", scope.makeOpName("DecodeBase64")); opBuilder.addInput(input.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); @@ -51,16 +52,16 @@ public static DecodeBase64 create(Scope scope, Operand input) { /** * Decoded strings. */ - public Output output() { + public Output output() { return output; } @Override - public Output asOutput() { + public Output asOutput() { return output; } - private Output output; + private Output output; private DecodeBase64(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/DecodeCompressed.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/DecodeCompressed.java index a2efaa23b26..0b9d35dfda7 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/DecodeCompressed.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/DecodeCompressed.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TString; /** * Decompress strings. @@ -36,7 +37,7 @@ * element in `bytes`. */ @Operator(group = "io") -public final class DecodeCompressed extends PrimitiveOp implements Operand { +public final class DecodeCompressed extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.io.DecodeCompressed} @@ -66,7 +67,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of DecodeCompressed */ - public static DecodeCompressed create(Scope scope, Operand bytes, Options... options) { + public static DecodeCompressed create(Scope scope, Operand bytes, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("DecodeCompressed", scope.makeOpName("DecodeCompressed")); opBuilder.addInput(bytes.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); @@ -92,16 +93,16 @@ public static Options compressionType(String compressionType) { * A Tensor with the same shape as input `bytes`, uncompressed * from bytes. */ - public Output output() { + public Output output() { return output; } @Override - public Output asOutput() { + public Output asOutput() { return output; } - private Output output; + private Output output; private DecodeCompressed(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/DecodeCsv.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/DecodeCsv.java index 2ae30d27060..bd804813ff0 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/DecodeCsv.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/DecodeCsv.java @@ -28,6 +28,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TString; /** * Convert CSV records to tensors. Each column maps to one tensor. @@ -99,7 +100,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of DecodeCsv */ - public static DecodeCsv create(Scope scope, Operand records, Iterable> recordDefaults, Options... options) { + public static DecodeCsv create(Scope scope, Operand records, Iterable> recordDefaults, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("DecodeCSV", scope.makeOpName("DecodeCsv")); opBuilder.addInput(records.asOutput()); opBuilder.addInputList(Operands.asOutputs(recordDefaults)); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/DecodeJsonExample.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/DecodeJsonExample.java index 4275a7c9e2b..12dddb4ac89 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/DecodeJsonExample.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/DecodeJsonExample.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TString; /** * Convert JSON-encoded Example records to binary protocol buffer strings. @@ -36,7 +37,7 @@ * Example-parsing ops. */ @Operator(group = "io") -public final class DecodeJsonExample extends PrimitiveOp implements Operand { +public final class DecodeJsonExample extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new DecodeJsonExample operation. @@ -46,7 +47,7 @@ public final class DecodeJsonExample extends PrimitiveOp implements Operand jsonExamples) { + public static DecodeJsonExample create(Scope scope, Operand jsonExamples) { OperationBuilder opBuilder = scope.env().opBuilder("DecodeJSONExample", scope.makeOpName("DecodeJsonExample")); opBuilder.addInput(jsonExamples.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); @@ -57,16 +58,16 @@ public static DecodeJsonExample create(Scope scope, Operand jsonExamples * Each string is a binary Example protocol buffer corresponding * to the respective element of `json_examples`. */ - public Output binaryExamples() { + public Output binaryExamples() { return binaryExamples; } @Override - public Output asOutput() { + public Output asOutput() { return binaryExamples; } - private Output binaryExamples; + private Output binaryExamples; private DecodeJsonExample(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/DecodeRaw.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/DecodeRaw.java index 2329c9109b0..9271099c208 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/DecodeRaw.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/DecodeRaw.java @@ -25,6 +25,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TString; /** * Reinterpret the bytes of a string as a vector of numbers. @@ -64,11 +65,11 @@ private Options() { * @param options carries optional attributes values * @return a new instance of DecodeRaw */ - public static DecodeRaw create(Scope scope, Operand bytes, Class outType, Options... options) { + public static DecodeRaw create(Scope scope, Operand bytes, DataType outType, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("DecodeRaw", scope.makeOpName("DecodeRaw")); opBuilder.addInput(bytes.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); - opBuilder.setAttr("out_type", DataType.fromClass(outType)); + opBuilder.setAttr("out_type", outType); if (options != null) { for (Options opts : options) { if (opts.littleEndian != null) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/DeserializeManySparse.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/DeserializeManySparse.java index 07297007db8..d5d78da46b2 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/DeserializeManySparse.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/DeserializeManySparse.java @@ -25,6 +25,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt64; +import org.tensorflow.types.TString; /** * Deserialize and concatenate `SparseTensors` from a serialized minibatch. @@ -85,17 +87,17 @@ public final class DeserializeManySparse extends PrimitiveOp { * @param dtype The `dtype` of the serialized `SparseTensor` objects. * @return a new instance of DeserializeManySparse */ - public static DeserializeManySparse create(Scope scope, Operand serializedSparse, Class dtype) { + public static DeserializeManySparse create(Scope scope, Operand serializedSparse, DataType dtype) { OperationBuilder opBuilder = scope.env().opBuilder("DeserializeManySparse", scope.makeOpName("DeserializeManySparse")); opBuilder.addInput(serializedSparse.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); - opBuilder.setAttr("dtype", DataType.fromClass(dtype)); + opBuilder.setAttr("dtype", dtype); return new DeserializeManySparse(opBuilder.build()); } /** */ - public Output sparseIndices() { + public Output sparseIndices() { return sparseIndices; } @@ -107,13 +109,13 @@ public Output sparseValues() { /** */ - public Output sparseShape() { + public Output sparseShape() { return sparseShape; } - private Output sparseIndices; + private Output sparseIndices; private Output sparseValues; - private Output sparseShape; + private Output sparseShape; private DeserializeManySparse(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/EncodeBase64.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/EncodeBase64.java index 535d8eaafe3..dea9bd16f15 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/EncodeBase64.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/EncodeBase64.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TString; /** * Encode strings into web-safe base64 format. @@ -36,7 +37,7 @@ * Web-safe means that the encoder uses - and _ instead of + and /. */ @Operator(group = "io") -public final class EncodeBase64 extends PrimitiveOp implements Operand { +public final class EncodeBase64 extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.io.EncodeBase64} @@ -65,7 +66,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of EncodeBase64 */ - public static EncodeBase64 create(Scope scope, Operand input, Options... options) { + public static EncodeBase64 create(Scope scope, Operand input, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("EncodeBase64", scope.makeOpName("EncodeBase64")); opBuilder.addInput(input.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); @@ -89,16 +90,16 @@ public static Options pad(Boolean pad) { /** * Input strings encoded in base64. */ - public Output output() { + public Output output() { return output; } @Override - public Output asOutput() { + public Output asOutput() { return output; } - private Output output; + private Output output; private EncodeBase64(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/FifoQueue.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/FifoQueue.java index 1529c05eea2..05780aba4fa 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/FifoQueue.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/FifoQueue.java @@ -23,7 +23,7 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; @@ -94,12 +94,12 @@ private Options() { * @param options carries optional attributes values * @return a new instance of FifoQueue */ - public static FifoQueue create(Scope scope, List> componentTypes, Options... options) { + public static FifoQueue create(Scope scope, List> componentTypes, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("FIFOQueueV2", scope.makeOpName("FifoQueue")); opBuilder = scope.applyControlDependencies(opBuilder); DataType[] componentTypesArray = new DataType[componentTypes.size()]; for (int i = 0; i < componentTypesArray.length; ++i) { - componentTypesArray[i] = DataType.fromClass(componentTypes.get(i)); + componentTypesArray[i] = componentTypes.get(i); } opBuilder.setAttr("component_types", componentTypesArray); if (options != null) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/LmdbReader.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/LmdbReader.java index ff75fd28ccf..5efe9c8b5ea 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/LmdbReader.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/LmdbReader.java @@ -24,12 +24,13 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TString; /** * A Reader that outputs the records from a LMDB file. */ @Operator(group = "io") -public final class LmdbReader extends PrimitiveOp implements Operand { +public final class LmdbReader extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.io.LmdbReader} @@ -103,16 +104,16 @@ public static Options sharedName(String sharedName) { /** * The handle to reference the Reader. */ - public Output readerHandle() { + public Output readerHandle() { return readerHandle; } @Override - public Output asOutput() { + public Output asOutput() { return readerHandle; } - private Output readerHandle; + private Output readerHandle; private LmdbReader(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/MatchingFiles.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/MatchingFiles.java index 5bf2e9b28e2..2b13bd69943 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/MatchingFiles.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/MatchingFiles.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TString; /** * Returns the set of files matching one or more glob patterns. @@ -33,7 +34,7 @@ * Note also that the order of filenames returned is deterministic. */ @Operator(group = "io") -public final class MatchingFiles extends PrimitiveOp implements Operand { +public final class MatchingFiles extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new MatchingFiles operation. @@ -42,7 +43,7 @@ public final class MatchingFiles extends PrimitiveOp implements Operand * @param pattern Shell wildcard pattern(s). Scalar or vector of type string. * @return a new instance of MatchingFiles */ - public static MatchingFiles create(Scope scope, Operand pattern) { + public static MatchingFiles create(Scope scope, Operand pattern) { OperationBuilder opBuilder = scope.env().opBuilder("MatchingFiles", scope.makeOpName("MatchingFiles")); opBuilder.addInput(pattern.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); @@ -52,16 +53,16 @@ public static MatchingFiles create(Scope scope, Operand pattern) { /** * A vector of matching filenames. */ - public Output filenames() { + public Output filenames() { return filenames; } @Override - public Output asOutput() { + public Output asOutput() { return filenames; } - private Output filenames; + private Output filenames; private MatchingFiles(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/PaddingFifoQueue.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/PaddingFifoQueue.java index 6b46baece02..a57d936acac 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/PaddingFifoQueue.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/PaddingFifoQueue.java @@ -23,7 +23,7 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; @@ -102,12 +102,12 @@ private Options() { * @param options carries optional attributes values * @return a new instance of PaddingFifoQueue */ - public static PaddingFifoQueue create(Scope scope, List> componentTypes, Options... options) { + public static PaddingFifoQueue create(Scope scope, List> componentTypes, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("PaddingFIFOQueueV2", scope.makeOpName("PaddingFifoQueue")); opBuilder = scope.applyControlDependencies(opBuilder); DataType[] componentTypesArray = new DataType[componentTypes.size()]; for (int i = 0; i < componentTypesArray.length; ++i) { - componentTypesArray[i] = DataType.fromClass(componentTypes.get(i)); + componentTypesArray[i] = componentTypes.get(i); } opBuilder.setAttr("component_types", componentTypesArray); if (options != null) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ParseExample.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ParseExample.java index 9b6a1cf38cc..b1862b4fe0a 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ParseExample.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ParseExample.java @@ -24,11 +24,13 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.Operands; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt64; +import org.tensorflow.types.TString; /** * Transforms a vector of brain.Example protos (as strings) into typed tensors. @@ -81,7 +83,7 @@ public final class ParseExample extends PrimitiveOp { * scalar element along the second dimension. * @return a new instance of ParseExample */ - public static ParseExample create(Scope scope, Operand serialized, Operand names, Iterable> sparseKeys, Iterable> denseKeys, Iterable> denseDefaults, List> sparseTypes, List denseShapes) { + public static ParseExample create(Scope scope, Operand serialized, Operand names, Iterable> sparseKeys, Iterable> denseKeys, Iterable> denseDefaults, List> sparseTypes, List denseShapes) { OperationBuilder opBuilder = scope.env().opBuilder("ParseExample", scope.makeOpName("ParseExample")); opBuilder.addInput(serialized.asOutput()); opBuilder.addInput(names.asOutput()); @@ -91,7 +93,7 @@ public static ParseExample create(Scope scope, Operand serialized, Opera opBuilder = scope.applyControlDependencies(opBuilder); DataType[] sparseTypesArray = new DataType[sparseTypes.size()]; for (int i = 0; i < sparseTypesArray.length; ++i) { - sparseTypesArray[i] = DataType.fromClass(sparseTypes.get(i)); + sparseTypesArray[i] = sparseTypes.get(i); } opBuilder.setAttr("sparse_types", sparseTypesArray); Shape[] denseShapesArray = new Shape[denseShapes.size()]; @@ -104,7 +106,7 @@ public static ParseExample create(Scope scope, Operand serialized, Opera /** */ - public List> sparseIndices() { + public List> sparseIndices() { return sparseIndices; } @@ -116,7 +118,7 @@ public List> sparseValues() { /** */ - public List> sparseShapes() { + public List> sparseShapes() { return sparseShapes; } @@ -126,9 +128,9 @@ public List> denseValues() { return denseValues; } - private List> sparseIndices; + private List> sparseIndices; private List> sparseValues; - private List> sparseShapes; + private List> sparseShapes; private List> denseValues; @SuppressWarnings("unchecked") @@ -136,13 +138,13 @@ private ParseExample(Operation operation) { super(operation); int outputIdx = 0; int sparseIndicesLength = operation.outputListLength("sparse_indices"); - sparseIndices = Arrays.asList((Output[])operation.outputList(outputIdx, sparseIndicesLength)); + sparseIndices = Arrays.asList((Output[])operation.outputList(outputIdx, sparseIndicesLength)); outputIdx += sparseIndicesLength; int sparseValuesLength = operation.outputListLength("sparse_values"); sparseValues = Arrays.asList(operation.outputList(outputIdx, sparseValuesLength)); outputIdx += sparseValuesLength; int sparseShapesLength = operation.outputListLength("sparse_shapes"); - sparseShapes = Arrays.asList((Output[])operation.outputList(outputIdx, sparseShapesLength)); + sparseShapes = Arrays.asList((Output[])operation.outputList(outputIdx, sparseShapesLength)); outputIdx += sparseShapesLength; int denseValuesLength = operation.outputListLength("dense_values"); denseValues = Arrays.asList(operation.outputList(outputIdx, denseValuesLength)); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ParseSequenceExample.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ParseSequenceExample.java index 51a94226e10..9683c8fd726 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ParseSequenceExample.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ParseSequenceExample.java @@ -24,11 +24,13 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.Operands; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt64; +import org.tensorflow.types.TString; /** * Transforms a vector of brain.SequenceExample protos (as strings) into typed tensors. @@ -154,7 +156,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of ParseSequenceExample */ - public static ParseSequenceExample create(Scope scope, Operand serialized, Operand debugName, Iterable> contextDenseDefaults, List featureListDenseMissingAssumedEmpty, List contextSparseKeys, List contextDenseKeys, List featureListSparseKeys, List featureListDenseKeys, List> contextSparseTypes, List> featureListDenseTypes, List> featureListSparseTypes, Options... options) { + public static ParseSequenceExample create(Scope scope, Operand serialized, Operand debugName, Iterable> contextDenseDefaults, List featureListDenseMissingAssumedEmpty, List contextSparseKeys, List contextDenseKeys, List featureListSparseKeys, List featureListDenseKeys, List> contextSparseTypes, List> featureListDenseTypes, List> featureListSparseTypes, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("ParseSequenceExample", scope.makeOpName("ParseSequenceExample")); opBuilder.addInput(serialized.asOutput()); opBuilder.addInput(debugName.asOutput()); @@ -187,17 +189,17 @@ public static ParseSequenceExample create(Scope scope, Operand serialize opBuilder.setAttr("feature_list_dense_keys", featureListDenseKeysArray); DataType[] contextSparseTypesArray = new DataType[contextSparseTypes.size()]; for (int i = 0; i < contextSparseTypesArray.length; ++i) { - contextSparseTypesArray[i] = DataType.fromClass(contextSparseTypes.get(i)); + contextSparseTypesArray[i] = contextSparseTypes.get(i); } opBuilder.setAttr("context_sparse_types", contextSparseTypesArray); DataType[] featureListDenseTypesArray = new DataType[featureListDenseTypes.size()]; for (int i = 0; i < featureListDenseTypesArray.length; ++i) { - featureListDenseTypesArray[i] = DataType.fromClass(featureListDenseTypes.get(i)); + featureListDenseTypesArray[i] = featureListDenseTypes.get(i); } opBuilder.setAttr("feature_list_dense_types", featureListDenseTypesArray); DataType[] featureListSparseTypesArray = new DataType[featureListSparseTypes.size()]; for (int i = 0; i < featureListSparseTypesArray.length; ++i) { - featureListSparseTypesArray[i] = DataType.fromClass(featureListSparseTypes.get(i)); + featureListSparseTypesArray[i] = featureListSparseTypes.get(i); } opBuilder.setAttr("feature_list_sparse_types", featureListSparseTypesArray); if (options != null) { @@ -285,7 +287,7 @@ public static Options featureListDenseShapes(List featureListDenseShapes) /** */ - public List> contextSparseIndices() { + public List> contextSparseIndices() { return contextSparseIndices; } @@ -297,7 +299,7 @@ public List> contextSparseValues() { /** */ - public List> contextSparseShapes() { + public List> contextSparseShapes() { return contextSparseShapes; } @@ -309,7 +311,7 @@ public List> contextDenseValues() { /** */ - public List> featureListSparseIndices() { + public List> featureListSparseIndices() { return featureListSparseIndices; } @@ -321,7 +323,7 @@ public List> featureListSparseValues() { /** */ - public List> featureListSparseShapes() { + public List> featureListSparseShapes() { return featureListSparseShapes; } @@ -333,50 +335,50 @@ public List> featureListDenseValues() { /** */ - public List> featureListDenseLengths() { + public List> featureListDenseLengths() { return featureListDenseLengths; } - private List> contextSparseIndices; + private List> contextSparseIndices; private List> contextSparseValues; - private List> contextSparseShapes; + private List> contextSparseShapes; private List> contextDenseValues; - private List> featureListSparseIndices; + private List> featureListSparseIndices; private List> featureListSparseValues; - private List> featureListSparseShapes; + private List> featureListSparseShapes; private List> featureListDenseValues; - private List> featureListDenseLengths; + private List> featureListDenseLengths; @SuppressWarnings("unchecked") private ParseSequenceExample(Operation operation) { super(operation); int outputIdx = 0; int contextSparseIndicesLength = operation.outputListLength("context_sparse_indices"); - contextSparseIndices = Arrays.asList((Output[])operation.outputList(outputIdx, contextSparseIndicesLength)); + contextSparseIndices = Arrays.asList((Output[])operation.outputList(outputIdx, contextSparseIndicesLength)); outputIdx += contextSparseIndicesLength; int contextSparseValuesLength = operation.outputListLength("context_sparse_values"); contextSparseValues = Arrays.asList(operation.outputList(outputIdx, contextSparseValuesLength)); outputIdx += contextSparseValuesLength; int contextSparseShapesLength = operation.outputListLength("context_sparse_shapes"); - contextSparseShapes = Arrays.asList((Output[])operation.outputList(outputIdx, contextSparseShapesLength)); + contextSparseShapes = Arrays.asList((Output[])operation.outputList(outputIdx, contextSparseShapesLength)); outputIdx += contextSparseShapesLength; int contextDenseValuesLength = operation.outputListLength("context_dense_values"); contextDenseValues = Arrays.asList(operation.outputList(outputIdx, contextDenseValuesLength)); outputIdx += contextDenseValuesLength; int featureListSparseIndicesLength = operation.outputListLength("feature_list_sparse_indices"); - featureListSparseIndices = Arrays.asList((Output[])operation.outputList(outputIdx, featureListSparseIndicesLength)); + featureListSparseIndices = Arrays.asList((Output[])operation.outputList(outputIdx, featureListSparseIndicesLength)); outputIdx += featureListSparseIndicesLength; int featureListSparseValuesLength = operation.outputListLength("feature_list_sparse_values"); featureListSparseValues = Arrays.asList(operation.outputList(outputIdx, featureListSparseValuesLength)); outputIdx += featureListSparseValuesLength; int featureListSparseShapesLength = operation.outputListLength("feature_list_sparse_shapes"); - featureListSparseShapes = Arrays.asList((Output[])operation.outputList(outputIdx, featureListSparseShapesLength)); + featureListSparseShapes = Arrays.asList((Output[])operation.outputList(outputIdx, featureListSparseShapesLength)); outputIdx += featureListSparseShapesLength; int featureListDenseValuesLength = operation.outputListLength("feature_list_dense_values"); featureListDenseValues = Arrays.asList(operation.outputList(outputIdx, featureListDenseValuesLength)); outputIdx += featureListDenseValuesLength; int featureListDenseLengthsLength = operation.outputListLength("feature_list_dense_lengths"); - featureListDenseLengths = Arrays.asList((Output[])operation.outputList(outputIdx, featureListDenseLengthsLength)); + featureListDenseLengths = Arrays.asList((Output[])operation.outputList(outputIdx, featureListDenseLengthsLength)); outputIdx += featureListDenseLengthsLength; } } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ParseSingleExample.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ParseSingleExample.java index d1339f77d69..4a5c71785ea 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ParseSingleExample.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ParseSingleExample.java @@ -24,11 +24,13 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.Operands; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt64; +import org.tensorflow.types.TString; /** * Transforms a tf.Example proto (as a string) into typed tensors. @@ -72,7 +74,7 @@ public final class ParseSingleExample extends PrimitiveOp { * D1 * .... * DN, in the input. * @return a new instance of ParseSingleExample */ - public static ParseSingleExample create(Scope scope, Operand serialized, Iterable> denseDefaults, Long numSparse, List sparseKeys, List denseKeys, List> sparseTypes, List denseShapes) { + public static ParseSingleExample create(Scope scope, Operand serialized, Iterable> denseDefaults, Long numSparse, List sparseKeys, List denseKeys, List> sparseTypes, List denseShapes) { OperationBuilder opBuilder = scope.env().opBuilder("ParseSingleExample", scope.makeOpName("ParseSingleExample")); opBuilder.addInput(serialized.asOutput()); opBuilder.addInputList(Operands.asOutputs(denseDefaults)); @@ -90,7 +92,7 @@ public static ParseSingleExample create(Scope scope, Operand serialized, opBuilder.setAttr("dense_keys", denseKeysArray); DataType[] sparseTypesArray = new DataType[sparseTypes.size()]; for (int i = 0; i < sparseTypesArray.length; ++i) { - sparseTypesArray[i] = DataType.fromClass(sparseTypes.get(i)); + sparseTypesArray[i] = sparseTypes.get(i); } opBuilder.setAttr("sparse_types", sparseTypesArray); Shape[] denseShapesArray = new Shape[denseShapes.size()]; @@ -103,7 +105,7 @@ public static ParseSingleExample create(Scope scope, Operand serialized, /** */ - public List> sparseIndices() { + public List> sparseIndices() { return sparseIndices; } @@ -115,7 +117,7 @@ public List> sparseValues() { /** */ - public List> sparseShapes() { + public List> sparseShapes() { return sparseShapes; } @@ -125,9 +127,9 @@ public List> denseValues() { return denseValues; } - private List> sparseIndices; + private List> sparseIndices; private List> sparseValues; - private List> sparseShapes; + private List> sparseShapes; private List> denseValues; @SuppressWarnings("unchecked") @@ -135,13 +137,13 @@ private ParseSingleExample(Operation operation) { super(operation); int outputIdx = 0; int sparseIndicesLength = operation.outputListLength("sparse_indices"); - sparseIndices = Arrays.asList((Output[])operation.outputList(outputIdx, sparseIndicesLength)); + sparseIndices = Arrays.asList((Output[])operation.outputList(outputIdx, sparseIndicesLength)); outputIdx += sparseIndicesLength; int sparseValuesLength = operation.outputListLength("sparse_values"); sparseValues = Arrays.asList(operation.outputList(outputIdx, sparseValuesLength)); outputIdx += sparseValuesLength; int sparseShapesLength = operation.outputListLength("sparse_shapes"); - sparseShapes = Arrays.asList((Output[])operation.outputList(outputIdx, sparseShapesLength)); + sparseShapes = Arrays.asList((Output[])operation.outputList(outputIdx, sparseShapesLength)); outputIdx += sparseShapesLength; int denseValuesLength = operation.outputListLength("dense_values"); denseValues = Arrays.asList(operation.outputList(outputIdx, denseValuesLength)); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ParseSingleSequenceExample.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ParseSingleSequenceExample.java index 0abc798f9cc..1732bc1aa20 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ParseSingleSequenceExample.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ParseSingleSequenceExample.java @@ -24,11 +24,13 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.Operands; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt64; +import org.tensorflow.types.TString; /** * Transforms a scalar brain.SequenceExample proto (as strings) into typed tensors. @@ -118,7 +120,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of ParseSingleSequenceExample */ - public static ParseSingleSequenceExample create(Scope scope, Operand serialized, Operand featureListDenseMissingAssumedEmpty, Iterable> contextSparseKeys, Iterable> contextDenseKeys, Iterable> featureListSparseKeys, Iterable> featureListDenseKeys, Iterable> contextDenseDefaults, Operand debugName, List> contextSparseTypes, List> featureListDenseTypes, List> featureListSparseTypes, Options... options) { + public static ParseSingleSequenceExample create(Scope scope, Operand serialized, Operand featureListDenseMissingAssumedEmpty, Iterable> contextSparseKeys, Iterable> contextDenseKeys, Iterable> featureListSparseKeys, Iterable> featureListDenseKeys, Iterable> contextDenseDefaults, Operand debugName, List> contextSparseTypes, List> featureListDenseTypes, List> featureListSparseTypes, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("ParseSingleSequenceExample", scope.makeOpName("ParseSingleSequenceExample")); opBuilder.addInput(serialized.asOutput()); opBuilder.addInput(featureListDenseMissingAssumedEmpty.asOutput()); @@ -131,17 +133,17 @@ public static ParseSingleSequenceExample create(Scope scope, Operand ser opBuilder = scope.applyControlDependencies(opBuilder); DataType[] contextSparseTypesArray = new DataType[contextSparseTypes.size()]; for (int i = 0; i < contextSparseTypesArray.length; ++i) { - contextSparseTypesArray[i] = DataType.fromClass(contextSparseTypes.get(i)); + contextSparseTypesArray[i] = contextSparseTypes.get(i); } opBuilder.setAttr("context_sparse_types", contextSparseTypesArray); DataType[] featureListDenseTypesArray = new DataType[featureListDenseTypes.size()]; for (int i = 0; i < featureListDenseTypesArray.length; ++i) { - featureListDenseTypesArray[i] = DataType.fromClass(featureListDenseTypes.get(i)); + featureListDenseTypesArray[i] = featureListDenseTypes.get(i); } opBuilder.setAttr("feature_list_dense_types", featureListDenseTypesArray); DataType[] featureListSparseTypesArray = new DataType[featureListSparseTypes.size()]; for (int i = 0; i < featureListSparseTypesArray.length; ++i) { - featureListSparseTypesArray[i] = DataType.fromClass(featureListSparseTypes.get(i)); + featureListSparseTypesArray[i] = featureListSparseTypes.get(i); } opBuilder.setAttr("feature_list_sparse_types", featureListSparseTypesArray); if (options != null) { @@ -189,7 +191,7 @@ public static Options featureListDenseShapes(List featureListDenseShapes) /** */ - public List> contextSparseIndices() { + public List> contextSparseIndices() { return contextSparseIndices; } @@ -201,7 +203,7 @@ public List> contextSparseValues() { /** */ - public List> contextSparseShapes() { + public List> contextSparseShapes() { return contextSparseShapes; } @@ -213,7 +215,7 @@ public List> contextDenseValues() { /** */ - public List> featureListSparseIndices() { + public List> featureListSparseIndices() { return featureListSparseIndices; } @@ -225,7 +227,7 @@ public List> featureListSparseValues() { /** */ - public List> featureListSparseShapes() { + public List> featureListSparseShapes() { return featureListSparseShapes; } @@ -235,13 +237,13 @@ public List> featureListDenseValues() { return featureListDenseValues; } - private List> contextSparseIndices; + private List> contextSparseIndices; private List> contextSparseValues; - private List> contextSparseShapes; + private List> contextSparseShapes; private List> contextDenseValues; - private List> featureListSparseIndices; + private List> featureListSparseIndices; private List> featureListSparseValues; - private List> featureListSparseShapes; + private List> featureListSparseShapes; private List> featureListDenseValues; @SuppressWarnings("unchecked") @@ -249,25 +251,25 @@ private ParseSingleSequenceExample(Operation operation) { super(operation); int outputIdx = 0; int contextSparseIndicesLength = operation.outputListLength("context_sparse_indices"); - contextSparseIndices = Arrays.asList((Output[])operation.outputList(outputIdx, contextSparseIndicesLength)); + contextSparseIndices = Arrays.asList((Output[])operation.outputList(outputIdx, contextSparseIndicesLength)); outputIdx += contextSparseIndicesLength; int contextSparseValuesLength = operation.outputListLength("context_sparse_values"); contextSparseValues = Arrays.asList(operation.outputList(outputIdx, contextSparseValuesLength)); outputIdx += contextSparseValuesLength; int contextSparseShapesLength = operation.outputListLength("context_sparse_shapes"); - contextSparseShapes = Arrays.asList((Output[])operation.outputList(outputIdx, contextSparseShapesLength)); + contextSparseShapes = Arrays.asList((Output[])operation.outputList(outputIdx, contextSparseShapesLength)); outputIdx += contextSparseShapesLength; int contextDenseValuesLength = operation.outputListLength("context_dense_values"); contextDenseValues = Arrays.asList(operation.outputList(outputIdx, contextDenseValuesLength)); outputIdx += contextDenseValuesLength; int featureListSparseIndicesLength = operation.outputListLength("feature_list_sparse_indices"); - featureListSparseIndices = Arrays.asList((Output[])operation.outputList(outputIdx, featureListSparseIndicesLength)); + featureListSparseIndices = Arrays.asList((Output[])operation.outputList(outputIdx, featureListSparseIndicesLength)); outputIdx += featureListSparseIndicesLength; int featureListSparseValuesLength = operation.outputListLength("feature_list_sparse_values"); featureListSparseValues = Arrays.asList(operation.outputList(outputIdx, featureListSparseValuesLength)); outputIdx += featureListSparseValuesLength; int featureListSparseShapesLength = operation.outputListLength("feature_list_sparse_shapes"); - featureListSparseShapes = Arrays.asList((Output[])operation.outputList(outputIdx, featureListSparseShapesLength)); + featureListSparseShapes = Arrays.asList((Output[])operation.outputList(outputIdx, featureListSparseShapesLength)); outputIdx += featureListSparseShapesLength; int featureListDenseValuesLength = operation.outputListLength("feature_list_dense_values"); featureListDenseValues = Arrays.asList(operation.outputList(outputIdx, featureListDenseValuesLength)); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ParseTensor.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ParseTensor.java index 93a596da2da..436665cf766 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ParseTensor.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ParseTensor.java @@ -25,6 +25,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TString; /** * Transforms a serialized tensorflow.TensorProto proto into a Tensor. @@ -43,11 +44,11 @@ public final class ParseTensor extends PrimitiveOp implements Operand { * type of the serialized tensor and no implicit conversion will take place. * @return a new instance of ParseTensor */ - public static ParseTensor create(Scope scope, Operand serialized, Class outType) { + public static ParseTensor create(Scope scope, Operand serialized, DataType outType) { OperationBuilder opBuilder = scope.env().opBuilder("ParseTensor", scope.makeOpName("ParseTensor")); opBuilder.addInput(serialized.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); - opBuilder.setAttr("out_type", DataType.fromClass(outType)); + opBuilder.setAttr("out_type", outType); return new ParseTensor(opBuilder.build()); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/PriorityQueue.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/PriorityQueue.java index ef26f096128..e137ef44bc5 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/PriorityQueue.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/PriorityQueue.java @@ -23,7 +23,7 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; @@ -92,12 +92,12 @@ private Options() { * @param options carries optional attributes values * @return a new instance of PriorityQueue */ - public static PriorityQueue create(Scope scope, List> componentTypes, List shapes, Options... options) { + public static PriorityQueue create(Scope scope, List> componentTypes, List shapes, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("PriorityQueueV2", scope.makeOpName("PriorityQueue")); opBuilder = scope.applyControlDependencies(opBuilder); DataType[] componentTypesArray = new DataType[componentTypes.size()]; for (int i = 0; i < componentTypesArray.length; ++i) { - componentTypesArray[i] = DataType.fromClass(componentTypes.get(i)); + componentTypesArray[i] = componentTypes.get(i); } opBuilder.setAttr("component_types", componentTypesArray); Shape[] shapesArray = new Shape[shapes.size()]; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/QueueDequeue.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/QueueDequeue.java index 872146f5846..a1100931b30 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/QueueDequeue.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/QueueDequeue.java @@ -72,13 +72,13 @@ private Options() { * @param options carries optional attributes values * @return a new instance of QueueDequeue */ - public static QueueDequeue create(Scope scope, Operand handle, List> componentTypes, Options... options) { + public static QueueDequeue create(Scope scope, Operand handle, List> componentTypes, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("QueueDequeueV2", scope.makeOpName("QueueDequeue")); opBuilder.addInput(handle.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); DataType[] componentTypesArray = new DataType[componentTypes.size()]; for (int i = 0; i < componentTypesArray.length; ++i) { - componentTypesArray[i] = DataType.fromClass(componentTypes.get(i)); + componentTypesArray[i] = componentTypes.get(i); } opBuilder.setAttr("component_types", componentTypesArray); if (options != null) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/QueueDequeueMany.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/QueueDequeueMany.java index f65d007e41d..27d9f7307fc 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/QueueDequeueMany.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/QueueDequeueMany.java @@ -28,6 +28,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt32; /** * Dequeues `n` tuples of one or more tensors from the given queue. @@ -80,14 +81,14 @@ private Options() { * @param options carries optional attributes values * @return a new instance of QueueDequeueMany */ - public static QueueDequeueMany create(Scope scope, Operand handle, Operand n, List> componentTypes, Options... options) { + public static QueueDequeueMany create(Scope scope, Operand handle, Operand n, List> componentTypes, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("QueueDequeueManyV2", scope.makeOpName("QueueDequeueMany")); opBuilder.addInput(handle.asOutput()); opBuilder.addInput(n.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); DataType[] componentTypesArray = new DataType[componentTypes.size()]; for (int i = 0; i < componentTypesArray.length; ++i) { - componentTypesArray[i] = DataType.fromClass(componentTypes.get(i)); + componentTypesArray[i] = componentTypes.get(i); } opBuilder.setAttr("component_types", componentTypesArray); if (options != null) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/QueueDequeueUpTo.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/QueueDequeueUpTo.java index 7fe8da92f1d..38faad8f345 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/QueueDequeueUpTo.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/QueueDequeueUpTo.java @@ -28,6 +28,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt32; /** * Dequeues `n` tuples of one or more tensors from the given queue. @@ -84,14 +85,14 @@ private Options() { * @param options carries optional attributes values * @return a new instance of QueueDequeueUpTo */ - public static QueueDequeueUpTo create(Scope scope, Operand handle, Operand n, List> componentTypes, Options... options) { + public static QueueDequeueUpTo create(Scope scope, Operand handle, Operand n, List> componentTypes, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("QueueDequeueUpToV2", scope.makeOpName("QueueDequeueUpTo")); opBuilder.addInput(handle.asOutput()); opBuilder.addInput(n.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); DataType[] componentTypesArray = new DataType[componentTypes.size()]; for (int i = 0; i < componentTypesArray.length; ++i) { - componentTypesArray[i] = DataType.fromClass(componentTypes.get(i)); + componentTypesArray[i] = componentTypes.get(i); } opBuilder.setAttr("component_types", componentTypesArray); if (options != null) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/QueueIsClosed.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/QueueIsClosed.java index 49d2d8799c1..e3adf686ee2 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/QueueIsClosed.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/QueueIsClosed.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TBool; /** * Returns true if queue is closed. @@ -32,7 +33,7 @@ * is open. */ @Operator(group = "io") -public final class QueueIsClosed extends PrimitiveOp implements Operand { +public final class QueueIsClosed extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new QueueIsClosed operation. @@ -50,16 +51,16 @@ public static QueueIsClosed create(Scope scope, Operand handle) { /** */ - public Output isClosed() { + public Output isClosed() { return isClosed; } @Override - public Output asOutput() { + public Output asOutput() { return isClosed; } - private Output isClosed; + private Output isClosed; private QueueIsClosed(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/QueueSize.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/QueueSize.java index de1bb35164f..06cbb0a09ea 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/QueueSize.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/QueueSize.java @@ -24,12 +24,13 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt32; /** * Computes the number of elements in the given queue. */ @Operator(group = "io") -public final class QueueSize extends PrimitiveOp implements Operand { +public final class QueueSize extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new QueueSize operation. @@ -48,16 +49,16 @@ public static QueueSize create(Scope scope, Operand handle) { /** * The number of elements in the given queue. */ - public Output size() { + public Output size() { return size; } @Override - public Output asOutput() { + public Output asOutput() { return size; } - private Output size; + private Output size; private QueueSize(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/RandomShuffleQueue.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/RandomShuffleQueue.java index 142cf1048b0..1d0f93cfd1b 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/RandomShuffleQueue.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/RandomShuffleQueue.java @@ -23,7 +23,7 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; @@ -124,12 +124,12 @@ private Options() { * @param options carries optional attributes values * @return a new instance of RandomShuffleQueue */ - public static RandomShuffleQueue create(Scope scope, List> componentTypes, Options... options) { + public static RandomShuffleQueue create(Scope scope, List> componentTypes, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("RandomShuffleQueueV2", scope.makeOpName("RandomShuffleQueue")); opBuilder = scope.applyControlDependencies(opBuilder); DataType[] componentTypesArray = new DataType[componentTypes.size()]; for (int i = 0; i < componentTypesArray.length; ++i) { - componentTypesArray[i] = DataType.fromClass(componentTypes.get(i)); + componentTypesArray[i] = componentTypes.get(i); } opBuilder.setAttr("component_types", componentTypesArray); if (options != null) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ReadFile.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ReadFile.java index ad82f5d350c..b5c7ab46ee9 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ReadFile.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ReadFile.java @@ -24,12 +24,13 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TString; /** * Reads and outputs the entire contents of the input filename. */ @Operator(group = "io") -public final class ReadFile extends PrimitiveOp implements Operand { +public final class ReadFile extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new ReadFile operation. @@ -38,7 +39,7 @@ public final class ReadFile extends PrimitiveOp implements Operand { * @param filename * @return a new instance of ReadFile */ - public static ReadFile create(Scope scope, Operand filename) { + public static ReadFile create(Scope scope, Operand filename) { OperationBuilder opBuilder = scope.env().opBuilder("ReadFile", scope.makeOpName("ReadFile")); opBuilder.addInput(filename.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); @@ -47,16 +48,16 @@ public static ReadFile create(Scope scope, Operand filename) { /** */ - public Output contents() { + public Output contents() { return contents; } @Override - public Output asOutput() { + public Output asOutput() { return contents; } - private Output contents; + private Output contents; private ReadFile(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ReaderNumRecordsProduced.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ReaderNumRecordsProduced.java index d52676c6497..e24c1d272c2 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ReaderNumRecordsProduced.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ReaderNumRecordsProduced.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt64; /** * Returns the number of records this Reader has produced. @@ -32,7 +33,7 @@ * succeeded. */ @Operator(group = "io") -public final class ReaderNumRecordsProduced extends PrimitiveOp implements Operand { +public final class ReaderNumRecordsProduced extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new ReaderNumRecordsProduced operation. @@ -50,16 +51,16 @@ public static ReaderNumRecordsProduced create(Scope scope, Operand readerHand /** */ - public Output recordsProduced() { + public Output recordsProduced() { return recordsProduced; } @Override - public Output asOutput() { + public Output asOutput() { return recordsProduced; } - private Output recordsProduced; + private Output recordsProduced; private ReaderNumRecordsProduced(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ReaderNumWorkUnitsCompleted.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ReaderNumWorkUnitsCompleted.java index c937e48744f..fd8b1d881df 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ReaderNumWorkUnitsCompleted.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ReaderNumWorkUnitsCompleted.java @@ -24,12 +24,13 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt64; /** * Returns the number of work units this Reader has finished processing. */ @Operator(group = "io") -public final class ReaderNumWorkUnitsCompleted extends PrimitiveOp implements Operand { +public final class ReaderNumWorkUnitsCompleted extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new ReaderNumWorkUnitsCompleted operation. @@ -47,16 +48,16 @@ public static ReaderNumWorkUnitsCompleted create(Scope scope, Operand readerH /** */ - public Output unitsCompleted() { + public Output unitsCompleted() { return unitsCompleted; } @Override - public Output asOutput() { + public Output asOutput() { return unitsCompleted; } - private Output unitsCompleted; + private Output unitsCompleted; private ReaderNumWorkUnitsCompleted(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ReaderRead.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ReaderRead.java index 6e9cf97fec2..945ac740421 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ReaderRead.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ReaderRead.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TString; /** * Returns the next record (key, value pair) produced by a Reader. @@ -54,19 +55,19 @@ public static ReaderRead create(Scope scope, Operand readerHandle, Operand /** * A scalar. */ - public Output key() { + public Output key() { return key; } /** * A scalar. */ - public Output value() { + public Output value() { return value; } - private Output key; - private Output value; + private Output key; + private Output value; private ReaderRead(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ReaderReadUpTo.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ReaderReadUpTo.java index 0afbfcc587e..3257a82c8d8 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ReaderReadUpTo.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ReaderReadUpTo.java @@ -24,6 +24,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt64; +import org.tensorflow.types.TString; /** * Returns up to `num_records` (key, value) pairs produced by a Reader. @@ -45,7 +47,7 @@ public final class ReaderReadUpTo extends PrimitiveOp { * @param numRecords number of records to read from `Reader`. * @return a new instance of ReaderReadUpTo */ - public static ReaderReadUpTo create(Scope scope, Operand readerHandle, Operand queueHandle, Operand numRecords) { + public static ReaderReadUpTo create(Scope scope, Operand readerHandle, Operand queueHandle, Operand numRecords) { OperationBuilder opBuilder = scope.env().opBuilder("ReaderReadUpToV2", scope.makeOpName("ReaderReadUpTo")); opBuilder.addInput(readerHandle.asOutput()); opBuilder.addInput(queueHandle.asOutput()); @@ -57,19 +59,19 @@ public static ReaderReadUpTo create(Scope scope, Operand readerHandle, Operan /** * A 1-D tensor. */ - public Output keys() { + public Output keys() { return keys; } /** * A 1-D tensor. */ - public Output values() { + public Output values() { return values; } - private Output keys; - private Output values; + private Output keys; + private Output values; private ReaderReadUpTo(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ReaderRestoreState.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ReaderRestoreState.java index fdd92070de1..25a3eb00ca8 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ReaderRestoreState.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ReaderRestoreState.java @@ -23,6 +23,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TString; /** * Restore a reader to a previously saved state. @@ -42,7 +43,7 @@ public final class ReaderRestoreState extends PrimitiveOp { * matching reader_handle. * @return a new instance of ReaderRestoreState */ - public static ReaderRestoreState create(Scope scope, Operand readerHandle, Operand state) { + public static ReaderRestoreState create(Scope scope, Operand readerHandle, Operand state) { OperationBuilder opBuilder = scope.env().opBuilder("ReaderRestoreStateV2", scope.makeOpName("ReaderRestoreState")); opBuilder.addInput(readerHandle.asOutput()); opBuilder.addInput(state.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ReaderSerializeState.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ReaderSerializeState.java index 62db1b7c293..6aa7853be9d 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ReaderSerializeState.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ReaderSerializeState.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TString; /** * Produce a string tensor that encodes the state of a Reader. @@ -32,7 +33,7 @@ * Unimplemented error. */ @Operator(group = "io") -public final class ReaderSerializeState extends PrimitiveOp implements Operand { +public final class ReaderSerializeState extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new ReaderSerializeState operation. @@ -50,16 +51,16 @@ public static ReaderSerializeState create(Scope scope, Operand readerHandle) /** */ - public Output state() { + public Output state() { return state; } @Override - public Output asOutput() { + public Output asOutput() { return state; } - private Output state; + private Output state; private ReaderSerializeState(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/SerializeManySparse.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/SerializeManySparse.java index a9405ce22b3..b4ee005bbce 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/SerializeManySparse.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/SerializeManySparse.java @@ -25,6 +25,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt64; +import org.tensorflow.types.TString; /** * Serialize an `N`-minibatch `SparseTensor` into an `[N, 3]` `Tensor` object. @@ -53,13 +55,13 @@ public final class SerializeManySparse extends PrimitiveOp implements Operand * (default) and `variant`. * @return a new instance of SerializeManySparse */ - public static SerializeManySparse create(Scope scope, Operand sparseIndices, Operand sparseValues, Operand sparseShape, Class outType) { + public static SerializeManySparse create(Scope scope, Operand sparseIndices, Operand sparseValues, Operand sparseShape, DataType outType) { OperationBuilder opBuilder = scope.env().opBuilder("SerializeManySparse", scope.makeOpName("SerializeManySparse")); opBuilder.addInput(sparseIndices.asOutput()); opBuilder.addInput(sparseValues.asOutput()); opBuilder.addInput(sparseShape.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); - opBuilder.setAttr("out_type", DataType.fromClass(outType)); + opBuilder.setAttr("out_type", outType); return new SerializeManySparse(opBuilder.build()); } @@ -72,8 +74,8 @@ public static SerializeManySparse create(Scope scope, Operand sp * @param sparseShape 1-D. The `shape` of the minibatch `SparseTensor`. * @return a new instance of SerializeManySparse */ - public static SerializeManySparse create(Scope scope, Operand sparseIndices, Operand sparseValues, Operand sparseShape) { - return create(scope, sparseIndices, sparseValues, sparseShape, String.class); + public static SerializeManySparse create(Scope scope, Operand sparseIndices, Operand sparseValues, Operand sparseShape) { + return create(scope, sparseIndices, sparseValues, sparseShape, TString.DTYPE); } /** diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/SerializeSparse.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/SerializeSparse.java index 7b584715a48..980f39acdd5 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/SerializeSparse.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/SerializeSparse.java @@ -25,6 +25,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt64; +import org.tensorflow.types.TString; /** * Serialize a `SparseTensor` into a `[3]` `Tensor` object. @@ -45,13 +47,13 @@ public final class SerializeSparse extends PrimitiveOp implements Operand * (default) and `variant`. * @return a new instance of SerializeSparse */ - public static SerializeSparse create(Scope scope, Operand sparseIndices, Operand sparseValues, Operand sparseShape, Class outType) { + public static SerializeSparse create(Scope scope, Operand sparseIndices, Operand sparseValues, Operand sparseShape, DataType outType) { OperationBuilder opBuilder = scope.env().opBuilder("SerializeSparse", scope.makeOpName("SerializeSparse")); opBuilder.addInput(sparseIndices.asOutput()); opBuilder.addInput(sparseValues.asOutput()); opBuilder.addInput(sparseShape.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); - opBuilder.setAttr("out_type", DataType.fromClass(outType)); + opBuilder.setAttr("out_type", outType); return new SerializeSparse(opBuilder.build()); } @@ -64,8 +66,8 @@ public static SerializeSparse create(Scope scope, Operand sparse * @param sparseShape 1-D. The `shape` of the `SparseTensor`. * @return a new instance of SerializeSparse */ - public static SerializeSparse create(Scope scope, Operand sparseIndices, Operand sparseValues, Operand sparseShape) { - return create(scope, sparseIndices, sparseValues, sparseShape, String.class); + public static SerializeSparse create(Scope scope, Operand sparseIndices, Operand sparseValues, Operand sparseShape) { + return create(scope, sparseIndices, sparseValues, sparseShape, TString.DTYPE); } /** diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/SerializeTensor.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/SerializeTensor.java index 490f338d6a5..b72248925d4 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/SerializeTensor.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/SerializeTensor.java @@ -24,12 +24,13 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TString; /** * Transforms a Tensor into a serialized TensorProto proto. */ @Operator(group = "io") -public final class SerializeTensor extends PrimitiveOp implements Operand { +public final class SerializeTensor extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new SerializeTensor operation. @@ -48,16 +49,16 @@ public static SerializeTensor create(Scope scope, Operand tensor) { /** * A serialized TensorProto proto of the input tensor. */ - public Output serialized() { + public Output serialized() { return serialized; } @Override - public Output asOutput() { + public Output asOutput() { return serialized; } - private Output serialized; + private Output serialized; private SerializeTensor(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ShardedFilename.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ShardedFilename.java index d1629a79bdc..fbf18c02488 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ShardedFilename.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ShardedFilename.java @@ -24,6 +24,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.TString; /** * Generate a sharded filename. The filename is printf formatted as @@ -31,7 +33,7 @@ * %s-%05d-of-%05d, basename, shard, num_shards. */ @Operator(group = "io") -public final class ShardedFilename extends PrimitiveOp implements Operand { +public final class ShardedFilename extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new ShardedFilename operation. @@ -42,7 +44,7 @@ public final class ShardedFilename extends PrimitiveOp implements Operand basename, Operand shard, Operand numShards) { + public static ShardedFilename create(Scope scope, Operand basename, Operand shard, Operand numShards) { OperationBuilder opBuilder = scope.env().opBuilder("ShardedFilename", scope.makeOpName("ShardedFilename")); opBuilder.addInput(basename.asOutput()); opBuilder.addInput(shard.asOutput()); @@ -53,16 +55,16 @@ public static ShardedFilename create(Scope scope, Operand basename, Oper /** */ - public Output filename() { + public Output filename() { return filename; } @Override - public Output asOutput() { + public Output asOutput() { return filename; } - private Output filename; + private Output filename; private ShardedFilename(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ShardedFilespec.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ShardedFilespec.java index da5d6d2c289..635fee0374a 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ShardedFilespec.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ShardedFilespec.java @@ -24,12 +24,14 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.TString; /** * Generate a glob pattern matching all sharded file names. */ @Operator(group = "io") -public final class ShardedFilespec extends PrimitiveOp implements Operand { +public final class ShardedFilespec extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new ShardedFilespec operation. @@ -39,7 +41,7 @@ public final class ShardedFilespec extends PrimitiveOp implements Operand basename, Operand numShards) { + public static ShardedFilespec create(Scope scope, Operand basename, Operand numShards) { OperationBuilder opBuilder = scope.env().opBuilder("ShardedFilespec", scope.makeOpName("ShardedFilespec")); opBuilder.addInput(basename.asOutput()); opBuilder.addInput(numShards.asOutput()); @@ -49,16 +51,16 @@ public static ShardedFilespec create(Scope scope, Operand basename, Oper /** */ - public Output filename() { + public Output filename() { return filename; } @Override - public Output asOutput() { + public Output asOutput() { return filename; } - private Output filename; + private Output filename; private ShardedFilespec(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/WriteFile.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/WriteFile.java index 7d93e9b5cb4..e4c10a37e74 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/WriteFile.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/WriteFile.java @@ -23,6 +23,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TString; /** * Writes contents to the file at input filename. Creates file and recursively @@ -40,7 +41,7 @@ public final class WriteFile extends PrimitiveOp { * @param contents scalar. The content to be written to the output file. * @return a new instance of WriteFile */ - public static WriteFile create(Scope scope, Operand filename, Operand contents) { + public static WriteFile create(Scope scope, Operand filename, Operand contents) { OperationBuilder opBuilder = scope.env().opBuilder("WriteFile", scope.makeOpName("WriteFile")); opBuilder.addInput(filename.asOutput()); opBuilder.addInput(contents.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/BandPart.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/BandPart.java index 59dc633cdb7..11f3e6d68ed 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/BandPart.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/BandPart.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Copy a tensor setting everything outside a central band in each innermost matrix @@ -82,7 +83,7 @@ public final class BandPart extends PrimitiveOp implements Operand { * entire upper triangle. * @return a new instance of BandPart */ - public static BandPart create(Scope scope, Operand input, Operand numLower, Operand numUpper) { + public static BandPart create(Scope scope, Operand input, Operand numLower, Operand numUpper) { OperationBuilder opBuilder = scope.env().opBuilder("MatrixBandPart", scope.makeOpName("BandPart")); opBuilder.addInput(input.asOutput()); opBuilder.addInput(numLower.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/BatchCholesky.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/BatchCholesky.java index e0751817605..197aa86d548 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/BatchCholesky.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/BatchCholesky.java @@ -24,12 +24,13 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * @param data type for {@code output()} output */ @Operator(group = "linalg") -public final class BatchCholesky extends PrimitiveOp implements Operand { +public final class BatchCholesky extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new BatchCholesky operation. @@ -38,7 +39,7 @@ public final class BatchCholesky extends PrimitiveOp implement * @param input * @return a new instance of BatchCholesky */ - public static BatchCholesky create(Scope scope, Operand input) { + public static BatchCholesky create(Scope scope, Operand input) { OperationBuilder opBuilder = scope.env().opBuilder("BatchCholesky", scope.makeOpName("BatchCholesky")); opBuilder.addInput(input.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/BatchCholeskyGrad.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/BatchCholeskyGrad.java index a36f37ddc75..3fd539a993a 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/BatchCholeskyGrad.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/BatchCholeskyGrad.java @@ -24,12 +24,13 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * @param data type for {@code output()} output */ @Operator(group = "linalg") -public final class BatchCholeskyGrad extends PrimitiveOp implements Operand { +public final class BatchCholeskyGrad extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new BatchCholeskyGrad operation. @@ -39,7 +40,7 @@ public final class BatchCholeskyGrad extends PrimitiveOp imple * @param grad * @return a new instance of BatchCholeskyGrad */ - public static BatchCholeskyGrad create(Scope scope, Operand l, Operand grad) { + public static BatchCholeskyGrad create(Scope scope, Operand l, Operand grad) { OperationBuilder opBuilder = scope.env().opBuilder("BatchCholeskyGrad", scope.makeOpName("BatchCholeskyGrad")); opBuilder.addInput(l.asOutput()); opBuilder.addInput(grad.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/BatchMatrixBandPart.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/BatchMatrixBandPart.java index 03cc5e2b45f..f76f75317d0 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/BatchMatrixBandPart.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/BatchMatrixBandPart.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt64; /** * @param data type for {@code band()} output @@ -40,7 +41,7 @@ public final class BatchMatrixBandPart extends PrimitiveOp implements Operand * @param numUpper * @return a new instance of BatchMatrixBandPart */ - public static BatchMatrixBandPart create(Scope scope, Operand input, Operand numLower, Operand numUpper) { + public static BatchMatrixBandPart create(Scope scope, Operand input, Operand numLower, Operand numUpper) { OperationBuilder opBuilder = scope.env().opBuilder("BatchMatrixBandPart", scope.makeOpName("BatchMatrixBandPart")); opBuilder.addInput(input.asOutput()); opBuilder.addInput(numLower.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/BatchMatrixInverse.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/BatchMatrixInverse.java index d89f765207d..18f201f142e 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/BatchMatrixInverse.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/BatchMatrixInverse.java @@ -24,12 +24,13 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * @param data type for {@code output()} output */ @Operator(group = "linalg") -public final class BatchMatrixInverse extends PrimitiveOp implements Operand { +public final class BatchMatrixInverse extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.linalg.BatchMatrixInverse} @@ -58,7 +59,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of BatchMatrixInverse */ - public static BatchMatrixInverse create(Scope scope, Operand input, Options... options) { + public static BatchMatrixInverse create(Scope scope, Operand input, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("BatchMatrixInverse", scope.makeOpName("BatchMatrixInverse")); opBuilder.addInput(input.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/BatchMatrixSolve.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/BatchMatrixSolve.java index ac76cf71c26..5436c43c224 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/BatchMatrixSolve.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/BatchMatrixSolve.java @@ -24,12 +24,13 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * @param data type for {@code output()} output */ @Operator(group = "linalg") -public final class BatchMatrixSolve extends PrimitiveOp implements Operand { +public final class BatchMatrixSolve extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.linalg.BatchMatrixSolve} @@ -59,7 +60,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of BatchMatrixSolve */ - public static BatchMatrixSolve create(Scope scope, Operand matrix, Operand rhs, Options... options) { + public static BatchMatrixSolve create(Scope scope, Operand matrix, Operand rhs, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("BatchMatrixSolve", scope.makeOpName("BatchMatrixSolve")); opBuilder.addInput(matrix.asOutput()); opBuilder.addInput(rhs.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/BatchMatrixSolveLs.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/BatchMatrixSolveLs.java index c3003c67e8d..6a50e30f1e0 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/BatchMatrixSolveLs.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/BatchMatrixSolveLs.java @@ -24,12 +24,14 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TDouble; +import org.tensorflow.types.family.TNumber; /** * @param data type for {@code output()} output */ @Operator(group = "linalg") -public final class BatchMatrixSolveLs extends PrimitiveOp implements Operand { +public final class BatchMatrixSolveLs extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.linalg.BatchMatrixSolveLs} @@ -60,7 +62,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of BatchMatrixSolveLs */ - public static BatchMatrixSolveLs create(Scope scope, Operand matrix, Operand rhs, Operand l2Regularizer, Options... options) { + public static BatchMatrixSolveLs create(Scope scope, Operand matrix, Operand rhs, Operand l2Regularizer, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("BatchMatrixSolveLs", scope.makeOpName("BatchMatrixSolveLs")); opBuilder.addInput(matrix.asOutput()); opBuilder.addInput(rhs.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/BatchMatrixTriangularSolve.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/BatchMatrixTriangularSolve.java index 49d0ac3df43..e4877bf1bbf 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/BatchMatrixTriangularSolve.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/BatchMatrixTriangularSolve.java @@ -24,12 +24,13 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * @param data type for {@code output()} output */ @Operator(group = "linalg") -public final class BatchMatrixTriangularSolve extends PrimitiveOp implements Operand { +public final class BatchMatrixTriangularSolve extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.linalg.BatchMatrixTriangularSolve} @@ -68,7 +69,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of BatchMatrixTriangularSolve */ - public static BatchMatrixTriangularSolve create(Scope scope, Operand matrix, Operand rhs, Options... options) { + public static BatchMatrixTriangularSolve create(Scope scope, Operand matrix, Operand rhs, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("BatchMatrixTriangularSolve", scope.makeOpName("BatchMatrixTriangularSolve")); opBuilder.addInput(matrix.asOutput()); opBuilder.addInput(rhs.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/BatchSelfAdjointEig.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/BatchSelfAdjointEig.java index 2fedef05941..95513b203c9 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/BatchSelfAdjointEig.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/BatchSelfAdjointEig.java @@ -24,12 +24,13 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * @param data type for {@code e()} output */ @Operator(group = "linalg") -public final class BatchSelfAdjointEig extends PrimitiveOp { +public final class BatchSelfAdjointEig extends PrimitiveOp { /** * Optional attributes for {@link org.tensorflow.op.linalg.BatchSelfAdjointEig} @@ -58,7 +59,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of BatchSelfAdjointEig */ - public static BatchSelfAdjointEig create(Scope scope, Operand input, Options... options) { + public static BatchSelfAdjointEig create(Scope scope, Operand input, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("BatchSelfAdjointEigV2", scope.makeOpName("BatchSelfAdjointEig")); opBuilder.addInput(input.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/CholeskyGrad.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/CholeskyGrad.java index 1f979fd7186..4efd2aa5e6f 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/CholeskyGrad.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/CholeskyGrad.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Computes the reverse mode backpropagated gradient of the Cholesky algorithm. @@ -34,7 +35,7 @@ * @param data type for {@code output()} output */ @Operator(group = "linalg") -public final class CholeskyGrad extends PrimitiveOp implements Operand { +public final class CholeskyGrad extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new CholeskyGrad operation. @@ -48,7 +49,7 @@ public final class CholeskyGrad extends PrimitiveOp implements * this tensor. * @return a new instance of CholeskyGrad */ - public static CholeskyGrad create(Scope scope, Operand l, Operand grad) { + public static CholeskyGrad create(Scope scope, Operand l, Operand grad) { OperationBuilder opBuilder = scope.env().opBuilder("CholeskyGrad", scope.makeOpName("CholeskyGrad")); opBuilder.addInput(l.asOutput()); opBuilder.addInput(grad.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/ConjugateTranspose.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/ConjugateTranspose.java index 06565abc2e3..1d7e32defe6 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/ConjugateTranspose.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/ConjugateTranspose.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Shuffle dimensions of x according to a permutation and conjugate the result. @@ -45,7 +46,7 @@ public final class ConjugateTranspose extends PrimitiveOp implements Operand< * @param perm * @return a new instance of ConjugateTranspose */ - public static ConjugateTranspose create(Scope scope, Operand x, Operand perm) { + public static ConjugateTranspose create(Scope scope, Operand x, Operand perm) { OperationBuilder opBuilder = scope.env().opBuilder("ConjugateTranspose", scope.makeOpName("ConjugateTranspose")); opBuilder.addInput(x.asOutput()); opBuilder.addInput(perm.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/Cross.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/Cross.java index 70cfeb6e7e9..517f4c55f1e 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/Cross.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/Cross.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Compute the pairwise cross product. @@ -35,7 +36,7 @@ * @param data type for {@code product()} output */ @Operator(group = "linalg") -public final class Cross extends PrimitiveOp implements Operand { +public final class Cross extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new Cross operation. @@ -45,7 +46,7 @@ public final class Cross extends PrimitiveOp implements Operan * @param b Another tensor, of same type and shape as `a`. * @return a new instance of Cross */ - public static Cross create(Scope scope, Operand a, Operand b) { + public static Cross create(Scope scope, Operand a, Operand b) { OperationBuilder opBuilder = scope.env().opBuilder("Cross", scope.makeOpName("Cross")); opBuilder.addInput(a.asOutput()); opBuilder.addInput(b.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/LoadAndRemapMatrix.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/LoadAndRemapMatrix.java index 6643022a7de..44c72b00d49 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/LoadAndRemapMatrix.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/LoadAndRemapMatrix.java @@ -24,6 +24,9 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TFloat; +import org.tensorflow.types.TInt64; +import org.tensorflow.types.TString; /** * Loads a 2-D (matrix) `Tensor` with name `old_tensor_name` from the checkpoint @@ -70,7 +73,7 @@ * [0.25, -0.25, 42]] */ @Operator(group = "linalg") -public final class LoadAndRemapMatrix extends PrimitiveOp implements Operand { +public final class LoadAndRemapMatrix extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.linalg.LoadAndRemapMatrix} @@ -115,7 +118,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of LoadAndRemapMatrix */ - public static LoadAndRemapMatrix create(Scope scope, Operand ckptPath, Operand oldTensorName, Operand rowRemapping, Operand colRemapping, Operand initializingValues, Long numRows, Long numCols, Options... options) { + public static LoadAndRemapMatrix create(Scope scope, Operand ckptPath, Operand oldTensorName, Operand rowRemapping, Operand colRemapping, Operand initializingValues, Long numRows, Long numCols, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("LoadAndRemapMatrix", scope.makeOpName("LoadAndRemapMatrix")); opBuilder.addInput(ckptPath.asOutput()); opBuilder.addInput(oldTensorName.asOutput()); @@ -148,16 +151,16 @@ public static Options maxRowsInMemory(Long maxRowsInMemory) { * Output matrix containing existing values loaded from the * checkpoint, and with any missing values filled in from initializing_values. */ - public Output outputMatrix() { + public Output outputMatrix() { return outputMatrix; } @Override - public Output asOutput() { + public Output asOutput() { return outputMatrix; } - private Output outputMatrix; + private Output outputMatrix; private LoadAndRemapMatrix(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/MatrixSolveLs.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/MatrixSolveLs.java index 10ed9f76b12..5cdc09c391c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/MatrixSolveLs.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/MatrixSolveLs.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TDouble; /** * Solves one or more linear least-squares problems. @@ -101,7 +102,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of MatrixSolveLs */ - public static MatrixSolveLs create(Scope scope, Operand matrix, Operand rhs, Operand l2Regularizer, Options... options) { + public static MatrixSolveLs create(Scope scope, Operand matrix, Operand rhs, Operand l2Regularizer, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("MatrixSolveLs", scope.makeOpName("MatrixSolveLs")); opBuilder.addInput(matrix.asOutput()); opBuilder.addInput(rhs.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/QuantizedMatMul.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/QuantizedMatMul.java index 753c4e48276..71362ba5bdf 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/QuantizedMatMul.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/QuantizedMatMul.java @@ -25,6 +25,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TFloat; /** * Perform a quantized matrix multiplication of `a` by the matrix `b`. @@ -83,7 +84,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of QuantizedMatMul */ - public static QuantizedMatMul create(Scope scope, Operand a, Operand b, Operand minA, Operand maxA, Operand minB, Operand maxB, Class Toutput, Class Tactivation, Options... options) { + public static QuantizedMatMul create(Scope scope, Operand a, Operand b, Operand minA, Operand maxA, Operand minB, Operand maxB, DataType Toutput, DataType Tactivation, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("QuantizedMatMul", scope.makeOpName("QuantizedMatMul")); opBuilder.addInput(a.asOutput()); opBuilder.addInput(b.asOutput()); @@ -92,8 +93,8 @@ public static QuantizedMatMul create(Scope scope, Operand a, opBuilder.addInput(minB.asOutput()); opBuilder.addInput(maxB.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); - opBuilder.setAttr("Toutput", DataType.fromClass(Toutput)); - opBuilder.setAttr("Tactivation", DataType.fromClass(Tactivation)); + opBuilder.setAttr("Toutput", Toutput); + opBuilder.setAttr("Tactivation", Tactivation); if (options != null) { for (Options opts : options) { if (opts.transposeA != null) { @@ -130,20 +131,20 @@ public Output out() { /** * The float value that the lowest quantized output value represents. */ - public Output minOut() { + public Output minOut() { return minOut; } /** * The float value that the highest quantized output value represents. */ - public Output maxOut() { + public Output maxOut() { return maxOut; } private Output out; - private Output minOut; - private Output maxOut; + private Output minOut; + private Output maxOut; private QuantizedMatMul(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/Transpose.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/Transpose.java index 6e13c6de679..807f5f50d8a 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/Transpose.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/Transpose.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Shuffle dimensions of x according to a permutation. @@ -44,7 +45,7 @@ public final class Transpose extends PrimitiveOp implements Operand { * @param perm * @return a new instance of Transpose */ - public static Transpose create(Scope scope, Operand x, Operand perm) { + public static Transpose create(Scope scope, Operand x, Operand perm) { OperationBuilder opBuilder = scope.env().opBuilder("Transpose", scope.makeOpName("Transpose")); opBuilder.addInput(x.asOutput()); opBuilder.addInput(perm.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Abs.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Abs.java index 3048c431d97..01e1529d8b9 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Abs.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Abs.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Computes the absolute value of a tensor. @@ -35,7 +36,7 @@ * @param data type for {@code y()} output */ @Operator(group = "math") -public final class Abs extends PrimitiveOp implements Operand { +public final class Abs extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new Abs operation. @@ -44,7 +45,7 @@ public final class Abs extends PrimitiveOp implements Operand< * @param x * @return a new instance of Abs */ - public static Abs create(Scope scope, Operand x) { + public static Abs create(Scope scope, Operand x) { OperationBuilder opBuilder = scope.env().opBuilder("Abs", scope.makeOpName("Abs")); opBuilder.addInput(x.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/AccumulateN.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/AccumulateN.java index b71f4c98bf6..19cd9a83d3a 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/AccumulateN.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/AccumulateN.java @@ -21,7 +21,7 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.Operands; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Angle.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Angle.java index da69b651cb4..d7138c518db 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Angle.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Angle.java @@ -25,6 +25,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TFloat; +import org.tensorflow.types.family.TNumber; /** * Returns the argument of a complex number. @@ -48,7 +50,7 @@ * @param data type for {@code output()} output */ @Operator(group = "math") -public final class Angle extends PrimitiveOp implements Operand { +public final class Angle extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new Angle operation. @@ -58,11 +60,11 @@ public final class Angle extends PrimitiveOp implements Operan * @param Tout * @return a new instance of Angle */ - public static Angle create(Scope scope, Operand input, Class Tout) { + public static Angle create(Scope scope, Operand input, DataType Tout) { OperationBuilder opBuilder = scope.env().opBuilder("Angle", scope.makeOpName("Angle")); opBuilder.addInput(input.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); - opBuilder.setAttr("Tout", DataType.fromClass(Tout)); + opBuilder.setAttr("Tout", Tout); return new Angle(opBuilder.build()); } @@ -73,8 +75,8 @@ public static Angle create(Scope scope, Operand inpu * @param input * @return a new instance of Angle */ - public static Angle create(Scope scope, Operand input) { - return create(scope, input, Float.class); + public static Angle create(Scope scope, Operand input) { + return create(scope, input, TFloat.DTYPE); } /** diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/ApproximateEqual.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/ApproximateEqual.java index afc6caa4630..ef79cbeac4d 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/ApproximateEqual.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/ApproximateEqual.java @@ -24,12 +24,13 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TBool; /** * Returns the truth value of abs(x-y) < tolerance element-wise. */ @Operator(group = "math") -public final class ApproximateEqual extends PrimitiveOp implements Operand { +public final class ApproximateEqual extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.math.ApproximateEqual} @@ -83,16 +84,16 @@ public static Options tolerance(Float tolerance) { /** */ - public Output z() { + public Output z() { return z; } @Override - public Output asOutput() { + public Output asOutput() { return z; } - private Output z; + private Output z; private ApproximateEqual(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/ArgMax.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/ArgMax.java index 3f2243e7bd2..42416f7b51f 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/ArgMax.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/ArgMax.java @@ -25,6 +25,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt64; +import org.tensorflow.types.family.TNumber; /** * Returns the index with the largest value across dimensions of a tensor. @@ -45,7 +47,7 @@ * @param data type for {@code output()} output */ @Operator(group = "math") -public final class ArgMax extends PrimitiveOp implements Operand { +public final class ArgMax extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new ArgMax operation. @@ -58,12 +60,12 @@ public final class ArgMax extends PrimitiveOp implements Opera * @param outputType * @return a new instance of ArgMax */ - public static ArgMax create(Scope scope, Operand input, Operand dimension, Class outputType) { + public static ArgMax create(Scope scope, Operand input, Operand dimension, DataType outputType) { OperationBuilder opBuilder = scope.env().opBuilder("ArgMax", scope.makeOpName("ArgMax")); opBuilder.addInput(input.asOutput()); opBuilder.addInput(dimension.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); - opBuilder.setAttr("output_type", DataType.fromClass(outputType)); + opBuilder.setAttr("output_type", outputType); return new ArgMax(opBuilder.build()); } @@ -77,8 +79,8 @@ public static ArgMax create(Scope sco * use dimension = 0. * @return a new instance of ArgMax */ - public static ArgMax create(Scope scope, Operand input, Operand dimension) { - return create(scope, input, dimension, Long.class); + public static ArgMax create(Scope scope, Operand input, Operand dimension) { + return create(scope, input, dimension, TInt64.DTYPE); } /** diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/ArgMin.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/ArgMin.java index e6ff7ce499d..fcbec52bb03 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/ArgMin.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/ArgMin.java @@ -25,6 +25,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt64; +import org.tensorflow.types.family.TNumber; /** * Returns the index with the smallest value across dimensions of a tensor. @@ -45,7 +47,7 @@ * @param data type for {@code output()} output */ @Operator(group = "math") -public final class ArgMin extends PrimitiveOp implements Operand { +public final class ArgMin extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new ArgMin operation. @@ -58,12 +60,12 @@ public final class ArgMin extends PrimitiveOp implements Opera * @param outputType * @return a new instance of ArgMin */ - public static ArgMin create(Scope scope, Operand input, Operand dimension, Class outputType) { + public static ArgMin create(Scope scope, Operand input, Operand dimension, DataType outputType) { OperationBuilder opBuilder = scope.env().opBuilder("ArgMin", scope.makeOpName("ArgMin")); opBuilder.addInput(input.asOutput()); opBuilder.addInput(dimension.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); - opBuilder.setAttr("output_type", DataType.fromClass(outputType)); + opBuilder.setAttr("output_type", outputType); return new ArgMin(opBuilder.build()); } @@ -77,8 +79,8 @@ public static ArgMin create(Scope sco * use dimension = 0. * @return a new instance of ArgMin */ - public static ArgMin create(Scope scope, Operand input, Operand dimension) { - return create(scope, input, dimension, Long.class); + public static ArgMin create(Scope scope, Operand input, Operand dimension) { + return create(scope, input, dimension, TInt64.DTYPE); } /** diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Atan2.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Atan2.java index 8337341e4c2..218a2bda99e 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Atan2.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Atan2.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Computes arctangent of `y/x` element-wise, respecting signs of the arguments. @@ -37,7 +38,7 @@ * @param data type for {@code z()} output */ @Operator(group = "math") -public final class Atan2 extends PrimitiveOp implements Operand { +public final class Atan2 extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new Atan2 operation. @@ -47,7 +48,7 @@ public final class Atan2 extends PrimitiveOp implements Operan * @param x * @return a new instance of Atan2 */ - public static Atan2 create(Scope scope, Operand y, Operand x) { + public static Atan2 create(Scope scope, Operand y, Operand x) { OperationBuilder opBuilder = scope.env().opBuilder("Atan2", scope.makeOpName("Atan2")); opBuilder.addInput(y.asOutput()); opBuilder.addInput(x.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/BesselI0e.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/BesselI0e.java index 5777af1108d..00503880213 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/BesselI0e.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/BesselI0e.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Computes the Bessel i0e function of `x` element-wise. @@ -36,7 +37,7 @@ * @param data type for {@code y()} output */ @Operator(group = "math") -public final class BesselI0e extends PrimitiveOp implements Operand { +public final class BesselI0e extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new BesselI0e operation. @@ -45,7 +46,7 @@ public final class BesselI0e extends PrimitiveOp implements Op * @param x * @return a new instance of BesselI0e */ - public static BesselI0e create(Scope scope, Operand x) { + public static BesselI0e create(Scope scope, Operand x) { OperationBuilder opBuilder = scope.env().opBuilder("BesselI0e", scope.makeOpName("BesselI0e")); opBuilder.addInput(x.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/BesselI1e.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/BesselI1e.java index c119feb2b4d..fb83da91d9a 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/BesselI1e.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/BesselI1e.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Computes the Bessel i1e function of `x` element-wise. @@ -36,7 +37,7 @@ * @param data type for {@code y()} output */ @Operator(group = "math") -public final class BesselI1e extends PrimitiveOp implements Operand { +public final class BesselI1e extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new BesselI1e operation. @@ -45,7 +46,7 @@ public final class BesselI1e extends PrimitiveOp implements Op * @param x * @return a new instance of BesselI1e */ - public static BesselI1e create(Scope scope, Operand x) { + public static BesselI1e create(Scope scope, Operand x) { OperationBuilder opBuilder = scope.env().opBuilder("BesselI1e", scope.makeOpName("BesselI1e")); opBuilder.addInput(x.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Betainc.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Betainc.java index 15a837233cb..ac7384a5887 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Betainc.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Betainc.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Compute the regularized incomplete beta integral \\(I_x(a, b)\\). @@ -42,7 +43,7 @@ * @param data type for {@code z()} output */ @Operator(group = "math") -public final class Betainc extends PrimitiveOp implements Operand { +public final class Betainc extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new Betainc operation. @@ -53,7 +54,7 @@ public final class Betainc extends PrimitiveOp implements Oper * @param x * @return a new instance of Betainc */ - public static Betainc create(Scope scope, Operand a, Operand b, Operand x) { + public static Betainc create(Scope scope, Operand a, Operand b, Operand x) { OperationBuilder opBuilder = scope.env().opBuilder("Betainc", scope.makeOpName("Betainc")); opBuilder.addInput(a.asOutput()); opBuilder.addInput(b.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Bincount.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Bincount.java index 479b9685d3b..ff70f80e346 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Bincount.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Bincount.java @@ -24,6 +24,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.family.TNumber; /** * Counts the number of occurrences of each value in an integer array. @@ -39,7 +41,7 @@ * @param data type for {@code bins()} output */ @Operator(group = "math") -public final class Bincount extends PrimitiveOp implements Operand { +public final class Bincount extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new Bincount operation. @@ -52,7 +54,7 @@ public final class Bincount extends PrimitiveOp implements Ope * equal to 1. * @return a new instance of Bincount */ - public static Bincount create(Scope scope, Operand arr, Operand size, Operand weights) { + public static Bincount create(Scope scope, Operand arr, Operand size, Operand weights) { OperationBuilder opBuilder = scope.env().opBuilder("Bincount", scope.makeOpName("Bincount")); opBuilder.addInput(arr.asOutput()); opBuilder.addInput(size.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Ceil.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Ceil.java index 6deac52c312..92b5a9195a7 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Ceil.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Ceil.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Returns element-wise smallest integer not less than x. @@ -31,7 +32,7 @@ * @param data type for {@code y()} output */ @Operator(group = "math") -public final class Ceil extends PrimitiveOp implements Operand { +public final class Ceil extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new Ceil operation. @@ -40,7 +41,7 @@ public final class Ceil extends PrimitiveOp implements Operand * @param x * @return a new instance of Ceil */ - public static Ceil create(Scope scope, Operand x) { + public static Ceil create(Scope scope, Operand x) { OperationBuilder opBuilder = scope.env().opBuilder("Ceil", scope.makeOpName("Ceil")); opBuilder.addInput(x.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/CheckNumerics.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/CheckNumerics.java index edc6eb6fd57..e3cdaca3a20 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/CheckNumerics.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/CheckNumerics.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Checks a tensor for NaN and Inf values. @@ -34,7 +35,7 @@ * @param data type for {@code output()} output */ @Operator(group = "math") -public final class CheckNumerics extends PrimitiveOp implements Operand { +public final class CheckNumerics extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new CheckNumerics operation. @@ -44,7 +45,7 @@ public final class CheckNumerics extends PrimitiveOp implement * @param message Prefix of the error message. * @return a new instance of CheckNumerics */ - public static CheckNumerics create(Scope scope, Operand tensor, String message) { + public static CheckNumerics create(Scope scope, Operand tensor, String message) { OperationBuilder opBuilder = scope.env().opBuilder("CheckNumerics", scope.makeOpName("CheckNumerics")); opBuilder.addInput(tensor.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/CompareAndBitpack.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/CompareAndBitpack.java index 83388488113..48dec4dc79a 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/CompareAndBitpack.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/CompareAndBitpack.java @@ -24,7 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; -import org.tensorflow.types.UInt8; +import org.tensorflow.types.TUInt8; /** * Compare values of `input` to `threshold` and pack resulting bits into a `uint8`. @@ -52,7 +52,7 @@ * a `uint8` tensor shaped `[s0, s1, ..., s_n / 8]`. */ @Operator(group = "math") -public final class CompareAndBitpack extends PrimitiveOp implements Operand { +public final class CompareAndBitpack extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new CompareAndBitpack operation. @@ -73,16 +73,16 @@ public static CompareAndBitpack create(Scope scope, Operand input, Operan /** * The bitpacked comparisons. */ - public Output output() { + public Output output() { return output; } @Override - public Output asOutput() { + public Output asOutput() { return output; } - private Output output; + private Output output; private CompareAndBitpack(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/ComplexAbs.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/ComplexAbs.java index 57b1c4c6ce3..b6b788ca526 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/ComplexAbs.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/ComplexAbs.java @@ -25,6 +25,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TFloat; +import org.tensorflow.types.family.TNumber; /** * Computes the complex absolute value of a tensor. @@ -37,7 +39,7 @@ * @param data type for {@code y()} output */ @Operator(group = "math") -public final class ComplexAbs extends PrimitiveOp implements Operand { +public final class ComplexAbs extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new ComplexAbs operation. @@ -47,11 +49,11 @@ public final class ComplexAbs extends PrimitiveOp implements O * @param Tout * @return a new instance of ComplexAbs */ - public static ComplexAbs create(Scope scope, Operand x, Class Tout) { + public static ComplexAbs create(Scope scope, Operand x, DataType Tout) { OperationBuilder opBuilder = scope.env().opBuilder("ComplexAbs", scope.makeOpName("ComplexAbs")); opBuilder.addInput(x.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); - opBuilder.setAttr("Tout", DataType.fromClass(Tout)); + opBuilder.setAttr("Tout", Tout); return new ComplexAbs(opBuilder.build()); } @@ -62,8 +64,8 @@ public static ComplexAbs create(Scope scope, Operand * @param x * @return a new instance of ComplexAbs */ - public static ComplexAbs create(Scope scope, Operand x) { - return create(scope, x, Float.class); + public static ComplexAbs create(Scope scope, Operand x) { + return create(scope, x, TFloat.DTYPE); } /** diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Cumprod.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Cumprod.java index 7b43500d185..53f95644b25 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Cumprod.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Cumprod.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Compute the cumulative product of the tensor `x` along `axis`. @@ -96,7 +97,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of Cumprod */ - public static Cumprod create(Scope scope, Operand x, Operand axis, Options... options) { + public static Cumprod create(Scope scope, Operand x, Operand axis, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("Cumprod", scope.makeOpName("Cumprod")); opBuilder.addInput(x.asOutput()); opBuilder.addInput(axis.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Cumsum.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Cumsum.java index fb52444a59e..0f7ac896386 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Cumsum.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Cumsum.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Compute the cumulative sum of the tensor `x` along `axis`. @@ -96,7 +97,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of Cumsum */ - public static Cumsum create(Scope scope, Operand x, Operand axis, Options... options) { + public static Cumsum create(Scope scope, Operand x, Operand axis, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("Cumsum", scope.makeOpName("Cumsum")); opBuilder.addInput(x.asOutput()); opBuilder.addInput(axis.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Digamma.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Digamma.java index e0b0eee777f..9fdfe5c5f28 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Digamma.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Digamma.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Computes Psi, the derivative of Lgamma (the log of the absolute value of @@ -33,7 +34,7 @@ * @param data type for {@code y()} output */ @Operator(group = "math") -public final class Digamma extends PrimitiveOp implements Operand { +public final class Digamma extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new Digamma operation. @@ -42,7 +43,7 @@ public final class Digamma extends PrimitiveOp implements Oper * @param x * @return a new instance of Digamma */ - public static Digamma create(Scope scope, Operand x) { + public static Digamma create(Scope scope, Operand x) { OperationBuilder opBuilder = scope.env().opBuilder("Digamma", scope.makeOpName("Digamma")); opBuilder.addInput(x.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Equal.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Equal.java index e968606db84..1c51c9d1867 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Equal.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Equal.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TBool; /** * Returns the truth value of (x == y) element-wise. @@ -42,7 +43,7 @@ * */ @Operator(group = "math") -public final class Equal extends PrimitiveOp implements Operand { +public final class Equal extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.math.Equal} @@ -96,16 +97,16 @@ public static Options incompatibleShapeError(Boolean incompatibleShapeError) { /** */ - public Output z() { + public Output z() { return z; } @Override - public Output asOutput() { + public Output asOutput() { return z; } - private Output z; + private Output z; private Equal(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Erf.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Erf.java index 875b0186daf..7898257360f 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Erf.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Erf.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Computes the Gauss error function of `x` element-wise. @@ -31,7 +32,7 @@ * @param data type for {@code y()} output */ @Operator(group = "math") -public final class Erf extends PrimitiveOp implements Operand { +public final class Erf extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new Erf operation. @@ -40,7 +41,7 @@ public final class Erf extends PrimitiveOp implements Operand< * @param x * @return a new instance of Erf */ - public static Erf create(Scope scope, Operand x) { + public static Erf create(Scope scope, Operand x) { OperationBuilder opBuilder = scope.env().opBuilder("Erf", scope.makeOpName("Erf")); opBuilder.addInput(x.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Erfc.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Erfc.java index 4c7d373d28d..775fc7842f1 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Erfc.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Erfc.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Computes the complementary error function of `x` element-wise. @@ -31,7 +32,7 @@ * @param data type for {@code y()} output */ @Operator(group = "math") -public final class Erfc extends PrimitiveOp implements Operand { +public final class Erfc extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new Erfc operation. @@ -40,7 +41,7 @@ public final class Erfc extends PrimitiveOp implements Operand * @param x * @return a new instance of Erfc */ - public static Erfc create(Scope scope, Operand x) { + public static Erfc create(Scope scope, Operand x) { OperationBuilder opBuilder = scope.env().opBuilder("Erfc", scope.makeOpName("Erfc")); opBuilder.addInput(x.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Fact.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Fact.java index 6938723bcd3..7c3ee232177 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Fact.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Fact.java @@ -24,12 +24,13 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TString; /** * Output a fact about factorials. */ @Operator(group = "math") -public final class Fact extends PrimitiveOp implements Operand { +public final class Fact extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new Fact operation. @@ -45,16 +46,16 @@ public static Fact create(Scope scope) { /** */ - public Output fact() { + public Output fact() { return fact; } @Override - public Output asOutput() { + public Output asOutput() { return fact; } - private Output fact; + private Output fact; private Fact(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Floor.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Floor.java index 57a17cb89b9..2dffbb0e0e3 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Floor.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Floor.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Returns element-wise largest integer not greater than x. @@ -31,7 +32,7 @@ * @param data type for {@code y()} output */ @Operator(group = "math") -public final class Floor extends PrimitiveOp implements Operand { +public final class Floor extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new Floor operation. @@ -40,7 +41,7 @@ public final class Floor extends PrimitiveOp implements Operan * @param x * @return a new instance of Floor */ - public static Floor create(Scope scope, Operand x) { + public static Floor create(Scope scope, Operand x) { OperationBuilder opBuilder = scope.env().opBuilder("Floor", scope.makeOpName("Floor")); opBuilder.addInput(x.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/FloorMod.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/FloorMod.java index 7e4d44ce1d6..0c99ea5047f 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/FloorMod.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/FloorMod.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Returns element-wise remainder of division. When `x < 0` xor `y < 0` is @@ -37,7 +38,7 @@ * @param data type for {@code z()} output */ @Operator(group = "math") -public final class FloorMod extends PrimitiveOp implements Operand { +public final class FloorMod extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new FloorMod operation. @@ -47,7 +48,7 @@ public final class FloorMod extends PrimitiveOp implements Ope * @param y * @return a new instance of FloorMod */ - public static FloorMod create(Scope scope, Operand x, Operand y) { + public static FloorMod create(Scope scope, Operand x, Operand y) { OperationBuilder opBuilder = scope.env().opBuilder("FloorMod", scope.makeOpName("FloorMod")); opBuilder.addInput(x.asOutput()); opBuilder.addInput(y.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Greater.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Greater.java index c24cb98efe7..2b1cde65411 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Greater.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Greater.java @@ -24,6 +24,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TBool; +import org.tensorflow.types.family.TNumber; /** * Returns the truth value of (x > y) element-wise. @@ -32,7 +34,7 @@ * [here](http://docs.scipy.org/doc/numpy/user/basics.broadcasting.html) */ @Operator(group = "math") -public final class Greater extends PrimitiveOp implements Operand { +public final class Greater extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new Greater operation. @@ -42,7 +44,7 @@ public final class Greater extends PrimitiveOp implements Operand { * @param y * @return a new instance of Greater */ - public static Greater create(Scope scope, Operand x, Operand y) { + public static Greater create(Scope scope, Operand x, Operand y) { OperationBuilder opBuilder = scope.env().opBuilder("Greater", scope.makeOpName("Greater")); opBuilder.addInput(x.asOutput()); opBuilder.addInput(y.asOutput()); @@ -52,16 +54,16 @@ public static Greater create(Scope scope, Operand x, Opera /** */ - public Output z() { + public Output z() { return z; } @Override - public Output asOutput() { + public Output asOutput() { return z; } - private Output z; + private Output z; private Greater(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/GreaterEqual.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/GreaterEqual.java index ba6f5fd57d4..6a7ffe48f64 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/GreaterEqual.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/GreaterEqual.java @@ -24,6 +24,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TBool; +import org.tensorflow.types.family.TNumber; /** * Returns the truth value of (x >= y) element-wise. @@ -32,7 +34,7 @@ * [here](http://docs.scipy.org/doc/numpy/user/basics.broadcasting.html) */ @Operator(group = "math") -public final class GreaterEqual extends PrimitiveOp implements Operand { +public final class GreaterEqual extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new GreaterEqual operation. @@ -42,7 +44,7 @@ public final class GreaterEqual extends PrimitiveOp implements Operand * @param y * @return a new instance of GreaterEqual */ - public static GreaterEqual create(Scope scope, Operand x, Operand y) { + public static GreaterEqual create(Scope scope, Operand x, Operand y) { OperationBuilder opBuilder = scope.env().opBuilder("GreaterEqual", scope.makeOpName("GreaterEqual")); opBuilder.addInput(x.asOutput()); opBuilder.addInput(y.asOutput()); @@ -52,16 +54,16 @@ public static GreaterEqual create(Scope scope, Operand x, /** */ - public Output z() { + public Output z() { return z; } @Override - public Output asOutput() { + public Output asOutput() { return z; } - private Output z; + private Output z; private GreaterEqual(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Igamma.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Igamma.java index 24f878fb47f..eeecb28e7ee 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Igamma.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Igamma.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Compute the lower regularized incomplete Gamma function `P(a, x)`. @@ -44,7 +45,7 @@ * @param data type for {@code z()} output */ @Operator(group = "math") -public final class Igamma extends PrimitiveOp implements Operand { +public final class Igamma extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new Igamma operation. @@ -54,7 +55,7 @@ public final class Igamma extends PrimitiveOp implements Opera * @param x * @return a new instance of Igamma */ - public static Igamma create(Scope scope, Operand a, Operand x) { + public static Igamma create(Scope scope, Operand a, Operand x) { OperationBuilder opBuilder = scope.env().opBuilder("Igamma", scope.makeOpName("Igamma")); opBuilder.addInput(a.asOutput()); opBuilder.addInput(x.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/IgammaGradA.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/IgammaGradA.java index 613a514c5db..fc4ede46be6 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/IgammaGradA.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/IgammaGradA.java @@ -23,13 +23,14 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.family.TNumber; /** * Computes the gradient of `igamma(a, x)` wrt `a`. * * @param data type for {@code z()} output */ -public final class IgammaGradA extends PrimitiveOp implements Operand { +public final class IgammaGradA extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new IgammaGradA operation. @@ -39,7 +40,7 @@ public final class IgammaGradA extends PrimitiveOp implements * @param x * @return a new instance of IgammaGradA */ - public static IgammaGradA create(Scope scope, Operand a, Operand x) { + public static IgammaGradA create(Scope scope, Operand a, Operand x) { OperationBuilder opBuilder = scope.env().opBuilder("IgammaGradA", scope.makeOpName("IgammaGradA")); opBuilder.addInput(a.asOutput()); opBuilder.addInput(x.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Igammac.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Igammac.java index 9111c9d6adc..6fa815e6097 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Igammac.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Igammac.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Compute the upper regularized incomplete Gamma function `Q(a, x)`. @@ -44,7 +45,7 @@ * @param data type for {@code z()} output */ @Operator(group = "math") -public final class Igammac extends PrimitiveOp implements Operand { +public final class Igammac extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new Igammac operation. @@ -54,7 +55,7 @@ public final class Igammac extends PrimitiveOp implements Oper * @param x * @return a new instance of Igammac */ - public static Igammac create(Scope scope, Operand a, Operand x) { + public static Igammac create(Scope scope, Operand a, Operand x) { OperationBuilder opBuilder = scope.env().opBuilder("Igammac", scope.makeOpName("Igammac")); opBuilder.addInput(a.asOutput()); opBuilder.addInput(x.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Imag.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Imag.java index a23c17c783f..c9949468ec4 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Imag.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Imag.java @@ -25,6 +25,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TFloat; +import org.tensorflow.types.family.TNumber; /** * Returns the imaginary part of a complex number. @@ -44,7 +46,7 @@ * @param data type for {@code output()} output */ @Operator(group = "math") -public final class Imag extends PrimitiveOp implements Operand { +public final class Imag extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new Imag operation. @@ -54,11 +56,11 @@ public final class Imag extends PrimitiveOp implements Operand * @param Tout * @return a new instance of Imag */ - public static Imag create(Scope scope, Operand input, Class Tout) { + public static Imag create(Scope scope, Operand input, DataType Tout) { OperationBuilder opBuilder = scope.env().opBuilder("Imag", scope.makeOpName("Imag")); opBuilder.addInput(input.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); - opBuilder.setAttr("Tout", DataType.fromClass(Tout)); + opBuilder.setAttr("Tout", Tout); return new Imag(opBuilder.build()); } @@ -69,8 +71,8 @@ public static Imag create(Scope scope, Operand input * @param input * @return a new instance of Imag */ - public static Imag create(Scope scope, Operand input) { - return create(scope, input, Float.class); + public static Imag create(Scope scope, Operand input) { + return create(scope, input, TFloat.DTYPE); } /** diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/InvertPermutation.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/InvertPermutation.java index 081ecb612c6..7097102180c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/InvertPermutation.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/InvertPermutation.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Computes the inverse permutation of a tensor. @@ -47,7 +48,7 @@ * @param data type for {@code y()} output */ @Operator(group = "math") -public final class InvertPermutation extends PrimitiveOp implements Operand { +public final class InvertPermutation extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new InvertPermutation operation. @@ -56,7 +57,7 @@ public final class InvertPermutation extends PrimitiveOp imple * @param x 1-D. * @return a new instance of InvertPermutation */ - public static InvertPermutation create(Scope scope, Operand x) { + public static InvertPermutation create(Scope scope, Operand x) { OperationBuilder opBuilder = scope.env().opBuilder("InvertPermutation", scope.makeOpName("InvertPermutation")); opBuilder.addInput(x.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/IsFinite.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/IsFinite.java index e3dde1f009d..cb9a20154de 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/IsFinite.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/IsFinite.java @@ -24,6 +24,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TBool; +import org.tensorflow.types.family.TNumber; /** * Returns which elements of x are finite. @@ -33,7 +35,7 @@ * @end_compatibility */ @Operator(group = "math") -public final class IsFinite extends PrimitiveOp implements Operand { +public final class IsFinite extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new IsFinite operation. @@ -42,7 +44,7 @@ public final class IsFinite extends PrimitiveOp implements Operand { * @param x * @return a new instance of IsFinite */ - public static IsFinite create(Scope scope, Operand x) { + public static IsFinite create(Scope scope, Operand x) { OperationBuilder opBuilder = scope.env().opBuilder("IsFinite", scope.makeOpName("IsFinite")); opBuilder.addInput(x.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); @@ -51,16 +53,16 @@ public static IsFinite create(Scope scope, Operand x) { /** */ - public Output y() { + public Output y() { return y; } @Override - public Output asOutput() { + public Output asOutput() { return y; } - private Output y; + private Output y; private IsFinite(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/IsInf.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/IsInf.java index 4be229c0eb5..61c63660729 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/IsInf.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/IsInf.java @@ -24,6 +24,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TBool; +import org.tensorflow.types.family.TNumber; /** * Returns which elements of x are Inf. @@ -33,7 +35,7 @@ * @end_compatibility */ @Operator(group = "math") -public final class IsInf extends PrimitiveOp implements Operand { +public final class IsInf extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new IsInf operation. @@ -42,7 +44,7 @@ public final class IsInf extends PrimitiveOp implements Operand { * @param x * @return a new instance of IsInf */ - public static IsInf create(Scope scope, Operand x) { + public static IsInf create(Scope scope, Operand x) { OperationBuilder opBuilder = scope.env().opBuilder("IsInf", scope.makeOpName("IsInf")); opBuilder.addInput(x.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); @@ -51,16 +53,16 @@ public static IsInf create(Scope scope, Operand x) { /** */ - public Output y() { + public Output y() { return y; } @Override - public Output asOutput() { + public Output asOutput() { return y; } - private Output y; + private Output y; private IsInf(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/IsNan.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/IsNan.java index baff4c9f3a9..b513ca8dad7 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/IsNan.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/IsNan.java @@ -24,6 +24,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TBool; +import org.tensorflow.types.family.TNumber; /** * Returns which elements of x are NaN. @@ -33,7 +35,7 @@ * @end_compatibility */ @Operator(group = "math") -public final class IsNan extends PrimitiveOp implements Operand { +public final class IsNan extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new IsNan operation. @@ -42,7 +44,7 @@ public final class IsNan extends PrimitiveOp implements Operand { * @param x * @return a new instance of IsNan */ - public static IsNan create(Scope scope, Operand x) { + public static IsNan create(Scope scope, Operand x) { OperationBuilder opBuilder = scope.env().opBuilder("IsNan", scope.makeOpName("IsNan")); opBuilder.addInput(x.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); @@ -51,16 +53,16 @@ public static IsNan create(Scope scope, Operand x) { /** */ - public Output y() { + public Output y() { return y; } @Override - public Output asOutput() { + public Output asOutput() { return y; } - private Output y; + private Output y; private IsNan(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Less.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Less.java index 32a65d8a274..967ade9eced 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Less.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Less.java @@ -24,6 +24,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TBool; +import org.tensorflow.types.family.TNumber; /** * Returns the truth value of (x < y) element-wise. @@ -32,7 +34,7 @@ * [here](http://docs.scipy.org/doc/numpy/user/basics.broadcasting.html) */ @Operator(group = "math") -public final class Less extends PrimitiveOp implements Operand { +public final class Less extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new Less operation. @@ -42,7 +44,7 @@ public final class Less extends PrimitiveOp implements Operand { * @param y * @return a new instance of Less */ - public static Less create(Scope scope, Operand x, Operand y) { + public static Less create(Scope scope, Operand x, Operand y) { OperationBuilder opBuilder = scope.env().opBuilder("Less", scope.makeOpName("Less")); opBuilder.addInput(x.asOutput()); opBuilder.addInput(y.asOutput()); @@ -52,16 +54,16 @@ public static Less create(Scope scope, Operand x, Operand< /** */ - public Output z() { + public Output z() { return z; } @Override - public Output asOutput() { + public Output asOutput() { return z; } - private Output z; + private Output z; private Less(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/LessEqual.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/LessEqual.java index 5d99ff74b7e..934b5449535 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/LessEqual.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/LessEqual.java @@ -24,6 +24,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TBool; +import org.tensorflow.types.family.TNumber; /** * Returns the truth value of (x <= y) element-wise. @@ -32,7 +34,7 @@ * [here](http://docs.scipy.org/doc/numpy/user/basics.broadcasting.html) */ @Operator(group = "math") -public final class LessEqual extends PrimitiveOp implements Operand { +public final class LessEqual extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new LessEqual operation. @@ -42,7 +44,7 @@ public final class LessEqual extends PrimitiveOp implements Operand { * @param y * @return a new instance of LessEqual */ - public static LessEqual create(Scope scope, Operand x, Operand y) { + public static LessEqual create(Scope scope, Operand x, Operand y) { OperationBuilder opBuilder = scope.env().opBuilder("LessEqual", scope.makeOpName("LessEqual")); opBuilder.addInput(x.asOutput()); opBuilder.addInput(y.asOutput()); @@ -52,16 +54,16 @@ public static LessEqual create(Scope scope, Operand x, Ope /** */ - public Output z() { + public Output z() { return z; } @Override - public Output asOutput() { + public Output asOutput() { return z; } - private Output z; + private Output z; private LessEqual(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Lgamma.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Lgamma.java index 4d752eb5cbf..19a6b60f51c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Lgamma.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Lgamma.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Computes the log of the absolute value of `Gamma(x)` element-wise. @@ -31,7 +32,7 @@ * @param data type for {@code y()} output */ @Operator(group = "math") -public final class Lgamma extends PrimitiveOp implements Operand { +public final class Lgamma extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new Lgamma operation. @@ -40,7 +41,7 @@ public final class Lgamma extends PrimitiveOp implements Opera * @param x * @return a new instance of Lgamma */ - public static Lgamma create(Scope scope, Operand x) { + public static Lgamma create(Scope scope, Operand x) { OperationBuilder opBuilder = scope.env().opBuilder("Lgamma", scope.makeOpName("Lgamma")); opBuilder.addInput(x.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/LogicalAnd.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/LogicalAnd.java index e51201aa7e1..b2c81707b80 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/LogicalAnd.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/LogicalAnd.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TBool; /** * Returns the truth value of x AND y element-wise. @@ -32,7 +33,7 @@ * [here](http://docs.scipy.org/doc/numpy/user/basics.broadcasting.html) */ @Operator(group = "math") -public final class LogicalAnd extends PrimitiveOp implements Operand { +public final class LogicalAnd extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new LogicalAnd operation. @@ -42,7 +43,7 @@ public final class LogicalAnd extends PrimitiveOp implements Operand { * @param y * @return a new instance of LogicalAnd */ - public static LogicalAnd create(Scope scope, Operand x, Operand y) { + public static LogicalAnd create(Scope scope, Operand x, Operand y) { OperationBuilder opBuilder = scope.env().opBuilder("LogicalAnd", scope.makeOpName("LogicalAnd")); opBuilder.addInput(x.asOutput()); opBuilder.addInput(y.asOutput()); @@ -52,16 +53,16 @@ public static LogicalAnd create(Scope scope, Operand x, Operand z() { + public Output z() { return z; } @Override - public Output asOutput() { + public Output asOutput() { return z; } - private Output z; + private Output z; private LogicalAnd(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/LogicalNot.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/LogicalNot.java index 46db569f9bf..23aab32710a 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/LogicalNot.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/LogicalNot.java @@ -24,12 +24,13 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TBool; /** * Returns the truth value of NOT x element-wise. */ @Operator(group = "math") -public final class LogicalNot extends PrimitiveOp implements Operand { +public final class LogicalNot extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new LogicalNot operation. @@ -38,7 +39,7 @@ public final class LogicalNot extends PrimitiveOp implements Operand { * @param x * @return a new instance of LogicalNot */ - public static LogicalNot create(Scope scope, Operand x) { + public static LogicalNot create(Scope scope, Operand x) { OperationBuilder opBuilder = scope.env().opBuilder("LogicalNot", scope.makeOpName("LogicalNot")); opBuilder.addInput(x.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); @@ -47,16 +48,16 @@ public static LogicalNot create(Scope scope, Operand x) { /** */ - public Output y() { + public Output y() { return y; } @Override - public Output asOutput() { + public Output asOutput() { return y; } - private Output y; + private Output y; private LogicalNot(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/LogicalOr.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/LogicalOr.java index 39b0faca333..661202da56f 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/LogicalOr.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/LogicalOr.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TBool; /** * Returns the truth value of x OR y element-wise. @@ -32,7 +33,7 @@ * [here](http://docs.scipy.org/doc/numpy/user/basics.broadcasting.html) */ @Operator(group = "math") -public final class LogicalOr extends PrimitiveOp implements Operand { +public final class LogicalOr extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new LogicalOr operation. @@ -42,7 +43,7 @@ public final class LogicalOr extends PrimitiveOp implements Operand { * @param y * @return a new instance of LogicalOr */ - public static LogicalOr create(Scope scope, Operand x, Operand y) { + public static LogicalOr create(Scope scope, Operand x, Operand y) { OperationBuilder opBuilder = scope.env().opBuilder("LogicalOr", scope.makeOpName("LogicalOr")); opBuilder.addInput(x.asOutput()); opBuilder.addInput(y.asOutput()); @@ -52,16 +53,16 @@ public static LogicalOr create(Scope scope, Operand x, Operand /** */ - public Output z() { + public Output z() { return z; } @Override - public Output asOutput() { + public Output asOutput() { return z; } - private Output z; + private Output z; private LogicalOr(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Maximum.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Maximum.java index b2eb1cac94a..470a272f6b6 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Maximum.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Maximum.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Returns the max of x and y (i.e. x > y ? x : y) element-wise. @@ -34,7 +35,7 @@ * @param data type for {@code z()} output */ @Operator(group = "math") -public final class Maximum extends PrimitiveOp implements Operand { +public final class Maximum extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new Maximum operation. @@ -44,7 +45,7 @@ public final class Maximum extends PrimitiveOp implements Oper * @param y * @return a new instance of Maximum */ - public static Maximum create(Scope scope, Operand x, Operand y) { + public static Maximum create(Scope scope, Operand x, Operand y) { OperationBuilder opBuilder = scope.env().opBuilder("Maximum", scope.makeOpName("Maximum")); opBuilder.addInput(x.asOutput()); opBuilder.addInput(y.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Mean.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Mean.java index f35214a2e1b..e29e9d5ad05 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Mean.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Mean.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Computes the mean of elements across dimensions of a tensor. @@ -67,7 +68,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of Mean */ - public static Mean create(Scope scope, Operand input, Operand axis, Options... options) { + public static Mean create(Scope scope, Operand input, Operand axis, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("Mean", scope.makeOpName("Mean")); opBuilder.addInput(input.asOutput()); opBuilder.addInput(axis.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Minimum.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Minimum.java index f9ba8bf21fc..357dd68f31b 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Minimum.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Minimum.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Returns the min of x and y (i.e. x < y ? x : y) element-wise. @@ -34,7 +35,7 @@ * @param data type for {@code z()} output */ @Operator(group = "math") -public final class Minimum extends PrimitiveOp implements Operand { +public final class Minimum extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new Minimum operation. @@ -44,7 +45,7 @@ public final class Minimum extends PrimitiveOp implements Oper * @param y * @return a new instance of Minimum */ - public static Minimum create(Scope scope, Operand x, Operand y) { + public static Minimum create(Scope scope, Operand x, Operand y) { OperationBuilder opBuilder = scope.env().opBuilder("Minimum", scope.makeOpName("Minimum")); opBuilder.addInput(x.asOutput()); opBuilder.addInput(y.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Mod.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Mod.java index 0279abf745b..95b3d2e0c69 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Mod.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Mod.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Returns element-wise remainder of division. This emulates C semantics in that @@ -37,7 +38,7 @@ * @param data type for {@code z()} output */ @Operator(group = "math") -public final class Mod extends PrimitiveOp implements Operand { +public final class Mod extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new Mod operation. @@ -47,7 +48,7 @@ public final class Mod extends PrimitiveOp implements Operand< * @param y * @return a new instance of Mod */ - public static Mod create(Scope scope, Operand x, Operand y) { + public static Mod create(Scope scope, Operand x, Operand y) { OperationBuilder opBuilder = scope.env().opBuilder("Mod", scope.makeOpName("Mod")); opBuilder.addInput(x.asOutput()); opBuilder.addInput(y.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/NotEqual.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/NotEqual.java index a72ad63aea1..771b3e864b3 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/NotEqual.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/NotEqual.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TBool; /** * Returns the truth value of (x != y) element-wise. @@ -32,7 +33,7 @@ * [here](http://docs.scipy.org/doc/numpy/user/basics.broadcasting.html) */ @Operator(group = "math") -public final class NotEqual extends PrimitiveOp implements Operand { +public final class NotEqual extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.math.NotEqual} @@ -86,16 +87,16 @@ public static Options incompatibleShapeError(Boolean incompatibleShapeError) { /** */ - public Output z() { + public Output z() { return z; } @Override - public Output asOutput() { + public Output asOutput() { return z; } - private Output z; + private Output z; private NotEqual(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Polygamma.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Polygamma.java index f4d2001db96..92ad6e2106b 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Polygamma.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Polygamma.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Compute the polygamma function \\(\psi^{(n)}(x)\\). @@ -38,7 +39,7 @@ * @param data type for {@code z()} output */ @Operator(group = "math") -public final class Polygamma extends PrimitiveOp implements Operand { +public final class Polygamma extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new Polygamma operation. @@ -48,7 +49,7 @@ public final class Polygamma extends PrimitiveOp implements Op * @param x * @return a new instance of Polygamma */ - public static Polygamma create(Scope scope, Operand a, Operand x) { + public static Polygamma create(Scope scope, Operand a, Operand x) { OperationBuilder opBuilder = scope.env().opBuilder("Polygamma", scope.makeOpName("Polygamma")); opBuilder.addInput(a.asOutput()); opBuilder.addInput(x.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/PopulationCount.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/PopulationCount.java index 576caac778b..aced7d8aa16 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/PopulationCount.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/PopulationCount.java @@ -24,7 +24,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; -import org.tensorflow.types.UInt8; +import org.tensorflow.types.TUInt8; +import org.tensorflow.types.family.TNumber; /** * Computes element-wise population count (a.k.a. popcount, bitsum, bitcount). @@ -37,7 +38,7 @@ * 8- or 16-bit inputs and then aggregate the resulting counts. */ @Operator(group = "math") -public final class PopulationCount extends PrimitiveOp implements Operand { +public final class PopulationCount extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new PopulationCount operation. @@ -46,7 +47,7 @@ public final class PopulationCount extends PrimitiveOp implements Operand * @param x * @return a new instance of PopulationCount */ - public static PopulationCount create(Scope scope, Operand x) { + public static PopulationCount create(Scope scope, Operand x) { OperationBuilder opBuilder = scope.env().opBuilder("PopulationCount", scope.makeOpName("PopulationCount")); opBuilder.addInput(x.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); @@ -55,16 +56,16 @@ public static PopulationCount create(Scope scope, Operand /** */ - public Output y() { + public Output y() { return y; } @Override - public Output asOutput() { + public Output asOutput() { return y; } - private Output y; + private Output y; private PopulationCount(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/QuantizedAdd.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/QuantizedAdd.java index fb3d17e44f3..8435d03cdf4 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/QuantizedAdd.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/QuantizedAdd.java @@ -25,6 +25,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TFloat; /** * Returns x + y element-wise, working on quantized buffers. @@ -47,7 +48,7 @@ public final class QuantizedAdd extends PrimitiveOp { * @param Toutput * @return a new instance of QuantizedAdd */ - public static QuantizedAdd create(Scope scope, Operand x, Operand y, Operand minX, Operand maxX, Operand minY, Operand maxY, Class Toutput) { + public static QuantizedAdd create(Scope scope, Operand x, Operand y, Operand minX, Operand maxX, Operand minY, Operand maxY, DataType Toutput) { OperationBuilder opBuilder = scope.env().opBuilder("QuantizedAdd", scope.makeOpName("QuantizedAdd")); opBuilder.addInput(x.asOutput()); opBuilder.addInput(y.asOutput()); @@ -56,7 +57,7 @@ public static QuantizedAdd create(Scope scope, Operand x, Operan opBuilder.addInput(minY.asOutput()); opBuilder.addInput(maxY.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); - opBuilder.setAttr("Toutput", DataType.fromClass(Toutput)); + opBuilder.setAttr("Toutput", Toutput); return new QuantizedAdd(opBuilder.build()); } @@ -69,7 +70,7 @@ public Output z() { /** * The float value that the lowest quantized output value represents. */ - public Output minZ() { + public Output minZ() { return minZ; } @@ -79,13 +80,13 @@ public Output minZ() { * NOTE: `math.QuantizedAdd` supports limited forms of broadcasting. More about * broadcasting [here](http://docs.scipy.org/doc/numpy/user/basics.broadcasting.html) */ - public Output maxZ() { + public Output maxZ() { return maxZ; } private Output z; - private Output minZ; - private Output maxZ; + private Output minZ; + private Output maxZ; private QuantizedAdd(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/QuantizedMul.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/QuantizedMul.java index 8a8ab0734d0..fa96af18391 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/QuantizedMul.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/QuantizedMul.java @@ -25,6 +25,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TFloat; /** * Returns x * y element-wise, working on quantized buffers. @@ -47,7 +48,7 @@ public final class QuantizedMul extends PrimitiveOp { * @param Toutput * @return a new instance of QuantizedMul */ - public static QuantizedMul create(Scope scope, Operand x, Operand y, Operand minX, Operand maxX, Operand minY, Operand maxY, Class Toutput) { + public static QuantizedMul create(Scope scope, Operand x, Operand y, Operand minX, Operand maxX, Operand minY, Operand maxY, DataType Toutput) { OperationBuilder opBuilder = scope.env().opBuilder("QuantizedMul", scope.makeOpName("QuantizedMul")); opBuilder.addInput(x.asOutput()); opBuilder.addInput(y.asOutput()); @@ -56,7 +57,7 @@ public static QuantizedMul create(Scope scope, Operand x, Operan opBuilder.addInput(minY.asOutput()); opBuilder.addInput(maxY.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); - opBuilder.setAttr("Toutput", DataType.fromClass(Toutput)); + opBuilder.setAttr("Toutput", Toutput); return new QuantizedMul(opBuilder.build()); } @@ -69,7 +70,7 @@ public Output z() { /** * The float value that the lowest quantized output value represents. */ - public Output minZ() { + public Output minZ() { return minZ; } @@ -79,13 +80,13 @@ public Output minZ() { * NOTE: `math.QuantizedMul` supports limited forms of broadcasting. More about * broadcasting [here](http://docs.scipy.org/doc/numpy/user/basics.broadcasting.html) */ - public Output maxZ() { + public Output maxZ() { return maxZ; } private Output z; - private Output minZ; - private Output maxZ; + private Output minZ; + private Output maxZ; private QuantizedMul(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Real.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Real.java index 1b8b79f1bd2..08d9ce0428b 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Real.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Real.java @@ -25,6 +25,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TFloat; +import org.tensorflow.types.family.TNumber; /** * Returns the real part of a complex number. @@ -44,7 +46,7 @@ * @param data type for {@code output()} output */ @Operator(group = "math") -public final class Real extends PrimitiveOp implements Operand { +public final class Real extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new Real operation. @@ -54,11 +56,11 @@ public final class Real extends PrimitiveOp implements Operand * @param Tout * @return a new instance of Real */ - public static Real create(Scope scope, Operand input, Class Tout) { + public static Real create(Scope scope, Operand input, DataType Tout) { OperationBuilder opBuilder = scope.env().opBuilder("Real", scope.makeOpName("Real")); opBuilder.addInput(input.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); - opBuilder.setAttr("Tout", DataType.fromClass(Tout)); + opBuilder.setAttr("Tout", Tout); return new Real(opBuilder.build()); } @@ -69,8 +71,8 @@ public static Real create(Scope scope, Operand input * @param input * @return a new instance of Real */ - public static Real create(Scope scope, Operand input) { - return create(scope, input, Float.class); + public static Real create(Scope scope, Operand input) { + return create(scope, input, TFloat.DTYPE); } /** diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Rint.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Rint.java index 3449a6e8418..1b38825010c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Rint.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Rint.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Returns element-wise integer closest to x. @@ -41,7 +42,7 @@ * @param data type for {@code y()} output */ @Operator(group = "math") -public final class Rint extends PrimitiveOp implements Operand { +public final class Rint extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new Rint operation. @@ -50,7 +51,7 @@ public final class Rint extends PrimitiveOp implements Operand * @param x * @return a new instance of Rint */ - public static Rint create(Scope scope, Operand x) { + public static Rint create(Scope scope, Operand x) { OperationBuilder opBuilder = scope.env().opBuilder("Rint", scope.makeOpName("Rint")); opBuilder.addInput(x.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/SegmentMax.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/SegmentMax.java index 3b54dc4bf0f..6fa0973e68c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/SegmentMax.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/SegmentMax.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Computes the maximum along segments of a tensor. @@ -54,7 +55,7 @@ * @param data type for {@code output()} output */ @Operator(group = "math") -public final class SegmentMax extends PrimitiveOp implements Operand { +public final class SegmentMax extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new SegmentMax operation. @@ -65,7 +66,7 @@ public final class SegmentMax extends PrimitiveOp implements O * first dimension. Values should be sorted and can be repeated. * @return a new instance of SegmentMax */ - public static SegmentMax create(Scope scope, Operand data, Operand segmentIds) { + public static SegmentMax create(Scope scope, Operand data, Operand segmentIds) { OperationBuilder opBuilder = scope.env().opBuilder("SegmentMax", scope.makeOpName("SegmentMax")); opBuilder.addInput(data.asOutput()); opBuilder.addInput(segmentIds.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/SegmentMean.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/SegmentMean.java index cb1e0cf3161..3c5d2825d33 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/SegmentMean.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/SegmentMean.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Computes the mean along segments of a tensor. @@ -66,7 +67,7 @@ public final class SegmentMean extends PrimitiveOp implements Operand { * first dimension. Values should be sorted and can be repeated. * @return a new instance of SegmentMean */ - public static SegmentMean create(Scope scope, Operand data, Operand segmentIds) { + public static SegmentMean create(Scope scope, Operand data, Operand segmentIds) { OperationBuilder opBuilder = scope.env().opBuilder("SegmentMean", scope.makeOpName("SegmentMean")); opBuilder.addInput(data.asOutput()); opBuilder.addInput(segmentIds.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/SegmentMin.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/SegmentMin.java index 188bb13d1b3..a9e81846adb 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/SegmentMin.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/SegmentMin.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Computes the minimum along segments of a tensor. @@ -54,7 +55,7 @@ * @param data type for {@code output()} output */ @Operator(group = "math") -public final class SegmentMin extends PrimitiveOp implements Operand { +public final class SegmentMin extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new SegmentMin operation. @@ -65,7 +66,7 @@ public final class SegmentMin extends PrimitiveOp implements O * first dimension. Values should be sorted and can be repeated. * @return a new instance of SegmentMin */ - public static SegmentMin create(Scope scope, Operand data, Operand segmentIds) { + public static SegmentMin create(Scope scope, Operand data, Operand segmentIds) { OperationBuilder opBuilder = scope.env().opBuilder("SegmentMin", scope.makeOpName("SegmentMin")); opBuilder.addInput(data.asOutput()); opBuilder.addInput(segmentIds.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/SegmentProd.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/SegmentProd.java index 4ca79ac843a..67f32f4861e 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/SegmentProd.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/SegmentProd.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Computes the product along segments of a tensor. @@ -65,7 +66,7 @@ public final class SegmentProd extends PrimitiveOp implements Operand { * first dimension. Values should be sorted and can be repeated. * @return a new instance of SegmentProd */ - public static SegmentProd create(Scope scope, Operand data, Operand segmentIds) { + public static SegmentProd create(Scope scope, Operand data, Operand segmentIds) { OperationBuilder opBuilder = scope.env().opBuilder("SegmentProd", scope.makeOpName("SegmentProd")); opBuilder.addInput(data.asOutput()); opBuilder.addInput(segmentIds.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/SegmentSum.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/SegmentSum.java index f9c71790e5f..ab5fdc8a87b 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/SegmentSum.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/SegmentSum.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Computes the sum along segments of a tensor. @@ -65,7 +66,7 @@ public final class SegmentSum extends PrimitiveOp implements Operand { * first dimension. Values should be sorted and can be repeated. * @return a new instance of SegmentSum */ - public static SegmentSum create(Scope scope, Operand data, Operand segmentIds) { + public static SegmentSum create(Scope scope, Operand data, Operand segmentIds) { OperationBuilder opBuilder = scope.env().opBuilder("SegmentSum", scope.makeOpName("SegmentSum")); opBuilder.addInput(data.asOutput()); opBuilder.addInput(segmentIds.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Softplus.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Softplus.java index dbaba42df8b..539af0e187e 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Softplus.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Softplus.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Computes softplus: `log(exp(features) + 1)`. @@ -31,7 +32,7 @@ * @param data type for {@code activations()} output */ @Operator(group = "math") -public final class Softplus extends PrimitiveOp implements Operand { +public final class Softplus extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new Softplus operation. @@ -40,7 +41,7 @@ public final class Softplus extends PrimitiveOp implements Ope * @param features * @return a new instance of Softplus */ - public static Softplus create(Scope scope, Operand features) { + public static Softplus create(Scope scope, Operand features) { OperationBuilder opBuilder = scope.env().opBuilder("Softplus", scope.makeOpName("Softplus")); opBuilder.addInput(features.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/SoftplusGrad.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/SoftplusGrad.java index 675aad3567b..e46e1a8e799 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/SoftplusGrad.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/SoftplusGrad.java @@ -23,13 +23,14 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.family.TNumber; /** * Computes softplus gradients for a softplus operation. * * @param data type for {@code backprops()} output */ -public final class SoftplusGrad extends PrimitiveOp implements Operand { +public final class SoftplusGrad extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new SoftplusGrad operation. @@ -39,7 +40,7 @@ public final class SoftplusGrad extends PrimitiveOp implements * @param features The features passed as input to the corresponding softplus operation. * @return a new instance of SoftplusGrad */ - public static SoftplusGrad create(Scope scope, Operand gradients, Operand features) { + public static SoftplusGrad create(Scope scope, Operand gradients, Operand features) { OperationBuilder opBuilder = scope.env().opBuilder("SoftplusGrad", scope.makeOpName("SoftplusGrad")); opBuilder.addInput(gradients.asOutput()); opBuilder.addInput(features.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/TruncateMod.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/TruncateMod.java index 54fbb2032f7..d310b974983 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/TruncateMod.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/TruncateMod.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Returns element-wise remainder of division. This emulates C semantics in that @@ -37,7 +38,7 @@ * @param data type for {@code z()} output */ @Operator(group = "math") -public final class TruncateMod extends PrimitiveOp implements Operand { +public final class TruncateMod extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new TruncateMod operation. @@ -47,7 +48,7 @@ public final class TruncateMod extends PrimitiveOp implements * @param y * @return a new instance of TruncateMod */ - public static TruncateMod create(Scope scope, Operand x, Operand y) { + public static TruncateMod create(Scope scope, Operand x, Operand y) { OperationBuilder opBuilder = scope.env().opBuilder("TruncateMod", scope.makeOpName("TruncateMod")); opBuilder.addInput(x.asOutput()); opBuilder.addInput(y.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/UnsortedSegmentMax.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/UnsortedSegmentMax.java index e4acd147ac1..019d58bb878 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/UnsortedSegmentMax.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/UnsortedSegmentMax.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Computes the maximum along segments of a tensor. @@ -62,7 +63,7 @@ * @param data type for {@code output()} output */ @Operator(group = "math") -public final class UnsortedSegmentMax extends PrimitiveOp implements Operand { +public final class UnsortedSegmentMax extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new UnsortedSegmentMax operation. @@ -73,7 +74,7 @@ public final class UnsortedSegmentMax extends PrimitiveOp impl * @param numSegments * @return a new instance of UnsortedSegmentMax */ - public static UnsortedSegmentMax create(Scope scope, Operand data, Operand segmentIds, Operand numSegments) { + public static UnsortedSegmentMax create(Scope scope, Operand data, Operand segmentIds, Operand numSegments) { OperationBuilder opBuilder = scope.env().opBuilder("UnsortedSegmentMax", scope.makeOpName("UnsortedSegmentMax")); opBuilder.addInput(data.asOutput()); opBuilder.addInput(segmentIds.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/UnsortedSegmentMin.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/UnsortedSegmentMin.java index a18a32b283d..4e5fbdacd7e 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/UnsortedSegmentMin.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/UnsortedSegmentMin.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Computes the minimum along segments of a tensor. @@ -56,7 +57,7 @@ * @param data type for {@code output()} output */ @Operator(group = "math") -public final class UnsortedSegmentMin extends PrimitiveOp implements Operand { +public final class UnsortedSegmentMin extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new UnsortedSegmentMin operation. @@ -67,7 +68,7 @@ public final class UnsortedSegmentMin extends PrimitiveOp impl * @param numSegments * @return a new instance of UnsortedSegmentMin */ - public static UnsortedSegmentMin create(Scope scope, Operand data, Operand segmentIds, Operand numSegments) { + public static UnsortedSegmentMin create(Scope scope, Operand data, Operand segmentIds, Operand numSegments) { OperationBuilder opBuilder = scope.env().opBuilder("UnsortedSegmentMin", scope.makeOpName("UnsortedSegmentMin")); opBuilder.addInput(data.asOutput()); opBuilder.addInput(segmentIds.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/UnsortedSegmentProd.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/UnsortedSegmentProd.java index 52d5bb3e0a3..cee8c3cc97f 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/UnsortedSegmentProd.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/UnsortedSegmentProd.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Computes the product along segments of a tensor. @@ -66,7 +67,7 @@ public final class UnsortedSegmentProd extends PrimitiveOp implements Operand * @param numSegments * @return a new instance of UnsortedSegmentProd */ - public static UnsortedSegmentProd create(Scope scope, Operand data, Operand segmentIds, Operand numSegments) { + public static UnsortedSegmentProd create(Scope scope, Operand data, Operand segmentIds, Operand numSegments) { OperationBuilder opBuilder = scope.env().opBuilder("UnsortedSegmentProd", scope.makeOpName("UnsortedSegmentProd")); opBuilder.addInput(data.asOutput()); opBuilder.addInput(segmentIds.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/UnsortedSegmentSum.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/UnsortedSegmentSum.java index 74a1bfe774c..458cd138e10 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/UnsortedSegmentSum.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/UnsortedSegmentSum.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Computes the sum along segments of a tensor. @@ -69,7 +70,7 @@ public final class UnsortedSegmentSum extends PrimitiveOp implements Operand< * @param numSegments * @return a new instance of UnsortedSegmentSum */ - public static UnsortedSegmentSum create(Scope scope, Operand data, Operand segmentIds, Operand numSegments) { + public static UnsortedSegmentSum create(Scope scope, Operand data, Operand segmentIds, Operand numSegments) { OperationBuilder opBuilder = scope.env().opBuilder("UnsortedSegmentSum", scope.makeOpName("UnsortedSegmentSum")); opBuilder.addInput(data.asOutput()); opBuilder.addInput(segmentIds.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Zeta.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Zeta.java index 37531d72504..ece63fbedb2 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Zeta.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Zeta.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Compute the Hurwitz zeta function \\(\zeta(x, q)\\). @@ -35,7 +36,7 @@ * @param data type for {@code z()} output */ @Operator(group = "math") -public final class Zeta extends PrimitiveOp implements Operand { +public final class Zeta extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new Zeta operation. @@ -45,7 +46,7 @@ public final class Zeta extends PrimitiveOp implements Operand * @param q * @return a new instance of Zeta */ - public static Zeta create(Scope scope, Operand x, Operand q) { + public static Zeta create(Scope scope, Operand x, Operand q) { OperationBuilder opBuilder = scope.env().opBuilder("Zeta", scope.makeOpName("Zeta")); opBuilder.addInput(x.asOutput()); opBuilder.addInput(q.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/AvgPool.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/AvgPool.java index b3c46193650..67fe42df1c8 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/AvgPool.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/AvgPool.java @@ -25,6 +25,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Performs average pooling on the input. @@ -35,7 +36,7 @@ * @param data type for {@code output()} output */ @Operator(group = "nn") -public final class AvgPool extends PrimitiveOp implements Operand { +public final class AvgPool extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.nn.AvgPool} @@ -71,7 +72,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of AvgPool */ - public static AvgPool create(Scope scope, Operand value, List ksize, List strides, String padding, Options... options) { + public static AvgPool create(Scope scope, Operand value, List ksize, List strides, String padding, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("AvgPool", scope.makeOpName("AvgPool")); opBuilder.addInput(value.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/AvgPool3d.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/AvgPool3d.java index e77ac2b2adf..586a02d4171 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/AvgPool3d.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/AvgPool3d.java @@ -25,6 +25,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Performs 3D average pooling on the input. @@ -32,7 +33,7 @@ * @param data type for {@code output()} output */ @Operator(group = "nn") -public final class AvgPool3d extends PrimitiveOp implements Operand { +public final class AvgPool3d extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.nn.AvgPool3d} @@ -70,7 +71,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of AvgPool3d */ - public static AvgPool3d create(Scope scope, Operand input, List ksize, List strides, String padding, Options... options) { + public static AvgPool3d create(Scope scope, Operand input, List ksize, List strides, String padding, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("AvgPool3D", scope.makeOpName("AvgPool3d")); opBuilder.addInput(input.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/AvgPool3dGrad.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/AvgPool3dGrad.java index 89e95f9963e..2ca8e2f3ada 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/AvgPool3dGrad.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/AvgPool3dGrad.java @@ -25,6 +25,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.family.TNumber; /** * Computes gradients of average pooling function. @@ -32,7 +34,7 @@ * @param data type for {@code output()} output */ @Operator(group = "nn") -public final class AvgPool3dGrad extends PrimitiveOp implements Operand { +public final class AvgPool3dGrad extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.nn.AvgPool3dGrad} @@ -71,7 +73,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of AvgPool3dGrad */ - public static AvgPool3dGrad create(Scope scope, Operand origInputShape, Operand grad, List ksize, List strides, String padding, Options... options) { + public static AvgPool3dGrad create(Scope scope, Operand origInputShape, Operand grad, List ksize, List strides, String padding, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("AvgPool3DGrad", scope.makeOpName("AvgPool3dGrad")); opBuilder.addInput(origInputShape.asOutput()); opBuilder.addInput(grad.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/AvgPoolGrad.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/AvgPoolGrad.java index e2d9bc5d359..26f82a4f03d 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/AvgPoolGrad.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/AvgPoolGrad.java @@ -24,13 +24,15 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.family.TNumber; /** * Computes gradients of the average pooling function. * * @param data type for {@code output()} output */ -public final class AvgPoolGrad extends PrimitiveOp implements Operand { +public final class AvgPoolGrad extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.nn.AvgPoolGrad} @@ -68,7 +70,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of AvgPoolGrad */ - public static AvgPoolGrad create(Scope scope, Operand origInputShape, Operand grad, List ksize, List strides, String padding, Options... options) { + public static AvgPoolGrad create(Scope scope, Operand origInputShape, Operand grad, List ksize, List strides, String padding, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("AvgPoolGrad", scope.makeOpName("AvgPoolGrad")); opBuilder.addInput(origInputShape.asOutput()); opBuilder.addInput(grad.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/ComputeAccidentalHits.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/ComputeAccidentalHits.java index 7023882c3c1..5cd96977f17 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/ComputeAccidentalHits.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/ComputeAccidentalHits.java @@ -24,6 +24,9 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TFloat; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.TInt64; /** * Computes the ids of the positions in sampled_candidates that match true_labels. @@ -76,7 +79,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of ComputeAccidentalHits */ - public static ComputeAccidentalHits create(Scope scope, Operand trueClasses, Operand sampledCandidates, Long numTrue, Options... options) { + public static ComputeAccidentalHits create(Scope scope, Operand trueClasses, Operand sampledCandidates, Long numTrue, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("ComputeAccidentalHits", scope.makeOpName("ComputeAccidentalHits")); opBuilder.addInput(trueClasses.asOutput()); opBuilder.addInput(sampledCandidates.asOutput()); @@ -114,7 +117,7 @@ public static Options seed2(Long seed2) { /** * A vector of indices corresponding to rows of true_candidates. */ - public Output indices() { + public Output indices() { return indices; } @@ -122,7 +125,7 @@ public Output indices() { * A vector of IDs of positions in sampled_candidates that match a true_label * for the row with the corresponding index in indices. */ - public Output ids() { + public Output ids() { return ids; } @@ -130,13 +133,13 @@ public Output ids() { * A vector of the same length as indices and ids, in which each element * is -FLOAT_MAX. */ - public Output weights() { + public Output weights() { return weights; } - private Output indices; - private Output ids; - private Output weights; + private Output indices; + private Output ids; + private Output weights; private ComputeAccidentalHits(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Conv2d.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Conv2d.java index 01174a742a2..83fd2c5cb15 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Conv2d.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Conv2d.java @@ -25,6 +25,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Computes a 2-D convolution given 4-D `input` and `filter` tensors. @@ -54,7 +55,7 @@ * @param data type for {@code output()} output */ @Operator(group = "nn") -public final class Conv2d extends PrimitiveOp implements Operand { +public final class Conv2d extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.nn.Conv2d} @@ -128,7 +129,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of Conv2d */ - public static Conv2d create(Scope scope, Operand input, Operand filter, List strides, String padding, Options... options) { + public static Conv2d create(Scope scope, Operand input, Operand filter, List strides, String padding, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("Conv2D", scope.makeOpName("Conv2d")); opBuilder.addInput(input.asOutput()); opBuilder.addInput(filter.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Conv2dBackpropFilter.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Conv2dBackpropFilter.java index b7f34c9014e..f19e3207911 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Conv2dBackpropFilter.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Conv2dBackpropFilter.java @@ -25,6 +25,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.family.TNumber; /** * Computes the gradients of convolution with respect to the filter. @@ -32,7 +34,7 @@ * @param data type for {@code output()} output */ @Operator(group = "nn") -public final class Conv2dBackpropFilter extends PrimitiveOp implements Operand { +public final class Conv2dBackpropFilter extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.nn.Conv2dBackpropFilter} @@ -108,7 +110,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of Conv2dBackpropFilter */ - public static Conv2dBackpropFilter create(Scope scope, Operand input, Operand filterSizes, Operand outBackprop, List strides, String padding, Options... options) { + public static Conv2dBackpropFilter create(Scope scope, Operand input, Operand filterSizes, Operand outBackprop, List strides, String padding, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("Conv2DBackpropFilter", scope.makeOpName("Conv2dBackpropFilter")); opBuilder.addInput(input.asOutput()); opBuilder.addInput(filterSizes.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Conv2dBackpropInput.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Conv2dBackpropInput.java index 8b1bf33b786..d3ff117e4cb 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Conv2dBackpropInput.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Conv2dBackpropInput.java @@ -25,6 +25,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.family.TNumber; /** * Computes the gradients of convolution with respect to the input. @@ -32,7 +34,7 @@ * @param data type for {@code output()} output */ @Operator(group = "nn") -public final class Conv2dBackpropInput extends PrimitiveOp implements Operand { +public final class Conv2dBackpropInput extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.nn.Conv2dBackpropInput} @@ -108,7 +110,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of Conv2dBackpropInput */ - public static Conv2dBackpropInput create(Scope scope, Operand inputSizes, Operand filter, Operand outBackprop, List strides, String padding, Options... options) { + public static Conv2dBackpropInput create(Scope scope, Operand inputSizes, Operand filter, Operand outBackprop, List strides, String padding, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("Conv2DBackpropInput", scope.makeOpName("Conv2dBackpropInput")); opBuilder.addInput(inputSizes.asOutput()); opBuilder.addInput(filter.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Conv3d.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Conv3d.java index ae258baa8cb..0c5059d12f6 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Conv3d.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Conv3d.java @@ -25,6 +25,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Computes a 3-D convolution given 5-D `input` and `filter` tensors. @@ -38,7 +39,7 @@ * @param data type for {@code output()} output */ @Operator(group = "nn") -public final class Conv3d extends PrimitiveOp implements Operand { +public final class Conv3d extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.nn.Conv3d} @@ -89,7 +90,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of Conv3d */ - public static Conv3d create(Scope scope, Operand input, Operand filter, List strides, String padding, Options... options) { + public static Conv3d create(Scope scope, Operand input, Operand filter, List strides, String padding, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("Conv3D", scope.makeOpName("Conv3d")); opBuilder.addInput(input.asOutput()); opBuilder.addInput(filter.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Conv3dBackpropFilter.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Conv3dBackpropFilter.java index 08a13e1f0bd..7e773f2cd93 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Conv3dBackpropFilter.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Conv3dBackpropFilter.java @@ -25,6 +25,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.family.TNumber; /** * Computes the gradients of 3-D convolution with respect to the filter. @@ -32,7 +34,7 @@ * @param data type for {@code output()} output */ @Operator(group = "nn") -public final class Conv3dBackpropFilter extends PrimitiveOp implements Operand { +public final class Conv3dBackpropFilter extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.nn.Conv3dBackpropFilter} @@ -87,7 +89,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of Conv3dBackpropFilter */ - public static Conv3dBackpropFilter create(Scope scope, Operand input, Operand filterSizes, Operand outBackprop, List strides, String padding, Options... options) { + public static Conv3dBackpropFilter create(Scope scope, Operand input, Operand filterSizes, Operand outBackprop, List strides, String padding, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("Conv3DBackpropFilterV2", scope.makeOpName("Conv3dBackpropFilter")); opBuilder.addInput(input.asOutput()); opBuilder.addInput(filterSizes.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Conv3dBackpropInput.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Conv3dBackpropInput.java index 2d1da92eb6b..fd58b5eaf1b 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Conv3dBackpropInput.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Conv3dBackpropInput.java @@ -25,6 +25,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Computes the gradients of 3-D convolution with respect to the input. @@ -32,7 +33,7 @@ * @param data type for {@code output()} output */ @Operator(group = "nn") -public final class Conv3dBackpropInput extends PrimitiveOp implements Operand { +public final class Conv3dBackpropInput extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.nn.Conv3dBackpropInput} @@ -87,7 +88,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of Conv3dBackpropInput */ - public static Conv3dBackpropInput create(Scope scope, Operand inputSizes, Operand filter, Operand outBackprop, List strides, String padding, Options... options) { + public static Conv3dBackpropInput create(Scope scope, Operand inputSizes, Operand filter, Operand outBackprop, List strides, String padding, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("Conv3DBackpropInputV2", scope.makeOpName("Conv3dBackpropInput")); opBuilder.addInput(inputSizes.asOutput()); opBuilder.addInput(filter.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/CtcBeamSearchDecoder.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/CtcBeamSearchDecoder.java index 2f29f2c7f2d..e252d26be69 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/CtcBeamSearchDecoder.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/CtcBeamSearchDecoder.java @@ -26,6 +26,9 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TFloat; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.TInt64; /** * Performs beam search decoding on the logits given in input. @@ -69,7 +72,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of CtcBeamSearchDecoder */ - public static CtcBeamSearchDecoder create(Scope scope, Operand inputs, Operand sequenceLength, Long beamWidth, Long topPaths, Options... options) { + public static CtcBeamSearchDecoder create(Scope scope, Operand inputs, Operand sequenceLength, Long beamWidth, Long topPaths, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("CTCBeamSearchDecoder", scope.makeOpName("CtcBeamSearchDecoder")); opBuilder.addInput(inputs.asOutput()); opBuilder.addInput(sequenceLength.asOutput()); @@ -98,7 +101,7 @@ public static Options mergeRepeated(Boolean mergeRepeated) { * size `(total_decoded_outputs[j] x 2)`, has indices of a * `SparseTensor`. The rows store: [batch, time]. */ - public List> decodedIndices() { + public List> decodedIndices() { return decodedIndices; } @@ -107,7 +110,7 @@ public List> decodedIndices() { * size `(length total_decoded_outputs[j])`, has the values of a * `SparseTensor`. The vector stores the decoded classes for beam j. */ - public List> decodedValues() { + public List> decodedValues() { return decodedValues; } @@ -116,7 +119,7 @@ public List> decodedValues() { * size `(2)`, stores the shape of the decoded `SparseTensor[j]`. * Its values are: `[batch_size, max_decoded_length[j]]`. */ - public List> decodedShape() { + public List> decodedShape() { return decodedShape; } @@ -124,27 +127,27 @@ public List> decodedShape() { * A matrix, shaped: `(batch_size x top_paths)`. The * sequence log-probabilities. */ - public Output logProbability() { + public Output logProbability() { return logProbability; } - private List> decodedIndices; - private List> decodedValues; - private List> decodedShape; - private Output logProbability; + private List> decodedIndices; + private List> decodedValues; + private List> decodedShape; + private Output logProbability; @SuppressWarnings("unchecked") private CtcBeamSearchDecoder(Operation operation) { super(operation); int outputIdx = 0; int decodedIndicesLength = operation.outputListLength("decoded_indices"); - decodedIndices = Arrays.asList((Output[])operation.outputList(outputIdx, decodedIndicesLength)); + decodedIndices = Arrays.asList((Output[])operation.outputList(outputIdx, decodedIndicesLength)); outputIdx += decodedIndicesLength; int decodedValuesLength = operation.outputListLength("decoded_values"); - decodedValues = Arrays.asList((Output[])operation.outputList(outputIdx, decodedValuesLength)); + decodedValues = Arrays.asList((Output[])operation.outputList(outputIdx, decodedValuesLength)); outputIdx += decodedValuesLength; int decodedShapeLength = operation.outputListLength("decoded_shape"); - decodedShape = Arrays.asList((Output[])operation.outputList(outputIdx, decodedShapeLength)); + decodedShape = Arrays.asList((Output[])operation.outputList(outputIdx, decodedShapeLength)); outputIdx += decodedShapeLength; logProbability = operation.output(outputIdx++); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/CtcGreedyDecoder.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/CtcGreedyDecoder.java index 95de2b91e62..3f57337a300 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/CtcGreedyDecoder.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/CtcGreedyDecoder.java @@ -24,6 +24,9 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TFloat; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.TInt64; /** * Performs greedy decoding on the logits given in inputs. @@ -69,7 +72,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of CtcGreedyDecoder */ - public static CtcGreedyDecoder create(Scope scope, Operand inputs, Operand sequenceLength, Options... options) { + public static CtcGreedyDecoder create(Scope scope, Operand inputs, Operand sequenceLength, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("CTCGreedyDecoder", scope.makeOpName("CtcGreedyDecoder")); opBuilder.addInput(inputs.asOutput()); opBuilder.addInput(sequenceLength.asOutput()); @@ -95,7 +98,7 @@ public static Options mergeRepeated(Boolean mergeRepeated) { * Indices matrix, size `(total_decoded_outputs x 2)`, * of a `SparseTensor`. The rows store: [batch, time]. */ - public Output decodedIndices() { + public Output decodedIndices() { return decodedIndices; } @@ -103,7 +106,7 @@ public Output decodedIndices() { * Values vector, size: `(total_decoded_outputs)`, * of a `SparseTensor`. The vector stores the decoded classes. */ - public Output decodedValues() { + public Output decodedValues() { return decodedValues; } @@ -111,7 +114,7 @@ public Output decodedValues() { * Shape vector, size `(2)`, of the decoded SparseTensor. * Values are: `[batch_size, max_decoded_length]`. */ - public Output decodedShape() { + public Output decodedShape() { return decodedShape; } @@ -119,14 +122,14 @@ public Output decodedShape() { * Matrix, size `(batch_size x 1)`, containing sequence * log-probabilities. */ - public Output logProbability() { + public Output logProbability() { return logProbability; } - private Output decodedIndices; - private Output decodedValues; - private Output decodedShape; - private Output logProbability; + private Output decodedIndices; + private Output decodedValues; + private Output decodedShape; + private Output logProbability; private CtcGreedyDecoder(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/CtcLoss.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/CtcLoss.java index 0b9d0a1c37b..17a9b5f929d 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/CtcLoss.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/CtcLoss.java @@ -24,6 +24,9 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TFloat; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.TInt64; /** * Calculates the CTC Loss (log probability) for each batch entry. Also calculates @@ -89,7 +92,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of CtcLoss */ - public static CtcLoss create(Scope scope, Operand inputs, Operand labelsIndices, Operand labelsValues, Operand sequenceLength, Options... options) { + public static CtcLoss create(Scope scope, Operand inputs, Operand labelsIndices, Operand labelsValues, Operand sequenceLength, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("CTCLoss", scope.makeOpName("CtcLoss")); opBuilder.addInput(inputs.asOutput()); opBuilder.addInput(labelsIndices.asOutput()); @@ -141,7 +144,7 @@ public static Options ignoreLongerOutputsThanInputs(Boolean ignoreLongerOutputsT /** * A vector (batch) containing log-probabilities. */ - public Output loss() { + public Output loss() { return loss; } @@ -149,12 +152,12 @@ public Output loss() { * The gradient of `loss`. 3-D, shape: * `(max_time x batch_size x num_classes)`. */ - public Output gradient() { + public Output gradient() { return gradient; } - private Output loss; - private Output gradient; + private Output loss; + private Output gradient; private CtcLoss(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/CudnnRnn.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/CudnnRnn.java index 6d58696078a..ead8b9254db 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/CudnnRnn.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/CudnnRnn.java @@ -23,6 +23,7 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.family.TNumber; /** * A RNN backed by cuDNN. @@ -63,7 +64,7 @@ * * @param data type for {@code output()} output */ -public final class CudnnRnn extends PrimitiveOp { +public final class CudnnRnn extends PrimitiveOp { /** * Optional attributes for {@link org.tensorflow.op.nn.CudnnRnn} @@ -149,7 +150,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of CudnnRnn */ - public static CudnnRnn create(Scope scope, Operand input, Operand inputH, Operand inputC, Operand params, Options... options) { + public static CudnnRnn create(Scope scope, Operand input, Operand inputH, Operand inputC, Operand params, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("CudnnRNNV2", scope.makeOpName("CudnnRnn")); opBuilder.addInput(input.asOutput()); opBuilder.addInput(inputH.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/CudnnRnnBackprop.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/CudnnRnnBackprop.java index 2be481864d9..8957d2ccd50 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/CudnnRnnBackprop.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/CudnnRnnBackprop.java @@ -23,6 +23,7 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.family.TNumber; /** * Backprop step of CudnnRNN. @@ -72,7 +73,7 @@ * * @param data type for {@code inputBackprop()} output */ -public final class CudnnRnnBackprop extends PrimitiveOp { +public final class CudnnRnnBackprop extends PrimitiveOp { /** * Optional attributes for {@link org.tensorflow.op.nn.CudnnRnnBackprop} @@ -157,7 +158,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of CudnnRnnBackprop */ - public static CudnnRnnBackprop create(Scope scope, Operand input, Operand inputH, Operand inputC, Operand params, Operand output, Operand outputH, Operand outputC, Operand outputBackprop, Operand outputHBackprop, Operand outputCBackprop, Operand reserveSpace, Operand hostReserved, Options... options) { + public static CudnnRnnBackprop create(Scope scope, Operand input, Operand inputH, Operand inputC, Operand params, Operand output, Operand outputH, Operand outputC, Operand outputBackprop, Operand outputHBackprop, Operand outputCBackprop, Operand reserveSpace, Operand hostReserved, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("CudnnRNNBackpropV2", scope.makeOpName("CudnnRnnBackprop")); opBuilder.addInput(input.asOutput()); opBuilder.addInput(inputH.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/CudnnRnnCanonicalToParams.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/CudnnRnnCanonicalToParams.java index 65343be704e..ec3a46d11b4 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/CudnnRnnCanonicalToParams.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/CudnnRnnCanonicalToParams.java @@ -25,6 +25,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.family.TNumber; /** * Converts CudnnRNN params from canonical form to usable form. @@ -62,7 +64,7 @@ * @param data type for {@code params()} output */ @Operator(group = "nn") -public final class CudnnRnnCanonicalToParams extends PrimitiveOp implements Operand { +public final class CudnnRnnCanonicalToParams extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.nn.CudnnRnnCanonicalToParams} @@ -140,7 +142,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of CudnnRnnCanonicalToParams */ - public static CudnnRnnCanonicalToParams create(Scope scope, Operand numLayers, Operand numUnits, Operand inputSize, Iterable> weights, Iterable> biases, Options... options) { + public static CudnnRnnCanonicalToParams create(Scope scope, Operand numLayers, Operand numUnits, Operand inputSize, Iterable> weights, Iterable> biases, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("CudnnRNNCanonicalToParams", scope.makeOpName("CudnnRnnCanonicalToParams")); opBuilder.addInput(numLayers.asOutput()); opBuilder.addInput(numUnits.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/CudnnRnnParamsSize.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/CudnnRnnParamsSize.java index 8c3d6b2e772..4c235d3516e 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/CudnnRnnParamsSize.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/CudnnRnnParamsSize.java @@ -25,6 +25,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.family.TNumber; /** * Computes size of weights that can be used by a Cudnn RNN model. @@ -54,7 +56,7 @@ * @param data type for {@code paramsSize()} output */ @Operator(group = "nn") -public final class CudnnRnnParamsSize extends PrimitiveOp implements Operand { +public final class CudnnRnnParamsSize extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.nn.CudnnRnnParamsSize} @@ -141,14 +143,14 @@ private Options() { * @param options carries optional attributes values * @return a new instance of CudnnRnnParamsSize */ - public static CudnnRnnParamsSize create(Scope scope, Operand numLayers, Operand numUnits, Operand inputSize, Class T, Class S, Options... options) { + public static CudnnRnnParamsSize create(Scope scope, Operand numLayers, Operand numUnits, Operand inputSize, DataType T, DataType S, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("CudnnRNNParamsSize", scope.makeOpName("CudnnRnnParamsSize")); opBuilder.addInput(numLayers.asOutput()); opBuilder.addInput(numUnits.asOutput()); opBuilder.addInput(inputSize.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); - opBuilder.setAttr("T", DataType.fromClass(T)); - opBuilder.setAttr("S", DataType.fromClass(S)); + opBuilder.setAttr("T", T); + opBuilder.setAttr("S", S); if (options != null) { for (Options opts : options) { if (opts.rnnMode != null) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/CudnnRnnParamsToCanonical.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/CudnnRnnParamsToCanonical.java index f5e3407813a..19703e4e8a4 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/CudnnRnnParamsToCanonical.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/CudnnRnnParamsToCanonical.java @@ -26,6 +26,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.family.TNumber; /** * Retrieves CudnnRNN params in canonical form. @@ -63,7 +65,7 @@ * @param data type for {@code weights()} output */ @Operator(group = "nn") -public final class CudnnRnnParamsToCanonical extends PrimitiveOp { +public final class CudnnRnnParamsToCanonical extends PrimitiveOp { /** * Optional attributes for {@link org.tensorflow.op.nn.CudnnRnnParamsToCanonical} @@ -141,7 +143,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of CudnnRnnParamsToCanonical */ - public static CudnnRnnParamsToCanonical create(Scope scope, Operand numLayers, Operand numUnits, Operand inputSize, Operand params, Long numParams, Options... options) { + public static CudnnRnnParamsToCanonical create(Scope scope, Operand numLayers, Operand numUnits, Operand inputSize, Operand params, Long numParams, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("CudnnRNNParamsToCanonical", scope.makeOpName("CudnnRnnParamsToCanonical")); opBuilder.addInput(numLayers.asOutput()); opBuilder.addInput(numUnits.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/DataFormatDimMap.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/DataFormatDimMap.java index 73fa180a1e1..99bd479bf91 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/DataFormatDimMap.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/DataFormatDimMap.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Returns the dimension index in the destination data format given the one in @@ -33,7 +34,7 @@ * @param data type for {@code y()} output */ @Operator(group = "nn") -public final class DataFormatDimMap extends PrimitiveOp implements Operand { +public final class DataFormatDimMap extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.nn.DataFormatDimMap} @@ -72,7 +73,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of DataFormatDimMap */ - public static DataFormatDimMap create(Scope scope, Operand x, Options... options) { + public static DataFormatDimMap create(Scope scope, Operand x, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("DataFormatDimMap", scope.makeOpName("DataFormatDimMap")); opBuilder.addInput(x.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/DataFormatVecPermute.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/DataFormatVecPermute.java index 2286c63bcf7..0c124f37b5a 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/DataFormatVecPermute.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/DataFormatVecPermute.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Returns the permuted vector/tensor in the destination data format given the @@ -33,7 +34,7 @@ * @param data type for {@code y()} output */ @Operator(group = "nn") -public final class DataFormatVecPermute extends PrimitiveOp implements Operand { +public final class DataFormatVecPermute extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.nn.DataFormatVecPermute} @@ -71,7 +72,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of DataFormatVecPermute */ - public static DataFormatVecPermute create(Scope scope, Operand x, Options... options) { + public static DataFormatVecPermute create(Scope scope, Operand x, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("DataFormatVecPermute", scope.makeOpName("DataFormatVecPermute")); opBuilder.addInput(x.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/DepthwiseConv2dNative.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/DepthwiseConv2dNative.java index 42bb7ee0ea7..56425a69ad5 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/DepthwiseConv2dNative.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/DepthwiseConv2dNative.java @@ -25,6 +25,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Computes a 2-D depthwise convolution given 4-D `input` and `filter` tensors. @@ -49,7 +50,7 @@ * @param data type for {@code output()} output */ @Operator(group = "nn") -public final class DepthwiseConv2dNative extends PrimitiveOp implements Operand { +public final class DepthwiseConv2dNative extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.nn.DepthwiseConv2dNative} @@ -99,7 +100,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of DepthwiseConv2dNative */ - public static DepthwiseConv2dNative create(Scope scope, Operand input, Operand filter, List strides, String padding, Options... options) { + public static DepthwiseConv2dNative create(Scope scope, Operand input, Operand filter, List strides, String padding, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("DepthwiseConv2dNative", scope.makeOpName("DepthwiseConv2dNative")); opBuilder.addInput(input.asOutput()); opBuilder.addInput(filter.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/DepthwiseConv2dNativeBackpropFilter.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/DepthwiseConv2dNativeBackpropFilter.java index 192bb0f8769..95b76b18287 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/DepthwiseConv2dNativeBackpropFilter.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/DepthwiseConv2dNativeBackpropFilter.java @@ -25,6 +25,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.family.TNumber; /** * Computes the gradients of depthwise convolution with respect to the filter. @@ -32,7 +34,7 @@ * @param data type for {@code output()} output */ @Operator(group = "nn") -public final class DepthwiseConv2dNativeBackpropFilter extends PrimitiveOp implements Operand { +public final class DepthwiseConv2dNativeBackpropFilter extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.nn.DepthwiseConv2dNativeBackpropFilter} @@ -90,7 +92,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of DepthwiseConv2dNativeBackpropFilter */ - public static DepthwiseConv2dNativeBackpropFilter create(Scope scope, Operand input, Operand filterSizes, Operand outBackprop, List strides, String padding, Options... options) { + public static DepthwiseConv2dNativeBackpropFilter create(Scope scope, Operand input, Operand filterSizes, Operand outBackprop, List strides, String padding, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("DepthwiseConv2dNativeBackpropFilter", scope.makeOpName("DepthwiseConv2dNativeBackpropFilter")); opBuilder.addInput(input.asOutput()); opBuilder.addInput(filterSizes.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/DepthwiseConv2dNativeBackpropInput.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/DepthwiseConv2dNativeBackpropInput.java index ee9198bc79e..9e9485783d2 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/DepthwiseConv2dNativeBackpropInput.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/DepthwiseConv2dNativeBackpropInput.java @@ -25,6 +25,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.family.TNumber; /** * Computes the gradients of depthwise convolution with respect to the input. @@ -32,7 +34,7 @@ * @param data type for {@code output()} output */ @Operator(group = "nn") -public final class DepthwiseConv2dNativeBackpropInput extends PrimitiveOp implements Operand { +public final class DepthwiseConv2dNativeBackpropInput extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.nn.DepthwiseConv2dNativeBackpropInput} @@ -89,7 +91,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of DepthwiseConv2dNativeBackpropInput */ - public static DepthwiseConv2dNativeBackpropInput create(Scope scope, Operand inputSizes, Operand filter, Operand outBackprop, List strides, String padding, Options... options) { + public static DepthwiseConv2dNativeBackpropInput create(Scope scope, Operand inputSizes, Operand filter, Operand outBackprop, List strides, String padding, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("DepthwiseConv2dNativeBackpropInput", scope.makeOpName("DepthwiseConv2dNativeBackpropInput")); opBuilder.addInput(inputSizes.asOutput()); opBuilder.addInput(filter.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Dilation2d.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Dilation2d.java index 716c14cd316..c6a071fb3dc 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Dilation2d.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Dilation2d.java @@ -25,6 +25,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Computes the grayscale dilation of 4-D `input` and 3-D `filter` tensors. @@ -56,7 +57,7 @@ * @param data type for {@code output()} output */ @Operator(group = "nn") -public final class Dilation2d extends PrimitiveOp implements Operand { +public final class Dilation2d extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new Dilation2d operation. @@ -71,7 +72,7 @@ public final class Dilation2d extends PrimitiveOp implements O * @param padding The type of padding algorithm to use. * @return a new instance of Dilation2d */ - public static Dilation2d create(Scope scope, Operand input, Operand filter, List strides, List rates, String padding) { + public static Dilation2d create(Scope scope, Operand input, Operand filter, List strides, List rates, String padding) { OperationBuilder opBuilder = scope.env().opBuilder("Dilation2D", scope.makeOpName("Dilation2d")); opBuilder.addInput(input.asOutput()); opBuilder.addInput(filter.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Dilation2dBackpropFilter.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Dilation2dBackpropFilter.java index 4b57a90c7a4..01f23c6726d 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Dilation2dBackpropFilter.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Dilation2dBackpropFilter.java @@ -25,6 +25,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Computes the gradient of morphological 2-D dilation with respect to the filter. @@ -32,7 +33,7 @@ * @param data type for {@code filterBackprop()} output */ @Operator(group = "nn") -public final class Dilation2dBackpropFilter extends PrimitiveOp implements Operand { +public final class Dilation2dBackpropFilter extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new Dilation2dBackpropFilter operation. @@ -48,7 +49,7 @@ public final class Dilation2dBackpropFilter extends PrimitiveO * @param padding The type of padding algorithm to use. * @return a new instance of Dilation2dBackpropFilter */ - public static Dilation2dBackpropFilter create(Scope scope, Operand input, Operand filter, Operand outBackprop, List strides, List rates, String padding) { + public static Dilation2dBackpropFilter create(Scope scope, Operand input, Operand filter, Operand outBackprop, List strides, List rates, String padding) { OperationBuilder opBuilder = scope.env().opBuilder("Dilation2DBackpropFilter", scope.makeOpName("Dilation2dBackpropFilter")); opBuilder.addInput(input.asOutput()); opBuilder.addInput(filter.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Dilation2dBackpropInput.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Dilation2dBackpropInput.java index dde8a1c3b3c..a88cbbd6061 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Dilation2dBackpropInput.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Dilation2dBackpropInput.java @@ -25,6 +25,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Computes the gradient of morphological 2-D dilation with respect to the input. @@ -32,7 +33,7 @@ * @param data type for {@code inBackprop()} output */ @Operator(group = "nn") -public final class Dilation2dBackpropInput extends PrimitiveOp implements Operand { +public final class Dilation2dBackpropInput extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new Dilation2dBackpropInput operation. @@ -48,7 +49,7 @@ public final class Dilation2dBackpropInput extends PrimitiveOp * @param padding The type of padding algorithm to use. * @return a new instance of Dilation2dBackpropInput */ - public static Dilation2dBackpropInput create(Scope scope, Operand input, Operand filter, Operand outBackprop, List strides, List rates, String padding) { + public static Dilation2dBackpropInput create(Scope scope, Operand input, Operand filter, Operand outBackprop, List strides, List rates, String padding) { OperationBuilder opBuilder = scope.env().opBuilder("Dilation2DBackpropInput", scope.makeOpName("Dilation2dBackpropInput")); opBuilder.addInput(input.asOutput()); opBuilder.addInput(filter.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Elu.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Elu.java index 63b5796cfdd..0be971a4a4c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Elu.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Elu.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Computes exponential linear: `exp(features) - 1` if < 0, `features` otherwise. @@ -34,7 +35,7 @@ * @param data type for {@code activations()} output */ @Operator(group = "nn") -public final class Elu extends PrimitiveOp implements Operand { +public final class Elu extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new Elu operation. @@ -43,7 +44,7 @@ public final class Elu extends PrimitiveOp implements Operand< * @param features * @return a new instance of Elu */ - public static Elu create(Scope scope, Operand features) { + public static Elu create(Scope scope, Operand features) { OperationBuilder opBuilder = scope.env().opBuilder("Elu", scope.makeOpName("Elu")); opBuilder.addInput(features.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/EluGrad.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/EluGrad.java index c3f9bdd20db..d98ca8fba1e 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/EluGrad.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/EluGrad.java @@ -23,13 +23,14 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.family.TNumber; /** * Computes gradients for the exponential linear (Elu) operation. * * @param data type for {@code backprops()} output */ -public final class EluGrad extends PrimitiveOp implements Operand { +public final class EluGrad extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new EluGrad operation. @@ -39,7 +40,7 @@ public final class EluGrad extends PrimitiveOp implements Oper * @param outputs The outputs of the corresponding Elu operation. * @return a new instance of EluGrad */ - public static EluGrad create(Scope scope, Operand gradients, Operand outputs) { + public static EluGrad create(Scope scope, Operand gradients, Operand outputs) { OperationBuilder opBuilder = scope.env().opBuilder("EluGrad", scope.makeOpName("EluGrad")); opBuilder.addInput(gradients.asOutput()); opBuilder.addInput(outputs.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/FixedUnigramCandidateSampler.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/FixedUnigramCandidateSampler.java index bef37316635..aeb650033f5 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/FixedUnigramCandidateSampler.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/FixedUnigramCandidateSampler.java @@ -25,6 +25,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TFloat; +import org.tensorflow.types.TInt64; /** * Generates labels for candidate sampling with a learned unigram distribution. @@ -163,7 +165,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of FixedUnigramCandidateSampler */ - public static FixedUnigramCandidateSampler create(Scope scope, Operand trueClasses, Long numTrue, Long numSampled, Boolean unique, Long rangeMax, Options... options) { + public static FixedUnigramCandidateSampler create(Scope scope, Operand trueClasses, Long numTrue, Long numSampled, Boolean unique, Long rangeMax, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("FixedUnigramCandidateSampler", scope.makeOpName("FixedUnigramCandidateSampler")); opBuilder.addInput(trueClasses.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); @@ -285,7 +287,7 @@ public static Options seed2(Long seed2) { * A vector of length num_sampled, in which each element is * the ID of a sampled candidate. */ - public Output sampledCandidates() { + public Output sampledCandidates() { return sampledCandidates; } @@ -294,7 +296,7 @@ public Output sampledCandidates() { * the number of times each candidate is expected to occur in a batch * of sampled candidates. If unique=true, then this is a probability. */ - public Output trueExpectedCount() { + public Output trueExpectedCount() { return trueExpectedCount; } @@ -304,13 +306,13 @@ public Output trueExpectedCount() { * to occur in a batch of sampled candidates. If unique=true, then this is a * probability. */ - public Output sampledExpectedCount() { + public Output sampledExpectedCount() { return sampledExpectedCount; } - private Output sampledCandidates; - private Output trueExpectedCount; - private Output sampledExpectedCount; + private Output sampledCandidates; + private Output trueExpectedCount; + private Output sampledExpectedCount; private FixedUnigramCandidateSampler(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/FractionalAvgPool.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/FractionalAvgPool.java index 6dbdeee7c0a..d96886f69a4 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/FractionalAvgPool.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/FractionalAvgPool.java @@ -25,6 +25,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt64; +import org.tensorflow.types.family.TNumber; /** * Performs fractional average pooling on the input. @@ -37,7 +39,7 @@ * @param data type for {@code output()} output */ @Operator(group = "nn") -public final class FractionalAvgPool extends PrimitiveOp { +public final class FractionalAvgPool extends PrimitiveOp { /** * Optional attributes for {@link org.tensorflow.op.nn.FractionalAvgPool} @@ -123,7 +125,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of FractionalAvgPool */ - public static FractionalAvgPool create(Scope scope, Operand value, List poolingRatio, Options... options) { + public static FractionalAvgPool create(Scope scope, Operand value, List poolingRatio, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("FractionalAvgPool", scope.makeOpName("FractionalAvgPool")); opBuilder.addInput(value.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); @@ -214,20 +216,20 @@ public Output output() { /** * row pooling sequence, needed to calculate gradient. */ - public Output rowPoolingSequence() { + public Output rowPoolingSequence() { return rowPoolingSequence; } /** * column pooling sequence, needed to calculate gradient. */ - public Output colPoolingSequence() { + public Output colPoolingSequence() { return colPoolingSequence; } private Output output; - private Output rowPoolingSequence; - private Output colPoolingSequence; + private Output rowPoolingSequence; + private Output colPoolingSequence; private FractionalAvgPool(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/FractionalAvgPoolGrad.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/FractionalAvgPoolGrad.java index 3ae4f58eed2..a2aca6e80fe 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/FractionalAvgPoolGrad.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/FractionalAvgPoolGrad.java @@ -23,6 +23,8 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TInt64; +import org.tensorflow.types.family.TNumber; /** * Computes gradient of the FractionalAvgPool function. @@ -35,7 +37,7 @@ * * @param data type for {@code output()} output */ -public final class FractionalAvgPoolGrad extends PrimitiveOp implements Operand { +public final class FractionalAvgPoolGrad extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.nn.FractionalAvgPoolGrad} @@ -78,7 +80,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of FractionalAvgPoolGrad */ - public static FractionalAvgPoolGrad create(Scope scope, Operand origInputTensorShape, Operand outBackprop, Operand rowPoolingSequence, Operand colPoolingSequence, Options... options) { + public static FractionalAvgPoolGrad create(Scope scope, Operand origInputTensorShape, Operand outBackprop, Operand rowPoolingSequence, Operand colPoolingSequence, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("FractionalAvgPoolGrad", scope.makeOpName("FractionalAvgPoolGrad")); opBuilder.addInput(origInputTensorShape.asOutput()); opBuilder.addInput(outBackprop.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/FractionalMaxPool.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/FractionalMaxPool.java index b4be4d7cae0..beaa35b1324 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/FractionalMaxPool.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/FractionalMaxPool.java @@ -25,6 +25,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt64; +import org.tensorflow.types.family.TNumber; /** * Performs fractional max pooling on the input. @@ -61,7 +63,7 @@ * @param data type for {@code output()} output */ @Operator(group = "nn") -public final class FractionalMaxPool extends PrimitiveOp { +public final class FractionalMaxPool extends PrimitiveOp { /** * Optional attributes for {@link org.tensorflow.op.nn.FractionalMaxPool} @@ -147,7 +149,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of FractionalMaxPool */ - public static FractionalMaxPool create(Scope scope, Operand value, List poolingRatio, Options... options) { + public static FractionalMaxPool create(Scope scope, Operand value, List poolingRatio, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("FractionalMaxPool", scope.makeOpName("FractionalMaxPool")); opBuilder.addInput(value.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); @@ -238,20 +240,20 @@ public Output output() { /** * row pooling sequence, needed to calculate gradient. */ - public Output rowPoolingSequence() { + public Output rowPoolingSequence() { return rowPoolingSequence; } /** * column pooling sequence, needed to calculate gradient. */ - public Output colPoolingSequence() { + public Output colPoolingSequence() { return colPoolingSequence; } private Output output; - private Output rowPoolingSequence; - private Output colPoolingSequence; + private Output rowPoolingSequence; + private Output colPoolingSequence; private FractionalMaxPool(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/FractionalMaxPoolGrad.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/FractionalMaxPoolGrad.java index 8fff60353c0..bb355b8aefa 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/FractionalMaxPoolGrad.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/FractionalMaxPoolGrad.java @@ -23,13 +23,15 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TInt64; +import org.tensorflow.types.family.TNumber; /** * Computes gradient of the FractionalMaxPool function. * * @param data type for {@code output()} output */ -public final class FractionalMaxPoolGrad extends PrimitiveOp implements Operand { +public final class FractionalMaxPoolGrad extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.nn.FractionalMaxPoolGrad} @@ -73,7 +75,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of FractionalMaxPoolGrad */ - public static FractionalMaxPoolGrad create(Scope scope, Operand origInput, Operand origOutput, Operand outBackprop, Operand rowPoolingSequence, Operand colPoolingSequence, Options... options) { + public static FractionalMaxPoolGrad create(Scope scope, Operand origInput, Operand origOutput, Operand outBackprop, Operand rowPoolingSequence, Operand colPoolingSequence, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("FractionalMaxPoolGrad", scope.makeOpName("FractionalMaxPoolGrad")); opBuilder.addInput(origInput.asOutput()); opBuilder.addInput(origOutput.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/FusedBatchNorm.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/FusedBatchNorm.java index 24747439ca5..65c762463d3 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/FusedBatchNorm.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/FusedBatchNorm.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Batch normalization. @@ -35,7 +36,7 @@ * @param data type for {@code batchMean()} output */ @Operator(group = "nn") -public final class FusedBatchNorm extends PrimitiveOp { +public final class FusedBatchNorm extends PrimitiveOp { /** * Optional attributes for {@link org.tensorflow.op.nn.FusedBatchNorm} @@ -89,7 +90,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of FusedBatchNorm */ - public static FusedBatchNorm create(Scope scope, Operand x, Operand scale, Operand offset, Operand mean, Operand variance, Options... options) { + public static FusedBatchNorm create(Scope scope, Operand x, Operand scale, Operand offset, Operand mean, Operand variance, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("FusedBatchNormV2", scope.makeOpName("FusedBatchNorm")); opBuilder.addInput(x.asOutput()); opBuilder.addInput(scale.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/FusedBatchNormGrad.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/FusedBatchNormGrad.java index add23a2f2c4..136067604a9 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/FusedBatchNormGrad.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/FusedBatchNormGrad.java @@ -24,6 +24,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TFloat; +import org.tensorflow.types.family.TNumber; /** * Gradient for batch normalization. @@ -35,7 +37,7 @@ * @param data type for {@code scaleBackprop()} output */ @Operator(group = "nn") -public final class FusedBatchNormGrad extends PrimitiveOp { +public final class FusedBatchNormGrad extends PrimitiveOp { /** * Optional attributes for {@link org.tensorflow.op.nn.FusedBatchNormGrad} @@ -95,7 +97,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of FusedBatchNormGrad */ - public static FusedBatchNormGrad create(Scope scope, Operand yBackprop, Operand x, Operand scale, Operand reserveSpace1, Operand reserveSpace2, Options... options) { + public static FusedBatchNormGrad create(Scope scope, Operand yBackprop, Operand x, Operand scale, Operand reserveSpace1, Operand reserveSpace2, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("FusedBatchNormGradV2", scope.makeOpName("FusedBatchNormGrad")); opBuilder.addInput(yBackprop.asOutput()); opBuilder.addInput(x.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/FusedPadConv2d.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/FusedPadConv2d.java index ea395403fac..c7087ce99a9 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/FusedPadConv2d.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/FusedPadConv2d.java @@ -25,6 +25,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.family.TNumber; /** * Performs a padding as a preprocess during a convolution. @@ -44,7 +46,7 @@ * @param data type for {@code output()} output */ @Operator(group = "nn") -public final class FusedPadConv2d extends PrimitiveOp implements Operand { +public final class FusedPadConv2d extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new FusedPadConv2d operation. @@ -61,7 +63,7 @@ public final class FusedPadConv2d extends PrimitiveOp implemen * @param padding The type of padding algorithm to use. * @return a new instance of FusedPadConv2d */ - public static FusedPadConv2d create(Scope scope, Operand input, Operand paddings, Operand filter, String mode, List strides, String padding) { + public static FusedPadConv2d create(Scope scope, Operand input, Operand paddings, Operand filter, String mode, List strides, String padding) { OperationBuilder opBuilder = scope.env().opBuilder("FusedPadConv2D", scope.makeOpName("FusedPadConv2d")); opBuilder.addInput(input.asOutput()); opBuilder.addInput(paddings.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/FusedResizeAndPadConv2d.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/FusedResizeAndPadConv2d.java index 90924370c38..b6632c4f1c4 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/FusedResizeAndPadConv2d.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/FusedResizeAndPadConv2d.java @@ -25,6 +25,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.family.TNumber; /** * Performs a resize and padding as a preprocess during a convolution. @@ -43,7 +45,7 @@ * @param data type for {@code output()} output */ @Operator(group = "nn") -public final class FusedResizeAndPadConv2d extends PrimitiveOp implements Operand { +public final class FusedResizeAndPadConv2d extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.nn.FusedResizeAndPadConv2d} @@ -83,7 +85,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of FusedResizeAndPadConv2d */ - public static FusedResizeAndPadConv2d create(Scope scope, Operand input, Operand size, Operand paddings, Operand filter, String mode, List strides, String padding, Options... options) { + public static FusedResizeAndPadConv2d create(Scope scope, Operand input, Operand size, Operand paddings, Operand filter, String mode, List strides, String padding, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("FusedResizeAndPadConv2D", scope.makeOpName("FusedResizeAndPadConv2d")); opBuilder.addInput(input.asOutput()); opBuilder.addInput(size.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/InTopK.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/InTopK.java index 0e46ec56ecb..2d5f496f5c8 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/InTopK.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/InTopK.java @@ -24,6 +24,9 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TBool; +import org.tensorflow.types.TFloat; +import org.tensorflow.types.family.TNumber; /** * Says whether the targets are in the top `K` predictions. @@ -44,7 +47,7 @@ * $$out_i = predictions_{i, targets_i} \in TopKIncludingTies(predictions_i)$$ */ @Operator(group = "nn") -public final class InTopK extends PrimitiveOp implements Operand { +public final class InTopK extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new InTopK operation. @@ -55,7 +58,7 @@ public final class InTopK extends PrimitiveOp implements Operand { * @param k Number of top elements to look at for computing precision. * @return a new instance of InTopK */ - public static InTopK create(Scope scope, Operand predictions, Operand targets, Operand k) { + public static InTopK create(Scope scope, Operand predictions, Operand targets, Operand k) { OperationBuilder opBuilder = scope.env().opBuilder("InTopKV2", scope.makeOpName("InTopK")); opBuilder.addInput(predictions.asOutput()); opBuilder.addInput(targets.asOutput()); @@ -67,16 +70,16 @@ public static InTopK create(Scope scope, Operand predi /** * Computed precision at `k` as a `bool Tensor`. */ - public Output precision() { + public Output precision() { return precision; } @Override - public Output asOutput() { + public Output asOutput() { return precision; } - private Output precision; + private Output precision; private InTopK(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/L2Loss.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/L2Loss.java index 4544788a34a..6e2c72bed58 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/L2Loss.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/L2Loss.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * L2 Loss. @@ -35,7 +36,7 @@ * @param data type for {@code output()} output */ @Operator(group = "nn") -public final class L2Loss extends PrimitiveOp implements Operand { +public final class L2Loss extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new L2Loss operation. @@ -44,7 +45,7 @@ public final class L2Loss extends PrimitiveOp implements Opera * @param t Typically 2-D, but may have any dimensions. * @return a new instance of L2Loss */ - public static L2Loss create(Scope scope, Operand t) { + public static L2Loss create(Scope scope, Operand t) { OperationBuilder opBuilder = scope.env().opBuilder("L2Loss", scope.makeOpName("L2Loss")); opBuilder.addInput(t.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/LeakyRelu.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/LeakyRelu.java index 8888c986d9f..91a38b0d217 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/LeakyRelu.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/LeakyRelu.java @@ -23,13 +23,14 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.family.TNumber; /** * Computes rectified linear: `max(features, features * alpha)`. * * @param data type for {@code activations()} output */ -public final class LeakyRelu extends PrimitiveOp implements Operand { +public final class LeakyRelu extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.nn.LeakyRelu} @@ -58,7 +59,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of LeakyRelu */ - public static LeakyRelu create(Scope scope, Operand features, Options... options) { + public static LeakyRelu create(Scope scope, Operand features, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("LeakyRelu", scope.makeOpName("LeakyRelu")); opBuilder.addInput(features.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/LearnedUnigramCandidateSampler.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/LearnedUnigramCandidateSampler.java index c179f222a5f..373e2a1689d 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/LearnedUnigramCandidateSampler.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/LearnedUnigramCandidateSampler.java @@ -24,6 +24,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TFloat; +import org.tensorflow.types.TInt64; /** * Generates labels for candidate sampling with a learned unigram distribution. @@ -86,7 +88,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of LearnedUnigramCandidateSampler */ - public static LearnedUnigramCandidateSampler create(Scope scope, Operand trueClasses, Long numTrue, Long numSampled, Boolean unique, Long rangeMax, Options... options) { + public static LearnedUnigramCandidateSampler create(Scope scope, Operand trueClasses, Long numTrue, Long numSampled, Boolean unique, Long rangeMax, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("LearnedUnigramCandidateSampler", scope.makeOpName("LearnedUnigramCandidateSampler")); opBuilder.addInput(trueClasses.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); @@ -127,7 +129,7 @@ public static Options seed2(Long seed2) { * A vector of length num_sampled, in which each element is * the ID of a sampled candidate. */ - public Output sampledCandidates() { + public Output sampledCandidates() { return sampledCandidates; } @@ -136,7 +138,7 @@ public Output sampledCandidates() { * the number of times each candidate is expected to occur in a batch * of sampled candidates. If unique=true, then this is a probability. */ - public Output trueExpectedCount() { + public Output trueExpectedCount() { return trueExpectedCount; } @@ -146,13 +148,13 @@ public Output trueExpectedCount() { * to occur in a batch of sampled candidates. If unique=true, then this is a * probability. */ - public Output sampledExpectedCount() { + public Output sampledExpectedCount() { return sampledExpectedCount; } - private Output sampledCandidates; - private Output trueExpectedCount; - private Output sampledExpectedCount; + private Output sampledCandidates; + private Output trueExpectedCount; + private Output sampledExpectedCount; private LearnedUnigramCandidateSampler(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/LocalResponseNormalization.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/LocalResponseNormalization.java index 67195a10aff..12c24cc4957 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/LocalResponseNormalization.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/LocalResponseNormalization.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Local Response Normalization. @@ -43,7 +44,7 @@ * @param data type for {@code output()} output */ @Operator(group = "nn") -public final class LocalResponseNormalization extends PrimitiveOp implements Operand { +public final class LocalResponseNormalization extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.nn.LocalResponseNormalization} @@ -99,7 +100,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of LocalResponseNormalization */ - public static LocalResponseNormalization create(Scope scope, Operand input, Options... options) { + public static LocalResponseNormalization create(Scope scope, Operand input, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("LRN", scope.makeOpName("LocalResponseNormalization")); opBuilder.addInput(input.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/LocalResponseNormalizationGrad.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/LocalResponseNormalizationGrad.java index 18aa2082b83..e5cba5e4f9c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/LocalResponseNormalizationGrad.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/LocalResponseNormalizationGrad.java @@ -23,13 +23,14 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.family.TNumber; /** * Gradients for Local Response Normalization. * * @param data type for {@code output()} output */ -public final class LocalResponseNormalizationGrad extends PrimitiveOp implements Operand { +public final class LocalResponseNormalizationGrad extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.nn.LocalResponseNormalizationGrad} @@ -87,7 +88,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of LocalResponseNormalizationGrad */ - public static LocalResponseNormalizationGrad create(Scope scope, Operand inputGrads, Operand inputImage, Operand outputImage, Options... options) { + public static LocalResponseNormalizationGrad create(Scope scope, Operand inputGrads, Operand inputImage, Operand outputImage, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("LRNGrad", scope.makeOpName("LocalResponseNormalizationGrad")); opBuilder.addInput(inputGrads.asOutput()); opBuilder.addInput(inputImage.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/LogSoftmax.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/LogSoftmax.java index ca74c354ba0..5889230c757 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/LogSoftmax.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/LogSoftmax.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Computes log softmax activations. @@ -35,7 +36,7 @@ * @param data type for {@code logsoftmax()} output */ @Operator(group = "nn") -public final class LogSoftmax extends PrimitiveOp implements Operand { +public final class LogSoftmax extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new LogSoftmax operation. @@ -44,7 +45,7 @@ public final class LogSoftmax extends PrimitiveOp implements O * @param logits 2-D with shape `[batch_size, num_classes]`. * @return a new instance of LogSoftmax */ - public static LogSoftmax create(Scope scope, Operand logits) { + public static LogSoftmax create(Scope scope, Operand logits) { OperationBuilder opBuilder = scope.env().opBuilder("LogSoftmax", scope.makeOpName("LogSoftmax")); opBuilder.addInput(logits.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/MaxPool.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/MaxPool.java index 28e645dd8f5..4b6aef43f75 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/MaxPool.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/MaxPool.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt32; /** * Performs max pooling on the input. @@ -68,7 +69,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of MaxPool */ - public static MaxPool create(Scope scope, Operand input, Operand ksize, Operand strides, String padding, Options... options) { + public static MaxPool create(Scope scope, Operand input, Operand ksize, Operand strides, String padding, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("MaxPoolV2", scope.makeOpName("MaxPool")); opBuilder.addInput(input.asOutput()); opBuilder.addInput(ksize.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/MaxPool3d.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/MaxPool3d.java index 30f7c8e0743..580382cae73 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/MaxPool3d.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/MaxPool3d.java @@ -25,6 +25,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Performs 3D max pooling on the input. @@ -32,7 +33,7 @@ * @param data type for {@code output()} output */ @Operator(group = "nn") -public final class MaxPool3d extends PrimitiveOp implements Operand { +public final class MaxPool3d extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.nn.MaxPool3d} @@ -70,7 +71,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of MaxPool3d */ - public static MaxPool3d create(Scope scope, Operand input, List ksize, List strides, String padding, Options... options) { + public static MaxPool3d create(Scope scope, Operand input, List ksize, List strides, String padding, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("MaxPool3D", scope.makeOpName("MaxPool3d")); opBuilder.addInput(input.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/MaxPool3dGrad.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/MaxPool3dGrad.java index d4d1f97c7a7..697f183d021 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/MaxPool3dGrad.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/MaxPool3dGrad.java @@ -25,6 +25,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Computes gradients of max pooling function. @@ -32,7 +33,7 @@ * @param data type for {@code output()} output */ @Operator(group = "nn") -public final class MaxPool3dGrad extends PrimitiveOp implements Operand { +public final class MaxPool3dGrad extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.nn.MaxPool3dGrad} @@ -72,7 +73,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of MaxPool3dGrad */ - public static MaxPool3dGrad create(Scope scope, Operand origInput, Operand origOutput, Operand grad, List ksize, List strides, String padding, Options... options) { + public static MaxPool3dGrad create(Scope scope, Operand origInput, Operand origOutput, Operand grad, List ksize, List strides, String padding, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("MaxPool3DGrad", scope.makeOpName("MaxPool3dGrad")); opBuilder.addInput(origInput.asOutput()); opBuilder.addInput(origOutput.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/MaxPool3dGradGrad.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/MaxPool3dGradGrad.java index 90dbaf29876..450de524a7a 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/MaxPool3dGradGrad.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/MaxPool3dGradGrad.java @@ -25,6 +25,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Computes second-order gradients of the maxpooling function. @@ -32,7 +33,7 @@ * @param data type for {@code output()} output */ @Operator(group = "nn") -public final class MaxPool3dGradGrad extends PrimitiveOp implements Operand { +public final class MaxPool3dGradGrad extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.nn.MaxPool3dGradGrad} @@ -72,7 +73,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of MaxPool3dGradGrad */ - public static MaxPool3dGradGrad create(Scope scope, Operand origInput, Operand origOutput, Operand grad, List ksize, List strides, String padding, Options... options) { + public static MaxPool3dGradGrad create(Scope scope, Operand origInput, Operand origOutput, Operand grad, List ksize, List strides, String padding, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("MaxPool3DGradGrad", scope.makeOpName("MaxPool3dGradGrad")); opBuilder.addInput(origInput.asOutput()); opBuilder.addInput(origOutput.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/MaxPoolGrad.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/MaxPoolGrad.java index 4122d18236a..db2e08e3b45 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/MaxPoolGrad.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/MaxPoolGrad.java @@ -24,6 +24,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.family.TNumber; /** * Computes gradients of the maxpooling function. @@ -31,7 +33,7 @@ * @param data type for {@code output()} output */ @Operator(group = "nn") -public final class MaxPoolGrad extends PrimitiveOp implements Operand { +public final class MaxPoolGrad extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.nn.MaxPoolGrad} @@ -70,7 +72,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of MaxPoolGrad */ - public static MaxPoolGrad create(Scope scope, Operand origInput, Operand origOutput, Operand grad, Operand ksize, Operand strides, String padding, Options... options) { + public static MaxPoolGrad create(Scope scope, Operand origInput, Operand origOutput, Operand grad, Operand ksize, Operand strides, String padding, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("MaxPoolGradV2", scope.makeOpName("MaxPoolGrad")); opBuilder.addInput(origInput.asOutput()); opBuilder.addInput(origOutput.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/MaxPoolGradGrad.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/MaxPoolGradGrad.java index 89b400f5d47..d27c49a30e6 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/MaxPoolGradGrad.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/MaxPoolGradGrad.java @@ -24,6 +24,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.family.TNumber; /** * Computes second-order gradients of the maxpooling function. @@ -31,7 +33,7 @@ * @param data type for {@code output()} output */ @Operator(group = "nn") -public final class MaxPoolGradGrad extends PrimitiveOp implements Operand { +public final class MaxPoolGradGrad extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.nn.MaxPoolGradGrad} @@ -70,7 +72,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of MaxPoolGradGrad */ - public static MaxPoolGradGrad create(Scope scope, Operand origInput, Operand origOutput, Operand grad, Operand ksize, Operand strides, String padding, Options... options) { + public static MaxPoolGradGrad create(Scope scope, Operand origInput, Operand origOutput, Operand grad, Operand ksize, Operand strides, String padding, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("MaxPoolGradGradV2", scope.makeOpName("MaxPoolGradGrad")); opBuilder.addInput(origInput.asOutput()); opBuilder.addInput(origOutput.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/MaxPoolGradGradWithArgmax.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/MaxPoolGradGradWithArgmax.java index 79f691e6a3c..8c38f520bf5 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/MaxPoolGradGradWithArgmax.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/MaxPoolGradGradWithArgmax.java @@ -25,6 +25,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Computes second-order gradients of the maxpooling function. @@ -32,7 +33,7 @@ * @param data type for {@code output()} output */ @Operator(group = "nn") -public final class MaxPoolGradGradWithArgmax extends PrimitiveOp implements Operand { +public final class MaxPoolGradGradWithArgmax extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.nn.MaxPoolGradGradWithArgmax} @@ -68,7 +69,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of MaxPoolGradGradWithArgmax */ - public static MaxPoolGradGradWithArgmax create(Scope scope, Operand input, Operand grad, Operand argmax, List ksize, List strides, String padding, Options... options) { + public static MaxPoolGradGradWithArgmax create(Scope scope, Operand input, Operand grad, Operand argmax, List ksize, List strides, String padding, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("MaxPoolGradGradWithArgmax", scope.makeOpName("MaxPoolGradGradWithArgmax")); opBuilder.addInput(input.asOutput()); opBuilder.addInput(grad.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/MaxPoolGradWithArgmax.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/MaxPoolGradWithArgmax.java index dca992e3390..5c8e0ff6520 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/MaxPoolGradWithArgmax.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/MaxPoolGradWithArgmax.java @@ -24,13 +24,14 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.family.TNumber; /** * Computes gradients of the maxpooling function. * * @param data type for {@code output()} output */ -public final class MaxPoolGradWithArgmax extends PrimitiveOp implements Operand { +public final class MaxPoolGradWithArgmax extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.nn.MaxPoolGradWithArgmax} @@ -66,7 +67,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of MaxPoolGradWithArgmax */ - public static MaxPoolGradWithArgmax create(Scope scope, Operand input, Operand grad, Operand argmax, List ksize, List strides, String padding, Options... options) { + public static MaxPoolGradWithArgmax create(Scope scope, Operand input, Operand grad, Operand argmax, List ksize, List strides, String padding, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("MaxPoolGradWithArgmax", scope.makeOpName("MaxPoolGradWithArgmax")); opBuilder.addInput(input.asOutput()); opBuilder.addInput(grad.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/MaxPoolWithArgmax.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/MaxPoolWithArgmax.java index db7130685d2..bd8ffafbd9c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/MaxPoolWithArgmax.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/MaxPoolWithArgmax.java @@ -26,6 +26,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt64; +import org.tensorflow.types.family.TNumber; /** * Performs max pooling on the input and outputs both max values and indices. @@ -44,7 +46,7 @@ * @param data type for {@code argmax()} output */ @Operator(group = "nn") -public final class MaxPoolWithArgmax extends PrimitiveOp { +public final class MaxPoolWithArgmax extends PrimitiveOp { /** * Optional attributes for {@link org.tensorflow.op.nn.MaxPoolWithArgmax} @@ -78,7 +80,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of MaxPoolWithArgmax */ - public static MaxPoolWithArgmax create(Scope scope, Operand input, List ksize, List strides, Class Targmax, String padding, Options... options) { + public static MaxPoolWithArgmax create(Scope scope, Operand input, List ksize, List strides, DataType Targmax, String padding, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("MaxPoolWithArgmax", scope.makeOpName("MaxPoolWithArgmax")); opBuilder.addInput(input.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); @@ -92,7 +94,7 @@ public static MaxPoolWithArgmax creat stridesArray[i] = strides.get(i); } opBuilder.setAttr("strides", stridesArray); - opBuilder.setAttr("Targmax", DataType.fromClass(Targmax)); + opBuilder.setAttr("Targmax", Targmax); opBuilder.setAttr("padding", padding); if (options != null) { for (Options opts : options) { @@ -116,8 +118,8 @@ public static MaxPoolWithArgmax creat * @param options carries optional attributes values * @return a new instance of MaxPoolWithArgmax */ - public static MaxPoolWithArgmax create(Scope scope, Operand input, List ksize, List strides, String padding, Options... options) { - return create(scope, input, ksize, strides, Long.class, padding, options); + public static MaxPoolWithArgmax create(Scope scope, Operand input, List ksize, List strides, String padding, Options... options) { + return create(scope, input, ksize, strides, TInt64.DTYPE, padding, options); } /** diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/NthElement.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/NthElement.java index 9dd0eba2023..bcd8ad7cd8d 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/NthElement.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/NthElement.java @@ -24,6 +24,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.family.TNumber; /** * Finds values of the `n`-th order statistic for the last dimension. @@ -39,7 +41,7 @@ * @param data type for {@code values()} output */ @Operator(group = "nn") -public final class NthElement extends PrimitiveOp implements Operand { +public final class NthElement extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.nn.NthElement} @@ -71,7 +73,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of NthElement */ - public static NthElement create(Scope scope, Operand input, Operand n, Options... options) { + public static NthElement create(Scope scope, Operand input, Operand n, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("NthElement", scope.makeOpName("NthElement")); opBuilder.addInput(input.asOutput()); opBuilder.addInput(n.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedAvgPool.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedAvgPool.java index f9109f6dd37..9786250d369 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedAvgPool.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedAvgPool.java @@ -25,6 +25,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TFloat; /** * Produces the average pool of the input tensor for quantized types. @@ -48,7 +49,7 @@ public final class QuantizedAvgPool extends PrimitiveOp { * @param padding The type of padding algorithm to use. * @return a new instance of QuantizedAvgPool */ - public static QuantizedAvgPool create(Scope scope, Operand input, Operand minInput, Operand maxInput, List ksize, List strides, String padding) { + public static QuantizedAvgPool create(Scope scope, Operand input, Operand minInput, Operand maxInput, List ksize, List strides, String padding) { OperationBuilder opBuilder = scope.env().opBuilder("QuantizedAvgPool", scope.makeOpName("QuantizedAvgPool")); opBuilder.addInput(input.asOutput()); opBuilder.addInput(minInput.asOutput()); @@ -77,20 +78,20 @@ public Output output() { /** * The float value that the lowest quantized output value represents. */ - public Output minOutput() { + public Output minOutput() { return minOutput; } /** * The float value that the highest quantized output value represents. */ - public Output maxOutput() { + public Output maxOutput() { return maxOutput; } private Output output; - private Output minOutput; - private Output maxOutput; + private Output minOutput; + private Output maxOutput; private QuantizedAvgPool(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedBatchNormWithGlobalNormalization.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedBatchNormWithGlobalNormalization.java index 2fa73c36f23..ba412e8f27a 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedBatchNormWithGlobalNormalization.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedBatchNormWithGlobalNormalization.java @@ -25,6 +25,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TFloat; /** * Quantized Batch normalization. @@ -69,7 +70,7 @@ public final class QuantizedBatchNormWithGlobalNormalization extends Primitiv * needs to be multiplied with gamma. * @return a new instance of QuantizedBatchNormWithGlobalNormalization */ - public static QuantizedBatchNormWithGlobalNormalization create(Scope scope, Operand t, Operand tMin, Operand tMax, Operand m, Operand mMin, Operand mMax, Operand v, Operand vMin, Operand vMax, Operand beta, Operand betaMin, Operand betaMax, Operand gamma, Operand gammaMin, Operand gammaMax, Class outType, Float varianceEpsilon, Boolean scaleAfterNormalization) { + public static QuantizedBatchNormWithGlobalNormalization create(Scope scope, Operand t, Operand tMin, Operand tMax, Operand m, Operand mMin, Operand mMax, Operand v, Operand vMin, Operand vMax, Operand beta, Operand betaMin, Operand betaMax, Operand gamma, Operand gammaMin, Operand gammaMax, DataType outType, Float varianceEpsilon, Boolean scaleAfterNormalization) { OperationBuilder opBuilder = scope.env().opBuilder("QuantizedBatchNormWithGlobalNormalization", scope.makeOpName("QuantizedBatchNormWithGlobalNormalization")); opBuilder.addInput(t.asOutput()); opBuilder.addInput(tMin.asOutput()); @@ -87,7 +88,7 @@ public static QuantizedBatchNormWithGlobalNormalization create(Scope s opBuilder.addInput(gammaMin.asOutput()); opBuilder.addInput(gammaMax.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); - opBuilder.setAttr("out_type", DataType.fromClass(outType)); + opBuilder.setAttr("out_type", outType); opBuilder.setAttr("variance_epsilon", varianceEpsilon); opBuilder.setAttr("scale_after_normalization", scaleAfterNormalization); return new QuantizedBatchNormWithGlobalNormalization(opBuilder.build()); @@ -101,19 +102,19 @@ public Output result() { /** */ - public Output resultMin() { + public Output resultMin() { return resultMin; } /** */ - public Output resultMax() { + public Output resultMax() { return resultMax; } private Output result; - private Output resultMin; - private Output resultMax; + private Output resultMin; + private Output resultMax; private QuantizedBatchNormWithGlobalNormalization(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedBiasAdd.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedBiasAdd.java index 85a258ca8f8..d40283ae762 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedBiasAdd.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedBiasAdd.java @@ -25,6 +25,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TFloat; /** * Adds Tensor 'bias' to Tensor 'input' for Quantized types. @@ -49,7 +50,7 @@ public final class QuantizedBiasAdd extends PrimitiveOp { * @param outType * @return a new instance of QuantizedBiasAdd */ - public static QuantizedBiasAdd create(Scope scope, Operand input, Operand bias, Operand minInput, Operand maxInput, Operand minBias, Operand maxBias, Class outType) { + public static QuantizedBiasAdd create(Scope scope, Operand input, Operand bias, Operand minInput, Operand maxInput, Operand minBias, Operand maxBias, DataType outType) { OperationBuilder opBuilder = scope.env().opBuilder("QuantizedBiasAdd", scope.makeOpName("QuantizedBiasAdd")); opBuilder.addInput(input.asOutput()); opBuilder.addInput(bias.asOutput()); @@ -58,7 +59,7 @@ public static QuantizedBiasAdd create(Scope scope, Operand input opBuilder.addInput(minBias.asOutput()); opBuilder.addInput(maxBias.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); - opBuilder.setAttr("out_type", DataType.fromClass(outType)); + opBuilder.setAttr("out_type", outType); return new QuantizedBiasAdd(opBuilder.build()); } @@ -71,20 +72,20 @@ public Output output() { /** * The float value that the lowest quantized output value represents. */ - public Output minOut() { + public Output minOut() { return minOut; } /** * The float value that the highest quantized output value represents. */ - public Output maxOut() { + public Output maxOut() { return maxOut; } private Output output; - private Output minOut; - private Output maxOut; + private Output minOut; + private Output maxOut; private QuantizedBiasAdd(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedConv2d.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedConv2d.java index b74526baedf..ac21cf37e88 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedConv2d.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedConv2d.java @@ -26,6 +26,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TFloat; /** * Computes a 2D convolution given quantized 4D input and filter tensors. @@ -80,7 +81,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of QuantizedConv2d */ - public static QuantizedConv2d create(Scope scope, Operand input, Operand filter, Operand minInput, Operand maxInput, Operand minFilter, Operand maxFilter, Class outType, List strides, String padding, Options... options) { + public static QuantizedConv2d create(Scope scope, Operand input, Operand filter, Operand minInput, Operand maxInput, Operand minFilter, Operand maxFilter, DataType outType, List strides, String padding, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("QuantizedConv2D", scope.makeOpName("QuantizedConv2d")); opBuilder.addInput(input.asOutput()); opBuilder.addInput(filter.asOutput()); @@ -89,7 +90,7 @@ public static QuantizedConv2d create(Scope scope, Operand input, opBuilder.addInput(minFilter.asOutput()); opBuilder.addInput(maxFilter.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); - opBuilder.setAttr("out_type", DataType.fromClass(outType)); + opBuilder.setAttr("out_type", outType); long[] stridesArray = new long[strides.size()]; for (int i = 0; i < stridesArray.length; ++i) { stridesArray[i] = strides.get(i); @@ -130,20 +131,20 @@ public Output output() { /** * The float value that the lowest quantized output value represents. */ - public Output minOutput() { + public Output minOutput() { return minOutput; } /** * The float value that the highest quantized output value represents. */ - public Output maxOutput() { + public Output maxOutput() { return maxOutput; } private Output output; - private Output minOutput; - private Output maxOutput; + private Output minOutput; + private Output maxOutput; private QuantizedConv2d(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedInstanceNorm.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedInstanceNorm.java index bec6ef0d238..66647c7542f 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedInstanceNorm.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedInstanceNorm.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TFloat; /** * Quantized Instance normalization. @@ -100,7 +101,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of QuantizedInstanceNorm */ - public static QuantizedInstanceNorm create(Scope scope, Operand x, Operand xMin, Operand xMax, Options... options) { + public static QuantizedInstanceNorm create(Scope scope, Operand x, Operand xMin, Operand xMax, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("QuantizedInstanceNorm", scope.makeOpName("QuantizedInstanceNorm")); opBuilder.addInput(x.asOutput()); opBuilder.addInput(xMin.asOutput()); @@ -175,20 +176,20 @@ public Output y() { /** * The value represented by the lowest quantized output. */ - public Output yMin() { + public Output yMin() { return yMin; } /** * The value represented by the highest quantized output. */ - public Output yMax() { + public Output yMax() { return yMax; } private Output y; - private Output yMin; - private Output yMax; + private Output yMin; + private Output yMax; private QuantizedInstanceNorm(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedMaxPool.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedMaxPool.java index 9af1dd479b0..6a2f97276c9 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedMaxPool.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedMaxPool.java @@ -25,6 +25,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TFloat; /** * Produces the max pool of the input tensor for quantized types. @@ -48,7 +49,7 @@ public final class QuantizedMaxPool extends PrimitiveOp { * @param padding The type of padding algorithm to use. * @return a new instance of QuantizedMaxPool */ - public static QuantizedMaxPool create(Scope scope, Operand input, Operand minInput, Operand maxInput, List ksize, List strides, String padding) { + public static QuantizedMaxPool create(Scope scope, Operand input, Operand minInput, Operand maxInput, List ksize, List strides, String padding) { OperationBuilder opBuilder = scope.env().opBuilder("QuantizedMaxPool", scope.makeOpName("QuantizedMaxPool")); opBuilder.addInput(input.asOutput()); opBuilder.addInput(minInput.asOutput()); @@ -77,20 +78,20 @@ public Output output() { /** * The float value that the lowest quantized output value represents. */ - public Output minOutput() { + public Output minOutput() { return minOutput; } /** * The float value that the highest quantized output value represents. */ - public Output maxOutput() { + public Output maxOutput() { return maxOutput; } private Output output; - private Output minOutput; - private Output maxOutput; + private Output minOutput; + private Output maxOutput; private QuantizedMaxPool(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedRelu.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedRelu.java index 396d4b5a9ba..ba720ee14de 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedRelu.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedRelu.java @@ -25,6 +25,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TFloat; /** * Computes Quantized Rectified Linear: `max(features, 0)` @@ -44,13 +45,13 @@ public final class QuantizedRelu extends PrimitiveOp { * @param outType * @return a new instance of QuantizedRelu */ - public static QuantizedRelu create(Scope scope, Operand features, Operand minFeatures, Operand maxFeatures, Class outType) { + public static QuantizedRelu create(Scope scope, Operand features, Operand minFeatures, Operand maxFeatures, DataType outType) { OperationBuilder opBuilder = scope.env().opBuilder("QuantizedRelu", scope.makeOpName("QuantizedRelu")); opBuilder.addInput(features.asOutput()); opBuilder.addInput(minFeatures.asOutput()); opBuilder.addInput(maxFeatures.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); - opBuilder.setAttr("out_type", DataType.fromClass(outType)); + opBuilder.setAttr("out_type", outType); return new QuantizedRelu(opBuilder.build()); } @@ -64,20 +65,20 @@ public Output activations() { /** * The float value that the lowest quantized value represents. */ - public Output minActivations() { + public Output minActivations() { return minActivations; } /** * The float value that the highest quantized value represents. */ - public Output maxActivations() { + public Output maxActivations() { return maxActivations; } private Output activations; - private Output minActivations; - private Output maxActivations; + private Output minActivations; + private Output maxActivations; private QuantizedRelu(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedRelu6.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedRelu6.java index 7845874980a..cdc60722b9a 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedRelu6.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedRelu6.java @@ -25,6 +25,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TFloat; /** * Computes Quantized Rectified Linear 6: `min(max(features, 0), 6)` @@ -44,13 +45,13 @@ public final class QuantizedRelu6 extends PrimitiveOp { * @param outType * @return a new instance of QuantizedRelu6 */ - public static QuantizedRelu6 create(Scope scope, Operand features, Operand minFeatures, Operand maxFeatures, Class outType) { + public static QuantizedRelu6 create(Scope scope, Operand features, Operand minFeatures, Operand maxFeatures, DataType outType) { OperationBuilder opBuilder = scope.env().opBuilder("QuantizedRelu6", scope.makeOpName("QuantizedRelu6")); opBuilder.addInput(features.asOutput()); opBuilder.addInput(minFeatures.asOutput()); opBuilder.addInput(maxFeatures.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); - opBuilder.setAttr("out_type", DataType.fromClass(outType)); + opBuilder.setAttr("out_type", outType); return new QuantizedRelu6(opBuilder.build()); } @@ -64,20 +65,20 @@ public Output activations() { /** * The float value that the lowest quantized value represents. */ - public Output minActivations() { + public Output minActivations() { return minActivations; } /** * The float value that the highest quantized value represents. */ - public Output maxActivations() { + public Output maxActivations() { return maxActivations; } private Output activations; - private Output minActivations; - private Output maxActivations; + private Output minActivations; + private Output maxActivations; private QuantizedRelu6(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedReluX.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedReluX.java index 233a5037b68..4fb4b54a926 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedReluX.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedReluX.java @@ -25,6 +25,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TFloat; /** * Computes Quantized Rectified Linear X: `min(max(features, 0), max_value)` @@ -45,14 +46,14 @@ public final class QuantizedReluX extends PrimitiveOp { * @param outType * @return a new instance of QuantizedReluX */ - public static QuantizedReluX create(Scope scope, Operand features, Operand maxValue, Operand minFeatures, Operand maxFeatures, Class outType) { + public static QuantizedReluX create(Scope scope, Operand features, Operand maxValue, Operand minFeatures, Operand maxFeatures, DataType outType) { OperationBuilder opBuilder = scope.env().opBuilder("QuantizedReluX", scope.makeOpName("QuantizedReluX")); opBuilder.addInput(features.asOutput()); opBuilder.addInput(maxValue.asOutput()); opBuilder.addInput(minFeatures.asOutput()); opBuilder.addInput(maxFeatures.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); - opBuilder.setAttr("out_type", DataType.fromClass(outType)); + opBuilder.setAttr("out_type", outType); return new QuantizedReluX(opBuilder.build()); } @@ -66,20 +67,20 @@ public Output activations() { /** * The float value that the lowest quantized value represents. */ - public Output minActivations() { + public Output minActivations() { return minActivations; } /** * The float value that the highest quantized value represents. */ - public Output maxActivations() { + public Output maxActivations() { return maxActivations; } private Output activations; - private Output minActivations; - private Output maxActivations; + private Output minActivations; + private Output maxActivations; private QuantizedReluX(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Relu6.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Relu6.java index 69a1d302470..b591b166959 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Relu6.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Relu6.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Computes rectified linear 6: `min(max(features, 0), 6)`. @@ -31,7 +32,7 @@ * @param data type for {@code activations()} output */ @Operator(group = "nn") -public final class Relu6 extends PrimitiveOp implements Operand { +public final class Relu6 extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new Relu6 operation. @@ -40,7 +41,7 @@ public final class Relu6 extends PrimitiveOp implements Operan * @param features * @return a new instance of Relu6 */ - public static Relu6 create(Scope scope, Operand features) { + public static Relu6 create(Scope scope, Operand features) { OperationBuilder opBuilder = scope.env().opBuilder("Relu6", scope.makeOpName("Relu6")); opBuilder.addInput(features.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Relu6Grad.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Relu6Grad.java index eb50a72e769..2dcb28ca2e7 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Relu6Grad.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Relu6Grad.java @@ -23,13 +23,14 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.family.TNumber; /** * Computes rectified linear 6 gradients for a Relu6 operation. * * @param data type for {@code backprops()} output */ -public final class Relu6Grad extends PrimitiveOp implements Operand { +public final class Relu6Grad extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new Relu6Grad operation. @@ -40,7 +41,7 @@ public final class Relu6Grad extends PrimitiveOp implements Op * its output; using either one produces the same result. * @return a new instance of Relu6Grad */ - public static Relu6Grad create(Scope scope, Operand gradients, Operand features) { + public static Relu6Grad create(Scope scope, Operand gradients, Operand features) { OperationBuilder opBuilder = scope.env().opBuilder("Relu6Grad", scope.makeOpName("Relu6Grad")); opBuilder.addInput(gradients.asOutput()); opBuilder.addInput(features.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/ReluGrad.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/ReluGrad.java index b68a8cc0a22..93eb9b807f7 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/ReluGrad.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/ReluGrad.java @@ -23,13 +23,14 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.family.TNumber; /** * Computes rectified linear gradients for a Relu operation. * * @param data type for {@code backprops()} output */ -public final class ReluGrad extends PrimitiveOp implements Operand { +public final class ReluGrad extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new ReluGrad operation. @@ -40,7 +41,7 @@ public final class ReluGrad extends PrimitiveOp implements Ope * the outputs of that operation (both work equivalently). * @return a new instance of ReluGrad */ - public static ReluGrad create(Scope scope, Operand gradients, Operand features) { + public static ReluGrad create(Scope scope, Operand gradients, Operand features) { OperationBuilder opBuilder = scope.env().opBuilder("ReluGrad", scope.makeOpName("ReluGrad")); opBuilder.addInput(gradients.asOutput()); opBuilder.addInput(features.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Selu.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Selu.java index c1597e2a1d3..f77d0196764 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Selu.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Selu.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Computes scaled exponential linear: `scale * alpha * (exp(features) - 1)` @@ -39,7 +40,7 @@ * @param data type for {@code activations()} output */ @Operator(group = "nn") -public final class Selu extends PrimitiveOp implements Operand { +public final class Selu extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new Selu operation. @@ -48,7 +49,7 @@ public final class Selu extends PrimitiveOp implements Operand * @param features * @return a new instance of Selu */ - public static Selu create(Scope scope, Operand features) { + public static Selu create(Scope scope, Operand features) { OperationBuilder opBuilder = scope.env().opBuilder("Selu", scope.makeOpName("Selu")); opBuilder.addInput(features.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/SeluGrad.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/SeluGrad.java index 92b9f5b5c8c..917fc908022 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/SeluGrad.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/SeluGrad.java @@ -23,13 +23,14 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.family.TNumber; /** * Computes gradients for the scaled exponential linear (Selu) operation. * * @param data type for {@code backprops()} output */ -public final class SeluGrad extends PrimitiveOp implements Operand { +public final class SeluGrad extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new SeluGrad operation. @@ -39,7 +40,7 @@ public final class SeluGrad extends PrimitiveOp implements Ope * @param outputs The outputs of the corresponding Selu operation. * @return a new instance of SeluGrad */ - public static SeluGrad create(Scope scope, Operand gradients, Operand outputs) { + public static SeluGrad create(Scope scope, Operand gradients, Operand outputs) { OperationBuilder opBuilder = scope.env().opBuilder("SeluGrad", scope.makeOpName("SeluGrad")); opBuilder.addInput(gradients.asOutput()); opBuilder.addInput(outputs.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Softmax.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Softmax.java index da261adedc3..7a74a9f30e1 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Softmax.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Softmax.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Computes softmax activations. @@ -35,7 +36,7 @@ * @param data type for {@code softmax()} output */ @Operator(group = "nn") -public final class Softmax extends PrimitiveOp implements Operand { +public final class Softmax extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new Softmax operation. @@ -44,7 +45,7 @@ public final class Softmax extends PrimitiveOp implements Oper * @param logits 2-D with shape `[batch_size, num_classes]`. * @return a new instance of Softmax */ - public static Softmax create(Scope scope, Operand logits) { + public static Softmax create(Scope scope, Operand logits) { OperationBuilder opBuilder = scope.env().opBuilder("Softmax", scope.makeOpName("Softmax")); opBuilder.addInput(logits.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/SoftmaxCrossEntropyWithLogits.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/SoftmaxCrossEntropyWithLogits.java index ece8b8ac2a6..de751218694 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/SoftmaxCrossEntropyWithLogits.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/SoftmaxCrossEntropyWithLogits.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Computes softmax cross entropy cost and gradients to backpropagate. @@ -33,7 +34,7 @@ * @param data type for {@code loss()} output */ @Operator(group = "nn") -public final class SoftmaxCrossEntropyWithLogits extends PrimitiveOp { +public final class SoftmaxCrossEntropyWithLogits extends PrimitiveOp { /** * Factory method to create a class wrapping a new SoftmaxCrossEntropyWithLogits operation. @@ -45,7 +46,7 @@ public final class SoftmaxCrossEntropyWithLogits extends Primi * probability distribution. * @return a new instance of SoftmaxCrossEntropyWithLogits */ - public static SoftmaxCrossEntropyWithLogits create(Scope scope, Operand features, Operand labels) { + public static SoftmaxCrossEntropyWithLogits create(Scope scope, Operand features, Operand labels) { OperationBuilder opBuilder = scope.env().opBuilder("SoftmaxCrossEntropyWithLogits", scope.makeOpName("SoftmaxCrossEntropyWithLogits")); opBuilder.addInput(features.asOutput()); opBuilder.addInput(labels.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Softsign.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Softsign.java index db48ffe4119..431819fb3da 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Softsign.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Softsign.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Computes softsign: `features / (abs(features) + 1)`. @@ -31,7 +32,7 @@ * @param data type for {@code activations()} output */ @Operator(group = "nn") -public final class Softsign extends PrimitiveOp implements Operand { +public final class Softsign extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new Softsign operation. @@ -40,7 +41,7 @@ public final class Softsign extends PrimitiveOp implements Ope * @param features * @return a new instance of Softsign */ - public static Softsign create(Scope scope, Operand features) { + public static Softsign create(Scope scope, Operand features) { OperationBuilder opBuilder = scope.env().opBuilder("Softsign", scope.makeOpName("Softsign")); opBuilder.addInput(features.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/SoftsignGrad.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/SoftsignGrad.java index dea4aaca7e1..26f0e4c55d0 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/SoftsignGrad.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/SoftsignGrad.java @@ -23,13 +23,14 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.family.TNumber; /** * Computes softsign gradients for a softsign operation. * * @param data type for {@code backprops()} output */ -public final class SoftsignGrad extends PrimitiveOp implements Operand { +public final class SoftsignGrad extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new SoftsignGrad operation. @@ -39,7 +40,7 @@ public final class SoftsignGrad extends PrimitiveOp implements * @param features The features passed as input to the corresponding softsign operation. * @return a new instance of SoftsignGrad */ - public static SoftsignGrad create(Scope scope, Operand gradients, Operand features) { + public static SoftsignGrad create(Scope scope, Operand gradients, Operand features) { OperationBuilder opBuilder = scope.env().opBuilder("SoftsignGrad", scope.makeOpName("SoftsignGrad")); opBuilder.addInput(gradients.asOutput()); opBuilder.addInput(features.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/SpaceToBatch.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/SpaceToBatch.java index bfe3fcca9cd..1017daee428 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/SpaceToBatch.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/SpaceToBatch.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * SpaceToBatch for 4-D tensors of type T. @@ -118,7 +119,7 @@ public final class SpaceToBatch extends PrimitiveOp implements Operand { * @param blockSize * @return a new instance of SpaceToBatch */ - public static SpaceToBatch create(Scope scope, Operand input, Operand paddings, Long blockSize) { + public static SpaceToBatch create(Scope scope, Operand input, Operand paddings, Long blockSize) { OperationBuilder opBuilder = scope.env().opBuilder("SpaceToBatch", scope.makeOpName("SpaceToBatch")); opBuilder.addInput(input.asOutput()); opBuilder.addInput(paddings.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/SparseSoftmaxCrossEntropyWithLogits.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/SparseSoftmaxCrossEntropyWithLogits.java index fd45de33ac1..191b7e87ef7 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/SparseSoftmaxCrossEntropyWithLogits.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/SparseSoftmaxCrossEntropyWithLogits.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Computes softmax cross entropy cost and gradients to backpropagate. @@ -38,7 +39,7 @@ * @param data type for {@code loss()} output */ @Operator(group = "nn") -public final class SparseSoftmaxCrossEntropyWithLogits extends PrimitiveOp { +public final class SparseSoftmaxCrossEntropyWithLogits extends PrimitiveOp { /** * Factory method to create a class wrapping a new SparseSoftmaxCrossEntropyWithLogits operation. @@ -49,7 +50,7 @@ public final class SparseSoftmaxCrossEntropyWithLogits extends * This is the label for the given minibatch entry. * @return a new instance of SparseSoftmaxCrossEntropyWithLogits */ - public static SparseSoftmaxCrossEntropyWithLogits create(Scope scope, Operand features, Operand labels) { + public static SparseSoftmaxCrossEntropyWithLogits create(Scope scope, Operand features, Operand labels) { OperationBuilder opBuilder = scope.env().opBuilder("SparseSoftmaxCrossEntropyWithLogits", scope.makeOpName("SparseSoftmaxCrossEntropyWithLogits")); opBuilder.addInput(features.asOutput()); opBuilder.addInput(labels.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/TopK.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/TopK.java index 6d4eab1b9b4..0d337d92f5c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/TopK.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/TopK.java @@ -24,6 +24,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.family.TNumber; /** * Finds values and indices of the `k` largest elements for the last dimension. @@ -42,7 +44,7 @@ * @param data type for {@code values()} output */ @Operator(group = "nn") -public final class TopK extends PrimitiveOp { +public final class TopK extends PrimitiveOp { /** * Optional attributes for {@link org.tensorflow.op.nn.TopK} @@ -74,7 +76,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of TopK */ - public static TopK create(Scope scope, Operand input, Operand k, Options... options) { + public static TopK create(Scope scope, Operand input, Operand k, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("TopKV2", scope.makeOpName("TopK")); opBuilder.addInput(input.asOutput()); opBuilder.addInput(k.asOutput()); @@ -107,12 +109,12 @@ public Output values() { /** * The indices of `values` within the last dimension of `input`. */ - public Output indices() { + public Output indices() { return indices; } private Output values; - private Output indices; + private Output indices; private TopK(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/quantization/Dequantize.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/quantization/Dequantize.java index 1d68f254080..2a923c6bcb9 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/quantization/Dequantize.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/quantization/Dequantize.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TFloat; /** * Dequantize the 'input' tensor into a float Tensor. @@ -97,7 +98,7 @@ * */ @Operator(group = "quantization") -public final class Dequantize extends PrimitiveOp implements Operand { +public final class Dequantize extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.quantization.Dequantize} @@ -128,7 +129,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of Dequantize */ - public static Dequantize create(Scope scope, Operand input, Operand minRange, Operand maxRange, Options... options) { + public static Dequantize create(Scope scope, Operand input, Operand minRange, Operand maxRange, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("Dequantize", scope.makeOpName("Dequantize")); opBuilder.addInput(input.asOutput()); opBuilder.addInput(minRange.asOutput()); @@ -153,16 +154,16 @@ public static Options mode(String mode) { /** */ - public Output output() { + public Output output() { return output; } @Override - public Output asOutput() { + public Output asOutput() { return output; } - private Output output; + private Output output; private Dequantize(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/quantization/FakeQuantWithMinMaxArgs.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/quantization/FakeQuantWithMinMaxArgs.java index 1a0311441b7..59607793e7e 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/quantization/FakeQuantWithMinMaxArgs.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/quantization/FakeQuantWithMinMaxArgs.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TFloat; /** * Fake-quantize the 'inputs' tensor, type float to 'outputs' tensor of same type. @@ -46,7 +47,7 @@ * Quantization is called fake since the output is still in floating point. */ @Operator(group = "quantization") -public final class FakeQuantWithMinMaxArgs extends PrimitiveOp implements Operand { +public final class FakeQuantWithMinMaxArgs extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.quantization.FakeQuantWithMinMaxArgs} @@ -102,7 +103,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of FakeQuantWithMinMaxArgs */ - public static FakeQuantWithMinMaxArgs create(Scope scope, Operand inputs, Options... options) { + public static FakeQuantWithMinMaxArgs create(Scope scope, Operand inputs, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("FakeQuantWithMinMaxArgs", scope.makeOpName("FakeQuantWithMinMaxArgs")); opBuilder.addInput(inputs.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); @@ -155,16 +156,16 @@ public static Options narrowRange(Boolean narrowRange) { /** */ - public Output outputs() { + public Output outputs() { return outputs; } @Override - public Output asOutput() { + public Output asOutput() { return outputs; } - private Output outputs; + private Output outputs; private FakeQuantWithMinMaxArgs(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/quantization/FakeQuantWithMinMaxArgsGradient.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/quantization/FakeQuantWithMinMaxArgsGradient.java index bdb51a899f0..dcd357a4674 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/quantization/FakeQuantWithMinMaxArgsGradient.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/quantization/FakeQuantWithMinMaxArgsGradient.java @@ -24,12 +24,13 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TFloat; /** * Compute gradients for a FakeQuantWithMinMaxArgs operation. */ @Operator(group = "quantization") -public final class FakeQuantWithMinMaxArgsGradient extends PrimitiveOp implements Operand { +public final class FakeQuantWithMinMaxArgsGradient extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.quantization.FakeQuantWithMinMaxArgsGradient} @@ -86,7 +87,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of FakeQuantWithMinMaxArgsGradient */ - public static FakeQuantWithMinMaxArgsGradient create(Scope scope, Operand gradients, Operand inputs, Options... options) { + public static FakeQuantWithMinMaxArgsGradient create(Scope scope, Operand gradients, Operand inputs, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("FakeQuantWithMinMaxArgsGradient", scope.makeOpName("FakeQuantWithMinMaxArgsGradient")); opBuilder.addInput(gradients.asOutput()); opBuilder.addInput(inputs.asOutput()); @@ -142,16 +143,16 @@ public static Options narrowRange(Boolean narrowRange) { * Backpropagated gradients below the FakeQuantWithMinMaxArgs operation: * `gradients * (inputs >= min && inputs <= max)`. */ - public Output backprops() { + public Output backprops() { return backprops; } @Override - public Output asOutput() { + public Output asOutput() { return backprops; } - private Output backprops; + private Output backprops; private FakeQuantWithMinMaxArgsGradient(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/quantization/FakeQuantWithMinMaxVars.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/quantization/FakeQuantWithMinMaxVars.java index ee6f4fd53e5..1227f9f370a 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/quantization/FakeQuantWithMinMaxVars.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/quantization/FakeQuantWithMinMaxVars.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TFloat; /** * Fake-quantize the 'inputs' tensor of type float via global float scalars `min` @@ -49,7 +50,7 @@ * values. */ @Operator(group = "quantization") -public final class FakeQuantWithMinMaxVars extends PrimitiveOp implements Operand { +public final class FakeQuantWithMinMaxVars extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.quantization.FakeQuantWithMinMaxVars} @@ -89,7 +90,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of FakeQuantWithMinMaxVars */ - public static FakeQuantWithMinMaxVars create(Scope scope, Operand inputs, Operand min, Operand max, Options... options) { + public static FakeQuantWithMinMaxVars create(Scope scope, Operand inputs, Operand min, Operand max, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("FakeQuantWithMinMaxVars", scope.makeOpName("FakeQuantWithMinMaxVars")); opBuilder.addInput(inputs.asOutput()); opBuilder.addInput(min.asOutput()); @@ -124,16 +125,16 @@ public static Options narrowRange(Boolean narrowRange) { /** */ - public Output outputs() { + public Output outputs() { return outputs; } @Override - public Output asOutput() { + public Output asOutput() { return outputs; } - private Output outputs; + private Output outputs; private FakeQuantWithMinMaxVars(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/quantization/FakeQuantWithMinMaxVarsGradient.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/quantization/FakeQuantWithMinMaxVarsGradient.java index e5b721b2fec..2dd91ba0a1f 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/quantization/FakeQuantWithMinMaxVarsGradient.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/quantization/FakeQuantWithMinMaxVarsGradient.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TFloat; /** * Compute gradients for a FakeQuantWithMinMaxVars operation. @@ -71,7 +72,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of FakeQuantWithMinMaxVarsGradient */ - public static FakeQuantWithMinMaxVarsGradient create(Scope scope, Operand gradients, Operand inputs, Operand min, Operand max, Options... options) { + public static FakeQuantWithMinMaxVarsGradient create(Scope scope, Operand gradients, Operand inputs, Operand min, Operand max, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("FakeQuantWithMinMaxVarsGradient", scope.makeOpName("FakeQuantWithMinMaxVarsGradient")); opBuilder.addInput(gradients.asOutput()); opBuilder.addInput(inputs.asOutput()); @@ -109,7 +110,7 @@ public static Options narrowRange(Boolean narrowRange) { * Backpropagated gradients w.r.t. inputs: * `gradients * (inputs >= min && inputs <= max)`. */ - public Output backpropsWrtInput() { + public Output backpropsWrtInput() { return backpropsWrtInput; } @@ -117,7 +118,7 @@ public Output backpropsWrtInput() { * Backpropagated gradients w.r.t. min parameter: * `sum(gradients * (inputs < min))`. */ - public Output backpropWrtMin() { + public Output backpropWrtMin() { return backpropWrtMin; } @@ -125,13 +126,13 @@ public Output backpropWrtMin() { * Backpropagated gradients w.r.t. max parameter: * `sum(gradients * (inputs > max))`. */ - public Output backpropWrtMax() { + public Output backpropWrtMax() { return backpropWrtMax; } - private Output backpropsWrtInput; - private Output backpropWrtMin; - private Output backpropWrtMax; + private Output backpropsWrtInput; + private Output backpropWrtMin; + private Output backpropWrtMax; private FakeQuantWithMinMaxVarsGradient(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/quantization/FakeQuantWithMinMaxVarsPerChannel.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/quantization/FakeQuantWithMinMaxVarsPerChannel.java index 1e8b3851075..1f687df4a6c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/quantization/FakeQuantWithMinMaxVarsPerChannel.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/quantization/FakeQuantWithMinMaxVarsPerChannel.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TFloat; /** * Fake-quantize the 'inputs' tensor of type float and one of the shapes: `[d]`, @@ -50,7 +51,7 @@ * values. */ @Operator(group = "quantization") -public final class FakeQuantWithMinMaxVarsPerChannel extends PrimitiveOp implements Operand { +public final class FakeQuantWithMinMaxVarsPerChannel extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.quantization.FakeQuantWithMinMaxVarsPerChannel} @@ -90,7 +91,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of FakeQuantWithMinMaxVarsPerChannel */ - public static FakeQuantWithMinMaxVarsPerChannel create(Scope scope, Operand inputs, Operand min, Operand max, Options... options) { + public static FakeQuantWithMinMaxVarsPerChannel create(Scope scope, Operand inputs, Operand min, Operand max, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("FakeQuantWithMinMaxVarsPerChannel", scope.makeOpName("FakeQuantWithMinMaxVarsPerChannel")); opBuilder.addInput(inputs.asOutput()); opBuilder.addInput(min.asOutput()); @@ -125,16 +126,16 @@ public static Options narrowRange(Boolean narrowRange) { /** */ - public Output outputs() { + public Output outputs() { return outputs; } @Override - public Output asOutput() { + public Output asOutput() { return outputs; } - private Output outputs; + private Output outputs; private FakeQuantWithMinMaxVarsPerChannel(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/quantization/FakeQuantWithMinMaxVarsPerChannelGradient.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/quantization/FakeQuantWithMinMaxVarsPerChannelGradient.java index 2b45b700de3..44ceddd379c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/quantization/FakeQuantWithMinMaxVarsPerChannelGradient.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/quantization/FakeQuantWithMinMaxVarsPerChannelGradient.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TFloat; /** * Compute gradients for a FakeQuantWithMinMaxVarsPerChannel operation. @@ -73,7 +74,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of FakeQuantWithMinMaxVarsPerChannelGradient */ - public static FakeQuantWithMinMaxVarsPerChannelGradient create(Scope scope, Operand gradients, Operand inputs, Operand min, Operand max, Options... options) { + public static FakeQuantWithMinMaxVarsPerChannelGradient create(Scope scope, Operand gradients, Operand inputs, Operand min, Operand max, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("FakeQuantWithMinMaxVarsPerChannelGradient", scope.makeOpName("FakeQuantWithMinMaxVarsPerChannelGradient")); opBuilder.addInput(gradients.asOutput()); opBuilder.addInput(inputs.asOutput()); @@ -112,7 +113,7 @@ public static Options narrowRange(Boolean narrowRange) { * `inputs`: * `gradients * (inputs >= min && inputs <= max)`. */ - public Output backpropsWrtInput() { + public Output backpropsWrtInput() { return backpropsWrtInput; } @@ -120,7 +121,7 @@ public Output backpropsWrtInput() { * Backpropagated gradients w.r.t. min parameter, shape `[d]`: * `sum_per_d(gradients * (inputs < min))`. */ - public Output backpropWrtMin() { + public Output backpropWrtMin() { return backpropWrtMin; } @@ -128,13 +129,13 @@ public Output backpropWrtMin() { * Backpropagated gradients w.r.t. max parameter, shape `[d]`: * `sum_per_d(gradients * (inputs > max))`. */ - public Output backpropWrtMax() { + public Output backpropWrtMax() { return backpropWrtMax; } - private Output backpropsWrtInput; - private Output backpropWrtMin; - private Output backpropWrtMax; + private Output backpropsWrtInput; + private Output backpropWrtMin; + private Output backpropWrtMax; private FakeQuantWithMinMaxVarsPerChannelGradient(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/quantization/Quantize.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/quantization/Quantize.java index 652ec6892fb..88992fbd375 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/quantization/Quantize.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/quantization/Quantize.java @@ -25,6 +25,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TFloat; /** * Quantize the 'input' tensor of type float to 'output' tensor of type 'T'. @@ -158,13 +159,13 @@ private Options() { * @param options carries optional attributes values * @return a new instance of Quantize */ - public static Quantize create(Scope scope, Operand input, Operand minRange, Operand maxRange, Class T, Options... options) { + public static Quantize create(Scope scope, Operand input, Operand minRange, Operand maxRange, DataType T, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("QuantizeV2", scope.makeOpName("Quantize")); opBuilder.addInput(input.asOutput()); opBuilder.addInput(minRange.asOutput()); opBuilder.addInput(maxRange.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); - opBuilder.setAttr("T", DataType.fromClass(T)); + opBuilder.setAttr("T", T); if (options != null) { for (Options opts : options) { if (opts.mode != null) { @@ -202,20 +203,20 @@ public Output output() { /** * The actual minimum scalar value used for the output. */ - public Output outputMin() { + public Output outputMin() { return outputMin; } /** * The actual maximum scalar value used for the output. */ - public Output outputMax() { + public Output outputMax() { return outputMax; } private Output output; - private Output outputMin; - private Output outputMax; + private Output outputMin; + private Output outputMax; private Quantize(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/quantization/QuantizeAndDequantize.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/quantization/QuantizeAndDequantize.java index b30c73db39e..a65605a113e 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/quantization/QuantizeAndDequantize.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/quantization/QuantizeAndDequantize.java @@ -24,6 +24,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.family.TNumber; /** * Quantizes then dequantizes a tensor. @@ -34,7 +36,7 @@ * @param data type for {@code output()} output */ @Operator(group = "quantization") -public final class QuantizeAndDequantize extends PrimitiveOp implements Operand { +public final class QuantizeAndDequantize extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.quantization.QuantizeAndDequantize} @@ -84,7 +86,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of QuantizeAndDequantize */ - public static QuantizeAndDequantize create(Scope scope, Operand input, Operand inputMin, Operand inputMax, Operand numBits, Options... options) { + public static QuantizeAndDequantize create(Scope scope, Operand input, Operand inputMin, Operand inputMax, Operand numBits, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("QuantizeAndDequantizeV3", scope.makeOpName("QuantizeAndDequantize")); opBuilder.addInput(input.asOutput()); opBuilder.addInput(inputMin.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/quantization/QuantizeDownAndShrinkRange.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/quantization/QuantizeDownAndShrinkRange.java index 15bd1a9b32d..fc25610a10a 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/quantization/QuantizeDownAndShrinkRange.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/quantization/QuantizeDownAndShrinkRange.java @@ -25,6 +25,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TFloat; /** * Convert the quantized 'input' tensor into a lower-precision 'output', using the @@ -67,13 +68,13 @@ public final class QuantizeDownAndShrinkRange extends PrimitiveOp { * @param outType The type of the output. Should be a lower bit depth than Tinput. * @return a new instance of QuantizeDownAndShrinkRange */ - public static QuantizeDownAndShrinkRange create(Scope scope, Operand input, Operand inputMin, Operand inputMax, Class outType) { + public static QuantizeDownAndShrinkRange create(Scope scope, Operand input, Operand inputMin, Operand inputMax, DataType outType) { OperationBuilder opBuilder = scope.env().opBuilder("QuantizeDownAndShrinkRange", scope.makeOpName("QuantizeDownAndShrinkRange")); opBuilder.addInput(input.asOutput()); opBuilder.addInput(inputMin.asOutput()); opBuilder.addInput(inputMax.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); - opBuilder.setAttr("out_type", DataType.fromClass(outType)); + opBuilder.setAttr("out_type", outType); return new QuantizeDownAndShrinkRange(opBuilder.build()); } @@ -86,20 +87,20 @@ public Output output() { /** * The float value that the minimum quantized output value represents. */ - public Output outputMin() { + public Output outputMin() { return outputMin; } /** * The float value that the maximum quantized output value represents. */ - public Output outputMax() { + public Output outputMax() { return outputMax; } private Output output; - private Output outputMin; - private Output outputMax; + private Output outputMin; + private Output outputMax; private QuantizeDownAndShrinkRange(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/quantization/RequantizationRange.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/quantization/RequantizationRange.java index 7bc74021a7b..212f5cc6bb0 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/quantization/RequantizationRange.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/quantization/RequantizationRange.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TFloat; /** * Computes a range that covers the actual values present in a quantized tensor. @@ -45,7 +46,7 @@ public final class RequantizationRange extends PrimitiveOp { * @param inputMax The float value that the maximum quantized input value represents. * @return a new instance of RequantizationRange */ - public static RequantizationRange create(Scope scope, Operand input, Operand inputMin, Operand inputMax) { + public static RequantizationRange create(Scope scope, Operand input, Operand inputMin, Operand inputMax) { OperationBuilder opBuilder = scope.env().opBuilder("RequantizationRange", scope.makeOpName("RequantizationRange")); opBuilder.addInput(input.asOutput()); opBuilder.addInput(inputMin.asOutput()); @@ -57,19 +58,19 @@ public static RequantizationRange create(Scope scope, Operand input, Oper /** * The computed min output. */ - public Output outputMin() { + public Output outputMin() { return outputMin; } /** * the computed max output. */ - public Output outputMax() { + public Output outputMax() { return outputMax; } - private Output outputMin; - private Output outputMax; + private Output outputMin; + private Output outputMax; private RequantizationRange(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/quantization/Requantize.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/quantization/Requantize.java index ff32f7d3305..8295349db46 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/quantization/Requantize.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/quantization/Requantize.java @@ -25,6 +25,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TFloat; /** * Converts the quantized `input` tensor into a lower-precision `output`. @@ -54,7 +55,7 @@ public final class Requantize extends PrimitiveOp { * @param outType The type of the output. Should be a lower bit depth than Tinput. * @return a new instance of Requantize */ - public static Requantize create(Scope scope, Operand input, Operand inputMin, Operand inputMax, Operand requestedOutputMin, Operand requestedOutputMax, Class outType) { + public static Requantize create(Scope scope, Operand input, Operand inputMin, Operand inputMax, Operand requestedOutputMin, Operand requestedOutputMax, DataType outType) { OperationBuilder opBuilder = scope.env().opBuilder("Requantize", scope.makeOpName("Requantize")); opBuilder.addInput(input.asOutput()); opBuilder.addInput(inputMin.asOutput()); @@ -62,7 +63,7 @@ public static Requantize create(Scope scope, Operand input, Operand opBuilder.addInput(requestedOutputMin.asOutput()); opBuilder.addInput(requestedOutputMax.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); - opBuilder.setAttr("out_type", DataType.fromClass(outType)); + opBuilder.setAttr("out_type", outType); return new Requantize(opBuilder.build()); } @@ -75,20 +76,20 @@ public Output output() { /** * The requested_output_min value is copied into this output. */ - public Output outputMin() { + public Output outputMin() { return outputMin; } /** * The requested_output_max value is copied into this output. */ - public Output outputMax() { + public Output outputMax() { return outputMax; } private Output output; - private Output outputMin; - private Output outputMax; + private Output outputMin; + private Output outputMax; private Requantize(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/AllCandidateSampler.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/AllCandidateSampler.java index 20a6c7236fb..c48efbc5b81 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/AllCandidateSampler.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/AllCandidateSampler.java @@ -24,6 +24,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TFloat; +import org.tensorflow.types.TInt64; /** * Generates labels for candidate sampling with a learned unigram distribution. @@ -85,7 +87,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of AllCandidateSampler */ - public static AllCandidateSampler create(Scope scope, Operand trueClasses, Long numTrue, Long numSampled, Boolean unique, Options... options) { + public static AllCandidateSampler create(Scope scope, Operand trueClasses, Long numTrue, Long numSampled, Boolean unique, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("AllCandidateSampler", scope.makeOpName("AllCandidateSampler")); opBuilder.addInput(trueClasses.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); @@ -125,7 +127,7 @@ public static Options seed2(Long seed2) { * A vector of length num_sampled, in which each element is * the ID of a sampled candidate. */ - public Output sampledCandidates() { + public Output sampledCandidates() { return sampledCandidates; } @@ -134,7 +136,7 @@ public Output sampledCandidates() { * the number of times each candidate is expected to occur in a batch * of sampled candidates. If unique=true, then this is a probability. */ - public Output trueExpectedCount() { + public Output trueExpectedCount() { return trueExpectedCount; } @@ -144,13 +146,13 @@ public Output trueExpectedCount() { * to occur in a batch of sampled candidates. If unique=true, then this is a * probability. */ - public Output sampledExpectedCount() { + public Output sampledExpectedCount() { return sampledExpectedCount; } - private Output sampledCandidates; - private Output trueExpectedCount; - private Output sampledExpectedCount; + private Output sampledCandidates; + private Output trueExpectedCount; + private Output sampledExpectedCount; private AllCandidateSampler(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/LogUniformCandidateSampler.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/LogUniformCandidateSampler.java index 2c29adc26a4..7388ba3f8ae 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/LogUniformCandidateSampler.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/LogUniformCandidateSampler.java @@ -24,6 +24,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TFloat; +import org.tensorflow.types.TInt64; /** * Generates labels for candidate sampling with a log-uniform distribution. @@ -86,7 +88,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of LogUniformCandidateSampler */ - public static LogUniformCandidateSampler create(Scope scope, Operand trueClasses, Long numTrue, Long numSampled, Boolean unique, Long rangeMax, Options... options) { + public static LogUniformCandidateSampler create(Scope scope, Operand trueClasses, Long numTrue, Long numSampled, Boolean unique, Long rangeMax, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("LogUniformCandidateSampler", scope.makeOpName("LogUniformCandidateSampler")); opBuilder.addInput(trueClasses.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); @@ -127,7 +129,7 @@ public static Options seed2(Long seed2) { * A vector of length num_sampled, in which each element is * the ID of a sampled candidate. */ - public Output sampledCandidates() { + public Output sampledCandidates() { return sampledCandidates; } @@ -136,7 +138,7 @@ public Output sampledCandidates() { * the number of times each candidate is expected to occur in a batch * of sampled candidates. If unique=true, then this is a probability. */ - public Output trueExpectedCount() { + public Output trueExpectedCount() { return trueExpectedCount; } @@ -146,13 +148,13 @@ public Output trueExpectedCount() { * to occur in a batch of sampled candidates. If unique=true, then this is a * probability. */ - public Output sampledExpectedCount() { + public Output sampledExpectedCount() { return sampledExpectedCount; } - private Output sampledCandidates; - private Output trueExpectedCount; - private Output sampledExpectedCount; + private Output sampledCandidates; + private Output trueExpectedCount; + private Output sampledExpectedCount; private LogUniformCandidateSampler(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/Multinomial.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/Multinomial.java index 15b05300e00..2f64a58d8dd 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/Multinomial.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/Multinomial.java @@ -25,6 +25,9 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.TInt64; +import org.tensorflow.types.family.TNumber; /** * Draws samples from a multinomial distribution. @@ -32,7 +35,7 @@ * @param data type for {@code output()} output */ @Operator(group = "random") -public final class Multinomial extends PrimitiveOp implements Operand { +public final class Multinomial extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.random.Multinomial} @@ -74,12 +77,12 @@ private Options() { * @param options carries optional attributes values * @return a new instance of Multinomial */ - public static Multinomial create(Scope scope, Operand logits, Operand numSamples, Class outputDtype, Options... options) { + public static Multinomial create(Scope scope, Operand logits, Operand numSamples, DataType outputDtype, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("Multinomial", scope.makeOpName("Multinomial")); opBuilder.addInput(logits.asOutput()); opBuilder.addInput(numSamples.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); - opBuilder.setAttr("output_dtype", DataType.fromClass(outputDtype)); + opBuilder.setAttr("output_dtype", outputDtype); if (options != null) { for (Options opts : options) { if (opts.seed != null) { @@ -103,8 +106,8 @@ public static Multinomial create(Scope s * @param options carries optional attributes values * @return a new instance of Multinomial */ - public static Multinomial create(Scope scope, Operand logits, Operand numSamples, Options... options) { - return create(scope, logits, numSamples, Long.class, options); + public static Multinomial create(Scope scope, Operand logits, Operand numSamples, Options... options) { + return create(scope, logits, numSamples, TInt64.DTYPE, options); } /** diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/ParameterizedTruncatedNormal.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/ParameterizedTruncatedNormal.java index 03b91c7435e..49f08267d72 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/ParameterizedTruncatedNormal.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/ParameterizedTruncatedNormal.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Outputs random values from a normal distribution. The parameters may each be a @@ -34,7 +35,7 @@ * @param data type for {@code output()} output */ @Operator(group = "random") -public final class ParameterizedTruncatedNormal extends PrimitiveOp implements Operand { +public final class ParameterizedTruncatedNormal extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.random.ParameterizedTruncatedNormal} @@ -79,7 +80,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of ParameterizedTruncatedNormal */ - public static ParameterizedTruncatedNormal create(Scope scope, Operand shape, Operand means, Operand stdevs, Operand minvals, Operand maxvals, Options... options) { + public static ParameterizedTruncatedNormal create(Scope scope, Operand shape, Operand means, Operand stdevs, Operand minvals, Operand maxvals, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("ParameterizedTruncatedNormal", scope.makeOpName("ParameterizedTruncatedNormal")); opBuilder.addInput(shape.asOutput()); opBuilder.addInput(means.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/RandomGamma.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/RandomGamma.java index bbb073aa4cb..711d1c4f738 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/RandomGamma.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/RandomGamma.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Outputs random values from the Gamma distribution(s) described by alpha. @@ -35,7 +36,7 @@ * @param data type for {@code output()} output */ @Operator(group = "random") -public final class RandomGamma extends PrimitiveOp implements Operand { +public final class RandomGamma extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.random.RandomGamma} @@ -78,7 +79,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of RandomGamma */ - public static RandomGamma create(Scope scope, Operand shape, Operand alpha, Options... options) { + public static RandomGamma create(Scope scope, Operand shape, Operand alpha, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("RandomGamma", scope.makeOpName("RandomGamma")); opBuilder.addInput(shape.asOutput()); opBuilder.addInput(alpha.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/RandomGammaGrad.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/RandomGammaGrad.java index 37aa663268c..865e8a81d02 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/RandomGammaGrad.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/RandomGammaGrad.java @@ -23,13 +23,14 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.family.TNumber; /** * Computes the derivative of a Gamma random sample w.r.t. `alpha`. * * @param data type for {@code output()} output */ -public final class RandomGammaGrad extends PrimitiveOp implements Operand { +public final class RandomGammaGrad extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new RandomGammaGrad operation. @@ -39,7 +40,7 @@ public final class RandomGammaGrad extends PrimitiveOp impleme * @param sample * @return a new instance of RandomGammaGrad */ - public static RandomGammaGrad create(Scope scope, Operand alpha, Operand sample) { + public static RandomGammaGrad create(Scope scope, Operand alpha, Operand sample) { OperationBuilder opBuilder = scope.env().opBuilder("RandomGammaGrad", scope.makeOpName("RandomGammaGrad")); opBuilder.addInput(alpha.asOutput()); opBuilder.addInput(sample.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/RandomPoisson.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/RandomPoisson.java index f6a0cf8b093..51b684687f6 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/RandomPoisson.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/RandomPoisson.java @@ -25,6 +25,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt64; +import org.tensorflow.types.family.TNumber; /** * Outputs random values from the Poisson distribution(s) described by rate. @@ -42,7 +44,7 @@ * @param data type for {@code output()} output */ @Operator(group = "random") -public final class RandomPoisson extends PrimitiveOp implements Operand { +public final class RandomPoisson extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.random.RandomPoisson} @@ -86,12 +88,12 @@ private Options() { * @param options carries optional attributes values * @return a new instance of RandomPoisson */ - public static RandomPoisson create(Scope scope, Operand shape, Operand rate, Class dtype, Options... options) { + public static RandomPoisson create(Scope scope, Operand shape, Operand rate, DataType dtype, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("RandomPoissonV2", scope.makeOpName("RandomPoisson")); opBuilder.addInput(shape.asOutput()); opBuilder.addInput(rate.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); - opBuilder.setAttr("dtype", DataType.fromClass(dtype)); + opBuilder.setAttr("dtype", dtype); if (options != null) { for (Options opts : options) { if (opts.seed != null) { @@ -116,8 +118,8 @@ public static RandomPoiss * @param options carries optional attributes values * @return a new instance of RandomPoisson */ - public static RandomPoisson create(Scope scope, Operand shape, Operand rate, Options... options) { - return create(scope, shape, rate, Long.class, options); + public static RandomPoisson create(Scope scope, Operand shape, Operand rate, Options... options) { + return create(scope, shape, rate, TInt64.DTYPE, options); } /** diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/RandomStandardNormal.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/RandomStandardNormal.java index d9d226193f2..337fec78ce0 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/RandomStandardNormal.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/RandomStandardNormal.java @@ -25,6 +25,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Outputs random values from a normal distribution. @@ -34,7 +35,7 @@ * @param data type for {@code output()} output */ @Operator(group = "random") -public final class RandomStandardNormal extends PrimitiveOp implements Operand { +public final class RandomStandardNormal extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.random.RandomStandardNormal} @@ -75,11 +76,11 @@ private Options() { * @param options carries optional attributes values * @return a new instance of RandomStandardNormal */ - public static RandomStandardNormal create(Scope scope, Operand shape, Class dtype, Options... options) { + public static RandomStandardNormal create(Scope scope, Operand shape, DataType dtype, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("RandomStandardNormal", scope.makeOpName("RandomStandardNormal")); opBuilder.addInput(shape.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); - opBuilder.setAttr("dtype", DataType.fromClass(dtype)); + opBuilder.setAttr("dtype", dtype); if (options != null) { for (Options opts : options) { if (opts.seed != null) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/RandomUniform.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/RandomUniform.java index 25df799cc73..b7588026fed 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/RandomUniform.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/RandomUniform.java @@ -25,6 +25,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Outputs random values from a uniform distribution. @@ -35,7 +36,7 @@ * @param data type for {@code output()} output */ @Operator(group = "random") -public final class RandomUniform extends PrimitiveOp implements Operand { +public final class RandomUniform extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.random.RandomUniform} @@ -76,11 +77,11 @@ private Options() { * @param options carries optional attributes values * @return a new instance of RandomUniform */ - public static RandomUniform create(Scope scope, Operand shape, Class dtype, Options... options) { + public static RandomUniform create(Scope scope, Operand shape, DataType dtype, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("RandomUniform", scope.makeOpName("RandomUniform")); opBuilder.addInput(shape.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); - opBuilder.setAttr("dtype", DataType.fromClass(dtype)); + opBuilder.setAttr("dtype", dtype); if (options != null) { for (Options opts : options) { if (opts.seed != null) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/RandomUniformInt.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/RandomUniformInt.java index 07044d19575..f84e5ee6e2b 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/RandomUniformInt.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/RandomUniformInt.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Outputs random integers from a uniform distribution. @@ -39,7 +40,7 @@ * @param data type for {@code output()} output */ @Operator(group = "random") -public final class RandomUniformInt extends PrimitiveOp implements Operand { +public final class RandomUniformInt extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.random.RandomUniformInt} @@ -81,7 +82,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of RandomUniformInt */ - public static RandomUniformInt create(Scope scope, Operand shape, Operand minval, Operand maxval, Options... options) { + public static RandomUniformInt create(Scope scope, Operand shape, Operand minval, Operand maxval, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("RandomUniformInt", scope.makeOpName("RandomUniformInt")); opBuilder.addInput(shape.asOutput()); opBuilder.addInput(minval.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/RecordInput.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/RecordInput.java index f114a2a0f84..058a88ddd95 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/RecordInput.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/RecordInput.java @@ -24,12 +24,13 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TString; /** * Emits randomized records. */ @Operator(group = "random") -public final class RecordInput extends PrimitiveOp implements Operand { +public final class RecordInput extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.random.RecordInput} @@ -181,16 +182,16 @@ public static Options compressionType(String compressionType) { /** * A tensor of shape [batch_size]. */ - public Output records() { + public Output records() { return records; } @Override - public Output asOutput() { + public Output asOutput() { return records; } - private Output records; + private Output records; private RecordInput(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/StatelessMultinomial.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/StatelessMultinomial.java index 1bdf6b9343c..6265ded4b72 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/StatelessMultinomial.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/StatelessMultinomial.java @@ -25,6 +25,9 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.TInt64; +import org.tensorflow.types.family.TNumber; /** * Draws samples from a multinomial distribution. @@ -32,7 +35,7 @@ * @param data type for {@code output()} output */ @Operator(group = "random") -public final class StatelessMultinomial extends PrimitiveOp implements Operand { +public final class StatelessMultinomial extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new StatelessMultinomial operation. @@ -45,13 +48,13 @@ public final class StatelessMultinomial extends PrimitiveOp im * @param outputDtype * @return a new instance of StatelessMultinomial */ - public static StatelessMultinomial create(Scope scope, Operand logits, Operand numSamples, Operand seed, Class outputDtype) { + public static StatelessMultinomial create(Scope scope, Operand logits, Operand numSamples, Operand seed, DataType outputDtype) { OperationBuilder opBuilder = scope.env().opBuilder("StatelessMultinomial", scope.makeOpName("StatelessMultinomial")); opBuilder.addInput(logits.asOutput()); opBuilder.addInput(numSamples.asOutput()); opBuilder.addInput(seed.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); - opBuilder.setAttr("output_dtype", DataType.fromClass(outputDtype)); + opBuilder.setAttr("output_dtype", outputDtype); return new StatelessMultinomial(opBuilder.build()); } @@ -65,8 +68,8 @@ public static StatelessMu * @param seed 2 seeds (shape [2]). * @return a new instance of StatelessMultinomial */ - public static StatelessMultinomial create(Scope scope, Operand logits, Operand numSamples, Operand seed) { - return create(scope, logits, numSamples, seed, Long.class); + public static StatelessMultinomial create(Scope scope, Operand logits, Operand numSamples, Operand seed) { + return create(scope, logits, numSamples, seed, TInt64.DTYPE); } /** diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/StatelessRandomNormal.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/StatelessRandomNormal.java index 0df4d6ea355..7850ca529a3 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/StatelessRandomNormal.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/StatelessRandomNormal.java @@ -25,6 +25,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TFloat; +import org.tensorflow.types.family.TNumber; /** * Outputs deterministic pseudorandom values from a normal distribution. @@ -36,7 +38,7 @@ * @param data type for {@code output()} output */ @Operator(group = "random") -public final class StatelessRandomNormal extends PrimitiveOp implements Operand { +public final class StatelessRandomNormal extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new StatelessRandomNormal operation. @@ -47,12 +49,12 @@ public final class StatelessRandomNormal extends PrimitiveOp i * @param dtype The type of the output. * @return a new instance of StatelessRandomNormal */ - public static StatelessRandomNormal create(Scope scope, Operand shape, Operand seed, Class dtype) { + public static StatelessRandomNormal create(Scope scope, Operand shape, Operand seed, DataType dtype) { OperationBuilder opBuilder = scope.env().opBuilder("StatelessRandomNormal", scope.makeOpName("StatelessRandomNormal")); opBuilder.addInput(shape.asOutput()); opBuilder.addInput(seed.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); - opBuilder.setAttr("dtype", DataType.fromClass(dtype)); + opBuilder.setAttr("dtype", dtype); return new StatelessRandomNormal(opBuilder.build()); } @@ -64,8 +66,8 @@ public static StatelessRa * @param seed 2 seeds (shape [2]). * @return a new instance of StatelessRandomNormal */ - public static StatelessRandomNormal create(Scope scope, Operand shape, Operand seed) { - return create(scope, shape, seed, Float.class); + public static StatelessRandomNormal create(Scope scope, Operand shape, Operand seed) { + return create(scope, shape, seed, TFloat.DTYPE); } /** diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/StatelessRandomUniform.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/StatelessRandomUniform.java index 95ff7c62786..650eae88017 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/StatelessRandomUniform.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/StatelessRandomUniform.java @@ -25,6 +25,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TFloat; +import org.tensorflow.types.family.TNumber; /** * Outputs deterministic pseudorandom random values from a uniform distribution. @@ -37,7 +39,7 @@ * @param data type for {@code output()} output */ @Operator(group = "random") -public final class StatelessRandomUniform extends PrimitiveOp implements Operand { +public final class StatelessRandomUniform extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new StatelessRandomUniform operation. @@ -48,12 +50,12 @@ public final class StatelessRandomUniform extends PrimitiveOp * @param dtype The type of the output. * @return a new instance of StatelessRandomUniform */ - public static StatelessRandomUniform create(Scope scope, Operand shape, Operand seed, Class dtype) { + public static StatelessRandomUniform create(Scope scope, Operand shape, Operand seed, DataType dtype) { OperationBuilder opBuilder = scope.env().opBuilder("StatelessRandomUniform", scope.makeOpName("StatelessRandomUniform")); opBuilder.addInput(shape.asOutput()); opBuilder.addInput(seed.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); - opBuilder.setAttr("dtype", DataType.fromClass(dtype)); + opBuilder.setAttr("dtype", dtype); return new StatelessRandomUniform(opBuilder.build()); } @@ -65,8 +67,8 @@ public static StatelessRa * @param seed 2 seeds (shape [2]). * @return a new instance of StatelessRandomUniform */ - public static StatelessRandomUniform create(Scope scope, Operand shape, Operand seed) { - return create(scope, shape, seed, Float.class); + public static StatelessRandomUniform create(Scope scope, Operand shape, Operand seed) { + return create(scope, shape, seed, TFloat.DTYPE); } /** diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/StatelessRandomUniformInt.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/StatelessRandomUniformInt.java index 5a77fed170a..8a7f32d113a 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/StatelessRandomUniformInt.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/StatelessRandomUniformInt.java @@ -23,6 +23,7 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.family.TNumber; /** * Outputs deterministic pseudorandom random integers from a uniform distribution. @@ -33,7 +34,7 @@ * * @param data type for {@code output()} output */ -public final class StatelessRandomUniformInt extends PrimitiveOp implements Operand { +public final class StatelessRandomUniformInt extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new StatelessRandomUniformInt operation. @@ -45,7 +46,7 @@ public final class StatelessRandomUniformInt extends Primitive * @param maxval Maximum value (exclusive, scalar). * @return a new instance of StatelessRandomUniformInt */ - public static StatelessRandomUniformInt create(Scope scope, Operand shape, Operand seed, Operand minval, Operand maxval) { + public static StatelessRandomUniformInt create(Scope scope, Operand shape, Operand seed, Operand minval, Operand maxval) { OperationBuilder opBuilder = scope.env().opBuilder("StatelessRandomUniformInt", scope.makeOpName("StatelessRandomUniformInt")); opBuilder.addInput(shape.asOutput()); opBuilder.addInput(seed.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/StatelessTruncatedNormal.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/StatelessTruncatedNormal.java index bd0003ff606..5a6582fd9bc 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/StatelessTruncatedNormal.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/StatelessTruncatedNormal.java @@ -25,6 +25,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TFloat; +import org.tensorflow.types.family.TNumber; /** * Outputs deterministic pseudorandom values from a truncated normal distribution. @@ -38,7 +40,7 @@ * @param data type for {@code output()} output */ @Operator(group = "random") -public final class StatelessTruncatedNormal extends PrimitiveOp implements Operand { +public final class StatelessTruncatedNormal extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new StatelessTruncatedNormal operation. @@ -49,12 +51,12 @@ public final class StatelessTruncatedNormal extends PrimitiveO * @param dtype The type of the output. * @return a new instance of StatelessTruncatedNormal */ - public static StatelessTruncatedNormal create(Scope scope, Operand shape, Operand seed, Class dtype) { + public static StatelessTruncatedNormal create(Scope scope, Operand shape, Operand seed, DataType dtype) { OperationBuilder opBuilder = scope.env().opBuilder("StatelessTruncatedNormal", scope.makeOpName("StatelessTruncatedNormal")); opBuilder.addInput(shape.asOutput()); opBuilder.addInput(seed.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); - opBuilder.setAttr("dtype", DataType.fromClass(dtype)); + opBuilder.setAttr("dtype", dtype); return new StatelessTruncatedNormal(opBuilder.build()); } @@ -66,8 +68,8 @@ public static StatelessTr * @param seed 2 seeds (shape [2]). * @return a new instance of StatelessTruncatedNormal */ - public static StatelessTruncatedNormal create(Scope scope, Operand shape, Operand seed) { - return create(scope, shape, seed, Float.class); + public static StatelessTruncatedNormal create(Scope scope, Operand shape, Operand seed) { + return create(scope, shape, seed, TFloat.DTYPE); } /** diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/TruncatedNormal.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/TruncatedNormal.java index a34b1b25c2e..1d8fb2676e2 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/TruncatedNormal.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/TruncatedNormal.java @@ -25,6 +25,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Outputs random values from a truncated normal distribution. @@ -36,7 +37,7 @@ * @param data type for {@code output()} output */ @Operator(group = "random") -public final class TruncatedNormal extends PrimitiveOp implements Operand { +public final class TruncatedNormal extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.random.TruncatedNormal} @@ -77,11 +78,11 @@ private Options() { * @param options carries optional attributes values * @return a new instance of TruncatedNormal */ - public static TruncatedNormal create(Scope scope, Operand shape, Class dtype, Options... options) { + public static TruncatedNormal create(Scope scope, Operand shape, DataType dtype, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("TruncatedNormal", scope.makeOpName("TruncatedNormal")); opBuilder.addInput(shape.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); - opBuilder.setAttr("dtype", DataType.fromClass(dtype)); + opBuilder.setAttr("dtype", dtype); if (options != null) { for (Options opts : options) { if (opts.seed != null) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/UniformCandidateSampler.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/UniformCandidateSampler.java index 077eee151f6..d800efbe92c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/UniformCandidateSampler.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/UniformCandidateSampler.java @@ -24,6 +24,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TFloat; +import org.tensorflow.types.TInt64; /** * Generates labels for candidate sampling with a uniform distribution. @@ -86,7 +88,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of UniformCandidateSampler */ - public static UniformCandidateSampler create(Scope scope, Operand trueClasses, Long numTrue, Long numSampled, Boolean unique, Long rangeMax, Options... options) { + public static UniformCandidateSampler create(Scope scope, Operand trueClasses, Long numTrue, Long numSampled, Boolean unique, Long rangeMax, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("UniformCandidateSampler", scope.makeOpName("UniformCandidateSampler")); opBuilder.addInput(trueClasses.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); @@ -127,7 +129,7 @@ public static Options seed2(Long seed2) { * A vector of length num_sampled, in which each element is * the ID of a sampled candidate. */ - public Output sampledCandidates() { + public Output sampledCandidates() { return sampledCandidates; } @@ -136,7 +138,7 @@ public Output sampledCandidates() { * the number of times each candidate is expected to occur in a batch * of sampled candidates. If unique=true, then this is a probability. */ - public Output trueExpectedCount() { + public Output trueExpectedCount() { return trueExpectedCount; } @@ -146,13 +148,13 @@ public Output trueExpectedCount() { * to occur in a batch of sampled candidates. If unique=true, then this is a * probability. */ - public Output sampledExpectedCount() { + public Output sampledExpectedCount() { return sampledExpectedCount; } - private Output sampledCandidates; - private Output trueExpectedCount; - private Output sampledExpectedCount; + private Output sampledCandidates; + private Output trueExpectedCount; + private Output sampledExpectedCount; private UniformCandidateSampler(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/signal/Irfft.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/signal/Irfft.java index 8e9d2918b1a..b4cd088d21c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/signal/Irfft.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/signal/Irfft.java @@ -24,6 +24,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TFloat; +import org.tensorflow.types.TInt32; /** * Inverse real-valued fast Fourier transform. @@ -43,7 +45,7 @@ * larger, the dimension is padded with zeros. */ @Operator(group = "signal") -public final class Irfft extends PrimitiveOp implements Operand { +public final class Irfft extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new Irfft operation. @@ -53,7 +55,7 @@ public final class Irfft extends PrimitiveOp implements Operand { * @param fftLength An int32 tensor of shape [1]. The FFT length. * @return a new instance of Irfft */ - public static Irfft create(Scope scope, Operand input, Operand fftLength) { + public static Irfft create(Scope scope, Operand input, Operand fftLength) { OperationBuilder opBuilder = scope.env().opBuilder("IRFFT", scope.makeOpName("Irfft")); opBuilder.addInput(input.asOutput()); opBuilder.addInput(fftLength.asOutput()); @@ -70,16 +72,16 @@ public static Irfft create(Scope scope, Operand input, Operand fftLe * Equivalent to np.fft.irfft * @end_compatibility */ - public Output output() { + public Output output() { return output; } @Override - public Output asOutput() { + public Output asOutput() { return output; } - private Output output; + private Output output; private Irfft(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/signal/Irfft2d.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/signal/Irfft2d.java index ffa6b995432..067136d5c98 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/signal/Irfft2d.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/signal/Irfft2d.java @@ -24,6 +24,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TFloat; +import org.tensorflow.types.TInt32; /** * Inverse 2D real-valued fast Fourier transform. @@ -44,7 +46,7 @@ * the dimension is padded with zeros. */ @Operator(group = "signal") -public final class Irfft2d extends PrimitiveOp implements Operand { +public final class Irfft2d extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new Irfft2d operation. @@ -54,7 +56,7 @@ public final class Irfft2d extends PrimitiveOp implements Operand { * @param fftLength An int32 tensor of shape [2]. The FFT length for each dimension. * @return a new instance of Irfft2d */ - public static Irfft2d create(Scope scope, Operand input, Operand fftLength) { + public static Irfft2d create(Scope scope, Operand input, Operand fftLength) { OperationBuilder opBuilder = scope.env().opBuilder("IRFFT2D", scope.makeOpName("Irfft2d")); opBuilder.addInput(input.asOutput()); opBuilder.addInput(fftLength.asOutput()); @@ -71,16 +73,16 @@ public static Irfft2d create(Scope scope, Operand input, Operand fft * Equivalent to np.fft.irfft2 * @end_compatibility */ - public Output output() { + public Output output() { return output; } @Override - public Output asOutput() { + public Output asOutput() { return output; } - private Output output; + private Output output; private Irfft2d(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/signal/Irfft3d.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/signal/Irfft3d.java index 3baf6e8d714..e46141e4579 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/signal/Irfft3d.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/signal/Irfft3d.java @@ -24,6 +24,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TFloat; +import org.tensorflow.types.TInt32; /** * Inverse 3D real-valued fast Fourier transform. @@ -44,7 +46,7 @@ * the dimension is padded with zeros. */ @Operator(group = "signal") -public final class Irfft3d extends PrimitiveOp implements Operand { +public final class Irfft3d extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new Irfft3d operation. @@ -54,7 +56,7 @@ public final class Irfft3d extends PrimitiveOp implements Operand { * @param fftLength An int32 tensor of shape [3]. The FFT length for each dimension. * @return a new instance of Irfft3d */ - public static Irfft3d create(Scope scope, Operand input, Operand fftLength) { + public static Irfft3d create(Scope scope, Operand input, Operand fftLength) { OperationBuilder opBuilder = scope.env().opBuilder("IRFFT3D", scope.makeOpName("Irfft3d")); opBuilder.addInput(input.asOutput()); opBuilder.addInput(fftLength.asOutput()); @@ -71,16 +73,16 @@ public static Irfft3d create(Scope scope, Operand input, Operand fft * Equivalent to np.irfftn with 3 dimensions. * @end_compatibility */ - public Output output() { + public Output output() { return output; } @Override - public Output asOutput() { + public Output asOutput() { return output; } - private Output output; + private Output output; private Irfft3d(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/signal/Rfft.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/signal/Rfft.java index 2f0fec0dfd4..8cafa79ac30 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/signal/Rfft.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/signal/Rfft.java @@ -24,6 +24,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TFloat; +import org.tensorflow.types.TInt32; /** * Real-valued fast Fourier transform. @@ -50,7 +52,7 @@ public final class Rfft extends PrimitiveOp implements Operand { * @param fftLength An int32 tensor of shape [1]. The FFT length. * @return a new instance of Rfft */ - public static Rfft create(Scope scope, Operand input, Operand fftLength) { + public static Rfft create(Scope scope, Operand input, Operand fftLength) { OperationBuilder opBuilder = scope.env().opBuilder("RFFT", scope.makeOpName("Rfft")); opBuilder.addInput(input.asOutput()); opBuilder.addInput(fftLength.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/signal/Rfft2d.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/signal/Rfft2d.java index bd45b327979..395960537e1 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/signal/Rfft2d.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/signal/Rfft2d.java @@ -24,6 +24,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TFloat; +import org.tensorflow.types.TInt32; /** * 2D real-valued fast Fourier transform. @@ -51,7 +53,7 @@ public final class Rfft2d extends PrimitiveOp implements Operand { * @param fftLength An int32 tensor of shape [2]. The FFT length for each dimension. * @return a new instance of Rfft2d */ - public static Rfft2d create(Scope scope, Operand input, Operand fftLength) { + public static Rfft2d create(Scope scope, Operand input, Operand fftLength) { OperationBuilder opBuilder = scope.env().opBuilder("RFFT2D", scope.makeOpName("Rfft2d")); opBuilder.addInput(input.asOutput()); opBuilder.addInput(fftLength.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/signal/Rfft3d.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/signal/Rfft3d.java index d734057433a..2e27f8a938b 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/signal/Rfft3d.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/signal/Rfft3d.java @@ -24,6 +24,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TFloat; +import org.tensorflow.types.TInt32; /** * 3D real-valued fast Fourier transform. @@ -51,7 +53,7 @@ public final class Rfft3d extends PrimitiveOp implements Operand { * @param fftLength An int32 tensor of shape [3]. The FFT length for each dimension. * @return a new instance of Rfft3d */ - public static Rfft3d create(Scope scope, Operand input, Operand fftLength) { + public static Rfft3d create(Scope scope, Operand input, Operand fftLength) { OperationBuilder opBuilder = scope.env().opBuilder("RFFT3D", scope.makeOpName("Rfft3d")); opBuilder.addInput(input.asOutput()); opBuilder.addInput(fftLength.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/AddManySparseToTensorsMap.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/AddManySparseToTensorsMap.java index 2c41eca4baa..5f38208a616 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/AddManySparseToTensorsMap.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/AddManySparseToTensorsMap.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt64; /** * Add an `N`-minibatch `SparseTensor` to a `SparseTensorsMap`, return `N` handles. @@ -51,7 +52,7 @@ * `TakeManySparseFromTensorsMap`. Ensure the Operations are colocated. */ @Operator(group = "sparse") -public final class AddManySparseToTensorsMap extends PrimitiveOp implements Operand { +public final class AddManySparseToTensorsMap extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.sparse.AddManySparseToTensorsMap} @@ -94,7 +95,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of AddManySparseToTensorsMap */ - public static AddManySparseToTensorsMap create(Scope scope, Operand sparseIndices, Operand sparseValues, Operand sparseShape, Options... options) { + public static AddManySparseToTensorsMap create(Scope scope, Operand sparseIndices, Operand sparseValues, Operand sparseShape, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("AddManySparseToTensorsMap", scope.makeOpName("AddManySparseToTensorsMap")); opBuilder.addInput(sparseIndices.asOutput()); opBuilder.addInput(sparseValues.asOutput()); @@ -132,16 +133,16 @@ public static Options sharedName(String sharedName) { * 1-D. The handles of the `SparseTensor` now stored in the * `SparseTensorsMap`. Shape: `[N]`. */ - public Output sparseHandles() { + public Output sparseHandles() { return sparseHandles; } @Override - public Output asOutput() { + public Output asOutput() { return sparseHandles; } - private Output sparseHandles; + private Output sparseHandles; private AddManySparseToTensorsMap(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/AddSparseToTensorsMap.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/AddSparseToTensorsMap.java index 7019a26e120..aaf91cd0c17 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/AddSparseToTensorsMap.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/AddSparseToTensorsMap.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt64; /** * Add a `SparseTensor` to a `SparseTensorsMap` return its handle. @@ -44,7 +45,7 @@ * `TakeManySparseFromTensorsMap`. Ensure the Operations are colocated. */ @Operator(group = "sparse") -public final class AddSparseToTensorsMap extends PrimitiveOp implements Operand { +public final class AddSparseToTensorsMap extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.sparse.AddSparseToTensorsMap} @@ -85,7 +86,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of AddSparseToTensorsMap */ - public static AddSparseToTensorsMap create(Scope scope, Operand sparseIndices, Operand sparseValues, Operand sparseShape, Options... options) { + public static AddSparseToTensorsMap create(Scope scope, Operand sparseIndices, Operand sparseValues, Operand sparseShape, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("AddSparseToTensorsMap", scope.makeOpName("AddSparseToTensorsMap")); opBuilder.addInput(sparseIndices.asOutput()); opBuilder.addInput(sparseValues.asOutput()); @@ -123,16 +124,16 @@ public static Options sharedName(String sharedName) { * 0-D. The handle of the `SparseTensor` now stored in the * `SparseTensorsMap`. */ - public Output sparseHandle() { + public Output sparseHandle() { return sparseHandle; } @Override - public Output asOutput() { + public Output asOutput() { return sparseHandle; } - private Output sparseHandle; + private Output sparseHandle; private AddSparseToTensorsMap(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/DenseToDenseSetOperation.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/DenseToDenseSetOperation.java index c5d8f2cb41c..827a2b9a259 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/DenseToDenseSetOperation.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/DenseToDenseSetOperation.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt64; /** * Applies set operation along last dimension of 2 `Tensor` inputs. @@ -98,7 +99,7 @@ public static Options validateIndices(Boolean validateIndices) { /** * 2D indices of a `SparseTensor`. */ - public Output resultIndices() { + public Output resultIndices() { return resultIndices; } @@ -114,13 +115,13 @@ public Output resultValues() { * the same as the 1st `n-1` dimensions of `set1` and `set2`, `result_shape[n]` * is the max result set size across all `0...n-1` dimensions. */ - public Output resultShape() { + public Output resultShape() { return resultShape; } - private Output resultIndices; + private Output resultIndices; private Output resultValues; - private Output resultShape; + private Output resultShape; private DenseToDenseSetOperation(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/DenseToSparseSetOperation.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/DenseToSparseSetOperation.java index e193d9cc836..b5372fe50e6 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/DenseToSparseSetOperation.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/DenseToSparseSetOperation.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt64; /** * Applies set operation along last dimension of `Tensor` and `SparseTensor`. @@ -85,7 +86,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of DenseToSparseSetOperation */ - public static DenseToSparseSetOperation create(Scope scope, Operand set1, Operand set2Indices, Operand set2Values, Operand set2Shape, String setOperation, Options... options) { + public static DenseToSparseSetOperation create(Scope scope, Operand set1, Operand set2Indices, Operand set2Values, Operand set2Shape, String setOperation, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("DenseToSparseSetOperation", scope.makeOpName("DenseToSparseSetOperation")); opBuilder.addInput(set1.asOutput()); opBuilder.addInput(set2Indices.asOutput()); @@ -113,7 +114,7 @@ public static Options validateIndices(Boolean validateIndices) { /** * 2D indices of a `SparseTensor`. */ - public Output resultIndices() { + public Output resultIndices() { return resultIndices; } @@ -129,13 +130,13 @@ public Output resultValues() { * the same as the 1st `n-1` dimensions of `set1` and `set2`, `result_shape[n]` * is the max result set size across all `0...n-1` dimensions. */ - public Output resultShape() { + public Output resultShape() { return resultShape; } - private Output resultIndices; + private Output resultIndices; private Output resultValues; - private Output resultShape; + private Output resultShape; private DenseToSparseSetOperation(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/DeserializeSparse.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/DeserializeSparse.java index 304d4579d78..85de5ec60ac 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/DeserializeSparse.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/DeserializeSparse.java @@ -25,6 +25,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt64; /** * Deserialize `SparseTensor` objects. @@ -85,17 +86,17 @@ public final class DeserializeSparse extends PrimitiveOp { * @param dtype The `dtype` of the serialized `SparseTensor` objects. * @return a new instance of DeserializeSparse */ - public static DeserializeSparse create(Scope scope, Operand serializedSparse, Class dtype) { + public static DeserializeSparse create(Scope scope, Operand serializedSparse, DataType dtype) { OperationBuilder opBuilder = scope.env().opBuilder("DeserializeSparse", scope.makeOpName("DeserializeSparse")); opBuilder.addInput(serializedSparse.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); - opBuilder.setAttr("dtype", DataType.fromClass(dtype)); + opBuilder.setAttr("dtype", dtype); return new DeserializeSparse(opBuilder.build()); } /** */ - public Output sparseIndices() { + public Output sparseIndices() { return sparseIndices; } @@ -107,13 +108,13 @@ public Output sparseValues() { /** */ - public Output sparseShape() { + public Output sparseShape() { return sparseShape; } - private Output sparseIndices; + private Output sparseIndices; private Output sparseValues; - private Output sparseShape; + private Output sparseShape; private DeserializeSparse(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseAccumulatorApplyGradient.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseAccumulatorApplyGradient.java index 8b6b45f058a..8525e9f61c3 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseAccumulatorApplyGradient.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseAccumulatorApplyGradient.java @@ -23,6 +23,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt64; +import org.tensorflow.types.TString; /** * Applies a sparse gradient to a given accumulator. @@ -49,7 +51,7 @@ public final class SparseAccumulatorApplyGradient extends PrimitiveOp { * case the input is ignored during validation. * @return a new instance of SparseAccumulatorApplyGradient */ - public static SparseAccumulatorApplyGradient create(Scope scope, Operand handle, Operand localStep, Operand gradientIndices, Operand gradientValues, Operand gradientShape, Boolean hasKnownShape) { + public static SparseAccumulatorApplyGradient create(Scope scope, Operand handle, Operand localStep, Operand gradientIndices, Operand gradientValues, Operand gradientShape, Boolean hasKnownShape) { OperationBuilder opBuilder = scope.env().opBuilder("SparseAccumulatorApplyGradient", scope.makeOpName("SparseAccumulatorApplyGradient")); opBuilder.addInput(handle.asOutput()); opBuilder.addInput(localStep.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseAccumulatorTakeGradient.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseAccumulatorTakeGradient.java index 6e62cc0e484..806077a577f 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseAccumulatorTakeGradient.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseAccumulatorTakeGradient.java @@ -25,6 +25,9 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.TInt64; +import org.tensorflow.types.TString; /** * Extracts the average sparse gradient in a SparseConditionalAccumulator. @@ -51,19 +54,19 @@ public final class SparseAccumulatorTakeGradient extends PrimitiveOp { * of the accumulator. * @return a new instance of SparseAccumulatorTakeGradient */ - public static SparseAccumulatorTakeGradient create(Scope scope, Operand handle, Operand numRequired, Class dtype) { + public static SparseAccumulatorTakeGradient create(Scope scope, Operand handle, Operand numRequired, DataType dtype) { OperationBuilder opBuilder = scope.env().opBuilder("SparseAccumulatorTakeGradient", scope.makeOpName("SparseAccumulatorTakeGradient")); opBuilder.addInput(handle.asOutput()); opBuilder.addInput(numRequired.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); - opBuilder.setAttr("dtype", DataType.fromClass(dtype)); + opBuilder.setAttr("dtype", dtype); return new SparseAccumulatorTakeGradient(opBuilder.build()); } /** * Indices of the average of the accumulated sparse gradients. */ - public Output indices() { + public Output indices() { return indices; } @@ -77,13 +80,13 @@ public Output values() { /** * Shape of the average of the accumulated sparse gradients. */ - public Output shape() { + public Output shape() { return shape; } - private Output indices; + private Output indices; private Output values; - private Output shape; + private Output shape; private SparseAccumulatorTakeGradient(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseAdd.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseAdd.java index 8213ae13dc1..7cab7df4586 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseAdd.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseAdd.java @@ -24,6 +24,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt64; +import org.tensorflow.types.family.TNumber; /** * Adds two `SparseTensor` objects to produce another `SparseTensor`. @@ -61,7 +63,7 @@ public final class SparseAdd extends PrimitiveOp { * pair takes space. * @return a new instance of SparseAdd */ - public static SparseAdd create(Scope scope, Operand aIndices, Operand aValues, Operand aShape, Operand bIndices, Operand bValues, Operand bShape, Operand thresh) { + public static SparseAdd create(Scope scope, Operand aIndices, Operand aValues, Operand aShape, Operand bIndices, Operand bValues, Operand bShape, Operand thresh) { OperationBuilder opBuilder = scope.env().opBuilder("SparseAdd", scope.makeOpName("SparseAdd")); opBuilder.addInput(aIndices.asOutput()); opBuilder.addInput(aValues.asOutput()); @@ -76,7 +78,7 @@ public static SparseAdd create(Scope scope, Operand sumIndices() { + public Output sumIndices() { return sumIndices; } @@ -88,13 +90,13 @@ public Output sumValues() { /** */ - public Output sumShape() { + public Output sumShape() { return sumShape; } - private Output sumIndices; + private Output sumIndices; private Output sumValues; - private Output sumShape; + private Output sumShape; private SparseAdd(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseAddGrad.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseAddGrad.java index 0952cd2e7bd..534f2b067cc 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseAddGrad.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseAddGrad.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt64; /** * The gradient operator for the SparseAdd op. @@ -50,7 +51,7 @@ public final class SparseAddGrad extends PrimitiveOp { * `[nnz(sum), ndims]`. * @return a new instance of SparseAddGrad */ - public static SparseAddGrad create(Scope scope, Operand backpropValGrad, Operand aIndices, Operand bIndices, Operand sumIndices) { + public static SparseAddGrad create(Scope scope, Operand backpropValGrad, Operand aIndices, Operand bIndices, Operand sumIndices) { OperationBuilder opBuilder = scope.env().opBuilder("SparseAddGrad", scope.makeOpName("SparseAddGrad")); opBuilder.addInput(backpropValGrad.asOutput()); opBuilder.addInput(aIndices.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseConcat.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseConcat.java index 5566807c81d..68dddd60e0e 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseConcat.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseConcat.java @@ -25,6 +25,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt64; /** * Concatenates a list of `SparseTensor` along the specified dimension. @@ -87,7 +88,7 @@ public final class SparseConcat extends PrimitiveOp { * where rank is the number of dimensions in each input `SparseTensor`. * @return a new instance of SparseConcat */ - public static SparseConcat create(Scope scope, Iterable> indices, Iterable> values, Iterable> shapes, Long concatDim) { + public static SparseConcat create(Scope scope, Iterable> indices, Iterable> values, Iterable> shapes, Long concatDim) { OperationBuilder opBuilder = scope.env().opBuilder("SparseConcat", scope.makeOpName("SparseConcat")); opBuilder.addInputList(Operands.asOutputs(indices)); opBuilder.addInputList(Operands.asOutputs(values)); @@ -100,7 +101,7 @@ public static SparseConcat create(Scope scope, Iterable> in /** * 2-D. Indices of the concatenated `SparseTensor`. */ - public Output outputIndices() { + public Output outputIndices() { return outputIndices; } @@ -114,13 +115,13 @@ public Output outputValues() { /** * 1-D. Shape of the concatenated `SparseTensor`. */ - public Output outputShape() { + public Output outputShape() { return outputShape; } - private Output outputIndices; + private Output outputIndices; private Output outputValues; - private Output outputShape; + private Output outputShape; private SparseConcat(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseConditionalAccumulator.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseConditionalAccumulator.java index 5fa61be5922..240d8750ad7 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseConditionalAccumulator.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseConditionalAccumulator.java @@ -22,10 +22,11 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TString; /** * A conditional accumulator for aggregating sparse gradients. @@ -38,7 +39,7 @@ * the accumulator. */ @Operator(group = "sparse") -public final class SparseConditionalAccumulator extends PrimitiveOp implements Operand { +public final class SparseConditionalAccumulator extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.sparse.SparseConditionalAccumulator} @@ -88,10 +89,10 @@ private Options() { * @param options carries optional attributes values * @return a new instance of SparseConditionalAccumulator */ - public static SparseConditionalAccumulator create(Scope scope, Class dtype, Shape shape, Options... options) { + public static SparseConditionalAccumulator create(Scope scope, DataType dtype, Shape shape, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("SparseConditionalAccumulator", scope.makeOpName("SparseConditionalAccumulator")); opBuilder = scope.applyControlDependencies(opBuilder); - opBuilder.setAttr("dtype", DataType.fromClass(dtype)); + opBuilder.setAttr("dtype", dtype); opBuilder.setAttr("shape", shape); if (options != null) { for (Options opts : options) { @@ -135,16 +136,16 @@ public static Options reductionType(String reductionType) { /** * The handle to the accumulator. */ - public Output handle() { + public Output handle() { return handle; } @Override - public Output asOutput() { + public Output asOutput() { return handle; } - private Output handle; + private Output handle; private SparseConditionalAccumulator(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseCross.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseCross.java index 7fbf1f01ba3..334a6908717 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseCross.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseCross.java @@ -26,6 +26,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt64; /** * Generates sparse cross from a list of sparse and dense tensors. @@ -90,7 +91,7 @@ public final class SparseCross extends PrimitiveOp { * @param internalType * @return a new instance of SparseCross */ - public static SparseCross create(Scope scope, Iterable> indices, Iterable> values, Iterable> shapes, Iterable> denseInputs, Boolean hashedOutput, Long numBuckets, Long hashKey, Class outType, Class internalType) { + public static SparseCross create(Scope scope, Iterable> indices, Iterable> values, Iterable> shapes, Iterable> denseInputs, Boolean hashedOutput, Long numBuckets, Long hashKey, DataType outType, DataType internalType) { OperationBuilder opBuilder = scope.env().opBuilder("SparseCross", scope.makeOpName("SparseCross")); opBuilder.addInputList(Operands.asOutputs(indices)); opBuilder.addInputList(Operands.asOutputs(values)); @@ -100,15 +101,15 @@ public static SparseCross create(Scope scope, Iterable> opBuilder.setAttr("hashed_output", hashedOutput); opBuilder.setAttr("num_buckets", numBuckets); opBuilder.setAttr("hash_key", hashKey); - opBuilder.setAttr("out_type", DataType.fromClass(outType)); - opBuilder.setAttr("internal_type", DataType.fromClass(internalType)); + opBuilder.setAttr("out_type", outType); + opBuilder.setAttr("internal_type", internalType); return new SparseCross(opBuilder.build()); } /** * 2-D. Indices of the concatenated `SparseTensor`. */ - public Output outputIndices() { + public Output outputIndices() { return outputIndices; } @@ -123,13 +124,13 @@ public Output outputValues() { /** * 1-D. Shape of the concatenated `SparseTensor`. */ - public Output outputShape() { + public Output outputShape() { return outputShape; } - private Output outputIndices; + private Output outputIndices; private Output outputValues; - private Output outputShape; + private Output outputShape; private SparseCross(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseDenseCwiseAdd.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseDenseCwiseAdd.java index 7206c575a09..6e85d91fa0f 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseDenseCwiseAdd.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseDenseCwiseAdd.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt64; /** * Adds up a SparseTensor and a dense Tensor, using these special rules: @@ -53,7 +54,7 @@ public final class SparseDenseCwiseAdd extends PrimitiveOp implements Operand * @param dense `R`-D. The dense Tensor operand. * @return a new instance of SparseDenseCwiseAdd */ - public static SparseDenseCwiseAdd create(Scope scope, Operand spIndices, Operand spValues, Operand spShape, Operand dense) { + public static SparseDenseCwiseAdd create(Scope scope, Operand spIndices, Operand spValues, Operand spShape, Operand dense) { OperationBuilder opBuilder = scope.env().opBuilder("SparseDenseCwiseAdd", scope.makeOpName("SparseDenseCwiseAdd")); opBuilder.addInput(spIndices.asOutput()); opBuilder.addInput(spValues.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseDenseCwiseDiv.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseDenseCwiseDiv.java index 0ecc4202f6f..0b88fb7e5ba 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseDenseCwiseDiv.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseDenseCwiseDiv.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt64; /** * Component-wise divides a SparseTensor by a dense Tensor. @@ -47,7 +48,7 @@ public final class SparseDenseCwiseDiv extends PrimitiveOp implements Operand * @param dense `R`-D. The dense Tensor operand. * @return a new instance of SparseDenseCwiseDiv */ - public static SparseDenseCwiseDiv create(Scope scope, Operand spIndices, Operand spValues, Operand spShape, Operand dense) { + public static SparseDenseCwiseDiv create(Scope scope, Operand spIndices, Operand spValues, Operand spShape, Operand dense) { OperationBuilder opBuilder = scope.env().opBuilder("SparseDenseCwiseDiv", scope.makeOpName("SparseDenseCwiseDiv")); opBuilder.addInput(spIndices.asOutput()); opBuilder.addInput(spValues.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseDenseCwiseMul.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseDenseCwiseMul.java index b5313e8ddfb..cfab7540aa3 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseDenseCwiseMul.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseDenseCwiseMul.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt64; /** * Component-wise multiplies a SparseTensor by a dense Tensor. @@ -51,7 +52,7 @@ public final class SparseDenseCwiseMul extends PrimitiveOp implements Operand * @param dense `R`-D. The dense Tensor operand. * @return a new instance of SparseDenseCwiseMul */ - public static SparseDenseCwiseMul create(Scope scope, Operand spIndices, Operand spValues, Operand spShape, Operand dense) { + public static SparseDenseCwiseMul create(Scope scope, Operand spIndices, Operand spValues, Operand spShape, Operand dense) { OperationBuilder opBuilder = scope.env().opBuilder("SparseDenseCwiseMul", scope.makeOpName("SparseDenseCwiseMul")); opBuilder.addInput(spIndices.asOutput()); opBuilder.addInput(spValues.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseFillEmptyRows.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseFillEmptyRows.java index 1e3a9e5f179..bc705fb4f21 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseFillEmptyRows.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseFillEmptyRows.java @@ -24,6 +24,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TBool; +import org.tensorflow.types.TInt64; /** * Fills empty rows in the input 2-D `SparseTensor` with a default value. @@ -82,7 +84,7 @@ public final class SparseFillEmptyRows extends PrimitiveOp { * output indices: 2-D. the indices of the filled sparse tensor. * @return a new instance of SparseFillEmptyRows */ - public static SparseFillEmptyRows create(Scope scope, Operand indices, Operand values, Operand denseShape, Operand defaultValue) { + public static SparseFillEmptyRows create(Scope scope, Operand indices, Operand values, Operand denseShape, Operand defaultValue) { OperationBuilder opBuilder = scope.env().opBuilder("SparseFillEmptyRows", scope.makeOpName("SparseFillEmptyRows")); opBuilder.addInput(indices.asOutput()); opBuilder.addInput(values.asOutput()); @@ -94,7 +96,7 @@ public static SparseFillEmptyRows create(Scope scope, Operand indic /** */ - public Output outputIndices() { + public Output outputIndices() { return outputIndices; } @@ -109,21 +111,21 @@ public Output outputValues() { * 1-D. whether the dense row was missing in the * input sparse tensor. */ - public Output emptyRowIndicator() { + public Output emptyRowIndicator() { return emptyRowIndicator; } /** * 1-D. a map from the input indices to the output indices. */ - public Output reverseIndexMap() { + public Output reverseIndexMap() { return reverseIndexMap; } - private Output outputIndices; + private Output outputIndices; private Output outputValues; - private Output emptyRowIndicator; - private Output reverseIndexMap; + private Output emptyRowIndicator; + private Output reverseIndexMap; private SparseFillEmptyRows(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseFillEmptyRowsGrad.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseFillEmptyRowsGrad.java index af952c6f48a..452e7d0ea47 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseFillEmptyRowsGrad.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseFillEmptyRowsGrad.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt64; /** * The gradient of SparseFillEmptyRows. @@ -50,7 +51,7 @@ public final class SparseFillEmptyRowsGrad extends PrimitiveOp { * @param gradValues 1-D. The gradients from backprop. * @return a new instance of SparseFillEmptyRowsGrad */ - public static SparseFillEmptyRowsGrad create(Scope scope, Operand reverseIndexMap, Operand gradValues) { + public static SparseFillEmptyRowsGrad create(Scope scope, Operand reverseIndexMap, Operand gradValues) { OperationBuilder opBuilder = scope.env().opBuilder("SparseFillEmptyRowsGrad", scope.makeOpName("SparseFillEmptyRowsGrad")); opBuilder.addInput(reverseIndexMap.asOutput()); opBuilder.addInput(gradValues.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseMatMul.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseMatMul.java index b4978aa4a4c..63bb2e2aa4b 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseMatMul.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseMatMul.java @@ -24,6 +24,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TFloat; +import org.tensorflow.types.family.TNumber; /** * Multiply matrix "a" by matrix "b". @@ -39,7 +41,7 @@ * in the input gradient when that gradient comes from a Relu. */ @Operator(group = "sparse") -public final class SparseMatMul extends PrimitiveOp implements Operand { +public final class SparseMatMul extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.sparse.SparseMatMul} @@ -96,7 +98,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of SparseMatMul */ - public static SparseMatMul create(Scope scope, Operand a, Operand b, Options... options) { + public static SparseMatMul create(Scope scope, Operand a, Operand b, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("SparseMatMul", scope.makeOpName("SparseMatMul")); opBuilder.addInput(a.asOutput()); opBuilder.addInput(b.asOutput()); @@ -150,16 +152,16 @@ public static Options bIsSparse(Boolean bIsSparse) { /** */ - public Output product() { + public Output product() { return product; } @Override - public Output asOutput() { + public Output asOutput() { return product; } - private Output product; + private Output product; private SparseMatMul(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseReduceMax.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseReduceMax.java index 7b399d15ff3..33100b3f771 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseReduceMax.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseReduceMax.java @@ -24,6 +24,9 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.TInt64; +import org.tensorflow.types.family.TNumber; /** * Computes the max of elements across dimensions of a SparseTensor. @@ -44,7 +47,7 @@ * @param data type for {@code output()} output */ @Operator(group = "sparse") -public final class SparseReduceMax extends PrimitiveOp implements Operand { +public final class SparseReduceMax extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.sparse.SparseReduceMax} @@ -77,7 +80,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of SparseReduceMax */ - public static SparseReduceMax create(Scope scope, Operand inputIndices, Operand inputValues, Operand inputShape, Operand reductionAxes, Options... options) { + public static SparseReduceMax create(Scope scope, Operand inputIndices, Operand inputValues, Operand inputShape, Operand reductionAxes, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("SparseReduceMax", scope.makeOpName("SparseReduceMax")); opBuilder.addInput(inputIndices.asOutput()); opBuilder.addInput(inputValues.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseReduceMaxSparse.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseReduceMaxSparse.java index 06f9d79d429..fdd7f395e7d 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseReduceMaxSparse.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseReduceMaxSparse.java @@ -24,6 +24,9 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.TInt64; +import org.tensorflow.types.family.TNumber; /** * Computes the max of elements across dimensions of a SparseTensor. @@ -44,7 +47,7 @@ * @param data type for {@code outputValues()} output */ @Operator(group = "sparse") -public final class SparseReduceMaxSparse extends PrimitiveOp { +public final class SparseReduceMaxSparse extends PrimitiveOp { /** * Optional attributes for {@link org.tensorflow.op.sparse.SparseReduceMaxSparse} @@ -77,7 +80,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of SparseReduceMaxSparse */ - public static SparseReduceMaxSparse create(Scope scope, Operand inputIndices, Operand inputValues, Operand inputShape, Operand reductionAxes, Options... options) { + public static SparseReduceMaxSparse create(Scope scope, Operand inputIndices, Operand inputValues, Operand inputShape, Operand reductionAxes, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("SparseReduceMaxSparse", scope.makeOpName("SparseReduceMaxSparse")); opBuilder.addInput(inputIndices.asOutput()); opBuilder.addInput(inputValues.asOutput()); @@ -103,7 +106,7 @@ public static Options keepDims(Boolean keepDims) { /** */ - public Output outputIndices() { + public Output outputIndices() { return outputIndices; } @@ -115,13 +118,13 @@ public Output outputValues() { /** */ - public Output outputShape() { + public Output outputShape() { return outputShape; } - private Output outputIndices; + private Output outputIndices; private Output outputValues; - private Output outputShape; + private Output outputShape; private SparseReduceMaxSparse(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseReduceSum.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseReduceSum.java index 81ca8cd6287..16dfc536883 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseReduceSum.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseReduceSum.java @@ -24,6 +24,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.TInt64; /** * Computes the sum of elements across dimensions of a SparseTensor. @@ -77,7 +79,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of SparseReduceSum */ - public static SparseReduceSum create(Scope scope, Operand inputIndices, Operand inputValues, Operand inputShape, Operand reductionAxes, Options... options) { + public static SparseReduceSum create(Scope scope, Operand inputIndices, Operand inputValues, Operand inputShape, Operand reductionAxes, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("SparseReduceSum", scope.makeOpName("SparseReduceSum")); opBuilder.addInput(inputIndices.asOutput()); opBuilder.addInput(inputValues.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseReduceSumSparse.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseReduceSumSparse.java index 3cb7d8f4246..970f7b45ec6 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseReduceSumSparse.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseReduceSumSparse.java @@ -24,6 +24,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.TInt64; /** * Computes the sum of elements across dimensions of a SparseTensor. @@ -77,7 +79,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of SparseReduceSumSparse */ - public static SparseReduceSumSparse create(Scope scope, Operand inputIndices, Operand inputValues, Operand inputShape, Operand reductionAxes, Options... options) { + public static SparseReduceSumSparse create(Scope scope, Operand inputIndices, Operand inputValues, Operand inputShape, Operand reductionAxes, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("SparseReduceSumSparse", scope.makeOpName("SparseReduceSumSparse")); opBuilder.addInput(inputIndices.asOutput()); opBuilder.addInput(inputValues.asOutput()); @@ -103,7 +105,7 @@ public static Options keepDims(Boolean keepDims) { /** */ - public Output outputIndices() { + public Output outputIndices() { return outputIndices; } @@ -115,13 +117,13 @@ public Output outputValues() { /** */ - public Output outputShape() { + public Output outputShape() { return outputShape; } - private Output outputIndices; + private Output outputIndices; private Output outputValues; - private Output outputShape; + private Output outputShape; private SparseReduceSumSparse(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseReorder.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseReorder.java index a29e4225324..b848e61b83d 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseReorder.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseReorder.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt64; /** * Reorders a SparseTensor into the canonical, row-major ordering. @@ -52,7 +53,7 @@ public final class SparseReorder extends PrimitiveOp { * @param inputShape 1-D. Shape of the input SparseTensor. * @return a new instance of SparseReorder */ - public static SparseReorder create(Scope scope, Operand inputIndices, Operand inputValues, Operand inputShape) { + public static SparseReorder create(Scope scope, Operand inputIndices, Operand inputValues, Operand inputShape) { OperationBuilder opBuilder = scope.env().opBuilder("SparseReorder", scope.makeOpName("SparseReorder")); opBuilder.addInput(inputIndices.asOutput()); opBuilder.addInput(inputValues.asOutput()); @@ -65,7 +66,7 @@ public static SparseReorder create(Scope scope, Operand inputIndice * 2-D. `N x R` matrix with the same indices as input_indices, but * in canonical row-major ordering. */ - public Output outputIndices() { + public Output outputIndices() { return outputIndices; } @@ -76,7 +77,7 @@ public Output outputValues() { return outputValues; } - private Output outputIndices; + private Output outputIndices; private Output outputValues; private SparseReorder(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseReshape.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseReshape.java index fa01b3f03c2..d4e2beb880a 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseReshape.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseReshape.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt64; /** * Reshapes a SparseTensor to represent values in a new dense shape. @@ -57,7 +58,7 @@ public final class SparseReshape extends PrimitiveOp { * @param newShape 1-D. `R_out` vector with the requested new dense shape. * @return a new instance of SparseReshape */ - public static SparseReshape create(Scope scope, Operand inputIndices, Operand inputShape, Operand newShape) { + public static SparseReshape create(Scope scope, Operand inputIndices, Operand inputShape, Operand newShape) { OperationBuilder opBuilder = scope.env().opBuilder("SparseReshape", scope.makeOpName("SparseReshape")); opBuilder.addInput(inputIndices.asOutput()); opBuilder.addInput(inputShape.asOutput()); @@ -70,7 +71,7 @@ public static SparseReshape create(Scope scope, Operand inputIndices, Oper * 2-D. `N x R_out` matrix with the updated indices of non-empty * values in the output SparseTensor. */ - public Output outputIndices() { + public Output outputIndices() { return outputIndices; } @@ -79,12 +80,12 @@ public Output outputIndices() { * SparseTensor. This is the same as `new_shape` but with any -1 dimensions * filled in. */ - public Output outputShape() { + public Output outputShape() { return outputShape; } - private Output outputIndices; - private Output outputShape; + private Output outputIndices; + private Output outputShape; private SparseReshape(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseSegmentMean.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseSegmentMean.java index 293e89925c0..778f7d06bae 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseSegmentMean.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseSegmentMean.java @@ -24,6 +24,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.family.TNumber; /** * Computes the mean along sparse segments of a tensor. @@ -36,7 +38,7 @@ * @param data type for {@code output()} output */ @Operator(group = "sparse") -public final class SparseSegmentMean extends PrimitiveOp implements Operand { +public final class SparseSegmentMean extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new SparseSegmentMean operation. @@ -47,7 +49,7 @@ public final class SparseSegmentMean extends PrimitiveOp imple * @param segmentIds A 1-D tensor. Values should be sorted and can be repeated. * @return a new instance of SparseSegmentMean */ - public static SparseSegmentMean create(Scope scope, Operand data, Operand indices, Operand segmentIds) { + public static SparseSegmentMean create(Scope scope, Operand data, Operand indices, Operand segmentIds) { OperationBuilder opBuilder = scope.env().opBuilder("SparseSegmentMean", scope.makeOpName("SparseSegmentMean")); opBuilder.addInput(data.asOutput()); opBuilder.addInput(indices.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseSegmentMeanGrad.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseSegmentMeanGrad.java index 21ca5f6b2ff..c385dbb2ca8 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseSegmentMeanGrad.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseSegmentMeanGrad.java @@ -24,6 +24,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.family.TNumber; /** * Computes gradients for SparseSegmentMean. @@ -34,7 +36,7 @@ * @param data type for {@code output()} output */ @Operator(group = "sparse") -public final class SparseSegmentMeanGrad extends PrimitiveOp implements Operand { +public final class SparseSegmentMeanGrad extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new SparseSegmentMeanGrad operation. @@ -46,7 +48,7 @@ public final class SparseSegmentMeanGrad extends PrimitiveOp i * @param outputDim0 dimension 0 of "data" passed to SparseSegmentMean op. * @return a new instance of SparseSegmentMeanGrad */ - public static SparseSegmentMeanGrad create(Scope scope, Operand grad, Operand indices, Operand segmentIds, Operand outputDim0) { + public static SparseSegmentMeanGrad create(Scope scope, Operand grad, Operand indices, Operand segmentIds, Operand outputDim0) { OperationBuilder opBuilder = scope.env().opBuilder("SparseSegmentMeanGrad", scope.makeOpName("SparseSegmentMeanGrad")); opBuilder.addInput(grad.asOutput()); opBuilder.addInput(indices.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseSegmentMeanWithNumSegments.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseSegmentMeanWithNumSegments.java index d0892757cf6..9bf0beac8a7 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseSegmentMeanWithNumSegments.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseSegmentMeanWithNumSegments.java @@ -24,6 +24,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.family.TNumber; /** * Computes the mean along sparse segments of a tensor. @@ -38,7 +40,7 @@ * @param data type for {@code output()} output */ @Operator(group = "sparse") -public final class SparseSegmentMeanWithNumSegments extends PrimitiveOp implements Operand { +public final class SparseSegmentMeanWithNumSegments extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new SparseSegmentMeanWithNumSegments operation. @@ -50,7 +52,7 @@ public final class SparseSegmentMeanWithNumSegments extends Pr * @param numSegments Should equal the number of distinct segment IDs. * @return a new instance of SparseSegmentMeanWithNumSegments */ - public static SparseSegmentMeanWithNumSegments create(Scope scope, Operand data, Operand indices, Operand segmentIds, Operand numSegments) { + public static SparseSegmentMeanWithNumSegments create(Scope scope, Operand data, Operand indices, Operand segmentIds, Operand numSegments) { OperationBuilder opBuilder = scope.env().opBuilder("SparseSegmentMeanWithNumSegments", scope.makeOpName("SparseSegmentMeanWithNumSegments")); opBuilder.addInput(data.asOutput()); opBuilder.addInput(indices.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseSegmentSqrtN.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseSegmentSqrtN.java index 4e2a851f043..0ca1a793229 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseSegmentSqrtN.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseSegmentSqrtN.java @@ -24,6 +24,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.family.TNumber; /** * Computes the sum along sparse segments of a tensor divided by the sqrt of N. @@ -36,7 +38,7 @@ * @param data type for {@code output()} output */ @Operator(group = "sparse") -public final class SparseSegmentSqrtN extends PrimitiveOp implements Operand { +public final class SparseSegmentSqrtN extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new SparseSegmentSqrtN operation. @@ -47,7 +49,7 @@ public final class SparseSegmentSqrtN extends PrimitiveOp impl * @param segmentIds A 1-D tensor. Values should be sorted and can be repeated. * @return a new instance of SparseSegmentSqrtN */ - public static SparseSegmentSqrtN create(Scope scope, Operand data, Operand indices, Operand segmentIds) { + public static SparseSegmentSqrtN create(Scope scope, Operand data, Operand indices, Operand segmentIds) { OperationBuilder opBuilder = scope.env().opBuilder("SparseSegmentSqrtN", scope.makeOpName("SparseSegmentSqrtN")); opBuilder.addInput(data.asOutput()); opBuilder.addInput(indices.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseSegmentSqrtNGrad.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseSegmentSqrtNGrad.java index 1f935e4b9d1..ec367857f2c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseSegmentSqrtNGrad.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseSegmentSqrtNGrad.java @@ -24,6 +24,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.family.TNumber; /** * Computes gradients for SparseSegmentSqrtN. @@ -34,7 +36,7 @@ * @param data type for {@code output()} output */ @Operator(group = "sparse") -public final class SparseSegmentSqrtNGrad extends PrimitiveOp implements Operand { +public final class SparseSegmentSqrtNGrad extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new SparseSegmentSqrtNGrad operation. @@ -46,7 +48,7 @@ public final class SparseSegmentSqrtNGrad extends PrimitiveOp * @param outputDim0 dimension 0 of "data" passed to SparseSegmentSqrtN op. * @return a new instance of SparseSegmentSqrtNGrad */ - public static SparseSegmentSqrtNGrad create(Scope scope, Operand grad, Operand indices, Operand segmentIds, Operand outputDim0) { + public static SparseSegmentSqrtNGrad create(Scope scope, Operand grad, Operand indices, Operand segmentIds, Operand outputDim0) { OperationBuilder opBuilder = scope.env().opBuilder("SparseSegmentSqrtNGrad", scope.makeOpName("SparseSegmentSqrtNGrad")); opBuilder.addInput(grad.asOutput()); opBuilder.addInput(indices.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseSegmentSqrtNWithNumSegments.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseSegmentSqrtNWithNumSegments.java index e64f0cd2ae7..9cec8c6cc81 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseSegmentSqrtNWithNumSegments.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseSegmentSqrtNWithNumSegments.java @@ -24,6 +24,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.family.TNumber; /** * Computes the sum along sparse segments of a tensor divided by the sqrt of N. @@ -40,7 +42,7 @@ * @param data type for {@code output()} output */ @Operator(group = "sparse") -public final class SparseSegmentSqrtNWithNumSegments extends PrimitiveOp implements Operand { +public final class SparseSegmentSqrtNWithNumSegments extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new SparseSegmentSqrtNWithNumSegments operation. @@ -52,7 +54,7 @@ public final class SparseSegmentSqrtNWithNumSegments extends P * @param numSegments Should equal the number of distinct segment IDs. * @return a new instance of SparseSegmentSqrtNWithNumSegments */ - public static SparseSegmentSqrtNWithNumSegments create(Scope scope, Operand data, Operand indices, Operand segmentIds, Operand numSegments) { + public static SparseSegmentSqrtNWithNumSegments create(Scope scope, Operand data, Operand indices, Operand segmentIds, Operand numSegments) { OperationBuilder opBuilder = scope.env().opBuilder("SparseSegmentSqrtNWithNumSegments", scope.makeOpName("SparseSegmentSqrtNWithNumSegments")); opBuilder.addInput(data.asOutput()); opBuilder.addInput(indices.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseSegmentSum.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseSegmentSum.java index e4e1e4552f9..cb02130f2ac 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseSegmentSum.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseSegmentSum.java @@ -24,6 +24,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.family.TNumber; /** * Computes the sum along sparse segments of a tensor. @@ -61,7 +63,7 @@ * @param data type for {@code output()} output */ @Operator(group = "sparse") -public final class SparseSegmentSum extends PrimitiveOp implements Operand { +public final class SparseSegmentSum extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new SparseSegmentSum operation. @@ -72,7 +74,7 @@ public final class SparseSegmentSum extends PrimitiveOp implem * @param segmentIds A 1-D tensor. Values should be sorted and can be repeated. * @return a new instance of SparseSegmentSum */ - public static SparseSegmentSum create(Scope scope, Operand data, Operand indices, Operand segmentIds) { + public static SparseSegmentSum create(Scope scope, Operand data, Operand indices, Operand segmentIds) { OperationBuilder opBuilder = scope.env().opBuilder("SparseSegmentSum", scope.makeOpName("SparseSegmentSum")); opBuilder.addInput(data.asOutput()); opBuilder.addInput(indices.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseSegmentSumWithNumSegments.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseSegmentSumWithNumSegments.java index 35f7dcf6ec2..264eb4b22c6 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseSegmentSumWithNumSegments.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseSegmentSumWithNumSegments.java @@ -24,6 +24,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.family.TNumber; /** * Computes the sum along sparse segments of a tensor. @@ -59,7 +61,7 @@ * @param data type for {@code output()} output */ @Operator(group = "sparse") -public final class SparseSegmentSumWithNumSegments extends PrimitiveOp implements Operand { +public final class SparseSegmentSumWithNumSegments extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new SparseSegmentSumWithNumSegments operation. @@ -71,7 +73,7 @@ public final class SparseSegmentSumWithNumSegments extends Pri * @param numSegments Should equal the number of distinct segment IDs. * @return a new instance of SparseSegmentSumWithNumSegments */ - public static SparseSegmentSumWithNumSegments create(Scope scope, Operand data, Operand indices, Operand segmentIds, Operand numSegments) { + public static SparseSegmentSumWithNumSegments create(Scope scope, Operand data, Operand indices, Operand segmentIds, Operand numSegments) { OperationBuilder opBuilder = scope.env().opBuilder("SparseSegmentSumWithNumSegments", scope.makeOpName("SparseSegmentSumWithNumSegments")); opBuilder.addInput(data.asOutput()); opBuilder.addInput(indices.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseSlice.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseSlice.java index 7a1b01270c4..c463520fc0e 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseSlice.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseSlice.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt64; /** * Slice a `SparseTensor` based on the `start` and `size`. @@ -62,7 +63,7 @@ public final class SparseSlice extends PrimitiveOp { * sparse tensors. * @return a new instance of SparseSlice */ - public static SparseSlice create(Scope scope, Operand indices, Operand values, Operand shape, Operand start, Operand size) { + public static SparseSlice create(Scope scope, Operand indices, Operand values, Operand shape, Operand start, Operand size) { OperationBuilder opBuilder = scope.env().opBuilder("SparseSlice", scope.makeOpName("SparseSlice")); opBuilder.addInput(indices.asOutput()); opBuilder.addInput(values.asOutput()); @@ -75,7 +76,7 @@ public static SparseSlice create(Scope scope, Operand indices, Oper /** */ - public Output outputIndices() { + public Output outputIndices() { return outputIndices; } @@ -91,13 +92,13 @@ public Output outputValues() { * A list of 1-D tensors represents the shape of the output sparse * tensors. */ - public Output outputShape() { + public Output outputShape() { return outputShape; } - private Output outputIndices; + private Output outputIndices; private Output outputValues; - private Output outputShape; + private Output outputShape; private SparseSlice(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseSliceGrad.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseSliceGrad.java index 8d94122ed98..e24adb1f90a 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseSliceGrad.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseSliceGrad.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt64; /** * The gradient operator for the SparseSlice op. @@ -48,7 +49,7 @@ public final class SparseSliceGrad extends PrimitiveOp implements Operand * @param outputIndices 2-D. The `indices` of the sliced `SparseTensor`. * @return a new instance of SparseSliceGrad */ - public static SparseSliceGrad create(Scope scope, Operand backpropValGrad, Operand inputIndices, Operand inputStart, Operand outputIndices) { + public static SparseSliceGrad create(Scope scope, Operand backpropValGrad, Operand inputIndices, Operand inputStart, Operand outputIndices) { OperationBuilder opBuilder = scope.env().opBuilder("SparseSliceGrad", scope.makeOpName("SparseSliceGrad")); opBuilder.addInput(backpropValGrad.asOutput()); opBuilder.addInput(inputIndices.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseSoftmax.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseSoftmax.java index f71f0e05558..6b1c64a404e 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseSoftmax.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseSoftmax.java @@ -24,6 +24,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt64; +import org.tensorflow.types.family.TNumber; /** * Applies softmax to a batched N-D `SparseTensor`. @@ -47,7 +49,7 @@ * @param data type for {@code output()} output */ @Operator(group = "sparse") -public final class SparseSoftmax extends PrimitiveOp implements Operand { +public final class SparseSoftmax extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new SparseSoftmax operation. @@ -59,7 +61,7 @@ public final class SparseSoftmax extends PrimitiveOp implement * @param spShape 1-D. Shape of the input SparseTensor. * @return a new instance of SparseSoftmax */ - public static SparseSoftmax create(Scope scope, Operand spIndices, Operand spValues, Operand spShape) { + public static SparseSoftmax create(Scope scope, Operand spIndices, Operand spValues, Operand spShape) { OperationBuilder opBuilder = scope.env().opBuilder("SparseSoftmax", scope.makeOpName("SparseSoftmax")); opBuilder.addInput(spIndices.asOutput()); opBuilder.addInput(spValues.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseSparseMaximum.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseSparseMaximum.java index 0ccafcd5462..07a271b587b 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseSparseMaximum.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseSparseMaximum.java @@ -24,6 +24,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt64; +import org.tensorflow.types.family.TNumber; /** * Returns the element-wise max of two SparseTensors. @@ -33,7 +35,7 @@ * @param data type for {@code outputValues()} output */ @Operator(group = "sparse") -public final class SparseSparseMaximum extends PrimitiveOp { +public final class SparseSparseMaximum extends PrimitiveOp { /** * Factory method to create a class wrapping a new SparseSparseMaximum operation. @@ -48,7 +50,7 @@ public final class SparseSparseMaximum extends PrimitiveOp { * @param bShape counterpart to `a_shape` for the other operand; the two shapes must be equal. * @return a new instance of SparseSparseMaximum */ - public static SparseSparseMaximum create(Scope scope, Operand aIndices, Operand aValues, Operand aShape, Operand bIndices, Operand bValues, Operand bShape) { + public static SparseSparseMaximum create(Scope scope, Operand aIndices, Operand aValues, Operand aShape, Operand bIndices, Operand bValues, Operand bShape) { OperationBuilder opBuilder = scope.env().opBuilder("SparseSparseMaximum", scope.makeOpName("SparseSparseMaximum")); opBuilder.addInput(aIndices.asOutput()); opBuilder.addInput(aValues.asOutput()); @@ -63,7 +65,7 @@ public static SparseSparseMaximum create(Scope scope, Oper /** * 2-D. The indices of the output SparseTensor. */ - public Output outputIndices() { + public Output outputIndices() { return outputIndices; } @@ -74,7 +76,7 @@ public Output outputValues() { return outputValues; } - private Output outputIndices; + private Output outputIndices; private Output outputValues; private SparseSparseMaximum(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseSparseMinimum.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseSparseMinimum.java index 4099c9d44fb..d06427a8040 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseSparseMinimum.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseSparseMinimum.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt64; /** * Returns the element-wise min of two SparseTensors. @@ -48,7 +49,7 @@ public final class SparseSparseMinimum extends PrimitiveOp { * @param bShape counterpart to `a_shape` for the other operand; the two shapes must be equal. * @return a new instance of SparseSparseMinimum */ - public static SparseSparseMinimum create(Scope scope, Operand aIndices, Operand aValues, Operand aShape, Operand bIndices, Operand bValues, Operand bShape) { + public static SparseSparseMinimum create(Scope scope, Operand aIndices, Operand aValues, Operand aShape, Operand bIndices, Operand bValues, Operand bShape) { OperationBuilder opBuilder = scope.env().opBuilder("SparseSparseMinimum", scope.makeOpName("SparseSparseMinimum")); opBuilder.addInput(aIndices.asOutput()); opBuilder.addInput(aValues.asOutput()); @@ -63,7 +64,7 @@ public static SparseSparseMinimum create(Scope scope, Operand aIndi /** * 2-D. The indices of the output SparseTensor. */ - public Output outputIndices() { + public Output outputIndices() { return outputIndices; } @@ -74,7 +75,7 @@ public Output outputValues() { return outputValues; } - private Output outputIndices; + private Output outputIndices; private Output outputValues; private SparseSparseMinimum(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseSplit.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseSplit.java index 0fafdf7f38e..88a8df08b3e 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseSplit.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseSplit.java @@ -26,6 +26,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt64; /** * Split a `SparseTensor` into `num_split` tensors along one dimension. @@ -67,7 +68,7 @@ public final class SparseSplit extends PrimitiveOp { * @param numSplit The number of ways to split. * @return a new instance of SparseSplit */ - public static SparseSplit create(Scope scope, Operand splitDim, Operand indices, Operand values, Operand shape, Long numSplit) { + public static SparseSplit create(Scope scope, Operand splitDim, Operand indices, Operand values, Operand shape, Long numSplit) { OperationBuilder opBuilder = scope.env().opBuilder("SparseSplit", scope.makeOpName("SparseSplit")); opBuilder.addInput(splitDim.asOutput()); opBuilder.addInput(indices.asOutput()); @@ -80,7 +81,7 @@ public static SparseSplit create(Scope scope, Operand splitDim, Ope /** */ - public List> outputIndices() { + public List> outputIndices() { return outputIndices; } @@ -96,26 +97,26 @@ public List> outputValues() { * A list of 1-D tensors represents the shape of the output sparse * tensors. */ - public List> outputShape() { + public List> outputShape() { return outputShape; } - private List> outputIndices; + private List> outputIndices; private List> outputValues; - private List> outputShape; + private List> outputShape; @SuppressWarnings("unchecked") private SparseSplit(Operation operation) { super(operation); int outputIdx = 0; int outputIndicesLength = operation.outputListLength("output_indices"); - outputIndices = Arrays.asList((Output[])operation.outputList(outputIdx, outputIndicesLength)); + outputIndices = Arrays.asList((Output[])operation.outputList(outputIdx, outputIndicesLength)); outputIdx += outputIndicesLength; int outputValuesLength = operation.outputListLength("output_values"); outputValues = Arrays.asList((Output[])operation.outputList(outputIdx, outputValuesLength)); outputIdx += outputValuesLength; int outputShapeLength = operation.outputListLength("output_shape"); - outputShape = Arrays.asList((Output[])operation.outputList(outputIdx, outputShapeLength)); + outputShape = Arrays.asList((Output[])operation.outputList(outputIdx, outputShapeLength)); outputIdx += outputShapeLength; } } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseTensorDenseAdd.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseTensorDenseAdd.java index 2c27031864b..8f10924b198 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseTensorDenseAdd.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseTensorDenseAdd.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Adds up a `SparseTensor` and a dense `Tensor`, producing a dense `Tensor`. @@ -45,7 +46,7 @@ public final class SparseTensorDenseAdd extends PrimitiveOp implements Operan * @param b `ndims`-D Tensor. With shape `a_shape`. * @return a new instance of SparseTensorDenseAdd */ - public static SparseTensorDenseAdd create(Scope scope, Operand aIndices, Operand aValues, Operand aShape, Operand b) { + public static SparseTensorDenseAdd create(Scope scope, Operand aIndices, Operand aValues, Operand aShape, Operand b) { OperationBuilder opBuilder = scope.env().opBuilder("SparseTensorDenseAdd", scope.makeOpName("SparseTensorDenseAdd")); opBuilder.addInput(aIndices.asOutput()); opBuilder.addInput(aValues.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseTensorDenseMatMul.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseTensorDenseMatMul.java index 8d6b02e7ad4..638d42bd5df 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseTensorDenseMatMul.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseTensorDenseMatMul.java @@ -24,6 +24,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt64; +import org.tensorflow.types.family.TNumber; /** * Multiply SparseTensor (of rank 2) "A" by dense matrix "B". @@ -84,7 +86,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of SparseTensorDenseMatMul */ - public static SparseTensorDenseMatMul create(Scope scope, Operand aIndices, Operand aValues, Operand aShape, Operand b, Options... options) { + public static SparseTensorDenseMatMul create(Scope scope, Operand aIndices, Operand aValues, Operand aShape, Operand b, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("SparseTensorDenseMatMul", scope.makeOpName("SparseTensorDenseMatMul")); opBuilder.addInput(aIndices.asOutput()); opBuilder.addInput(aValues.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseToDense.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseToDense.java index 08a9994b220..a0f8a72e004 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseToDense.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseToDense.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Converts a sparse representation into a dense tensor. @@ -85,7 +86,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of SparseToDense */ - public static SparseToDense create(Scope scope, Operand sparseIndices, Operand outputShape, Operand sparseValues, Operand defaultValue, Options... options) { + public static SparseToDense create(Scope scope, Operand sparseIndices, Operand outputShape, Operand sparseValues, Operand defaultValue, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("SparseToDense", scope.makeOpName("SparseToDense")); opBuilder.addInput(sparseIndices.asOutput()); opBuilder.addInput(outputShape.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseToSparseSetOperation.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseToSparseSetOperation.java index 7018f43e82b..2538fcaa518 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseToSparseSetOperation.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseToSparseSetOperation.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt64; /** * Applies set operation along last dimension of 2 `SparseTensor` inputs. @@ -98,7 +99,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of SparseToSparseSetOperation */ - public static SparseToSparseSetOperation create(Scope scope, Operand set1Indices, Operand set1Values, Operand set1Shape, Operand set2Indices, Operand set2Values, Operand set2Shape, String setOperation, Options... options) { + public static SparseToSparseSetOperation create(Scope scope, Operand set1Indices, Operand set1Values, Operand set1Shape, Operand set2Indices, Operand set2Values, Operand set2Shape, String setOperation, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("SparseToSparseSetOperation", scope.makeOpName("SparseToSparseSetOperation")); opBuilder.addInput(set1Indices.asOutput()); opBuilder.addInput(set1Values.asOutput()); @@ -128,7 +129,7 @@ public static Options validateIndices(Boolean validateIndices) { /** * 2D indices of a `SparseTensor`. */ - public Output resultIndices() { + public Output resultIndices() { return resultIndices; } @@ -144,13 +145,13 @@ public Output resultValues() { * the same as the 1st `n-1` dimensions of `set1` and `set2`, `result_shape[n]` * is the max result set size across all `0...n-1` dimensions. */ - public Output resultShape() { + public Output resultShape() { return resultShape; } - private Output resultIndices; + private Output resultIndices; private Output resultValues; - private Output resultShape; + private Output resultShape; private SparseToSparseSetOperation(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/TakeManySparseFromTensorsMap.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/TakeManySparseFromTensorsMap.java index 93ce8141b96..0ea5656862a 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/TakeManySparseFromTensorsMap.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/TakeManySparseFromTensorsMap.java @@ -25,6 +25,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt64; /** * Read `SparseTensors` from a `SparseTensorsMap` and concatenate them. @@ -120,11 +121,11 @@ private Options() { * @param options carries optional attributes values * @return a new instance of TakeManySparseFromTensorsMap */ - public static TakeManySparseFromTensorsMap create(Scope scope, Operand sparseHandles, Class dtype, Options... options) { + public static TakeManySparseFromTensorsMap create(Scope scope, Operand sparseHandles, DataType dtype, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("TakeManySparseFromTensorsMap", scope.makeOpName("TakeManySparseFromTensorsMap")); opBuilder.addInput(sparseHandles.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); - opBuilder.setAttr("dtype", DataType.fromClass(dtype)); + opBuilder.setAttr("dtype", dtype); if (options != null) { for (Options opts : options) { if (opts.container != null) { @@ -157,7 +158,7 @@ public static Options sharedName(String sharedName) { /** * 2-D. The `indices` of the minibatch `SparseTensor`. */ - public Output sparseIndices() { + public Output sparseIndices() { return sparseIndices; } @@ -171,13 +172,13 @@ public Output sparseValues() { /** * 1-D. The `shape` of the minibatch `SparseTensor`. */ - public Output sparseShape() { + public Output sparseShape() { return sparseShape; } - private Output sparseIndices; + private Output sparseIndices; private Output sparseValues; - private Output sparseShape; + private Output sparseShape; private TakeManySparseFromTensorsMap(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/Join.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/Join.java index 62e81851ff5..338d012502c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/Join.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/Join.java @@ -25,6 +25,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TString; /** * Joins the strings in the given list of string tensors into one tensor; @@ -32,7 +33,7 @@ * with the given separator (default is an empty separator). */ @Operator(group = "strings") -public final class Join extends PrimitiveOp implements Operand { +public final class Join extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.strings.Join} @@ -63,7 +64,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of Join */ - public static Join create(Scope scope, Iterable> inputs, Options... options) { + public static Join create(Scope scope, Iterable> inputs, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("StringJoin", scope.makeOpName("Join")); opBuilder.addInputList(Operands.asOutputs(inputs)); opBuilder = scope.applyControlDependencies(opBuilder); @@ -86,16 +87,16 @@ public static Options separator(String separator) { /** */ - public Output output() { + public Output output() { return output; } @Override - public Output asOutput() { + public Output asOutput() { return output; } - private Output output; + private Output output; private Join(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/ReduceJoin.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/ReduceJoin.java index cf28fe3d69c..fca425016ee 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/ReduceJoin.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/ReduceJoin.java @@ -24,6 +24,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.TString; /** * Joins a string Tensor across the given dimensions. @@ -53,7 +55,7 @@ * */ @Operator(group = "strings") -public final class ReduceJoin extends PrimitiveOp implements Operand { +public final class ReduceJoin extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.strings.ReduceJoin} @@ -94,7 +96,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of ReduceJoin */ - public static ReduceJoin create(Scope scope, Operand inputs, Operand reductionIndices, Options... options) { + public static ReduceJoin create(Scope scope, Operand inputs, Operand reductionIndices, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("ReduceJoin", scope.makeOpName("ReduceJoin")); opBuilder.addInput(inputs.asOutput()); opBuilder.addInput(reductionIndices.asOutput()); @@ -130,16 +132,16 @@ public static Options separator(String separator) { * Has shape equal to that of the input with reduced dimensions removed or * set to `1` depending on `keep_dims`. */ - public Output output() { + public Output output() { return output; } @Override - public Output asOutput() { + public Output asOutput() { return output; } - private Output output; + private Output output; private ReduceJoin(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/RegexFullMatch.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/RegexFullMatch.java index ef99dcaf7f0..1cde782f776 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/RegexFullMatch.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/RegexFullMatch.java @@ -24,6 +24,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TBool; +import org.tensorflow.types.TString; /** * Check if the input matches the regex pattern. @@ -36,7 +38,7 @@ * The pattern follows the re2 syntax (https://github.com/google/re2/wiki/Syntax) */ @Operator(group = "strings") -public final class RegexFullMatch extends PrimitiveOp implements Operand { +public final class RegexFullMatch extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new RegexFullMatch operation. @@ -46,7 +48,7 @@ public final class RegexFullMatch extends PrimitiveOp implements Operand input, Operand pattern) { + public static RegexFullMatch create(Scope scope, Operand input, Operand pattern) { OperationBuilder opBuilder = scope.env().opBuilder("RegexFullMatch", scope.makeOpName("RegexFullMatch")); opBuilder.addInput(input.asOutput()); opBuilder.addInput(pattern.asOutput()); @@ -57,16 +59,16 @@ public static RegexFullMatch create(Scope scope, Operand input, Operand< /** * A bool tensor with the same shape as `input`. */ - public Output output() { + public Output output() { return output; } @Override - public Output asOutput() { + public Output asOutput() { return output; } - private Output output; + private Output output; private RegexFullMatch(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/RegexReplace.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/RegexReplace.java index 90abd5d9d97..6f36f23a7ba 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/RegexReplace.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/RegexReplace.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TString; /** * Replaces matches of the `pattern` regular expression in `input` with the @@ -32,7 +33,7 @@ * It follows the re2 syntax (https://github.com/google/re2/wiki/Syntax) */ @Operator(group = "strings") -public final class RegexReplace extends PrimitiveOp implements Operand { +public final class RegexReplace extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.strings.RegexReplace} @@ -66,7 +67,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of RegexReplace */ - public static RegexReplace create(Scope scope, Operand input, Operand pattern, Operand rewrite, Options... options) { + public static RegexReplace create(Scope scope, Operand input, Operand pattern, Operand rewrite, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("RegexReplace", scope.makeOpName("RegexReplace")); opBuilder.addInput(input.asOutput()); opBuilder.addInput(pattern.asOutput()); @@ -94,16 +95,16 @@ public static Options replaceGlobal(Boolean replaceGlobal) { /** * The text after applying pattern match and rewrite substitution. */ - public Output output() { + public Output output() { return output; } @Override - public Output asOutput() { + public Output asOutput() { return output; } - private Output output; + private Output output; private RegexReplace(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/StaticRegexFullMatch.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/StaticRegexFullMatch.java index ba57d3fc909..e94fcb976eb 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/StaticRegexFullMatch.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/StaticRegexFullMatch.java @@ -23,6 +23,8 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TBool; +import org.tensorflow.types.TString; /** * Check if the input matches the regex pattern. @@ -34,7 +36,7 @@ *

* The pattern follows the re2 syntax (https://github.com/google/re2/wiki/Syntax) */ -public final class StaticRegexFullMatch extends PrimitiveOp implements Operand { +public final class StaticRegexFullMatch extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new StaticRegexFullMatch operation. @@ -44,7 +46,7 @@ public final class StaticRegexFullMatch extends PrimitiveOp implements Operand input, String pattern) { + public static StaticRegexFullMatch create(Scope scope, Operand input, String pattern) { OperationBuilder opBuilder = scope.env().opBuilder("StaticRegexFullMatch", scope.makeOpName("StaticRegexFullMatch")); opBuilder.addInput(input.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); @@ -55,16 +57,16 @@ public static StaticRegexFullMatch create(Scope scope, Operand input, St /** * A bool tensor with the same shape as `input`. */ - public Output output() { + public Output output() { return output; } @Override - public Output asOutput() { + public Output asOutput() { return output; } - private Output output; + private Output output; private StaticRegexFullMatch(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/StaticRegexReplace.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/StaticRegexReplace.java index af094e057c1..ff1b4de21a3 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/StaticRegexReplace.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/StaticRegexReplace.java @@ -23,13 +23,14 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TString; /** * Replaces the match of pattern in input with rewrite. *

* It follows the re2 syntax (https://github.com/google/re2/wiki/Syntax) */ -public final class StaticRegexReplace extends PrimitiveOp implements Operand { +public final class StaticRegexReplace extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.strings.StaticRegexReplace} @@ -61,7 +62,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of StaticRegexReplace */ - public static StaticRegexReplace create(Scope scope, Operand input, String pattern, String rewrite, Options... options) { + public static StaticRegexReplace create(Scope scope, Operand input, String pattern, String rewrite, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("StaticRegexReplace", scope.makeOpName("StaticRegexReplace")); opBuilder.addInput(input.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); @@ -88,16 +89,16 @@ public static Options replaceGlobal(Boolean replaceGlobal) { /** * The text after applying pattern and rewrite. */ - public Output output() { + public Output output() { return output; } @Override - public Output asOutput() { + public Output asOutput() { return output; } - private Output output; + private Output output; private StaticRegexReplace(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/StringFormat.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/StringFormat.java index cabf4dce51f..4a03a879efa 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/StringFormat.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/StringFormat.java @@ -25,6 +25,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TString; /** * Formats a string template using a list of tensors. @@ -32,7 +33,7 @@ * Formats a string template using a list of tensors, pretty-printing tensor summaries. */ @Operator(group = "strings") -public final class StringFormat extends PrimitiveOp implements Operand { +public final class StringFormat extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.strings.StringFormat} @@ -123,16 +124,16 @@ public static Options summarize(Long summarize) { /** * = The resulting string scalar. */ - public Output output() { + public Output output() { return output; } @Override - public Output asOutput() { + public Output asOutput() { return output; } - private Output output; + private Output output; private StringFormat(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/StringLength.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/StringLength.java index bbac3a54868..3f0e188ef95 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/StringLength.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/StringLength.java @@ -24,6 +24,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.TString; /** * String lengths of `input`. @@ -31,7 +33,7 @@ * Computes the length of each string given in the input tensor. */ @Operator(group = "strings") -public final class StringLength extends PrimitiveOp implements Operand { +public final class StringLength extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.strings.StringLength} @@ -64,7 +66,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of StringLength */ - public static StringLength create(Scope scope, Operand input, Options... options) { + public static StringLength create(Scope scope, Operand input, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("StringLength", scope.makeOpName("StringLength")); opBuilder.addInput(input.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); @@ -93,16 +95,16 @@ public static Options unit(String unit) { * Integer tensor that has the same shape as `input`. The output contains the * element-wise string lengths of `input`. */ - public Output output() { + public Output output() { return output; } @Override - public Output asOutput() { + public Output asOutput() { return output; } - private Output output; + private Output output; private StringLength(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/StringSplit.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/StringSplit.java index a56d350e51f..3cffb728f23 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/StringSplit.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/StringSplit.java @@ -24,6 +24,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt64; +import org.tensorflow.types.TString; /** * Split elements of `source` based on `sep` into a `SparseTensor`. @@ -83,7 +85,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of StringSplit */ - public static StringSplit create(Scope scope, Operand input, Operand sep, Options... options) { + public static StringSplit create(Scope scope, Operand input, Operand sep, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("StringSplitV2", scope.makeOpName("StringSplit")); opBuilder.addInput(input.asOutput()); opBuilder.addInput(sep.asOutput()); @@ -107,25 +109,25 @@ public static Options maxsplit(Long maxsplit) { /** */ - public Output indices() { + public Output indices() { return indices; } /** */ - public Output values() { + public Output values() { return values; } /** */ - public Output shape() { + public Output shape() { return shape; } - private Output indices; - private Output values; - private Output shape; + private Output indices; + private Output values; + private Output shape; private StringSplit(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/Strip.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/Strip.java index ffa6f27797c..492625c1ebb 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/Strip.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/Strip.java @@ -24,12 +24,13 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TString; /** * Strip leading and trailing whitespaces from the Tensor. */ @Operator(group = "strings") -public final class Strip extends PrimitiveOp implements Operand { +public final class Strip extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new Strip operation. @@ -38,7 +39,7 @@ public final class Strip extends PrimitiveOp implements Operand { * @param input A string `Tensor` of any shape. * @return a new instance of Strip */ - public static Strip create(Scope scope, Operand input) { + public static Strip create(Scope scope, Operand input) { OperationBuilder opBuilder = scope.env().opBuilder("StringStrip", scope.makeOpName("Strip")); opBuilder.addInput(input.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); @@ -48,16 +49,16 @@ public static Strip create(Scope scope, Operand input) { /** * A string `Tensor` of the same shape as the input. */ - public Output output() { + public Output output() { return output; } @Override - public Output asOutput() { + public Output asOutput() { return output; } - private Output output; + private Output output; private Strip(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/Substr.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/Substr.java index baeb6e50400..99bfa1d1532 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/Substr.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/Substr.java @@ -24,6 +24,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TString; +import org.tensorflow.types.family.TNumber; /** * Return substrings from `Tensor` of strings. @@ -99,7 +101,7 @@ * */ @Operator(group = "strings") -public final class Substr extends PrimitiveOp implements Operand { +public final class Substr extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.strings.Substr} @@ -134,7 +136,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of Substr */ - public static Substr create(Scope scope, Operand input, Operand pos, Operand len, Options... options) { + public static Substr create(Scope scope, Operand input, Operand pos, Operand len, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("Substr", scope.makeOpName("Substr")); opBuilder.addInput(input.asOutput()); opBuilder.addInput(pos.asOutput()); @@ -164,16 +166,16 @@ public static Options unit(String unit) { /** * Tensor of substrings */ - public Output output() { + public Output output() { return output; } @Override - public Output asOutput() { + public Output asOutput() { return output; } - private Output output; + private Output output; private Substr(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/ToHashBucket.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/ToHashBucket.java index 568af6a5c5f..5bfebd648c2 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/ToHashBucket.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/ToHashBucket.java @@ -24,6 +24,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt64; +import org.tensorflow.types.TString; /** * Converts each string in the input Tensor to its hash mod by a number of buckets. @@ -36,7 +38,7 @@ * `tf.string_to_hash_bucket_fast()` or `tf.string_to_hash_bucket_strong()`. */ @Operator(group = "strings") -public final class ToHashBucket extends PrimitiveOp implements Operand { +public final class ToHashBucket extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new ToHashBucket operation. @@ -46,7 +48,7 @@ public final class ToHashBucket extends PrimitiveOp implements Operand { * @param numBuckets The number of buckets. * @return a new instance of ToHashBucket */ - public static ToHashBucket create(Scope scope, Operand stringTensor, Long numBuckets) { + public static ToHashBucket create(Scope scope, Operand stringTensor, Long numBuckets) { OperationBuilder opBuilder = scope.env().opBuilder("StringToHashBucket", scope.makeOpName("ToHashBucket")); opBuilder.addInput(stringTensor.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); @@ -57,16 +59,16 @@ public static ToHashBucket create(Scope scope, Operand stringTensor, Lon /** * A Tensor of the same shape as the input `string_tensor`. */ - public Output output() { + public Output output() { return output; } @Override - public Output asOutput() { + public Output asOutput() { return output; } - private Output output; + private Output output; private ToHashBucket(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/ToHashBucketFast.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/ToHashBucketFast.java index 5726d89ae0e..16686ee8dd0 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/ToHashBucketFast.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/ToHashBucketFast.java @@ -24,6 +24,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt64; +import org.tensorflow.types.TString; /** * Converts each string in the input Tensor to its hash mod by a number of buckets. @@ -36,7 +38,7 @@ * `tf.string_to_hash_bucket_strong`. */ @Operator(group = "strings") -public final class ToHashBucketFast extends PrimitiveOp implements Operand { +public final class ToHashBucketFast extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new ToHashBucketFast operation. @@ -46,7 +48,7 @@ public final class ToHashBucketFast extends PrimitiveOp implements Operand * @param numBuckets The number of buckets. * @return a new instance of ToHashBucketFast */ - public static ToHashBucketFast create(Scope scope, Operand input, Long numBuckets) { + public static ToHashBucketFast create(Scope scope, Operand input, Long numBuckets) { OperationBuilder opBuilder = scope.env().opBuilder("StringToHashBucketFast", scope.makeOpName("ToHashBucketFast")); opBuilder.addInput(input.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); @@ -57,16 +59,16 @@ public static ToHashBucketFast create(Scope scope, Operand input, Long n /** * A Tensor of the same shape as the input `string_tensor`. */ - public Output output() { + public Output output() { return output; } @Override - public Output asOutput() { + public Output asOutput() { return output; } - private Output output; + private Output output; private ToHashBucketFast(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/ToHashBucketStrong.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/ToHashBucketStrong.java index 76fcb3d319a..5dcb826ac0e 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/ToHashBucketStrong.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/ToHashBucketStrong.java @@ -25,6 +25,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt64; +import org.tensorflow.types.TString; /** * Converts each string in the input Tensor to its hash mod by a number of buckets. @@ -44,7 +46,7 @@ * time than `tf.string_to_hash_bucket_fast`. */ @Operator(group = "strings") -public final class ToHashBucketStrong extends PrimitiveOp implements Operand { +public final class ToHashBucketStrong extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new ToHashBucketStrong operation. @@ -56,7 +58,7 @@ public final class ToHashBucketStrong extends PrimitiveOp implements Operand input, Long numBuckets, List key) { + public static ToHashBucketStrong create(Scope scope, Operand input, Long numBuckets, List key) { OperationBuilder opBuilder = scope.env().opBuilder("StringToHashBucketStrong", scope.makeOpName("ToHashBucketStrong")); opBuilder.addInput(input.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); @@ -72,16 +74,16 @@ public static ToHashBucketStrong create(Scope scope, Operand input, Long /** * A Tensor of the same shape as the input `string_tensor`. */ - public Output output() { + public Output output() { return output; } @Override - public Output asOutput() { + public Output asOutput() { return output; } - private Output output; + private Output output; private ToHashBucketStrong(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/ToNumber.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/ToNumber.java index 7517b0852d8..1282275f970 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/ToNumber.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/ToNumber.java @@ -25,6 +25,9 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TFloat; +import org.tensorflow.types.TString; +import org.tensorflow.types.family.TNumber; /** * Converts each string in the input Tensor to the specified numeric type. @@ -35,7 +38,7 @@ * @param data type for {@code output()} output */ @Operator(group = "strings") -public final class ToNumber extends PrimitiveOp implements Operand { +public final class ToNumber extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new ToNumber operation. @@ -45,11 +48,11 @@ public final class ToNumber extends PrimitiveOp implements Ope * @param outType The numeric type to interpret each string in `string_tensor` as. * @return a new instance of ToNumber */ - public static ToNumber create(Scope scope, Operand stringTensor, Class outType) { + public static ToNumber create(Scope scope, Operand stringTensor, DataType outType) { OperationBuilder opBuilder = scope.env().opBuilder("StringToNumber", scope.makeOpName("ToNumber")); opBuilder.addInput(stringTensor.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); - opBuilder.setAttr("out_type", DataType.fromClass(outType)); + opBuilder.setAttr("out_type", outType); return new ToNumber(opBuilder.build()); } @@ -60,8 +63,8 @@ public static ToNumber create(Scope scope, Operand * @param stringTensor * @return a new instance of ToNumber */ - public static ToNumber create(Scope scope, Operand stringTensor) { - return create(scope, stringTensor, Float.class); + public static ToNumber create(Scope scope, Operand stringTensor) { + return create(scope, stringTensor, TFloat.DTYPE); } /** diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/UnicodeDecodeWithOffsets.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/UnicodeDecodeWithOffsets.java index fc959f0b38e..c0f2b12436f 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/UnicodeDecodeWithOffsets.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/UnicodeDecodeWithOffsets.java @@ -24,6 +24,10 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.TInt64; +import org.tensorflow.types.TString; +import org.tensorflow.types.family.TNumber; /** * Decodes each string in `input` into a sequence of Unicode code points. @@ -53,7 +57,7 @@ * * @param data type for {@code rowSplits()} output */ -public final class UnicodeDecodeWithOffsets extends PrimitiveOp { +public final class UnicodeDecodeWithOffsets extends PrimitiveOp { /** * Optional attributes for {@link org.tensorflow.op.strings.UnicodeDecodeWithOffsets} @@ -114,12 +118,12 @@ private Options() { * @param options carries optional attributes values * @return a new instance of UnicodeDecodeWithOffsets */ - public static UnicodeDecodeWithOffsets create(Scope scope, Operand input, String inputEncoding, Class Tsplits, Options... options) { + public static UnicodeDecodeWithOffsets create(Scope scope, Operand input, String inputEncoding, DataType Tsplits, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("UnicodeDecodeWithOffsets", scope.makeOpName("UnicodeDecodeWithOffsets")); opBuilder.addInput(input.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); opBuilder.setAttr("input_encoding", inputEncoding); - opBuilder.setAttr("Tsplits", DataType.fromClass(Tsplits)); + opBuilder.setAttr("Tsplits", Tsplits); if (options != null) { for (Options opts : options) { if (opts.errors != null) { @@ -147,8 +151,8 @@ public static UnicodeDecodeWithOffsets create(Scope scope, * @param options carries optional attributes values * @return a new instance of UnicodeDecodeWithOffsets */ - public static UnicodeDecodeWithOffsets create(Scope scope, Operand input, String inputEncoding, Options... options) { - return create(scope, input, inputEncoding, Long.class, options); + public static UnicodeDecodeWithOffsets create(Scope scope, Operand input, String inputEncoding, Options... options) { + return create(scope, input, inputEncoding, TInt64.DTYPE, options); } /** @@ -192,7 +196,7 @@ public Output rowSplits() { /** * A 1D int32 Tensor containing the decoded codepoints. */ - public Output charValues() { + public Output charValues() { return charValues; } @@ -200,13 +204,13 @@ public Output charValues() { * A 1D int32 Tensor containing the byte index in the input string where each * character in `char_values` starts. */ - public Output charToByteStarts() { + public Output charToByteStarts() { return charToByteStarts; } private Output rowSplits; - private Output charValues; - private Output charToByteStarts; + private Output charValues; + private Output charToByteStarts; private UnicodeDecodeWithOffsets(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/UnicodeScript.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/UnicodeScript.java index 3ef65dc3bb9..ff78f0afc13 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/UnicodeScript.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/UnicodeScript.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt32; /** * Determine the script codes of a given tensor of Unicode integer code points. @@ -35,7 +36,7 @@ * match input shape. */ @Operator(group = "strings") -public final class UnicodeScript extends PrimitiveOp implements Operand { +public final class UnicodeScript extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new UnicodeScript operation. @@ -44,7 +45,7 @@ public final class UnicodeScript extends PrimitiveOp implements Operand * @param input A Tensor of int32 Unicode code points. * @return a new instance of UnicodeScript */ - public static UnicodeScript create(Scope scope, Operand input) { + public static UnicodeScript create(Scope scope, Operand input) { OperationBuilder opBuilder = scope.env().opBuilder("UnicodeScript", scope.makeOpName("UnicodeScript")); opBuilder.addInput(input.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); @@ -54,16 +55,16 @@ public static UnicodeScript create(Scope scope, Operand input) { /** * A Tensor of int32 script codes corresponding to each input code point. */ - public Output output() { + public Output output() { return output; } @Override - public Output asOutput() { + public Output asOutput() { return output; } - private Output output; + private Output output; private UnicodeScript(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/UnicodeTranscode.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/UnicodeTranscode.java index 5f92fc940a3..5fe5ab641cc 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/UnicodeTranscode.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/UnicodeTranscode.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TString; /** * Transcode the input text from a source encoding to a destination encoding. @@ -54,7 +55,7 @@ * but as metadata, and so is not preserved in the output. */ @Operator(group = "strings") -public final class UnicodeTranscode extends PrimitiveOp implements Operand { +public final class UnicodeTranscode extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.strings.UnicodeTranscode} @@ -120,7 +121,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of UnicodeTranscode */ - public static UnicodeTranscode create(Scope scope, Operand input, String inputEncoding, String outputEncoding, Options... options) { + public static UnicodeTranscode create(Scope scope, Operand input, String inputEncoding, String outputEncoding, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("UnicodeTranscode", scope.makeOpName("UnicodeTranscode")); opBuilder.addInput(input.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); @@ -181,16 +182,16 @@ public static Options replaceControlCharacters(Boolean replaceControlCharacters) /** * A string tensor containing unicode text encoded using `output_encoding`. */ - public Output output() { + public Output output() { return output; } @Override - public Output asOutput() { + public Output asOutput() { return output; } - private Output output; + private Output output; private UnicodeTranscode(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/AudioSummary.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/AudioSummary.java index ac1d69c5cca..5e4749c7abc 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/AudioSummary.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/AudioSummary.java @@ -24,6 +24,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TFloat; +import org.tensorflow.types.TString; /** * Outputs a `Summary` protocol buffer with audio. @@ -44,7 +46,7 @@ * generated sequentially as 'tag/audio/0', 'tag/audio/1', etc. */ @Operator(group = "summary") -public final class AudioSummary extends PrimitiveOp implements Operand { +public final class AudioSummary extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.summary.AudioSummary} @@ -75,7 +77,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of AudioSummary */ - public static AudioSummary create(Scope scope, Operand tag, Operand tensor, Operand sampleRate, Options... options) { + public static AudioSummary create(Scope scope, Operand tag, Operand tensor, Operand sampleRate, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("AudioSummaryV2", scope.makeOpName("AudioSummary")); opBuilder.addInput(tag.asOutput()); opBuilder.addInput(tensor.asOutput()); @@ -101,16 +103,16 @@ public static Options maxOutputs(Long maxOutputs) { /** * Scalar. Serialized `Summary` protocol buffer. */ - public Output summary() { + public Output summary() { return summary; } @Override - public Output asOutput() { + public Output asOutput() { return summary; } - private Output summary; + private Output summary; private AudioSummary(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/CreateSummaryDbWriter.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/CreateSummaryDbWriter.java index 42e390e8683..073f633c185 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/CreateSummaryDbWriter.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/CreateSummaryDbWriter.java @@ -22,6 +22,7 @@ import org.tensorflow.OperationBuilder; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TString; /** */ @@ -38,7 +39,7 @@ public final class CreateSummaryDbWriter extends PrimitiveOp { * @param userName * @return a new instance of CreateSummaryDbWriter */ - public static CreateSummaryDbWriter create(Scope scope, Operand writer, Operand dbUri, Operand experimentName, Operand runName, Operand userName) { + public static CreateSummaryDbWriter create(Scope scope, Operand writer, Operand dbUri, Operand experimentName, Operand runName, Operand userName) { OperationBuilder opBuilder = scope.env().opBuilder("CreateSummaryDbWriter", scope.makeOpName("CreateSummaryDbWriter")); opBuilder.addInput(writer.asOutput()); opBuilder.addInput(dbUri.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/CreateSummaryFileWriter.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/CreateSummaryFileWriter.java index 86b236a40b1..cf7dd18f7d4 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/CreateSummaryFileWriter.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/CreateSummaryFileWriter.java @@ -22,6 +22,8 @@ import org.tensorflow.OperationBuilder; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.TString; /** */ @@ -38,7 +40,7 @@ public final class CreateSummaryFileWriter extends PrimitiveOp { * @param filenameSuffix * @return a new instance of CreateSummaryFileWriter */ - public static CreateSummaryFileWriter create(Scope scope, Operand writer, Operand logdir, Operand maxQueue, Operand flushMillis, Operand filenameSuffix) { + public static CreateSummaryFileWriter create(Scope scope, Operand writer, Operand logdir, Operand maxQueue, Operand flushMillis, Operand filenameSuffix) { OperationBuilder opBuilder = scope.env().opBuilder("CreateSummaryFileWriter", scope.makeOpName("CreateSummaryFileWriter")); opBuilder.addInput(writer.asOutput()); opBuilder.addInput(logdir.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/HistogramSummary.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/HistogramSummary.java index 3890ebe73fb..743740de92a 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/HistogramSummary.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/HistogramSummary.java @@ -24,6 +24,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TString; +import org.tensorflow.types.family.TNumber; /** * Outputs a `Summary` protocol buffer with a histogram. @@ -35,7 +37,7 @@ * This op reports an `InvalidArgument` error if any value is not finite. */ @Operator(group = "summary") -public final class HistogramSummary extends PrimitiveOp implements Operand { +public final class HistogramSummary extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new HistogramSummary operation. @@ -45,7 +47,7 @@ public final class HistogramSummary extends PrimitiveOp implements Operand HistogramSummary create(Scope scope, Operand tag, Operand values) { + public static HistogramSummary create(Scope scope, Operand tag, Operand values) { OperationBuilder opBuilder = scope.env().opBuilder("HistogramSummary", scope.makeOpName("HistogramSummary")); opBuilder.addInput(tag.asOutput()); opBuilder.addInput(values.asOutput()); @@ -56,16 +58,16 @@ public static HistogramSummary create(Scope scope, Operand summary() { + public Output summary() { return summary; } @Override - public Output asOutput() { + public Output asOutput() { return summary; } - private Output summary; + private Output summary; private HistogramSummary(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/ImageSummary.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/ImageSummary.java index f0af64451f2..87e4909c039 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/ImageSummary.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/ImageSummary.java @@ -25,6 +25,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TString; +import org.tensorflow.types.family.TNumber; /** * Outputs a `Summary` protocol buffer with images. @@ -77,7 +79,7 @@ * red. */ @Operator(group = "summary") -public final class ImageSummary extends PrimitiveOp implements Operand { +public final class ImageSummary extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.summary.ImageSummary} @@ -117,7 +119,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of ImageSummary */ - public static ImageSummary create(Scope scope, Operand tag, Operand tensor, Options... options) { + public static ImageSummary create(Scope scope, Operand tag, Operand tensor, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("ImageSummary", scope.makeOpName("ImageSummary")); opBuilder.addInput(tag.asOutput()); opBuilder.addInput(tensor.asOutput()); @@ -152,16 +154,16 @@ public static Options badColor(Tensor badColor) { /** * Scalar. Serialized `Summary` protocol buffer. */ - public Output summary() { + public Output summary() { return summary; } @Override - public Output asOutput() { + public Output asOutput() { return summary; } - private Output summary; + private Output summary; private ImageSummary(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/ImportEvent.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/ImportEvent.java index ca279814773..adb1b50b924 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/ImportEvent.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/ImportEvent.java @@ -22,6 +22,7 @@ import org.tensorflow.OperationBuilder; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TString; /** */ @@ -35,7 +36,7 @@ public final class ImportEvent extends PrimitiveOp { * @param event * @return a new instance of ImportEvent */ - public static ImportEvent create(Scope scope, Operand writer, Operand event) { + public static ImportEvent create(Scope scope, Operand writer, Operand event) { OperationBuilder opBuilder = scope.env().opBuilder("ImportEvent", scope.makeOpName("ImportEvent")); opBuilder.addInput(writer.asOutput()); opBuilder.addInput(event.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/MergeSummary.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/MergeSummary.java index b2107dc3b34..92231500590 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/MergeSummary.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/MergeSummary.java @@ -25,6 +25,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TString; /** * Merges summaries. @@ -38,7 +39,7 @@ * in the summaries to merge use the same tag. */ @Operator(group = "summary") -public final class MergeSummary extends PrimitiveOp implements Operand { +public final class MergeSummary extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new MergeSummary operation. @@ -48,7 +49,7 @@ public final class MergeSummary extends PrimitiveOp implements Operand { * buffers. * @return a new instance of MergeSummary */ - public static MergeSummary create(Scope scope, Iterable> inputs) { + public static MergeSummary create(Scope scope, Iterable> inputs) { OperationBuilder opBuilder = scope.env().opBuilder("MergeSummary", scope.makeOpName("MergeSummary")); opBuilder.addInputList(Operands.asOutputs(inputs)); opBuilder = scope.applyControlDependencies(opBuilder); @@ -58,16 +59,16 @@ public static MergeSummary create(Scope scope, Iterable> inputs) /** * Scalar. Serialized `Summary` protocol buffer. */ - public Output summary() { + public Output summary() { return summary; } @Override - public Output asOutput() { + public Output asOutput() { return summary; } - private Output summary; + private Output summary; private MergeSummary(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/ScalarSummary.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/ScalarSummary.java index 98fdb9a4b5e..b8e10498758 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/ScalarSummary.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/ScalarSummary.java @@ -24,6 +24,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TString; +import org.tensorflow.types.family.TNumber; /** * Outputs a `Summary` protocol buffer with scalar values. @@ -32,7 +34,7 @@ * has a summary value for each tag-value pair in `tags` and `values`. */ @Operator(group = "summary") -public final class ScalarSummary extends PrimitiveOp implements Operand { +public final class ScalarSummary extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new ScalarSummary operation. @@ -42,7 +44,7 @@ public final class ScalarSummary extends PrimitiveOp implements Operand * @param values Same shape as `tags. Values for the summary. * @return a new instance of ScalarSummary */ - public static ScalarSummary create(Scope scope, Operand tags, Operand values) { + public static ScalarSummary create(Scope scope, Operand tags, Operand values) { OperationBuilder opBuilder = scope.env().opBuilder("ScalarSummary", scope.makeOpName("ScalarSummary")); opBuilder.addInput(tags.asOutput()); opBuilder.addInput(values.asOutput()); @@ -53,16 +55,16 @@ public static ScalarSummary create(Scope scope, Operand summary() { + public Output summary() { return summary; } @Override - public Output asOutput() { + public Output asOutput() { return summary; } - private Output summary; + private Output summary; private ScalarSummary(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/StatsAggregatorSummary.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/StatsAggregatorSummary.java index 3eb408f81b9..dc4372025c0 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/StatsAggregatorSummary.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/StatsAggregatorSummary.java @@ -23,11 +23,12 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TString; /** * Produces a summary of any statistics recorded by the given statistics manager. */ -public final class StatsAggregatorSummary extends PrimitiveOp implements Operand { +public final class StatsAggregatorSummary extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new StatsAggregatorSummary operation. @@ -45,16 +46,16 @@ public static StatsAggregatorSummary create(Scope scope, Operand iterator) { /** */ - public Output summary() { + public Output summary() { return summary; } @Override - public Output asOutput() { + public Output asOutput() { return summary; } - private Output summary; + private Output summary; private StatsAggregatorSummary(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/TensorSummary.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/TensorSummary.java index 8ccde18421f..64ed52e45cb 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/TensorSummary.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/TensorSummary.java @@ -24,12 +24,13 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TString; /** * Outputs a `Summary` protocol buffer with a tensor and per-plugin data. */ @Operator(group = "summary") -public final class TensorSummary extends PrimitiveOp implements Operand { +public final class TensorSummary extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new TensorSummary operation. @@ -41,7 +42,7 @@ public final class TensorSummary extends PrimitiveOp implements Operand * data. * @return a new instance of TensorSummary */ - public static TensorSummary create(Scope scope, Operand tag, Operand tensor, Operand serializedSummaryMetadata) { + public static TensorSummary create(Scope scope, Operand tag, Operand tensor, Operand serializedSummaryMetadata) { OperationBuilder opBuilder = scope.env().opBuilder("TensorSummaryV2", scope.makeOpName("TensorSummary")); opBuilder.addInput(tag.asOutput()); opBuilder.addInput(tensor.asOutput()); @@ -52,16 +53,16 @@ public static TensorSummary create(Scope scope, Operand tag, Operand /** */ - public Output summary() { + public Output summary() { return summary; } @Override - public Output asOutput() { + public Output asOutput() { return summary; } - private Output summary; + private Output summary; private TensorSummary(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/WriteAudioSummary.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/WriteAudioSummary.java index 2fa63f9d7ae..d5fdaa6baef 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/WriteAudioSummary.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/WriteAudioSummary.java @@ -22,6 +22,9 @@ import org.tensorflow.OperationBuilder; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TFloat; +import org.tensorflow.types.TInt64; +import org.tensorflow.types.TString; /** */ @@ -58,7 +61,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of WriteAudioSummary */ - public static WriteAudioSummary create(Scope scope, Operand writer, Operand step, Operand tag, Operand tensor, Operand sampleRate, Options... options) { + public static WriteAudioSummary create(Scope scope, Operand writer, Operand step, Operand tag, Operand tensor, Operand sampleRate, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("WriteAudioSummary", scope.makeOpName("WriteAudioSummary")); opBuilder.addInput(writer.asOutput()); opBuilder.addInput(step.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/WriteGraphSummary.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/WriteGraphSummary.java index e00392e7d3f..6476ba15c06 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/WriteGraphSummary.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/WriteGraphSummary.java @@ -22,6 +22,8 @@ import org.tensorflow.OperationBuilder; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TInt64; +import org.tensorflow.types.TString; /** */ @@ -36,7 +38,7 @@ public final class WriteGraphSummary extends PrimitiveOp { * @param tensor * @return a new instance of WriteGraphSummary */ - public static WriteGraphSummary create(Scope scope, Operand writer, Operand step, Operand tensor) { + public static WriteGraphSummary create(Scope scope, Operand writer, Operand step, Operand tensor) { OperationBuilder opBuilder = scope.env().opBuilder("WriteGraphSummary", scope.makeOpName("WriteGraphSummary")); opBuilder.addInput(writer.asOutput()); opBuilder.addInput(step.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/WriteHistogramSummary.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/WriteHistogramSummary.java index 3927383bf92..ddd0e8dfe76 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/WriteHistogramSummary.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/WriteHistogramSummary.java @@ -22,6 +22,9 @@ import org.tensorflow.OperationBuilder; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TInt64; +import org.tensorflow.types.TString; +import org.tensorflow.types.family.TNumber; /** */ @@ -37,7 +40,7 @@ public final class WriteHistogramSummary extends PrimitiveOp { * @param values * @return a new instance of WriteHistogramSummary */ - public static WriteHistogramSummary create(Scope scope, Operand writer, Operand step, Operand tag, Operand values) { + public static WriteHistogramSummary create(Scope scope, Operand writer, Operand step, Operand tag, Operand values) { OperationBuilder opBuilder = scope.env().opBuilder("WriteHistogramSummary", scope.makeOpName("WriteHistogramSummary")); opBuilder.addInput(writer.asOutput()); opBuilder.addInput(step.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/WriteImageSummary.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/WriteImageSummary.java index fdaa895095f..4a4bf0ae6f4 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/WriteImageSummary.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/WriteImageSummary.java @@ -22,7 +22,10 @@ import org.tensorflow.OperationBuilder; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; -import org.tensorflow.types.UInt8; +import org.tensorflow.types.TInt64; +import org.tensorflow.types.TString; +import org.tensorflow.types.TUInt8; +import org.tensorflow.types.family.TNumber; /** */ @@ -59,7 +62,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of WriteImageSummary */ - public static WriteImageSummary create(Scope scope, Operand writer, Operand step, Operand tag, Operand tensor, Operand badColor, Options... options) { + public static WriteImageSummary create(Scope scope, Operand writer, Operand step, Operand tag, Operand tensor, Operand badColor, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("WriteImageSummary", scope.makeOpName("WriteImageSummary")); opBuilder.addInput(writer.asOutput()); opBuilder.addInput(step.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/WriteScalarSummary.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/WriteScalarSummary.java index 234eeff3cb4..a64d53d8837 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/WriteScalarSummary.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/WriteScalarSummary.java @@ -22,6 +22,9 @@ import org.tensorflow.OperationBuilder; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TInt64; +import org.tensorflow.types.TString; +import org.tensorflow.types.family.TNumber; /** */ @@ -37,7 +40,7 @@ public final class WriteScalarSummary extends PrimitiveOp { * @param value * @return a new instance of WriteScalarSummary */ - public static WriteScalarSummary create(Scope scope, Operand writer, Operand step, Operand tag, Operand value) { + public static WriteScalarSummary create(Scope scope, Operand writer, Operand step, Operand tag, Operand value) { OperationBuilder opBuilder = scope.env().opBuilder("WriteScalarSummary", scope.makeOpName("WriteScalarSummary")); opBuilder.addInput(writer.asOutput()); opBuilder.addInput(step.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/WriteSummary.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/WriteSummary.java index 875cc002da1..6eea98df77f 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/WriteSummary.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/WriteSummary.java @@ -22,6 +22,8 @@ import org.tensorflow.OperationBuilder; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TInt64; +import org.tensorflow.types.TString; /** */ @@ -38,7 +40,7 @@ public final class WriteSummary extends PrimitiveOp { * @param summaryMetadata * @return a new instance of WriteSummary */ - public static WriteSummary create(Scope scope, Operand writer, Operand step, Operand tensor, Operand tag, Operand summaryMetadata) { + public static WriteSummary create(Scope scope, Operand writer, Operand step, Operand tensor, Operand tag, Operand summaryMetadata) { OperationBuilder opBuilder = scope.env().opBuilder("WriteSummary", scope.makeOpName("WriteSummary")); opBuilder.addInput(writer.asOutput()); opBuilder.addInput(step.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/AccumulatorApplyGradient.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/AccumulatorApplyGradient.java index 59a8b944bff..efe487dab6f 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/AccumulatorApplyGradient.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/AccumulatorApplyGradient.java @@ -23,6 +23,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt64; +import org.tensorflow.types.TString; /** * Applies a gradient to a given accumulator. @@ -41,7 +43,7 @@ public final class AccumulatorApplyGradient extends PrimitiveOp { * @param gradient A tensor of the gradient to be accumulated. * @return a new instance of AccumulatorApplyGradient */ - public static AccumulatorApplyGradient create(Scope scope, Operand handle, Operand localStep, Operand gradient) { + public static AccumulatorApplyGradient create(Scope scope, Operand handle, Operand localStep, Operand gradient) { OperationBuilder opBuilder = scope.env().opBuilder("AccumulatorApplyGradient", scope.makeOpName("AccumulatorApplyGradient")); opBuilder.addInput(handle.asOutput()); opBuilder.addInput(localStep.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/AccumulatorNumAccumulated.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/AccumulatorNumAccumulated.java index 1cd6128f313..3342737d9fe 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/AccumulatorNumAccumulated.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/AccumulatorNumAccumulated.java @@ -24,12 +24,14 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.TString; /** * Returns the number of gradients aggregated in the given accumulators. */ @Operator(group = "train") -public final class AccumulatorNumAccumulated extends PrimitiveOp implements Operand { +public final class AccumulatorNumAccumulated extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new AccumulatorNumAccumulated operation. @@ -38,7 +40,7 @@ public final class AccumulatorNumAccumulated extends PrimitiveOp implements Oper * @param handle The handle to an accumulator. * @return a new instance of AccumulatorNumAccumulated */ - public static AccumulatorNumAccumulated create(Scope scope, Operand handle) { + public static AccumulatorNumAccumulated create(Scope scope, Operand handle) { OperationBuilder opBuilder = scope.env().opBuilder("AccumulatorNumAccumulated", scope.makeOpName("AccumulatorNumAccumulated")); opBuilder.addInput(handle.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); @@ -48,16 +50,16 @@ public static AccumulatorNumAccumulated create(Scope scope, Operand hand /** * The number of gradients aggregated in the given accumulator. */ - public Output numAccumulated() { + public Output numAccumulated() { return numAccumulated; } @Override - public Output asOutput() { + public Output asOutput() { return numAccumulated; } - private Output numAccumulated; + private Output numAccumulated; private AccumulatorNumAccumulated(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/AccumulatorSetGlobalStep.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/AccumulatorSetGlobalStep.java index 2410fa84f25..4c7555a7c06 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/AccumulatorSetGlobalStep.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/AccumulatorSetGlobalStep.java @@ -23,6 +23,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt64; +import org.tensorflow.types.TString; /** * Updates the accumulator with a new value for global_step. @@ -41,7 +43,7 @@ public final class AccumulatorSetGlobalStep extends PrimitiveOp { * @param newGlobalStep The new global_step value to set. * @return a new instance of AccumulatorSetGlobalStep */ - public static AccumulatorSetGlobalStep create(Scope scope, Operand handle, Operand newGlobalStep) { + public static AccumulatorSetGlobalStep create(Scope scope, Operand handle, Operand newGlobalStep) { OperationBuilder opBuilder = scope.env().opBuilder("AccumulatorSetGlobalStep", scope.makeOpName("AccumulatorSetGlobalStep")); opBuilder.addInput(handle.asOutput()); opBuilder.addInput(newGlobalStep.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/AccumulatorTakeGradient.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/AccumulatorTakeGradient.java index 7097e287c9f..2d934dfc9f9 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/AccumulatorTakeGradient.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/AccumulatorTakeGradient.java @@ -25,6 +25,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.TString; /** * Extracts the average gradient in the given ConditionalAccumulator. @@ -50,12 +52,12 @@ public final class AccumulatorTakeGradient extends PrimitiveOp implements Ope * of the accumulator. * @return a new instance of AccumulatorTakeGradient */ - public static AccumulatorTakeGradient create(Scope scope, Operand handle, Operand numRequired, Class dtype) { + public static AccumulatorTakeGradient create(Scope scope, Operand handle, Operand numRequired, DataType dtype) { OperationBuilder opBuilder = scope.env().opBuilder("AccumulatorTakeGradient", scope.makeOpName("AccumulatorTakeGradient")); opBuilder.addInput(handle.asOutput()); opBuilder.addInput(numRequired.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); - opBuilder.setAttr("dtype", DataType.fromClass(dtype)); + opBuilder.setAttr("dtype", dtype); return new AccumulatorTakeGradient(opBuilder.build()); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ApplyAdagradDa.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ApplyAdagradDa.java index 92774306704..5e0df560989 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ApplyAdagradDa.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ApplyAdagradDa.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt64; /** * Update '*var' according to the proximal adagrad scheme. @@ -68,7 +69,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of ApplyAdagradDa */ - public static ApplyAdagradDa create(Scope scope, Operand var, Operand gradientAccumulator, Operand gradientSquaredAccumulator, Operand grad, Operand lr, Operand l1, Operand l2, Operand globalStep, Options... options) { + public static ApplyAdagradDa create(Scope scope, Operand var, Operand gradientAccumulator, Operand gradientSquaredAccumulator, Operand grad, Operand lr, Operand l1, Operand l2, Operand globalStep, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("ApplyAdagradDA", scope.makeOpName("ApplyAdagradDa")); opBuilder.addInput(var.asOutput()); opBuilder.addInput(gradientAccumulator.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ConditionalAccumulator.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ConditionalAccumulator.java index 1157cb00f8d..b48ebc3fd38 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ConditionalAccumulator.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ConditionalAccumulator.java @@ -22,10 +22,11 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TString; /** * A conditional accumulator for aggregating gradients. @@ -38,7 +39,7 @@ * the accumulator. */ @Operator(group = "train") -public final class ConditionalAccumulator extends PrimitiveOp implements Operand { +public final class ConditionalAccumulator extends PrimitiveOp implements Operand { /** * Optional attributes for {@link org.tensorflow.op.train.ConditionalAccumulator} @@ -88,10 +89,10 @@ private Options() { * @param options carries optional attributes values * @return a new instance of ConditionalAccumulator */ - public static ConditionalAccumulator create(Scope scope, Class dtype, Shape shape, Options... options) { + public static ConditionalAccumulator create(Scope scope, DataType dtype, Shape shape, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("ConditionalAccumulator", scope.makeOpName("ConditionalAccumulator")); opBuilder = scope.applyControlDependencies(opBuilder); - opBuilder.setAttr("dtype", DataType.fromClass(dtype)); + opBuilder.setAttr("dtype", dtype); opBuilder.setAttr("shape", shape); if (options != null) { for (Options opts : options) { @@ -135,16 +136,16 @@ public static Options reductionType(String reductionType) { /** * The handle to the accumulator. */ - public Output handle() { + public Output handle() { return handle; } @Override - public Output asOutput() { + public Output asOutput() { return handle; } - private Output handle; + private Output handle; private ConditionalAccumulator(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/GenerateVocabRemapping.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/GenerateVocabRemapping.java index 72bd31765cd..2789f119eb9 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/GenerateVocabRemapping.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/GenerateVocabRemapping.java @@ -24,6 +24,9 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.TInt64; +import org.tensorflow.types.TString; /** * Given a path to new and old vocabulary files, returns a remapping Tensor of @@ -91,7 +94,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of GenerateVocabRemapping */ - public static GenerateVocabRemapping create(Scope scope, Operand newVocabFile, Operand oldVocabFile, Long newVocabOffset, Long numNewVocab, Options... options) { + public static GenerateVocabRemapping create(Scope scope, Operand newVocabFile, Operand oldVocabFile, Long newVocabOffset, Long numNewVocab, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("GenerateVocabRemapping", scope.makeOpName("GenerateVocabRemapping")); opBuilder.addInput(newVocabFile.asOutput()); opBuilder.addInput(oldVocabFile.asOutput()); @@ -121,19 +124,19 @@ public static Options oldVocabSize(Long oldVocabSize) { * is equal to the old ID that maps to the new ID i. This element is -1 for any * new ID that is not found in the old vocabulary. */ - public Output remapping() { + public Output remapping() { return remapping; } /** * Number of new vocab entries found in old vocab. */ - public Output numPresent() { + public Output numPresent() { return numPresent; } - private Output remapping; - private Output numPresent; + private Output remapping; + private Output numPresent; private GenerateVocabRemapping(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/MergeV2Checkpoints.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/MergeV2Checkpoints.java index 5f0d4cb1751..f54f6b0cedf 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/MergeV2Checkpoints.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/MergeV2Checkpoints.java @@ -23,6 +23,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TString; /** * V2 format specific: merges the metadata files of sharded checkpoints. The @@ -68,7 +69,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of MergeV2Checkpoints */ - public static MergeV2Checkpoints create(Scope scope, Operand checkpointPrefixes, Operand destinationPrefix, Options... options) { + public static MergeV2Checkpoints create(Scope scope, Operand checkpointPrefixes, Operand destinationPrefix, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("MergeV2Checkpoints", scope.makeOpName("MergeV2Checkpoints")); opBuilder.addInput(checkpointPrefixes.asOutput()); opBuilder.addInput(destinationPrefix.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/NegTrain.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/NegTrain.java index d3d146b4dfe..43191e763ce 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/NegTrain.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/NegTrain.java @@ -24,6 +24,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TFloat; +import org.tensorflow.types.TInt32; /** * Training via negative sampling. @@ -44,7 +46,7 @@ public final class NegTrain extends PrimitiveOp { * @param numNegativeSamples Number of negative samples per example. * @return a new instance of NegTrain */ - public static NegTrain create(Scope scope, Operand wIn, Operand wOut, Operand examples, Operand labels, Operand lr, List vocabCount, Long numNegativeSamples) { + public static NegTrain create(Scope scope, Operand wIn, Operand wOut, Operand examples, Operand labels, Operand lr, List vocabCount, Long numNegativeSamples) { OperationBuilder opBuilder = scope.env().opBuilder("NegTrain", scope.makeOpName("NegTrain")); opBuilder.addInput(wIn.asOutput()); opBuilder.addInput(wOut.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyAdagradDa.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyAdagradDa.java index f173947b5c8..d1a2117f32e 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyAdagradDa.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyAdagradDa.java @@ -23,6 +23,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt64; /** * Update '*var' according to the proximal adagrad scheme. @@ -65,7 +66,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of ResourceApplyAdagradDa */ - public static ResourceApplyAdagradDa create(Scope scope, Operand var, Operand gradientAccumulator, Operand gradientSquaredAccumulator, Operand grad, Operand lr, Operand l1, Operand l2, Operand globalStep, Options... options) { + public static ResourceApplyAdagradDa create(Scope scope, Operand var, Operand gradientAccumulator, Operand gradientSquaredAccumulator, Operand grad, Operand lr, Operand l1, Operand l2, Operand globalStep, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("ResourceApplyAdagradDA", scope.makeOpName("ResourceApplyAdagradDa")); opBuilder.addInput(var.asOutput()); opBuilder.addInput(gradientAccumulator.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyAdadelta.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyAdadelta.java index 54a43176034..c2069573638 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyAdadelta.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyAdadelta.java @@ -23,6 +23,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * var: Should be from a Variable(). @@ -65,7 +66,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of ResourceSparseApplyAdadelta */ - public static ResourceSparseApplyAdadelta create(Scope scope, Operand var, Operand accum, Operand accumUpdate, Operand lr, Operand rho, Operand epsilon, Operand grad, Operand indices, Options... options) { + public static ResourceSparseApplyAdadelta create(Scope scope, Operand var, Operand accum, Operand accumUpdate, Operand lr, Operand rho, Operand epsilon, Operand grad, Operand indices, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("ResourceSparseApplyAdadelta", scope.makeOpName("ResourceSparseApplyAdadelta")); opBuilder.addInput(var.asOutput()); opBuilder.addInput(accum.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyAdagrad.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyAdagrad.java index d594ec19999..83b53517bba 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyAdagrad.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyAdagrad.java @@ -23,6 +23,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Update relevant entries in '*var' and '*accum' according to the adagrad scheme. @@ -76,7 +77,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of ResourceSparseApplyAdagrad */ - public static ResourceSparseApplyAdagrad create(Scope scope, Operand var, Operand accum, Operand lr, Operand grad, Operand indices, Options... options) { + public static ResourceSparseApplyAdagrad create(Scope scope, Operand var, Operand accum, Operand lr, Operand grad, Operand indices, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("ResourceSparseApplyAdagrad", scope.makeOpName("ResourceSparseApplyAdagrad")); opBuilder.addInput(var.asOutput()); opBuilder.addInput(accum.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyAdagradDa.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyAdagradDa.java index 27c69356309..aa8bba3de68 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyAdagradDa.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyAdagradDa.java @@ -23,6 +23,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt64; +import org.tensorflow.types.family.TNumber; /** * Update entries in '*var' and '*accum' according to the proximal adagrad scheme. @@ -66,7 +68,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of ResourceSparseApplyAdagradDa */ - public static ResourceSparseApplyAdagradDa create(Scope scope, Operand var, Operand gradientAccumulator, Operand gradientSquaredAccumulator, Operand grad, Operand indices, Operand lr, Operand l1, Operand l2, Operand globalStep, Options... options) { + public static ResourceSparseApplyAdagradDa create(Scope scope, Operand var, Operand gradientAccumulator, Operand gradientSquaredAccumulator, Operand grad, Operand indices, Operand lr, Operand l1, Operand l2, Operand globalStep, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("ResourceSparseApplyAdagradDA", scope.makeOpName("ResourceSparseApplyAdagradDa")); opBuilder.addInput(var.asOutput()); opBuilder.addInput(gradientAccumulator.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyCenteredRmsProp.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyCenteredRmsProp.java index 0823cc88297..9ded3e22598 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyCenteredRmsProp.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyCenteredRmsProp.java @@ -23,6 +23,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Update '*var' according to the centered RMSProp algorithm. @@ -85,7 +86,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of ResourceSparseApplyCenteredRmsProp */ - public static ResourceSparseApplyCenteredRmsProp create(Scope scope, Operand var, Operand mg, Operand ms, Operand mom, Operand lr, Operand rho, Operand momentum, Operand epsilon, Operand grad, Operand indices, Options... options) { + public static ResourceSparseApplyCenteredRmsProp create(Scope scope, Operand var, Operand mg, Operand ms, Operand mom, Operand lr, Operand rho, Operand momentum, Operand epsilon, Operand grad, Operand indices, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("ResourceSparseApplyCenteredRMSProp", scope.makeOpName("ResourceSparseApplyCenteredRmsProp")); opBuilder.addInput(var.asOutput()); opBuilder.addInput(mg.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyFtrl.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyFtrl.java index dabd99378c6..f021e17822b 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyFtrl.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyFtrl.java @@ -23,6 +23,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Update relevant entries in '*var' according to the Ftrl-proximal scheme. @@ -77,7 +78,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of ResourceSparseApplyFtrl */ - public static ResourceSparseApplyFtrl create(Scope scope, Operand var, Operand accum, Operand linear, Operand grad, Operand indices, Operand lr, Operand l1, Operand l2, Operand l2Shrinkage, Operand lrPower, Options... options) { + public static ResourceSparseApplyFtrl create(Scope scope, Operand var, Operand accum, Operand linear, Operand grad, Operand indices, Operand lr, Operand l1, Operand l2, Operand l2Shrinkage, Operand lrPower, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("ResourceSparseApplyFtrlV2", scope.makeOpName("ResourceSparseApplyFtrl")); opBuilder.addInput(var.asOutput()); opBuilder.addInput(accum.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyMomentum.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyMomentum.java index 31913c66da6..5835fb1bd58 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyMomentum.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyMomentum.java @@ -23,6 +23,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Update relevant entries in '*var' and '*accum' according to the momentum scheme. @@ -82,7 +83,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of ResourceSparseApplyMomentum */ - public static ResourceSparseApplyMomentum create(Scope scope, Operand var, Operand accum, Operand lr, Operand grad, Operand indices, Operand momentum, Options... options) { + public static ResourceSparseApplyMomentum create(Scope scope, Operand var, Operand accum, Operand lr, Operand grad, Operand indices, Operand momentum, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("ResourceSparseApplyMomentum", scope.makeOpName("ResourceSparseApplyMomentum")); opBuilder.addInput(var.asOutput()); opBuilder.addInput(accum.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyProximalAdagrad.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyProximalAdagrad.java index 5ec0f053ce5..cf7347f4b25 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyProximalAdagrad.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyProximalAdagrad.java @@ -23,6 +23,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Sparse update entries in '*var' and '*accum' according to FOBOS algorithm. @@ -70,7 +71,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of ResourceSparseApplyProximalAdagrad */ - public static ResourceSparseApplyProximalAdagrad create(Scope scope, Operand var, Operand accum, Operand lr, Operand l1, Operand l2, Operand grad, Operand indices, Options... options) { + public static ResourceSparseApplyProximalAdagrad create(Scope scope, Operand var, Operand accum, Operand lr, Operand l1, Operand l2, Operand grad, Operand indices, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("ResourceSparseApplyProximalAdagrad", scope.makeOpName("ResourceSparseApplyProximalAdagrad")); opBuilder.addInput(var.asOutput()); opBuilder.addInput(accum.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyProximalGradientDescent.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyProximalGradientDescent.java index 2f258ab1d2b..578b9f006e4 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyProximalGradientDescent.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyProximalGradientDescent.java @@ -23,6 +23,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Sparse update '*var' as FOBOS algorithm with fixed learning rate. @@ -67,7 +68,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of ResourceSparseApplyProximalGradientDescent */ - public static ResourceSparseApplyProximalGradientDescent create(Scope scope, Operand var, Operand alpha, Operand l1, Operand l2, Operand grad, Operand indices, Options... options) { + public static ResourceSparseApplyProximalGradientDescent create(Scope scope, Operand var, Operand alpha, Operand l1, Operand l2, Operand grad, Operand indices, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("ResourceSparseApplyProximalGradientDescent", scope.makeOpName("ResourceSparseApplyProximalGradientDescent")); opBuilder.addInput(var.asOutput()); opBuilder.addInput(alpha.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyRmsProp.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyRmsProp.java index 8ae16ea5c70..371e151bb87 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyRmsProp.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyRmsProp.java @@ -23,6 +23,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Update '*var' according to the RMSProp algorithm. @@ -78,7 +79,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of ResourceSparseApplyRmsProp */ - public static ResourceSparseApplyRmsProp create(Scope scope, Operand var, Operand ms, Operand mom, Operand lr, Operand rho, Operand momentum, Operand epsilon, Operand grad, Operand indices, Options... options) { + public static ResourceSparseApplyRmsProp create(Scope scope, Operand var, Operand ms, Operand mom, Operand lr, Operand rho, Operand momentum, Operand epsilon, Operand grad, Operand indices, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("ResourceSparseApplyRMSProp", scope.makeOpName("ResourceSparseApplyRmsProp")); opBuilder.addInput(var.asOutput()); opBuilder.addInput(ms.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/Restore.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/Restore.java index 5ab8db3403c..b1c9f1c8544 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/Restore.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/Restore.java @@ -28,6 +28,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TString; /** * Restores tensors from a V2 checkpoint. @@ -61,7 +62,7 @@ public final class Restore extends PrimitiveOp implements Iterable prefix, Operand tensorNames, Operand shapeAndSlices, List> dtypes) { + public static Restore create(Scope scope, Operand prefix, Operand tensorNames, Operand shapeAndSlices, List> dtypes) { OperationBuilder opBuilder = scope.env().opBuilder("RestoreV2", scope.makeOpName("Restore")); opBuilder.addInput(prefix.asOutput()); opBuilder.addInput(tensorNames.asOutput()); @@ -69,7 +70,7 @@ public static Restore create(Scope scope, Operand prefix, Operand RestoreSlice create(Scope scope, Operand filePattern, Operand tensorName, Operand shapeAndSlice, Class dt, Options... options) { + public static RestoreSlice create(Scope scope, Operand filePattern, Operand tensorName, Operand shapeAndSlice, DataType dt, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("RestoreSlice", scope.makeOpName("RestoreSlice")); opBuilder.addInput(filePattern.asOutput()); opBuilder.addInput(tensorName.asOutput()); opBuilder.addInput(shapeAndSlice.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); - opBuilder.setAttr("dt", DataType.fromClass(dt)); + opBuilder.setAttr("dt", dt); if (options != null) { for (Options opts : options) { if (opts.preferredShard != null) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/Save.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/Save.java index f56f4a9b9ba..91a8a1f2a51 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/Save.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/Save.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TString; /** * Saves tensors in V2 checkpoint format. @@ -47,7 +48,7 @@ public final class Save extends PrimitiveOp { * @param tensors `N` tensors to save. * @return a new instance of Save */ - public static Save create(Scope scope, Operand prefix, Operand tensorNames, Operand shapeAndSlices, Iterable> tensors) { + public static Save create(Scope scope, Operand prefix, Operand tensorNames, Operand shapeAndSlices, Iterable> tensors) { OperationBuilder opBuilder = scope.env().opBuilder("SaveV2", scope.makeOpName("Save")); opBuilder.addInput(prefix.asOutput()); opBuilder.addInput(tensorNames.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/SaveSlices.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/SaveSlices.java index 3df127c1e4b..e3f0b346124 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/SaveSlices.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/SaveSlices.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TString; /** * Saves input tensors slices to disk. @@ -73,7 +74,7 @@ public final class SaveSlices extends PrimitiveOp { * @param data `N` tensors to save. * @return a new instance of SaveSlices */ - public static SaveSlices create(Scope scope, Operand filename, Operand tensorNames, Operand shapesAndSlices, Iterable> data) { + public static SaveSlices create(Scope scope, Operand filename, Operand tensorNames, Operand shapesAndSlices, Iterable> data) { OperationBuilder opBuilder = scope.env().opBuilder("SaveSlices", scope.makeOpName("SaveSlices")); opBuilder.addInput(filename.asOutput()); opBuilder.addInput(tensorNames.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/SdcaFprint.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/SdcaFprint.java index cb5c885f4c7..8286cb92f0c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/SdcaFprint.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/SdcaFprint.java @@ -24,12 +24,14 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt64; +import org.tensorflow.types.TString; /** * Computes fingerprints of the input strings. */ @Operator(group = "train") -public final class SdcaFprint extends PrimitiveOp implements Operand { +public final class SdcaFprint extends PrimitiveOp implements Operand { /** * Factory method to create a class wrapping a new SdcaFprint operation. @@ -38,7 +40,7 @@ public final class SdcaFprint extends PrimitiveOp implements Operand { * @param input vector of strings to compute fingerprints on. * @return a new instance of SdcaFprint */ - public static SdcaFprint create(Scope scope, Operand input) { + public static SdcaFprint create(Scope scope, Operand input) { OperationBuilder opBuilder = scope.env().opBuilder("SdcaFprint", scope.makeOpName("SdcaFprint")); opBuilder.addInput(input.asOutput()); opBuilder = scope.applyControlDependencies(opBuilder); @@ -49,16 +51,16 @@ public static SdcaFprint create(Scope scope, Operand input) { * a (N,2) shaped matrix where N is the number of elements in the input * vector. Each row contains the low and high parts of the fingerprint. */ - public Output output() { + public Output output() { return output; } @Override - public Output asOutput() { + public Output asOutput() { return output; } - private Output output; + private Output output; private SdcaFprint(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/SdcaOptimizer.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/SdcaOptimizer.java index 2f18e53407c..1a2de51a4c9 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/SdcaOptimizer.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/SdcaOptimizer.java @@ -26,6 +26,8 @@ import org.tensorflow.op.Operands; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.types.TFloat; +import org.tensorflow.types.TInt64; /** * Distributed version of Stochastic Dual Coordinate Ascent (SDCA) optimizer for @@ -99,7 +101,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of SdcaOptimizer */ - public static SdcaOptimizer create(Scope scope, Iterable> sparseExampleIndices, Iterable> sparseFeatureIndices, Iterable> sparseFeatureValues, Iterable> denseFeatures, Operand exampleWeights, Operand exampleLabels, Iterable> sparseIndices, Iterable> sparseWeights, Iterable> denseWeights, Operand exampleStateData, String lossType, Float l1, Float l2, Long numLossPartitions, Long numInnerIterations, Options... options) { + public static SdcaOptimizer create(Scope scope, Iterable> sparseExampleIndices, Iterable> sparseFeatureIndices, Iterable> sparseFeatureValues, Iterable> denseFeatures, Operand exampleWeights, Operand exampleLabels, Iterable> sparseIndices, Iterable> sparseWeights, Iterable> denseWeights, Operand exampleStateData, String lossType, Float l1, Float l2, Long numLossPartitions, Long numInnerIterations, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("SdcaOptimizerV2", scope.makeOpName("SdcaOptimizer")); opBuilder.addInputList(Operands.asOutputs(sparseExampleIndices)); opBuilder.addInputList(Operands.asOutputs(sparseFeatureIndices)); @@ -138,7 +140,7 @@ public static Options adaptive(Boolean adaptive) { * a list of vectors containing the updated example state * data. */ - public Output outExampleStateData() { + public Output outExampleStateData() { return outExampleStateData; } @@ -146,7 +148,7 @@ public Output outExampleStateData() { * a list of vectors where each value is the delta * weights associated with a sparse feature group. */ - public List> outDeltaSparseWeights() { + public List> outDeltaSparseWeights() { return outDeltaSparseWeights; } @@ -154,13 +156,13 @@ public List> outDeltaSparseWeights() { * a list of vectors where the values are the delta * weights associated with a dense feature group. */ - public List> outDeltaDenseWeights() { + public List> outDeltaDenseWeights() { return outDeltaDenseWeights; } - private Output outExampleStateData; - private List> outDeltaSparseWeights; - private List> outDeltaDenseWeights; + private Output outExampleStateData; + private List> outDeltaSparseWeights; + private List> outDeltaDenseWeights; @SuppressWarnings("unchecked") private SdcaOptimizer(Operation operation) { @@ -168,10 +170,10 @@ private SdcaOptimizer(Operation operation) { int outputIdx = 0; outExampleStateData = operation.output(outputIdx++); int outDeltaSparseWeightsLength = operation.outputListLength("out_delta_sparse_weights"); - outDeltaSparseWeights = Arrays.asList((Output[])operation.outputList(outputIdx, outDeltaSparseWeightsLength)); + outDeltaSparseWeights = Arrays.asList((Output[])operation.outputList(outputIdx, outDeltaSparseWeightsLength)); outputIdx += outDeltaSparseWeightsLength; int outDeltaDenseWeightsLength = operation.outputListLength("out_delta_dense_weights"); - outDeltaDenseWeights = Arrays.asList((Output[])operation.outputList(outputIdx, outDeltaDenseWeightsLength)); + outDeltaDenseWeights = Arrays.asList((Output[])operation.outputList(outputIdx, outDeltaDenseWeightsLength)); outputIdx += outDeltaDenseWeightsLength; } } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/SdcaShrinkL1.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/SdcaShrinkL1.java index 1b228281454..24ea202a749 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/SdcaShrinkL1.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/SdcaShrinkL1.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TFloat; /** * Applies L1 regularization shrink step on the parameters. @@ -41,7 +42,7 @@ public final class SdcaShrinkL1 extends PrimitiveOp { * @param l2 Symmetric l2 regularization strength. Should be a positive float. * @return a new instance of SdcaShrinkL1 */ - public static SdcaShrinkL1 create(Scope scope, Iterable> weights, Float l1, Float l2) { + public static SdcaShrinkL1 create(Scope scope, Iterable> weights, Float l1, Float l2) { OperationBuilder opBuilder = scope.env().opBuilder("SdcaShrinkL1", scope.makeOpName("SdcaShrinkL1")); opBuilder.addInputList(Operands.asOutputs(weights)); opBuilder = scope.applyControlDependencies(opBuilder); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/SparseApplyAdadelta.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/SparseApplyAdadelta.java index fa0b951ab60..6b011e9a670 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/SparseApplyAdadelta.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/SparseApplyAdadelta.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * var: Should be from a Variable(). @@ -68,7 +69,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of SparseApplyAdadelta */ - public static SparseApplyAdadelta create(Scope scope, Operand var, Operand accum, Operand accumUpdate, Operand lr, Operand rho, Operand epsilon, Operand grad, Operand indices, Options... options) { + public static SparseApplyAdadelta create(Scope scope, Operand var, Operand accum, Operand accumUpdate, Operand lr, Operand rho, Operand epsilon, Operand grad, Operand indices, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("SparseApplyAdadelta", scope.makeOpName("SparseApplyAdadelta")); opBuilder.addInput(var.asOutput()); opBuilder.addInput(accum.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/SparseApplyAdagrad.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/SparseApplyAdagrad.java index a5ab8579cdc..1c2e3bf5bf4 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/SparseApplyAdagrad.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/SparseApplyAdagrad.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Update relevant entries in '*var' and '*accum' according to the adagrad scheme. @@ -79,7 +80,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of SparseApplyAdagrad */ - public static SparseApplyAdagrad create(Scope scope, Operand var, Operand accum, Operand lr, Operand grad, Operand indices, Options... options) { + public static SparseApplyAdagrad create(Scope scope, Operand var, Operand accum, Operand lr, Operand grad, Operand indices, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("SparseApplyAdagrad", scope.makeOpName("SparseApplyAdagrad")); opBuilder.addInput(var.asOutput()); opBuilder.addInput(accum.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/SparseApplyAdagradDa.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/SparseApplyAdagradDa.java index bd63ff92d86..29d7cab2126 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/SparseApplyAdagradDa.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/SparseApplyAdagradDa.java @@ -24,6 +24,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt64; +import org.tensorflow.types.family.TNumber; /** * Update entries in '*var' and '*accum' according to the proximal adagrad scheme. @@ -69,7 +71,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of SparseApplyAdagradDa */ - public static SparseApplyAdagradDa create(Scope scope, Operand var, Operand gradientAccumulator, Operand gradientSquaredAccumulator, Operand grad, Operand indices, Operand lr, Operand l1, Operand l2, Operand globalStep, Options... options) { + public static SparseApplyAdagradDa create(Scope scope, Operand var, Operand gradientAccumulator, Operand gradientSquaredAccumulator, Operand grad, Operand indices, Operand lr, Operand l1, Operand l2, Operand globalStep, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("SparseApplyAdagradDA", scope.makeOpName("SparseApplyAdagradDa")); opBuilder.addInput(var.asOutput()); opBuilder.addInput(gradientAccumulator.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/SparseApplyCenteredRmsProp.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/SparseApplyCenteredRmsProp.java index fef12ee9630..fe74b0eea18 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/SparseApplyCenteredRmsProp.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/SparseApplyCenteredRmsProp.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Update '*var' according to the centered RMSProp algorithm. @@ -88,7 +89,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of SparseApplyCenteredRmsProp */ - public static SparseApplyCenteredRmsProp create(Scope scope, Operand var, Operand mg, Operand ms, Operand mom, Operand lr, Operand rho, Operand momentum, Operand epsilon, Operand grad, Operand indices, Options... options) { + public static SparseApplyCenteredRmsProp create(Scope scope, Operand var, Operand mg, Operand ms, Operand mom, Operand lr, Operand rho, Operand momentum, Operand epsilon, Operand grad, Operand indices, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("SparseApplyCenteredRMSProp", scope.makeOpName("SparseApplyCenteredRmsProp")); opBuilder.addInput(var.asOutput()); opBuilder.addInput(mg.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/SparseApplyFtrl.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/SparseApplyFtrl.java index b77d5971ffa..b8c933907c0 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/SparseApplyFtrl.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/SparseApplyFtrl.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Update relevant entries in '*var' according to the Ftrl-proximal scheme. @@ -80,7 +81,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of SparseApplyFtrl */ - public static SparseApplyFtrl create(Scope scope, Operand var, Operand accum, Operand linear, Operand grad, Operand indices, Operand lr, Operand l1, Operand l2, Operand l2Shrinkage, Operand lrPower, Options... options) { + public static SparseApplyFtrl create(Scope scope, Operand var, Operand accum, Operand linear, Operand grad, Operand indices, Operand lr, Operand l1, Operand l2, Operand l2Shrinkage, Operand lrPower, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("SparseApplyFtrlV2", scope.makeOpName("SparseApplyFtrl")); opBuilder.addInput(var.asOutput()); opBuilder.addInput(accum.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/SparseApplyMomentum.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/SparseApplyMomentum.java index 0b155c84dfd..c371d371e26 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/SparseApplyMomentum.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/SparseApplyMomentum.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Update relevant entries in '*var' and '*accum' according to the momentum scheme. @@ -85,7 +86,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of SparseApplyMomentum */ - public static SparseApplyMomentum create(Scope scope, Operand var, Operand accum, Operand lr, Operand grad, Operand indices, Operand momentum, Options... options) { + public static SparseApplyMomentum create(Scope scope, Operand var, Operand accum, Operand lr, Operand grad, Operand indices, Operand momentum, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("SparseApplyMomentum", scope.makeOpName("SparseApplyMomentum")); opBuilder.addInput(var.asOutput()); opBuilder.addInput(accum.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/SparseApplyProximalAdagrad.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/SparseApplyProximalAdagrad.java index 6d1e4b63074..11091294e84 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/SparseApplyProximalAdagrad.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/SparseApplyProximalAdagrad.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Sparse update entries in '*var' and '*accum' according to FOBOS algorithm. @@ -73,7 +74,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of SparseApplyProximalAdagrad */ - public static SparseApplyProximalAdagrad create(Scope scope, Operand var, Operand accum, Operand lr, Operand l1, Operand l2, Operand grad, Operand indices, Options... options) { + public static SparseApplyProximalAdagrad create(Scope scope, Operand var, Operand accum, Operand lr, Operand l1, Operand l2, Operand grad, Operand indices, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("SparseApplyProximalAdagrad", scope.makeOpName("SparseApplyProximalAdagrad")); opBuilder.addInput(var.asOutput()); opBuilder.addInput(accum.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/SparseApplyProximalGradientDescent.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/SparseApplyProximalGradientDescent.java index 81b0057d6ab..8abc2272946 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/SparseApplyProximalGradientDescent.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/SparseApplyProximalGradientDescent.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Sparse update '*var' as FOBOS algorithm with fixed learning rate. @@ -70,7 +71,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of SparseApplyProximalGradientDescent */ - public static SparseApplyProximalGradientDescent create(Scope scope, Operand var, Operand alpha, Operand l1, Operand l2, Operand grad, Operand indices, Options... options) { + public static SparseApplyProximalGradientDescent create(Scope scope, Operand var, Operand alpha, Operand l1, Operand l2, Operand grad, Operand indices, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("SparseApplyProximalGradientDescent", scope.makeOpName("SparseApplyProximalGradientDescent")); opBuilder.addInput(var.asOutput()); opBuilder.addInput(alpha.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/SparseApplyRmsProp.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/SparseApplyRmsProp.java index f877e241cdb..111568e75ab 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/SparseApplyRmsProp.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/SparseApplyRmsProp.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; /** * Update '*var' according to the RMSProp algorithm. @@ -81,7 +82,7 @@ private Options() { * @param options carries optional attributes values * @return a new instance of SparseApplyRmsProp */ - public static SparseApplyRmsProp create(Scope scope, Operand var, Operand ms, Operand mom, Operand lr, Operand rho, Operand momentum, Operand epsilon, Operand grad, Operand indices, Options... options) { + public static SparseApplyRmsProp create(Scope scope, Operand var, Operand ms, Operand mom, Operand lr, Operand rho, Operand momentum, Operand epsilon, Operand grad, Operand indices, Options... options) { OperationBuilder opBuilder = scope.env().opBuilder("SparseApplyRMSProp", scope.makeOpName("SparseApplyRmsProp")); opBuilder.addInput(var.asOutput()); opBuilder.addInput(ms.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/TileGrad.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/TileGrad.java index c0bc9692d92..6e34be94956 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/TileGrad.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/TileGrad.java @@ -24,6 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TInt32; /** * Returns the gradient of `Tile`. @@ -45,7 +46,7 @@ public final class TileGrad extends PrimitiveOp implements Operand { * @param multiples * @return a new instance of TileGrad */ - public static TileGrad create(Scope scope, Operand input, Operand multiples) { + public static TileGrad create(Scope scope, Operand input, Operand multiples) { OperationBuilder opBuilder = scope.env().opBuilder("TileGrad", scope.makeOpName("TileGrad")); opBuilder.addInput(input.asOutput()); opBuilder.addInput(multiples.asOutput()); diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/AbstractOperation.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/AbstractOperation.java index 23b1753e2cb..801c0249ebc 100644 --- a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/AbstractOperation.java +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/AbstractOperation.java @@ -15,6 +15,8 @@ package org.tensorflow; +import org.tensorflow.nio.nd.Shape; + /** * Base class for {@link Operation} implementations. * @@ -65,7 +67,7 @@ public String toString() { * @param outputIdx index of the output of this operation * @return output tensor shape */ - abstract long[] shape(int outputIdx); + abstract Shape shape(int outputIdx); /** * Returns the datatype of the tensor of the {@code outputIdx}th output of this operation. @@ -73,7 +75,7 @@ public String toString() { * @param outputIdx index of the output of this operation * @return output tensor datatype */ - abstract DataType dtype(int outputIdx); + abstract DataType dtype(int outputIdx); /** * Returns the tensor of the {@code outputIdx}th output of this operation. diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/DataType.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/DataType.java index 516655040ba..e5c5d652ae7 100644 --- a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/DataType.java +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/DataType.java @@ -15,49 +15,35 @@ package org.tensorflow; -import java.util.HashMap; -import java.util.Map; - -import org.tensorflow.types.UInt8; - -/** Represents the type of elements in a {@link Tensor} as an enum. */ -public enum DataType { - /** 32-bit single precision floating point. */ - FLOAT(1, 4), - - /** 64-bit double precision floating point. */ - DOUBLE(2, 8), - - /** 32-bit signed integer. */ - INT32(3, 4), - - /** 8-bit unsigned integer. */ - UINT8(4, 1), +import org.tensorflow.internal.c_api.TF_Tensor; +import org.tensorflow.nio.nd.Shape; + +/** Represents a type of elements in a {@link Tensor} */ +public final class DataType { + + @FunctionalInterface + public interface TensorMapper { + + /** + * Maps tensor memory to a data structure for manipulating elements of this type. + * + * @param nativeTensor pointer to the native tensor + * @param shape the shape of the tensor + * @return data structure of elements of this type + */ + T apply(TF_Tensor nativeTensor, Shape shape); + } /** - * A sequence of bytes. + * Creates a new datatype * - *

TensorFlow uses the STRING type for an arbitrary sequence of bytes. - */ - STRING(7, -1), - - /** 64-bit signed integer. */ - INT64(9, 8), - - /** Boolean. */ - BOOL(10, 1); - - private final int value; - - private final int byteSize; - - /** + * @param name readable-name for this type * @param value must match the corresponding TF_* value in the TensorFlow C API. * @param byteSize size of an element of this type, in bytes, -1 if unknown + * @param tensorMapper method for mapping tensor memory to elements of this type */ - DataType(int value, int byteSize) { - this.value = value; - this.byteSize = byteSize; + public static DataType create(String name, int value, int byteSize, TensorMapper tensorMapper) { + return new DataType<>(name, value, byteSize, tensorMapper); } /** @@ -67,50 +53,39 @@ public int byteSize() { return byteSize; } - /** Corresponding value of the TF_DataType enum in the TensorFlow C API. */ - int c() { - return value; + /** + * Returns a readable name for this type + */ + public String name() { + return name; } - // Cached to avoid copying it - private static final DataType[] values = values(); - - static DataType fromC(int c) { - for (DataType t : values) { - if (t.value == c) { - return t; - } - } - throw new IllegalArgumentException( - "DataType " + c + " is not recognized in Java (version " + TensorFlow.version() + ")"); + /** + * Returns the numeric code for this datatype, as recognized by the native library (C API) + */ + int nativeCode() { + return nativeCode; } /** - * Returns the DataType of a Tensor whose elements have the type specified by class {@code c}. + * Maps a tensor to a data structure for manipulating elements of this type. * - * @param c The class describing the TensorFlow type of interest. - * @return The {@code DataType} enum corresponding to {@code c}. - * @throws IllegalArgumentException if objects of {@code c} do not correspond to a TensorFlow - * datatype. + * @param tensor tensor to map + * @return data structure of elements of this type */ - public static DataType fromClass(Class c) { - DataType dtype = typeCodes.get(c); - if (dtype == null) { - throw new IllegalArgumentException( - c.getName() + " objects cannot be used as elements in a TensorFlow Tensor"); - } - return dtype; + T map(Tensor tensor) { + return tensorMapper.apply(tensor.getNative(), tensor.shape()); } - private static final Map, DataType> typeCodes = new HashMap<>(); + private final int nativeCode; + private final int byteSize; + private final String name; + private final TensorMapper tensorMapper; - static { - typeCodes.put(Float.class, DataType.FLOAT); - typeCodes.put(Double.class, DataType.DOUBLE); - typeCodes.put(Integer.class, DataType.INT32); - typeCodes.put(UInt8.class, DataType.UINT8); - typeCodes.put(Long.class, DataType.INT64); - typeCodes.put(Boolean.class, DataType.BOOL); - typeCodes.put(String.class, DataType.STRING); + private DataType(String name, int nativeCode, int byteSize, TensorMapper tensorMapper) { + this.name = name; + this.nativeCode = nativeCode; + this.byteSize = byteSize; + this.tensorMapper = tensorMapper; } } diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/DataTypes.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/DataTypes.java new file mode 100644 index 00000000000..c3a6dbdb36a --- /dev/null +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/DataTypes.java @@ -0,0 +1,53 @@ +package org.tensorflow; + +import java.util.HashMap; +import java.util.Map; +import org.tensorflow.types.TBool; +import org.tensorflow.types.TDouble; +import org.tensorflow.types.TFloat; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.TInt64; +import org.tensorflow.types.TString; +import org.tensorflow.types.TUInt8; + +/** + * Utility class for working with {@link DataType} objects. + */ +final class DataTypes { + + /** + * Find a data type from the type code returned by the native layer (C API). + * + *

Only data types registered via {@link #register(DataType)} can be resolved. + * + * @param nativeCode native code + * @return data type for this code + * @throws IllegalArgumentException if the code matches no registered data type + */ + static DataType fromNativeCode(int nativeCode) { + DataType dataType = DATA_TYPE_REGISTRY.get(nativeCode); + if (dataType == null) { + throw new IllegalArgumentException( + "DataType " + nativeCode + " is not recognized in Java (version " + TensorFlow.version() + ")"); + } + return dataType; + } + + private static final Map> DATA_TYPE_REGISTRY = new HashMap<>(); + + static { + register(TBool.DTYPE); + register(TDouble.DTYPE); + register(TFloat.DTYPE); + register(TInt32.DTYPE); + register(TInt64.DTYPE); + register(TString.DTYPE); + register(TUInt8.DTYPE); + } + + // TODO (karllessard): Right now this method is private but we might want to expose it + // to allow user to register custom data types? + private static void register(DataType dataType) { + DATA_TYPE_REGISTRY.put(dataType.nativeCode(), dataType); + } +} diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/EagerOperation.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/EagerOperation.java index b6e1fa6db6c..89c054f887b 100644 --- a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/EagerOperation.java +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/EagerOperation.java @@ -16,6 +16,7 @@ package org.tensorflow; import java.util.concurrent.atomic.AtomicReferenceArray; +import org.tensorflow.nio.nd.Shape; /** * Implementation of an {@link Operation} executed eagerly. @@ -72,7 +73,7 @@ public long getUnsafeNativeHandle(int outputIndex) { } @Override - public long[] shape(int outputIndex) { + public Shape shape(int outputIndex) { // If the tensor of this output has already been resolved, return its shape. // Otherwise, retrieve the tensor shape from the native library. Tensor tensor = outputTensors.get(outputIndex); @@ -84,11 +85,11 @@ public long[] shape(int outputIndex) { for (int i = 0; i < shape.length; ++i) { shape[i] = dim(outputNativeHandle, i); } - return shape; + return Shape.make(shape); } @Override - public DataType dtype(int outputIndex) { + public DataType dtype(int outputIndex) { // If the tensor of this output has already been resolved, return its datatype. // Otherwise, retrieve the tensor datatype from the native library. Tensor tensor = outputTensors.get(outputIndex); @@ -96,7 +97,7 @@ public DataType dtype(int outputIndex) { return tensor.dataType(); } long outputNativeHandle = getUnsafeNativeHandle(outputIndex); - return DataType.fromC(dataType(outputNativeHandle)); + return DataTypes.fromNativeCode(dataType(outputNativeHandle)); } @Override diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/EagerOperationBuilder.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/EagerOperationBuilder.java index 7e5a9a778a4..2f06acc8303 100644 --- a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/EagerOperationBuilder.java +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/EagerOperationBuilder.java @@ -17,6 +17,7 @@ import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; +import org.tensorflow.nio.nd.Shape; /** * An {@link OperationBuilder} for building {@link Operation Operations} that are executed eagerly. @@ -129,7 +130,7 @@ public EagerOperationBuilder setAttr(String name, boolean[] values) { @Override public EagerOperationBuilder setAttr(String name, DataType value) { - setAttrType(nativeRef.opHandle, name, value.c()); + setAttrType(nativeRef.opHandle, name, value.nativeCode()); return this; } @@ -137,7 +138,7 @@ public EagerOperationBuilder setAttr(String name, DataType value) { public EagerOperationBuilder setAttr(String name, DataType[] values) { int[] c = new int[values.length]; for (int i = 0; i < values.length; ++i) { - c[i] = values[i].c(); + c[i] = values[i].nativeCode(); } setAttrTypeList(nativeRef.opHandle, name, c); return this; diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/EagerSession.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/EagerSession.java index cbb878ed867..8f131b5e15a 100644 --- a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/EagerSession.java +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/EagerSession.java @@ -274,6 +274,13 @@ public static EagerSession getDefault() { synchronized (EagerSession.class) { if (defaultSession == null) { defaultSession = options().build(); + + Runtime.getRuntime().addShutdownHook(new Thread() { + @Override + public void run() { + defaultSession.doClose(); + } + }); } } } @@ -321,18 +328,11 @@ public static EagerSession.Options options() { } @Override - public synchronized void close() { + public void close() { if (this == defaultSession) { throw new IllegalStateException("Default eager session cannot be closed"); } - if (nativeHandle != 0L) { - if (resourceCleanupStrategy == ResourceCleanupStrategy.IN_BACKGROUND) { - nativeResources.stopCleanupThread(); - } - nativeResources.deleteAll(); - delete(nativeHandle); - nativeHandle = 0L; - } + doClose(); } @Override @@ -523,6 +523,17 @@ private void checkSession() { } } + private synchronized void doClose() { + if (nativeHandle != 0L) { + if (resourceCleanupStrategy == ResourceCleanupStrategy.IN_BACKGROUND) { + nativeResources.stopCleanupThread(); + } + nativeResources.deleteAll(); + delete(nativeHandle); + nativeHandle = 0L; + } + } + private static native long allocate(boolean async, int devicePlacementPolicy, byte[] config); private static native void delete(long handle); diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/GraphOperation.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/GraphOperation.java index be56ac889c1..d61dc221ded 100644 --- a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/GraphOperation.java +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/GraphOperation.java @@ -15,6 +15,8 @@ package org.tensorflow; +import org.tensorflow.nio.nd.Shape; + /** * Implementation for an {@link Operation} added as a node to a {@link Graph}. * @@ -120,20 +122,21 @@ long getUnsafeNativeHandle(int outputIdx) { } @Override - long[] shape(int outputIdx) { + Shape shape(int outputIdx) { Graph.Reference r = graph.ref(); try { - return shape(r.nativeHandle(), getUnsafeNativeHandle(), outputIdx); + long[] shape = shape(r.nativeHandle(), getUnsafeNativeHandle(), outputIdx); + return shape == null ? Shape.unknown() : Shape.make(shape); } finally { r.close(); } } @Override - DataType dtype(int outputIdx) { + DataType dtype(int outputIdx) { Graph.Reference r = graph.ref(); try { - return DataType.fromC(dtype(r.nativeHandle(), getUnsafeNativeHandle(), outputIdx)); + return DataTypes.fromNativeCode(dtype(r.nativeHandle(), getUnsafeNativeHandle(), outputIdx)); } finally { r.close(); } diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/GraphOperationBuilder.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/GraphOperationBuilder.java index 7567e1e7251..368a7ad2b23 100644 --- a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/GraphOperationBuilder.java +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/GraphOperationBuilder.java @@ -16,6 +16,7 @@ package org.tensorflow; import java.nio.charset.Charset; +import org.tensorflow.nio.nd.Shape; /** An {@link OperationBuilder} for adding {@link GraphOperation}s to a {@link Graph}. */ public final class GraphOperationBuilder implements OperationBuilder { @@ -188,7 +189,7 @@ public GraphOperationBuilder setAttr(String name, boolean[] value) { public GraphOperationBuilder setAttr(String name, DataType value) { Graph.Reference r = graph.ref(); try { - setAttrType(unsafeNativeHandle, name, value.c()); + setAttrType(unsafeNativeHandle, name, value.nativeCode()); } finally { r.close(); } @@ -199,7 +200,7 @@ public GraphOperationBuilder setAttr(String name, DataType value) { public GraphOperationBuilder setAttr(String name, DataType[] value) { int[] ctypes = new int[value.length]; for (int i = 0; i < value.length; ++i) { - ctypes[i] = value[i].c(); + ctypes[i] = value[i].nativeCode(); } Graph.Reference r = graph.ref(); try { diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/NativeLibrary.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/NativeLibrary.java index f67d91c5016..b0733a22646 100644 --- a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/NativeLibrary.java +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/NativeLibrary.java @@ -45,7 +45,7 @@ final class NativeLibrary { private static final String JNI_LIBNAME = "tensorflow_jni"; public static void load() { - org.bytedeco.javacpp.Loader.load(org.tensorflow.c_api.global.tensorflow.class); + org.bytedeco.javacpp.Loader.load(org.tensorflow.internal.c_api.global.tensorflow.class); if (isLoaded() || tryLoadLibrary()) { // Either: diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/Operand.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/Operand.java index 61082e83d5a..d42e3c20678 100644 --- a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/Operand.java +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/Operand.java @@ -37,7 +37,7 @@ public interface Operand { /** - * Returns the symbolic handle of a tensor. + * Returns the symbolic handle of the tensor. * *

Inputs to TensorFlow operations are outputs of another TensorFlow operation. This method is * used to obtain a symbolic handle that represents the computation of the input. @@ -45,4 +45,15 @@ public interface Operand { * @see OperationBuilder#addInput(Output) */ Output asOutput(); + + /** + * Returns the data of the tensor. + * + * This only works when running in an eager execution + * + * @throws IllegalStateException if this is an operand of a graph + */ + default T tensorData() { + return asOutput().tensor().data(); + } } diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/OperationBuilder.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/OperationBuilder.java index d78f404fb16..9c19ee9261f 100644 --- a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/OperationBuilder.java +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/OperationBuilder.java @@ -15,6 +15,8 @@ package org.tensorflow; +import org.tensorflow.nio.nd.Shape; + /** * A builder for {@link Operation}s. * @@ -46,7 +48,7 @@ public interface OperationBuilder { * *

The OperationBuilder is not usable after build() returns. */ - public Operation build(); + Operation build(); /** * Add the output of another operation as the next input of the operation being built. @@ -54,7 +56,7 @@ public interface OperationBuilder { * @param input {@link Output} supposed to be the input of the operation being built. * @return the OperationBuilder instance for chaining. */ - public OperationBuilder addInput(Output input); + OperationBuilder addInput(Output input); /** * Add the outputs of another operation as the next inputs of the operation being built. @@ -62,7 +64,7 @@ public interface OperationBuilder { * @param inputs list of {@link Output} supposed to be the inputs of the operation being built. * @return the OperationBuilder instance for chaining. */ - public OperationBuilder addInputList(Output[] inputs); + OperationBuilder addInputList(Output[] inputs); /** * Ensure that the operation does not execute before the control operation does. @@ -77,7 +79,7 @@ public interface OperationBuilder { * @param control operation that must be executed before running this operation. * @return the OperationBuilder instance for chaining. */ - public OperationBuilder addControlInput(Operation control); + OperationBuilder addControlInput(Operation control); /** * Set the device requested for computing the operation being built. @@ -85,7 +87,7 @@ public interface OperationBuilder { * @param device the requested device, as a string * @return the OperationBuilder instance for chaining. */ - public OperationBuilder setDevice(String device); + OperationBuilder setDevice(String device); /** * Set the string values of an attribute of the operation being built. @@ -94,7 +96,7 @@ public interface OperationBuilder { * @param value attribute values * @return the OperationBuilder instance for chaining. */ - public OperationBuilder setAttr(String name, String[] value); + OperationBuilder setAttr(String name, String[] value); /** * Set the string value of an attribute of the operation being built. @@ -103,7 +105,7 @@ public interface OperationBuilder { * @param value attribute value * @return the OperationBuilder instance for chaining. */ - public OperationBuilder setAttr(String name, String value); + OperationBuilder setAttr(String name, String value); /** * Set the byte values of an attribute of the operation being built. @@ -112,7 +114,7 @@ public interface OperationBuilder { * @param value attribute values * @return the OperationBuilder instance for chaining. */ - public OperationBuilder setAttr(String name, byte[] value); + OperationBuilder setAttr(String name, byte[] value); /** * Set the long value of an attribute of the operation being built. @@ -121,7 +123,7 @@ public interface OperationBuilder { * @param value attribute value * @return the OperationBuilder instance for chaining. */ - public OperationBuilder setAttr(String name, long value); + OperationBuilder setAttr(String name, long value); /** * Set the long values of an attribute of the operation being built. @@ -130,7 +132,7 @@ public interface OperationBuilder { * @param value attribute values * @return the OperationBuilder instance for chaining. */ - public OperationBuilder setAttr(String name, long[] value); + OperationBuilder setAttr(String name, long[] value); /** * Set the float value of an attribute of the operation being built. @@ -139,7 +141,7 @@ public interface OperationBuilder { * @param value attribute value * @return the OperationBuilder instance for chaining. */ - public OperationBuilder setAttr(String name, float value); + OperationBuilder setAttr(String name, float value); /** * Set the float values of an attribute of the operation being built. @@ -148,7 +150,7 @@ public interface OperationBuilder { * @param value attribute values * @return the OperationBuilder instance for chaining. */ - public OperationBuilder setAttr(String name, float[] value); + OperationBuilder setAttr(String name, float[] value); /** * Set the boolean value of an attribute of the operation being built. @@ -157,7 +159,7 @@ public interface OperationBuilder { * @param value attribute value * @return the OperationBuilder instance for chaining. */ - public OperationBuilder setAttr(String name, boolean value); + OperationBuilder setAttr(String name, boolean value); /** * Set the boolean values of an attribute of the operation being built. @@ -166,7 +168,7 @@ public interface OperationBuilder { * @param value attribute values * @return the OperationBuilder instance for chaining. */ - public OperationBuilder setAttr(String name, boolean[] value); + OperationBuilder setAttr(String name, boolean[] value); /** * Set the type value of an attribute of the operation being built. @@ -175,7 +177,7 @@ public interface OperationBuilder { * @param value attribute value * @return the OperationBuilder instance for chaining. */ - public OperationBuilder setAttr(String name, DataType value); + OperationBuilder setAttr(String name, DataType value); /** * Set the type values of an attribute of the operation being built. @@ -184,7 +186,7 @@ public interface OperationBuilder { * @param value attribute values * @return the OperationBuilder instance for chaining. */ - public OperationBuilder setAttr(String name, DataType[] value); + OperationBuilder setAttr(String name, DataType[] value); /** * Set the tensor value of an attribute of the operation being built. @@ -193,7 +195,7 @@ public interface OperationBuilder { * @param value attribute value * @return the OperationBuilder instance for chaining. */ - public OperationBuilder setAttr(String name, Tensor value); + OperationBuilder setAttr(String name, Tensor value); /** * Set the tensor values of an attribute of the operation being built. @@ -202,7 +204,7 @@ public interface OperationBuilder { * @param value attribute values * @return the OperationBuilder instance for chaining. */ - public OperationBuilder setAttr(String name, Tensor[] value); + OperationBuilder setAttr(String name, Tensor[] value); /** * Set the shape value of an attribute of the operation being built. @@ -211,7 +213,7 @@ public interface OperationBuilder { * @param value attribute value * @return the OperationBuilder instance for chaining. */ - public OperationBuilder setAttr(String name, Shape value); + OperationBuilder setAttr(String name, Shape value); /** * Set the shape values of an attribute of the operation being built. @@ -220,5 +222,5 @@ public interface OperationBuilder { * @param value attribute values * @return the OperationBuilder instance for chaining. */ - public OperationBuilder setAttr(String name, Shape[] value); + OperationBuilder setAttr(String name, Shape[] value); } diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/Output.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/Output.java index f6fc1ac8cfe..bcb3c7e00bc 100644 --- a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/Output.java +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/Output.java @@ -16,6 +16,7 @@ package org.tensorflow; import java.util.Objects; +import org.tensorflow.nio.nd.Shape; /** * A symbolic handle to a tensor produced by an {@link Operation}. @@ -40,7 +41,7 @@ public int index() { /** Returns the (possibly partially known) shape of the tensor referred to by this Output. */ public Shape shape() { - return new Shape(operation.shape(index)); + return operation.shape(index); } /** Returns the DataType of the tensor referred to by this Output. */ @@ -55,6 +56,9 @@ public DataType dataType() { * environments, output tensors must be fetched by running a session, using {@link * Session.Runner#fetch(Output)}. * + *

It is recommended to close explicitly the returned tensor as soon as possible, since the + * garbage collector is not aware of the amount of memory it consumes, which can be significant. + * * @return tensor * @throws IllegalStateException if this output results from a graph * @see EagerSession diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/Shape.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/Shape.java deleted file mode 100644 index d533c3d480f..00000000000 --- a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/Shape.java +++ /dev/null @@ -1,133 +0,0 @@ -/* Copyright 2016 The TensorFlow Authors. All Rights Reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -==============================================================================*/ - -package org.tensorflow; - -import java.util.Arrays; - -/** The possibly partially known shape of a tensor produced by an operation. */ -public final class Shape { - - /** Create a Shape representing an unknown number of dimensions. */ - public static Shape unknown() { - return new Shape(null); - } - - /** Create a Shape representing a scalar value. */ - public static Shape scalar() { - return new Shape(new long[0]); - } - - /** - * Create a Shape representing an N-dimensional value. - * - *

Creates a Shape representing an N-dimensional value (N being at least 1), with the provided - * size for each dimension. A -1 indicates that the size of the corresponding dimension is - * unknown. For example: - * - *

{@code
-   * // A 2-element vector.
-   * Shape vector = Shape.create(2);
-   *
-   * // A 2x3 matrix.
-   * Shape matrix = Shape.create(2, 3);
-   *
-   * // A matrix with 4 columns but an unknown number of rows.
-   * // This is typically used to indicate the shape of tensors that represent
-   * // a variable-sized batch of values. The Shape below might represent a
-   * // variable-sized batch of 4-element vectors.
-   * Shape batch = Shape.create(-1, 4);
-   * }
- */ - public static Shape make(long firstDimensionSize, long... otherDimensionSizes) { - long[] shape = new long[otherDimensionSizes.length + 1]; - shape[0] = firstDimensionSize; - System.arraycopy(otherDimensionSizes, 0, shape, 1, otherDimensionSizes.length); - return new Shape(shape); - } - - /** - * Number of dimensions represented by this shape. - * - * @return -1 if the number of dimensions is unknown, 0 if the shape represents a scalar, 1 for a - * vector, 2 for a matrix etc. - */ - public int numDimensions() { - return shape == null ? -1 : shape.length; - } - - /** - * The size of the i-th dimension. - * - * @return The size of the requested dimension or -1 if it is unknown. - */ - public long size(int i) { - return shape[i]; - } - - @Override - public int hashCode() { - return Arrays.hashCode(shape); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - - if (obj instanceof Shape && Arrays.equals(this.shape, ((Shape) obj).shape)) { - return !hasUnknownDimension(); - } - - return super.equals(obj); - } - - /** Succinct description of the shape meant for debugging. */ - @Override - public String toString() { - if (shape == null) { - return ""; - } - return Arrays.toString(shape).replace("-1", "?"); - } - - // Package-private constructor. - Shape(long[] shape) { - this.shape = shape; - } - - // Package-private accessor. - // The idea is that the public API does not expose the internal array. - long[] asArray() { - return shape; - } - - private long[] shape; - - private boolean hasUnknownDimension() { - if (shape == null) { - return true; - } - - for (long dimension : shape) { - if (dimension == -1) { - return true; - } - } - - return false; - } -} diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/Tensor.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/Tensor.java index 8472509a9fa..178db84a175 100644 --- a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/Tensor.java +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/Tensor.java @@ -26,6 +26,16 @@ import java.nio.LongBuffer; import java.util.Arrays; import java.util.HashMap; +import org.tensorflow.internal.c_api.TF_Tensor; +import org.tensorflow.nio.nd.Shape; +import org.tensorflow.types.TBool; +import org.tensorflow.types.TDouble; +import org.tensorflow.types.TFloat; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.TInt64; +import org.tensorflow.types.TString; +import org.tensorflow.types.TUInt8; +import org.tensorflow.types.family.TType; /** * A statically typed multi-dimensional array whose elements are of a type described by T. @@ -97,13 +107,12 @@ public final class Tensor implements AutoCloseable { * @param obj The object to convert to a {@code Tensor}. Note that whether it is compatible * with the type T is not checked by the type system. For type-safe creation of tensors, use * {@link Tensors}. - * @param type The class object representing the type T. + * @param dtype The tensor element data type * @throws IllegalArgumentException if {@code obj} is not compatible with the TensorFlow type * system. */ @SuppressWarnings("unchecked") - public static Tensor create(Object obj, Class type) { - DataType dtype = DataType.fromClass(type); + public static Tensor create(Object obj, DataType dtype) { if (!objectCompatWithType(obj, dtype)) { throw new IllegalArgumentException( "DataType of object does not match T (expected " @@ -112,7 +121,22 @@ public static Tensor create(Object obj, Class type) { + dataTypeOf(obj) + ")"); } - return (Tensor) create(obj, dtype); + @SuppressWarnings("rawtypes") + long[] dimSizes = new long[numDimensions(obj, dtype)]; + fillShape(obj, 0, dimSizes); + Tensor t = new Tensor(dtype, Shape.make(dimSizes)); + long nativeHandle; + if (t.dtype != TString.DTYPE) { + long byteSize = elemByteSize(t.dtype) * t.shape.size(); + nativeHandle = allocate(t.dtype.nativeCode(), dimSizes, byteSize); + setValue(nativeHandle, obj); + } else if (t.shape.numDimensions() != 0) { + nativeHandle = allocateNonScalarBytes(dimSizes, (Object[]) obj); + } else { + nativeHandle = allocateScalarBytes((byte[]) obj); + } + t.nativeRef = new NativeReference(nativeHandle); + return t; } /** @@ -126,34 +150,6 @@ public static Tensor create(Object obj) { return create(obj, dataTypeOf(obj)); } - /** - * Create a Tensor of data type {@code dtype} from a Java object. Requires the parameter {@code T} - * to match {@code type}, but this condition is not checked. - * - * @param obj the object supplying the tensor data. - * @param dtype the data type of the tensor to create. It must be compatible with the run-time - * type of the object. - * @return the new tensor - */ - private static Tensor create(Object obj, DataType dtype) { - @SuppressWarnings("rawtypes") - Tensor t = new Tensor(dtype); - t.shapeCopy = new long[numDimensions(obj, dtype)]; - fillShape(obj, 0, t.shapeCopy); - long nativeHandle; - if (t.dtype != DataType.STRING) { - int byteSize = elemByteSize(t.dtype) * numElements(t.shapeCopy); - nativeHandle = allocate(t.dtype.c(), t.shapeCopy, byteSize); - setValue(nativeHandle, obj); - } else if (t.shapeCopy.length != 0) { - nativeHandle = allocateNonScalarBytes(t.shapeCopy, (Object[]) obj); - } else { - nativeHandle = allocateScalarBytes((byte[]) obj); - } - t.nativeRef = new NativeReference(nativeHandle); - return t; - } - /** * Create a {@link Integer} Tensor with data from the given buffer. * @@ -166,8 +162,8 @@ private static Tensor create(Object obj, DataType dtype) { * @param data a buffer containing the tensor data. * @throws IllegalArgumentException If the tensor shape is not compatible with the buffer */ - public static Tensor create(long[] shape, IntBuffer data) { - Tensor t = allocateForBuffer(DataType.INT32, shape, data.remaining()); + public static Tensor create(long[] shape, IntBuffer data) { + Tensor t = allocateForBuffer(TInt32.DTYPE, shape, data.remaining()); t.buffer().asIntBuffer().put(data); return t; } @@ -184,8 +180,8 @@ public static Tensor create(long[] shape, IntBuffer data) { * @param data a buffer containing the tensor data. * @throws IllegalArgumentException If the tensor shape is not compatible with the buffer */ - public static Tensor create(long[] shape, FloatBuffer data) { - Tensor t = allocateForBuffer(DataType.FLOAT, shape, data.remaining()); + public static Tensor create(long[] shape, FloatBuffer data) { + Tensor t = allocateForBuffer(TFloat.DTYPE, shape, data.remaining()); t.buffer().asFloatBuffer().put(data); return t; } @@ -202,8 +198,8 @@ public static Tensor create(long[] shape, FloatBuffer data) { * @param data a buffer containing the tensor data. * @throws IllegalArgumentException If the tensor shape is not compatible with the buffer */ - public static Tensor create(long[] shape, DoubleBuffer data) { - Tensor t = allocateForBuffer(DataType.DOUBLE, shape, data.remaining()); + public static Tensor create(long[] shape, DoubleBuffer data) { + Tensor t = allocateForBuffer(TDouble.DTYPE, shape, data.remaining()); t.buffer().asDoubleBuffer().put(data); return t; } @@ -220,8 +216,8 @@ public static Tensor create(long[] shape, DoubleBuffer data) { * @param data a buffer containing the tensor data. * @throws IllegalArgumentException If the tensor shape is not compatible with the buffer */ - public static Tensor create(long[] shape, LongBuffer data) { - Tensor t = allocateForBuffer(DataType.INT64, shape, data.remaining()); + public static Tensor create(long[] shape, LongBuffer data) { + Tensor t = allocateForBuffer(TInt64.DTYPE, shape, data.remaining()); t.buffer().asLongBuffer().put(data); return t; } @@ -235,21 +231,15 @@ public static Tensor create(long[] shape, LongBuffer data) { * API. * * @param the tensor element type - * @param type the tensor element type, represented as a class object. + * @param dtype the tensor element data type * @param shape the tensor shape. * @param data a buffer containing the tensor data. * @throws IllegalArgumentException If the tensor datatype or shape is not compatible with the * buffer */ - public static Tensor create(Class type, long[] shape, ByteBuffer data) { - @SuppressWarnings("unchecked") - Tensor ret = (Tensor) create(DataType.fromClass(type), shape, data); - return ret; - } - - private static Tensor create(DataType dtype, long[] shape, ByteBuffer data) { + public static Tensor create(DataType dtype, long[] shape, ByteBuffer data) { int nremaining; - if (dtype != DataType.STRING) { + if (dtype != TString.DTYPE) { int elemBytes = elemByteSize(dtype); if (data.remaining() % elemBytes != 0) { throw new IllegalArgumentException( @@ -261,23 +251,33 @@ private static Tensor create(DataType dtype, long[] shape, ByteBuffer data) { } else { nremaining = data.remaining(); } - Tensor t = allocateForBuffer(dtype, shape, nremaining); + Tensor t = allocateForBuffer(dtype, shape, nremaining); t.buffer().put(data); return t; } + public static Tensor allocate(DataType dtype, Shape shape) { + return allocate(dtype, shape, shape.size() * dtype.byteSize()); + } + + public static Tensor allocate(DataType dtype, Shape shape, long size) { + Tensor t = new Tensor<>(dtype, shape); + long nativeHandle = allocate(t.dtype.nativeCode(), shape.asArray(), size); + t.nativeRef = new NativeReference(nativeHandle); + return t; + } + /** * Returns this Tensor object with the type {@code Tensor}. This method is useful when given a * value of type {@code Tensor}. * - * @param type any (non-null) array of the correct type. + * @param dt any supported tensor data type * @throws IllegalArgumentException if the actual data type of this object does not match the type * {@code U}. */ @SuppressWarnings("unchecked") - public Tensor expect(Class type) { - DataType dt = DataType.fromClass(type); - if (!dt.equals(dtype)) { + public Tensor expect(DataType dt) { + if (!dt.equals(this.dtype)) { throw new IllegalArgumentException( "Cannot cast from tensor of " + dtype + " to tensor of " + dt); } @@ -287,21 +287,20 @@ public Tensor expect(Class type) { // Helper function to allocate a Tensor for the create() methods that create a Tensor from // a java.nio.Buffer. // Requires: dataType matches T - private static Tensor allocateForBuffer(DataType dataType, long[] shape, int nBuffered) { - final int nflattened = numElements(shape); + private static Tensor allocateForBuffer(DataType dataType, long[] dimSizes, int nBuffered) { + final int nflattened = numElements(dimSizes); int nbytes = 0; - if (dataType != DataType.STRING) { + if (dataType != TString.DTYPE) { if (nBuffered != nflattened) { - throw incompatibleBuffer(nBuffered, shape); + throw incompatibleBuffer(nBuffered, dimSizes); } nbytes = nflattened * elemByteSize(dataType); } else { // DT_STRING tensor encoded in a ByteBuffer. nbytes = nBuffered; } - Tensor t = new Tensor(dataType); - t.shapeCopy = Arrays.copyOf(shape, shape.length); - long nativeHandle = allocate(t.dtype.c(), t.shapeCopy, nbytes); + Tensor t = new Tensor(dataType, Shape.make(dimSizes)); + long nativeHandle = allocate(t.dtype.nativeCode(), dimSizes, nbytes); t.nativeRef = new NativeReference(nativeHandle); return t; } @@ -320,38 +319,40 @@ public void close() { } /** Returns the {@link DataType} of elements stored in the Tensor. */ - public DataType dataType() { + public DataType dataType() { return dtype; } - /** - * Returns the number of dimensions (sometimes referred to as rank) of the Tensor. - * - *

Will be 0 for a scalar, 1 for a vector, 2 for a matrix, 3 for a 3-dimensional tensor etc. - */ - public int numDimensions() { - return shapeCopy.length; + public T data() { + // Note: we don't synchronize, as mapping tensor memory should be thread-safe + if (data == null) { + data = dtype.map(this); + } + return data; } /** Returns the size, in bytes, of the tensor data. */ - public int numBytes() { - return buffer().remaining(); - } - - /** Returns the number of elements in a flattened (1-D) view of the tensor. */ - public int numElements() { - return numElements(shapeCopy); + public long numBytes() { + if (numBytes == null) { + // If the element size in bytes in unknown, we need to map tensor memory to the Java space + // and compute the number of bytes manually, hence the reason we cache the result + if (dtype.byteSize() < 0) { + numBytes = Arrays.stream(buffers()).mapToLong(ByteBuffer::remaining).sum(); + } else { + numBytes = shape.size() * dtype.byteSize(); + } + } + return numBytes; } /** * Returns the shape of * the Tensor, i.e., the sizes of each dimension. * - * @return an array where the i-th element is the size of the i-th dimension of the tensor. + * @return shape of this tensor */ - public long[] shape() { - return shapeCopy; + public Shape shape() { + return shape; } /** @@ -449,7 +450,7 @@ public U copyTo(U dst) { * @throws IllegalArgumentException If the tensor data type is not {@link Integer} */ public void writeTo(IntBuffer dst) { - if (dtype != DataType.INT32) { + if (dtype != TInt32.DTYPE) { throw incompatibleBuffer(dst, dtype); } ByteBuffer src = buffer(); @@ -467,7 +468,7 @@ public void writeTo(IntBuffer dst) { * @throws IllegalArgumentException If the tensor datatype is not {@link Float} */ public void writeTo(FloatBuffer dst) { - if (dtype != DataType.FLOAT) { + if (dtype != TFloat.DTYPE) { throw incompatibleBuffer(dst, dtype); } ByteBuffer src = buffer(); @@ -485,7 +486,7 @@ public void writeTo(FloatBuffer dst) { * @throws IllegalArgumentException If the tensor datatype is not {@link Double} */ public void writeTo(DoubleBuffer dst) { - if (dtype != DataType.DOUBLE) { + if (dtype != TDouble.DTYPE) { throw incompatibleBuffer(dst, dtype); } ByteBuffer src = buffer(); @@ -503,7 +504,7 @@ public void writeTo(DoubleBuffer dst) { * @throws IllegalArgumentException If the tensor datatype is not {@link Long} */ public void writeTo(LongBuffer dst) { - if (dtype != DataType.INT64) { + if (dtype != TInt64.DTYPE) { throw incompatibleBuffer(dst, dtype); } ByteBuffer src = buffer(); @@ -527,7 +528,7 @@ public void writeTo(ByteBuffer dst) { /** Returns a string describing the type and shape of the Tensor. */ @Override public String toString() { - return String.format("%s tensor with shape %s", dtype.toString(), Arrays.toString(shape())); + return String.format("%s tensor with shape %s", dtype.toString(), shape); } /** @@ -537,8 +538,7 @@ public String toString() { */ static Tensor fromHandle(long handle) { @SuppressWarnings("rawtypes") - Tensor t = new Tensor(DataType.fromC(dtype(handle))); - t.shapeCopy = shape(handle); + Tensor t = new Tensor<>(DataTypes.fromNativeCode(dtype(handle)), Shape.make(shape(handle))); t.nativeRef = new NativeReference(handle); return t; } @@ -558,12 +558,31 @@ long getNativeHandle() { return nativeRef.tensorHandle; } + TF_Tensor getNative() { + TF_Tensor nativeTensor = new TF_Tensor(); + nativeTensor.temporaryHackToSetAddressFromHandle(nativeRef.tensorHandle); + return nativeTensor; + } + + ByteBuffer[] buffers() { + // TODO change the C API so it can return more than one buffer in case the size of the tensor + // exceeds the maximum capacity of a single buffer (which is around Integer.MAX_VALUE) + return new ByteBuffer[] { buffer(getNativeHandle()).order(ByteOrder.nativeOrder()) }; + } + + long[] bufferInfo() { + return bufferInfo(nativeRef.tensorHandle); + } + private NativeReference nativeRef = null; - private final DataType dtype; - private long[] shapeCopy = null; + private final DataType dtype; + private final Shape shape; + private T data = null; + private Long numBytes = null; - private Tensor(DataType t) { - dtype = t; + private Tensor(DataType dtype, Shape shape) { + this.dtype = dtype; + this.shape = shape; } private ByteBuffer buffer() { @@ -633,8 +652,8 @@ private class EagerReference extends EagerSession.NativeReference { @Override void delete() { // Mark this eager reference as cleared since it has been deleted by the session - NativeReference.this.eagerRef = null; - NativeReference.this.release(); + Tensor.NativeReference.this.eagerRef = null; + Tensor.NativeReference.this.release(); } } @@ -668,18 +687,18 @@ synchronized void release() { private static HashMap, DataType> classDataTypes = new HashMap<>(); static { - classDataTypes.put(int.class, DataType.INT32); - classDataTypes.put(Integer.class, DataType.INT32); - classDataTypes.put(long.class, DataType.INT64); - classDataTypes.put(Long.class, DataType.INT64); - classDataTypes.put(float.class, DataType.FLOAT); - classDataTypes.put(Float.class, DataType.FLOAT); - classDataTypes.put(double.class, DataType.DOUBLE); - classDataTypes.put(Double.class, DataType.DOUBLE); - classDataTypes.put(byte.class, DataType.STRING); - classDataTypes.put(Byte.class, DataType.STRING); - classDataTypes.put(boolean.class, DataType.BOOL); - classDataTypes.put(Boolean.class, DataType.BOOL); + classDataTypes.put(int.class, TInt32.DTYPE); + classDataTypes.put(Integer.class, TInt32.DTYPE); + classDataTypes.put(long.class, TInt64.DTYPE); + classDataTypes.put(Long.class, TInt64.DTYPE); + classDataTypes.put(float.class, TFloat.DTYPE); + classDataTypes.put(Float.class, TFloat.DTYPE); + classDataTypes.put(double.class, TDouble.DTYPE); + classDataTypes.put(Double.class, TDouble.DTYPE); + classDataTypes.put(byte.class, TString.DTYPE); + classDataTypes.put(Byte.class, TString.DTYPE); + classDataTypes.put(boolean.class, TBool.DTYPE); + classDataTypes.put(Boolean.class, TBool.DTYPE); } /** The class for the data type to which Java object o corresponds. */ @@ -719,7 +738,7 @@ private static DataType dataTypeFromClass(Class c) { */ private static int numDimensions(Object o, DataType dtype) { int ret = numArrayDimensions(o); - if (dtype == DataType.STRING && ret > 0) { + if (dtype == TString.DTYPE && ret > 0) { return ret - 1; } return ret; @@ -772,14 +791,14 @@ private static boolean objectCompatWithType(Object obj, DataType dtype) { if (dto.equals(dtype)) { return true; } - if (dto == DataType.STRING && dtype == DataType.UINT8) { + if (dto == TString.DTYPE && dtype == TUInt8.DTYPE) { return true; } return false; } private void throwExceptionIfTypeIsIncompatible(Object o) { - final int rank = numDimensions(); + final int rank = shape.numDimensions(); final int oRank = numDimensions(o, dtype); if (oRank != rank) { throw new IllegalArgumentException( @@ -795,11 +814,11 @@ private void throwExceptionIfTypeIsIncompatible(Object o) { long[] oShape = new long[rank]; fillShape(o, 0, oShape); for (int i = 0; i < oShape.length; ++i) { - if (oShape[i] != shape()[i]) { + if (oShape[i] != shape.size(i)) { throw new IllegalArgumentException( String.format( "cannot copy Tensor with shape %s into object with shape %s", - Arrays.toString(shape()), Arrays.toString(oShape))); + shape, Arrays.toString(oShape))); } } } @@ -814,6 +833,8 @@ private void throwExceptionIfTypeIsIncompatible(Object o) { private static native ByteBuffer buffer(long handle); + private static native long[] bufferInfo(long handle); + private static native int dtype(long handle); private static native long[] shape(long handle); diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/Tensors.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/Tensors.java index c828d23efcf..7e8cf6e8e99 100644 --- a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/Tensors.java +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/Tensors.java @@ -17,6 +17,14 @@ import static java.nio.charset.StandardCharsets.UTF_8; +import java.nio.charset.Charset; +import org.tensorflow.types.TBool; +import org.tensorflow.types.TDouble; +import org.tensorflow.types.TFloat; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.TInt64; +import org.tensorflow.types.TString; + /** Type-safe factory methods for creating {@link org.tensorflow.Tensor} objects. */ public final class Tensors { private Tensors() {} @@ -26,8 +34,8 @@ private Tensors() {} * * @param data The string to put into the new scalar tensor. */ - public static Tensor create(String data) { - return Tensor.create(data.getBytes(UTF_8), String.class); + public static Tensor create(String data) { + return Tensor.create(data.getBytes(UTF_8), TString.DTYPE); } /** @@ -36,8 +44,8 @@ public static Tensor create(String data) { * @param charset The encoding from String to bytes. * @param data The string to put into the new scalar tensor. */ - public static Tensor create(String data, java.nio.charset.Charset charset) { - return Tensor.create(data.getBytes(charset), String.class); + public static Tensor create(String data, Charset charset) { + return Tensor.create(data.getBytes(charset), TString.DTYPE); } /** @@ -45,8 +53,8 @@ public static Tensor create(String data, java.nio.charset.Charset charse * * @param data The value to put into the new scalar tensor. */ - public static Tensor create(float data) { - return Tensor.create(data, Float.class); + public static Tensor create(float data) { + return Tensor.create(data, TFloat.DTYPE); } /** @@ -55,8 +63,8 @@ public static Tensor create(float data) { * @param data An array containing the values to put into the new tensor. The dimensions of the * new tensor will match those of the array. */ - public static Tensor create(float[] data) { - return Tensor.create(data, Float.class); + public static Tensor create(float[] data) { + return Tensor.create(data, TFloat.DTYPE); } /** @@ -65,8 +73,8 @@ public static Tensor create(float[] data) { * @param data An array containing the values to put into the new tensor. The dimensions of the * new tensor will match those of the array. */ - public static Tensor create(float[][] data) { - return Tensor.create(data, Float.class); + public static Tensor create(float[][] data) { + return Tensor.create(data, TFloat.DTYPE); } /** @@ -75,8 +83,8 @@ public static Tensor create(float[][] data) { * @param data An array containing the values to put into the new tensor. The dimensions of the * new tensor will match those of the array. */ - public static Tensor create(float[][][] data) { - return Tensor.create(data, Float.class); + public static Tensor create(float[][][] data) { + return Tensor.create(data, TFloat.DTYPE); } /** @@ -85,8 +93,8 @@ public static Tensor create(float[][][] data) { * @param data An array containing the values to put into the new tensor. The dimensions of the * new tensor will match those of the array. */ - public static Tensor create(float[][][][] data) { - return Tensor.create(data, Float.class); + public static Tensor create(float[][][][] data) { + return Tensor.create(data, TFloat.DTYPE); } /** @@ -95,8 +103,8 @@ public static Tensor create(float[][][][] data) { * @param data An array containing the values to put into the new tensor. The dimensions of the * new tensor will match those of the array. */ - public static Tensor create(float[][][][][] data) { - return Tensor.create(data, Float.class); + public static Tensor create(float[][][][][] data) { + return Tensor.create(data, TFloat.DTYPE); } /** @@ -105,8 +113,8 @@ public static Tensor create(float[][][][][] data) { * @param data An array containing the values to put into the new tensor. The dimensions of the * new tensor will match those of the array. */ - public static Tensor create(float[][][][][][] data) { - return Tensor.create(data, Float.class); + public static Tensor create(float[][][][][][] data) { + return Tensor.create(data, TFloat.DTYPE); } /** @@ -114,8 +122,8 @@ public static Tensor create(float[][][][][][] data) { * * @param data The value to put into the new scalar tensor. */ - public static Tensor create(double data) { - return Tensor.create(data, Double.class); + public static Tensor create(double data) { + return Tensor.create(data, TDouble.DTYPE); } /** @@ -124,8 +132,8 @@ public static Tensor create(double data) { * @param data An array containing the values to put into the new tensor. The dimensions of the * new tensor will match those of the array. */ - public static Tensor create(double[] data) { - return Tensor.create(data, Double.class); + public static Tensor create(double[] data) { + return Tensor.create(data, TDouble.DTYPE); } /** @@ -134,8 +142,8 @@ public static Tensor create(double[] data) { * @param data An array containing the values to put into the new tensor. The dimensions of the * new tensor will match those of the array. */ - public static Tensor create(double[][] data) { - return Tensor.create(data, Double.class); + public static Tensor create(double[][] data) { + return Tensor.create(data, TDouble.DTYPE); } /** @@ -144,8 +152,8 @@ public static Tensor create(double[][] data) { * @param data An array containing the values to put into the new tensor. The dimensions of the * new tensor will match those of the array. */ - public static Tensor create(double[][][] data) { - return Tensor.create(data, Double.class); + public static Tensor create(double[][][] data) { + return Tensor.create(data, TDouble.DTYPE); } /** @@ -154,8 +162,8 @@ public static Tensor create(double[][][] data) { * @param data An array containing the values to put into the new tensor. The dimensions of the * new tensor will match those of the array. */ - public static Tensor create(double[][][][] data) { - return Tensor.create(data, Double.class); + public static Tensor create(double[][][][] data) { + return Tensor.create(data, TDouble.DTYPE); } /** @@ -164,8 +172,8 @@ public static Tensor create(double[][][][] data) { * @param data An array containing the values to put into the new tensor. The dimensions of the * new tensor will match those of the array. */ - public static Tensor create(double[][][][][] data) { - return Tensor.create(data, Double.class); + public static Tensor create(double[][][][][] data) { + return Tensor.create(data, TDouble.DTYPE); } /** @@ -174,8 +182,8 @@ public static Tensor create(double[][][][][] data) { * @param data An array containing the values to put into the new tensor. The dimensions of the * new tensor will match those of the array. */ - public static Tensor create(double[][][][][][] data) { - return Tensor.create(data, Double.class); + public static Tensor create(double[][][][][][] data) { + return Tensor.create(data, TDouble.DTYPE); } /** @@ -183,8 +191,8 @@ public static Tensor create(double[][][][][][] data) { * * @param data The value to put into the new scalar tensor. */ - public static Tensor create(int data) { - return Tensor.create(data, Integer.class); + public static Tensor create(int data) { + return Tensor.create(data, TInt32.DTYPE); } /** @@ -193,8 +201,8 @@ public static Tensor create(int data) { * @param data An array containing the values to put into the new tensor. The dimensions of the * new tensor will match those of the array. */ - public static Tensor create(int[] data) { - return Tensor.create(data, Integer.class); + public static Tensor create(int[] data) { + return Tensor.create(data, TInt32.DTYPE); } /** @@ -203,8 +211,8 @@ public static Tensor create(int[] data) { * @param data An array containing the values to put into the new tensor. The dimensions of the * new tensor will match those of the array. */ - public static Tensor create(int[][] data) { - return Tensor.create(data, Integer.class); + public static Tensor create(int[][] data) { + return Tensor.create(data, TInt32.DTYPE); } /** @@ -213,8 +221,8 @@ public static Tensor create(int[][] data) { * @param data An array containing the values to put into the new tensor. The dimensions of the * new tensor will match those of the array. */ - public static Tensor create(int[][][] data) { - return Tensor.create(data, Integer.class); + public static Tensor create(int[][][] data) { + return Tensor.create(data, TInt32.DTYPE); } /** @@ -223,8 +231,8 @@ public static Tensor create(int[][][] data) { * @param data An array containing the values to put into the new tensor. The dimensions of the * new tensor will match those of the array. */ - public static Tensor create(int[][][][] data) { - return Tensor.create(data, Integer.class); + public static Tensor create(int[][][][] data) { + return Tensor.create(data, TInt32.DTYPE); } /** @@ -233,8 +241,8 @@ public static Tensor create(int[][][][] data) { * @param data An array containing the values to put into the new tensor. The dimensions of the * new tensor will match those of the array. */ - public static Tensor create(int[][][][][] data) { - return Tensor.create(data, Integer.class); + public static Tensor create(int[][][][][] data) { + return Tensor.create(data, TInt32.DTYPE); } /** @@ -243,68 +251,68 @@ public static Tensor create(int[][][][][] data) { * @param data An array containing the values to put into the new tensor. The dimensions of the * new tensor will match those of the array. */ - public static Tensor create(int[][][][][][] data) { - return Tensor.create(data, Integer.class); + public static Tensor create(int[][][][][][] data) { + return Tensor.create(data, TInt32.DTYPE); } /** * Creates a scalar tensor containing a single {@code byte} element. * - * @param data An array containing the data to put into the new tensor. String elements are + * @param data An array containing the data to put into the new tensor. TString elements are * sequences of bytes from the last array dimension. */ - public static Tensor create(byte[] data) { - return Tensor.create(data, String.class); + public static Tensor create(byte[] data) { + return Tensor.create(data, TString.DTYPE); } /** * Creates a rank-1 tensor of {@code byte} elements. * - * @param data An array containing the data to put into the new tensor. String elements are + * @param data An array containing the data to put into the new tensor. TString elements are * sequences of bytes from the last array dimension. */ - public static Tensor create(byte[][] data) { - return Tensor.create(data, String.class); + public static Tensor create(byte[][] data) { + return Tensor.create(data, TString.DTYPE); } /** * Creates a rank-2 tensor of {@code byte} elements. * - * @param data An array containing the data to put into the new tensor. String elements are + * @param data An array containing the data to put into the new tensor. TString elements are * sequences of bytes from the last array dimension. */ - public static Tensor create(byte[][][] data) { - return Tensor.create(data, String.class); + public static Tensor create(byte[][][] data) { + return Tensor.create(data, TString.DTYPE); } /** * Creates a rank-3 tensor of {@code byte} elements. * - * @param data An array containing the data to put into the new tensor. String elements are + * @param data An array containing the data to put into the new tensor. TString elements are * sequences of bytes from the last array dimension. */ - public static Tensor create(byte[][][][] data) { - return Tensor.create(data, String.class); + public static Tensor create(byte[][][][] data) { + return Tensor.create(data, TString.DTYPE); } /** * Creates a rank-4 tensor of {@code byte} elements. * - * @param data An array containing the data to put into the new tensor. String elements are + * @param data An array containing the data to put into the new tensor. TString elements are * sequences of bytes from the last array dimension. */ - public static Tensor create(byte[][][][][] data) { - return Tensor.create(data, String.class); + public static Tensor create(byte[][][][][] data) { + return Tensor.create(data, TString.DTYPE); } /** * Creates a rank-5 tensor of {@code byte} elements. * - * @param data An array containing the data to put into the new tensor. String elements are + * @param data An array containing the data to put into the new tensor. TString elements are * sequences of bytes from the last array dimension. */ - public static Tensor create(byte[][][][][][] data) { - return Tensor.create(data, String.class); + public static Tensor create(byte[][][][][][] data) { + return Tensor.create(data, TString.DTYPE); } /** @@ -312,8 +320,8 @@ public static Tensor create(byte[][][][][][] data) { * * @param data The value to put into the new scalar tensor. */ - public static Tensor create(long data) { - return Tensor.create(data, Long.class); + public static Tensor create(long data) { + return Tensor.create(data, TInt64.DTYPE); } /** @@ -322,8 +330,8 @@ public static Tensor create(long data) { * @param data An array containing the values to put into the new tensor. The dimensions of the * new tensor will match those of the array. */ - public static Tensor create(long[] data) { - return Tensor.create(data, Long.class); + public static Tensor create(long[] data) { + return Tensor.create(data, TInt64.DTYPE); } /** @@ -332,8 +340,8 @@ public static Tensor create(long[] data) { * @param data An array containing the values to put into the new tensor. The dimensions of the * new tensor will match those of the array. */ - public static Tensor create(long[][] data) { - return Tensor.create(data, Long.class); + public static Tensor create(long[][] data) { + return Tensor.create(data, TInt64.DTYPE); } /** @@ -342,8 +350,8 @@ public static Tensor create(long[][] data) { * @param data An array containing the values to put into the new tensor. The dimensions of the * new tensor will match those of the array. */ - public static Tensor create(long[][][] data) { - return Tensor.create(data, Long.class); + public static Tensor create(long[][][] data) { + return Tensor.create(data, TInt64.DTYPE); } /** @@ -352,8 +360,8 @@ public static Tensor create(long[][][] data) { * @param data An array containing the values to put into the new tensor. The dimensions of the * new tensor will match those of the array. */ - public static Tensor create(long[][][][] data) { - return Tensor.create(data, Long.class); + public static Tensor create(long[][][][] data) { + return Tensor.create(data, TInt64.DTYPE); } /** @@ -362,8 +370,8 @@ public static Tensor create(long[][][][] data) { * @param data An array containing the values to put into the new tensor. The dimensions of the * new tensor will match those of the array. */ - public static Tensor create(long[][][][][] data) { - return Tensor.create(data, Long.class); + public static Tensor create(long[][][][][] data) { + return Tensor.create(data, TInt64.DTYPE); } /** @@ -372,8 +380,8 @@ public static Tensor create(long[][][][][] data) { * @param data An array containing the values to put into the new tensor. The dimensions of the * new tensor will match those of the array. */ - public static Tensor create(long[][][][][][] data) { - return Tensor.create(data, Long.class); + public static Tensor create(long[][][][][][] data) { + return Tensor.create(data, TInt64.DTYPE); } /** @@ -381,8 +389,8 @@ public static Tensor create(long[][][][][][] data) { * * @param data The value to put into the new scalar tensor. */ - public static Tensor create(boolean data) { - return Tensor.create(data, Boolean.class); + public static Tensor create(boolean data) { + return Tensor.create(data, TBool.DTYPE); } /** @@ -391,8 +399,8 @@ public static Tensor create(boolean data) { * @param data An array containing the values to put into the new tensor. The dimensions of the * new tensor will match those of the array. */ - public static Tensor create(boolean[] data) { - return Tensor.create(data, Boolean.class); + public static Tensor create(boolean[] data) { + return Tensor.create(data, TBool.DTYPE); } /** @@ -401,8 +409,8 @@ public static Tensor create(boolean[] data) { * @param data An array containing the values to put into the new tensor. The dimensions of the * new tensor will match those of the array. */ - public static Tensor create(boolean[][] data) { - return Tensor.create(data, Boolean.class); + public static Tensor create(boolean[][] data) { + return Tensor.create(data, TBool.DTYPE); } /** @@ -411,8 +419,8 @@ public static Tensor create(boolean[][] data) { * @param data An array containing the values to put into the new tensor. The dimensions of the * new tensor will match those of the array. */ - public static Tensor create(boolean[][][] data) { - return Tensor.create(data, Boolean.class); + public static Tensor create(boolean[][][] data) { + return Tensor.create(data, TBool.DTYPE); } /** @@ -421,8 +429,8 @@ public static Tensor create(boolean[][][] data) { * @param data An array containing the values to put into the new tensor. The dimensions of the * new tensor will match those of the array. */ - public static Tensor create(boolean[][][][] data) { - return Tensor.create(data, Boolean.class); + public static Tensor create(boolean[][][][] data) { + return Tensor.create(data, TBool.DTYPE); } /** @@ -431,8 +439,8 @@ public static Tensor create(boolean[][][][] data) { * @param data An array containing the values to put into the new tensor. The dimensions of the * new tensor will match those of the array. */ - public static Tensor create(boolean[][][][][] data) { - return Tensor.create(data, Boolean.class); + public static Tensor create(boolean[][][][][] data) { + return Tensor.create(data, TBool.DTYPE); } /** @@ -441,7 +449,7 @@ public static Tensor create(boolean[][][][][] data) { * @param data An array containing the values to put into the new tensor. The dimensions of the * new tensor will match those of the array. */ - public static Tensor create(boolean[][][][][][] data) { - return Tensor.create(data, Boolean.class); + public static Tensor create(boolean[][][][][][] data) { + return Tensor.create(data, TBool.DTYPE); } } diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/internal/buffer/RawBufferHelper.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/internal/buffer/RawBufferHelper.java new file mode 100644 index 00000000000..dbeec5bc26b --- /dev/null +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/internal/buffer/RawBufferHelper.java @@ -0,0 +1,46 @@ +package org.tensorflow.internal.buffer; + +import static org.tensorflow.internal.c_api.global.tensorflow.TF_TensorByteSize; +import static org.tensorflow.internal.c_api.global.tensorflow.TF_TensorData; + +import java.lang.reflect.Field; +import org.tensorflow.internal.c_api.TF_Tensor; +import org.tensorflow.nio.buffer.ByteDataBuffer; +import org.tensorflow.nio.buffer.LongDataBuffer; +import org.tensorflow.nio.buffer.impl.raw.ByteRawDataBuffer; +import org.tensorflow.nio.buffer.impl.raw.LongRawDataBuffer; +import sun.misc.Unsafe; + +final class RawBufferHelper { + + interface Mapper { + T map(Unsafe unsafe, long address, long size, boolean readOnly); + } + + static T map(TF_Tensor nativeTensor, Mapper mapper) { + long address = TF_TensorData(nativeTensor).address(); + long byteSize = TF_TensorByteSize(nativeTensor); + return mapper.map(UNSAFE, address, byteSize, false); + } + + static StringTensorBuffer mapToStrings(TF_Tensor nativeTensor, long numElements) { + long address = TF_TensorData(nativeTensor).address(); + long byteSize = TF_TensorByteSize(nativeTensor); + long offsetByteSize = numElements * Long.BYTES; + LongDataBuffer offsets = LongRawDataBuffer.map(UNSAFE, address, numElements, false); + ByteDataBuffer data = ByteRawDataBuffer.map(UNSAFE, address + offsetByteSize, byteSize - offsetByteSize, false); + return new StringTensorBuffer(offsets, data); + } + + static final Unsafe UNSAFE; + + static { + try { + Field theUnsafe = Unsafe.class.getDeclaredField("theUnsafe"); + theUnsafe.setAccessible(true); + UNSAFE = (Unsafe) theUnsafe.get(null); + } catch (NoSuchFieldException | IllegalAccessException e) { + throw new RuntimeException(e); + } + } +} diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/internal/buffer/StringTensorBuffer.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/internal/buffer/StringTensorBuffer.java new file mode 100644 index 00000000000..00d2e1034dc --- /dev/null +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/internal/buffer/StringTensorBuffer.java @@ -0,0 +1,115 @@ +package org.tensorflow.internal.buffer; + +import com.google.common.base.Charsets; +import java.nio.ByteBuffer; +import java.nio.LongBuffer; +import java.nio.ReadOnlyBufferException; +import org.tensorflow.nio.buffer.ByteDataBuffer; +import org.tensorflow.nio.buffer.DataBuffer; +import org.tensorflow.nio.buffer.DataBuffers; +import org.tensorflow.nio.buffer.LongDataBuffer; +import org.tensorflow.nio.buffer.impl.AbstractDataBuffer; +import org.tensorflow.nio.buffer.impl.Validator; +import org.tensorflow.nio.buffer.impl.raw.ByteRawDataBuffer; +import org.tensorflow.nio.buffer.impl.raw.LongRawDataBuffer; +import org.tensorflow.nio.nd.NdArray; + +public class StringTensorBuffer extends AbstractDataBuffer { + + @Override + public long size() { + return offsets.size(); + } + + @Override + public String get(long index) { + Validator.getArgs(this, index); + long offset = offsets.get(index); + + // Read string length as a varint from the given offset + byte b; + int pos = 0; + int length = 0; + do { + b = data.get(offset++); + length |= (b & 0x7F) << pos++; + } while ((b & 0x80) != 0); + + // Read string of the given length + byte[] bytes = new byte[length]; + data.offset(offset).read(bytes); + + return new String(bytes, Charsets.UTF_8); + } + + @Override + public DataBuffer set(String value, long index) { + throw new ReadOnlyBufferException(); + } + + @Override + public boolean isReadOnly() { + return true; + } + + @Override + public DataBuffer copyTo(DataBuffer dst, long size) { + if (size == size() && dst instanceof StringTensorBuffer) { + StringTensorBuffer tensorDst = (StringTensorBuffer) dst; + if (offsets.size() != size || data.size() != size) { + throw new IllegalArgumentException( + "Cannot copy string tensor data to another tensor of a different size"); + } + offsets.copyTo(tensorDst.offsets, size); + data.copyTo(tensorDst.data, size); + } else { + slowCopyTo(dst, size); + } + return this; + } + + @Override + public DataBuffer offset(long index) { + return new StringTensorBuffer(offsets.offset(index), data.offset(offsets.getLong(index))); + } + + @Override + public DataBuffer narrow(long size) { + return new StringTensorBuffer(offsets.narrow(size), data.narrow(offsets.getLong(size))); + } + + public void init(NdArray src) { + DataWriter writer = new DataWriter(); + src.scalars().forEach(s -> writer.writeNext(s.getValue())); + } + + StringTensorBuffer(LongDataBuffer offsets, ByteDataBuffer data) { + this.offsets = offsets; + this.data = data; + } + + private class DataWriter { + long count = 0; + long dataIndex = 0; + + void writeNext(String value) { + offsets.setLong(dataIndex, count++); + + // Encode string length as a varint first + int v = value.length(); + while (v >= 0x80) { + data.setByte((byte) ((v & 0x7F) | 0x80), dataIndex++); + v >>= 7; + } + data.setByte((byte) v, dataIndex++); + + // Then write string data bytes + byte[] bytes = value.getBytes(Charsets.UTF_8); + data.offset(dataIndex).write(bytes); + dataIndex += bytes.length; + } + } + + private final LongDataBuffer offsets; + private final ByteDataBuffer data; +} diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/internal/buffer/TensorBuffers.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/internal/buffer/TensorBuffers.java new file mode 100644 index 00000000000..564500a5d02 --- /dev/null +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/internal/buffer/TensorBuffers.java @@ -0,0 +1,87 @@ +package org.tensorflow.internal.buffer; + +import java.nio.ByteBuffer; +import java.nio.LongBuffer; +import org.tensorflow.internal.c_api.TF_Tensor; +import org.tensorflow.nio.buffer.ByteDataBuffer; +import org.tensorflow.nio.buffer.DataBuffers; +import org.tensorflow.nio.buffer.DoubleDataBuffer; +import org.tensorflow.nio.buffer.FloatDataBuffer; +import org.tensorflow.nio.buffer.IntDataBuffer; +import org.tensorflow.nio.buffer.LongDataBuffer; +import org.tensorflow.nio.buffer.impl.raw.ByteRawDataBuffer; +import org.tensorflow.nio.buffer.impl.raw.DoubleRawDataBuffer; +import org.tensorflow.nio.buffer.impl.raw.FloatRawDataBuffer; +import org.tensorflow.nio.buffer.impl.raw.IntRawDataBuffer; +import org.tensorflow.nio.buffer.impl.raw.LongRawDataBuffer; + +public final class TensorBuffers { + + public static ByteDataBuffer toBytes(TF_Tensor nativeTensor) { + if (unsafeAvailable) { + return RawBufferHelper.map(nativeTensor, ByteRawDataBuffer::map); + } + return DataBuffers.wrap(directBuffer(nativeTensor.address())); + } + + public static IntDataBuffer toInts(TF_Tensor nativeTensor) { + if (unsafeAvailable) { + return RawBufferHelper.map(nativeTensor, IntRawDataBuffer::map); + } + return DataBuffers.wrap(directBuffer(nativeTensor.address()).asIntBuffer()); + } + + public static LongDataBuffer toLongs(TF_Tensor nativeTensor) { + if (unsafeAvailable) { + return RawBufferHelper.map(nativeTensor, LongRawDataBuffer::map); + } + return DataBuffers.wrap(directBuffer(nativeTensor.address()).asLongBuffer()); + } + + public static FloatDataBuffer toFloats(TF_Tensor nativeTensor) { + if (unsafeAvailable) { + return RawBufferHelper.map(nativeTensor, FloatRawDataBuffer::map); + } + return DataBuffers.wrap(directBuffer(nativeTensor.address()).asFloatBuffer()); + } + + public static DoubleDataBuffer toDoubles(TF_Tensor nativeTensor) { + if (unsafeAvailable) { + return RawBufferHelper.map(nativeTensor, DoubleRawDataBuffer::map); + } + return DataBuffers.wrap(directBuffer(nativeTensor.address()).asDoubleBuffer()); + } + + public static StringTensorBuffer toStrings(TF_Tensor nativeTensor, long numElements) { + if (unsafeAvailable) { + return RawBufferHelper.mapToStrings(nativeTensor, numElements); + } + if (numElements > Integer.MAX_VALUE) { + throw new IllegalArgumentException("Cannot map string tensor of " + numElements + " elements"); + } + ByteBuffer bytes = directBuffer(nativeTensor.address()); + + LongBuffer offsetBuffer = bytes.asLongBuffer(); + offsetBuffer.limit((int)numElements); + LongDataBuffer offsets = DataBuffers.wrap(offsetBuffer.slice()); + + ByteBuffer dataBuffer = bytes.duplicate(); + dataBuffer.position((int)numElements * Long.BYTES); + ByteDataBuffer data = DataBuffers.wrap(dataBuffer.slice()); + + return new StringTensorBuffer(offsets, data); + } + + private static boolean unsafeAvailable; + + static { + try { + Class.forName("sun.misc.Unsafe"); + unsafeAvailable = true; + } catch (ClassNotFoundException e) { + unsafeAvailable = false; + } + } + + private static native ByteBuffer directBuffer(long handle); +} diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/c_api/AbstractTF_Buffer.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/internal/c_api/AbstractTF_Buffer.java similarity index 83% rename from tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/c_api/AbstractTF_Buffer.java rename to tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/internal/c_api/AbstractTF_Buffer.java index ec6238965d3..b750c53ca53 100644 --- a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/c_api/AbstractTF_Buffer.java +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/internal/c_api/AbstractTF_Buffer.java @@ -15,14 +15,17 @@ ======================================================================= */ -package org.tensorflow.c_api; +package org.tensorflow.internal.c_api; -import org.bytedeco.javacpp.*; -import org.bytedeco.javacpp.annotation.Properties; +import static org.tensorflow.internal.c_api.global.tensorflow.TF_DeleteBuffer; +import static org.tensorflow.internal.c_api.global.tensorflow.TF_NewBuffer; +import static org.tensorflow.internal.c_api.global.tensorflow.TF_NewBufferFromString; -import static org.tensorflow.c_api.global.tensorflow.*; +import org.bytedeco.javacpp.BytePointer; +import org.bytedeco.javacpp.Pointer; +import org.bytedeco.javacpp.annotation.Properties; -@Properties(inherit = org.tensorflow.c_api.presets.tensorflow.class) +@Properties(inherit = org.tensorflow.internal.c_api.presets.tensorflow.class) public abstract class AbstractTF_Buffer extends Pointer { protected static class DeleteDeallocator extends TF_Buffer implements Pointer.Deallocator { DeleteDeallocator(TF_Buffer s) { super(s); } diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/c_api/AbstractTF_Graph.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/internal/c_api/AbstractTF_Graph.java similarity index 83% rename from tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/c_api/AbstractTF_Graph.java rename to tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/internal/c_api/AbstractTF_Graph.java index c0a15a8f492..ffc371e95e7 100644 --- a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/c_api/AbstractTF_Graph.java +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/internal/c_api/AbstractTF_Graph.java @@ -15,14 +15,15 @@ ======================================================================= */ -package org.tensorflow.c_api; +package org.tensorflow.internal.c_api; -import org.bytedeco.javacpp.*; -import org.bytedeco.javacpp.annotation.Properties; +import static org.tensorflow.internal.c_api.global.tensorflow.TF_DeleteGraph; +import static org.tensorflow.internal.c_api.global.tensorflow.TF_NewGraph; -import static org.tensorflow.c_api.global.tensorflow.*; +import org.bytedeco.javacpp.Pointer; +import org.bytedeco.javacpp.annotation.Properties; -@Properties(inherit = org.tensorflow.c_api.presets.tensorflow.class) +@Properties(inherit = org.tensorflow.internal.c_api.presets.tensorflow.class) public abstract class AbstractTF_Graph extends Pointer { protected static class DeleteDeallocator extends TF_Graph implements Pointer.Deallocator { DeleteDeallocator(TF_Graph s) { super(s); } diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/c_api/AbstractTF_ImportGraphDefOptions.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/internal/c_api/AbstractTF_ImportGraphDefOptions.java similarity index 78% rename from tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/c_api/AbstractTF_ImportGraphDefOptions.java rename to tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/internal/c_api/AbstractTF_ImportGraphDefOptions.java index 1179a2c36d2..3dfcc8790a7 100644 --- a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/c_api/AbstractTF_ImportGraphDefOptions.java +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/internal/c_api/AbstractTF_ImportGraphDefOptions.java @@ -15,16 +15,18 @@ ======================================================================= */ -package org.tensorflow.c_api; +package org.tensorflow.internal.c_api; -import org.bytedeco.javacpp.*; -import org.bytedeco.javacpp.annotation.Properties; +import static org.tensorflow.internal.c_api.global.tensorflow.TF_DeleteImportGraphDefOptions; +import static org.tensorflow.internal.c_api.global.tensorflow.TF_NewImportGraphDefOptions; -import static org.tensorflow.c_api.global.tensorflow.*; +import org.bytedeco.javacpp.Pointer; +import org.bytedeco.javacpp.annotation.Properties; -@Properties(inherit = org.tensorflow.c_api.presets.tensorflow.class) +@Properties(inherit = org.tensorflow.internal.c_api.presets.tensorflow.class) public abstract class AbstractTF_ImportGraphDefOptions extends Pointer { - protected static class DeleteDeallocator extends TF_ImportGraphDefOptions implements Pointer.Deallocator { + protected static class DeleteDeallocator extends + TF_ImportGraphDefOptions implements Pointer.Deallocator { DeleteDeallocator(TF_ImportGraphDefOptions s) { super(s); } @Override public void deallocate() { if (!isNull()) TF_DeleteImportGraphDefOptions(this); setNull(); } } diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/c_api/AbstractTF_Session.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/internal/c_api/AbstractTF_Session.java similarity index 83% rename from tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/c_api/AbstractTF_Session.java rename to tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/internal/c_api/AbstractTF_Session.java index 15aeb076444..776311252d6 100644 --- a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/c_api/AbstractTF_Session.java +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/internal/c_api/AbstractTF_Session.java @@ -15,18 +15,20 @@ ======================================================================= */ -package org.tensorflow.c_api; +package org.tensorflow.internal.c_api; -import org.bytedeco.javacpp.*; -import org.bytedeco.javacpp.annotation.Properties; +import static org.tensorflow.internal.c_api.global.tensorflow.TF_DeleteSession; +import static org.tensorflow.internal.c_api.global.tensorflow.TF_NewSession; -import static org.tensorflow.c_api.global.tensorflow.*; +import org.bytedeco.javacpp.Pointer; +import org.bytedeco.javacpp.annotation.Properties; -@Properties(inherit = org.tensorflow.c_api.presets.tensorflow.class) +@Properties(inherit = org.tensorflow.internal.c_api.presets.tensorflow.class) public abstract class AbstractTF_Session extends Pointer { protected static class DeleteDeallocator extends TF_Session implements Pointer.Deallocator { DeleteDeallocator(TF_Session s) { super(s); } - @Override public void deallocate() { if (!isNull()) TF_DeleteSession(this, TF_Status.newStatus()); setNull(); } + @Override public void deallocate() { if (!isNull()) TF_DeleteSession(this, TF_Status + .newStatus()); setNull(); } } /** References to prevent deallocation. */ diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/c_api/AbstractTF_SessionOptions.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/internal/c_api/AbstractTF_SessionOptions.java similarity index 78% rename from tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/c_api/AbstractTF_SessionOptions.java rename to tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/internal/c_api/AbstractTF_SessionOptions.java index 4c89013ec88..e235e86c3ce 100644 --- a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/c_api/AbstractTF_SessionOptions.java +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/internal/c_api/AbstractTF_SessionOptions.java @@ -15,16 +15,18 @@ ======================================================================= */ -package org.tensorflow.c_api; +package org.tensorflow.internal.c_api; -import org.bytedeco.javacpp.*; -import org.bytedeco.javacpp.annotation.Properties; +import static org.tensorflow.internal.c_api.global.tensorflow.TF_DeleteSessionOptions; +import static org.tensorflow.internal.c_api.global.tensorflow.TF_NewSessionOptions; -import static org.tensorflow.c_api.global.tensorflow.*; +import org.bytedeco.javacpp.Pointer; +import org.bytedeco.javacpp.annotation.Properties; -@Properties(inherit = org.tensorflow.c_api.presets.tensorflow.class) +@Properties(inherit = org.tensorflow.internal.c_api.presets.tensorflow.class) public abstract class AbstractTF_SessionOptions extends Pointer { - protected static class DeleteDeallocator extends TF_SessionOptions implements Pointer.Deallocator { + protected static class DeleteDeallocator extends + TF_SessionOptions implements Pointer.Deallocator { DeleteDeallocator(TF_SessionOptions s) { super(s); } @Override public void deallocate() { if (!isNull()) TF_DeleteSessionOptions(this); setNull(); } } diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/c_api/AbstractTF_Status.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/internal/c_api/AbstractTF_Status.java similarity index 83% rename from tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/c_api/AbstractTF_Status.java rename to tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/internal/c_api/AbstractTF_Status.java index 30d079b7795..ccfb7a7d84c 100644 --- a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/c_api/AbstractTF_Status.java +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/internal/c_api/AbstractTF_Status.java @@ -15,14 +15,15 @@ ======================================================================= */ -package org.tensorflow.c_api; +package org.tensorflow.internal.c_api; -import org.bytedeco.javacpp.*; -import org.bytedeco.javacpp.annotation.Properties; +import static org.tensorflow.internal.c_api.global.tensorflow.TF_DeleteStatus; +import static org.tensorflow.internal.c_api.global.tensorflow.TF_NewStatus; -import static org.tensorflow.c_api.global.tensorflow.*; +import org.bytedeco.javacpp.Pointer; +import org.bytedeco.javacpp.annotation.Properties; -@Properties(inherit = org.tensorflow.c_api.presets.tensorflow.class) +@Properties(inherit = org.tensorflow.internal.c_api.presets.tensorflow.class) public abstract class AbstractTF_Status extends Pointer { protected static class DeleteDeallocator extends TF_Status implements Pointer.Deallocator { DeleteDeallocator(TF_Status s) { super(s); } diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/c_api/AbstractTF_Tensor.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/internal/c_api/AbstractTF_Tensor.java similarity index 78% rename from tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/c_api/AbstractTF_Tensor.java rename to tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/internal/c_api/AbstractTF_Tensor.java index dabee8841c0..6a0fae0f431 100644 --- a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/c_api/AbstractTF_Tensor.java +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/internal/c_api/AbstractTF_Tensor.java @@ -15,14 +15,17 @@ ======================================================================= */ -package org.tensorflow.c_api; +package org.tensorflow.internal.c_api; -import org.bytedeco.javacpp.*; -import org.bytedeco.javacpp.annotation.Properties; +import static org.tensorflow.internal.c_api.global.tensorflow.TF_AllocateTensor; +import static org.tensorflow.internal.c_api.global.tensorflow.TF_DeleteTensor; +import static org.tensorflow.internal.c_api.global.tensorflow.TF_NewTensor; -import static org.tensorflow.c_api.global.tensorflow.*; +import org.bytedeco.javacpp.Pointer; +import org.bytedeco.javacpp.PointerScope; +import org.bytedeco.javacpp.annotation.Properties; -@Properties(inherit = org.tensorflow.c_api.presets.tensorflow.class) +@Properties(inherit = org.tensorflow.internal.c_api.presets.tensorflow.class) public abstract class AbstractTF_Tensor extends Pointer { protected static class DeleteDeallocator extends TF_Tensor implements Pointer.Deallocator { DeleteDeallocator(TF_Tensor s) { super(s); } @@ -39,6 +42,11 @@ protected static class DeleteDeallocator extends TF_Tensor implements Pointer.De public AbstractTF_Tensor(Pointer p) { super(p); } + // WARNING: This is a temporary hack to create a `TF_Tensor` object out of the Tensor native handle + public void temporaryHackToSetAddressFromHandle(long tensorNativeHandle) { + this.address = tensorNativeHandle; + } + /** * Calls TF_NewTensor(), and registers a deallocator. * @return TF_Tensor created. Do not call TF_DeleteTensor() on it. diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/c_api/presets/tensorflow.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/internal/c_api/presets/tensorflow.java similarity index 94% rename from tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/c_api/presets/tensorflow.java rename to tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/internal/c_api/presets/tensorflow.java index f1b41509736..faddbc55932 100644 --- a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/c_api/presets/tensorflow.java +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/internal/c_api/presets/tensorflow.java @@ -15,19 +15,16 @@ ======================================================================= */ -package org.tensorflow.c_api.presets; +package org.tensorflow.internal.c_api.presets; import java.util.List; -import org.bytedeco.javacpp.BytePointer; import org.bytedeco.javacpp.ClassProperties; import org.bytedeco.javacpp.LoadEnabled; -import org.bytedeco.javacpp.Loader; import org.bytedeco.javacpp.annotation.Platform; import org.bytedeco.javacpp.annotation.Properties; import org.bytedeco.javacpp.tools.Info; import org.bytedeco.javacpp.tools.InfoMap; import org.bytedeco.javacpp.tools.InfoMapper; -import org.bytedeco.javacpp.tools.Logger; /** * @@ -90,8 +87,8 @@ extension = {"-mkl", "-gpu", "-mkl-gpu"} ) }, - target = "org.tensorflow.c_api", - global = "org.tensorflow.c_api.global.tensorflow") + target = "org.tensorflow.internal.c_api", + global = "org.tensorflow.internal.c_api.global.tensorflow") public class tensorflow implements LoadEnabled, InfoMapper { @Override public void init(ClassProperties properties) { @@ -179,14 +176,14 @@ public class tensorflow implements LoadEnabled, InfoMapper { public void map(InfoMap infoMap) { infoMap.put(new Info("TF_CAPI_EXPORT").cppTypes().annotations()) .put(new Info("TF_Buffer::data").javaText("public native @Const Pointer data(); public native TF_Buffer data(Pointer data);")) - .put(new Info("TF_Status").pointerTypes("TF_Status").base("org.tensorflow.c_api.AbstractTF_Status")) - .put(new Info("TF_Buffer").pointerTypes("TF_Buffer").base("org.tensorflow.c_api.AbstractTF_Buffer")) - .put(new Info("TF_Tensor").pointerTypes("TF_Tensor").base("org.tensorflow.c_api.AbstractTF_Tensor")) - .put(new Info("TF_SessionOptions").pointerTypes("TF_SessionOptions").base("org.tensorflow.c_api.AbstractTF_SessionOptions")) - .put(new Info("TF_Graph").pointerTypes("TF_Graph").base("org.tensorflow.c_api.AbstractTF_Graph")) + .put(new Info("TF_Status").pointerTypes("TF_Status").base("org.tensorflow.internal.c_api.AbstractTF_Status")) + .put(new Info("TF_Buffer").pointerTypes("TF_Buffer").base("org.tensorflow.internal.c_api.AbstractTF_Buffer")) + .put(new Info("TF_Tensor").pointerTypes("TF_Tensor").base("org.tensorflow.internal.c_api.AbstractTF_Tensor")) + .put(new Info("TF_SessionOptions").pointerTypes("TF_SessionOptions").base("org.tensorflow.internal.c_api.AbstractTF_SessionOptions")) + .put(new Info("TF_Graph").pointerTypes("TF_Graph").base("org.tensorflow.internal.c_api.AbstractTF_Graph")) .put(new Info("TF_Graph::graph").javaText("public native @MemberGetter @ByRef Graph graph();")) .put(new Info("TF_Graph::refiner").javaText("public native @MemberGetter @ByRef ShapeRefiner refiner();")) - .put(new Info("TF_ImportGraphDefOptions").pointerTypes("TF_ImportGraphDefOptions").base("org.tensorflow.c_api.AbstractTF_ImportGraphDefOptions")) + .put(new Info("TF_ImportGraphDefOptions").pointerTypes("TF_ImportGraphDefOptions").base("org.tensorflow.internal.c_api.AbstractTF_ImportGraphDefOptions")) .put(new Info("TF_Operation", "TFE_MonitoringCounterCell", "TFE_MonitoringSamplerCell", "TFE_MonitoringCounter0", "TFE_MonitoringCounter1", "TFE_MonitoringCounter2", "TFE_MonitoringIntGaugeCell", "TFE_MonitoringStringGaugeCell", "TFE_MonitoringBoolGaugeCell", @@ -203,7 +200,7 @@ public void map(InfoMap infoMap) { .put(new Info("TFE_Context::context").javaText("@MemberGetter public native @ByRef EagerContext context();")) .put(new Info("TFE_Op::operation").javaText("@MemberGetter public native @ByRef EagerOperation operation();")) .put(new Info("TF_ShapeInferenceContextDimValueKnown", "TFE_NewTensorHandle(const tensorflow::Tensor&, TF_Status*)").skip()) - .put(new Info("TF_Session").pointerTypes("TF_Session").base("org.tensorflow.c_api.AbstractTF_Session")) + .put(new Info("TF_Session").pointerTypes("TF_Session").base("org.tensorflow.internal.c_api.AbstractTF_Session")) .put(new Info("TF_WhileParams").purify()); } } diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/op/Scope.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/op/Scope.java index ccbf776cbe8..9726cfd00b3 100644 --- a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/op/Scope.java +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/op/Scope.java @@ -15,12 +15,11 @@ package org.tensorflow.op; +import java.util.ArrayList; import org.tensorflow.ExecutionEnvironment; import org.tensorflow.Operand; import org.tensorflow.OperationBuilder; -import java.util.ArrayList; - /** * Manages groups of related properties when creating Tensorflow Operations, such as a common name * prefix. diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/op/core/Constant.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/op/core/Constant.java index ee4301f1159..973fe87e32f 100644 --- a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/op/core/Constant.java +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/op/core/Constant.java @@ -23,7 +23,6 @@ import java.nio.IntBuffer; import java.nio.LongBuffer; import java.nio.charset.Charset; - import org.tensorflow.DataType; import org.tensorflow.Operand; import org.tensorflow.Operation; @@ -32,6 +31,13 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TBool; +import org.tensorflow.types.TDouble; +import org.tensorflow.types.TFloat; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.TInt64; +import org.tensorflow.types.TString; +import org.tensorflow.types.family.TType; /** An operator producing a constant value. */ @Operator @@ -44,8 +50,10 @@ public final class Constant extends PrimitiveOp implements Operand { * @param data The value to put into the new constant. * @return an integer constant */ - public static Constant create(Scope scope, int data) { - return create(scope, data, Integer.class); + public static Constant create(Scope scope, int data) { + try (Tensor value = TInt32.scalar(data)) { + return create(scope, value); + } } /** @@ -55,8 +63,10 @@ public static Constant create(Scope scope, int data) { * @param data An array containing the values to put into the new constant. The dimensions of the * new constant will match those of the array. */ - public static Constant create(Scope scope, int[] data) { - return create(scope, data, Integer.class); + public static Constant create(Scope scope, int[] data) { + try (Tensor value = TInt32.vector(data)) { + return create(scope, value); + } } /** @@ -66,8 +76,8 @@ public static Constant create(Scope scope, int[] data) { * @param data An array containing the values to put into the new constant. The dimensions of the * new constant will match those of the array. */ - public static Constant create(Scope scope, int[][] data) { - return create(scope, data, Integer.class); + public static Constant create(Scope scope, int[][] data) { + return create(scope, data, TInt32.DTYPE); } /** @@ -77,8 +87,8 @@ public static Constant create(Scope scope, int[][] data) { * @param data An array containing the values to put into the new constant. The dimensions of the * new constant will match those of the array. */ - public static Constant create(Scope scope, int[][][] data) { - return create(scope, data, Integer.class); + public static Constant create(Scope scope, int[][][] data) { + return create(scope, data, TInt32.DTYPE); } /** @@ -88,8 +98,8 @@ public static Constant create(Scope scope, int[][][] data) { * @param data An array containing the values to put into the new constant. The dimensions of the * new constant will match those of the array. */ - public static Constant create(Scope scope, int[][][][] data) { - return create(scope, data, Integer.class); + public static Constant create(Scope scope, int[][][][] data) { + return create(scope, data, TInt32.DTYPE); } /** @@ -99,8 +109,8 @@ public static Constant create(Scope scope, int[][][][] data) { * @param data An array containing the values to put into the new constant. The dimensions of the * new constant will match those of the array. */ - public static Constant create(Scope scope, int[][][][][] data) { - return create(scope, data, Integer.class); + public static Constant create(Scope scope, int[][][][][] data) { + return create(scope, data, TInt32.DTYPE); } /** @@ -110,12 +120,12 @@ public static Constant create(Scope scope, int[][][][][] data) { * @param data An array containing the values to put into the new constant. The dimensions of the * new constant will match those of the array. */ - public static Constant create(Scope scope, int[][][][][][] data) { - return create(scope, data, Integer.class); + public static Constant create(Scope scope, int[][][][][][] data) { + return create(scope, data, TInt32.DTYPE); } /** - * Create a {@link DataType#INT32} constant with data from the given buffer. + * Create a {@link TInt32} constant with data from the given buffer. * *

Creates a constant with the given shape by copying elements from the buffer (starting from * its current position) into the tensor. For example, if {@code shape = {2,3} } (which represents @@ -128,9 +138,9 @@ public static Constant create(Scope scope, int[][][][][][] data) { * @return an integer constant * @throws IllegalArgumentException If the tensor shape is not compatible with the buffer */ - public static Constant create(Scope scope, long[] shape, IntBuffer data) { - try (Tensor value = Tensor.create(shape, data)) { - return createWithTensor(scope, value); + public static Constant create(Scope scope, long[] shape, IntBuffer data) { + try (Tensor value = Tensor.create(shape, data)) { + return create(scope, value); } } @@ -141,8 +151,8 @@ public static Constant create(Scope scope, long[] shape, IntBuffer data * @param data The value to put into the new constant. * @return a float constant */ - public static Constant create(Scope scope, float data) { - return create(scope, data, Float.class); + public static Constant create(Scope scope, float data) { + return create(scope, data, TFloat.DTYPE); } /** @@ -152,8 +162,8 @@ public static Constant create(Scope scope, float data) { * @param data An array containing the values to put into the new constant. The dimensions of the * new constant will match those of the array. */ - public static Constant create(Scope scope, float[] data) { - return create(scope, data, Float.class); + public static Constant create(Scope scope, float[] data) { + return create(scope, data, TFloat.DTYPE); } /** @@ -163,8 +173,8 @@ public static Constant create(Scope scope, float[] data) { * @param data An array containing the values to put into the new constant. The dimensions of the * new constant will match those of the array. */ - public static Constant create(Scope scope, float[][] data) { - return create(scope, data, Float.class); + public static Constant create(Scope scope, float[][] data) { + return create(scope, data, TFloat.DTYPE); } /** @@ -174,8 +184,8 @@ public static Constant create(Scope scope, float[][] data) { * @param data An array containing the values to put into the new constant. The dimensions of the * new constant will match those of the array. */ - public static Constant create(Scope scope, float[][][] data) { - return create(scope, data, Float.class); + public static Constant create(Scope scope, float[][][] data) { + return create(scope, data, TFloat.DTYPE); } /** @@ -185,8 +195,8 @@ public static Constant create(Scope scope, float[][][] data) { * @param data An array containing the values to put into the new constant. The dimensions of the * new constant will match those of the array. */ - public static Constant create(Scope scope, float[][][][] data) { - return create(scope, data, Float.class); + public static Constant create(Scope scope, float[][][][] data) { + return create(scope, data, TFloat.DTYPE); } /** @@ -196,8 +206,8 @@ public static Constant create(Scope scope, float[][][][] data) { * @param data An array containing the values to put into the new constant. The dimensions of the * new constant will match those of the array. */ - public static Constant create(Scope scope, float[][][][][] data) { - return create(scope, data, Float.class); + public static Constant create(Scope scope, float[][][][][] data) { + return create(scope, data, TFloat.DTYPE); } /** @@ -207,12 +217,12 @@ public static Constant create(Scope scope, float[][][][][] data) { * @param data An array containing the values to put into the new constant. The dimensions of the * new constant will match those of the array. */ - public static Constant create(Scope scope, float[][][][][][] data) { - return create(scope, data, Float.class); + public static Constant create(Scope scope, float[][][][][][] data) { + return create(scope, data, TFloat.DTYPE); } /** - * Create a {@link DataType#FLOAT} constant with data from the given buffer. + * Create a {@link TFloat} constant with data from the given buffer. * *

Creates a constant with the given shape by copying elements from the buffer (starting from * its current position) into the tensor. For example, if {@code shape = {2,3} } (which represents @@ -225,9 +235,9 @@ public static Constant create(Scope scope, float[][][][][][] data) { * @return a float constant * @throws IllegalArgumentException If the tensor shape is not compatible with the buffer */ - public static Constant create(Scope scope, long[] shape, FloatBuffer data) { - try (Tensor value = Tensor.create(shape, data)) { - return createWithTensor(scope, value); + public static Constant create(Scope scope, long[] shape, FloatBuffer data) { + try (Tensor value = Tensor.create(shape, data)) { + return create(scope, value); } } @@ -238,8 +248,8 @@ public static Constant create(Scope scope, long[] shape, FloatBuffer data * @param data The value to put into the new constant. * @return a double constant */ - public static Constant create(Scope scope, double data) { - return create(scope, data, Double.class); + public static Constant create(Scope scope, double data) { + return create(scope, data, TDouble.DTYPE); } /** @@ -249,8 +259,8 @@ public static Constant create(Scope scope, double data) { * @param data An array containing the values to put into the new constant. The dimensions of the * new constant will match those of the array. */ - public static Constant create(Scope scope, double[] data) { - return create(scope, data, Double.class); + public static Constant create(Scope scope, double[] data) { + return create(scope, data, TDouble.DTYPE); } /** @@ -260,8 +270,8 @@ public static Constant create(Scope scope, double[] data) { * @param data An array containing the values to put into the new constant. The dimensions of the * new constant will match those of the array. */ - public static Constant create(Scope scope, double[][] data) { - return create(scope, data, Double.class); + public static Constant create(Scope scope, double[][] data) { + return create(scope, data, TDouble.DTYPE); } /** @@ -271,8 +281,8 @@ public static Constant create(Scope scope, double[][] data) { * @param data An array containing the values to put into the new constant. The dimensions of the * new constant will match those of the array. */ - public static Constant create(Scope scope, double[][][] data) { - return create(scope, data, Double.class); + public static Constant create(Scope scope, double[][][] data) { + return create(scope, data, TDouble.DTYPE); } /** @@ -282,8 +292,8 @@ public static Constant create(Scope scope, double[][][] data) { * @param data An array containing the values to put into the new constant. The dimensions of the * new constant will match those of the array. */ - public static Constant create(Scope scope, double[][][][] data) { - return create(scope, data, Double.class); + public static Constant create(Scope scope, double[][][][] data) { + return create(scope, data, TDouble.DTYPE); } /** @@ -293,8 +303,8 @@ public static Constant create(Scope scope, double[][][][] data) { * @param data An array containing the values to put into the new constant. The dimensions of the * new constant will match those of the array. */ - public static Constant create(Scope scope, double[][][][][] data) { - return create(scope, data, Double.class); + public static Constant create(Scope scope, double[][][][][] data) { + return create(scope, data, TDouble.DTYPE); } /** @@ -304,12 +314,12 @@ public static Constant create(Scope scope, double[][][][][] data) { * @param data An array containing the values to put into the new constant. The dimensions of the * new constant will match those of the array. */ - public static Constant create(Scope scope, double[][][][][][] data) { - return create(scope, data, Double.class); + public static Constant create(Scope scope, double[][][][][][] data) { + return create(scope, data, TDouble.DTYPE); } /** - * Create a {@link DataType#DOUBLE} constant with data from the given buffer. + * Create a {@link TDouble} constant with data from the given buffer. * *

Creates a constant with the given shape by copying elements from the buffer (starting from * its current position) into the tensor. For example, if {@code shape = {2,3} } (which represents @@ -322,9 +332,9 @@ public static Constant create(Scope scope, double[][][][][][] data) { * @return a double constant * @throws IllegalArgumentException If the tensor shape is not compatible with the buffer */ - public static Constant create(Scope scope, long[] shape, DoubleBuffer data) { - try (Tensor value = Tensor.create(shape, data)) { - return createWithTensor(scope, value); + public static Constant create(Scope scope, long[] shape, DoubleBuffer data) { + try (Tensor value = Tensor.create(shape, data)) { + return create(scope, value); } } @@ -335,8 +345,8 @@ public static Constant create(Scope scope, long[] shape, DoubleBuffer da * @param data The value to put into the new constant. * @return a long constant */ - public static Constant create(Scope scope, long data) { - return create(scope, data, Long.class); + public static Constant create(Scope scope, long data) { + return create(scope, data, TInt64.DTYPE); } /** @@ -346,8 +356,8 @@ public static Constant create(Scope scope, long data) { * @param data An array containing the values to put into the new constant. The dimensions of the * new constant will match those of the array. */ - public static Constant create(Scope scope, long[] data) { - return create(scope, data, Long.class); + public static Constant create(Scope scope, long[] data) { + return create(scope, data, TInt64.DTYPE); } /** @@ -357,8 +367,8 @@ public static Constant create(Scope scope, long[] data) { * @param data An array containing the values to put into the new constant. The dimensions of the * new constant will match those of the array. */ - public static Constant create(Scope scope, long[][] data) { - return create(scope, data, Long.class); + public static Constant create(Scope scope, long[][] data) { + return create(scope, data, TInt64.DTYPE); } /** @@ -368,8 +378,8 @@ public static Constant create(Scope scope, long[][] data) { * @param data An array containing the values to put into the new constant. The dimensions of the * new constant will match those of the array. */ - public static Constant create(Scope scope, long[][][] data) { - return create(scope, data, Long.class); + public static Constant create(Scope scope, long[][][] data) { + return create(scope, data, TInt64.DTYPE); } /** @@ -379,8 +389,8 @@ public static Constant create(Scope scope, long[][][] data) { * @param data An array containing the values to put into the new constant. The dimensions of the * new constant will match those of the array. */ - public static Constant create(Scope scope, long[][][][] data) { - return create(scope, data, Long.class); + public static Constant create(Scope scope, long[][][][] data) { + return create(scope, data, TInt64.DTYPE); } /** @@ -390,8 +400,8 @@ public static Constant create(Scope scope, long[][][][] data) { * @param data An array containing the values to put into the new constant. The dimensions of the * new constant will match those of the array. */ - public static Constant create(Scope scope, long[][][][][] data) { - return create(scope, data, Long.class); + public static Constant create(Scope scope, long[][][][][] data) { + return create(scope, data, TInt64.DTYPE); } /** @@ -401,12 +411,12 @@ public static Constant create(Scope scope, long[][][][][] data) { * @param data An array containing the values to put into the new constant. The dimensions of the * new constant will match those of the array. */ - public static Constant create(Scope scope, long[][][][][][] data) { - return create(scope, data, Long.class); + public static Constant create(Scope scope, long[][][][][][] data) { + return create(scope, data, TInt64.DTYPE); } /** - * Create a {@link DataType#INT64} constant with data from the given buffer. + * Create a {@link TInt64} constant with data from the given buffer. * *

Creates a constant with the given shape by copying elements from the buffer (starting from * its current position) into the tensor. For example, if {@code shape = {2,3} } (which represents @@ -419,9 +429,9 @@ public static Constant create(Scope scope, long[][][][][][] data) { * @return a long constant * @throws IllegalArgumentException If the tensor shape is not compatible with the buffer */ - public static Constant create(Scope scope, long[] shape, LongBuffer data) { - try (Tensor value = Tensor.create(shape, data)) { - return createWithTensor(scope, value); + public static Constant create(Scope scope, long[] shape, LongBuffer data) { + try (Tensor value = Tensor.create(shape, data)) { + return create(scope, value); } } @@ -432,8 +442,8 @@ public static Constant create(Scope scope, long[] shape, LongBuffer data) * @param data The value to put into the new constant. * @return a boolean constant */ - public static Constant create(Scope scope, boolean data) { - return create(scope, data, Boolean.class); + public static Constant create(Scope scope, boolean data) { + return create(scope, data, TBool.DTYPE); } /** @@ -443,8 +453,8 @@ public static Constant create(Scope scope, boolean data) { * @param data An array containing the values to put into the new constant. The dimensions of the * new constant will match those of the array. */ - public static Constant create(Scope scope, boolean[] data) { - return create(scope, data, Boolean.class); + public static Constant create(Scope scope, boolean[] data) { + return create(scope, data, TBool.DTYPE); } /** @@ -454,8 +464,8 @@ public static Constant create(Scope scope, boolean[] data) { * @param data An array containing the values to put into the new constant. The dimensions of the * new constant will match those of the array. */ - public static Constant create(Scope scope, boolean[][] data) { - return create(scope, data, Boolean.class); + public static Constant create(Scope scope, boolean[][] data) { + return create(scope, data, TBool.DTYPE); } /** @@ -465,8 +475,8 @@ public static Constant create(Scope scope, boolean[][] data) { * @param data An array containing the values to put into the new constant. The dimensions of the * new constant will match those of the array. */ - public static Constant create(Scope scope, boolean[][][] data) { - return create(scope, data, Boolean.class); + public static Constant create(Scope scope, boolean[][][] data) { + return create(scope, data, TBool.DTYPE); } /** @@ -476,8 +486,8 @@ public static Constant create(Scope scope, boolean[][][] data) { * @param data An array containing the values to put into the new constant. The dimensions of the * new constant will match those of the array. */ - public static Constant create(Scope scope, boolean[][][][] data) { - return create(scope, data, Boolean.class); + public static Constant create(Scope scope, boolean[][][][] data) { + return create(scope, data, TBool.DTYPE); } /** @@ -487,8 +497,8 @@ public static Constant create(Scope scope, boolean[][][][] data) { * @param data An array containing the values to put into the new constant. The dimensions of the * new constant will match those of the array. */ - public static Constant create(Scope scope, boolean[][][][][] data) { - return create(scope, data, Boolean.class); + public static Constant create(Scope scope, boolean[][][][][] data) { + return create(scope, data, TBool.DTYPE); } /** @@ -498,8 +508,8 @@ public static Constant create(Scope scope, boolean[][][][][] data) { * @param data An array containing the values to put into the new constant. The dimensions of the * new constant will match those of the array. */ - public static Constant create(Scope scope, boolean[][][][][][] data) { - return create(scope, data, Boolean.class); + public static Constant create(Scope scope, boolean[][][][][][] data) { + return create(scope, data, TBool.DTYPE); } /** @@ -509,7 +519,7 @@ public static Constant create(Scope scope, boolean[][][][][][] data) { * @param data The string to put into the new constant. * @return a string constant */ - public static Constant create(Scope scope, String data) { + public static Constant create(Scope scope, String data) { return create(scope, data, UTF_8); } @@ -521,9 +531,9 @@ public static Constant create(Scope scope, String data) { * @param data The string to put into the new constant. * @return a string constant */ - public static Constant create(Scope scope, String data, Charset charset) { - try (Tensor value = Tensor.create(data.getBytes(charset), String.class)) { - return createWithTensor(scope, value); + public static Constant create(Scope scope, String data, Charset charset) { + try (Tensor value = Tensor.create(data.getBytes(charset), TString.DTYPE)) { + return create(scope, value); } } @@ -534,8 +544,8 @@ public static Constant create(Scope scope, String data, Charset charset) * @param data An array containing the values to put into the new constant. String elements are * sequences of bytes from the last array dimension. */ - public static Constant create(Scope scope, byte[] data) { - return create(scope, data, String.class); + public static Constant create(Scope scope, byte[] data) { + return create(scope, data, TString.DTYPE); } /** @@ -545,8 +555,8 @@ public static Constant create(Scope scope, byte[] data) { * @param data An array containing the values to put into the new constant. String elements are * sequences of bytes from the last array dimension. */ - public static Constant create(Scope scope, byte[][] data) { - return create(scope, data, String.class); + public static Constant create(Scope scope, byte[][] data) { + return create(scope, data, TString.DTYPE); } /** @@ -556,8 +566,8 @@ public static Constant create(Scope scope, byte[][] data) { * @param data An array containing the values to put into the new constant. String elements are * sequences of bytes from the last array dimension. */ - public static Constant create(Scope scope, byte[][][] data) { - return create(scope, data, String.class); + public static Constant create(Scope scope, byte[][][] data) { + return create(scope, data, TString.DTYPE); } /** @@ -567,8 +577,8 @@ public static Constant create(Scope scope, byte[][][] data) { * @param data An array containing the values to put into the new constant. String elements are * sequences of bytes from the last array dimension. */ - public static Constant create(Scope scope, byte[][][][] data) { - return create(scope, data, String.class); + public static Constant create(Scope scope, byte[][][][] data) { + return create(scope, data, TString.DTYPE); } /** @@ -578,8 +588,8 @@ public static Constant create(Scope scope, byte[][][][] data) { * @param data An array containing the values to put into the new constant. String elements are * sequences of bytes from the last array dimension. */ - public static Constant create(Scope scope, byte[][][][][] data) { - return create(scope, data, String.class); + public static Constant create(Scope scope, byte[][][][][] data) { + return create(scope, data, TString.DTYPE); } /** @@ -589,8 +599,8 @@ public static Constant create(Scope scope, byte[][][][][] data) { * @param data An array containing the values to put into the new constant. String elements are * sequences of bytes from the last array dimension. */ - public static Constant create(Scope scope, byte[][][][][][] data) { - return create(scope, data, String.class); + public static Constant create(Scope scope, byte[][][][][][] data) { + return create(scope, data, TString.DTYPE); } /** @@ -609,9 +619,9 @@ public static Constant create(Scope scope, byte[][][][][][] data) { * @throws IllegalArgumentException If the tensor datatype or shape is not compatible with the * buffer */ - public static Constant create(Scope scope, Class type, long[] shape, ByteBuffer data) { + public static Constant create(Scope scope, DataType type, long[] shape, ByteBuffer data) { try (Tensor value = Tensor.create(type, shape, data)) { - return createWithTensor(scope, value); + return create(scope, value); } } @@ -623,7 +633,7 @@ public static Constant create(Scope scope, Class type, long[] shape, B * provided. For example: * *

{@code
-   * Constant.create(scope, new int[]{{1, 2}, {3, 4}}, Integer.class); // returns a 2x2 integer matrix
+   * Constant.create(scope, new int[]{{1, 2}, {3, 4}}, TInt32.DTYPE); // returns a 2x2 integer matrix
    * }
* * @param scope is a scope used to add the underlying operation. @@ -631,19 +641,26 @@ public static Constant create(Scope scope, Class type, long[] shape, B * @return a constant of type `type` * @see org.tensorflow.Tensor#create(Object) Tensor.create */ - public static Constant create(Scope scope, Object object, Class type) { + public static Constant create(Scope scope, Object object, DataType type) { try (Tensor value = Tensor.create(object, type)) { - return createWithTensor(scope, value); + return create(scope, value); } } - private static Constant createWithTensor(Scope scope, Tensor value) { - return new Constant( + /** + * Create a constant from a Tensor. + * + * @param scope is a scope used to add the underlying operation. + * @param tensor a Tensor holding the constant value + * @return a constant of the same data type as `tensor` + */ + public static Constant create(Scope scope, Tensor tensor) { + return new Constant<>( scope .env() .opBuilder("Const", scope.makeOpName("Const")) - .setAttr("value", value) - .setAttr("dtype", value.dataType()) + .setAttr("value", tensor) + .setAttr("dtype", tensor.dataType()) .build()); } diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/op/core/Gradients.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/op/core/Gradients.java index ab574066837..87766c6dca7 100644 --- a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/op/core/Gradients.java +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/op/core/Gradients.java @@ -18,7 +18,6 @@ import java.util.Arrays; import java.util.Iterator; import java.util.List; - import org.tensorflow.Graph; import org.tensorflow.Operand; import org.tensorflow.Output; diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/op/core/Zeros.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/op/core/Zeros.java index b7c6beb9bcc..1c70a3ef431 100644 --- a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/op/core/Zeros.java +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/op/core/Zeros.java @@ -15,13 +15,14 @@ package org.tensorflow.op.core; import java.nio.ByteBuffer; - import org.tensorflow.DataType; import org.tensorflow.Operand; import org.tensorflow.Output; import org.tensorflow.op.Op; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; +import org.tensorflow.types.family.TType; /** * An operator creating a constant initialized with zeros of the shape given by `dims`. @@ -45,11 +46,11 @@ public class Zeros implements Op, Operand { * @return a constant tensor initialized with zeros * @throws IllegalArgumentException if the tensor type or shape cannot be initialized with zeros. */ - public static Zeros create(Scope scope, Operand dims, Class type) { + public static Zeros create(Scope scope, Operand dims, DataType type) { Scope childScope = scope.withSubScope("Zeros"); // If scope had an op name set, it will prevail on "Zeros" - int zeroSize = DataType.fromClass(type).byteSize(); + int zeroSize = type.byteSize(); if (zeroSize < 0) { - throw new IllegalArgumentException(type.getSimpleName() + " tensors cannot be initialized with zeros"); + throw new IllegalArgumentException(type.name() + " tensors cannot be initialized with zeros"); } Constant zero = Constant.create(childScope.withName("Zero"), type, new long[]{}, ByteBuffer.allocate(zeroSize)); return new Zeros(Fill.create(childScope, dims, zero)); diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TBool.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TBool.java new file mode 100644 index 00000000000..758306c0b34 --- /dev/null +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TBool.java @@ -0,0 +1,75 @@ +package org.tensorflow.types; + +import org.tensorflow.DataType; +import org.tensorflow.Tensor; +import org.tensorflow.internal.buffer.TensorBuffers; +import org.tensorflow.internal.c_api.TF_Tensor; +import org.tensorflow.nio.buffer.BooleanDataBuffer; +import org.tensorflow.nio.buffer.ByteDataBuffer; +import org.tensorflow.nio.buffer.DataBuffers; +import org.tensorflow.nio.buffer.adapter.BooleanDataAdapter; +import org.tensorflow.nio.nd.BooleanNdArray; +import org.tensorflow.nio.nd.NdArray; +import org.tensorflow.nio.nd.Shape; +import org.tensorflow.nio.nd.impl.dense.BooleanDenseNdArray; +import org.tensorflow.types.family.TType; + +public interface TBool extends BooleanNdArray, TType { + + DataType DTYPE = DataType.create("BOOL", 10, 1, TBoolImpl::mapTensor); + + static Tensor scalar(boolean value) { + Tensor t = tensorOfShape(); + t.data().setBoolean(value); + return t; + } + + static Tensor vector(boolean... values) { + Tensor t = tensorOfShape(values.length); + t.data().write(values); + return t; + } + + static Tensor tensor(Shape shape) { + return Tensor.allocate(DTYPE, shape); + } + + static Tensor tensorOfShape(long... dimensionSizes) { + return Tensor.allocate(DTYPE, Shape.make(dimensionSizes)); + } + + static Tensor copyOf(NdArray src) { + Tensor t = Tensor.allocate(DTYPE, src.shape()); + src.copyTo(t.data()); + return t; + } +} + +class TBoolImpl extends BooleanDenseNdArray implements TBool { + + static TBool mapTensor(TF_Tensor nativeTensor, Shape shape) { + return new TBoolImpl(DataBuffers.toBooleans(TensorBuffers.toBytes(nativeTensor), ADAPTER), shape); + } + + private TBoolImpl(BooleanDataBuffer buffer, Shape shape) { + super(buffer, shape); + } + + private static BooleanDataAdapter ADAPTER = new BooleanDataAdapter() { + + @Override + public void writeBoolean(ByteDataBuffer buffer, boolean value, long index) { + buffer.set((byte)(value ? 1 : 0), index); + } + + @Override + public boolean readBoolean(ByteDataBuffer buffer, long index) { + return buffer.get(index) > 0; + } + + @Override + public int sizeInBytes() { + return TBool.DTYPE.byteSize(); + } + }; +} diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TDouble.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TDouble.java new file mode 100644 index 00000000000..6586de80504 --- /dev/null +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TDouble.java @@ -0,0 +1,54 @@ +package org.tensorflow.types; + +import org.tensorflow.DataType; +import org.tensorflow.Tensor; +import org.tensorflow.internal.buffer.TensorBuffers; +import org.tensorflow.internal.c_api.TF_Tensor; +import org.tensorflow.nio.buffer.DoubleDataBuffer; +import org.tensorflow.nio.nd.DoubleNdArray; +import org.tensorflow.nio.nd.NdArray; +import org.tensorflow.nio.nd.Shape; +import org.tensorflow.nio.nd.impl.dense.DoubleDenseNdArray; +import org.tensorflow.types.family.TDecimal; + +public interface TDouble extends DoubleNdArray, TDecimal { + + DataType DTYPE = DataType.create("DOUBLE", 2, 8, TDoubleImpl::mapTensor); + + static Tensor scalar(double value) { + Tensor t = tensorOfShape(); + t.data().setDouble(value); + return t; + } + + static Tensor vector(double... values) { + Tensor t = tensorOfShape(values.length); + t.data().write(values); + return t; + } + + static Tensor tensor(Shape shape) { + return Tensor.allocate(DTYPE, shape); + } + + static Tensor tensorOfShape(long... dimensionSizes) { + return Tensor.allocate(DTYPE, Shape.make(dimensionSizes)); + } + + static Tensor copyOf(NdArray src) { + Tensor t = Tensor.allocate(DTYPE, src.shape()); + src.copyTo(t.data()); + return t; + } +} + +class TDoubleImpl extends DoubleDenseNdArray implements TDouble { + + static TDouble mapTensor(TF_Tensor nativeTensor, Shape shape) { + return new TDoubleImpl(TensorBuffers.toDoubles(nativeTensor), shape); + } + + private TDoubleImpl(DoubleDataBuffer buffer, Shape shape) { + super(buffer, shape); + } +} diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TFloat.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TFloat.java new file mode 100644 index 00000000000..fe7bdcc78a6 --- /dev/null +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TFloat.java @@ -0,0 +1,55 @@ +package org.tensorflow.types; + +import org.tensorflow.DataType; +import org.tensorflow.Tensor; +import org.tensorflow.internal.buffer.TensorBuffers; +import org.tensorflow.internal.c_api.TF_Tensor; +import org.tensorflow.nio.buffer.FloatDataBuffer; +import org.tensorflow.nio.nd.FloatNdArray; +import org.tensorflow.nio.nd.NdArray; +import org.tensorflow.nio.nd.Shape; +import org.tensorflow.nio.nd.impl.dense.FloatDenseNdArray; +import org.tensorflow.types.family.TDecimal; + +public interface TFloat extends FloatNdArray, TDecimal { + + DataType DTYPE = DataType.create("FLOAT", 1, 4, TFloatImpl::mapTensor); + + static Tensor scalar(float value) { + Tensor t = tensorOfShape(); + t.data().setFloat(value); + return t; + } + + static Tensor vector(float... values) { + Tensor t = tensorOfShape(values.length); + t.data().write(values); + return t; + } + + static Tensor tensor(Shape shape) { + return Tensor.allocate(DTYPE, shape); + } + + static Tensor tensorOfShape(long... dimensionSizes) { + return Tensor.allocate(DTYPE, Shape.make(dimensionSizes)); + } + + static Tensor copyOf(NdArray src) { + Tensor t = Tensor.allocate(DTYPE, src.shape()); + src.copyTo(t.data()); + return t; + } +} + +class TFloatImpl extends FloatDenseNdArray implements TFloat { + + static TFloat mapTensor(TF_Tensor nativeTensor, Shape shape) { + return new TFloatImpl(TensorBuffers.toFloats(nativeTensor), shape); + } + + private TFloatImpl(FloatDataBuffer buffer, Shape shape) { + super(buffer, shape); + } +} + diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TInt32.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TInt32.java new file mode 100644 index 00000000000..104bb6598b5 --- /dev/null +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TInt32.java @@ -0,0 +1,54 @@ +package org.tensorflow.types; + +import org.tensorflow.DataType; +import org.tensorflow.Tensor; +import org.tensorflow.internal.buffer.TensorBuffers; +import org.tensorflow.internal.c_api.TF_Tensor; +import org.tensorflow.nio.buffer.IntDataBuffer; +import org.tensorflow.nio.nd.IntNdArray; +import org.tensorflow.nio.nd.NdArray; +import org.tensorflow.nio.nd.Shape; +import org.tensorflow.nio.nd.impl.dense.IntDenseNdArray; +import org.tensorflow.types.family.TNumber; + +public interface TInt32 extends IntNdArray, TNumber { + + DataType DTYPE = DataType.create("INT32", 3, 4, TInt32Impl::mapTensor); + + static Tensor scalar(int value) { + Tensor t = tensorOfShape(); + t.data().setInt(value); + return t; + } + + static Tensor vector(int... values) { + Tensor t = tensorOfShape(values.length); + t.data().write(values); + return t; + } + + static Tensor tensor(Shape shape) { + return Tensor.allocate(DTYPE, shape); + } + + static Tensor tensorOfShape(long... dimensionSizes) { + return Tensor.allocate(DTYPE, Shape.make(dimensionSizes)); + } + + static Tensor copyOf(NdArray src) { + Tensor t = Tensor.allocate(DTYPE, src.shape()); + src.copyTo(t.data()); + return t; + } +} + +class TInt32Impl extends IntDenseNdArray implements TInt32 { + + static TInt32 mapTensor(TF_Tensor nativeTensor, Shape shape) { + return new TInt32Impl(TensorBuffers.toInts(nativeTensor), shape); + } + + private TInt32Impl(IntDataBuffer buffer, Shape shape) { + super(buffer, shape); + } +} diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TInt64.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TInt64.java new file mode 100644 index 00000000000..5196d11e93e --- /dev/null +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TInt64.java @@ -0,0 +1,54 @@ +package org.tensorflow.types; + +import org.tensorflow.DataType; +import org.tensorflow.Tensor; +import org.tensorflow.internal.buffer.TensorBuffers; +import org.tensorflow.internal.c_api.TF_Tensor; +import org.tensorflow.nio.buffer.LongDataBuffer; +import org.tensorflow.nio.nd.LongNdArray; +import org.tensorflow.nio.nd.NdArray; +import org.tensorflow.nio.nd.Shape; +import org.tensorflow.nio.nd.impl.dense.LongDenseNdArray; +import org.tensorflow.types.family.TNumber; + +public interface TInt64 extends LongNdArray, TNumber { + + DataType DTYPE = DataType.create("INT64", 9, 8, TInt64Impl::mapTensor); + + static Tensor scalar(long value) { + Tensor t = tensorOfShape(); + t.data().setLong(value); + return t; + } + + static Tensor vector(long... values) { + Tensor t = tensorOfShape(values.length); + t.data().write(values); + return t; + } + + static Tensor tensor(Shape shape) { + return Tensor.allocate(DTYPE, shape); + } + + static Tensor tensorOfShape(long... dimensionSizes) { + return Tensor.allocate(DTYPE, Shape.make(dimensionSizes)); + } + + static Tensor copyOf(NdArray src) { + Tensor t = Tensor.allocate(DTYPE, src.shape()); + src.copyTo(t.data()); + return t; + } +} + +class TInt64Impl extends LongDenseNdArray implements TInt64 { + + static TInt64 mapTensor(TF_Tensor nativeTensor, Shape shape) { + return new TInt64Impl(TensorBuffers.toLongs(nativeTensor), shape); + } + + private TInt64Impl(LongDataBuffer buffer, Shape shape) { + super(buffer, shape); + } +} diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TString.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TString.java new file mode 100644 index 00000000000..e2cf58cd29b --- /dev/null +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TString.java @@ -0,0 +1,70 @@ +package org.tensorflow.types; + +import com.google.common.base.Charsets; +import java.util.concurrent.atomic.AtomicLong; +import org.tensorflow.DataType; +import org.tensorflow.Tensor; +import org.tensorflow.internal.buffer.StringTensorBuffer; +import org.tensorflow.internal.buffer.TensorBuffers; +import org.tensorflow.internal.c_api.TF_Tensor; +import org.tensorflow.nio.buffer.DataBuffer; +import org.tensorflow.nio.nd.NdArray; +import org.tensorflow.nio.nd.NdArrays; +import org.tensorflow.nio.nd.Shape; +import org.tensorflow.nio.nd.impl.dense.DenseNdArray; +import org.tensorflow.types.family.TType; + +public interface TString extends NdArray, TType { + + DataType DTYPE = DataType.create("STRING", 7, -1, TStringImpl::mapTensor); + + static Tensor scalar(String value) { + return copyOf(NdArrays.of(String.class, Shape.scalar()).setValue(value)); + } + + static Tensor vector(String... values) { + return copyOf(NdArrays.of(String.class, Shape.make(values.length)).write(values)); + } + + static Tensor copyOf(NdArray src) { + return TStringImpl.createTensor(src); + } +} + +class TStringImpl extends DenseNdArray implements TString { + + static Tensor createTensor(NdArray src) { + + // First, compute the capacity of the tensor to create + AtomicLong size = new AtomicLong(src.size() * 8); // add space to store 64-bits offsets + src.scalars().forEach(s -> { + byte[] bytes = s.getValue().getBytes(Charsets.UTF_8); + size.addAndGet(bytes.length + varintLength(bytes.length)); // add space to store value + length + }); + + // Allocate the tensor of the right capacity and init its data from source array + Tensor tensor = Tensor.allocate(TString.DTYPE, src.shape(), size.get()); + StringTensorBuffer buffer = (StringTensorBuffer)(((TStringImpl)tensor.data()).buffer()); + buffer.init(src); + + return tensor; + } + + static TString mapTensor(TF_Tensor nativeTensor, Shape shape) { + return new TStringImpl(TensorBuffers.toStrings(nativeTensor, shape.size()), shape); + } + + private TStringImpl(DataBuffer buffer, Shape shape) { + super(buffer, shape); + } + + private static int varintLength(int length) { + int len = 1; + while (length >= 0x80) { + length >>= 7; + len++; + } + return len; + } +} + diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TUInt8.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TUInt8.java new file mode 100644 index 00000000000..6cce484a784 --- /dev/null +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TUInt8.java @@ -0,0 +1,54 @@ +package org.tensorflow.types; + +import org.tensorflow.DataType; +import org.tensorflow.Tensor; +import org.tensorflow.internal.buffer.TensorBuffers; +import org.tensorflow.internal.c_api.TF_Tensor; +import org.tensorflow.nio.buffer.ByteDataBuffer; +import org.tensorflow.nio.nd.ByteNdArray; +import org.tensorflow.nio.nd.NdArray; +import org.tensorflow.nio.nd.Shape; +import org.tensorflow.nio.nd.impl.dense.ByteDenseNdArray; +import org.tensorflow.types.family.TNumber; + +public interface TUInt8 extends ByteNdArray, TNumber { + + DataType DTYPE = DataType.create("UINT8", 4, 1, TUInt8Impl::mapTensor); + + static Tensor scalar(byte value) { + Tensor t = tensorOfShape(); + t.data().setByte(value); + return t; + } + + static Tensor vector(byte... values) { + Tensor t = tensorOfShape(values.length); + t.data().write(values); + return t; + } + + static Tensor tensor(Shape shape) { + return Tensor.allocate(DTYPE, shape); + } + + static Tensor tensorOfShape(long... dimensionSizes) { + return Tensor.allocate(DTYPE, Shape.make(dimensionSizes)); + } + + static Tensor copyOf(NdArray src) { + Tensor t = Tensor.allocate(DTYPE, src.shape()); + src.copyTo(t.data()); + return t; + } +} + +class TUInt8Impl extends ByteDenseNdArray implements TUInt8 { + + static TUInt8 mapTensor(TF_Tensor nativeTensor, Shape shape) { + return new TUInt8Impl(TensorBuffers.toBytes(nativeTensor), shape); + } + + private TUInt8Impl(ByteDataBuffer buffer, Shape shape) { + super(buffer, shape); + } +} diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/UInt8.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/UInt8.java deleted file mode 100644 index 824f7fbe32f..00000000000 --- a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/UInt8.java +++ /dev/null @@ -1,48 +0,0 @@ -/* Copyright 2017 The TensorFlow Authors. All Rights Reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -==============================================================================*/ - -package org.tensorflow.types; - -/** Represents an 8-bit unsigned integer. */ -public class UInt8 extends Number { - - private static final long serialVersionUID = 1L; - - // This class is only used for generic parameterization and is not instantiable. Thus, - // it is safe to implement the Number abstract methods with all zeros, as they will - // never be invoked. - - @Override - public double doubleValue() { - return 0.0; - } - - @Override - public float floatValue() { - return 0.0f; - } - - @Override - public int intValue() { - return 0; - } - - @Override - public long longValue() { - return 0L; - } - - private UInt8() {} -} diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/family/TDecimal.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/family/TDecimal.java new file mode 100644 index 00000000000..0d94b66c749 --- /dev/null +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/family/TDecimal.java @@ -0,0 +1,5 @@ +package org.tensorflow.types.family; + +public interface TDecimal extends TNumber { + +} diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/family/TNumber.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/family/TNumber.java new file mode 100644 index 00000000000..c2704fa8302 --- /dev/null +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/family/TNumber.java @@ -0,0 +1,5 @@ +package org.tensorflow.types.family; + +public interface TNumber extends TType { + +} diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/family/TType.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/family/TType.java new file mode 100644 index 00000000000..a194297c2cf --- /dev/null +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/family/TType.java @@ -0,0 +1,3 @@ +package org.tensorflow.types.family; + +public interface TType {} diff --git a/tensorflow-core/tensorflow-core-api/src/main/native/tensor_buffers_jni.cc b/tensorflow-core/tensorflow-core-api/src/main/native/tensor_buffers_jni.cc new file mode 100644 index 00000000000..8888cba93d2 --- /dev/null +++ b/tensorflow-core/tensorflow-core-api/src/main/native/tensor_buffers_jni.cc @@ -0,0 +1,42 @@ +/* Copyright 2019 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +#include "src/main/native/tensor_buffers_jni.h" + +#include "tensorflow/c/c_api.h" +#include "src/main/native/exception_jni.h" + +namespace { + +TF_Tensor* requireHandle(JNIEnv* env, jlong handle) { + if (handle == 0) { + throwException(env, kNullPointerException, "close() was called on the Tensor"); + return nullptr; + } + return reinterpret_cast(handle); +} + +} // namespace + +JNIEXPORT jobject JNICALL Java_org_tensorflow_internal_buffer_TensorBuffers_directBuffer( + JNIEnv* env, jclass clazz, jlong handle) { + + TF_Tensor* t = requireHandle(env, handle); + if (t == nullptr) return nullptr; + void* data = TF_TensorData(t); + const size_t sz = TF_TensorByteSize(t); + + return env->NewDirectByteBuffer(data, static_cast(sz)); +} diff --git a/tensorflow-core/tensorflow-core-api/src/main/native/tensor_buffers_jni.h b/tensorflow-core/tensorflow-core-api/src/main/native/tensor_buffers_jni.h new file mode 100644 index 00000000000..a06897aaa4e --- /dev/null +++ b/tensorflow-core/tensorflow-core-api/src/main/native/tensor_buffers_jni.h @@ -0,0 +1,36 @@ +/* Copyright 2016 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +#ifndef TENSORFLOW_JAVA_SRC_MAIN_NATIVE_TENSOR_BUFFERS_JNI_H_ +#define TENSORFLOW_JAVA_SRC_MAIN_NATIVE_TENSOR_BUFFERS_JNI_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * Class: org_tensorflow_internal_buffer_TensorBuffers + * Method: directBuffer + * Signature: (J)Ljava/nio/ByteBuffer; + */ +JNIEXPORT jobject JNICALL Java_org_tensorflow_internal_buffer_TensorBuffers_directBuffer( + JNIEnv *, jclass, jlong); + +#ifdef __cplusplus +} // extern "C" +#endif // __cplusplus +#endif // TENSORFLOW_JAVA_SRC_MAIN_NATIVE_TENSOR_BUFFERS_JNI_H_ diff --git a/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/EagerOperationBuilderTest.java b/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/EagerOperationBuilderTest.java index 0f00a26dba4..fbdc19b6662 100644 --- a/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/EagerOperationBuilderTest.java +++ b/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/EagerOperationBuilderTest.java @@ -20,6 +20,9 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; +import org.tensorflow.nio.nd.Shape; +import org.tensorflow.types.TFloat; +import org.tensorflow.types.TInt32; /** Unit tests for {@link EagerOperationBuilder} class. */ @RunWith(JUnit4.class) @@ -44,7 +47,7 @@ public void failToBuildOpIfSessionIsClosed() { opBuilder = new EagerOperationBuilder(session, "Empty", "empty"); } try { - opBuilder.setAttr("dtype", DataType.FLOAT); + opBuilder.setAttr("dtype", TFloat.DTYPE); fail(); } catch (IllegalStateException e) { // expected @@ -89,9 +92,9 @@ public void setAttrs() { // types that aren't inferred from the input arguments. try (EagerSession session = EagerSession.create()) { // dtype, tensor attributes. - try (Tensor t = Tensors.create(1)) { + try (Tensor t = Tensors.create(1)) { opBuilder(session, "Const", "DataTypeAndTensor") - .setAttr("dtype", DataType.INT32) + .setAttr("dtype", TInt32.DTYPE) .setAttr("value", t) .build(); } @@ -99,7 +102,7 @@ public void setAttrs() { opBuilder(session, "RandomUniform", "DataTypeAndInt") .addInput(TestUtil.constant(session, "RandomUniformShape", new int[] {1})) .setAttr("seed", 10) - .setAttr("dtype", DataType.FLOAT) + .setAttr("dtype", TFloat.DTYPE) .build(); // list(int), string opBuilder(session, "MaxPool", "IntListAndString") @@ -120,7 +123,7 @@ public void setAttrs() { .build(); // list(shape) opBuilder(session, "FIFOQueue", "queue") - .setAttr("component_types", new DataType[] {DataType.INT32, DataType.INT32}) + .setAttr("component_types", new DataType[] {TInt32.DTYPE, TInt32.DTYPE}) .setAttr("shapes", new Shape[] {Shape.make(2, 2), Shape.make(2, 2, 2)}) .build(); // bool diff --git a/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/EagerOperationTest.java b/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/EagerOperationTest.java index 228676f28c3..1bb2cfe3e49 100644 --- a/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/EagerOperationTest.java +++ b/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/EagerOperationTest.java @@ -21,6 +21,8 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; +import org.tensorflow.types.TFloat; +import org.tensorflow.types.TInt32; /** Unit tests for {@link EagerOperation} class. */ @RunWith(JUnit4.class) @@ -41,15 +43,15 @@ public void failToCreateIfSessionIsClosed() { @Test public void outputDataTypeAndShape() { try (EagerSession session = EagerSession.create(); - Tensor t = Tensors.create(new int[2][3])) { + Tensor t = Tensors.create(new int[2][3])) { EagerOperation op = opBuilder(session, "Const", "OutputAttrs") - .setAttr("dtype", DataType.INT32) + .setAttr("dtype", TInt32.DTYPE) .setAttr("value", t) .build(); - assertEquals(DataType.INT32, op.dtype(0)); - assertEquals(2, op.shape(0)[0]); - assertEquals(3, op.shape(0)[1]); + assertEquals(TInt32.DTYPE, op.dtype(0)); + assertEquals(2, op.shape(0).size(0)); + assertEquals(3, op.shape(0).size(1)); } } @@ -65,16 +67,16 @@ public void outputTensor() { // Validate that we retrieve the right shape and datatype from the tensor // that has been resolved - assertEquals(0, add.shape(0).length); - assertEquals(DataType.INT32, add.dtype(0)); + assertEquals(0, add.shape(0).numDimensions()); + assertEquals(TInt32.DTYPE, add.dtype(0)); } } @Test public void inputAndOutputListLengths() { try (EagerSession session = EagerSession.create()) { - Output c1 = TestUtil.constant(session, "Const1", new float[] {1f, 2f}); - Output c2 = TestUtil.constant(session, "Const2", new float[] {3f, 4f}); + Output c1 = TestUtil.constant(session, "Const1", new float[] {1f, 2f}); + Output c2 = TestUtil.constant(session, "Const2", new float[] {3f, 4f}); EagerOperation acc = opBuilder(session, "AddN", "InputListLength") @@ -115,7 +117,7 @@ public void numOutputs() { opBuilder(session, "UniqueWithCountsV2", "unq") .addInput(TestUtil.constant(session, "Const1", new int[] {1, 2, 1})) .addInput(TestUtil.constant(session, "Axis", new int[] {0})) - .setAttr("out_idx", DataType.INT32) + .setAttr("out_idx", TInt32.DTYPE) .build(); assertEquals(3, op.numOutputs()); } diff --git a/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/GraphOperationBuilderTest.java b/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/GraphOperationBuilderTest.java index a0fbe80ed30..da07ec5c599 100644 --- a/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/GraphOperationBuilderTest.java +++ b/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/GraphOperationBuilderTest.java @@ -23,6 +23,10 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; +import org.tensorflow.nio.nd.Shape; +import org.tensorflow.types.TBool; +import org.tensorflow.types.TFloat; +import org.tensorflow.types.TInt32; /** Unit tests for {@link org.tensorflow.GraphOperationBuilder}. */ @RunWith(JUnit4.class) @@ -48,7 +52,7 @@ public void failWhenMixingOperationsOnDifferentGraphs() { @Test public void failOnUseAfterBuild() { try (Graph g = new Graph(); - Tensor t = Tensors.create(1)) { + Tensor t = Tensors.create(1)) { OperationBuilder b = g.opBuilder("Const", "Const").setAttr("dtype", t.dataType()).setAttr("value", t); b.build(); @@ -64,7 +68,7 @@ public void failOnUseAfterBuild() { public void failOnUseAfterGraphClose() { OperationBuilder b = null; try (Graph g = new Graph(); - Tensor t = Tensors.create(1)) { + Tensor t = Tensors.create(1)) { b = g.opBuilder("Const", "Const").setAttr("dtype", t.dataType()).setAttr("value", t); } try { @@ -85,9 +89,9 @@ public void setAttr() { // types that aren't inferred from the input arguments. try (Graph g = new Graph()) { // dtype, tensor attributes. - try (Tensor t = Tensors.create(1)) { + try (Tensor t = Tensors.create(1)) { g.opBuilder("Const", "DataTypeAndTensor") - .setAttr("dtype", DataType.INT32) + .setAttr("dtype", TInt32.DTYPE) .setAttr("value", t) .build() .output(0); @@ -103,7 +107,7 @@ public void setAttr() { g.opBuilder("RandomUniform", "Int") .addInput(TestUtil.constant(g, "RandomUniformShape", new int[] {1})) .setAttr("seed", 10) - .setAttr("dtype", DataType.FLOAT) + .setAttr("dtype", TFloat.DTYPE) .build(); assertTrue(hasNode(g, "Int")); // list(int) @@ -129,23 +133,23 @@ public void setAttrShape() { try (Graph g = new Graph()) { Output n = g.opBuilder("Placeholder", "unknown") - .setAttr("dtype", DataType.FLOAT) + .setAttr("dtype", TFloat.DTYPE) .setAttr("shape", Shape.unknown()) .build() .output(0); assertEquals(-1, n.shape().numDimensions()); - assertEquals(DataType.FLOAT, n.dataType()); + assertEquals(TFloat.DTYPE, n.dataType()); n = g.opBuilder("Placeholder", "batch_of_vectors") - .setAttr("dtype", DataType.FLOAT) + .setAttr("dtype", TFloat.DTYPE) .setAttr("shape", Shape.make(-1, 784)) .build() .output(0); assertEquals(2, n.shape().numDimensions()); assertEquals(-1, n.shape().size(0)); assertEquals(784, n.shape().size(1)); - assertEquals(DataType.FLOAT, n.dataType()); + assertEquals(TFloat.DTYPE, n.dataType()); } } @@ -166,9 +170,9 @@ public void setAttrShapeList() { public void addControlInput() { try (Graph g = new Graph(); Session s = new Session(g); - Tensor yes = Tensors.create(true); - Tensor no = Tensors.create(false)) { - Output placeholder = TestUtil.placeholder(g, "boolean", Boolean.class); + Tensor yes = Tensors.create(true); + Tensor no = Tensors.create(false)) { + Output placeholder = TestUtil.placeholder(g, "boolean", TBool.DTYPE); GraphOperation check = g.opBuilder("Assert", "assert") .addInput(placeholder) @@ -195,7 +199,7 @@ private static void testSetAttrShapeList(Shape[] shapes) { int[][] matrix = new int[][] {{0, 0}, {0, 0}}; Output queue = g.opBuilder("FIFOQueue", "queue") - .setAttr("component_types", new DataType[] {DataType.INT32, DataType.INT32}) + .setAttr("component_types", new DataType[] {TInt32.DTYPE, TInt32.DTYPE}) .setAttr("shapes", shapes) .build() .output(0); diff --git a/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/GraphTest.java b/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/GraphTest.java index f0428a1ae6c..a76aab7b873 100644 --- a/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/GraphTest.java +++ b/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/GraphTest.java @@ -25,6 +25,8 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; +import org.tensorflow.types.TFloat; +import org.tensorflow.types.TInt32; /** Unit tests for {@link org.tensorflow.Graph}. */ @RunWith(JUnit4.class) @@ -135,25 +137,25 @@ public void addGradientsToGraph() { try (Graph g = new Graph(); Session s = new Session(g)) { - Output x1 = TestUtil.placeholder(g, "x1", Float.class); - Output x2 = TestUtil.placeholder(g, "x2", Float.class); - Output y0 = TestUtil.square(g, "y0", x1); - Output y1 = TestUtil.square(g, "y1", y0); - Output y2 = TestUtil.addN(g, y0, x2); + Output x1 = TestUtil.placeholder(g, "x1", TFloat.DTYPE); + Output x2 = TestUtil.placeholder(g, "x2", TFloat.DTYPE); + Output y0 = TestUtil.square(g, "y0", x1); + Output y1 = TestUtil.square(g, "y1", y0); + Output y2 = TestUtil.addN(g, y0, x2); Output[] grads0 = g.addGradients(y1, toArray(x1)); assertNotNull(grads0); assertEquals(1, grads0.length); - assertEquals(DataType.FLOAT, grads0[0].dataType()); + assertEquals(TFloat.DTYPE, grads0[0].dataType()); Output[] grads1 = g.addGradients(y2, toArray(x1, x2)); assertNotNull(grads1); assertEquals(2, grads1.length); - assertEquals(DataType.FLOAT, grads1[0].dataType()); - assertEquals(DataType.FLOAT, grads1[1].dataType()); + assertEquals(TFloat.DTYPE, grads1[0].dataType()); + assertEquals(TFloat.DTYPE, grads1[1].dataType()); - try (Tensor c1 = Tensors.create(3.0f); - Tensor c2 = Tensors.create(2.0f); + try (Tensor c1 = Tensors.create(3.0f); + Tensor c2 = Tensors.create(2.0f); TestUtil.AutoCloseableList> outputs = new TestUtil.AutoCloseableList<>( s.runner() .feed(x1, c1) @@ -176,16 +178,16 @@ public void addGradientSumsToGraph() { try (Graph g = new Graph(); Session s = new Session(g)) { - Output x = TestUtil.placeholder(g, "x", Float.class); - Output y0 = TestUtil.square(g, "y0", x); - Output y1 = TestUtil.square(g, "y1", y0); + Output x = TestUtil.placeholder(g, "x", TFloat.DTYPE); + Output y0 = TestUtil.square(g, "y0", x); + Output y1 = TestUtil.square(g, "y1", y0); Output[] grad = g.addGradients(null, toArray(y0, y1), toArray(x), null); assertNotNull(grad); assertEquals(1, grad.length); - assertEquals(DataType.FLOAT, grad[0].dataType()); + assertEquals(TFloat.DTYPE, grad[0].dataType()); - try (Tensor c = Tensors.create(3.0f); + try (Tensor c = Tensors.create(3.0f); Tensor output = s.runner() .feed(x, c) .fetch(grad[0]) @@ -202,21 +204,21 @@ public void addGradientsWithInitialValuesToGraph() { try (Graph g = new Graph(); Session s = new Session(g)) { - Output x = TestUtil.placeholder(g, "x", Float.class); - Output y0 = TestUtil.square(g, "y0", x); - Output y1 = TestUtil.square(g, "y1", y0); + Output x = TestUtil.placeholder(g, "x", TFloat.DTYPE); + Output y0 = TestUtil.square(g, "y0", x); + Output y1 = TestUtil.square(g, "y1", y0); Output[] grad0 = g.addGradients(y1, toArray(y0)); assertNotNull(grad0); assertEquals(1, grad0.length); - assertEquals(DataType.FLOAT, grad0[0].dataType()); + assertEquals(TFloat.DTYPE, grad0[0].dataType()); Output[] grad1 = g.addGradients(null, toArray(y0), toArray(x), toArray(grad0[0])); assertNotNull(grad1); assertEquals(1, grad1.length); - assertEquals(DataType.FLOAT, grad1[0].dataType()); + assertEquals(TFloat.DTYPE, grad1[0].dataType()); - try (Tensor c = Tensors.create(3.0f); + try (Tensor c = Tensors.create(3.0f); Tensor output = s.runner() .feed(x, c) .fetch(grad1[0]) @@ -232,8 +234,8 @@ public void addGradientsWithInitialValuesToGraph() { public void validateGradientsNames() { try (Graph g = new Graph()) { - Output x = TestUtil.placeholder(g, "x", Float.class); - Output y0 = TestUtil.square(g, "y0", x); + Output x = TestUtil.placeholder(g, "x", TFloat.DTYPE); + Output y0 = TestUtil.square(g, "y0", x); Output[] grad0 = g.addGradients(null, toArray(y0), toArray(x), null); assertTrue(grad0[0].op().name().startsWith("gradients/")); @@ -260,7 +262,7 @@ public void buildWhileLoopSingleInput() { try (Graph g = new Graph(); Session s = new Session(g)) { - Output input = TestUtil.placeholder(g, "input1", Integer.class); + Output input = TestUtil.placeholder(g, "input1", TInt32.DTYPE); // could write this using lambda after Java 8 Graph.WhileSubgraphBuilder condGraphBuilder = @@ -295,7 +297,7 @@ public void buildSubgraph( Output[] loopOutputs = g.whileLoop(toArray(input), condGraphBuilder, bodyGraphBuilder, "test_loop"); - try (Tensor c = Tensors.create(2); + try (Tensor c = Tensors.create(2); Tensor output = s.runner().feed(input, c).fetch(loopOutputs[0]).run().get(0)) { assertEquals(16, output.intValue()); // ((2^2)^2) @@ -308,8 +310,8 @@ public void buildWhileLoopMultipleInputs() { try (Graph g = new Graph(); Session s = new Session(g)) { - Output input1 = TestUtil.placeholder(g, "input1", Integer.class); - Output input2 = TestUtil.placeholder(g, "input2", Integer.class); + Output input1 = TestUtil.placeholder(g, "input1", TInt32.DTYPE); + Output input2 = TestUtil.placeholder(g, "input2", TInt32.DTYPE); Output[] inputs = toArray(input1, input2); // could write this using lambda after Java 8 @@ -345,8 +347,8 @@ public void buildSubgraph( Output[] loopOutputs = g.whileLoop(inputs, condGraphBuilder, bodyGraphBuilder, "test_loop"); - try (Tensor c1 = Tensors.create(2); - Tensor c2 = Tensors.create(5); + try (Tensor c1 = Tensors.create(2); + Tensor c2 = Tensors.create(5); TestUtil.AutoCloseableList> outputs = new TestUtil.AutoCloseableList<>( s.runner() diff --git a/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/SessionTest.java b/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/SessionTest.java index 7d5980bcded..cb6da43ae4d 100644 --- a/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/SessionTest.java +++ b/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/SessionTest.java @@ -23,6 +23,7 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; +import org.tensorflow.types.TInt32; /** Unit tests for {@link org.tensorflow.Session}. */ @RunWith(JUnit4.class) @@ -33,9 +34,9 @@ public void runUsingOperationNames() { try (Graph g = new Graph(); Session s = new Session(g)) { TestUtil.transpose_A_times_X(g, new int[][] {{2}, {3}}); - try (Tensor x = Tensors.create(new int[][] {{5}, {7}}); + try (Tensor x = Tensors.create(new int[][] {{5}, {7}}); TestUtil.AutoCloseableList> outputs = - new TestUtil.AutoCloseableList>(s.runner().feed("X", x).fetch("Y").run())) { + new TestUtil.AutoCloseableList<>(s.runner().feed("X", x).fetch("Y").run())) { assertEquals(1, outputs.size()); final int[][] expected = {{31}}; assertArrayEquals(expected, outputs.get(0).copyTo(new int[1][1])); @@ -48,11 +49,11 @@ public void runUsingOperationHandles() { try (Graph g = new Graph(); Session s = new Session(g)) { TestUtil.transpose_A_times_X(g, new int[][] {{2}, {3}}); - Output feed = g.operation("X").output(0); - Output fetch = g.operation("Y").output(0); - try (Tensor x = Tensors.create(new int[][] {{5}, {7}}); + Output feed = g.operation("X").output(0); + Output fetch = g.operation("Y").output(0); + try (Tensor x = Tensors.create(new int[][] {{5}, {7}}); TestUtil.AutoCloseableList> outputs = - new TestUtil.AutoCloseableList>(s.runner().feed(feed, x).fetch(fetch).run())) { + new TestUtil.AutoCloseableList<>(s.runner().feed(feed, x).fetch(fetch).run())) { assertEquals(1, outputs.size()); final int[][] expected = {{31}}; assertArrayEquals(expected, outputs.get(0).copyTo(new int[1][1])); @@ -76,21 +77,21 @@ public void runUsingColonSeparatedNames() { .build() .output(0); // Fetch using colon separated names. - try (Tensor fetched = - s.runner().fetch("Split:1").run().get(0).expect(Integer.class)) { + try (Tensor fetched = + s.runner().fetch("Split:1").run().get(0).expect(TInt32.DTYPE)) { final int[] expected = {3, 4}; assertArrayEquals(expected, fetched.copyTo(new int[2])); } // Feed using colon separated names. - try (Tensor fed = Tensors.create(new int[] {4, 3, 2, 1}); - Tensor fetched = + try (Tensor fed = Tensors.create(new int[] {4, 3, 2, 1}); + Tensor fetched = s.runner() .feed("Split:0", fed) .feed("Split:1", fed) .fetch("Add") .run() .get(0) - .expect(Integer.class)) { + .expect(TInt32.DTYPE)) { final int[] expected = {8, 6, 4, 2}; assertArrayEquals(expected, fetched.copyTo(new int[4])); } @@ -102,7 +103,7 @@ public void runWithMetadata() { try (Graph g = new Graph(); Session s = new Session(g)) { TestUtil.transpose_A_times_X(g, new int[][] {{2}, {3}}); - try (Tensor x = Tensors.create(new int[][] {{5}, {7}})) { + try (Tensor x = Tensors.create(new int[][] {{5}, {7}})) { Session.Run result = s.runner() .feed("X", x) @@ -110,7 +111,7 @@ public void runWithMetadata() { .setOptions(fullTraceRunOptions()) .runAndFetchMetadata(); // Sanity check on outputs. - TestUtil.AutoCloseableList> outputs = new TestUtil.AutoCloseableList>(result.outputs); + TestUtil.AutoCloseableList> outputs = new TestUtil.AutoCloseableList<>(result.outputs); assertEquals(1, outputs.size()); final int[][] expected = {{31}}; assertArrayEquals(expected, outputs.get(0).copyTo(new int[1][1])); @@ -134,7 +135,7 @@ public void runMultipleOutputs() { TestUtil.constant(g, "c1", 2718); TestUtil.constant(g, "c2", 31415); TestUtil.AutoCloseableList> outputs = - new TestUtil.AutoCloseableList>(s.runner().fetch("c2").fetch("c1").run()); + new TestUtil.AutoCloseableList<>(s.runner().fetch("c2").fetch("c1").run()); assertEquals(2, outputs.size()); assertEquals(31415, outputs.get(0).intValue()); assertEquals(2718, outputs.get(1).intValue()); diff --git a/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/ShapeTest.java b/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/ShapeTest.java deleted file mode 100644 index 313c09e1e40..00000000000 --- a/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/ShapeTest.java +++ /dev/null @@ -1,104 +0,0 @@ -/* Copyright 2016 The TensorFlow Authors. All Rights Reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -==============================================================================*/ - -package org.tensorflow; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotEquals; - -import org.junit.Test; -import org.junit.runner.RunWith; -import org.junit.runners.JUnit4; - -/** Unit tests for {@link Shape}. */ -@RunWith(JUnit4.class) -public class ShapeTest { - - @Test - public void unknown() { - assertEquals(-1, Shape.unknown().numDimensions()); - assertEquals("", Shape.unknown().toString()); - } - - @Test - public void scalar() { - assertEquals(0, Shape.scalar().numDimensions()); - assertEquals("[]", Shape.scalar().toString()); - } - - @Test - public void make() { - Shape s = Shape.make(2); - assertEquals(1, s.numDimensions()); - assertEquals(2, s.size(0)); - assertEquals("[2]", s.toString()); - - s = Shape.make(2, 3); - assertEquals(2, s.numDimensions()); - assertEquals(2, s.size(0)); - assertEquals(3, s.size(1)); - assertEquals("[2, 3]", s.toString()); - - s = Shape.make(-1, 2, 3); - assertEquals(3, s.numDimensions()); - assertEquals(-1, s.size(0)); - assertEquals(2, s.size(1)); - assertEquals(3, s.size(2)); - assertEquals("[?, 2, 3]", s.toString()); - } - - @Test - public void nodesInAGraph() { - try (Graph g = new Graph()) { - Output n = TestUtil.placeholder(g, "feed", Float.class); - assertEquals(-1, n.shape().numDimensions()); - - n = TestUtil.constant(g, "scalar", 3); - assertEquals(0, n.shape().numDimensions()); - - n = TestUtil.constant(g, "vector", new float[2]); - assertEquals(1, n.shape().numDimensions()); - assertEquals(2, n.shape().size(0)); - - n = TestUtil.constant(g, "matrix", new float[4][5]); - assertEquals(2, n.shape().numDimensions()); - assertEquals(4, n.shape().size(0)); - assertEquals(5, n.shape().size(1)); - } - } - - @Test - public void equalsWorksCorrectly() { - assertEquals(Shape.scalar(), Shape.scalar()); - assertEquals(Shape.make(1, 2, 3), Shape.make(1, 2, 3)); - - assertNotEquals(Shape.make(1, 2), null); - assertNotEquals(Shape.make(1, 2), new Object()); - assertNotEquals(Shape.make(1, 2, 3), Shape.make(1, 2, 4)); - - assertNotEquals(Shape.unknown(), Shape.unknown()); - assertNotEquals(Shape.make(-1), Shape.make(-1)); - assertNotEquals(Shape.make(1, -1, 3), Shape.make(1, -1, 3)); - } - - @Test - public void hashCodeIsAsExpected() { - assertEquals(Shape.make(1, 2, 3, 4).hashCode(), Shape.make(1, 2, 3, 4).hashCode()); - assertEquals(Shape.scalar().hashCode(), Shape.scalar().hashCode()); - assertEquals(Shape.unknown().hashCode(), Shape.unknown().hashCode()); - - assertNotEquals(Shape.make(1, 2).hashCode(), Shape.make(1, 3).hashCode()); - } -} diff --git a/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/TensorTest.java b/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/TensorTest.java index 3a75f3cb5c8..2eb12a846b0 100644 --- a/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/TensorTest.java +++ b/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/TensorTest.java @@ -33,7 +33,13 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; -import org.tensorflow.types.UInt8; +import org.tensorflow.types.TBool; +import org.tensorflow.types.TDouble; +import org.tensorflow.types.TFloat; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.TInt64; +import org.tensorflow.types.TString; +import org.tensorflow.types.TUInt8; /** Unit tests for {@link org.tensorflow.Tensor}. */ @RunWith(JUnit4.class) @@ -51,15 +57,15 @@ public void createWithByteBuffer() { byte[] strings = "test".getBytes(UTF_8); long[] strings_shape = {}; byte[] strings_; // raw TF_STRING - try (Tensor t = Tensors.create(strings)) { - ByteBuffer to = ByteBuffer.allocate(t.numBytes()); + try (Tensor t = Tensors.create(strings)) { + ByteBuffer to = ByteBuffer.allocate((int)t.numBytes()); t.writeTo(to); strings_ = to.array(); } // validate creating a tensor using a byte buffer { - try (Tensor t = Tensor.create(Boolean.class, bools_shape, ByteBuffer.wrap(bools_))) { + try (Tensor t = Tensor.create(TBool.DTYPE, bools_shape, ByteBuffer.wrap(bools_))) { boolean[] actual = t.copyTo(new boolean[bools_.length]); for (int i = 0; i < bools.length; ++i) { assertEquals("" + i, bools[i], actual[i]); @@ -67,8 +73,8 @@ public void createWithByteBuffer() { } // note: the buffer is expected to contain raw TF_STRING (as per C API) - try (Tensor t = - Tensor.create(String.class, strings_shape, ByteBuffer.wrap(strings_))) { + try (Tensor t = + Tensor.create(TString.DTYPE, strings_shape, ByteBuffer.wrap(strings_))) { assertArrayEquals(strings, t.bytesValue()); } } @@ -77,15 +83,15 @@ public void createWithByteBuffer() { { ByteBuffer buf = ByteBuffer.allocateDirect(8 * doubles.length).order(ByteOrder.nativeOrder()); buf.asDoubleBuffer().put(doubles); - try (Tensor t = Tensor.create(Double.class, doubles_shape, buf)) { + try (Tensor t = Tensor.create(TDouble.DTYPE, doubles_shape, buf)) { double[] actual = new double[doubles.length]; assertArrayEquals(doubles, t.copyTo(actual), EPSILON); } } // validate shape checking - try (Tensor t = - Tensor.create(Boolean.class, new long[bools_.length * 2], ByteBuffer.wrap(bools_))) { + try (Tensor t = + Tensor.create(TBool.DTYPE, new long[bools_.length * 2], ByteBuffer.wrap(bools_))) { fail("should have failed on incompatible buffer"); } catch (IllegalArgumentException e) { // expected @@ -104,7 +110,7 @@ public void createFromBufferWithNonNativeByteOrder() { .asDoubleBuffer() .put(doubles); flipBuffer(buf); - try (Tensor t = Tensor.create(new long[] {doubles.length}, buf)) { + try (Tensor t = Tensor.create(new long[] {doubles.length}, buf)) { double[] actual = new double[doubles.length]; assertArrayEquals(doubles, t.copyTo(actual), EPSILON); } @@ -120,19 +126,19 @@ public void createWithTypedBuffer() { // validate creating a tensor using a typed buffer { - try (Tensor t = Tensor.create(shape, DoubleBuffer.wrap(doubles))) { + try (Tensor t = Tensor.create(shape, DoubleBuffer.wrap(doubles))) { double[] actual = new double[doubles.length]; assertArrayEquals(doubles, t.copyTo(actual), EPSILON); } - try (Tensor t = Tensor.create(shape, FloatBuffer.wrap(floats))) { + try (Tensor t = Tensor.create(shape, FloatBuffer.wrap(floats))) { float[] actual = new float[floats.length]; assertArrayEquals(floats, t.copyTo(actual), EPSILON_F); } - try (Tensor t = Tensor.create(shape, IntBuffer.wrap(ints))) { + try (Tensor t = Tensor.create(shape, IntBuffer.wrap(ints))) { int[] actual = new int[ints.length]; assertArrayEquals(ints, t.copyTo(actual)); } - try (Tensor t = Tensor.create(shape, LongBuffer.wrap(longs))) { + try (Tensor t = Tensor.create(shape, LongBuffer.wrap(longs))) { long[] actual = new long[longs.length]; assertArrayEquals(longs, t.copyTo(actual)); } @@ -140,23 +146,23 @@ public void createWithTypedBuffer() { // validate shape-checking { - try (Tensor t = + try (Tensor t = Tensor.create(new long[doubles.length + 1], DoubleBuffer.wrap(doubles))) { fail("should have failed on incompatible buffer"); } catch (IllegalArgumentException e) { // expected } - try (Tensor t = Tensor.create(new long[floats.length + 1], FloatBuffer.wrap(floats))) { + try (Tensor t = Tensor.create(new long[floats.length + 1], FloatBuffer.wrap(floats))) { fail("should have failed on incompatible buffer"); } catch (IllegalArgumentException e) { // expected } - try (Tensor t = Tensor.create(new long[ints.length + 1], IntBuffer.wrap(ints))) { + try (Tensor t = Tensor.create(new long[ints.length + 1], IntBuffer.wrap(ints))) { fail("should have failed on incompatible buffer"); } catch (IllegalArgumentException e) { // expected } - try (Tensor t = Tensor.create(new long[longs.length + 1], LongBuffer.wrap(longs))) { + try (Tensor t = Tensor.create(new long[longs.length + 1], LongBuffer.wrap(longs))) { fail("should have failed on incompatible buffer"); } catch (IllegalArgumentException e) { // expected @@ -172,11 +178,11 @@ public void writeTo() { long[] longs = {1L, 2L, 3L}; boolean[] bools = {true, false, true}; - try (Tensor tints = Tensors.create(ints); - Tensor tfloats = Tensors.create(floats); - Tensor tdoubles = Tensors.create(doubles); - Tensor tlongs = Tensors.create(longs); - Tensor tbools = Tensors.create(bools)) { + try (Tensor tints = Tensors.create(ints); + Tensor tfloats = Tensors.create(floats); + Tensor tdoubles = Tensors.create(doubles); + Tensor tlongs = Tensors.create(longs); + Tensor tbools = Tensors.create(bools)) { // validate that any datatype is readable with ByteBuffer (content, position) { @@ -212,45 +218,45 @@ public void writeTo() { // validate the use of direct buffers { DoubleBuffer buf = - ByteBuffer.allocateDirect(tdoubles.numBytes()) + ByteBuffer.allocateDirect((int)tdoubles.numBytes()) .order(ByteOrder.nativeOrder()) .asDoubleBuffer(); tdoubles.writeTo(buf); assertTrue(buf.isDirect()); - assertEquals(tdoubles.numElements(), buf.position()); + assertEquals(tdoubles.shape().size(), buf.position()); assertEquals(doubles[0], buf.get(0), EPSILON); } // validate typed buffers (content, position) { - FloatBuffer buf = FloatBuffer.allocate(tfloats.numElements()); + FloatBuffer buf = FloatBuffer.allocate((int)tfloats.shape().size()); tfloats.writeTo(buf); - assertEquals(tfloats.numElements(), buf.position()); + assertEquals(tfloats.shape().size(), buf.position()); assertEquals(floats[0], buf.get(0), EPSILON); } { - DoubleBuffer buf = DoubleBuffer.allocate(tdoubles.numElements()); + DoubleBuffer buf = DoubleBuffer.allocate((int)tdoubles.shape().size()); tdoubles.writeTo(buf); - assertEquals(tdoubles.numElements(), buf.position()); + assertEquals(tdoubles.shape().size(), buf.position()); assertEquals(doubles[0], buf.get(0), EPSILON); } { - IntBuffer buf = IntBuffer.allocate(tints.numElements()); + IntBuffer buf = IntBuffer.allocate((int)tints.shape().size()); tints.writeTo(buf); - assertEquals(tints.numElements(), buf.position()); + assertEquals(tints.shape().size(), buf.position()); assertEquals(ints[0], buf.get(0)); } { - LongBuffer buf = LongBuffer.allocate(tlongs.numElements()); + LongBuffer buf = LongBuffer.allocate((int)tlongs.shape().size()); tlongs.writeTo(buf); - assertEquals(tlongs.numElements(), buf.position()); + assertEquals(tlongs.shape().size(), buf.position()); assertEquals(longs[0], buf.get(0)); } // validate byte order conversion { DoubleBuffer foreignBuf = - ByteBuffer.allocate(tdoubles.numBytes()) + ByteBuffer.allocate((int)tdoubles.numBytes()) .order( ByteOrder.nativeOrder() == ByteOrder.LITTLE_ENDIAN ? ByteOrder.BIG_ENDIAN @@ -299,46 +305,40 @@ public void writeTo() { @Test public void scalars() { - try (Tensor t = Tensors.create(2.718f)) { - assertEquals(DataType.FLOAT, t.dataType()); - assertEquals(0, t.numDimensions()); - assertEquals(0, t.shape().length); + try (Tensor t = Tensors.create(2.718f)) { + assertEquals(TFloat.DTYPE, t.dataType()); + assertEquals(0, t.shape().numDimensions()); assertEquals(2.718f, t.floatValue(), EPSILON_F); } - try (Tensor t = Tensors.create(3.1415)) { - assertEquals(DataType.DOUBLE, t.dataType()); - assertEquals(0, t.numDimensions()); - assertEquals(0, t.shape().length); + try (Tensor t = Tensors.create(3.1415)) { + assertEquals(TDouble.DTYPE, t.dataType()); + assertEquals(0, t.shape().numDimensions()); assertEquals(3.1415, t.doubleValue(), EPSILON); } - try (Tensor t = Tensors.create(-33)) { - assertEquals(DataType.INT32, t.dataType()); - assertEquals(0, t.numDimensions()); - assertEquals(0, t.shape().length); + try (Tensor t = Tensors.create(-33)) { + assertEquals(TInt32.DTYPE, t.dataType()); + assertEquals(0, t.shape().numDimensions()); assertEquals(-33, t.intValue()); } - try (Tensor t = Tensors.create(8589934592L)) { - assertEquals(DataType.INT64, t.dataType()); - assertEquals(0, t.numDimensions()); - assertEquals(0, t.shape().length); + try (Tensor t = Tensors.create(8589934592L)) { + assertEquals(TInt64.DTYPE, t.dataType()); + assertEquals(0, t.shape().numDimensions()); assertEquals(8589934592L, t.longValue()); } - try (Tensor t = Tensors.create(true)) { - assertEquals(DataType.BOOL, t.dataType()); - assertEquals(0, t.numDimensions()); - assertEquals(0, t.shape().length); + try (Tensor t = Tensors.create(true)) { + assertEquals(TBool.DTYPE, t.dataType()); + assertEquals(0, t.shape().numDimensions()); assertTrue(t.booleanValue()); } final byte[] bytes = {1, 2, 3, 4}; - try (Tensor t = Tensors.create(bytes)) { - assertEquals(DataType.STRING, t.dataType()); - assertEquals(0, t.numDimensions()); - assertEquals(0, t.shape().length); + try (Tensor t = Tensors.create(bytes)) { + assertEquals(TString.DTYPE, t.dataType()); + assertEquals(0, t.shape().numDimensions()); assertArrayEquals(bytes, t.bytesValue()); } } @@ -346,20 +346,21 @@ public void scalars() { @Test public void nDimensional() { double[] vector = {1.414, 2.718, 3.1415}; - try (Tensor t = Tensors.create(vector)) { - assertEquals(DataType.DOUBLE, t.dataType()); - assertEquals(1, t.numDimensions()); - assertArrayEquals(new long[] {3}, t.shape()); + try (Tensor t = Tensors.create(vector)) { + assertEquals(TDouble.DTYPE, t.dataType()); + assertEquals(1, t.shape().numDimensions()); + assertEquals(3, t.shape().size(0)); double[] got = new double[3]; assertArrayEquals(vector, t.copyTo(got), EPSILON); } int[][] matrix = {{1, 2, 3}, {4, 5, 6}}; - try (Tensor t = Tensors.create(matrix)) { - assertEquals(DataType.INT32, t.dataType()); - assertEquals(2, t.numDimensions()); - assertArrayEquals(new long[] {2, 3}, t.shape()); + try (Tensor t = Tensors.create(matrix)) { + assertEquals(TInt32.DTYPE, t.dataType()); + assertEquals(2, t.shape().numDimensions()); + assertEquals(2, t.shape().size(0)); + assertEquals(3, t.shape().size(1)); int[][] got = new int[2][3]; assertArrayEquals(matrix, t.copyTo(got)); @@ -368,10 +369,12 @@ public void nDimensional() { long[][][] threeD = { {{1}, {3}, {5}, {7}, {9}}, {{2}, {4}, {6}, {8}, {0}}, }; - try (Tensor t = Tensors.create(threeD)) { - assertEquals(DataType.INT64, t.dataType()); - assertEquals(3, t.numDimensions()); - assertArrayEquals(new long[] {2, 5, 1}, t.shape()); + try (Tensor t = Tensors.create(threeD)) { + assertEquals(TInt64.DTYPE, t.dataType()); + assertEquals(3, t.shape().numDimensions()); + assertEquals(2, t.shape().size(0)); + assertEquals(5, t.shape().size(1)); + assertEquals(1, t.shape().size(2)); long[][][] got = new long[2][5][1]; assertArrayEquals(threeD, t.copyTo(got)); @@ -382,10 +385,13 @@ public void nDimensional() { {{{false, false, true, true}, {false, true, false, false}}}, {{{false, true, false, true}, {false, true, true, false}}}, }; - try (Tensor t = Tensors.create(fourD)) { - assertEquals(DataType.BOOL, t.dataType()); - assertEquals(4, t.numDimensions()); - assertArrayEquals(new long[] {3, 1, 2, 4}, t.shape()); + try (Tensor t = Tensors.create(fourD)) { + assertEquals(TBool.DTYPE, t.dataType()); + assertEquals(4, t.shape().numDimensions()); + assertEquals(3, t.shape().size(0)); + assertEquals(1, t.shape().size(1)); + assertEquals(2, t.shape().size(2)); + assertEquals(4, t.shape().size(3)); boolean[][][][] got = new boolean[3][1][2][4]; assertArrayEquals(fourD, t.copyTo(got)); @@ -400,10 +406,11 @@ public void testNDimensionalStringTensor() { matrix[i][j] = String.format("(%d, %d) = %d", i, j, i << j).getBytes(UTF_8); } } - try (Tensor t = Tensors.create(matrix)) { - assertEquals(DataType.STRING, t.dataType()); - assertEquals(2, t.numDimensions()); - assertArrayEquals(new long[] {4, 3}, t.shape()); + try (Tensor t = Tensors.create(matrix)) { + assertEquals(TString.DTYPE, t.dataType()); + assertEquals(2, t.shape().numDimensions()); + assertEquals(4, t.shape().size(0)); + assertEquals(3, t.shape().size(1)); byte[][][] got = t.copyTo(new byte[4][3][]); assertEquals(4, got.length); @@ -419,10 +426,10 @@ public void testNDimensionalStringTensor() { @Test public void testUInt8Tensor() { byte[] vector = new byte[] {1, 2, 3, 4}; - try (Tensor t = Tensor.create(vector, UInt8.class)) { - assertEquals(DataType.UINT8, t.dataType()); - assertEquals(1, t.numDimensions()); - assertArrayEquals(new long[] {4}, t.shape()); + try (Tensor t = Tensor.create(vector, TUInt8.DTYPE)) { + assertEquals(TUInt8.DTYPE, t.dataType()); + assertEquals(1, t.shape().numDimensions()); + assertEquals(4, t.shape().size(0)); byte[] got = t.copyTo(new byte[4]); assertArrayEquals(vector, got); @@ -432,7 +439,7 @@ public void testUInt8Tensor() { @Test public void testCreateFromArrayOfBoxed() { Integer[] vector = new Integer[] {1, 2, 3, 4}; - try (Tensor t = Tensor.create(vector, Integer.class)) { + try (Tensor t = Tensor.create(vector, TInt32.DTYPE)) { fail("Tensor.create() should fail because it was given an array of boxed values"); } catch (IllegalArgumentException e) { // The expected exception @@ -456,7 +463,7 @@ public void failCreateOnMismatchedDimensions() { @Test public void failCopyToOnIncompatibleDestination() { - try (final Tensor matrix = Tensors.create(new int[][] {{1, 2}, {3, 4}})) { + try (final Tensor matrix = Tensors.create(new int[][] {{1, 2}, {3, 4}})) { try { matrix.copyTo(new int[2]); fail("should have failed on dimension mismatch"); @@ -482,7 +489,7 @@ public void failCopyToOnIncompatibleDestination() { @Test public void failCopyToOnScalar() { - try (final Tensor scalar = Tensors.create(3)) { + try (final Tensor scalar = Tensors.create(3)) { try { scalar.copyTo(3); fail("copyTo should fail on scalar tensors, suggesting use of primitive accessors instead"); @@ -503,7 +510,7 @@ public void failOnArbitraryObject() { @Test public void failOnZeroDimension() { - try (Tensor t = Tensors.create(new int[3][0][1])) { + try (Tensor t = Tensors.create(new int[3][0][1])) { fail("should fail on creating a Tensor where one of the dimensions is 0"); } catch (IllegalArgumentException e) { // The expected exception. @@ -524,11 +531,11 @@ public void useAfterClose() { @Test public void eagerTensorIsReleasedAfterSessionIsClosed() { - Tensor sum; + Tensor sum; try (EagerSession session = EagerSession.create()) { Output x = TestUtil.constant(session, "Const1", 10); Output y = TestUtil.constant(session, "Const2", 20); - sum = TestUtil.addN(session, x, y).tensor(); + sum = TestUtil.addN(session, x, y).tensor(); assertNotEquals(0L, sum.getNativeHandle()); assertEquals(30, sum.intValue()); } @@ -550,11 +557,11 @@ public void fromHandle() { // An exception is made for this test, where the pitfalls of this is avoided by not calling // close() on both Tensors. final float[][] matrix = {{1, 2, 3}, {4, 5, 6}}; - try (Tensor src = Tensors.create(matrix)) { - Tensor cpy = Tensor.fromHandle(src.getNativeHandle()).expect(Float.class); + try (Tensor src = Tensors.create(matrix)) { + Tensor cpy = Tensor.fromHandle(src.getNativeHandle()).expect(TFloat.DTYPE); assertEquals(src.dataType(), cpy.dataType()); - assertEquals(src.numDimensions(), cpy.numDimensions()); - assertArrayEquals(src.shape(), cpy.shape()); + assertEquals(src.shape().numDimensions(), cpy.shape().numDimensions()); + assertEquals(src.shape(), cpy.shape()); assertArrayEquals(matrix, cpy.copyTo(new float[2][3])); } } diff --git a/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/TestUtil.java b/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/TestUtil.java index 6e24d88a310..ae1da9ac3f7 100644 --- a/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/TestUtil.java +++ b/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/TestUtil.java @@ -18,6 +18,8 @@ import java.lang.reflect.Array; import java.util.ArrayList; import java.util.Collection; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.family.TType; /** Static utility functions. */ public class TestUtil { @@ -56,15 +58,15 @@ public static Output constant(ExecutionEnvironment env, String name, Obje .setAttr("dtype", t.dataType()) .setAttr("value", t) .build() - .output(0); + .output(0); } } - public static Output placeholder(Graph g, String name, Class type) { + public static Output placeholder(Graph g, String name, DataType type) { return g.opBuilder("Placeholder", name) - .setAttr("dtype", DataType.fromClass(type)) + .setAttr("dtype", type) .build() - .output(0); + .output(0); } public static Output addN(ExecutionEnvironment env, Output... inputs) { @@ -79,7 +81,7 @@ public static Output matmul( .setAttr("transpose_a", transposeA) .setAttr("transpose_b", transposeB) .build() - .output(0); + .output(0); } public static Operation split(Graph g, String name, int[] values, int numSplit) { @@ -94,12 +96,12 @@ public static Output square(Graph g, String name, Output value) { return g.opBuilder("Square", name) .addInput(value) .build() - .output(0); + .output(0); } public static void transpose_A_times_X(Graph g, int[][] a) { - Output aa = constant(g, "A", a); - matmul(g, "Y", aa, placeholder(g, "X", Integer.class), true, false); + Output aa = constant(g, "A", a); + matmul(g, "Y", aa, placeholder(g, "X", TInt32.DTYPE), true, false); } /** diff --git a/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/c_api/HelloWorldTest.java b/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/internal/c_api/HelloWorldTest.java similarity index 89% rename from tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/c_api/HelloWorldTest.java rename to tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/internal/c_api/HelloWorldTest.java index 92b9eac8d75..36a7357ac04 100644 --- a/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/c_api/HelloWorldTest.java +++ b/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/internal/c_api/HelloWorldTest.java @@ -13,10 +13,10 @@ limitations under the License. ==============================================================================*/ -package org.tensorflow.c_api; +package org.tensorflow.internal.c_api; import static org.junit.Assert.assertTrue; -import static org.tensorflow.c_api.global.tensorflow.TF_Version; +import static org.tensorflow.internal.c_api.global.tensorflow.TF_Version; import org.junit.Test; import org.junit.runner.RunWith; diff --git a/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/op/ScopeTest.java b/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/op/ScopeTest.java index 81918a81ac8..1e756ad24fe 100644 --- a/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/op/ScopeTest.java +++ b/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/op/ScopeTest.java @@ -25,14 +25,22 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; +import org.tensorflow.DataType; import org.tensorflow.Graph; import org.tensorflow.Output; import org.tensorflow.Session; import org.tensorflow.Tensor; import org.tensorflow.Tensors; -import org.tensorflow.types.UInt8; - -/** Unit tests for {@link org.tensorflow.Scope}. */ +import org.tensorflow.types.TBool; +import org.tensorflow.types.TDouble; +import org.tensorflow.types.TFloat; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.TInt64; +import org.tensorflow.types.TString; +import org.tensorflow.types.TUInt8; +import org.tensorflow.types.family.TType; + +/** Unit tests for {@link org.tensorflow.op.Scope}. */ @RunWith(JUnit4.class) public class ScopeTest { @@ -127,13 +135,13 @@ public void validateNames() { public void basic() { try (Graph g = new Graph()) { Scope s = new Scope(g); - Const c1 = Const.create(s, 42); + Const c1 = Const.create(s, 42); assertEquals("Const", c1.output().op().name()); - Const c2 = Const.create(s, 7); + Const c2 = Const.create(s, 7); assertEquals("Const_1", c2.output().op().name()); - Const c3 = Const.create(s.withName("four"), 4); + Const c3 = Const.create(s.withName("four"), 4); assertEquals("four", c3.output().op().name()); - Const c4 = Const.create(s.withName("four"), 4); + Const c4 = Const.create(s.withName("four"), 4); assertEquals("four_1", c4.output().op().name()); } } @@ -153,11 +161,11 @@ public void composite() { try (Graph g = new Graph(); Session sess = new Session(g)) { Scope s = new Scope(g); - Output data = + Output data = Const.create(s.withName("data"), new int[] {600, 470, 170, 430, 300}).output(); // Create a composite op with a customized name - Variance var1 = Variance.create(s.withName("example"), data, Integer.class); + Variance var1 = Variance.create(s.withName("example"), data, TInt32.DTYPE); assertEquals("example/variance", var1.output().op().name()); // Confirm internally added ops have the right names. @@ -166,7 +174,7 @@ public void composite() { // assertNotNull(g.operation("example/zero")); // Same composite op with a default name - Variance var2 = Variance.create(s, data, Integer.class); + Variance var2 = Variance.create(s, data, TInt32.DTYPE); assertEquals("variance/variance", var2.output().op().name()); // Confirm internally added ops have the right names. @@ -175,10 +183,10 @@ public void composite() { // assertNotNull(g.operation("variance/zero")); // Verify correct results as well. - Tensor result = - sess.runner().fetch(var1.output()).run().get(0).expect(Integer.class); + Tensor result = + sess.runner().fetch(var1.output()).run().get(0).expect(TInt32.DTYPE); assertEquals(21704, result.intValue()); - result = sess.runner().fetch(var2.output()).run().get(0).expect(Integer.class); + result = sess.runner().fetch(var2.output()).run().get(0).expect(TInt32.DTYPE); assertEquals(21704, result.intValue()); } } @@ -187,33 +195,33 @@ public void composite() { private static final class Const { private final Output output; - static Const create(Scope s, int v) { + static Const create(Scope s, int v) { return create(s, Tensors.create(v)); } - static Const create(Scope s, int[] v) { + static Const create(Scope s, int[] v) { return create(s, Tensors.create(v)); } static Const create(Scope s, Tensor value) { - return new Const( + return new Const<>( s.env() .opBuilder("Const", s.makeOpName("Const")) .setAttr("dtype", value.dataType()) .setAttr("value", value) .build() - .output(0)); + .output(0)); } - static Const create(Scope s, Object v, Class type) { + static Const create(Scope s, Object v, DataType type) { try (Tensor value = Tensor.create(v, type)) { - return new Const( + return new Const<>( s.env() .opBuilder("Const", s.makeOpName("Const")) .setAttr("dtype", value.dataType()) .setAttr("value", value) .build() - .output(0)); + .output(0)); } } @@ -230,13 +238,13 @@ private static final class Mean { private final Output output; static Mean create(Scope s, Output input, Output reductionIndices) { - return new Mean( + return new Mean<>( s.env() .opBuilder("Mean", s.makeOpName("Mean")) .addInput(input) .addInput(reductionIndices) .build() - .output(0)); + .output(0)); } Mean(Output o) { @@ -252,13 +260,13 @@ private static final class SquaredDifference { private final Output output; static SquaredDifference create(Scope s, Output x, Output y) { - return new SquaredDifference( + return new SquaredDifference<>( s.env() .opBuilder("SquaredDifference", s.makeOpName("SquaredDifference")) .addInput(x) .addInput(y) .build() - .output(0)); + .output(0)); } SquaredDifference(Output o) { @@ -274,28 +282,28 @@ Output output() { * Returns the zero value of type described by {@code c}, or null if the type (e.g., string) is * not numeric and therefore has no zero value. * - * @param c The class describing the TensorFlow type of interest. + * @param type The TensorFlow type of interest. */ - public static Object zeroValue(Class c) { - return zeros.get(c); + public static Object zeroValue(DataType type) { + return zeros.get(type); } - private static final Map, Object> zeros = new HashMap<>(); + private static final Map, Object> zeros = new HashMap<>(); static { - zeros.put(Float.class, 0.0f); - zeros.put(Double.class, 0.0); - zeros.put(Integer.class, 0); - zeros.put(UInt8.class, (byte) 0); - zeros.put(Long.class, 0L); - zeros.put(Boolean.class, false); - zeros.put(String.class, null); // no zero value + zeros.put(TFloat.DTYPE, 0.0f); + zeros.put(TDouble.DTYPE, 0.0); + zeros.put(TInt32.DTYPE, 0); + zeros.put(TUInt8.DTYPE, (byte) 0); + zeros.put(TInt64.DTYPE, 0L); + zeros.put(TBool.DTYPE, false); + zeros.put(TString.DTYPE, null); // no zero value } private static final class Variance { private final Output output; - static Variance create(Scope base, Output x, Class type) { + static Variance create(Scope base, Output x, DataType type) { Scope s = base.withSubScope("variance"); Output zero = Const.create(base, zeroValue(type), type).output(); Output sqdiff = @@ -303,7 +311,7 @@ static Variance create(Scope base, Output x, Class type) { s.withName("squared_deviation"), x, Mean.create(s, x, zero).output()) .output(); - return new Variance(Mean.create(s.withName("variance"), sqdiff, zero).output()); + return new Variance<>(Mean.create(s.withName("variance"), sqdiff, zero).output()); } Variance(Output o) { diff --git a/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/op/core/ConstantTest.java b/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/op/core/ConstantTest.java index 7d3b26de8dc..ad040cb726b 100644 --- a/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/op/core/ConstantTest.java +++ b/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/op/core/ConstantTest.java @@ -27,7 +27,6 @@ import java.nio.FloatBuffer; import java.nio.IntBuffer; import java.nio.LongBuffer; - import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; @@ -35,6 +34,12 @@ import org.tensorflow.Session; import org.tensorflow.Tensor; import org.tensorflow.op.Scope; +import org.tensorflow.types.TBool; +import org.tensorflow.types.TDouble; +import org.tensorflow.types.TFloat; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.TInt64; +import org.tensorflow.types.TString; @RunWith(JUnit4.class) public class ConstantTest { @@ -47,8 +52,8 @@ public void createInt() { try (Graph g = new Graph(); Session sess = new Session(g)) { Scope scope = new Scope(g); - Constant op = Constant.create(scope, value); - try (Tensor result = sess.runner().fetch(op).run().get(0).expect(Integer.class)) { + Constant op = Constant.create(scope, value); + try (Tensor result = sess.runner().fetch(op).run().get(0).expect(TInt32.DTYPE)) { assertEquals(value, result.intValue()); } } @@ -62,70 +67,70 @@ public void createIntBuffer() { try (Graph g = new Graph(); Session sess = new Session(g)) { Scope scope = new Scope(g); - Constant op = Constant.create(scope, shape, IntBuffer.wrap(ints)); + Constant op = Constant.create(scope, shape, IntBuffer.wrap(ints)); try (Tensor result = sess.runner().fetch(op).run().get(0)) { int[] actual = new int[ints.length]; - assertArrayEquals(ints, result.expect(Integer.class).copyTo(actual)); + assertArrayEquals(ints, result.expect(TInt32.DTYPE).copyTo(actual)); } } } @Test - public void createFloat() { + public void createTFloat() { float value = 1; try (Graph g = new Graph(); Session sess = new Session(g)) { Scope scope = new Scope(g); - Constant op = Constant.create(scope, value); + Constant op = Constant.create(scope, value); try (Tensor result = sess.runner().fetch(op).run().get(0)) { - assertEquals(value, result.expect(Float.class).floatValue(), 0.0f); + assertEquals(value, result.expect(TFloat.DTYPE).floatValue(), 0.0f); } } } @Test - public void createFloatBuffer() { + public void createTFloatBuffer() { float[] floats = {1, 2, 3, 4}; long[] shape = {4}; try (Graph g = new Graph(); Session sess = new Session(g)) { Scope scope = new Scope(g); - Constant op = Constant.create(scope, shape, FloatBuffer.wrap(floats)); + Constant op = Constant.create(scope, shape, FloatBuffer.wrap(floats)); try (Tensor result = sess.runner().fetch(op).run().get(0)) { float[] actual = new float[floats.length]; - assertArrayEquals(floats, result.expect(Float.class).copyTo(actual), EPSILON); + assertArrayEquals(floats, result.expect(TFloat.DTYPE).copyTo(actual), EPSILON); } } } @Test - public void createDouble() { + public void createTDouble() { double value = 1; try (Graph g = new Graph(); Session sess = new Session(g)) { Scope scope = new Scope(g); - Constant op = Constant.create(scope, value); + Constant op = Constant.create(scope, value); try (Tensor result = sess.runner().fetch(op).run().get(0)) { - assertEquals(value, result.expect(Double.class).doubleValue(), 0.0); + assertEquals(value, result.expect(TDouble.DTYPE).doubleValue(), 0.0); } } } @Test - public void createDoubleBuffer() { + public void createTDoubleBuffer() { double[] doubles = {1, 2, 3, 4}; long[] shape = {4}; try (Graph g = new Graph(); Session sess = new Session(g)) { Scope scope = new Scope(g); - Constant op = Constant.create(scope, shape, DoubleBuffer.wrap(doubles)); + Constant op = Constant.create(scope, shape, DoubleBuffer.wrap(doubles)); try (Tensor result = sess.runner().fetch(op).run().get(0)) { double[] actual = new double[doubles.length]; - assertArrayEquals(doubles, result.expect(Double.class).copyTo(actual), EPSILON); + assertArrayEquals(doubles, result.expect(TDouble.DTYPE).copyTo(actual), EPSILON); } } } @@ -137,9 +142,9 @@ public void createLong() { try (Graph g = new Graph(); Session sess = new Session(g)) { Scope scope = new Scope(g); - Constant op = Constant.create(scope, value); + Constant op = Constant.create(scope, value); try (Tensor result = sess.runner().fetch(op).run().get(0)) { - assertEquals(value, result.expect(Long.class).longValue()); + assertEquals(value, result.expect(TInt64.DTYPE).longValue()); } } } @@ -152,10 +157,10 @@ public void createLongBuffer() { try (Graph g = new Graph(); Session sess = new Session(g)) { Scope scope = new Scope(g); - Constant op = Constant.create(scope, shape, LongBuffer.wrap(longs)); + Constant op = Constant.create(scope, shape, LongBuffer.wrap(longs)); try (Tensor result = sess.runner().fetch(op).run().get(0)) { long[] actual = new long[longs.length]; - assertArrayEquals(longs, result.expect(Long.class).copyTo(actual)); + assertArrayEquals(longs, result.expect(TInt64.DTYPE).copyTo(actual)); } } } @@ -167,9 +172,9 @@ public void createBoolean() { try (Graph g = new Graph(); Session sess = new Session(g)) { Scope scope = new Scope(g); - Constant op = Constant.create(scope, value); + Constant op = Constant.create(scope, value); try (Tensor result = sess.runner().fetch(op).run().get(0)) { - assertEquals(value, result.expect(Boolean.class).booleanValue()); + assertEquals(value, result.expect(TBool.DTYPE).booleanValue()); } } } @@ -197,9 +202,9 @@ public void createStringBuffer() throws IOException { try (Graph g = new Graph(); Session sess = new Session(g)) { Scope scope = new Scope(g); - Constant op = Constant.create(scope, String.class, shape, ByteBuffer.wrap(content)); + Constant op = Constant.create(scope, TString.DTYPE, shape, ByteBuffer.wrap(content)); try (Tensor result = sess.runner().fetch(op).run().get(0)) { - assertArrayEquals(data, result.expect(String.class).bytesValue()); + assertArrayEquals(data, result.expect(TString.DTYPE).bytesValue()); } } } diff --git a/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/op/core/GeneratedOperationsTest.java b/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/op/core/GeneratedOperationsTest.java index daafd6b9503..34859ce77e1 100644 --- a/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/op/core/GeneratedOperationsTest.java +++ b/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/op/core/GeneratedOperationsTest.java @@ -25,8 +25,9 @@ import org.tensorflow.Operand; import org.tensorflow.Session; import org.tensorflow.Tensor; -import org.tensorflow.Shape; +import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.Ops; +import org.tensorflow.types.TInt32; @RunWith(JUnit4.class) public final class GeneratedOperationsTest { @@ -36,8 +37,8 @@ public void tensorInputTensorOutput() { try (Graph g = new Graph(); Session sess = new Session(g)) { Ops ops = Ops.create(g); - Operand x = ops.math().add(ops.constant(1), ops.constant(2)); - try (Tensor result = sess.runner().fetch(x).run().get(0).expect(Integer.class)) { + Operand x = ops.math().add(ops.constant(1), ops.constant(2)); + try (Tensor result = sess.runner().fetch(x).run().get(0).expect(TInt32.DTYPE)) { assertEquals(3, result.intValue()); } } @@ -48,12 +49,12 @@ public void testListInputTensorOutput() { try (Graph g = new Graph(); Session sess = new Session(g)) { Ops ops = Ops.create(g); - ArrayList> inputs = new ArrayList>(); + ArrayList> inputs = new ArrayList<>(); inputs.add(ops.constant(1)); inputs.add(ops.constant(2)); inputs.add(ops.constant(3)); - Operand x = ops.math().addN(inputs); - try (Tensor result = sess.runner().fetch(x).run().get(0).expect(Integer.class)) { + Operand x = ops.math().addN(inputs); + try (Tensor result = sess.runner().fetch(x).run().get(0).expect(TInt32.DTYPE)) { assertEquals(6, result.intValue()); } } @@ -71,14 +72,14 @@ public void testControlDependencies() { try (Graph g = new Graph(); Session sess = new Session(g)) { Ops ops = Ops.create(g); - Operand variable = ops.variable(Shape.scalar(), Integer.class); + Operand variable = ops.variable(Shape.scalar(), TInt32.DTYPE); Operand initVariable = ops.assign(variable, ops.constant(0)); - ArrayList> controls = new ArrayList>(); + ArrayList> controls = new ArrayList<>(); controls.add(ops.assign(variable, ops.constant(3))); - Operand x = + Operand x = ops.withControlDependencies(controls).math().add(variable, ops.constant(0)); sess.runner().addTarget(initVariable).run(); - try (Tensor result = sess.runner().fetch(x).run().get(0).expect(Integer.class); ) { + try (Tensor result = sess.runner().fetch(x).run().get(0).expect(TInt32.DTYPE)) { assertEquals(3, result.intValue()); } } diff --git a/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/op/core/GradientsTest.java b/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/op/core/GradientsTest.java index 3f49790b291..3fb333eac87 100644 --- a/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/op/core/GradientsTest.java +++ b/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/op/core/GradientsTest.java @@ -30,6 +30,7 @@ import org.tensorflow.Tensors; import org.tensorflow.TestUtil; import org.tensorflow.op.Scope; +import org.tensorflow.types.TFloat; @RunWith(JUnit4.class) public class GradientsTest { @@ -40,9 +41,9 @@ public void createGradients() { Session sess = new Session(g)) { Scope scope = new Scope(g); - Output x = TestUtil.placeholder(g, "x1", Float.class); - Output y0 = TestUtil.square(g, "y0", x); - Output y1 = TestUtil.square(g, "y1", y0); + Output x = TestUtil.placeholder(g, "x1", TFloat.DTYPE); + Output y0 = TestUtil.square(g, "y0", x); + Output y1 = TestUtil.square(g, "y1", y0); Gradients grads = Gradients.create(scope, y1, Arrays.asList(x, y0)); @@ -50,7 +51,7 @@ public void createGradients() { assertNotNull(grads.dy()); assertEquals(2, grads.dy().size()); - try (Tensor c = Tensors.create(3.0f); + try (Tensor c = Tensors.create(3.0f); TestUtil.AutoCloseableList> outputs = new TestUtil.AutoCloseableList<>( sess.runner().feed(x, c).fetch(grads.dy(0)).fetch(grads.dy(1)).run())) { @@ -67,9 +68,9 @@ public void createGradientsWithSum() { Session sess = new Session(g)) { Scope scope = new Scope(g); - Output x = TestUtil.placeholder(g, "x1", Float.class); - Output y0 = TestUtil.square(g, "y0", x); - Output y1 = TestUtil.square(g, "y1", y0); + Output x = TestUtil.placeholder(g, "x1", TFloat.DTYPE); + Output y0 = TestUtil.square(g, "y0", x); + Output y1 = TestUtil.square(g, "y1", y0); Gradients grads = Gradients.create(scope, Arrays.asList(y0, y1), Arrays.asList(x)); @@ -77,7 +78,7 @@ public void createGradientsWithSum() { assertNotNull(grads.dy()); assertEquals(1, grads.dy().size()); - try (Tensor c = Tensors.create(3.0f); + try (Tensor c = Tensors.create(3.0f); TestUtil.AutoCloseableList> outputs = new TestUtil.AutoCloseableList<>(sess.runner().feed(x, c).fetch(grads.dy(0)).run())) { @@ -92,9 +93,9 @@ public void createGradientsWithInitialValues() { Session sess = new Session(g)) { Scope scope = new Scope(g); - Output x = TestUtil.placeholder(g, "x1", Float.class); - Output y0 = TestUtil.square(g, "y0", x); - Output y1 = TestUtil.square(g, "y1", y0); + Output x = TestUtil.placeholder(g, "x1", TFloat.DTYPE); + Output y0 = TestUtil.square(g, "y0", x); + Output y1 = TestUtil.square(g, "y1", y0); Gradients grads0 = Gradients.create(scope, y1, Arrays.asList(y0)); Gradients grads1 = Gradients.create(scope, y0, Arrays.asList(x), Gradients.dx(grads0.dy())); @@ -103,7 +104,7 @@ public void createGradientsWithInitialValues() { assertNotNull(grads1.dy()); assertEquals(1, grads1.dy().size()); - try (Tensor c = Tensors.create(3.0f); + try (Tensor c = Tensors.create(3.0f); TestUtil.AutoCloseableList> outputs = new TestUtil.AutoCloseableList<>( sess.runner().feed(x, c).fetch(grads1.dy(0)).run())) { @@ -118,8 +119,8 @@ public void validateGradientsNames() { try (Graph g = new Graph()) { Scope scope = new Scope(g).withSubScope("sub"); - Output x = TestUtil.placeholder(g, "x1", Float.class); - Output y = TestUtil.square(g, "y", x); + Output x = TestUtil.placeholder(g, "x1", TFloat.DTYPE); + Output y = TestUtil.square(g, "y", x); Gradients grad0 = Gradients.create(scope, y, Arrays.asList(x)); assertTrue(grad0.dy(0).op().name().startsWith("sub/Gradients/")); diff --git a/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/op/core/ZerosTest.java b/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/op/core/ZerosTest.java index cf3910b594f..e710cbd36c8 100644 --- a/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/op/core/ZerosTest.java +++ b/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/op/core/ZerosTest.java @@ -27,7 +27,13 @@ import org.tensorflow.Session; import org.tensorflow.Tensor; import org.tensorflow.op.Scope; -import org.tensorflow.types.UInt8; +import org.tensorflow.types.TBool; +import org.tensorflow.types.TDouble; +import org.tensorflow.types.TFloat; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.TInt64; +import org.tensorflow.types.TString; +import org.tensorflow.types.TUInt8; @RunWith(JUnit4.class) public class ZerosTest { @@ -39,9 +45,9 @@ public void createIntZeros() { Session sess = new Session(g)) { Scope scope = new Scope(g); long[] shape = {2, 2}; - Zeros op = Zeros.create(scope, Constant.create(scope, shape), Integer.class); + Zeros op = Zeros.create(scope, Constant.create(scope, shape), TInt32.DTYPE); try (Tensor result = sess.runner().fetch(op).run().get(0)) { - int[][] actual = result.expect(Integer.class).copyTo(new int[(int)shape[0]][(int)shape[1]]); + int[][] actual = result.expect(TInt32.DTYPE).copyTo(new int[(int)shape[0]][(int)shape[1]]); for (int i = 0; i < actual.length; ++i) { for (int j = 0; j < actual[i].length; ++j) { assertEquals(0, actual[i][j]); @@ -57,9 +63,9 @@ public void createFloatZeros() { Session sess = new Session(g)) { Scope scope = new Scope(g); long[] shape = {2, 2}; - Zeros op = Zeros.create(scope, Constant.create(scope, shape), Float.class); + Zeros op = Zeros.create(scope, Constant.create(scope, shape), TFloat.DTYPE); try (Tensor result = sess.runner().fetch(op.asOutput()).run().get(0)) { - float[][] actual = result.expect(Float.class).copyTo(new float[(int)shape[0]][(int)shape[1]]); + float[][] actual = result.expect(TFloat.DTYPE).copyTo(new float[(int)shape[0]][(int)shape[1]]); for (int i = 0; i < actual.length; ++i) { for (int j = 0; j < actual[i].length; ++j) { assertEquals(0.0f, actual[i][j], EPSILON); @@ -75,9 +81,9 @@ public void createDoubleZeros() { Session sess = new Session(g)) { Scope scope = new Scope(g); long[] shape = {2, 2}; - Zeros op = Zeros.create(scope, Constant.create(scope, shape), Double.class); + Zeros op = Zeros.create(scope, Constant.create(scope, shape), TDouble.DTYPE); try (Tensor result = sess.runner().fetch(op.asOutput()).run().get(0)) { - double[][] actual = result.expect(Double.class).copyTo(new double[(int)shape[0]][(int)shape[1]]); + double[][] actual = result.expect(TDouble.DTYPE).copyTo(new double[(int)shape[0]][(int)shape[1]]); for (int i = 0; i < actual.length; ++i) { for (int j = 0; j < actual[i].length; ++j) { assertEquals(0.0, actual[i][j], EPSILON); @@ -93,9 +99,9 @@ public void createLongZeros() { Session sess = new Session(g)) { Scope scope = new Scope(g); long[] shape = {2, 2}; - Zeros op = Zeros.create(scope, Constant.create(scope, shape), Long.class); + Zeros op = Zeros.create(scope, Constant.create(scope, shape), TInt64.DTYPE); try (Tensor result = sess.runner().fetch(op.asOutput()).run().get(0)) { - long[][] actual = result.expect(Long.class).copyTo(new long[(int)shape[0]][(int)shape[1]]); + long[][] actual = result.expect(TInt64.DTYPE).copyTo(new long[(int)shape[0]][(int)shape[1]]); for (int i = 0; i < actual.length; ++i) { for (int j = 0; j < actual[i].length; ++j) { assertEquals(0L, actual[i][j]); @@ -111,9 +117,9 @@ public void createBooleanZeros() { Session sess = new Session(g)) { Scope scope = new Scope(g); long[] shape = {2, 2}; - Zeros op = Zeros.create(scope, Constant.create(scope, shape), Boolean.class); + Zeros op = Zeros.create(scope, Constant.create(scope, shape), TBool.DTYPE); try (Tensor result = sess.runner().fetch(op.asOutput()).run().get(0)) { - boolean[][] actual = result.expect(Boolean.class).copyTo(new boolean[(int)shape[0]][(int)shape[1]]); + boolean[][] actual = result.expect(TBool.DTYPE).copyTo(new boolean[(int)shape[0]][(int)shape[1]]); for (int i = 0; i < actual.length; ++i) { for (int j = 0; j < actual[i].length; ++j) { assertFalse(actual[i][j]); @@ -129,9 +135,9 @@ public void createUInt8Zeros() { Session sess = new Session(g)) { Scope scope = new Scope(g); long[] shape = {2, 2}; - Zeros op = Zeros.create(scope, Constant.create(scope, shape), UInt8.class); + Zeros op = Zeros.create(scope, Constant.create(scope, shape), TUInt8.DTYPE); try (Tensor result = sess.runner().fetch(op.asOutput()).run().get(0)) { - byte[][] actual = result.expect(UInt8.class).copyTo(new byte[(int)shape[0]][(int)shape[1]]); + byte[][] actual = result.expect(TUInt8.DTYPE).copyTo(new byte[(int)shape[0]][(int)shape[1]]); result.copyTo(actual); for (int i = 0; i < actual.length; ++i) { for (int j = 0; j < actual[i].length; ++j) { @@ -148,7 +154,7 @@ public void cannotCreateStringZeros() { Session sess = new Session(g)) { Scope scope = new Scope(g); long[] shape = {2, 2}; - Zeros.create(scope, Constant.create(scope, shape), String.class); + Zeros.create(scope, Constant.create(scope, shape), TString.DTYPE); } } @@ -158,7 +164,7 @@ public void operationsComposingZerosAreCorrectlyNamed() { Session sess = new Session(g)) { Scope scope = new Scope(g); long[] shape = {2, 2}; - Zeros zeros = Zeros.create(scope.withSubScope("test"), Constant.create(scope, shape), Float.class); + Zeros zeros = Zeros.create(scope.withSubScope("test"), Constant.create(scope, shape), TFloat.DTYPE); List> results = sess.runner().addTarget("test/Zeros/Zero").addTarget("test/Zeros/Fill").run(); } } diff --git a/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/types/NumericTypesTestBase.java b/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/types/NumericTypesTestBase.java new file mode 100644 index 00000000000..46221e7dcc3 --- /dev/null +++ b/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/types/NumericTypesTestBase.java @@ -0,0 +1,97 @@ +package org.tensorflow.types; + +import static org.junit.Assert.assertEquals; + +import org.junit.Test; +import org.tensorflow.EagerSession; +import org.tensorflow.Tensor; +import org.tensorflow.nio.nd.FloatNdArray; +import org.tensorflow.nio.nd.IntNdArray; +import org.tensorflow.nio.nd.NdArray; +import org.tensorflow.nio.nd.NdArrays; +import org.tensorflow.nio.nd.Shape; +import org.tensorflow.nio.nd.index.Indices; +import org.tensorflow.op.Ops; +import org.tensorflow.op.core.Constant; +import org.tensorflow.op.math.Pow; +import org.tensorflow.op.math.Sub; +import org.tensorflow.types.family.TNumber; + +abstract class NumericTypesTestBase, U> { + + private static final float EPSILON_F = 1e-7f; + + @Test + public void initializeTensorsWithZeros() { + // Allocate a tensor of 32-bits integer of the shape (2, 3, 2) + Tensor tensor = allocateTensor(Shape.make(2, 3, 2)); + NdArray tensorData = tensor.data(); + + assertEquals(3, tensorData.rank()); + assertEquals(12, tensorData.size()); + + try (EagerSession session = EagerSession.create()) { + Ops tf = Ops.create(session); + + // Initialize tensor memory with zeros and take a snapshot + tensorData.scalars().forEach(scalar -> scalar.setValue(valueOf(0))); + Constant x = tf.constant(tensor); + + // Initialize the same tensor memory with ones and take a snapshot + tensorData.scalars().forEach(scalar -> scalar.setValue(valueOf(1))); + Constant y = tf.constant(tensor); + + // Subtract y from x and validate the result + Sub sub = tf.math.sub(x, y); + sub.tensorData().scalars().forEach(scalar -> + assertEquals(valueOf(-1), scalar.getValue()) + ); + } + } + + @Test + public void genericTest() { + IntNdArray heapData = NdArrays.vector(0, 1, 2, 3); + + // Creates a 2x2 matrix + try (Tensor tensor = TInt32.tensorOfShape(2, 2)) { + IntNdArray tensorData = tensor.data(); + + // Copy first 2 values of the vector to the first row of the matrix + tensorData.set(heapData.slice(Indices.range(0, 2)), 0); + + // Copy values at an odd position in the vector as the second row of the matrix + tensorData.set(heapData.slice(Indices.odd()), 1); + + assertEquals(0, tensorData.getInt(0, 0)); + assertEquals(1, tensorData.getInt(0, 1)); + assertEquals(1, tensorData.getInt(1, 0)); + assertEquals(3, tensorData.getInt(1, 1)); + + // Read rows of the tensor in reverse order + IntNdArray reversedTensorData = tensorData.slice(Indices.all(), Indices.flip()); + + assertEquals(1, reversedTensorData.getInt(0, 0)); + assertEquals(0, reversedTensorData.getInt(0, 1)); + assertEquals(3, reversedTensorData.getInt(1, 0)); + assertEquals(1, reversedTensorData.getInt(1, 1)); + + try (EagerSession session = EagerSession.create()) { + Ops tf = Ops.create(session); + + // Compute the power of the tensor by itself + Constant x = tf.constant(tensor); + IntNdArray result = tf.math.pow(x, x).tensorData(); + + // Validate result by computing the same operation in Java + tensorData.scalars().forEachIndexed((coords, s) -> + assertEquals(Math.pow(s.getInt(), s.getInt()), result.getInt(coords), 1e-7f) + ); + } + } + } + + abstract Tensor allocateTensor(Shape shape); + + abstract U valueOf(int value); +} diff --git a/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/types/TInt32Test.java b/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/types/TInt32Test.java new file mode 100644 index 00000000000..4ec17b0fb5c --- /dev/null +++ b/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/types/TInt32Test.java @@ -0,0 +1,19 @@ +package org.tensorflow.types; + +import org.tensorflow.Tensor; +import org.tensorflow.nio.nd.Shape; +import org.tensorflow.op.Ops; +import org.tensorflow.op.core.Constant; + +public class TInt32Test extends NumericTypesTestBase { + + @Override + Tensor allocateTensor(Shape shape) { + return TInt32.tensor(shape); + } + + @Override + Integer valueOf(int value) { + return value; + } +} diff --git a/tensorflow-core/tensorflow-core-generator/src/main/java/org/tensorflow/processor/operator/OperatorProcessor.java b/tensorflow-core/tensorflow-core-generator/src/main/java/org/tensorflow/processor/operator/OperatorProcessor.java index 693c74e8d35..82e46721194 100644 --- a/tensorflow-core/tensorflow-core-generator/src/main/java/org/tensorflow/processor/operator/OperatorProcessor.java +++ b/tensorflow-core/tensorflow-core-generator/src/main/java/org/tensorflow/processor/operator/OperatorProcessor.java @@ -1,19 +1,17 @@ -/* - Copyright 2019 The TensorFlow Authors. All Rights Reserved. +/* Copyright 2017 The TensorFlow Authors. All Rights Reserved. - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 + http://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - ======================================================================= - */ +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ package org.tensorflow.processor.operator; @@ -55,11 +53,11 @@ import com.squareup.javapoet.JavaFile; import com.squareup.javapoet.MethodSpec; import com.squareup.javapoet.ParameterSpec; -import com.squareup.javapoet.TypeName; import com.squareup.javapoet.ParameterizedTypeName; -import com.squareup.javapoet.WildcardTypeName; +import com.squareup.javapoet.TypeName; import com.squareup.javapoet.TypeSpec; import com.squareup.javapoet.TypeVariableName; +import com.squareup.javapoet.WildcardTypeName; /** * A compile-time Processor that aggregates classes annotated with {@link @@ -161,6 +159,7 @@ public Set getSupportedAnnotationTypes() { private static final TypeName T_SCOPE = ClassName.get("org.tensorflow.op", "Scope"); private static final TypeName T_EXEC_ENV = ClassName.get("org.tensorflow", "ExecutionEnvironment"); + private static final TypeName T_EAGER_SESSION = ClassName.get("org.tensorflow", "EagerSession"); private static final TypeName T_STRING = ClassName.get(String.class); // Operand private static final TypeName T_OPERAND = @@ -361,13 +360,13 @@ private static TypeSpec buildTopClass( + " Operand four = ops.constant(4);\n" + " // Most builders are found within a group, and accept\n" + " // Operand types as operands\n" - + " Operand nine = ops.math().add(four, ops.constant(5));\n" + + " Operand nine = ops.math.add(four, ops.constant(5));\n" + " // Multi-result operations however offer methods to\n" + " // select a particular result for use.\n" + " Operand result = \n" - + " ops.math().add(ops.array().unique(s, a).y(), b);\n" + + " ops.math.add(ops.unique(s, a).y(), b);\n" + " // Optional attributes\n" - + " ops.math().matMul(a, b, MatMul.transposeA(true));\n" + + " ops.linalg.matMul(a, b, MatMul.transposeA(true));\n" + " // Naming operators\n" + " ops.withName(\"foo\").constant(5); // name \"foo\"\n" + " // Names can exist in a hierarchy\n" @@ -448,7 +447,18 @@ private static TypeSpec buildTopClass( .addParameter(T_EXEC_ENV, "env") .returns(T_OPS) .addStatement("return new Ops(new $T(env))", T_SCOPE) - .addJavadoc("Creates an API for building operations in the provided environment\n") + .addJavadoc( + "Creates an API for building operations in the provided execution environment\n") + .build()); + + opsBuilder.addMethod( + MethodSpec.methodBuilder("create") + .addModifiers(Modifier.PUBLIC, Modifier.STATIC) + .returns(T_OPS) + .addStatement("return new Ops(new $T($T.getDefault()))", T_SCOPE, T_EAGER_SESSION) + .addJavadoc( + "Creates an API for building operations in the default eager execution environment\n\n" + + "

Invoking this method is equivalent to {@code Ops.create(EagerSession.getDefault())}.\n") .build()); return opsBuilder.build(); diff --git a/tensorflow-utils/nio-utils/README.md b/tensorflow-utils/nio-utils/README.md new file mode 100644 index 00000000000..9525fc5d824 --- /dev/null +++ b/tensorflow-utils/nio-utils/README.md @@ -0,0 +1,163 @@ +# TensorFlow NIO Utility Library + +## Introduction + +TensorFlow NIO utility library helps manipulating large N-dimensional data records in the JVM +runtime environment by providing an intuitive API on top of linear memory segments commonly +used, such as standard arrays or JDK NIO buffers. + +The need of additional utilities to handle those data structures became obvious when users observed +slow performances by using standard multidimensional arrays in Java, resulting from the +non-contiguous storage of the data and the multiple dereferences required to access the values. +Providing such data in a contiguous JDK NIO buffer can improve the performances but at the cost of +difficult manipulation of the data and still being limited by the use of 32-bits indices. + +TensorFlow NIO solves these problems by: + +* Supporting 64-bits indexation, theoretically allowing the storage and manipulation of data records +up to 8216 PB +* Providing an API (`NdArray`) for manipulating linear memory segments as multidimensional data +structures +* Serializing and deserializing data of any type (i.e. not only primitive types, as with the JDK NIO +utilities) + +It is important to note that the TensorFlow NIO library does not depend on any other TensorFlow +runtime libraries, thus can used easily by any other projects who wants to benifits from its +features. For example, an instance of `NdArray` could easily be passed from one library to another +for sharing data. + +To import TensorFlow NIO in your project, simply add the following dependency: +```xml + + org.tensorflow + tensorflow-utils-nio + 0.1.0-SNAPSHOT + +``` + +## Usage + +Note: For convenience, the helper interface `StaticApi` is providing access to most of the important +features of this library in a more readable fashion. It is suggested to import static helpers of +this interface in every class working with TensorFlow NIO as follow. +```java +import static org.tensorflow.nio.StaticApi.*; +``` +All examples of this README page are based on those imports. + +### Data Buffers + +In TensorFlow NIO library, data is stored in a `DataBuffer`, which can be seen as an extension to +the JDK NIO `Buffer` objects but with the addition of 64-bits indexation support and usage of +generic parametrization useful when the actual type of the buffer is unknown. + +```java +// Allocate a buffer of 4K int values +IntDataBuffer bufferA = bufferOfInts(4096L); +assertEquals(4096L, bufferA.size()); + +// Write an int array at the beginning of the buffer +bufferA.put(new int[] { 1, 2, 3 }); +assertEquals(3L, bufferA.position()); +assertEquals(3, bufferA.getInt(2)); + +// Slice buffer after first value +IntDataBuffer bufferB = bufferA.position(1).slice(); +assertEquals(4095L, bufferB.size()); +assertEquals(0L, bufferB.position()); +assertEquals(2, bufferB.getInt(0)); + +// Wrap an int array into a data buffer +IntDataBuffer bufferC = bufferOf(new int[] { 10, 20, 30, 40 }, false); +assertEquals(4L, bufferC.size()); +assertEquals(40, bufferC.getInt(3)); + +// Join buffers together +IntDataBuffer bufferBC = DataBuffers.join(bufferB, bufferC); +assertEquals(4099L, bufferBC.size()); +assertEquals(2, bufferBC.getInt(0)); +assertEquals(40, bufferBC.getInt(bufferBC.size() - 1)); +``` + +### ND Arrays + +TensorFlow NIO provides an interface called `NdArray` for wrapping up a `DataBuffer` (physically +or logically contiguous) to expose utilities for traversing, reading or writing data in a +multi-dimensional space. + +```java +// Allocating a 3D matrix of 2x3x2 +IntNdArray matrix3d = ndArrayOfInts(shape(2, 3, 2)); +assertEquals(3, matrix3d.rank()); + +// Initializing 3D matrix data with vectors from the first dimension (index 0) +matrix3d.elements(0).forEach(matrix -> { + assertEquals(2, matrix.rank()); + assertEquals(shape(3, 2), matrix.shape()); + matrix.set(vector(1, 2), 0).set(vector(3, 4), 1).set(vector(5, 6), 2); +}); + +// Visit all scalars of 3D matrix, printing their coordinates and value +matrix3d.scalars().forEachIdx((coords, scalar) -> + System.out.println("Scalar at " + Arrays.toString(coords) + " has value " + scalar.getInt()) +); + +// Retrieving the second vector of the first matrix +IntNdArray vector = matrix3d.get(0, 1); +assertEquals(1, vector.rank()); + +// Rewriting the values of the vector using a primitive array +vector.write(new int[] { 7, 8 }); +assertEquals(7, matrix3d.getInt(0, 1, 0)); +assertEquals(8, matrix3d.getInt(0, 1, 1)); + +// Slicing the 3D matrix so we only keep the second element of the second dimension +IntNdArray slice = matrix3d.slice(all(), at(1)); +assertEquals(2, slice.rank()); +assertEquals(shape(2, 2), slice.shape()); +assertEquals(7, slice.getInt(0, 0)); // (0, 1, 0) in the original matrix +assertEquals(3, slice.getInt(1, 0)); // (1, 1, 0) in the original matrix +``` + +## Integration with TensorFlow + +Like previously stated, TensorFlow NIO is independent of any other TensorFlow runtime library, +making it a good choice for manipulating multi-dimensional data structures from anywhere. But here +is how it is actually used by the [TensorFlow Core API](https://github.com/tensorflow/java/tree/master/tensorflow-core/tensorflow-core-api) +to map and manipulate tensor data. + +```java +// Allocate a tensor of 32-bits integer of the shape (2, 3, 2) +Tensor tensor = TInt32.tensorOfShape(2, 3, 2); + +// Access tensor memory directly +IntNdArray tensorData = tensor.data(); +assertEquals(3, tensorData.rank()); +assertEquals(12, tensorData.size()); + +try (EagerSession session = EagerSession.create()) { + Ops tf = Ops.create(session); + + // Initialize tensor memory with zeros + tensorData.write(bufferOfInts(tensorData.size())); + tensorData.scalars().forEach(scalar -> + assertEquals(0, scalar.getInt()) + ); + Constant x = tf.constant(tensor); // take snapshot of `tensor` with all zeros + + // Initialize tensor memory with all ones + int[] ones = new int[(int)tensorData.size()]; + Arrays.fill(ones, 1); + tensorData.write(ones); + tensorData.scalars().forEach(scalar -> + assertEquals(1, scalar.getInt()) + ); + Constant y = tf.constant(tensor); // take snapshot of `tensor` with all ones + + // Subtract y from x and validate the result + Sub sub = tf.math.sub(x, y); + sub.tensorData().scalars().forEach(scalar -> + assertEquals(-1, scalar.getInt()) + ); +} +``` \ No newline at end of file diff --git a/tensorflow-utils/nio-utils/pom.xml b/tensorflow-utils/nio-utils/pom.xml new file mode 100644 index 00000000000..f81e4904710 --- /dev/null +++ b/tensorflow-utils/nio-utils/pom.xml @@ -0,0 +1,70 @@ + + + 4.0.0 + + + org.tensorflow + tensorflow-utils + 0.1.0-SNAPSHOT + + nio-utils + jar + + NIO Utility Library + Utility library for non-blocking I/O operations on large multidimensional data structures + + + + junit + junit + test + + + org.openjdk.jmh + jmh-core + test + + + org.openjdk.jmh + jmh-generator-annprocess + test + + + + + + + org.apache.maven.plugins + maven-surefire-plugin + 2.22.2 + + 1 + false + -Xmx2G -XX:MaxPermSize=256m + false + + **/*Test.java + + + + + + + diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/StaticApi.java b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/StaticApi.java new file mode 100644 index 00000000000..29da1a0277d --- /dev/null +++ b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/StaticApi.java @@ -0,0 +1,708 @@ +package org.tensorflow.nio; + +import org.tensorflow.nio.buffer.BooleanDataBuffer; +import org.tensorflow.nio.buffer.ByteDataBuffer; +import org.tensorflow.nio.buffer.DataBuffer; +import org.tensorflow.nio.buffer.DataBuffers; +import org.tensorflow.nio.buffer.DoubleDataBuffer; +import org.tensorflow.nio.buffer.FloatDataBuffer; +import org.tensorflow.nio.buffer.IntDataBuffer; +import org.tensorflow.nio.buffer.LongDataBuffer; +import org.tensorflow.nio.buffer.ShortDataBuffer; +import org.tensorflow.nio.nd.BooleanNdArray; +import org.tensorflow.nio.nd.ByteNdArray; +import org.tensorflow.nio.nd.DoubleNdArray; +import org.tensorflow.nio.nd.FloatNdArray; +import org.tensorflow.nio.nd.IntNdArray; +import org.tensorflow.nio.nd.LongNdArray; +import org.tensorflow.nio.nd.NdArray; +import org.tensorflow.nio.nd.NdArrays; +import org.tensorflow.nio.nd.Shape; +import org.tensorflow.nio.nd.ShortNdArray; +import org.tensorflow.nio.nd.index.Index; +import org.tensorflow.nio.nd.index.Indices; + +/** + * Helper class for instantiating NIO utility objects. + */ +public interface StaticApi { + + /** + * Creates a buffer of objects of type {@code clazz} that can store up to {@code size} values + * + * @param clazz the type of object stored in this buffer + * @param size size of the buffer to allocate + * @return a new buffer + */ + static DataBuffer bufferOf(Class clazz, long size) { + return DataBuffers.of(clazz, size); + } + + /** + * Creates a buffer of bytes that can store up to {@code size} values + * + * @param size size of the buffer to allocate + * @return a new buffer + */ + static ByteDataBuffer bufferOfBytes(long size) { + return DataBuffers.ofBytes(size); + } + + /** + * Creates a buffer of shorts that can store up to {@code size} values + * + * @param size size of the buffer to allocate + * @return a new buffer + */ + static ShortDataBuffer bufferOfShorts(long size) { + return DataBuffers.ofShorts(size); + } + + /** + * Creates a buffer of ints that can store up to {@code size} values + * + * @param size size of the buffer to allocate + * @return a new buffer + */ + static IntDataBuffer bufferOfInts(long size) { + return DataBuffers.ofInts(size); + } + + /** + * Creates a buffer of longs that can store up to {@code size} values + * + * @param size size of the buffer to allocate + * @return a new buffer + */ + static LongDataBuffer bufferOfLongs(long size) { + return DataBuffers.ofLongs(size); + } + + /** + * Creates a buffer of floats that can store up to {@code size} values + * + * @param size size of the buffer to allocate + * @return a new buffer + */ + static FloatDataBuffer bufferOfFloats(long size) { + return DataBuffers.ofFloats(size); + } + + /** + * Creates a buffer of doubles that can store up to {@code size} values + * + * @param size size of the buffer to allocate + * @return a new buffer + */ + static DoubleDataBuffer bufferOfDoubles(long size) { + return DataBuffers.ofDoubles(size); + } + + /** + * Creates a buffer of booleans that can store up to {@code size} values + * + * @param size size of the buffer to allocate + * @return a new buffer + */ + static BooleanDataBuffer bufferOfBooleans(long size) { + return DataBuffers.ofBooleans(size); + } + + /** + * Wraps an array of objects into a data buffer. + * + * @param array array to wrap + * @param readOnly true if the buffer created must be read-only + * @return a new buffer + */ + static DataBuffer bufferOf(T[] array, boolean readOnly) { + return DataBuffers.wrap(array, readOnly); + } + + /** + * Wraps an array of bytes into a data buffer. + * + * @param array array to wrap + * @param readOnly true if the buffer created must be read-only + * @return a new byte buffer + */ + static ByteDataBuffer bufferOf(byte[] array, boolean readOnly) { + return DataBuffers.wrap(array, readOnly); + } + + /** + * Wraps an array of shorts into a data buffer. + * + * @param array array to wrap + * @param readOnly true if the buffer created must be read-only + * @return a new short buffer + */ + static ShortDataBuffer bufferOf(short[] array, boolean readOnly) { + return DataBuffers.wrap(array, readOnly); + } + + /** + * Wraps an array of ints into a data buffer. + * + * @param array array to wrap + * @param readOnly true if the buffer created must be read-only + * @return a new int buffer + */ + static IntDataBuffer bufferOf(int[] array, boolean readOnly) { + return DataBuffers.wrap(array, readOnly); + } + + /** + * Wraps an array of longs into a data buffer. + * + * @param array array to wrap + * @param readOnly true if the buffer created must be read-only + * @return a long buffer + */ + static LongDataBuffer bufferOf(long[] array, boolean readOnly) { + return DataBuffers.wrap(array, readOnly); + } + + /** + * Wraps an array of floats into a data buffer. + * + * @param array array to wrap + * @param readOnly true if the buffer created must be read-only + * @return a new float buffer + */ + static FloatDataBuffer bufferOf(float[] array, boolean readOnly) { + return DataBuffers.wrap(array, readOnly); + } + + /** + * Wraps an array of doubles into a data buffer. + * + * @param array array to wrap + * @param readOnly true if the buffer created must be read-only + * @return a new double buffer + */ + static DoubleDataBuffer bufferOf(double[] array, boolean readOnly) { + return DataBuffers.wrap(array, readOnly); + } + + /** + * Creates an N-dimensional array of the given shape. + * + *

All values are initialized to zeros. + * + * @param clazz class of the data to be stored in this array + * @param shape shape of the array + * @return new N-dimensional array + * @throws IllegalArgumentException if shape is null or has unknown dimensions + */ + static NdArray ndArrayOf(Class clazz, Shape shape) { + return NdArrays.of(clazz, shape); + } + + /** + * Creates a byte N-dimensional array of the given shape. + * + *

All values are initialized to zeros. + * + * @param shape shape of the array + * @return new byte N-dimensional array + * @throws IllegalArgumentException if shape is null or has unknown dimensions + */ + static ByteNdArray ndArrayOfBytes(Shape shape) { + return NdArrays.ofBytes(shape); + } + + /** + * Creates a short N-dimensional array of the given shape. + * + *

All values are initialized to zeros. + * + * @param shape shape of the array + * @return new short N-dimensional array + * @throws IllegalArgumentException if shape is null or has unknown dimensions + */ + static ShortNdArray ndArrayOfShorts(Shape shape) { + return NdArrays.ofShorts(shape); + } + + /** + * Creates an int N-dimensional array of the given shape. + * + *

All values are initialized to zeros. + * + * @param shape shape of the array + * @return new int N-dimensional array + * @throws IllegalArgumentException if shape is null or has unknown dimensions + */ + static IntNdArray ndArrayOfInts(Shape shape) { + return NdArrays.ofInts(shape); + } + + /** + * Creates a long N-dimensional array of the given shape. + * + *

All values are initialized to zeros. + * + * @param shape shape of the array + * @return new long N-dimensional array + * @throws IllegalArgumentException if shape is null or has unknown dimensions + */ + static LongNdArray ndArrayOfLongs(Shape shape) { + return NdArrays.ofLongs(shape); + } + + /** + * Creates a float N-dimensional array of the given shape. + * + *

All values are initialized to zeros. + * + * @param shape shape of the array + * @return new float N-dimensional array + * @throws IllegalArgumentException if shape is null or has unknown dimensions + */ + static FloatNdArray ndArrayOfFloats(Shape shape) { + return NdArrays.ofFloats(shape); + } + + /** + * Creates a double N-dimensional array of the given shape. + * + *

All values are initialized to zeros. + * + * @param shape shape of the array + * @return new double N-dimensional array + * @throws IllegalArgumentException if shape is null or has unknown dimensions + */ + static DoubleNdArray ndArrayOfDoubles(Shape shape) { + return NdArrays.ofDoubles(shape); + } + + /** + * Creates a boolean N-dimensional array of the given shape. + * + *

All values are initialized to zeros. + * + * @param shape shape of the array + * @return new boolean N-dimensional array + * @throws IllegalArgumentException if shape is null or has unknown dimensions + */ + static BooleanNdArray ndArrayOfBooleans(Shape shape) { + return NdArrays.ofBooleans(shape); + } + + /** + * Wraps a buffer in an N-dimensional array of a given shape. + * + * @param buffer buffer to wrap + * @param shape shape of the array + * @return new N-dimensional array + * @throws IllegalArgumentException if shape is null, has unknown dimensions or has size bigger + * in the buffer size + */ + static NdArray ndArrayOf(DataBuffer buffer, Shape shape) { + return NdArrays.wrap(buffer, shape); + } + + /** + * Wraps a byte buffer in an N-dimensional array of a given shape. + * + * @param buffer buffer to wrap + * @param shape shape of the array + * @return new byte N-dimensional array + * @throws IllegalArgumentException if shape is null, has unknown dimensions or has size bigger + * in the buffer size + */ + static ByteNdArray ndArrayOf(ByteDataBuffer buffer, Shape shape) { + return NdArrays.wrap(buffer, shape); + } + + /** + * Wraps a short buffer in an N-dimensional array of a given shape. + * + * @param buffer buffer to wrap + * @param shape shape of the array + * @return new short N-dimensional array + * @throws IllegalArgumentException if shape is null, has unknown dimensions or has size bigger + * in the buffer size + */ + static ShortNdArray ndArrayOf(ShortDataBuffer buffer, Shape shape) { + return NdArrays.wrap(buffer, shape); + } + + /** + * Wraps an int buffer in an N-dimensional array of a given shape. + * + * @param buffer buffer to wrap + * @param shape shape of the array + * @return new int N-dimensional array + * @throws IllegalArgumentException if shape is null, has unknown dimensions or has size bigger + * in the buffer size + */ + static IntNdArray ndArrayOf(IntDataBuffer buffer, Shape shape) { + return NdArrays.wrap(buffer, shape); + } + + /** + * Wraps a long buffer in an N-dimensional array of a given shape. + * + * @param buffer buffer to wrap + * @param shape shape of the array + * @return new long N-dimensional array + * @throws IllegalArgumentException if shape is null, has unknown dimensions or has size bigger + * in the buffer size + */ + static LongNdArray ndArrayOf(LongDataBuffer buffer, Shape shape) { + return NdArrays.wrap(buffer, shape); + } + + /** + * Wraps a float buffer in an N-dimensional array of a given shape. + * + * @param buffer buffer to wrap + * @param shape shape of the array + * @return new float N-dimensional array + * @throws IllegalArgumentException if shape is null, has unknown dimensions or has size bigger + * in the buffer size + */ + static FloatNdArray ndArrayOf(FloatDataBuffer buffer, Shape shape) { + return NdArrays.wrap(buffer, shape); + } + + /** + * Wraps a double buffer in an N-dimensional array of a given shape. + * + * @param buffer buffer to wrap + * @param shape shape of the array + * @return new double N-dimensional array + * @throws IllegalArgumentException if shape is null, has unknown dimensions or has size bigger + * in the buffer size + */ + static DoubleNdArray ndArrayOf(DoubleDataBuffer buffer, Shape shape) { + return NdArrays.wrap(buffer, shape); + } + + /** + * Wraps a boolean buffer in an N-dimensional array of a given shape. + * + * @param buffer buffer to wrap + * @param shape shape of the array + * @return new boolean N-dimensional array + * @throws IllegalArgumentException if shape is null, has unknown dimensions or has size bigger + * in the buffer size + */ + static BooleanNdArray ndArrayOf(BooleanDataBuffer buffer, Shape shape) { + return NdArrays.wrap(buffer, shape); + } + + /** + * Creates scalar (rank 0) initialized with the given value. + * + * @param value scalar value + * @return new scalar + */ + static NdArray scalarOf(T value) { + return NdArrays.scalarOf(value); + } + + /** + * Creates byte scalar (rank 0) initialized with the given value. + * + * @param value scalar value + * @return new byte scalar + */ + static ByteNdArray scalar(byte value) { + return NdArrays.scalar(value); + } + + /** + * Creates short scalar (rank 0) initialized with the given value. + * + * @param value scalar value + * @return new short scalar + */ + static ShortNdArray scalar(short value) { + return NdArrays.scalar(value); + } + + /** + * Creates int scalar (rank 0) initialized with the given value. + * + * @param value scalar value + * @return new int scalar + */ + static IntNdArray scalar(int value) { + return NdArrays.scalar(value); + } + + /** + * Creates long scalar (rank 0) initialized with the given value. + * + * @param value scalar value + * @return new long scalar + */ + static LongNdArray scalar(long value) { + return NdArrays.scalar(value); + } + + /** + * Creates float scalar (rank 0) initialized with the given value. + * + * @param value scalar value + * @return new float scalar + */ + static FloatNdArray scalar(float value) { + return NdArrays.scalar(value); + } + + /** + * Creates double scalar (rank 0) initialized with the given value. + * + * @param value scalar value + * @return new double scalar + */ + static DoubleNdArray scalar(double value) { + return NdArrays.scalar(value); + } + + /** + * Creates boolean scalar (rank 0) initialized with the given value. + * + * @param value scalar value + * @return new boolean scalar + */ + static BooleanNdArray scalar(boolean value) { + return NdArrays.scalar(value); + } + + /** + * Creates a vector (rank 1) initialized with the given values. + * + * @param values vector values + * @return new vector + * @throws IllegalArgumentException if values is null + */ + static NdArray vectorOf(T... values) { + return NdArrays.vectorOf(values); + } + + /** + * Creates a byte vector (rank 1) initialized with the given values. + * + * @param values vector values + * @return new byte vector + * @throws IllegalArgumentException if values is null + */ + static ByteNdArray vector(byte... values) { + return NdArrays.vector(values); + } + + /** + * Creates a short vector (rank 1) initialized with the given values. + * + * @param values vector values + * @return new short vector + * @throws IllegalArgumentException if values is null + */ + static ShortNdArray vector(short... values) { + return NdArrays.vector(values); + } + + /** + * Creates an int vector (rank 1) initialized with the given values. + * + * @param values vector values + * @return new int vector + * @throws IllegalArgumentException if values is null + */ + static IntNdArray vector(int... values) { + return NdArrays.vector(values); + } + + /** + * Creates a long vector (rank 1) initialized with the given values. + * + * @param values vector values + * @return new long vector + * @throws IllegalArgumentException if values is null + */ + static LongNdArray vector(long... values) { + return NdArrays.vector(values); + } + + /** + * Creates a float vector (rank 1) initialized with the given values. + * + * @param values vector values + * @return new float vector + * @throws IllegalArgumentException if values is null + */ + static FloatNdArray vector(float... values) { + return NdArrays.vector(values); + } + + /** + * Creates a double vector (rank 1) initialized with the given values. + * + * @param values vector values + * @return new double vector + * @throws IllegalArgumentException if values is null + */ + static DoubleNdArray vector(double... values) { + return NdArrays.vector(values); + } + + /** + * Creates a boolean vector (rank 1) initialized with the given values. + * + * @param values vector values + * @return new boolean vector + * @throws IllegalArgumentException if values is null + */ + static BooleanNdArray vector(boolean... values) { + return NdArrays.vector(values); + } + + /** + * Create a Shape representing an N-dimensional value. + * + * @param dimensionSize size of each dimension in the shape, {@link Shape#UNKNOWN_SIZE} if unknown + * @see Shape#make(long...) + */ + static Shape shape(long... dimensionSize) { + return Shape.make(dimensionSize); + } + + /** + * A coordinate that selects a specific element on a given dimension. + * + * @param coord coordinate of the element on the indexed axis + * @return index + * @see Indices#at(long) + */ + static Index at(long coord) { + return Indices.at(coord); + } + + /** + * A coordinate that selects a specific element on a given dimension. + * + * @param coord scalar indicating the coordinate of the element on the indexed axis + * @return index + * @throws org.tensorflow.nio.nd.IllegalRankException if {@code coord} is not a scalar (rank 0) + * @see Indices#at(NdArray) + */ + static Index at(NdArray coord) { + return Indices.at(coord); + } + + /** + * An index that returns all elements of a dimension in the original order. + * + * @return index + * @see Indices#all() + */ + static Index all() { + return Indices.all(); + } + + /** + * An index that returns only specific elements on a given dimension. + * + * @param coords coordinate of the elements in the sequence + * @return index + * @see Indices#seq(long...) + */ + static Index seq(long... coords) { + return Indices.seq(coords); + } + + /** + * An index that returns only specific elements on a given dimension. + * + * @param coords vector of coordinates of the elements in the sequence + * @return index + * @throws org.tensorflow.nio.nd.IllegalRankException if {@code coord} is not a vector (rank 1) + * @see Indices#seq(NdArray) + */ + static Index seq(NdArray coords) { + return Indices.seq(coords); + } + + /** + * An index that returns only specific elements on a given dimension. + * + * @return index + * @see Indices#even() + */ + static Index even() { + return Indices.even(); + } + + /** + * An index that returns only elements found at an odd position in the + * original dimension. + * + * @return index + * @see Indices#odd() + */ + static Index odd() { + return Indices.odd(); + } + + /** + * An index that skips a fixed amount of coordinates between each values returned. + * + * @param stepLength the number of elements between each steps + * @return index + * @see Indices#step(long) + */ + static Index step(long stepLength) { + return Indices.step(stepLength); + } + + /** + * An index that returns only elements on a given dimension starting at a + * specific coordinate. + * + * @param start coordinate of the first element of the sequence + * @return index + * @see Indices#from(long) + */ + static Index from(long start) { + return Indices.from(start); + } + + /** + * An index that returns only elements on a given dimension up to a + * specific coordinate. + * + * @param end coordinate of the last element of the sequence (exclusive) + * @return index + * @see Indices#to(long) + */ + static Index to(long end) { + return Indices.to(end); + } + + /** + * An index that returns only elements on a given dimension between two coordinates. + * + * @param start coordinate of the first element of the sequence + * @param end coordinate of the last element of the sequence (exclusive) + * @return index + * @see Indices#range(long, long) + */ + static Index range(long start, long end) { + return Indices.range(start, end); + } + + /** + * An index that returns only elements on a given dimension between two coordinates. + * + * @return index + * @see Indices#flip() + */ + static Index flip() { + return Indices.flip(); + } +} diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/BooleanDataBuffer.java b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/BooleanDataBuffer.java new file mode 100644 index 00000000000..d86839ab386 --- /dev/null +++ b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/BooleanDataBuffer.java @@ -0,0 +1,153 @@ +/* + Copyright 2019 The TensorFlow Authors. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ======================================================================= + */ +package org.tensorflow.nio.buffer; + +import java.nio.BufferOverflowException; +import java.nio.BufferUnderflowException; +import java.nio.ReadOnlyBufferException; + +/** + * A {@link DataBuffer} of booleans. + */ +public interface BooleanDataBuffer extends DataBuffer { + + /** + * Reads the boolean at the given index. + * + * @param index the index from which the float will be read + * @return the boolean at the given index + * @throws IndexOutOfBoundsException if index is negative or not smaller than the buffer size + */ + boolean getBoolean(long index); + + /** + * Writes the given boolean into this buffer at the given index. + * + * @param value the boolean to be written + * @param index the index at which the value will be written + * @return this buffer + * @throws IndexOutOfBoundsException if index is negative or not smaller than the buffer size + * @throws ReadOnlyBufferException if this buffer is read-only + */ + BooleanDataBuffer setBoolean(boolean value, long index); + + /** + * Bulk get method, using boolean arrays. + *

+ * This method transfers values from this buffer into the given destination array. If there are + * fewer values in the buffer than are required to satisfy the request, that is, if + * {@code dst.length > size()}, then no values are transferred and a + * BufferUnderflowException is thrown. + *

+ * Otherwise, this method copies {@code n = dst.length} values from this buffer into the given + * array. + * + * @param dst the array into which values are to be written + * @return this buffer + * @throws BufferUnderflowException if there are not enough values to copy from this buffer + */ + default BooleanDataBuffer read(boolean[] dst) { + return read(dst, 0, dst.length); + } + + /** + * Bulk get method, using boolean arrays. + *

+ * This method transfers values from this buffer into the given destination array. If there are + * fewer values in the buffer than are required to satisfy the request, that is, if + * {@code length > size()}, then no values are transferred and a + * BufferUnderflowException is thrown. + *

+ * Otherwise, this method copies {@code n = length} values from this buffer into the given array + * starting at the given offset. + * + * @param dst the array into which values are to be written + * @param offset the offset within the array of the first value to be written; must be + * non-negative and no larger than {@code dst.length} + * @param length the maximum number of values to be written to the given array; must be + * non-negative and no larger than {@code dst.length - offset} + * @return this buffer + * @throws BufferUnderflowException if there are fewer than length values remaining in this buffer + * @throws IndexOutOfBoundsException if the preconditions on the offset and length parameters do + * not hold + */ + BooleanDataBuffer read(boolean[] dst, int offset, int length); + + /** + * Bulk put method, using boolean arrays. + *

+ * This method transfers the values in the given source array into this buffer. If there are + * more values in the source array than in this buffer, that is, if + * {@code src.length > size()}, then no values are transferred and a + * BufferOverflowException is thrown. + *

+ * Otherwise, this method copies {@code n = src.length} values from the given array. + * + * @param src the source array from which values are to be read + * @return this buffer + * @throws BufferOverflowException if there is insufficient space in this buffer for the values in + * the source array + * @throws ReadOnlyBufferException if this buffer is read-only + */ + default BooleanDataBuffer write(boolean[] src) { + return write(src, 0, src.length); + } + + /** + * Bulk put method, using boolean arrays. + *

+ * This method transfers the values in the given source array into this buffer. If there are + * more values in the source array than in this buffer, that is, if + * {@code length > size()}, then no values are transferred and a + * BufferOverflowException is thrown. + *

+ * Otherwise, this method copies {@code n = length} values from the given array into this buffer, + * starting at the given offset. + * + * @param src the source array from which values are to be read + * @param offset the offset within the array of the first value to be read; must be non-negative + * and no larger than {@code src.length} + * @param length the number of values to be read from the given array; must be non-negative and no + * larger than {@code src.length - offset} + * @return this buffer + * @throws BufferOverflowException if there is insufficient space in this buffer for the values in + * the source array + * @throws IndexOutOfBoundsException if the preconditions on the offset and length parameters do + * not hold + * @throws ReadOnlyBufferException if this buffer is read-only + */ + BooleanDataBuffer write(boolean[] src, int offset, int length); + + @Override + default Boolean get(long index) { + return getBoolean(index); + } + + @Override + default BooleanDataBuffer set(Boolean value, long index) { + return setBoolean(value, index); + } + + @Override + BooleanDataBuffer copyTo(DataBuffer dst, long size); + + @Override + BooleanDataBuffer offset(long index); + + @Override + BooleanDataBuffer narrow(long size); +} diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/ByteDataBuffer.java b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/ByteDataBuffer.java new file mode 100644 index 00000000000..b7afa8b1f28 --- /dev/null +++ b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/ByteDataBuffer.java @@ -0,0 +1,153 @@ +/* + Copyright 2019 The TensorFlow Authors. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ======================================================================= + */ +package org.tensorflow.nio.buffer; + +import java.nio.BufferOverflowException; +import java.nio.BufferUnderflowException; +import java.nio.ReadOnlyBufferException; + +/** + * A {@link DataBuffer} of bytes. + */ +public interface ByteDataBuffer extends DataBuffer { + + /** + * Reads the byte at the given index. + * + * @param index the index from which the float will be read + * @return the byte at the given index + * @throws IndexOutOfBoundsException if index is negative or not smaller than the buffer size + */ + byte getByte(long index); + + /** + * Writes the given byte into this buffer at the given index. + * + * @param value the byte to be written + * @param index the index at which the value will be written + * @return this buffer + * @throws IndexOutOfBoundsException if index is negative or not smaller than the buffer size + * @throws ReadOnlyBufferException if this buffer is read-only + */ + ByteDataBuffer setByte(byte value, long index); + + /** + * Bulk get method, using byte arrays. + *

+ * This method transfers values from this buffer into the given destination array. If there are + * fewer values in the buffer than are required to satisfy the request, that is, if + * {@code dst.length > size()}, then no values are transferred and a + * BufferUnderflowException is thrown. + *

+ * Otherwise, this method copies {@code n = dst.length} values from this buffer into the given + * array. + * + * @param dst the array into which values are to be written + * @return this buffer + * @throws BufferUnderflowException if there are not enough values to copy from this buffer + */ + default ByteDataBuffer read(byte[] dst) { + return read(dst, 0, dst.length); + } + + /** + * Bulk get method, using byte arrays. + *

+ * This method transfers values from this buffer into the given destination array. If there are + * fewer values in the buffer than are required to satisfy the request, that is, if + * {@code length > size()}, then no values are transferred and a + * BufferUnderflowException is thrown. + *

+ * Otherwise, this method copies {@code n = length} values from this buffer into the given array + * starting at the given offset. + * + * @param dst the array into which values are to be written + * @param offset the offset within the array of the first value to be written; must be + * non-negative and no larger than {@code dst.length} + * @param length the maximum number of values to be written to the given array; must be + * non-negative and no larger than {@code dst.length - offset} + * @return this buffer + * @throws BufferUnderflowException if there are fewer than length values remaining in this buffer + * @throws IndexOutOfBoundsException if the preconditions on the offset and length parameters do + * not hold + */ + ByteDataBuffer read(byte[] dst, int offset, int length); + + /** + * Bulk put method, using byte arrays. + *

+ * This method transfers the values in the given source array into this buffer. If there are + * more values in the source array than in this buffer, that is, if + * {@code src.length > size()}, then no values are transferred and a + * BufferOverflowException is thrown. + *

+ * Otherwise, this method copies {@code n = src.length} values from the given array. + * + * @param src the source array from which values are to be read + * @return this buffer + * @throws BufferOverflowException if there is insufficient space in this buffer for the values in + * the source array + * @throws ReadOnlyBufferException if this buffer is read-only + */ + default ByteDataBuffer write(byte[] src) { + return write(src, 0, src.length); + } + + /** + * Bulk put method, using byte arrays. + *

+ * This method transfers the values in the given source array into this buffer. If there are + * more values in the source array than in this buffer, that is, if + * {@code length > size()}, then no values are transferred and a + * BufferOverflowException is thrown. + *

+ * Otherwise, this method copies {@code n = length} values from the given array into this buffer, + * starting at the given offset. + * + * @param src the source array from which values are to be read + * @param offset the offset within the array of the first value to be read; must be non-negative + * and no larger than {@code src.length} + * @param length the number of values to be read from the given array; must be non-negative and no + * larger than {@code src.length - offset} + * @return this buffer + * @throws BufferOverflowException if there is insufficient space in this buffer for the values in + * the source array + * @throws IndexOutOfBoundsException if the preconditions on the offset and length parameters do + * not hold + * @throws ReadOnlyBufferException if this buffer is read-only + */ + ByteDataBuffer write(byte[] src, int offset, int length); + + @Override + default Byte get(long index) { + return getByte(index); + } + + @Override + default ByteDataBuffer set(Byte value, long index) { + return setByte(value, index); + } + + @Override + ByteDataBuffer copyTo(DataBuffer dst, long size); + + @Override + ByteDataBuffer offset(long index); + + @Override + ByteDataBuffer narrow(long size); +} diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/DataBuffer.java b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/DataBuffer.java new file mode 100644 index 00000000000..51e2afcf3b5 --- /dev/null +++ b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/DataBuffer.java @@ -0,0 +1,138 @@ +/* + Copyright 2019 The TensorFlow Authors. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ======================================================================= + */ + +package org.tensorflow.nio.buffer; + +import java.nio.ReadOnlyBufferException; + +/** + * A container of data of a specific type. + * + *

Instances of {@code DataBuffer} map native or heap memory segments to a linear view that + * supports: + *

    + *
  • 64-bits indexation, allowing to work with a single buffer with a size up to + * approximately 263 bytes
  • + *
  • Storage of object of any types and not only primitives
  • + *
  • Generic types allows to work directly with boxed types as well, which does not require + * explicit buffer types as with the standard JDK buffers. + *
+ * It is important to note that there is no guarantee the memory managed by a {@code DataBuffer} + * is linear, specially when dealing with non-primitive types or large buffers. + * + * @param type of data stored in this buffer + */ +public interface DataBuffer { + + /** + * Size of the buffer, in elements. + *

+ * For exemple, in case of a byte buffer, this value is equal to the number of bytes this buffer + * can hold. For an integer buffer, it is equal to the number of integers, therefore the size + * in bytes of this buffer is {@code size() * Integer.BYTES}. + * + * @return the buffer size + */ + long size(); + + /** + * Tells whether or not this buffer is backed by an accessible array. + * + * @return true if, and only if, this buffer is read-only + */ + boolean isReadOnly(); + + /** + * Reads the value at the given index. + * + * Important: Usage of this method should be limited to buffers of non-primitive types or + * when the data type is not deterministically known by the caller. In any other case, prefer + * the usage of its primitive variant which will significantly improve performances + * (e.g. {@code IntDataBuffer.getInt(idx)} + * + * @param index the index from which the float will be read + * @return the value at the given index + * @throws IndexOutOfBoundsException if index is negative or not smaller than the buffer size + */ + T get(long index); + + /** + * Writes the given value into this buffer at the given index. + * + * Important: Usage of this method should be limited to buffers of non-primitive types or + * when the data type is not deterministically known by the caller. In any other case, prefer + * the usage of its primitive variant which will significantly improve performances + * (e.g. {@code IntDataBuffer.setInt(idx)} + * + * @param value the value to be written + * @param index the index at which the value will be written + * @return this buffer + * @throws IndexOutOfBoundsException if index is negative or not smaller than the buffer size + * @throws ReadOnlyBufferException if this buffer is read-only + */ + DataBuffer set(T value, long index); + + /** + * Copy data of this buffer in the given buffer. + *

+ * If there are more values to copy than the destination buffer size, i.e. + * {@code size > dst.size()}, then no values are transferred and a + * BufferOverflowException is thrown. On the other hand, if there are more values to copy that + * the source buffer size, i.e. {@code > src.size()}, then a BufferUnderfloatException is thrown. + *

+ * Otherwise, this method copies {@code n = size} values from this buffer into + * the destination buffer. + * + * @param dst the destination buffer into which values are copied; must not be this buffer + * @param size number of values to copy to the destination buffer + * @return this buffer + * @throws IllegalArgumentException if the destination buffer is this buffer + * @throws ReadOnlyBufferException if the destination buffer is read-only + * @throws java.nio.BufferOverflowException if there is not enough space in destination buffer + * @throws java.nio.BufferUnderflowException if there are not enough values in the source buffer + */ + DataBuffer copyTo(DataBuffer dst, long size); + + /** + * Creates a new buffer whose content is a shared subsequence of this buffer's content, starting + * at the given index. + *

+ * The index must not be greater than this buffer size. Changes to this buffer's content will + * be visible in the new buffer and vice versa. The new buffer will be read-only if, and only if, + * this buffer is read-only. + * + * @param index index of the first value of the new buffer created, must not be greater than + * {@code size()} + * @return the new buffer + * @throws IllegalArgumentException if index do not pass validation checks + */ + DataBuffer offset(long index); + + /** + * Creates a new buffer whose content is a shared subsequence of this buffer's content, whose + * size is set to the given value. + *

+ * The new size must not be greater than this buffer size. Changes to this buffer's + * content will be visible in the new buffer and vice versa. The new buffer will be read-only if, + * and only if, this buffer is read-only. + * + * @param size size of this new buffer, must not be greater than {@code size()} + * @return the new buffer + * @throws IllegalArgumentException if size value do not pass validation checks + */ + DataBuffer narrow(long size); +} diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/DataBuffers.java b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/DataBuffers.java new file mode 100644 index 00000000000..33752a27987 --- /dev/null +++ b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/DataBuffers.java @@ -0,0 +1,519 @@ +/* + Copyright 2019 The TensorFlow Authors. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ======================================================================= + */ +package org.tensorflow.nio.buffer; + +import java.nio.ByteBuffer; +import java.nio.DoubleBuffer; +import java.nio.FloatBuffer; +import java.nio.IntBuffer; +import java.nio.LongBuffer; +import java.nio.ShortBuffer; +import org.tensorflow.nio.buffer.adapter.BooleanDataAdapter; +import org.tensorflow.nio.buffer.adapter.DataAdapter; +import org.tensorflow.nio.buffer.adapter.DoubleDataAdapter; +import org.tensorflow.nio.buffer.adapter.FloatDataAdapter; +import org.tensorflow.nio.buffer.adapter.IntDataAdapter; +import org.tensorflow.nio.buffer.adapter.LongDataAdapter; +import org.tensorflow.nio.buffer.adapter.ShortDataAdapter; +import org.tensorflow.nio.buffer.impl.jdk.ByteJdkDataBuffer; +import org.tensorflow.nio.buffer.impl.jdk.DoubleJdkDataBuffer; +import org.tensorflow.nio.buffer.impl.jdk.FloatJdkDataBuffer; +import org.tensorflow.nio.buffer.impl.jdk.IntJdkDataBuffer; +import org.tensorflow.nio.buffer.impl.jdk.LongJdkDataBuffer; +import org.tensorflow.nio.buffer.impl.jdk.ShortJdkDataBuffer; +import org.tensorflow.nio.buffer.impl.misc.ArrayDataBuffer; +import org.tensorflow.nio.buffer.impl.misc.BitSetDataBuffer; +import org.tensorflow.nio.buffer.impl.misc.BooleanArrayDataBuffer; +import org.tensorflow.nio.buffer.impl.raw.BooleanRawDataBuffer; +import org.tensorflow.nio.buffer.impl.raw.ByteRawDataBuffer; +import org.tensorflow.nio.buffer.impl.raw.DoubleRawDataBuffer; +import org.tensorflow.nio.buffer.impl.raw.FloatRawDataBuffer; +import org.tensorflow.nio.buffer.impl.raw.IntRawDataBuffer; +import org.tensorflow.nio.buffer.impl.raw.LongRawDataBuffer; +import org.tensorflow.nio.buffer.impl.raw.ShortRawDataBuffer; +import org.tensorflow.nio.buffer.impl.virtual.BooleanVirtualDataBuffer; +import org.tensorflow.nio.buffer.impl.virtual.DoubleVirtualDataBuffer; +import org.tensorflow.nio.buffer.impl.virtual.FloatVirtualDataBuffer; +import org.tensorflow.nio.buffer.impl.virtual.IntVirtualDataBuffer; +import org.tensorflow.nio.buffer.impl.virtual.LongVirtualDataBuffer; +import org.tensorflow.nio.buffer.impl.virtual.ShortVirtualDataBuffer; +import org.tensorflow.nio.buffer.impl.virtual.VirtualDataBuffer; + +/** + * Helper class for creating {@code DataBuffer} instances. + */ +public final class DataBuffers { + + /** + * Creates a buffer of bytes that can store up to {@code size} values + * + * @param size size of the buffer to allocate + * @return a new buffer + */ + public static ByteDataBuffer ofBytes(long size) { + return unsafeAvailable ? ByteRawDataBuffer.allocate(size) : ByteJdkDataBuffer.allocate(size); + } + + /** + * Wraps an array of bytes into a data buffer. + * + * @param array array to wrap + * @param readOnly true if the buffer created must be read-only + * @return a new buffer + */ + public static ByteDataBuffer wrap(byte[] array, boolean readOnly) { + if (unsafeAvailable) { + return ByteRawDataBuffer.wrap(array, readOnly); + } + ByteBuffer buf = ByteBuffer.wrap(array); + return ByteJdkDataBuffer.wrap(readOnly ? buf.asReadOnlyBuffer() : buf); + } + + /** + * Wraps a JDK byte buffers into a data buffer. + * + * @param buf buffer to wrap + * @return a new buffer + */ + public static ByteDataBuffer wrap(ByteBuffer buf) { + return ByteJdkDataBuffer.wrap(buf); + } + + /** + * Creates a buffer of longs that can store up to {@code size} values + * + * @param size size of the buffer to allocate + * @return a new buffer + */ + public static LongDataBuffer ofLongs(long size) { + return unsafeAvailable ? LongRawDataBuffer.allocate(size) : LongJdkDataBuffer.allocate(size); + } + + /** + * Creates a virtual buffer of longs that can store up to {@code size} values. + * + *

The provided adapter is used to create the long values to/from bytes, allowing custom + * representation of a long. + * + * @param size size of the buffer to allocate + * @param adapter an object converting buffer data to longs + * @return a new buffer + */ + public static LongDataBuffer ofLongs(long size, LongDataAdapter adapter) { + return toLongs(ofBytes(size * adapter.sizeInBytes()), adapter); + } + + /** + * Adapt a physical buffer to a virtual buffer of longs. + * + *

The provided adapter is used to create the long values to/from bytes, allowing custom + * representation of a long integer. + * + * @param buffer the buffer to adapt + * @param adapter an object converting buffer data to integers + * @return a new buffer + */ + public static LongDataBuffer toLongs(ByteDataBuffer buffer, LongDataAdapter adapter) { + return LongVirtualDataBuffer.create(buffer, adapter); + } + + /** + * Wraps an array of longs into a data buffer. + * + * @param array array to wrap + * @param readOnly true if the buffer created must be read-only + * @return a new buffer + */ + public static LongDataBuffer wrap(long[] array, boolean readOnly) { + if (unsafeAvailable) { + return LongRawDataBuffer.wrap(array, readOnly); + } + LongBuffer buf = LongBuffer.wrap(array); + return LongJdkDataBuffer.wrap(readOnly ? buf.asReadOnlyBuffer() : buf); + } + + /** + * Wraps a JDK long buffer into a data buffer. + * + * @param buf buffer to wrap + * @return a new buffer + */ + public static LongDataBuffer wrap(LongBuffer buf) { + return LongJdkDataBuffer.wrap(buf); + } + + /** + * Creates a buffer of integers that can store up to {@code size} values + * + * @param size size of the buffer to allocate + * @return a new buffer + */ + public static IntDataBuffer ofInts(long size) { + return unsafeAvailable ? IntRawDataBuffer.allocate(size) : IntJdkDataBuffer.allocate(size); + } + + /** + * Creates a virtual buffer of integers that can store up to {@code size} values. + * + *

The provided adapter is used to create the integer values to/from bytes, allowing custom + * representation of an integer. + * + * @param size size of the buffer to allocate + * @param adapter an object converting buffer data to integers + * @return a new buffer + */ + public static IntDataBuffer ofInts(long size, IntDataAdapter adapter) { + return toInts(ofBytes(size * adapter.sizeInBytes()), adapter); + } + + /** + * Adapt a physical buffer to a virtual buffer of integers. + * + *

The provided adapter is used to create the integer values to/from bytes, allowing custom + * representation of a integer. + * + * @param buffer the buffer to adapt + * @param adapter an object converting buffer data to integers + * @return a new buffer + */ + public static IntDataBuffer toInts(ByteDataBuffer buffer, IntDataAdapter adapter) { + return IntVirtualDataBuffer.create(buffer, adapter); + } + + /** + * Wraps an array of integers into a data buffer. + * + * @param array array to wrap + * @param readOnly true if the buffer created must be read-only + * @return a new buffer + */ + public static IntDataBuffer wrap(int[] array, boolean readOnly) { + if (unsafeAvailable) { + return IntRawDataBuffer.wrap(array, readOnly); + } + IntBuffer buf = IntBuffer.wrap(array); + return IntJdkDataBuffer.wrap(readOnly ? buf.asReadOnlyBuffer() : buf); + } + + /** + * Wraps a JDK integer buffer into a data buffer. + * + * @param buf buffer to wrap + * @return a new buffer + */ + public static IntDataBuffer wrap(IntBuffer buf) { + return IntJdkDataBuffer.wrap(buf); + } + + /** + * Creates a buffer of shorts that can store up to {@code size} values + * + * @param size size of the buffer to allocate + * @return a new buffer + */ + public static ShortDataBuffer ofShorts(long size) { + return unsafeAvailable ? ShortRawDataBuffer.allocate(size) : ShortJdkDataBuffer.allocate(size); + } + + /** + * Creates a virtual buffer of shorts that can store up to {@code size} values. + * + *

The provided adapter is used to create the short values to/from bytes, allowing custom + * representation of a short. + * + * @param size size of the buffer to allocate + * @return a new buffer + */ + public static ShortDataBuffer ofShorts(long size, ShortDataAdapter adapter) { + return toShorts(ofBytes(size * adapter.sizeInBytes()), adapter); + } + + /** + * Adapt a physical buffer to a virtual buffer of shorts. + * + *

The provided adapter is used to create the short values to/from bytes, allowing custom + * representation of a short. + * + * @param buffer the buffer to adapt + * @param adapter an object converting buffer data to shorts + * @return a new buffer + */ + public static ShortDataBuffer toShorts(ByteDataBuffer buffer, ShortDataAdapter adapter) { + return ShortVirtualDataBuffer.create(buffer, adapter); + } + + /** + * Wraps an array of shorts into a data buffer. + * + * @param array array to wrap + * @param readOnly true if the buffer created must be read-only + * @return a new buffer + */ + public static ShortDataBuffer wrap(short[] array, boolean readOnly) { + if (unsafeAvailable) { + return ShortRawDataBuffer.wrap(array, readOnly); + } + ShortBuffer buf = ShortBuffer.wrap(array); + return ShortJdkDataBuffer.wrap(readOnly ? buf.asReadOnlyBuffer() : buf); + } + + /** + * Wraps a JDK short buffer into a data buffer. + * + * @param buf buffer to wrap + * @return a new buffer + */ + public static ShortDataBuffer wrap(ShortBuffer buf) { + return ShortJdkDataBuffer.wrap(buf); + } + + /** + * Creates a buffer of doubles that can store up to {@code size} values + * + * @param size size of the buffer to allocate + * @return a new buffer + */ + public static DoubleDataBuffer ofDoubles(long size) { + return unsafeAvailable ? DoubleRawDataBuffer.allocate(size) : DoubleJdkDataBuffer.allocate(size); + } + + /** + * Creates a virtual buffer of doubles that can store up to {@code size} values. + * + *

The provided adapter is used to create the double values to/from bytes, allowing custom + * representation of a double. + * + * @param size size of the buffer to allocate + * @param adapter an object converting buffer data to doubles + * @return a new buffer + */ + public static DoubleDataBuffer ofDoubles(long size, DoubleDataAdapter adapter) { + return toDoubles(ofBytes(size * adapter.sizeInBytes()), adapter); + } + + /** + * Adapt a physical buffer to a virtual buffer of doubles. + * + *

The provided adapter is used to create the double values to/from bytes, allowing custom + * representation of a double. + * + * @param buffer the buffer to adapt + * @param adapter an object converting buffer data to doubles + * @return a new buffer + */ + public static DoubleDataBuffer toDoubles(ByteDataBuffer buffer, DoubleDataAdapter adapter) { + return DoubleVirtualDataBuffer.create(buffer, adapter); + } + + /** + * Wraps an array of doubles into a data buffer. + * + * @param array array to wrap + * @param readOnly true if the buffer created must be read-only + * @return a new buffer + */ + public static DoubleDataBuffer wrap(double[] array, boolean readOnly) { + if (unsafeAvailable) { + return DoubleRawDataBuffer.wrap(array, readOnly); + } + DoubleBuffer buf = DoubleBuffer.wrap(array); + return DoubleJdkDataBuffer.wrap(readOnly ? buf.asReadOnlyBuffer() : buf); + } + + /** + * Wraps a JDK double buffer into a data buffer. + * + * @param buf buffer to wrap + * @return a new buffer + */ + public static DoubleDataBuffer wrap(DoubleBuffer buf) { + return DoubleJdkDataBuffer.wrap(buf); + } + + /** + * Creates a buffer of floats that can store up to {@code size} values + * + * @param size size of the buffer to allocate + * @return a new buffer + */ + public static FloatDataBuffer ofFloats(long size) { + return unsafeAvailable ? FloatRawDataBuffer.allocate(size) : FloatJdkDataBuffer.allocate(size); + } + + /** + * Creates a virtual buffer of floats that can store up to {@code size} values. + * + *

The provided adapter is used to create the float values to/from bytes, allowing custom + * representation of a float. + * + * @param size size of the buffer to allocate + * @return a new buffer + */ + public static FloatDataBuffer ofFloats(long size, FloatDataAdapter adapter) { + return toFloats(ofBytes(size * adapter.sizeInBytes()), adapter); + } + + /** + * Adapt a physical buffer to a virtual buffer of floats. + * + *

The provided adapter is used to create the float values to/from bytes, allowing custom + * representation of a float. + * + * @param buffer the buffer to adapt + * @param adapter an object converting buffer data to floats + * @return a new buffer + */ + public static FloatDataBuffer toFloats(ByteDataBuffer buffer, FloatDataAdapter adapter) { + return FloatVirtualDataBuffer.create(buffer, adapter); + } + + /** + * Wraps an array of floats into a data buffer. + * + * @param array array to wrap + * @param readOnly true if the buffer created must be read-only + * @return a new buffer + */ + public static FloatDataBuffer wrap(float[] array, boolean readOnly) { + if (unsafeAvailable) { + return FloatRawDataBuffer.wrap(array, readOnly); + } + FloatBuffer buf = FloatBuffer.wrap(array); + return FloatJdkDataBuffer.wrap(readOnly ? buf.asReadOnlyBuffer() : buf); + } + + /** + * Wraps a JDK float buffer into a data buffer. + * + * @param buf buffer to wrap + * @return a new buffer + */ + public static FloatDataBuffer wrap(FloatBuffer buf) { + return FloatJdkDataBuffer.wrap(buf); + } + + /** + * Creates a buffer of booleans that can store up to {@code size} values + * + * @param size size of the buffer to allocate + * @return a new buffer + */ + public static BooleanDataBuffer ofBooleans(long size) { + return unsafeAvailable ? BooleanRawDataBuffer.allocate(size) : BitSetDataBuffer.allocate(size); + } + + /** + * Creates a virtual buffer of booleans that can store up to {@code size} values. + * + *

The provided adapter is used to create the boolean values to/from bytes, allowing custom + * representation of a boolean. + * + * @param size size of the buffer to allocate + * @return a new buffer + */ + public static BooleanDataBuffer ofBooleans(long size, BooleanDataAdapter adapter) { + return toBooleans(ofBytes(size * adapter.sizeInBytes()), adapter); + } + + /** + * Adapt a physical buffer to a virtual buffer of booleans. + * + *

The provided adapter is used to create the boolean values to/from bytes, allowing custom + * representation of a boolean. + * + * @param buffer the buffer to adapt + * @param adapter an object converting buffer data to booleans + * @return a new buffer + */ + public static BooleanDataBuffer toBooleans(ByteDataBuffer buffer, BooleanDataAdapter adapter) { + return BooleanVirtualDataBuffer.create(buffer, adapter); + } + + /** + * Wraps an array of booleans into a data buffer. + * + * @param array array to wrap + * @param readOnly true if the buffer created must be read-only + * @return a new buffer + */ + public static BooleanDataBuffer wrap(boolean[] array, boolean readOnly) { + if (unsafeAvailable) { + return BooleanRawDataBuffer.wrap(array, readOnly); + } + return BooleanArrayDataBuffer.wrap(array, readOnly); + } + + /** + * Creates a buffer of objects of type {@code clazz` that can store up to `size} values + * + * @param type the type of object stored in this buffer + * @param size size of the buffer to allocate + * @return a new buffer + */ + public static DataBuffer of(Class type, long size) { + return ArrayDataBuffer.allocate(type, size); + } + + /** + * Creates a virtual buffer that can store up to {@code size} values. + * + *

The provided adapter is used to create the values to/from bytes, allowing custom + * representation of this buffer type. + * + * @param size size of the buffer to allocate + * @return a new buffer + */ + public static DataBuffer of(long size, DataAdapter adapter) { + return to(ofBytes(size * adapter.sizeInBytes()), adapter); + } + + /** + * Adapt a physical buffer to a virtual buffer. + * + *

The provided adapter is used to create the values to/from bytes, allowing custom + * representation of this buffer type. + * + * @param buffer the buffer to adapt + * @param adapter an object converting buffer data to booleans + * @return a new buffer + */ + public static DataBuffer to(ByteDataBuffer buffer, DataAdapter adapter) { + return VirtualDataBuffer.create(buffer, adapter); + } + + /** + * Wraps an array of objects into a data buffer. + * + * @param array array to wrap + * @param readOnly true if the buffer created must be read-only + * @return a new buffer + */ + public static DataBuffer wrap(T[] array, boolean readOnly) { + return ArrayDataBuffer.wrap(array, readOnly); + } + + private static boolean unsafeAvailable; + + static { + try { + Class.forName("sun.misc.Unsafe"); + unsafeAvailable = true; + } catch (ClassNotFoundException e) { + unsafeAvailable = false; + } + } +} diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/DoubleDataBuffer.java b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/DoubleDataBuffer.java new file mode 100644 index 00000000000..132bdf25178 --- /dev/null +++ b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/DoubleDataBuffer.java @@ -0,0 +1,153 @@ +/* + Copyright 2019 The TensorFlow Authors. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ======================================================================= + */ +package org.tensorflow.nio.buffer; + +import java.nio.BufferOverflowException; +import java.nio.BufferUnderflowException; +import java.nio.ReadOnlyBufferException; + +/** + * A {@link DataBuffer} of doubles. + */ +public interface DoubleDataBuffer extends DataBuffer { + + /** + * Reads the double at the given index. + * + * @param index the index from which the float will be read + * @return the double at the given index + * @throws IndexOutOfBoundsException if index is negative or not smaller than the buffer size + */ + double getDouble(long index); + + /** + * Writes the given double into this buffer at the given index. + * + * @param value the double to be written + * @param index the index at which the value will be written + * @return this buffer + * @throws IndexOutOfBoundsException if index is negative or not smaller than the buffer size + * @throws ReadOnlyBufferException if this buffer is read-only + */ + DoubleDataBuffer setDouble(double value, long index); + + /** + * Bulk get method, using double arrays. + *

+ * This method transfers values from this buffer into the given destination array. If there are + * fewer values in the buffer than are required to satisfy the request, that is, if + * {@code dst.length > size()}, then no values are transferred and a + * BufferUnderflowException is thrown. + *

+ * Otherwise, this method copies {@code n = dst.length} values from this buffer into the given + * array. + * + * @param dst the array into which values are to be written + * @return this buffer + * @throws BufferUnderflowException if there are not enough values to copy from this buffer + */ + default DoubleDataBuffer read(double[] dst) { + return read(dst, 0, dst.length); + } + + /** + * Bulk get method, using double arrays. + *

+ * This method transfers values from this buffer into the given destination array. If there are + * fewer values in the buffer than are required to satisfy the request, that is, if + * {@code length > size()}, then no values are transferred and a + * BufferUnderflowException is thrown. + *

+ * Otherwise, this method copies {@code n = length} values from this buffer into the given array + * starting at the given offset. + * + * @param dst the array into which values are to be written + * @param offset the offset within the array of the first value to be written; must be + * non-negative and no larger than {@code dst.length} + * @param length the maximum number of values to be written to the given array; must be + * non-negative and no larger than {@code dst.length - offset} + * @return this buffer + * @throws BufferUnderflowException if there are fewer than length values remaining in this buffer + * @throws IndexOutOfBoundsException if the preconditions on the offset and length parameters do + * not hold + */ + DoubleDataBuffer read(double[] dst, int offset, int length); + + /** + * Bulk put method, using double arrays. + *

+ * This method transfers the values in the given source array into this buffer. If there are + * more values in the source array than in this buffer, that is, if + * {@code src.length > size()}, then no values are transferred and a + * BufferOverflowException is thrown. + *

+ * Otherwise, this method copies {@code n = src.length} values from the given array. + * + * @param src the source array from which values are to be read + * @return this buffer + * @throws BufferOverflowException if there is insufficient space in this buffer for the values in + * the source array + * @throws ReadOnlyBufferException if this buffer is read-only + */ + default DoubleDataBuffer write(double[] src) { + return write(src, 0, src.length); + } + + /** + * Bulk put method, using double arrays. + *

+ * This method transfers the values in the given source array into this buffer. If there are + * more values in the source array than in this buffer, that is, if + * {@code length > size()}, then no values are transferred and a + * BufferOverflowException is thrown. + *

+ * Otherwise, this method copies {@code n = length} values from the given array into this buffer, + * starting at the given offset. + * + * @param src the source array from which values are to be read + * @param offset the offset within the array of the first value to be read; must be non-negative + * and no larger than {@code src.length} + * @param length the number of values to be read from the given array; must be non-negative and no + * larger than {@code src.length - offset} + * @return this buffer + * @throws BufferOverflowException if there is insufficient space in this buffer for the values in + * the source array + * @throws IndexOutOfBoundsException if the preconditions on the offset and length parameters do + * not hold + * @throws ReadOnlyBufferException if this buffer is read-only + */ + DoubleDataBuffer write(double[] src, int offset, int length); + + @Override + default Double get(long index) { + return getDouble(index); + } + + @Override + default DoubleDataBuffer set(Double value, long index) { + return setDouble(value, index); + } + + @Override + DoubleDataBuffer copyTo(DataBuffer dst, long size); + + @Override + DoubleDataBuffer offset(long index); + + @Override + DoubleDataBuffer narrow(long size); +} diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/FloatDataBuffer.java b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/FloatDataBuffer.java new file mode 100644 index 00000000000..92ea2ca2848 --- /dev/null +++ b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/FloatDataBuffer.java @@ -0,0 +1,153 @@ +/* + Copyright 2019 The TensorFlow Authors. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ======================================================================= + */ +package org.tensorflow.nio.buffer; + +import java.nio.BufferOverflowException; +import java.nio.BufferUnderflowException; +import java.nio.ReadOnlyBufferException; + +/** + * A {@link DataBuffer} of floats. + */ +public interface FloatDataBuffer extends DataBuffer { + + /** + * Reads the float at the given index. + * + * @param index the index from which the float will be read + * @return the float at the given index + * @throws IndexOutOfBoundsException if index is negative or not smaller than the buffer size + */ + float getFloat(long index); + + /** + * Writes the given float into this buffer at the given index. + * + * @param value the float to be written + * @param index the index at which the value will be written + * @return this buffer + * @throws IndexOutOfBoundsException if index is negative or not smaller than the buffer size + * @throws ReadOnlyBufferException if this buffer is read-only + */ + FloatDataBuffer setFloat(float value, long index); + + /** + * Bulk get method, using float arrays. + *

+ * This method transfers values from this buffer into the given destination array. If there are + * fewer values in the buffer than are required to satisfy the request, that is, if + * {@code dst.length > size()}, then no values are transferred and a + * BufferUnderflowException is thrown. + *

+ * Otherwise, this method copies {@code n = dst.length} values from this buffer into the given + * array. + * + * @param dst the array into which values are to be written + * @return this buffer + * @throws BufferUnderflowException if there are not enough values to copy from this buffer + */ + default FloatDataBuffer read(float[] dst) { + return read(dst, 0, dst.length); + } + + /** + * Bulk get method, using float arrays. + *

+ * This method transfers values from this buffer into the given destination array. If there are + * fewer values in the buffer than are required to satisfy the request, that is, if + * {@code length > size()}, then no values are transferred and a + * BufferUnderflowException is thrown. + *

+ * Otherwise, this method copies {@code n = length} values from this buffer into the given array + * starting at the given offset. + * + * @param dst the array into which values are to be written + * @param offset the offset within the array of the first value to be written; must be + * non-negative and no larger than {@code dst.length} + * @param length the maximum number of values to be written to the given array; must be + * non-negative and no larger than {@code dst.length - offset} + * @return this buffer + * @throws BufferUnderflowException if there are fewer than length values remaining in this buffer + * @throws IndexOutOfBoundsException if the preconditions on the offset and length parameters do + * not hold + */ + FloatDataBuffer read(float[] dst, int offset, int length); + + /** + * Bulk put method, using float arrays. + *

+ * This method transfers the values in the given source array into this buffer. If there are + * more values in the source array than in this buffer, that is, if + * {@code src.length > size()}, then no values are transferred and a + * BufferOverflowException is thrown. + *

+ * Otherwise, this method copies {@code n = src.length} values from the given array. + * + * @param src the source array from which values are to be read + * @return this buffer + * @throws BufferOverflowException if there is insufficient space in this buffer for the values in + * the source array + * @throws ReadOnlyBufferException if this buffer is read-only + */ + default FloatDataBuffer write(float[] src) { + return write(src, 0, src.length); + } + + /** + * Bulk put method, using float arrays. + *

+ * This method transfers the values in the given source array into this buffer. If there are + * more values in the source array than in this buffer, that is, if + * {@code length > size()}, then no values are transferred and a + * BufferOverflowException is thrown. + *

+ * Otherwise, this method copies {@code n = length} values from the given array into this buffer, + * starting at the given offset. + * + * @param src the source array from which values are to be read + * @param offset the offset within the array of the first value to be read; must be non-negative + * and no larger than {@code src.length} + * @param length the number of values to be read from the given array; must be non-negative and no + * larger than {@code src.length - offset} + * @return this buffer + * @throws BufferOverflowException if there is insufficient space in this buffer for the values in + * the source array + * @throws IndexOutOfBoundsException if the preconditions on the offset and length parameters do + * not hold + * @throws ReadOnlyBufferException if this buffer is read-only + */ + FloatDataBuffer write(float[] src, int offset, int length); + + @Override + default Float get(long index) { + return getFloat(index); + } + + @Override + default FloatDataBuffer set(Float value, long index) { + return setFloat(value, index); + } + + @Override + FloatDataBuffer copyTo(DataBuffer dst, long size); + + @Override + FloatDataBuffer offset(long index); + + @Override + FloatDataBuffer narrow(long size); +} diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/IntDataBuffer.java b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/IntDataBuffer.java new file mode 100644 index 00000000000..a6844610bc4 --- /dev/null +++ b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/IntDataBuffer.java @@ -0,0 +1,153 @@ +/* + Copyright 2019 The TensorFlow Authors. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ======================================================================= + */ +package org.tensorflow.nio.buffer; + +import java.nio.BufferOverflowException; +import java.nio.BufferUnderflowException; +import java.nio.ReadOnlyBufferException; + +/** + * A {@link DataBuffer} of ints. + */ +public interface IntDataBuffer extends DataBuffer { + + /** + * Reads the int at the given index. + * + * @param index the index from which the float will be read + * @return the int at the given index + * @throws IndexOutOfBoundsException if index is negative or not smaller than the buffer size + */ + int getInt(long index); + + /** + * Writes the given int into this buffer at the given index. + * + * @param value the int to be written + * @param index the index at which the value will be written + * @return this buffer + * @throws IndexOutOfBoundsException if index is negative or not smaller than the buffer size + * @throws ReadOnlyBufferException if this buffer is read-only + */ + IntDataBuffer setInt(int value, long index); + + /** + * Bulk get method, using int arrays. + *

+ * This method transfers values from this buffer into the given destination array. If there are + * fewer values in the buffer than are required to satisfy the request, that is, if + * {@code dst.length > size()}, then no values are transferred and a + * BufferUnderflowException is thrown. + *

+ * Otherwise, this method copies {@code n = dst.length} values from this buffer into the given + * array. + * + * @param dst the array into which values are to be written + * @return this buffer + * @throws BufferUnderflowException if there are not enough values to copy from this buffer + */ + default IntDataBuffer read(int[] dst) { + return read(dst, 0, dst.length); + } + + /** + * Bulk get method, using int arrays. + *

+ * This method transfers values from this buffer into the given destination array. If there are + * fewer values in the buffer than are required to satisfy the request, that is, if + * {@code length > size()}, then no values are transferred and a + * BufferUnderflowException is thrown. + *

+ * Otherwise, this method copies {@code n = length} values from this buffer into the given array + * starting at the given offset. + * + * @param dst the array into which values are to be written + * @param offset the offset within the array of the first value to be written; must be + * non-negative and no larger than {@code dst.length} + * @param length the maximum number of values to be written to the given array; must be + * non-negative and no larger than {@code dst.length - offset} + * @return this buffer + * @throws BufferUnderflowException if there are fewer than length values remaining in this buffer + * @throws IndexOutOfBoundsException if the preconditions on the offset and length parameters do + * not hold + */ + IntDataBuffer read(int[] dst, int offset, int length); + + /** + * Bulk put method, using int arrays. + *

+ * This method transfers the values in the given source array into this buffer. If there are + * more values in the source array than in this buffer, that is, if + * {@code src.length > size()}, then no values are transferred and a + * BufferOverflowException is thrown. + *

+ * Otherwise, this method copies {@code n = src.length} values from the given array. + * + * @param src the source array from which values are to be read + * @return this buffer + * @throws BufferOverflowException if there is insufficient space in this buffer for the values in + * the source array + * @throws ReadOnlyBufferException if this buffer is read-only + */ + default IntDataBuffer write(int[] src) { + return write(src, 0, src.length); + } + + /** + * Bulk put method, using int arrays. + *

+ * This method transfers the values in the given source array into this buffer. If there are + * more values in the source array than in this buffer, that is, if + * {@code length > size()}, then no values are transferred and a + * BufferOverflowException is thrown. + *

+ * Otherwise, this method copies {@code n = length} values from the given array into this buffer, + * starting at the given offset. + * + * @param src the source array from which values are to be read + * @param offset the offset within the array of the first value to be read; must be non-negative + * and no larger than {@code src.length} + * @param length the number of values to be read from the given array; must be non-negative and no + * larger than {@code src.length - offset} + * @return this buffer + * @throws BufferOverflowException if there is insufficient space in this buffer for the values in + * the source array + * @throws IndexOutOfBoundsException if the preconditions on the offset and length parameters do + * not hold + * @throws ReadOnlyBufferException if this buffer is read-only + */ + IntDataBuffer write(int[] src, int offset, int length); + + @Override + default Integer get(long index) { + return getInt(index); + } + + @Override + default IntDataBuffer set(Integer value, long index) { + return setInt(value, index); + } + + @Override + IntDataBuffer copyTo(DataBuffer dst, long size); + + @Override + IntDataBuffer offset(long index); + + @Override + IntDataBuffer narrow(long size); +} diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/LongDataBuffer.java b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/LongDataBuffer.java new file mode 100644 index 00000000000..06a56d13f51 --- /dev/null +++ b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/LongDataBuffer.java @@ -0,0 +1,153 @@ +/* + Copyright 2019 The TensorFlow Authors. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ======================================================================= + */ +package org.tensorflow.nio.buffer; + +import java.nio.BufferOverflowException; +import java.nio.BufferUnderflowException; +import java.nio.ReadOnlyBufferException; + +/** + * A {@link DataBuffer} of longs. + */ +public interface LongDataBuffer extends DataBuffer { + + /** + * Reads the long at the given index. + * + * @param index the index from which the float will be read + * @return the long at the given index + * @throws IndexOutOfBoundsException if index is negative or not smaller than the buffer size + */ + long getLong(long index); + + /** + * Writes the given long into this buffer at the given index. + * + * @param value the long to be written + * @param index the index at which the value will be written + * @return this buffer + * @throws IndexOutOfBoundsException if index is negative or not smaller than the buffer size + * @throws ReadOnlyBufferException if this buffer is read-only + */ + LongDataBuffer setLong(long value, long index); + + /** + * Bulk get method, using long arrays. + *

+ * This method transfers values from this buffer into the given destination array. If there are + * fewer values in the buffer than are required to satisfy the request, that is, if + * {@code dst.length > size()}, then no values are transferred and a + * BufferUnderflowException is thrown. + *

+ * Otherwise, this method copies {@code n = dst.length} values from this buffer into the given + * array. + * + * @param dst the array into which values are to be written + * @return this buffer + * @throws BufferUnderflowException if there are not enough values to copy from this buffer + */ + default LongDataBuffer read(long[] dst) { + return read(dst, 0, dst.length); + } + + /** + * Bulk get method, using long arrays. + *

+ * This method transfers values from this buffer into the given destination array. If there are + * fewer values in the buffer than are required to satisfy the request, that is, if + * {@code length > size()}, then no values are transferred and a + * BufferUnderflowException is thrown. + *

+ * Otherwise, this method copies {@code n = length} values from this buffer into the given array + * starting at the given offset. + * + * @param dst the array into which values are to be written + * @param offset the offset within the array of the first value to be written; must be + * non-negative and no larger than {@code dst.length} + * @param length the maximum number of values to be written to the given array; must be + * non-negative and no larger than {@code dst.length - offset} + * @return this buffer + * @throws BufferUnderflowException if there are fewer than length values remaining in this buffer + * @throws IndexOutOfBoundsException if the preconditions on the offset and length parameters do + * not hold + */ + LongDataBuffer read(long[] dst, int offset, int length); + + /** + * Bulk put method, using long arrays. + *

+ * This method transfers the values in the given source array into this buffer. If there are + * more values in the source array than in this buffer, that is, if + * {@code src.length > size()}, then no values are transferred and a + * BufferOverflowException is thrown. + *

+ * Otherwise, this method copies {@code n = src.length} values from the given array. + * + * @param src the source array from which values are to be read + * @return this buffer + * @throws BufferOverflowException if there is insufficient space in this buffer for the values in + * the source array + * @throws ReadOnlyBufferException if this buffer is read-only + */ + default LongDataBuffer write(long[] src) { + return write(src, 0, src.length); + } + + /** + * Bulk put method, using long arrays. + *

+ * This method transfers the values in the given source array into this buffer. If there are + * more values in the source array than in this buffer, that is, if + * {@code length > size()}, then no values are transferred and a + * BufferOverflowException is thrown. + *

+ * Otherwise, this method copies {@code n = length} values from the given array into this buffer, + * starting at the given offset. + * + * @param src the source array from which values are to be read + * @param offset the offset within the array of the first value to be read; must be non-negative + * and no larger than {@code src.length} + * @param length the number of values to be read from the given array; must be non-negative and no + * larger than {@code src.length - offset} + * @return this buffer + * @throws BufferOverflowException if there is insufficient space in this buffer for the values in + * the source array + * @throws IndexOutOfBoundsException if the preconditions on the offset and length parameters do + * not hold + * @throws ReadOnlyBufferException if this buffer is read-only + */ + LongDataBuffer write(long[] src, int offset, int length); + + @Override + default Long get(long index) { + return getLong(index); + } + + @Override + default LongDataBuffer set(Long value, long index) { + return setLong(value, index); + } + + @Override + LongDataBuffer copyTo(DataBuffer dst, long size); + + @Override + LongDataBuffer offset(long index); + + @Override + LongDataBuffer narrow(long size); +} diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/ShortDataBuffer.java b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/ShortDataBuffer.java new file mode 100644 index 00000000000..5cbe88eed4f --- /dev/null +++ b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/ShortDataBuffer.java @@ -0,0 +1,153 @@ +/* + Copyright 2019 The TensorFlow Authors. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ======================================================================= + */ +package org.tensorflow.nio.buffer; + +import java.nio.BufferOverflowException; +import java.nio.BufferUnderflowException; +import java.nio.ReadOnlyBufferException; + +/** + * A {@link DataBuffer} of shorts. + */ +public interface ShortDataBuffer extends DataBuffer { + + /** + * Reads the short at the given index. + * + * @param index the index from which the float will be read + * @return the short at the given index + * @throws IndexOutOfBoundsException if index is negative or not smaller than the buffer size + */ + short getShort(long index); + + /** + * Writes the given short into this buffer at the given index. + * + * @param value the short to be written + * @param index the index at which the value will be written + * @return this buffer + * @throws IndexOutOfBoundsException if index is negative or not smaller than the buffer size + * @throws ReadOnlyBufferException if this buffer is read-only + */ + ShortDataBuffer setShort(short value, long index); + + /** + * Bulk get method, using short arrays. + *

+ * This method transfers values from this buffer into the given destination array. If there are + * fewer values in the buffer than are required to satisfy the request, that is, if + * {@code dst.length > size()}, then no values are transferred and a + * BufferUnderflowException is thrown. + *

+ * Otherwise, this method copies {@code n = dst.length} values from this buffer into the given + * array. + * + * @param dst the array into which values are to be written + * @return this buffer + * @throws BufferUnderflowException if there are not enough values to copy from this buffer + */ + default ShortDataBuffer read(short[] dst) { + return read(dst, 0, dst.length); + } + + /** + * Bulk get method, using short arrays. + *

+ * This method transfers values from this buffer into the given destination array. If there are + * fewer values in the buffer than are required to satisfy the request, that is, if + * {@code length > size()}, then no values are transferred and a + * BufferUnderflowException is thrown. + *

+ * Otherwise, this method copies {@code n = length} values from this buffer into the given array + * starting at the given offset. + * + * @param dst the array into which values are to be written + * @param offset the offset within the array of the first value to be written; must be + * non-negative and no larger than {@code dst.length} + * @param length the maximum number of values to be written to the given array; must be + * non-negative and no larger than {@code dst.length - offset} + * @return this buffer + * @throws BufferUnderflowException if there are fewer than length values remaining in this buffer + * @throws IndexOutOfBoundsException if the preconditions on the offset and length parameters do + * not hold + */ + ShortDataBuffer read(short[] dst, int offset, int length); + + /** + * Bulk put method, using short arrays. + *

+ * This method transfers the values in the given source array into this buffer. If there are + * more values in the source array than in this buffer, that is, if + * {@code src.length > size()}, then no values are transferred and a + * BufferOverflowException is thrown. + *

+ * Otherwise, this method copies {@code n = src.length} values from the given array. + * + * @param src the source array from which values are to be read + * @return this buffer + * @throws BufferOverflowException if there is insufficient space in this buffer for the values in + * the source array + * @throws ReadOnlyBufferException if this buffer is read-only + */ + default ShortDataBuffer write(short[] src) { + return write(src, 0, src.length); + } + + /** + * Bulk put method, using short arrays. + *

+ * This method transfers the values in the given source array into this buffer. If there are + * more values in the source array than in this buffer, that is, if + * {@code length > size()}, then no values are transferred and a + * BufferOverflowException is thrown. + *

+ * Otherwise, this method copies {@code n = length} values from the given array into this buffer, + * starting at the given offset. + * + * @param src the source array from which values are to be read + * @param offset the offset within the array of the first value to be read; must be non-negative + * and no larger than {@code src.length} + * @param length the number of values to be read from the given array; must be non-negative and no + * larger than {@code src.length - offset} + * @return this buffer + * @throws BufferOverflowException if there is insufficient space in this buffer for the values in + * the source array + * @throws IndexOutOfBoundsException if the preconditions on the offset and length parameters do + * not hold + * @throws ReadOnlyBufferException if this buffer is read-only + */ + ShortDataBuffer write(short[] src, int offset, int length); + + @Override + default Short get(long index) { + return getShort(index); + } + + @Override + default ShortDataBuffer set(Short value, long index) { + return setShort(value, index); + } + + @Override + ShortDataBuffer copyTo(DataBuffer dst, long size); + + @Override + ShortDataBuffer offset(long index); + + @Override + ShortDataBuffer narrow(long size); +} diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/adapter/BooleanDataAdapter.java b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/adapter/BooleanDataAdapter.java new file mode 100644 index 00000000000..0669689b499 --- /dev/null +++ b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/adapter/BooleanDataAdapter.java @@ -0,0 +1,36 @@ +package org.tensorflow.nio.buffer.adapter; + +import org.tensorflow.nio.buffer.ByteDataBuffer; + +/** + * Converts a boolean to/from bytes + */ +public interface BooleanDataAdapter extends DataAdapter { + + /** + * Writes a boolean as bytes to the given buffer at its current position. + * @param buffer buffer that receives the value as bytes + * @param value value + * @param index byte index of the value to write + */ + void writeBoolean(ByteDataBuffer buffer, boolean value, long index); + + /** + * Reads a boolean as bytes from the given buffer at its current position. + * + * @param buffer buffer that supplies the value as bytes + * @param index byte index of the value to read + * @return value + */ + boolean readBoolean(ByteDataBuffer buffer, long index); + + @Override + default void writeValue(ByteDataBuffer buffer, Boolean value, long index) { + writeBoolean(buffer, value, index); + } + + @Override + default Boolean readValue(ByteDataBuffer buffer, long index) { + return readBoolean(buffer, index); + } +} diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/adapter/DataAdapter.java b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/adapter/DataAdapter.java new file mode 100644 index 00000000000..6af12d78c57 --- /dev/null +++ b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/adapter/DataAdapter.java @@ -0,0 +1,34 @@ +package org.tensorflow.nio.buffer.adapter; + +import org.tensorflow.nio.buffer.ByteDataBuffer; + +/** + * Converts a value of a given type to/from bytes + * + * @param value type + */ +public interface DataAdapter { + + /** + * Writes a value as bytes to the given buffer at its current position. + * + * @param buffer buffer that receives the value as bytes + * @param value value + * @param index index of the value to write + */ + void writeValue(ByteDataBuffer buffer, T value, long index); + + /** + * Reads a value as bytes from the given buffer at its current position. + * + * @param buffer buffer that supplies the value as bytes + * @param index index of the value to read + * @return value + */ + T readValue(ByteDataBuffer buffer, long index); + + /** + * Returns the number of bytes required to represent a single value + */ + int sizeInBytes(); +} diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/adapter/DoubleDataAdapter.java b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/adapter/DoubleDataAdapter.java new file mode 100644 index 00000000000..b72068f1c01 --- /dev/null +++ b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/adapter/DoubleDataAdapter.java @@ -0,0 +1,36 @@ +package org.tensorflow.nio.buffer.adapter; + +import org.tensorflow.nio.buffer.ByteDataBuffer; + +/** + * Converts a double to/from bytes + */ +public interface DoubleDataAdapter extends DataAdapter { + + /** + * Writes a double as bytes to the given buffer at its current position. + * @param buffer buffer that receives the value as bytes + * @param value value + * @param index byte index of the value to write + */ + void writeDouble(ByteDataBuffer buffer, double value, long index); + + /** + * Reads a double as bytes from the given buffer at its current position. + * + * @param buffer buffer that supplies the value as bytes + * @param index byte index of the value to read + * @return value + */ + double readDouble(ByteDataBuffer buffer, long index); + + @Override + default void writeValue(ByteDataBuffer buffer, Double value, long index) { + writeDouble(buffer, value, index); + } + + @Override + default Double readValue(ByteDataBuffer buffer, long index) { + return readDouble(buffer, index); + } +} diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/adapter/FloatDataAdapter.java b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/adapter/FloatDataAdapter.java new file mode 100644 index 00000000000..72f9c2cd66c --- /dev/null +++ b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/adapter/FloatDataAdapter.java @@ -0,0 +1,36 @@ +package org.tensorflow.nio.buffer.adapter; + +import org.tensorflow.nio.buffer.ByteDataBuffer; + +/** + * Converts a float to/from bytes + */ +public interface FloatDataAdapter extends DataAdapter { + + /** + * Writes a float as bytes to the given buffer at its current position. + * @param buffer buffer that receives the value as bytes + * @param value value + * @param index byte index of the value to write + */ + void writeFloat(ByteDataBuffer buffer, float value, long index); + + /** + * Reads a float as bytes from the given buffer at its current position. + * + * @param buffer buffer that supplies the value as bytes + * @param index byte index of the value to read + * @return value + */ + float readFloat(ByteDataBuffer buffer, long index); + + @Override + default void writeValue(ByteDataBuffer buffer, Float value, long index) { + writeFloat(buffer, value, index); + } + + @Override + default Float readValue(ByteDataBuffer buffer, long index) { + return readFloat(buffer, index); + } +} diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/adapter/IntDataAdapter.java b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/adapter/IntDataAdapter.java new file mode 100644 index 00000000000..b25d58784c0 --- /dev/null +++ b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/adapter/IntDataAdapter.java @@ -0,0 +1,36 @@ +package org.tensorflow.nio.buffer.adapter; + +import org.tensorflow.nio.buffer.ByteDataBuffer; + +/** + * Converts a int to/from bytes + */ +public interface IntDataAdapter extends DataAdapter { + + /** + * Writes a int as bytes to the given buffer at its current position. + * @param buffer buffer that receives the value as bytes + * @param value value + * @param index byte index of the value to write + */ + void writeInt(ByteDataBuffer buffer, int value, long index); + + /** + * Reads a int as bytes from the given buffer at its current position. + * + * @param buffer buffer that supplies the value as bytes + * @param index byte index of the value to read + * @return value + */ + int readInt(ByteDataBuffer buffer, long index); + + @Override + default void writeValue(ByteDataBuffer buffer, Integer value, long index) { + writeInt(buffer, value, index); + } + + @Override + default Integer readValue(ByteDataBuffer buffer, long index) { + return readInt(buffer, index); + } +} diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/adapter/LongDataAdapter.java b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/adapter/LongDataAdapter.java new file mode 100644 index 00000000000..4d18571de35 --- /dev/null +++ b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/adapter/LongDataAdapter.java @@ -0,0 +1,36 @@ +package org.tensorflow.nio.buffer.adapter; + +import org.tensorflow.nio.buffer.ByteDataBuffer; + +/** + * Converts a long to/from bytes + */ +public interface LongDataAdapter extends DataAdapter { + + /** + * Writes a long as bytes to the given buffer at its current position. + * @param buffer buffer that receives the value as bytes + * @param value value + * @param index byte index of the value to write + */ + void writeLong(ByteDataBuffer buffer, long value, long index); + + /** + * Reads a long as bytes from the given buffer at its current position. + * + * @param buffer buffer that supplies the value as bytes + * @param index byte index of the value to read + * @return value + */ + long readLong(ByteDataBuffer buffer, long index); + + @Override + default void writeValue(ByteDataBuffer buffer, Long value, long index) { + writeLong(buffer, value, index); + } + + @Override + default Long readValue(ByteDataBuffer buffer, long index) { + return readLong(buffer, index); + } +} diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/adapter/ShortDataAdapter.java b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/adapter/ShortDataAdapter.java new file mode 100644 index 00000000000..a082cd4beb1 --- /dev/null +++ b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/adapter/ShortDataAdapter.java @@ -0,0 +1,36 @@ +package org.tensorflow.nio.buffer.adapter; + +import org.tensorflow.nio.buffer.ByteDataBuffer; + +/** + * Converts a short to/from bytes + */ +public interface ShortDataAdapter extends DataAdapter { + + /** + * Writes a short as bytes to the given buffer at its current position. + * @param buffer buffer that receives the value as bytes + * @param value value + * @param index byte index of the value to write + */ + void writeShort(ByteDataBuffer buffer, short value, long index); + + /** + * Reads a short as bytes from the given buffer at its current position. + * + * @param buffer buffer that supplies the value as bytes + * @param index byte index of the value to read + * @return value + */ + short readShort(ByteDataBuffer buffer, long index); + + @Override + default void writeValue(ByteDataBuffer buffer, Short value, long index) { + writeShort(buffer, value, index); + } + + @Override + default Short readValue(ByteDataBuffer buffer, long index) { + return readShort(buffer, index); + } +} diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/AbstractDataBuffer.java b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/AbstractDataBuffer.java new file mode 100644 index 00000000000..899a4247d72 --- /dev/null +++ b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/AbstractDataBuffer.java @@ -0,0 +1,28 @@ +/* + Copyright 2019 The TensorFlow Authors. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ======================================================================= + */ +package org.tensorflow.nio.buffer.impl; + +import org.tensorflow.nio.buffer.DataBuffer; + +public abstract class AbstractDataBuffer implements DataBuffer { + + protected void slowCopyTo(DataBuffer dst, long size) { + for (long idx = 0; idx < size; ++idx) { + dst.set(get(idx), idx); + } + } +} diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/Validator.java b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/Validator.java new file mode 100644 index 00000000000..d68a7e6714e --- /dev/null +++ b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/Validator.java @@ -0,0 +1,117 @@ +/* + Copyright 2019 The TensorFlow Authors. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ======================================================================= + */ +package org.tensorflow.nio.buffer.impl; + +import java.nio.BufferOverflowException; +import java.nio.BufferUnderflowException; +import java.nio.ReadOnlyBufferException; +import org.tensorflow.nio.buffer.DataBuffer; + +public class Validator { + + public static void createArgs(long size, long maxSize) { + if (size < 0) { + throw new IllegalArgumentException("Size must be non-negative"); + } + if (size > maxSize) { + throw new IllegalArgumentException("Buffer size must be no greater than maximum size allowed (" + maxSize + ")"); + } + } + + public static void getArgs(DataBuffer buffer, long index) { + if (index < 0) { + throw new IndexOutOfBoundsException("Index must be non-negative"); + } + if (index >= buffer.size()) { + throw new IndexOutOfBoundsException("Index must be smaller than the buffer size"); + } + } + + public static void setArgs(DataBuffer buffer, long index) { + if (index < 0) { + throw new IndexOutOfBoundsException("Index must be non-negative"); + } + if (index >= buffer.size()) { + throw new IndexOutOfBoundsException("Index must be smaller than the buffer size"); + } + if (buffer.isReadOnly()) { + throw new ReadOnlyBufferException(); + } + } + + public static void copyToArgs(DataBuffer src, DataBuffer dst, long size) { + if (dst == src) { + throw new IllegalArgumentException("Source cannot be the same buffer as destination"); + } + if (size > dst.size()) { + throw new BufferOverflowException(); + } + if (size > src.size()) { + throw new BufferUnderflowException(); + } + if (dst.isReadOnly()) { + throw new ReadOnlyBufferException(); + } + } + + public static void readArgs(DataBuffer buffer, int arrayLength, int offset, int length) { + if (length > buffer.size()) { + throw new BufferUnderflowException(); + } + arrayArgs(arrayLength, offset, length); + } + + public static void writeArgs(DataBuffer buffer, int arrayLength, int offset, int length) { + if (length > buffer.size()) { + throw new BufferOverflowException(); + } + if (buffer.isReadOnly()) { + throw new ReadOnlyBufferException(); + } + arrayArgs(arrayLength, offset, length); + } + + public static void offsetArgs(DataBuffer buffer, long index) { + if (index < 0 || index > buffer.size()) { + throw new IllegalArgumentException(); + } + } + + public static void narrowArgs(DataBuffer buffer, long size) { + if (size < 0) { + throw new IllegalArgumentException("Size must be non-negative"); + } + if (size > buffer.size()) { + throw new IllegalArgumentException("Cannot narrow a buffer of size " + buffer.size() + " to " + size); + } + } + + private static void arrayArgs(int arrayLength, int offset, int length) { + if (offset < 0) { + throw new IndexOutOfBoundsException("Offset must be non-negative"); + } + if (offset > arrayLength) { + throw new IndexOutOfBoundsException("Offset must be no larger than array length"); + } + if (length < 0) { + throw new IndexOutOfBoundsException("Length must be non-negative"); + } + if (length > arrayLength - offset) { + throw new IndexOutOfBoundsException("Length must be no larger than array length minus the offset"); + } + } +} diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/jdk/AbstractJdkDataBuffer.java b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/jdk/AbstractJdkDataBuffer.java new file mode 100644 index 00000000000..5bdfc2bd4c2 --- /dev/null +++ b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/jdk/AbstractJdkDataBuffer.java @@ -0,0 +1,49 @@ +/* + Copyright 2019 The TensorFlow Authors. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ======================================================================= + */ + +package org.tensorflow.nio.buffer.impl.jdk; + +import java.nio.Buffer; +import org.tensorflow.nio.buffer.impl.AbstractDataBuffer; + +/** + * Base class for all JDK-based data buffers. + * + * @param type of elements (or values) stored in this buffer + */ +abstract class AbstractJdkDataBuffer extends AbstractDataBuffer { + + /** + * The maximum size for a buffer of this type, i.e. the maximum number of bytes it can store. + *

+ * As the maximum size may vary depending on the JVM implementation and on the platform, this + * property returns a value that is safe for most of them. + */ + public static long MAX_SIZE = Integer.MAX_VALUE - 10; + + @Override + public long size() { + return buf().capacity(); + } + + @Override + public boolean isReadOnly() { + return buf().isReadOnly(); + } + + abstract Buffer buf(); +} diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/jdk/ByteJdkDataBuffer.java b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/jdk/ByteJdkDataBuffer.java new file mode 100644 index 00000000000..e66eb511e11 --- /dev/null +++ b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/jdk/ByteJdkDataBuffer.java @@ -0,0 +1,116 @@ +/* + Copyright 2019 The TensorFlow Authors. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ======================================================================= + */ + +package org.tensorflow.nio.buffer.impl.jdk; + +import java.nio.ByteBuffer; +import org.tensorflow.nio.buffer.ByteDataBuffer; +import org.tensorflow.nio.buffer.DataBuffer; +import org.tensorflow.nio.buffer.impl.Validator; + +/** + * A buffer of bytes using a JDK {@link ByteBuffer} for storage. + *

+ * Since JDK buffers supports only 32-bits indexation, the size of this buffer type cannot + * exceed 232 - 1 (see {@link ByteJdkDataBuffer#MAX_SIZE} for the real maximum + * value supported). + */ +public final class ByteJdkDataBuffer extends AbstractJdkDataBuffer + implements ByteDataBuffer { + + /** + * Allocates a new byte buffer, initialized with zeroes. + * + * @param size the new buffer's size, in bytes + * @return the new byte buffer + * @throws IllegalArgumentException if the size is a negative integer or exceeds + * {@link #MAX_SIZE}. + */ + public static ByteDataBuffer allocate(long size) { + Validator.createArgs(size, MAX_SIZE); + return new ByteJdkDataBuffer(ByteBuffer.allocate((int)size)); + } + + /** + * Wraps a JDK {@link ByteBuffer} into a {@code ByteDataBuffer}. + * + * @param buffer buffer to wrap + * @return the new byte buffer + */ + public static ByteDataBuffer wrap(ByteBuffer buffer) { + return new ByteJdkDataBuffer(buffer); + } + + @Override + public byte getByte(long index) { + return buf.get((int)index); + } + + @Override + public ByteDataBuffer setByte(byte value, long index) { + buf.put((int)index, value); + return this; + } + + @Override + public ByteDataBuffer read(byte[] dst, int offset, int length) { + buf.duplicate().get(dst, offset, length); + return this; + } + + @Override + public ByteDataBuffer write(byte[] src, int offset, int length) { + buf.duplicate().put(src, offset, length); + return this; + } + + @Override + public ByteDataBuffer copyTo(DataBuffer dst, long size) { + Validator.copyToArgs(this, dst, size); + if (dst instanceof ByteJdkDataBuffer) { + ByteBuffer dstBuf = ((ByteJdkDataBuffer)dst).buf.duplicate(); + ByteBuffer srcBuf = (ByteBuffer)buf.duplicate().limit((int)size); + dstBuf.put(srcBuf); + } else { + slowCopyTo(dst, size); + } + return this; + } + + @Override + public ByteDataBuffer offset(long index) { + Validator.offsetArgs(this, index); + return new ByteJdkDataBuffer(((ByteBuffer)buf.duplicate().position((int)index)).slice()); + } + + @Override + public ByteDataBuffer narrow(long size) { + Validator.narrowArgs(this, size); + return new ByteJdkDataBuffer(((ByteBuffer)buf.duplicate().limit((int)size)).slice()); + } + + @Override + ByteBuffer buf() { + return buf; + } + + private ByteJdkDataBuffer(ByteBuffer buf) { + this.buf = buf; + } + + private ByteBuffer buf; +} diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/jdk/DoubleJdkDataBuffer.java b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/jdk/DoubleJdkDataBuffer.java new file mode 100644 index 00000000000..b98deb39ed1 --- /dev/null +++ b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/jdk/DoubleJdkDataBuffer.java @@ -0,0 +1,116 @@ +/* + Copyright 2019 The TensorFlow Authors. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ======================================================================= + */ + +package org.tensorflow.nio.buffer.impl.jdk; + +import java.nio.DoubleBuffer; +import org.tensorflow.nio.buffer.DataBuffer; +import org.tensorflow.nio.buffer.DoubleDataBuffer; +import org.tensorflow.nio.buffer.impl.Validator; + +/** + * A buffer of bytes using a JDK {@link DoubleBuffer} for storage. + *

+ * Since JDK buffers supports only 32-bits indexation, the size of this buffer type cannot + * exceed 232 - 1 (see {@link DoubleJdkDataBuffer#MAX_SIZE} for the real maximum + * value supported). + */ +public final class DoubleJdkDataBuffer extends AbstractJdkDataBuffer + implements DoubleDataBuffer { + + /** + * Allocates a new byte buffer, initialized with zeroes. + * + * @param size the new buffer's size, in bytes + * @return the new byte buffer + * @throws IllegalArgumentException if the size is a negative integer or exceeds + * {@link #MAX_SIZE}. + */ + public static DoubleDataBuffer allocate(long size) { + Validator.createArgs(size, MAX_SIZE); + return new DoubleJdkDataBuffer(DoubleBuffer.allocate((int)size)); + } + + /** + * Wraps a JDK {@link DoubleBuffer} into a {@code DoubleDataBuffer}. + * + * @param buffer buffer to wrap + * @return the new byte buffer + */ + public static DoubleDataBuffer wrap(DoubleBuffer buffer) { + return new DoubleJdkDataBuffer(buffer); + } + + @Override + public double getDouble(long index) { + return buf.get((int)index); + } + + @Override + public DoubleDataBuffer setDouble(double value, long index) { + buf.put((int)index, value); + return this; + } + + @Override + public DoubleDataBuffer read(double[] dst, int offset, int length) { + buf.duplicate().get(dst, offset, length); + return this; + } + + @Override + public DoubleDataBuffer write(double[] src, int offset, int length) { + buf.duplicate().put(src, offset, length); + return this; + } + + @Override + public DoubleDataBuffer copyTo(DataBuffer dst, long size) { + Validator.copyToArgs(this, dst, size); + if (dst instanceof DoubleJdkDataBuffer) { + DoubleBuffer dstBuf = ((DoubleJdkDataBuffer)dst).buf.duplicate(); + DoubleBuffer srcBuf = (DoubleBuffer)buf.duplicate().limit((int)size); + dstBuf.put(srcBuf); + } else { + slowCopyTo(dst, size); + } + return this; + } + + @Override + public DoubleDataBuffer offset(long index) { + Validator.offsetArgs(this, index); + return new DoubleJdkDataBuffer(((DoubleBuffer)buf.duplicate().position((int)index)).slice()); + } + + @Override + public DoubleDataBuffer narrow(long size) { + Validator.narrowArgs(this, size); + return new DoubleJdkDataBuffer(((DoubleBuffer)buf.duplicate().limit((int)size)).slice()); + } + + @Override + DoubleBuffer buf() { + return buf; + } + + private DoubleJdkDataBuffer(DoubleBuffer buf) { + this.buf = buf; + } + + private DoubleBuffer buf; +} diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/jdk/FloatJdkDataBuffer.java b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/jdk/FloatJdkDataBuffer.java new file mode 100644 index 00000000000..d39e74f2e76 --- /dev/null +++ b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/jdk/FloatJdkDataBuffer.java @@ -0,0 +1,116 @@ +/* + Copyright 2019 The TensorFlow Authors. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ======================================================================= + */ + +package org.tensorflow.nio.buffer.impl.jdk; + +import java.nio.FloatBuffer; +import org.tensorflow.nio.buffer.DataBuffer; +import org.tensorflow.nio.buffer.FloatDataBuffer; +import org.tensorflow.nio.buffer.impl.Validator; + +/** + * A buffer of bytes using a JDK {@link FloatBuffer} for storage. + *

+ * Since JDK buffers supports only 32-bits indexation, the size of this buffer type cannot + * exceed 232 - 1 (see {@link FloatJdkDataBuffer#MAX_SIZE} for the real maximum + * value supported). + */ +public final class FloatJdkDataBuffer extends AbstractJdkDataBuffer + implements FloatDataBuffer { + + /** + * Allocates a new byte buffer, initialized with zeroes. + * + * @param size the new buffer's size, in bytes + * @return the new byte buffer + * @throws IllegalArgumentException if the size is a negative integer or exceeds + * {@link #MAX_SIZE}. + */ + public static FloatDataBuffer allocate(long size) { + Validator.createArgs(size, MAX_SIZE); + return new FloatJdkDataBuffer(FloatBuffer.allocate((int)size)); + } + + /** + * Wraps a JDK {@link FloatBuffer} into a {@code FloatDataBuffer}. + * + * @param buffer buffer to wrap + * @return the new byte buffer + */ + public static FloatDataBuffer wrap(FloatBuffer buffer) { + return new FloatJdkDataBuffer(buffer); + } + + @Override + public float getFloat(long index) { + return buf.get((int)index); + } + + @Override + public FloatDataBuffer setFloat(float value, long index) { + buf.put((int)index, value); + return this; + } + + @Override + public FloatDataBuffer read(float[] dst, int offset, int length) { + buf.duplicate().get(dst, offset, length); + return this; + } + + @Override + public FloatDataBuffer write(float[] src, int offset, int length) { + buf.duplicate().put(src, offset, length); + return this; + } + + @Override + public FloatDataBuffer copyTo(DataBuffer dst, long size) { + Validator.copyToArgs(this, dst, size); + if (dst instanceof FloatJdkDataBuffer) { + FloatBuffer dstBuf = ((FloatJdkDataBuffer)dst).buf.duplicate(); + FloatBuffer srcBuf = (FloatBuffer)buf.duplicate().limit((int)size); + dstBuf.put(srcBuf); + } else { + slowCopyTo(dst, size); + } + return this; + } + + @Override + public FloatDataBuffer offset(long index) { + Validator.offsetArgs(this, index); + return new FloatJdkDataBuffer(((FloatBuffer)buf.duplicate().position((int)index)).slice()); + } + + @Override + public FloatDataBuffer narrow(long size) { + Validator.narrowArgs(this, size); + return new FloatJdkDataBuffer(((FloatBuffer)buf.duplicate().limit((int)size)).slice()); + } + + @Override + FloatBuffer buf() { + return buf; + } + + private FloatJdkDataBuffer(FloatBuffer buf) { + this.buf = buf; + } + + private FloatBuffer buf; +} diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/jdk/IntJdkDataBuffer.java b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/jdk/IntJdkDataBuffer.java new file mode 100644 index 00000000000..06ae10c11c6 --- /dev/null +++ b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/jdk/IntJdkDataBuffer.java @@ -0,0 +1,116 @@ +/* + Copyright 2019 The TensorFlow Authors. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ======================================================================= + */ + +package org.tensorflow.nio.buffer.impl.jdk; + +import java.nio.IntBuffer; +import org.tensorflow.nio.buffer.DataBuffer; +import org.tensorflow.nio.buffer.IntDataBuffer; +import org.tensorflow.nio.buffer.impl.Validator; + +/** + * A buffer of bytes using a JDK {@link IntBuffer} for storage. + *

+ * Since JDK buffers supports only 32-bits indexation, the size of this buffer type cannot + * exceed 232 - 1 (see {@link IntJdkDataBuffer#MAX_SIZE} for the real maximum + * value supported). + */ +public final class IntJdkDataBuffer extends AbstractJdkDataBuffer + implements IntDataBuffer { + + /** + * Allocates a new byte buffer, initialized with zeroes. + * + * @param size the new buffer's size, in bytes + * @return the new byte buffer + * @throws IllegalArgumentException if the size is a negative integer or exceeds + * {@link #MAX_SIZE}. + */ + public static IntDataBuffer allocate(long size) { + Validator.createArgs(size, MAX_SIZE); + return new IntJdkDataBuffer(IntBuffer.allocate((int)size)); + } + + /** + * Wraps a JDK {@link IntBuffer} into a {@code IntDataBuffer}. + * + * @param buffer buffer to wrap + * @return the new byte buffer + */ + public static IntDataBuffer wrap(IntBuffer buffer) { + return new IntJdkDataBuffer(buffer); + } + + @Override + public int getInt(long index) { + return buf.get((int)index); + } + + @Override + public IntDataBuffer setInt(int value, long index) { + buf.put((int)index, value); + return this; + } + + @Override + public IntDataBuffer read(int[] dst, int offset, int length) { + buf.duplicate().get(dst, offset, length); + return this; + } + + @Override + public IntDataBuffer write(int[] src, int offset, int length) { + buf.duplicate().put(src, offset, length); + return this; + } + + @Override + public IntDataBuffer copyTo(DataBuffer dst, long size) { + Validator.copyToArgs(this, dst, size); + if (dst instanceof IntJdkDataBuffer) { + IntBuffer dstBuf = ((IntJdkDataBuffer)dst).buf.duplicate(); + IntBuffer srcBuf = (IntBuffer)buf.duplicate().limit((int)size); + dstBuf.put(srcBuf); + } else { + slowCopyTo(dst, size); + } + return this; + } + + @Override + public IntDataBuffer offset(long index) { + Validator.offsetArgs(this, index); + return new IntJdkDataBuffer(((IntBuffer)buf.duplicate().position((int)index)).slice()); + } + + @Override + public IntDataBuffer narrow(long size) { + Validator.narrowArgs(this, size); + return new IntJdkDataBuffer(((IntBuffer)buf.duplicate().limit((int)size)).slice()); + } + + @Override + IntBuffer buf() { + return buf; + } + + private IntJdkDataBuffer(IntBuffer buf) { + this.buf = buf; + } + + private IntBuffer buf; +} diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/jdk/LongJdkDataBuffer.java b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/jdk/LongJdkDataBuffer.java new file mode 100644 index 00000000000..05851cd28bf --- /dev/null +++ b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/jdk/LongJdkDataBuffer.java @@ -0,0 +1,116 @@ +/* + Copyright 2019 The TensorFlow Authors. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ======================================================================= + */ + +package org.tensorflow.nio.buffer.impl.jdk; + +import java.nio.LongBuffer; +import org.tensorflow.nio.buffer.DataBuffer; +import org.tensorflow.nio.buffer.LongDataBuffer; +import org.tensorflow.nio.buffer.impl.Validator; + +/** + * A buffer of bytes using a JDK {@link LongBuffer} for storage. + *

+ * Since JDK buffers supports only 32-bits indexation, the size of this buffer type cannot + * exceed 232 - 1 (see {@link LongJdkDataBuffer#MAX_SIZE} for the real maximum + * value supported). + */ +public final class LongJdkDataBuffer extends AbstractJdkDataBuffer + implements LongDataBuffer { + + /** + * Allocates a new byte buffer, initialized with zeroes. + * + * @param size the new buffer's size, in bytes + * @return the new byte buffer + * @throws IllegalArgumentException if the size is a negative integer or exceeds + * {@link #MAX_SIZE}. + */ + public static LongDataBuffer allocate(long size) { + Validator.createArgs(size, MAX_SIZE); + return new LongJdkDataBuffer(LongBuffer.allocate((int)size)); + } + + /** + * Wraps a JDK {@link LongBuffer} into a {@code LongDataBuffer}. + * + * @param buffer buffer to wrap + * @return the new byte buffer + */ + public static LongDataBuffer wrap(LongBuffer buffer) { + return new LongJdkDataBuffer(buffer); + } + + @Override + public long getLong(long index) { + return buf.get((int)index); + } + + @Override + public LongDataBuffer setLong(long value, long index) { + buf.put((int)index, value); + return this; + } + + @Override + public LongDataBuffer read(long[] dst, int offset, int length) { + buf.duplicate().get(dst, offset, length); + return this; + } + + @Override + public LongDataBuffer write(long[] src, int offset, int length) { + buf.duplicate().put(src, offset, length); + return this; + } + + @Override + public LongDataBuffer copyTo(DataBuffer dst, long size) { + Validator.copyToArgs(this, dst, size); + if (dst instanceof LongJdkDataBuffer) { + LongBuffer dstBuf = ((LongJdkDataBuffer)dst).buf.duplicate(); + LongBuffer srcBuf = (LongBuffer)buf.duplicate().limit((int)size); + dstBuf.put(srcBuf); + } else { + slowCopyTo(dst, size); + } + return this; + } + + @Override + public LongDataBuffer offset(long index) { + Validator.offsetArgs(this, index); + return new LongJdkDataBuffer(((LongBuffer)buf.duplicate().position((int)index)).slice()); + } + + @Override + public LongDataBuffer narrow(long size) { + Validator.narrowArgs(this, size); + return new LongJdkDataBuffer(((LongBuffer)buf.duplicate().limit((int)size)).slice()); + } + + @Override + LongBuffer buf() { + return buf; + } + + private LongJdkDataBuffer(LongBuffer buf) { + this.buf = buf; + } + + private LongBuffer buf; +} diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/jdk/ShortJdkDataBuffer.java b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/jdk/ShortJdkDataBuffer.java new file mode 100644 index 00000000000..28b7bfd9b57 --- /dev/null +++ b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/jdk/ShortJdkDataBuffer.java @@ -0,0 +1,117 @@ +/* + Copyright 2019 The TensorFlow Authors. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ======================================================================= + */ + +package org.tensorflow.nio.buffer.impl.jdk; + +import java.nio.ShortBuffer; +import org.tensorflow.nio.buffer.DataBuffer; +import org.tensorflow.nio.buffer.ShortDataBuffer; +import org.tensorflow.nio.buffer.impl.Validator; + +/** + * A buffer of bytes using a JDK {@link ShortBuffer} for storage. + *

+ * Since JDK buffers supports only 32-bits indexation, the size of this buffer type cannot + * exceed 232 - 1 (see {@link ShortJdkDataBuffer#MAX_SIZE} for the real maximum + * value supported). + */ +public final class ShortJdkDataBuffer extends AbstractJdkDataBuffer + implements ShortDataBuffer { + + /** + * Allocates a new byte buffer, initialized with zeroes. + * + * @param size the new buffer's size, in bytes + * @return the new byte buffer + * @throws IllegalArgumentException if the size is a negative integer or exceeds + * {@link #MAX_SIZE}. + */ + public static ShortDataBuffer allocate(long size) { + Validator.createArgs(size, MAX_SIZE); + return new ShortJdkDataBuffer(ShortBuffer.allocate((int)size)); + } + + /** + * Wraps a JDK {@link ShortBuffer} into a {@code ShortDataBuffer}. + * + * @param buffer buffer to wrap + * @return the new byte buffer + */ + public static ShortDataBuffer wrap(ShortBuffer buffer) { + return new ShortJdkDataBuffer(buffer); + } + + + @Override + public short getShort(long index) { + return buf.get((int)index); + } + + @Override + public ShortDataBuffer setShort(short value, long index) { + buf.put((int)index, value); + return this; + } + + @Override + public ShortDataBuffer read(short[] dst, int offset, int length) { + buf.duplicate().get(dst, offset, length); + return this; + } + + @Override + public ShortDataBuffer write(short[] src, int offset, int length) { + buf.duplicate().put(src, offset, length); + return this; + } + + @Override + public ShortDataBuffer copyTo(DataBuffer dst, long size) { + Validator.copyToArgs(this, dst, size); + if (dst instanceof ShortJdkDataBuffer) { + ShortBuffer dstBuf = ((ShortJdkDataBuffer)dst).buf.duplicate(); + ShortBuffer srcBuf = (ShortBuffer)buf.duplicate().limit((int)size); + dstBuf.put(srcBuf); + } else { + slowCopyTo(dst, size); + } + return this; + } + + @Override + public ShortDataBuffer offset(long index) { + Validator.offsetArgs(this, index); + return new ShortJdkDataBuffer(((ShortBuffer)buf.duplicate().position((int)index)).slice()); + } + + @Override + public ShortDataBuffer narrow(long size) { + Validator.narrowArgs(this, size); + return new ShortJdkDataBuffer(((ShortBuffer)buf.duplicate().limit((int)size)).slice()); + } + + @Override + ShortBuffer buf() { + return buf; + } + + private ShortJdkDataBuffer(ShortBuffer buf) { + this.buf = buf; + } + + private ShortBuffer buf; +} diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/misc/ArrayDataBuffer.java b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/misc/ArrayDataBuffer.java new file mode 100644 index 00000000000..4d20f5903f6 --- /dev/null +++ b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/misc/ArrayDataBuffer.java @@ -0,0 +1,107 @@ +/* + Copyright 2019 The TensorFlow Authors. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ======================================================================= + */ +package org.tensorflow.nio.buffer.impl.misc; + +import java.lang.reflect.Array; +import org.tensorflow.nio.buffer.DataBuffer; +import org.tensorflow.nio.buffer.impl.AbstractDataBuffer; +import org.tensorflow.nio.buffer.impl.Validator; + +public class ArrayDataBuffer extends AbstractDataBuffer { + + public static long MAX_CAPACITY = Integer.MAX_VALUE - 2; + + public static DataBuffer allocate(Class clazz, long size) { + if (size < 0) { + throw new IllegalArgumentException("Capacity must be non-negative"); + } + if (size > MAX_CAPACITY) { + throw new IllegalArgumentException("Size for an array-based data buffer cannot exceeds " + MAX_CAPACITY + + " elements, use a JoinDataBuffer instead"); + } + @SuppressWarnings("unchecked") + T[] array = (T[])Array.newInstance(clazz, (int)size); + return new ArrayDataBuffer<>(array, false); + } + + public static DataBuffer wrap(T[] array, boolean readOnly) { + return new ArrayDataBuffer<>(array, readOnly); + } + + @Override + public long size() { + return length; + } + + @Override + public boolean isReadOnly() { + return readOnly; + } + + @Override + public T get(long index) { + Validator.getArgs(this, index); + return values[(int)index + offset]; + } + + @Override + public DataBuffer set(T value, long index) { + Validator.setArgs(this, index); + values[(int)index + offset] = value; + return this; + } + + @Override + public DataBuffer copyTo(DataBuffer dst, long size) { + Validator.copyToArgs(this, dst, size); + if (dst instanceof ArrayDataBuffer) { + ArrayDataBuffer dstBuffer = (ArrayDataBuffer)dst; + System.arraycopy(values, offset, dstBuffer.values, dstBuffer.offset, (int)size); + } else { + slowCopyTo(dst, size); + } + return this; + } + + @Override + public DataBuffer offset(long index) { + Validator.offsetArgs(this, index); + return new ArrayDataBuffer<>(values, readOnly, offset + (int)index, length - (int)index); + } + + @Override + public DataBuffer narrow(long size) { + Validator.narrowArgs(this, size); + return new ArrayDataBuffer<>(values, readOnly, offset, (int)size); + } + + private ArrayDataBuffer(T[] values, boolean readOnly) { + this(values, readOnly, 0, values.length); + } + + private ArrayDataBuffer(T[] values, boolean readOnly, int offset, int length) { + this.values = values; + this.readOnly = readOnly; + this.offset = offset; + this.length = length; + } + + private final T[] values; + private final boolean readOnly; + private final int offset; + private final int length; +} diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/misc/BitSetDataBuffer.java b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/misc/BitSetDataBuffer.java new file mode 100644 index 00000000000..a27bf13e86b --- /dev/null +++ b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/misc/BitSetDataBuffer.java @@ -0,0 +1,95 @@ +package org.tensorflow.nio.buffer.impl.misc; + +import java.util.BitSet; +import org.tensorflow.nio.buffer.BooleanDataBuffer; +import org.tensorflow.nio.buffer.DataBuffer; +import org.tensorflow.nio.buffer.impl.AbstractDataBuffer; +import org.tensorflow.nio.buffer.impl.Validator; + +public class BitSetDataBuffer extends AbstractDataBuffer implements BooleanDataBuffer { + + public static long MAX_CAPACITY = Integer.MAX_VALUE - 2; + + public static BooleanDataBuffer allocate(long size) { + if (size < 0) { + throw new IllegalArgumentException("Capacity must be non-negative"); + } + if (size > MAX_CAPACITY) { + throw new IllegalArgumentException("Size for an bit-set data buffer cannot exceeds " + MAX_CAPACITY + + " elements, use a JoinDataBuffer instead"); + } + return new BitSetDataBuffer(new BitSet((int)size), false, 0, (int)size); + } + + @Override + public long size() { + return length; + } + + @Override + public boolean isReadOnly() { + return readOnly; + } + + @Override + public boolean getBoolean(long index) { + Validator.getArgs(this, index); + return bitSet.get((int)index + offset); + } + + @Override + public BooleanDataBuffer setBoolean(boolean value, long index) { + Validator.setArgs(this, index); + bitSet.set((int)index + offset, value); + return this; + } + + @Override + public BooleanDataBuffer copyTo(DataBuffer dst, long size) { + Validator.copyToArgs(this, dst, size); + slowCopyTo(dst, size); + return this; + } + + @Override + public BooleanDataBuffer read(boolean[] dst, int offset, int length) { + Validator.readArgs(this, dst.length, offset, length); + for (int i = this.offset, j = offset; i < this.offset + length; ++i, ++j) { + dst[j] = bitSet.get(i); + } + return this; + } + + @Override + public BooleanDataBuffer write(boolean[] src, int offset, int length) { + Validator.readArgs(this, src.length, offset, length); + for (int i = this.offset, j = offset; i < this.offset + length; ++i, ++j) { + bitSet.set(i, src[j]); + } + return this; + } + + @Override + public BooleanDataBuffer offset(long index) { + Validator.offsetArgs(this, index); + return new BitSetDataBuffer(bitSet, readOnly, offset + (int)index, length - (int)index); + } + + @Override + public BooleanDataBuffer narrow(long size) { + Validator.narrowArgs(this, size); + return new BitSetDataBuffer(bitSet, readOnly, offset, (int)size); + } + + private BitSetDataBuffer(BitSet bitSet, boolean readOnly, int offset, int length) { + this.bitSet = bitSet; + this.readOnly = readOnly; + this.offset = offset; + this.length = length; + } + + private final BitSet bitSet; + private final boolean readOnly; + private final int offset; + private final int length; +} diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/misc/BooleanArrayDataBuffer.java b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/misc/BooleanArrayDataBuffer.java new file mode 100644 index 00000000000..626dad463f8 --- /dev/null +++ b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/misc/BooleanArrayDataBuffer.java @@ -0,0 +1,104 @@ +/* + Copyright 2019 The TensorFlow Authors. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ======================================================================= + */ +package org.tensorflow.nio.buffer.impl.misc; + +import org.tensorflow.nio.buffer.BooleanDataBuffer; +import org.tensorflow.nio.buffer.DataBuffer; +import org.tensorflow.nio.buffer.impl.AbstractDataBuffer; +import org.tensorflow.nio.buffer.impl.Validator; + +public class BooleanArrayDataBuffer extends AbstractDataBuffer implements BooleanDataBuffer { + + public static BooleanDataBuffer wrap(boolean[] array, boolean readOnly) { + return new BooleanArrayDataBuffer(array, readOnly); + } + + @Override + public long size() { + return length; + } + + @Override + public boolean isReadOnly() { + return readOnly; + } + + @Override + public boolean getBoolean(long index) { + Validator.getArgs(this, index); + return values[(int)index + offset]; + } + + @Override + public BooleanDataBuffer setBoolean(boolean value, long index) { + Validator.setArgs(this, index); + values[(int)index + offset] = value; + return this; + } + + @Override + public BooleanDataBuffer copyTo(DataBuffer dst, long size) { + Validator.copyToArgs(this, dst, size); + if (dst instanceof BooleanArrayDataBuffer) { + BooleanArrayDataBuffer dstBuffer = (BooleanArrayDataBuffer)dst; + System.arraycopy(values, offset, dstBuffer.values, dstBuffer.offset, length); + } else { + slowCopyTo(dst, size); + } + return this; + } + + @Override + public BooleanDataBuffer read(boolean[] dst, int offset, int length) { + System.arraycopy(values, this.offset, dst, offset, length); + return this; + } + + @Override + public BooleanDataBuffer write(boolean[] src, int offset, int length) { + System.arraycopy(src, offset, values, this.offset, length); + return null; + } + + @Override + public BooleanDataBuffer offset(long index) { + Validator.offsetArgs(this, index); + return new BooleanArrayDataBuffer(values, readOnly, offset + (int)index, length - (int)index); + } + + @Override + public BooleanDataBuffer narrow(long size) { + Validator.narrowArgs(this, size); + return new BooleanArrayDataBuffer(values, readOnly, offset, (int)size); + } + + private BooleanArrayDataBuffer(boolean[] values, boolean readOnly) { + this(values, readOnly, 0, values.length); + } + + private BooleanArrayDataBuffer(boolean[] values, boolean readOnly, int offset, int length) { + this.values = values; + this.readOnly = readOnly; + this.offset = offset; + this.length = length; + } + + private final boolean[] values; + private final boolean readOnly; + private final int offset; + private final int length; +} diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/raw/AbstractRawDataBuffer.java b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/raw/AbstractRawDataBuffer.java new file mode 100644 index 00000000000..ad7e776f181 --- /dev/null +++ b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/raw/AbstractRawDataBuffer.java @@ -0,0 +1,76 @@ +package org.tensorflow.nio.buffer.impl.raw; + +import java.lang.reflect.Field; +import org.tensorflow.nio.buffer.DataBuffer; +import org.tensorflow.nio.buffer.impl.AbstractDataBuffer; +import org.tensorflow.nio.buffer.impl.Validator; +import sun.misc.Unsafe; + +abstract class AbstractRawDataBuffer> extends AbstractDataBuffer { + + /* + * The maximum size for a buffer of this type, i.e. the maximum number of bytes it can store. + *

+ * As the maximum size may vary depending on the JVM implementation and on the platform, this + * property returns a value that is safe for most of them. + */ + static long MAX_32BITS = Integer.MAX_VALUE - 10; + static long MAX_64BITS = Long.MAX_VALUE - 10; + + public long size() { + return memory.size(); + } + + @Override + public boolean isReadOnly() { + return readOnly; + } + + @Override + @SuppressWarnings("unchecked") + public B copyTo(DataBuffer dst, long size) { + Validator.copyToArgs(this, dst, size); + if (dst instanceof AbstractRawDataBuffer) { + AbstractRawDataBuffer unsafeDst = (AbstractRawDataBuffer)dst; + memory.copyTo(unsafeDst.memory, size); + } else { + slowCopyTo(dst, size); + } + return (B)this; + } + + @Override + public B offset(long index) { + Validator.offsetArgs(this, index); + return instantiate(memory.offset(index), isReadOnly()); + } + + @Override + public B narrow(long size) { + Validator.narrowArgs(this, size); + return instantiate(memory.narrow(size), isReadOnly()); + } + + protected abstract B instantiate(UnsafeMemoryHandle region, boolean readOnly); + + static final Unsafe UNSAFE; + + static { + try { + Field theUnsafe = Unsafe.class.getDeclaredField("theUnsafe"); + theUnsafe.setAccessible(true); + UNSAFE = (Unsafe) theUnsafe.get(null); + } catch (NoSuchFieldException | IllegalAccessException e) { + throw new RuntimeException(e); + } + } + + final UnsafeMemoryHandle memory; + + AbstractRawDataBuffer(UnsafeMemoryHandle memory, boolean readOnly) { + this.memory = memory; + this.readOnly = readOnly; + } + + private final boolean readOnly; +} diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/raw/BooleanRawDataBuffer.java b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/raw/BooleanRawDataBuffer.java new file mode 100644 index 00000000000..dc822003fc2 --- /dev/null +++ b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/raw/BooleanRawDataBuffer.java @@ -0,0 +1,73 @@ +package org.tensorflow.nio.buffer.impl.raw; + +import org.tensorflow.nio.buffer.BooleanDataBuffer; +import org.tensorflow.nio.buffer.impl.Validator; +import sun.misc.Unsafe; + +public final class BooleanRawDataBuffer extends AbstractRawDataBuffer + implements BooleanDataBuffer { + + public static BooleanDataBuffer allocate(long size) { + Validator.createArgs(size, MAX_32BITS); + return wrap(new boolean[(int)size], false); + } + + public static BooleanDataBuffer wrap(boolean[] array, boolean readOnly) { + return new BooleanRawDataBuffer(UnsafeMemoryHandle.of(UNSAFE, array), readOnly); + } + + public static BooleanDataBuffer map(Unsafe unsafe, long address, long size, boolean readOnly) { + Validator.createArgs(size, MAX_64BITS); + return new BooleanRawDataBuffer(UnsafeMemoryHandle.of(unsafe, address, size, Byte.BYTES), readOnly); + } + + @Override + public boolean getBoolean(long index) { + Validator.getArgs(this, index); + return memory.getBoolean(index); + } + + @Override + public BooleanDataBuffer setBoolean(boolean value, long index) { + Validator.setArgs(this, index); + memory.setBoolean(value, index); + return this; + } + + @Override + public BooleanDataBuffer read(boolean[] dst) { + Validator.readArgs(this, dst.length, 0, dst.length); + memory.copyTo(UnsafeMemoryHandle.of(memory.unsafe, dst), dst.length); + return this; + } + + @Override + public BooleanDataBuffer read(boolean[] dst, int offset, int length) { + Validator.readArgs(this, dst.length, offset, length); + memory.copyTo(UnsafeMemoryHandle.of(memory.unsafe, dst).offset(offset), length); + return this; + } + + @Override + public BooleanDataBuffer write(boolean[] src) { + Validator.writeArgs(this, src.length, 0, src.length); + UnsafeMemoryHandle.of(memory.unsafe, src).copyTo(memory, src.length); + return this; + } + + @Override + public BooleanDataBuffer write(boolean[] src, int offset, int length) { + Validator.writeArgs(this, src.length, offset, length); + UnsafeMemoryHandle.of(memory.unsafe, src).offset(offset).copyTo(memory, length); + return this; + } + + @Override + protected BooleanDataBuffer instantiate(UnsafeMemoryHandle memory, boolean readOnly) { + return new BooleanRawDataBuffer(memory, readOnly); + } + + private BooleanRawDataBuffer(UnsafeMemoryHandle memory, boolean readOnly) { + super(memory, readOnly); + } +} diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/raw/ByteRawDataBuffer.java b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/raw/ByteRawDataBuffer.java new file mode 100644 index 00000000000..c84d6209cdf --- /dev/null +++ b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/raw/ByteRawDataBuffer.java @@ -0,0 +1,73 @@ +package org.tensorflow.nio.buffer.impl.raw; + +import org.tensorflow.nio.buffer.ByteDataBuffer; +import org.tensorflow.nio.buffer.impl.Validator; +import sun.misc.Unsafe; + +public final class ByteRawDataBuffer extends AbstractRawDataBuffer + implements ByteDataBuffer { + + public static ByteDataBuffer allocate(long size) { + Validator.createArgs(size, MAX_32BITS); + return wrap(new byte[(int)size], false); + } + + public static ByteDataBuffer wrap(byte[] array, boolean readOnly) { + return new ByteRawDataBuffer(UnsafeMemoryHandle.of(UNSAFE, array), readOnly); + } + + public static ByteDataBuffer map(Unsafe unsafe, long address, long size, boolean readOnly) { + Validator.createArgs(size, MAX_64BITS); + return new ByteRawDataBuffer(UnsafeMemoryHandle.of(unsafe, address, size, Byte.BYTES), readOnly); + } + + @Override + public byte getByte(long index) { + Validator.getArgs(this, index); + return memory.getByte(index); + } + + @Override + public ByteDataBuffer setByte(byte value, long index) { + Validator.setArgs(this, index); + memory.setByte(value, index); + return this; + } + + @Override + public ByteDataBuffer read(byte[] dst) { + Validator.readArgs(this, dst.length, 0, dst.length); + memory.copyTo(UnsafeMemoryHandle.of(memory.unsafe, dst), dst.length); + return this; + } + + @Override + public ByteDataBuffer read(byte[] dst, int offset, int length) { + Validator.readArgs(this, dst.length, offset, length); + memory.copyTo(UnsafeMemoryHandle.of(memory.unsafe, dst).offset(offset), length); + return this; + } + + @Override + public ByteDataBuffer write(byte[] src) { + Validator.writeArgs(this, src.length, 0, src.length); + UnsafeMemoryHandle.of(memory.unsafe, src).copyTo(memory, src.length); + return this; + } + + @Override + public ByteDataBuffer write(byte[] src, int offset, int length) { + Validator.writeArgs(this, src.length, offset, length); + UnsafeMemoryHandle.of(memory.unsafe, src).offset(offset).copyTo(memory, length); + return this; + } + + @Override + protected ByteDataBuffer instantiate(UnsafeMemoryHandle memory, boolean readOnly) { + return new ByteRawDataBuffer(memory, readOnly); + } + + private ByteRawDataBuffer(UnsafeMemoryHandle memory, boolean readOnly) { + super(memory, readOnly); + } +} diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/raw/DoubleRawDataBuffer.java b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/raw/DoubleRawDataBuffer.java new file mode 100644 index 00000000000..3c5af30634a --- /dev/null +++ b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/raw/DoubleRawDataBuffer.java @@ -0,0 +1,73 @@ +package org.tensorflow.nio.buffer.impl.raw; + +import org.tensorflow.nio.buffer.DoubleDataBuffer; +import org.tensorflow.nio.buffer.impl.Validator; +import sun.misc.Unsafe; + +public final class DoubleRawDataBuffer extends AbstractRawDataBuffer + implements DoubleDataBuffer { + + public static DoubleDataBuffer allocate(long size) { + Validator.createArgs(size, MAX_32BITS); + return wrap(new double[(int)size], false); + } + + public static DoubleDataBuffer wrap(double[] array, boolean readOnly) { + return new DoubleRawDataBuffer(UnsafeMemoryHandle.of(UNSAFE, array), readOnly); + } + + public static DoubleDataBuffer map(Unsafe unsafe, long address, long size, boolean readOnly) { + Validator.createArgs(size, MAX_64BITS); + return new DoubleRawDataBuffer(UnsafeMemoryHandle.of(unsafe, address, size, Double.BYTES), readOnly); + } + + @Override + public double getDouble(long index) { + Validator.getArgs(this, index); + return memory.getDouble(index); + } + + @Override + public DoubleDataBuffer setDouble(double value, long index) { + Validator.setArgs(this, index); + memory.setDouble(value, index); + return this; + } + + @Override + public DoubleDataBuffer read(double[] dst) { + Validator.readArgs(this, dst.length, 0, dst.length); + memory.copyTo(UnsafeMemoryHandle.of(memory.unsafe, dst), dst.length); + return this; + } + + @Override + public DoubleDataBuffer read(double[] dst, int offset, int length) { + Validator.readArgs(this, dst.length, offset, length); + memory.copyTo(UnsafeMemoryHandle.of(memory.unsafe, dst).offset(offset), length); + return this; + } + + @Override + public DoubleDataBuffer write(double[] src) { + Validator.writeArgs(this, src.length, 0, src.length); + UnsafeMemoryHandle.of(memory.unsafe, src).copyTo(memory, src.length); + return this; + } + + @Override + public DoubleDataBuffer write(double[] src, int offset, int length) { + Validator.writeArgs(this, src.length, offset, length); + UnsafeMemoryHandle.of(memory.unsafe, src).offset(offset).copyTo(memory, length); + return this; + } + + @Override + protected DoubleDataBuffer instantiate(UnsafeMemoryHandle memory, boolean readOnly) { + return new DoubleRawDataBuffer(memory, readOnly); + } + + private DoubleRawDataBuffer(UnsafeMemoryHandle memory, boolean readOnly) { + super(memory, readOnly); + } +} diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/raw/FloatRawDataBuffer.java b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/raw/FloatRawDataBuffer.java new file mode 100644 index 00000000000..1b66d91d687 --- /dev/null +++ b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/raw/FloatRawDataBuffer.java @@ -0,0 +1,73 @@ +package org.tensorflow.nio.buffer.impl.raw; + +import org.tensorflow.nio.buffer.FloatDataBuffer; +import org.tensorflow.nio.buffer.impl.Validator; +import sun.misc.Unsafe; + +public final class FloatRawDataBuffer extends AbstractRawDataBuffer + implements FloatDataBuffer { + + public static FloatDataBuffer allocate(long size) { + Validator.createArgs(size, MAX_32BITS); + return wrap(new float[(int)size], false); + } + + public static FloatDataBuffer wrap(float[] array, boolean readOnly) { + return new FloatRawDataBuffer(UnsafeMemoryHandle.of(UNSAFE, array), readOnly); + } + + public static FloatDataBuffer map(Unsafe unsafe, long address, long size, boolean readOnly) { + Validator.createArgs(size, MAX_64BITS); + return new FloatRawDataBuffer(UnsafeMemoryHandle.of(unsafe, address, size, Float.BYTES), readOnly); + } + + @Override + public float getFloat(long index) { + Validator.getArgs(this, index); + return memory.getFloat(index); + } + + @Override + public FloatDataBuffer setFloat(float value, long index) { + Validator.setArgs(this, index); + memory.setFloat(value, index); + return this; + } + + @Override + public FloatDataBuffer read(float[] dst) { + Validator.readArgs(this, dst.length, 0, dst.length); + memory.copyTo(UnsafeMemoryHandle.of(memory.unsafe, dst), dst.length); + return this; + } + + @Override + public FloatDataBuffer read(float[] dst, int offset, int length) { + Validator.readArgs(this, dst.length, offset, length); + memory.copyTo(UnsafeMemoryHandle.of(memory.unsafe, dst).offset(offset), length); + return this; + } + + @Override + public FloatDataBuffer write(float[] src) { + Validator.writeArgs(this, src.length, 0, src.length); + UnsafeMemoryHandle.of(memory.unsafe, src).copyTo(memory, src.length); + return this; + } + + @Override + public FloatDataBuffer write(float[] src, int offset, int length) { + Validator.writeArgs(this, src.length, offset, length); + UnsafeMemoryHandle.of(memory.unsafe, src).offset(offset).copyTo(memory, length); + return this; + } + + @Override + protected FloatDataBuffer instantiate(UnsafeMemoryHandle memory, boolean readOnly) { + return new FloatRawDataBuffer(memory, readOnly); + } + + private FloatRawDataBuffer(UnsafeMemoryHandle memory, boolean readOnly) { + super(memory, readOnly); + } +} diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/raw/IntRawDataBuffer.java b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/raw/IntRawDataBuffer.java new file mode 100644 index 00000000000..efb489816ef --- /dev/null +++ b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/raw/IntRawDataBuffer.java @@ -0,0 +1,73 @@ +package org.tensorflow.nio.buffer.impl.raw; + +import org.tensorflow.nio.buffer.IntDataBuffer; +import org.tensorflow.nio.buffer.impl.Validator; +import sun.misc.Unsafe; + +public final class IntRawDataBuffer extends AbstractRawDataBuffer + implements IntDataBuffer { + + public static IntDataBuffer allocate(long size) { + Validator.createArgs(size, MAX_32BITS); + return wrap(new int[(int)size], false); + } + + public static IntDataBuffer wrap(int[] array, boolean readOnly) { + return new IntRawDataBuffer(UnsafeMemoryHandle.of(UNSAFE, array), readOnly); + } + + public static IntDataBuffer map(Unsafe unsafe, long address, long size, boolean readOnly) { + Validator.createArgs(size, MAX_64BITS); + return new IntRawDataBuffer(UnsafeMemoryHandle.of(unsafe, address, size, Integer.BYTES), readOnly); + } + + @Override + public int getInt(long index) { + Validator.getArgs(this, index); + return memory.getInt(index); + } + + @Override + public IntDataBuffer setInt(int value, long index) { + Validator.setArgs(this, index); + memory.setInt(value, index); + return this; + } + + @Override + public IntDataBuffer read(int[] dst) { + Validator.readArgs(this, dst.length, 0, dst.length); + memory.copyTo(UnsafeMemoryHandle.of(memory.unsafe, dst), dst.length); + return this; + } + + @Override + public IntDataBuffer read(int[] dst, int offset, int length) { + Validator.readArgs(this, dst.length, offset, length); + memory.copyTo(UnsafeMemoryHandle.of(memory.unsafe, dst).offset(offset), length); + return this; + } + + @Override + public IntDataBuffer write(int[] src) { + Validator.writeArgs(this, src.length, 0, src.length); + UnsafeMemoryHandle.of(memory.unsafe, src).copyTo(memory, src.length); + return this; + } + + @Override + public IntDataBuffer write(int[] src, int offset, int length) { + Validator.writeArgs(this, src.length, offset, length); + UnsafeMemoryHandle.of(memory.unsafe, src).offset(offset).copyTo(memory, length); + return this; + } + + @Override + protected IntDataBuffer instantiate(UnsafeMemoryHandle memory, boolean readOnly) { + return new IntRawDataBuffer(memory, readOnly); + } + + private IntRawDataBuffer(UnsafeMemoryHandle memory, boolean readOnly) { + super(memory, readOnly); + } +} diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/raw/LongRawDataBuffer.java b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/raw/LongRawDataBuffer.java new file mode 100644 index 00000000000..7a43fb0c0d1 --- /dev/null +++ b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/raw/LongRawDataBuffer.java @@ -0,0 +1,73 @@ +package org.tensorflow.nio.buffer.impl.raw; + +import org.tensorflow.nio.buffer.LongDataBuffer; +import org.tensorflow.nio.buffer.impl.Validator; +import sun.misc.Unsafe; + +public final class LongRawDataBuffer extends AbstractRawDataBuffer + implements LongDataBuffer { + + public static LongDataBuffer allocate(long size) { + Validator.createArgs(size, MAX_32BITS); + return wrap(new long[(int)size], false); + } + + public static LongDataBuffer wrap(long[] array, boolean readOnly) { + return new LongRawDataBuffer(UnsafeMemoryHandle.of(UNSAFE, array), readOnly); + } + + public static LongDataBuffer map(Unsafe unsafe, long address, long size, boolean readOnly) { + Validator.createArgs(size, MAX_64BITS); + return new LongRawDataBuffer(UnsafeMemoryHandle.of(unsafe, address, size, Long.BYTES), readOnly); + } + + @Override + public long getLong(long index) { + Validator.getArgs(this, index); + return memory.getLong(index); + } + + @Override + public LongDataBuffer setLong(long value, long index) { + Validator.setArgs(this, index); + memory.setLong(value, index); + return this; + } + + @Override + public LongDataBuffer read(long[] dst) { + Validator.readArgs(this, dst.length, 0, dst.length); + memory.copyTo(UnsafeMemoryHandle.of(memory.unsafe, dst), dst.length); + return this; + } + + @Override + public LongDataBuffer read(long[] dst, int offset, int length) { + Validator.readArgs(this, dst.length, offset, length); + memory.copyTo(UnsafeMemoryHandle.of(memory.unsafe, dst).offset(offset), length); + return this; + } + + @Override + public LongDataBuffer write(long[] src) { + Validator.writeArgs(this, src.length, 0, src.length); + UnsafeMemoryHandle.of(memory.unsafe, src).copyTo(memory, src.length); + return this; + } + + @Override + public LongDataBuffer write(long[] src, int offset, int length) { + Validator.writeArgs(this, src.length, offset, length); + UnsafeMemoryHandle.of(memory.unsafe, src).offset(offset).copyTo(memory, length); + return this; + } + + @Override + protected LongDataBuffer instantiate(UnsafeMemoryHandle memory, boolean readOnly) { + return new LongRawDataBuffer(memory, readOnly); + } + + private LongRawDataBuffer(UnsafeMemoryHandle memory, boolean readOnly) { + super(memory, readOnly); + } +} diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/raw/ShortRawDataBuffer.java b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/raw/ShortRawDataBuffer.java new file mode 100644 index 00000000000..5cc6d93bc83 --- /dev/null +++ b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/raw/ShortRawDataBuffer.java @@ -0,0 +1,73 @@ +package org.tensorflow.nio.buffer.impl.raw; + +import org.tensorflow.nio.buffer.ShortDataBuffer; +import org.tensorflow.nio.buffer.impl.Validator; +import sun.misc.Unsafe; + +public final class ShortRawDataBuffer extends AbstractRawDataBuffer + implements ShortDataBuffer { + + public static ShortDataBuffer allocate(long size) { + Validator.createArgs(size, MAX_32BITS); + return wrap(new short[(int)size], false); + } + + public static ShortDataBuffer wrap(short[] array, boolean readOnly) { + return new ShortRawDataBuffer(UnsafeMemoryHandle.of(UNSAFE, array), readOnly); + } + + public static ShortDataBuffer map(Unsafe unsafe, long address, long size, boolean readOnly) { + Validator.createArgs(size, MAX_64BITS); + return new ShortRawDataBuffer(UnsafeMemoryHandle.of(unsafe, address, size, Short.BYTES), readOnly); + } + + @Override + public short getShort(long index) { + Validator.getArgs(this, index); + return memory.getShort(index); + } + + @Override + public ShortDataBuffer setShort(short value, long index) { + Validator.setArgs(this, index); + memory.setShort(value, index); + return this; + } + + @Override + public ShortDataBuffer read(short[] dst) { + Validator.readArgs(this, dst.length, 0, dst.length); + memory.copyTo(UnsafeMemoryHandle.of(memory.unsafe, dst), dst.length); + return this; + } + + @Override + public ShortDataBuffer read(short[] dst, int offset, int length) { + Validator.readArgs(this, dst.length, offset, length); + memory.copyTo(UnsafeMemoryHandle.of(memory.unsafe, dst).offset(offset), length); + return this; + } + + @Override + public ShortDataBuffer write(short[] src) { + Validator.writeArgs(this, src.length, 0, src.length); + UnsafeMemoryHandle.of(memory.unsafe, src).copyTo(memory, src.length); + return this; + } + + @Override + public ShortDataBuffer write(short[] src, int offset, int length) { + Validator.writeArgs(this, src.length, offset, length); + UnsafeMemoryHandle.of(memory.unsafe, src).offset(offset).copyTo(memory, length); + return this; + } + + @Override + protected ShortDataBuffer instantiate(UnsafeMemoryHandle memory, boolean readOnly) { + return new ShortRawDataBuffer(memory, readOnly); + } + + private ShortRawDataBuffer(UnsafeMemoryHandle memory, boolean readOnly) { + super(memory, readOnly); + } +} diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/raw/UnsafeMemoryHandle.java b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/raw/UnsafeMemoryHandle.java new file mode 100644 index 00000000000..4bd0f49efb8 --- /dev/null +++ b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/raw/UnsafeMemoryHandle.java @@ -0,0 +1,138 @@ +package org.tensorflow.nio.buffer.impl.raw; + +import sun.misc.Unsafe; + +public final class UnsafeMemoryHandle { + + static UnsafeMemoryHandle of(Unsafe unsafe, byte[] array) { + return of(unsafe, array, Unsafe.ARRAY_BYTE_BASE_OFFSET, array.length, Unsafe.ARRAY_BYTE_INDEX_SCALE); + } + + static UnsafeMemoryHandle of(Unsafe unsafe, boolean[] array) { + return of(unsafe, array, Unsafe.ARRAY_BOOLEAN_BASE_OFFSET, array.length, Unsafe.ARRAY_BOOLEAN_INDEX_SCALE); + } + + static UnsafeMemoryHandle of(Unsafe unsafe, short[] array) { + return of(unsafe, array, Unsafe.ARRAY_SHORT_BASE_OFFSET, array.length, Unsafe.ARRAY_SHORT_INDEX_SCALE); + } + + static UnsafeMemoryHandle of(Unsafe unsafe, int[] array) { + return of(unsafe, array, Unsafe.ARRAY_INT_BASE_OFFSET, array.length, Unsafe.ARRAY_INT_INDEX_SCALE); + } + + static UnsafeMemoryHandle of(Unsafe unsafe, float[] array) { + return of(unsafe, array, Unsafe.ARRAY_FLOAT_BASE_OFFSET, array.length, Unsafe.ARRAY_FLOAT_INDEX_SCALE); + } + + static UnsafeMemoryHandle of(Unsafe unsafe, double[] array) { + return of(unsafe, array, Unsafe.ARRAY_DOUBLE_BASE_OFFSET, array.length, Unsafe.ARRAY_DOUBLE_INDEX_SCALE); + } + + static UnsafeMemoryHandle of(Unsafe unsafe, long[] array) { + return of(unsafe, array, Unsafe.ARRAY_LONG_BASE_OFFSET, array.length, Unsafe.ARRAY_LONG_INDEX_SCALE); + } + + static UnsafeMemoryHandle of(Unsafe unsafe, Object array, long baseOffset, int length, long scale) { + return new UnsafeMemoryHandle(unsafe, array, baseOffset, length * scale, scale); + } + + static UnsafeMemoryHandle of(Unsafe unsafe, long address, long byteSize, long scale) { + return new UnsafeMemoryHandle(unsafe, null, address, byteSize, scale); + } + + final Unsafe unsafe; + + long size() { + return byteSize / scale; + } + + byte getByte(long index) { + return unsafe.getByte(object, align(index)); + } + + void setByte(byte value, long index) { + unsafe.putByte(object, align(index), value); + } + + boolean getBoolean(long index) { + return unsafe.getBoolean(object, align(index)); + } + + void setBoolean(boolean value, long index) { + unsafe.putBoolean(object, align(index), value); + } + + short getShort(long index) { + return unsafe.getShort(object, align(index)); + } + + void setShort(short value, long index) { + unsafe.putShort(object, align(index), value); + } + + int getInt(long index) { + return unsafe.getInt(object, align(index)); + } + + void setInt(int value, long index) { + unsafe.putInt(object, align(index), value); + } + + float getFloat(long index) { + return unsafe.getFloat(object, align(index)); + } + + void setFloat(float value, long index) { + unsafe.putFloat(object, align(index), value); + } + + double getDouble(long index) { + return unsafe.getDouble(object, align(index)); + } + + void setDouble(double value, long index) { + unsafe.putDouble(object, align(index), value); + } + + long getLong(long index) { + return unsafe.getLong(object, align(index)); + } + + void setLong(long value, long index) { + unsafe.putLong(object, align(index), value); + } + + void copyTo(UnsafeMemoryHandle memory, long length) { + unsafe.copyMemory(object, byteOffset, memory.object, memory.byteOffset, length * scale); + } + + UnsafeMemoryHandle offset(long index) { + long offset = scale(index); + return new UnsafeMemoryHandle(unsafe, object, this.byteOffset + offset, byteSize - offset, scale); + } + + UnsafeMemoryHandle narrow(long size) { + return new UnsafeMemoryHandle(unsafe, object, byteOffset, scale(size), scale); + } + + private final Object object; + private final long byteOffset; + private final long byteSize; + private final long scale; + + private UnsafeMemoryHandle(Unsafe unsafe, Object object, long byteOffset, long byteSize, long scale) { + this.unsafe = unsafe; + this.object = object; + this.byteOffset = byteOffset; + this.byteSize = byteSize; + this.scale = scale; + } + + private long align(long index) { + return byteOffset + index * scale; + } + + private long scale(long value) { + return value * scale; + } +} diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/virtual/AbstractVirtualDataBuffer.java b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/virtual/AbstractVirtualDataBuffer.java new file mode 100644 index 00000000000..f4b563301f6 --- /dev/null +++ b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/virtual/AbstractVirtualDataBuffer.java @@ -0,0 +1,57 @@ +package org.tensorflow.nio.buffer.impl.virtual; + +import org.tensorflow.nio.buffer.ByteDataBuffer; +import org.tensorflow.nio.buffer.DataBuffer; +import org.tensorflow.nio.buffer.adapter.DataAdapter; +import org.tensorflow.nio.buffer.impl.AbstractDataBuffer; +import org.tensorflow.nio.buffer.impl.Validator; + +@SuppressWarnings("unchecked") +abstract class AbstractVirtualDataBuffer> extends AbstractDataBuffer { + + @Override + public long size() { + return physicalBuffer.size() / adapter.sizeInBytes(); + } + + @Override + public boolean isReadOnly() { + return physicalBuffer.isReadOnly(); + } + + @Override + public T get(long index) { + Validator.getArgs(this, index); + return adapter.readValue(physicalBuffer, index * adapter.sizeInBytes()); + } + + @Override + public B set(T value, long index) { + Validator.setArgs(this, index); + adapter.writeValue(physicalBuffer, value, index * adapter.sizeInBytes()); + return (B)this; + } + + @Override + public B copyTo(DataBuffer dst, long size) { + Validator.copyToArgs(this, dst, size); + slowCopyTo(dst, size); // FIXME anyway to speed up this? + return (B)this; + } + + AbstractVirtualDataBuffer(ByteDataBuffer physicalBuffer, DataAdapter adapter) { + this.physicalBuffer = physicalBuffer; + this.adapter = adapter; + } + + DataAdapter adapter() { + return adapter; + } + + ByteDataBuffer physicalBuffer() { + return physicalBuffer; + } + + private final ByteDataBuffer physicalBuffer; + private final DataAdapter adapter; +} diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/virtual/BooleanVirtualDataBuffer.java b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/virtual/BooleanVirtualDataBuffer.java new file mode 100644 index 00000000000..b8d50f9cd79 --- /dev/null +++ b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/virtual/BooleanVirtualDataBuffer.java @@ -0,0 +1,62 @@ +package org.tensorflow.nio.buffer.impl.virtual; + +import org.tensorflow.nio.buffer.BooleanDataBuffer; +import org.tensorflow.nio.buffer.ByteDataBuffer; +import org.tensorflow.nio.buffer.adapter.BooleanDataAdapter; +import org.tensorflow.nio.buffer.impl.Validator; + +public class BooleanVirtualDataBuffer extends AbstractVirtualDataBuffer + implements BooleanDataBuffer { + + public static BooleanVirtualDataBuffer create(ByteDataBuffer delegate, BooleanDataAdapter booleanAdapter) { + return new BooleanVirtualDataBuffer(delegate, booleanAdapter); + } + + @Override + public boolean getBoolean(long index) { + Validator.getArgs(this, index); + return adapter.readBoolean(physicalBuffer(), index * adapter.sizeInBytes()); + } + + @Override + public BooleanDataBuffer setBoolean(boolean value, long index) { + Validator.setArgs(this, index); + adapter.writeBoolean(physicalBuffer(), value, index * adapter.sizeInBytes()); + return this; + } + + @Override + public BooleanDataBuffer read(boolean[] dst, int offset, int length) { + Validator.readArgs(this, dst.length, offset, length); + for (int i = 0, j = offset; i < length; ++i, ++j) { + dst[j] = adapter.readBoolean(physicalBuffer(), i * adapter.sizeInBytes()); + } + return this; + } + + @Override + public BooleanDataBuffer write(boolean[] src, int offset, int length) { + Validator.writeArgs(this, src.length, offset, length); + for (int i = 0, j = offset; i < length; ++i, ++j) { + adapter.writeBoolean(physicalBuffer(), src[j], i * adapter.sizeInBytes()); + } + return this; + } + + @Override + public BooleanDataBuffer offset(long index) { + return new BooleanVirtualDataBuffer(physicalBuffer().offset(index * adapter.sizeInBytes()), adapter); + } + + @Override + public BooleanDataBuffer narrow(long size) { + return new BooleanVirtualDataBuffer(physicalBuffer().narrow(size * adapter.sizeInBytes()), adapter); + } + + private BooleanVirtualDataBuffer(ByteDataBuffer physicalBuffer, BooleanDataAdapter adapter) { + super(physicalBuffer, adapter); + this.adapter = adapter; + } + + private BooleanDataAdapter adapter; +} diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/virtual/DoubleVirtualDataBuffer.java b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/virtual/DoubleVirtualDataBuffer.java new file mode 100644 index 00000000000..ab3a7b7c3da --- /dev/null +++ b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/virtual/DoubleVirtualDataBuffer.java @@ -0,0 +1,62 @@ +package org.tensorflow.nio.buffer.impl.virtual; + +import org.tensorflow.nio.buffer.ByteDataBuffer; +import org.tensorflow.nio.buffer.DoubleDataBuffer; +import org.tensorflow.nio.buffer.adapter.DoubleDataAdapter; +import org.tensorflow.nio.buffer.impl.Validator; + +public class DoubleVirtualDataBuffer extends AbstractVirtualDataBuffer + implements DoubleDataBuffer { + + public static DoubleVirtualDataBuffer create(ByteDataBuffer delegate, DoubleDataAdapter doubleAdapter) { + return new DoubleVirtualDataBuffer(delegate, doubleAdapter); + } + + @Override + public double getDouble(long index) { + Validator.getArgs(this, index); + return adapter.readDouble(physicalBuffer(), index * adapter.sizeInBytes()); + } + + @Override + public DoubleDataBuffer setDouble(double value, long index) { + Validator.setArgs(this, index); + adapter.writeDouble(physicalBuffer(), value, index * adapter.sizeInBytes()); + return this; + } + + @Override + public DoubleDataBuffer read(double[] dst, int offset, int length) { + Validator.readArgs(this, dst.length, offset, length); + for (int i = 0, j = offset; i < length; ++i, ++j) { + dst[j] = adapter.readDouble(physicalBuffer(), i * adapter.sizeInBytes()); + } + return this; + } + + @Override + public DoubleDataBuffer write(double[] src, int offset, int length) { + Validator.writeArgs(this, src.length, offset, length); + for (int i = 0, j = offset; i < length; ++i, ++j) { + adapter.writeDouble(physicalBuffer(), src[j], i * adapter.sizeInBytes()); + } + return this; + } + + @Override + public DoubleDataBuffer offset(long index) { + return new DoubleVirtualDataBuffer(physicalBuffer().offset(index * adapter.sizeInBytes()), adapter); + } + + @Override + public DoubleDataBuffer narrow(long size) { + return new DoubleVirtualDataBuffer(physicalBuffer().narrow(size * adapter.sizeInBytes()), adapter); + } + + private DoubleVirtualDataBuffer(ByteDataBuffer physicalBuffer, DoubleDataAdapter adapter) { + super(physicalBuffer, adapter); + this.adapter = adapter; + } + + private DoubleDataAdapter adapter; +} diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/virtual/FloatVirtualDataBuffer.java b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/virtual/FloatVirtualDataBuffer.java new file mode 100644 index 00000000000..7785a006d42 --- /dev/null +++ b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/virtual/FloatVirtualDataBuffer.java @@ -0,0 +1,62 @@ +package org.tensorflow.nio.buffer.impl.virtual; + +import org.tensorflow.nio.buffer.ByteDataBuffer; +import org.tensorflow.nio.buffer.FloatDataBuffer; +import org.tensorflow.nio.buffer.adapter.FloatDataAdapter; +import org.tensorflow.nio.buffer.impl.Validator; + +public class FloatVirtualDataBuffer extends AbstractVirtualDataBuffer + implements FloatDataBuffer { + + public static FloatVirtualDataBuffer create(ByteDataBuffer delegate, FloatDataAdapter floatAdapter) { + return new FloatVirtualDataBuffer(delegate, floatAdapter); + } + + @Override + public float getFloat(long index) { + Validator.getArgs(this, index); + return adapter.readFloat(physicalBuffer(), index * adapter.sizeInBytes()); + } + + @Override + public FloatDataBuffer setFloat(float value, long index) { + Validator.setArgs(this, index); + adapter.writeFloat(physicalBuffer(), value, index * adapter.sizeInBytes()); + return this; + } + + @Override + public FloatDataBuffer read(float[] dst, int offset, int length) { + Validator.readArgs(this, dst.length, offset, length); + for (int i = 0, j = offset; i < length; ++i, ++j) { + dst[j] = adapter.readFloat(physicalBuffer(), i * adapter.sizeInBytes()); + } + return this; + } + + @Override + public FloatDataBuffer write(float[] src, int offset, int length) { + Validator.writeArgs(this, src.length, offset, length); + for (int i = 0, j = offset; i < length; ++i, ++j) { + adapter.writeFloat(physicalBuffer(), src[j], i * adapter.sizeInBytes()); + } + return this; + } + + @Override + public FloatDataBuffer offset(long index) { + return new FloatVirtualDataBuffer(physicalBuffer().offset(index * adapter.sizeInBytes()), adapter); + } + + @Override + public FloatDataBuffer narrow(long size) { + return new FloatVirtualDataBuffer(physicalBuffer().narrow(size * adapter.sizeInBytes()), adapter); + } + + private FloatVirtualDataBuffer(ByteDataBuffer physicalBuffer, FloatDataAdapter adapter) { + super(physicalBuffer, adapter); + this.adapter = adapter; + } + + private FloatDataAdapter adapter; +} diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/virtual/IntVirtualDataBuffer.java b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/virtual/IntVirtualDataBuffer.java new file mode 100644 index 00000000000..617a302bf03 --- /dev/null +++ b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/virtual/IntVirtualDataBuffer.java @@ -0,0 +1,62 @@ +package org.tensorflow.nio.buffer.impl.virtual; + +import org.tensorflow.nio.buffer.ByteDataBuffer; +import org.tensorflow.nio.buffer.IntDataBuffer; +import org.tensorflow.nio.buffer.adapter.IntDataAdapter; +import org.tensorflow.nio.buffer.impl.Validator; + +public class IntVirtualDataBuffer extends AbstractVirtualDataBuffer + implements IntDataBuffer { + + public static IntVirtualDataBuffer create(ByteDataBuffer delegate, IntDataAdapter intAdapter) { + return new IntVirtualDataBuffer(delegate, intAdapter); + } + + @Override + public int getInt(long index) { + Validator.getArgs(this, index); + return adapter.readInt(physicalBuffer(), index * adapter.sizeInBytes()); + } + + @Override + public IntDataBuffer setInt(int value, long index) { + Validator.setArgs(this, index); + adapter.writeInt(physicalBuffer(), value, index * adapter.sizeInBytes()); + return this; + } + + @Override + public IntDataBuffer read(int[] dst, int offset, int length) { + Validator.readArgs(this, dst.length, offset, length); + for (int i = 0, j = offset; i < length; ++i, ++j) { + dst[j] = adapter.readInt(physicalBuffer(), i * adapter.sizeInBytes()); + } + return this; + } + + @Override + public IntDataBuffer write(int[] src, int offset, int length) { + Validator.writeArgs(this, src.length, offset, length); + for (int i = 0, j = offset; i < length; ++i, ++j) { + adapter.writeInt(physicalBuffer(), src[j], i * adapter.sizeInBytes()); + } + return this; + } + + @Override + public IntDataBuffer offset(long index) { + return new IntVirtualDataBuffer(physicalBuffer().offset(index * adapter.sizeInBytes()), adapter); + } + + @Override + public IntDataBuffer narrow(long size) { + return new IntVirtualDataBuffer(physicalBuffer().narrow(size * adapter.sizeInBytes()), adapter); + } + + private IntVirtualDataBuffer(ByteDataBuffer physicalBuffer, IntDataAdapter adapter) { + super(physicalBuffer, adapter); + this.adapter = adapter; + } + + private IntDataAdapter adapter; +} diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/virtual/LongVirtualDataBuffer.java b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/virtual/LongVirtualDataBuffer.java new file mode 100644 index 00000000000..f5c69bbf0f3 --- /dev/null +++ b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/virtual/LongVirtualDataBuffer.java @@ -0,0 +1,62 @@ +package org.tensorflow.nio.buffer.impl.virtual; + +import org.tensorflow.nio.buffer.ByteDataBuffer; +import org.tensorflow.nio.buffer.LongDataBuffer; +import org.tensorflow.nio.buffer.adapter.LongDataAdapter; +import org.tensorflow.nio.buffer.impl.Validator; + +public class LongVirtualDataBuffer extends AbstractVirtualDataBuffer + implements LongDataBuffer { + + public static LongVirtualDataBuffer create(ByteDataBuffer delegate, LongDataAdapter longAdapter) { + return new LongVirtualDataBuffer(delegate, longAdapter); + } + + @Override + public long getLong(long index) { + Validator.getArgs(this, index); + return adapter.readLong(physicalBuffer(), index * adapter.sizeInBytes()); + } + + @Override + public LongDataBuffer setLong(long value, long index) { + Validator.setArgs(this, index); + adapter.writeLong(physicalBuffer(), value, index * adapter.sizeInBytes()); + return this; + } + + @Override + public LongDataBuffer read(long[] dst, int offset, int length) { + Validator.readArgs(this, dst.length, offset, length); + for (int i = 0, j = offset; i < length; ++i, ++j) { + dst[j] = adapter.readLong(physicalBuffer(), i * adapter.sizeInBytes()); + } + return this; + } + + @Override + public LongDataBuffer write(long[] src, int offset, int length) { + Validator.writeArgs(this, src.length, offset, length); + for (int i = 0, j = offset; i < length; ++i, ++j) { + adapter.writeLong(physicalBuffer(), src[j], i * adapter.sizeInBytes()); + } + return this; + } + + @Override + public LongDataBuffer offset(long index) { + return new LongVirtualDataBuffer(physicalBuffer().offset(index * adapter.sizeInBytes()), adapter); + } + + @Override + public LongDataBuffer narrow(long size) { + return new LongVirtualDataBuffer(physicalBuffer().narrow(size * adapter.sizeInBytes()), adapter); + } + + private LongVirtualDataBuffer(ByteDataBuffer physicalBuffer, LongDataAdapter adapter) { + super(physicalBuffer, adapter); + this.adapter = adapter; + } + + private LongDataAdapter adapter; +} diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/virtual/ShortVirtualDataBuffer.java b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/virtual/ShortVirtualDataBuffer.java new file mode 100644 index 00000000000..e811325f192 --- /dev/null +++ b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/virtual/ShortVirtualDataBuffer.java @@ -0,0 +1,62 @@ +package org.tensorflow.nio.buffer.impl.virtual; + +import org.tensorflow.nio.buffer.ByteDataBuffer; +import org.tensorflow.nio.buffer.ShortDataBuffer; +import org.tensorflow.nio.buffer.adapter.ShortDataAdapter; +import org.tensorflow.nio.buffer.impl.Validator; + +public class ShortVirtualDataBuffer extends AbstractVirtualDataBuffer + implements ShortDataBuffer { + + public static ShortVirtualDataBuffer create(ByteDataBuffer delegate, ShortDataAdapter shortAdapter) { + return new ShortVirtualDataBuffer(delegate, shortAdapter); + } + + @Override + public short getShort(long index) { + Validator.getArgs(this, index); + return adapter.readShort(physicalBuffer(), index * adapter.sizeInBytes()); + } + + @Override + public ShortDataBuffer setShort(short value, long index) { + Validator.setArgs(this, index); + adapter.writeShort(physicalBuffer(), value, index * adapter.sizeInBytes()); + return this; + } + + @Override + public ShortDataBuffer read(short[] dst, int offset, int length) { + Validator.readArgs(this, dst.length, offset, length); + for (int i = 0, j = offset; i < length; ++i, ++j) { + dst[j] = adapter.readShort(physicalBuffer(), i * adapter.sizeInBytes()); + } + return this; + } + + @Override + public ShortDataBuffer write(short[] src, int offset, int length) { + Validator.writeArgs(this, src.length, offset, length); + for (int i = 0, j = offset; i < length; ++i, ++j) { + adapter.writeShort(physicalBuffer(), src[j], i * adapter.sizeInBytes()); + } + return this; + } + + @Override + public ShortDataBuffer offset(long index) { + return new ShortVirtualDataBuffer(physicalBuffer().offset(index * adapter.sizeInBytes()), adapter); + } + + @Override + public ShortDataBuffer narrow(long size) { + return new ShortVirtualDataBuffer(physicalBuffer().narrow(size * adapter.sizeInBytes()), adapter); + } + + private ShortVirtualDataBuffer(ByteDataBuffer physicalBuffer, ShortDataAdapter adapter) { + super(physicalBuffer, adapter); + this.adapter = adapter; + } + + private ShortDataAdapter adapter; +} diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/virtual/VirtualDataBuffer.java b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/virtual/VirtualDataBuffer.java new file mode 100644 index 00000000000..e47d821f6a6 --- /dev/null +++ b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/virtual/VirtualDataBuffer.java @@ -0,0 +1,27 @@ +package org.tensorflow.nio.buffer.impl.virtual; + +import org.tensorflow.nio.buffer.ByteDataBuffer; +import org.tensorflow.nio.buffer.DataBuffer; +import org.tensorflow.nio.buffer.adapter.DataAdapter; + +@SuppressWarnings("unchecked") +public class VirtualDataBuffer extends AbstractVirtualDataBuffer> { + + public static VirtualDataBuffer create(ByteDataBuffer delegate, DataAdapter adapter) { + return new VirtualDataBuffer<>(delegate, adapter); + } + + @Override + public DataBuffer offset(long index) { + return new VirtualDataBuffer<>(physicalBuffer().offset(index * adapter().sizeInBytes()), adapter()); + } + + @Override + public DataBuffer narrow(long size) { + return new VirtualDataBuffer<>(physicalBuffer().narrow(size * adapter().sizeInBytes()), adapter()); + } + + private VirtualDataBuffer(ByteDataBuffer physicalBuffer, DataAdapter adapter) { + super(physicalBuffer, adapter); + } +} diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/BooleanNdArray.java b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/BooleanNdArray.java new file mode 100644 index 00000000000..02853422e82 --- /dev/null +++ b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/BooleanNdArray.java @@ -0,0 +1,172 @@ +/* + Copyright 2019 The TensorFlow Authors. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ======================================================================= + */ +package org.tensorflow.nio.nd; + +import org.tensorflow.nio.buffer.BooleanDataBuffer; +import org.tensorflow.nio.buffer.DataBuffer; +import org.tensorflow.nio.nd.index.Index; + +/** + * An {@link NdArray} of booleans. + */ +public interface BooleanNdArray extends NdArray { + + /** + * Returns the boolean value of the scalar found at the given coordinates. + * + *

To access the scalar element, the number of coordinates provided must be equal to the number + * of dimensions of this array (i.e. its rank). For example: + *

{@code
+   *  BooleanNdArray matrix = NdArrays.ofBooleans(shape(2, 2));  // matrix rank = 2
+   *  matrix.getBoolean(0, 1);  // succeeds, returns false
+   *  matrix.getBoolean(0);  // throws IllegalRankException
+   *
+   *  BooleanNdArray scalar = matrix.get(0, 1);  // scalar rank = 0
+   *  scalar.getBoolean();  // succeeds, returns false
+   * }
+ * + * @param coordinates coordinates of the scalar to resolve + * @return value of that scalar + * @throws IndexOutOfBoundsException if some coordinates are outside the limits of their respective dimension + * @throws IllegalRankException if number of coordinates is not sufficient to access a scalar element + */ + boolean getBoolean(long... coordinates); + + /** + * Assigns the boolean value of the scalar found at the given coordinates. + * + *

To access the scalar element, the number of coordinates provided must be equal to the number + * of dimensions of this array (i.e. its rank). For example: + *

{@code
+   *  BooleanNdArray matrix = NdArrays.ofBooleans(shape(2, 2));  // matrix rank = 2
+   *  matrix.setBoolean(true, 0, 1);  // succeeds
+   *  matrix.setBoolean(true, 0);  // throws IllegalRankException
+   *
+   *  BooleanNdArray scalar = matrix.get(0, 1);  // scalar rank = 0
+   *  scalar.setBoolean(true);  // succeeds
+   * }
+ * + * @param coordinates coordinates of the scalar to assign + * @return this array + * @throws IndexOutOfBoundsException if some coordinates are outside the limits of their respective dimension + * @throws IllegalRankException if number of coordinates is not sufficient to access a scalar element + */ + BooleanNdArray setBoolean(boolean value, long... coordinates); + + /** + * Reads the content of this N-dimensional array into the destination boolean array. + * + *

The size of the destination array must be equal or greater to the {@link #size()} of this array, + * or an exception is thrown. After the copy, content of the both arrays can be altered + * independently, without affecting each other. + * + * @param dst the destination array + * @return this array + * @throws java.nio.BufferOverflowException if the destination array cannot hold the content of this array + */ + default BooleanNdArray read(boolean[] dst) { + return read(dst, 0); + } + + /** + * Reads the content of this N-dimensional array into the destination boolean array. + * + *

{@code dst.length - offset} must be equal or greater to the {@link #size()} of this array, + * or an exception is thrown. After the copy, content of the both arrays can be altered + * independently, without affecting each other. + * + * @param dst the destination array + * @param offset the index of the first boolean to write in the destination array + * @return this array + * @throws java.nio.BufferOverflowException if the destination array cannot hold the content of this array + * @throws IndexOutOfBoundsException if offset is greater than dst length or is negative + */ + BooleanNdArray read(boolean[] dst, int offset); + + /** + * Writes the content of this N-dimensional array from the source boolean array. + * + *

The size of the source array must be equal or greater to the {@link #size()} of this array, + * or an exception is thrown. After the copy, content of the both arrays can be altered + * independently, without affecting each other. + * + * @param src the source array + * @return this array + * @throws java.nio.BufferUnderflowException if the size of the source array is less than the size of this array + */ + default BooleanNdArray write(boolean[] src) { + return write(src, 0); + } + + /** + * Writes the content of this N-dimensional array from the source boolean array. + * + *

{@code src.length - offset} must be equal or greater to the {@link #size()} of this array, + * or an exception is thrown. After the copy, content of the both arrays can be altered + * independently, without affecting each other. + * + * @param src the source array + * @param offset the index of the first boolean to read from the source array + * @return this array + * @throws java.nio.BufferUnderflowException if the size of the source array is less than the size of this array + * @throws IndexOutOfBoundsException if offset is greater than src length or is negative + */ + BooleanNdArray write(boolean[] src, int offset); + + @Override + BooleanNdArray slice(Index... indices); + + @Override + BooleanNdArray get(long... coordinates); + + @Override + BooleanNdArray set(NdArray src, long... coordinates); + + @Override + BooleanNdArray setValue(Boolean value, long... coordinates); + + @Override + NdArraySequence elements(int dimensionIdx); + + @Override + NdArraySequence scalars(); + + @Override + BooleanNdArray copyTo(NdArray dst); + + @Override + BooleanNdArray read(DataBuffer dst); + + BooleanNdArray read(BooleanDataBuffer dst); + + @Override + BooleanNdArray write(DataBuffer src); + + BooleanNdArray write(BooleanDataBuffer src); + + @Override + BooleanNdArray read(Boolean[] dst); + + @Override + BooleanNdArray read(Boolean[] dst, int offset); + + @Override + BooleanNdArray write(Boolean[] src); + + @Override + BooleanNdArray write(Boolean[] src, int offset); +} diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/ByteNdArray.java b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/ByteNdArray.java new file mode 100644 index 00000000000..712b446b6b2 --- /dev/null +++ b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/ByteNdArray.java @@ -0,0 +1,172 @@ +/* + Copyright 2019 The TensorFlow Authors. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ======================================================================= + */ +package org.tensorflow.nio.nd; + +import org.tensorflow.nio.buffer.ByteDataBuffer; +import org.tensorflow.nio.buffer.DataBuffer; +import org.tensorflow.nio.nd.index.Index; + +/** + * An {@link NdArray} of bytes. + */ +public interface ByteNdArray extends NdArray { + + /** + * Returns the byte value of the scalar found at the given coordinates. + * + *

To access the scalar element, the number of coordinates provided must be equal to the number + * of dimensions of this array (i.e. its rank). For example: + *

{@code
+   *  ByteNdArray matrix = NdArrays.ofBytes(shape(2, 2));  // matrix rank = 2
+   *  matrix.getByte(0, 1);  // succeeds, returns 0
+   *  matrix.getByte(0);  // throws IllegalRankException
+   *
+   *  ByteNdArray scalar = matrix.get(0, 1);  // scalar rank = 0
+   *  scalar.getByte();  // succeeds, returns 0
+   * }
+ * + * @param coordinates coordinates of the scalar to resolve + * @return value of that scalar + * @throws IndexOutOfBoundsException if some coordinates are outside the limits of their respective dimension + * @throws IllegalRankException if number of coordinates is not sufficient to access a scalar element + */ + byte getByte(long... coordinates); + + /** + * Assigns the byte value of the scalar found at the given coordinates. + * + *

To access the scalar element, the number of coordinates provided must be equal to the number + * of dimensions of this array (i.e. its rank). For example: + *

{@code
+   *  ByteNdArray matrix = NdArrays.ofBytes(shape(2, 2));  // matrix rank = 2
+   *  matrix.setByte(10, 0, 1);  // succeeds
+   *  matrix.setByte(10, 0);  // throws IllegalRankException
+   *
+   *  ByteNdArray scalar = matrix.get(0, 1);  // scalar rank = 0
+   *  scalar.setByte(10);  // succeeds
+   * }
+ * + * @param coordinates coordinates of the scalar to assign + * @return this array + * @throws IndexOutOfBoundsException if some coordinates are outside the limits of their respective dimension + * @throws IllegalRankException if number of coordinates is not sufficient to access a scalar element + */ + ByteNdArray setByte(byte value, long... coordinates); + + /** + * Reads the content of this N-dimensional array into the destination byte array. + * + *

The size of the destination array must be equal or greater to the {@link #size()} of this array, + * or an exception is thrown. After the copy, content of the both arrays can be altered + * independently, without affecting each other. + * + * @param dst the destination array + * @return this array + * @throws java.nio.BufferOverflowException if the destination array cannot hold the content of this array + */ + default ByteNdArray read(byte[] dst) { + return read(dst, 0); + } + + /** + * Reads the content of this N-dimensional array into the destination byte array. + * + *

{@code dst.length - offset} must be equal or greater to the {@link #size()} of this array, + * or an exception is thrown. After the copy, content of the both arrays can be altered + * independently, without affecting each other. + * + * @param dst the destination array + * @param offset the index of the first byte to write in the destination array + * @return this array + * @throws java.nio.BufferOverflowException if the destination array cannot hold the content of this array + * @throws IndexOutOfBoundsException if offset is greater than dst length or is negative + */ + ByteNdArray read(byte[] dst, int offset); + + /** + * Writes the content of this N-dimensional array from the source byte array. + * + *

The size of the source array must be equal or greater to the {@link #size()} of this array, + * or an exception is thrown. After the copy, content of the both arrays can be altered + * independently, without affecting each other. + * + * @param src the source array + * @return this array + * @throws java.nio.BufferUnderflowException if the size of the source array is less than the size of this array + */ + default ByteNdArray write(byte[] src) { + return write(src, 0); + } + + /** + * Writes the content of this N-dimensional array from the source byte array. + * + *

{@code src.length - offset} must be equal or greater to the {@link #size()} of this array, + * or an exception is thrown. After the copy, content of the both arrays can be altered + * independently, without affecting each other. + * + * @param src the source array + * @param offset the index of the first byte to read from the source array + * @return this array + * @throws java.nio.BufferUnderflowException if the size of the source array is less than the size of this array + * @throws IndexOutOfBoundsException if offset is greater than src length or is negative + */ + ByteNdArray write(byte[] src, int offset); + + @Override + ByteNdArray slice(Index... indices); + + @Override + ByteNdArray get(long... coordinates); + + @Override + ByteNdArray set(NdArray src, long... coordinates); + + @Override + ByteNdArray setValue(Byte value, long... coordinates); + + @Override + NdArraySequence elements(int dimensionIdx); + + @Override + NdArraySequence scalars(); + + @Override + ByteNdArray copyTo(NdArray dst); + + @Override + ByteNdArray read(DataBuffer dst); + + ByteNdArray read(ByteDataBuffer dst); + + @Override + ByteNdArray write(DataBuffer src); + + ByteNdArray write(ByteDataBuffer src); + + @Override + ByteNdArray read(Byte[] dst); + + @Override + ByteNdArray read(Byte[] dst, int offset); + + @Override + ByteNdArray write(Byte[] src); + + @Override + ByteNdArray write(Byte[] src, int offset); +} diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/DoubleNdArray.java b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/DoubleNdArray.java new file mode 100644 index 00000000000..bd4a6b42dde --- /dev/null +++ b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/DoubleNdArray.java @@ -0,0 +1,172 @@ +/* + Copyright 2019 The TensorFlow Authors. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ======================================================================= + */ +package org.tensorflow.nio.nd; + +import org.tensorflow.nio.buffer.DataBuffer; +import org.tensorflow.nio.buffer.DoubleDataBuffer; +import org.tensorflow.nio.nd.index.Index; + +/** + * An {@link NdArray} of doubles. + */ +public interface DoubleNdArray extends NdArray { + + /** + * Returns the double value of the scalar found at the given coordinates. + * + *

To access the scalar element, the number of coordinates provided must be equal to the number + * of dimensions of this array (i.e. its rank). For example: + *

{@code
+   *  DoubleNdArray matrix = NdArrays.ofDoubles(shape(2, 2));  // matrix rank = 2
+   *  matrix.getDouble(0, 1);  // succeeds, returns 0.0
+   *  matrix.getDouble(0);  // throws IllegalRankException
+   *
+   *  DoubleNdArray scalar = matrix.get(0, 1);  // scalar rank = 0
+   *  scalar.getDouble();  // succeeds, returns 0.0
+   * }
+ * + * @param coordinates coordinates of the scalar to resolve + * @return value of that scalar + * @throws IndexOutOfBoundsException if some coordinates are outside the limits of their respective dimension + * @throws IllegalRankException if number of coordinates is not sufficient to access a scalar element + */ + double getDouble(long... coordinates); + + /** + * Assigns the double value of the scalar found at the given coordinates. + * + *

To access the scalar element, the number of coordinates provided must be equal to the number + * of dimensions of this array (i.e. its rank). For example: + *

{@code
+   *  DoubleNdArray matrix = NdArrays.ofDoubles(shape(2, 2));  // matrix rank = 2
+   *  matrix.setDouble(10.0, 0, 1);  // succeeds
+   *  matrix.setDouble(10.0, 0);  // throws IllegalRankException
+   *
+   *  DoubleNdArray scalar = matrix.get(0, 1);  // scalar rank = 0
+   *  scalar.setDouble(10.0);  // succeeds
+   * }
+ * + * @param coordinates coordinates of the scalar to assign + * @return this array + * @throws IndexOutOfBoundsException if some coordinates are outside the limits of their respective dimension + * @throws IllegalRankException if number of coordinates is not sufficient to access a scalar element + */ + DoubleNdArray setDouble(double value, long... coordinates); + + /** + * Reads the content of this N-dimensional array into the destination double array. + * + *

The size of the destination array must be equal or greater to the {@link #size()} of this array, + * or an exception is thrown. After the copy, content of the both arrays can be altered + * independently, without affecting each other. + * + * @param dst the destination array + * @return this array + * @throws java.nio.BufferOverflowException if the destination array cannot hold the content of this array + */ + default DoubleNdArray read(double[] dst) { + return read(dst, 0); + } + + /** + * Reads the content of this N-dimensional array into the destination double array. + * + *

{@code dst.length - offset} must be equal or greater to the {@link #size()} of this array, + * or an exception is thrown. After the copy, content of the both arrays can be altered + * independently, without affecting each other. + * + * @param dst the destination array + * @param offset the index of the first double to write in the destination array + * @return this array + * @throws java.nio.BufferOverflowException if the destination array cannot hold the content of this array + * @throws IndexOutOfBoundsException if offset is greater than dst length or is negative + */ + DoubleNdArray read(double[] dst, int offset); + + /** + * Writes the content of this N-dimensional array from the source double array. + * + *

The size of the source array must be equal or greater to the {@link #size()} of this array, + * or an exception is thrown. After the copy, content of the both arrays can be altered + * independently, without affecting each other. + * + * @param src the source array + * @return this array + * @throws java.nio.BufferUnderflowException if the size of the source array is less than the size of this array + */ + default DoubleNdArray write(double[] src) { + return write(src, 0); + } + + /** + * Writes the content of this N-dimensional array from the source double array. + * + *

{@code src.length - offset} must be equal or greater to the {@link #size()} of this array, + * or an exception is thrown. After the copy, content of the both arrays can be altered + * independently, without affecting each other. + * + * @param src the source array + * @param offset the index of the first double to read from the source array + * @return this array + * @throws java.nio.BufferUnderflowException if the size of the source array is less than the size of this array + * @throws IndexOutOfBoundsException if offset is greater than src length or is negative + */ + DoubleNdArray write(double[] src, int offset); + + @Override + DoubleNdArray slice(Index... indices); + + @Override + DoubleNdArray get(long... coordinates); + + @Override + DoubleNdArray set(NdArray src, long... coordinates); + + @Override + DoubleNdArray setValue(Double value, long... coordinates); + + @Override + NdArraySequence elements(int dimensionIdx); + + @Override + NdArraySequence scalars(); + + @Override + DoubleNdArray copyTo(NdArray dst); + + @Override + DoubleNdArray read(DataBuffer dst); + + DoubleNdArray read(DoubleDataBuffer dst); + + @Override + DoubleNdArray write(DataBuffer src); + + DoubleNdArray write(DoubleDataBuffer src); + + @Override + DoubleNdArray read(Double[] dst); + + @Override + DoubleNdArray read(Double[] dst, int offset); + + @Override + DoubleNdArray write(Double[] src); + + @Override + DoubleNdArray write(Double[] src, int offset); +} diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/FloatNdArray.java b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/FloatNdArray.java new file mode 100644 index 00000000000..51c714ea255 --- /dev/null +++ b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/FloatNdArray.java @@ -0,0 +1,172 @@ +/* + Copyright 2019 The TensorFlow Authors. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ======================================================================= + */ +package org.tensorflow.nio.nd; + +import org.tensorflow.nio.buffer.DataBuffer; +import org.tensorflow.nio.buffer.FloatDataBuffer; +import org.tensorflow.nio.nd.index.Index; + +/** + * An {@link NdArray} of floats. + */ +public interface FloatNdArray extends NdArray { + + /** + * Returns the float value of the scalar found at the given coordinates. + * + *

To access the scalar element, the number of coordinates provided must be equal to the number + * of dimensions of this array (i.e. its rank). For example: + *

{@code
+   *  FloatNdArray matrix = NdArrays.ofFloats(shape(2, 2));  // matrix rank = 2
+   *  matrix.getFloat(0, 1);  // succeeds, returns 0.0f
+   *  matrix.getFloat(0);  // throws IllegalRankException
+   *
+   *  FloatNdArray scalar = matrix.get(0, 1);  // scalar rank = 0
+   *  scalar.getFloat();  // succeeds, returns 0.0f
+   * }
+ * + * @param coordinates coordinates of the scalar to resolve + * @return value of that scalar + * @throws IndexOutOfBoundsException if some coordinates are outside the limits of their respective dimension + * @throws IllegalRankException if number of coordinates is not sufficient to access a scalar element + */ + float getFloat(long... coordinates); + + /** + * Assigns the float value of the scalar found at the given coordinates. + * + *

To access the scalar element, the number of coordinates provided must be equal to the number + * of dimensions of this array (i.e. its rank). For example: + *

{@code
+   *  FloatNdArray matrix = NdArrays.ofFloats(shape(2, 2));  // matrix rank = 2
+   *  matrix.setFloat(10.0f, 0, 1);  // succeeds
+   *  matrix.setFloat(10.0f, 0);  // throws IllegalRankException
+   *
+   *  FloatNdArray scalar = matrix.get(0, 1);  // scalar rank = 0
+   *  scalar.setFloat(10.0f);  // succeeds
+   * }
+ * + * @param coordinates coordinates of the scalar to assign + * @return this array + * @throws IndexOutOfBoundsException if some coordinates are outside the limits of their respective dimension + * @throws IllegalRankException if number of coordinates is not sufficient to access a scalar element + */ + FloatNdArray setFloat(float value, long... coordinates); + + /** + * Reads the content of this N-dimensional array into the destination float array. + * + *

The size of the destination array must be equal or greater to the {@link #size()} of this array, + * or an exception is thrown. After the copy, content of the both arrays can be altered + * independently, without affecting each other. + * + * @param dst the destination array + * @return this array + * @throws java.nio.BufferOverflowException if the destination array cannot hold the content of this array + */ + default FloatNdArray read(float[] dst) { + return read(dst, 0); + } + + /** + * Reads the content of this N-dimensional array into the destination float array. + * + *

{@code dst.length - offset} must be equal or greater to the {@link #size()} of this array, + * or an exception is thrown. After the copy, content of the both arrays can be altered + * independently, without affecting each other. + * + * @param dst the destination array + * @param offset the index of the first float to write in the destination array + * @return this array + * @throws java.nio.BufferOverflowException if the destination array cannot hold the content of this array + * @throws IndexOutOfBoundsException if offset is greater than dst length or is negative + */ + FloatNdArray read(float[] dst, int offset); + + /** + * Writes the content of this N-dimensional array from the source float array. + * + *

The size of the source array must be equal or greater to the {@link #size()} of this array, + * or an exception is thrown. After the copy, content of the both arrays can be altered + * independently, without affecting each other. + * + * @param src the source array + * @return this array + * @throws java.nio.BufferUnderflowException if the size of the source array is less than the size of this array + */ + default FloatNdArray write(float[] src) { + return write(src, 0); + } + + /** + * Writes the content of this N-dimensional array from the source float array. + * + *

{@code src.length - offset} must be equal or greater to the {@link #size()} of this array, + * or an exception is thrown. After the copy, content of the both arrays can be altered + * independently, without affecting each other. + * + * @param src the source array + * @param offset the index of the first float to read from the source array + * @return this array + * @throws java.nio.BufferUnderflowException if the size of the source array is less than the size of this array + * @throws IndexOutOfBoundsException if offset is greater than src length or is negative + */ + FloatNdArray write(float[] src, int offset); + + @Override + FloatNdArray slice(Index... coordinates); + + @Override + FloatNdArray get(long... coordinates); + + @Override + FloatNdArray set(NdArray src, long... coordinates); + + @Override + FloatNdArray setValue(Float value, long... indices); + + @Override + NdArraySequence elements(int dimensionIdx); + + @Override + NdArraySequence scalars(); + + @Override + FloatNdArray copyTo(NdArray dst); + + @Override + FloatNdArray read(DataBuffer dst); + + FloatNdArray read(FloatDataBuffer dst); + + @Override + FloatNdArray write(DataBuffer src); + + FloatNdArray write(FloatDataBuffer src); + + @Override + FloatNdArray read(Float[] dst); + + @Override + FloatNdArray read(Float[] dst, int offset); + + @Override + FloatNdArray write(Float[] src); + + @Override + FloatNdArray write(Float[] src, int offset); +} diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/IllegalRankException.java b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/IllegalRankException.java new file mode 100644 index 00000000000..1fb8d1228e7 --- /dev/null +++ b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/IllegalRankException.java @@ -0,0 +1,24 @@ +/* + Copyright 2019 The TensorFlow Authors. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ======================================================================= + */ +package org.tensorflow.nio.nd; + +public class IllegalRankException extends IllegalArgumentException { + + public IllegalRankException(String message) { + super(message); + } +} diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/IntNdArray.java b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/IntNdArray.java new file mode 100644 index 00000000000..f59bcacb0a8 --- /dev/null +++ b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/IntNdArray.java @@ -0,0 +1,172 @@ +/* + Copyright 2019 The TensorFlow Authors. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ======================================================================= + */ +package org.tensorflow.nio.nd; + +import org.tensorflow.nio.buffer.DataBuffer; +import org.tensorflow.nio.buffer.IntDataBuffer; +import org.tensorflow.nio.nd.index.Index; + +/** + * An {@link NdArray} of integers. + */ +public interface IntNdArray extends NdArray { + + /** + * Returns the integer value of the scalar found at the given coordinates. + * + *

To access the scalar element, the number of coordinates provided must be equal to the number + * of dimensions of this array (i.e. its rank). For example: + *

{@code
+   *  IntNdArray matrix = NdArrays.ofInts(shape(2, 2));  // matrix rank = 2
+   *  matrix.getInt(0, 1);  // succeeds, returns 0
+   *  matrix.getInt(0);  // throws IllegalRankException
+   *
+   *  IntNdArray scalar = matrix.get(0, 1);  // scalar rank = 0
+   *  scalar.getInt();  // succeeds, returns 0
+   * }
+ * + * @param coordinates coordinates of the scalar to resolve + * @return value of that scalar + * @throws IndexOutOfBoundsException if some coordinates are outside the limits of their respective dimension + * @throws IllegalRankException if number of coordinates is not sufficient to access a scalar element + */ + int getInt(long... coordinates); + + /** + * Assigns the integer value of the scalar found at the given coordinates. + * + *

To access the scalar element, the number of coordinates provided must be equal to the number + * of dimensions of this array (i.e. its rank). For example: + *

{@code
+   *  IntNdArray matrix = NdArrays.ofInts(shape(2, 2));  // matrix rank = 2
+   *  matrix.setInt(10, 0, 1);  // succeeds
+   *  matrix.setInt(10, 0);  // throws IllegalRankException
+   *
+   *  IntNdArray scalar = matrix.get(0, 1);  // scalar rank = 0
+   *  scalar.setInt(10);  // succeeds
+   * }
+ * + * @param coordinates coordinates of the scalar to assign + * @return this array + * @throws IndexOutOfBoundsException if some coordinates are outside the limits of their respective dimension + * @throws IllegalRankException if number of coordinates is not sufficient to access a scalar element + */ + IntNdArray setInt(int value, long... coordinates); + + /** + * Reads the content of this N-dimensional array into the destination int array. + * + *

The size of the destination array must be equal or greater to the {@link #size()} of this array, + * or an exception is thrown. After the copy, content of the both arrays can be altered + * independently, without affecting each other. + * + * @param dst the destination array + * @return this array + * @throws java.nio.BufferOverflowException if the destination array cannot hold the content of this array + */ + default IntNdArray read(int[] dst) { + return read(dst, 0); + } + + /** + * Reads the content of this N-dimensional array into the destination int array. + * + *

{@code dst.length - offset} must be equal or greater to the {@link #size()} of this array, + * or an exception is thrown. After the copy, content of the both arrays can be altered + * independently, without affecting each other. + * + * @param dst the destination array + * @param offset the index of the first integer to write in the destination array + * @return this array + * @throws java.nio.BufferOverflowException if the destination array cannot hold the content of this array + * @throws IndexOutOfBoundsException if offset is greater than dst length or is negative + */ + IntNdArray read(int[] dst, int offset); + + /** + * Writes the content of this N-dimensional array from the source int array. + * + *

The size of the source array must be equal or greater to the {@link #size()} of this array, + * or an exception is thrown. After the copy, content of the both arrays can be altered + * independently, without affecting each other. + * + * @param src the source array + * @return this array + * @throws java.nio.BufferUnderflowException if the size of the source array is less than the size of this array + */ + default IntNdArray write(int[] src) { + return write(src, 0); + } + + /** + * Writes the content of this N-dimensional array from the source int array. + * + *

{@code src.length - offset} must be equal or greater to the {@link #size()} of this array, + * or an exception is thrown. After the copy, content of the both arrays can be altered + * independently, without affecting each other. + * + * @param src the source array + * @param offset the index of the first integer to read from the source array + * @return this array + * @throws java.nio.BufferUnderflowException if the size of the source array is less than the size of this array + * @throws IndexOutOfBoundsException if offset is greater than src length or is negative + */ + IntNdArray write(int[] src, int offset); + + @Override + IntNdArray slice(Index... indices); + + @Override + IntNdArray get(long... coordinates); + + @Override + IntNdArray set(NdArray src, long... coordinates); + + @Override + IntNdArray setValue(Integer value, long... coordinates); + + @Override + NdArraySequence elements(int dimensionIdx); + + @Override + NdArraySequence scalars(); + + @Override + IntNdArray copyTo(NdArray dst); + + @Override + IntNdArray read(DataBuffer dst); + + IntNdArray read(IntDataBuffer dst); + + @Override + IntNdArray write(DataBuffer src); + + IntNdArray write(IntDataBuffer src); + + @Override + IntNdArray read(Integer[] dst); + + @Override + IntNdArray read(Integer[] dst, int offset); + + @Override + IntNdArray write(Integer[] src); + + @Override + IntNdArray write(Integer[] src, int offset); +} diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/LongNdArray.java b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/LongNdArray.java new file mode 100644 index 00000000000..04e817bd40f --- /dev/null +++ b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/LongNdArray.java @@ -0,0 +1,172 @@ +/* + Copyright 2019 The TensorFlow Authors. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ======================================================================= + */ +package org.tensorflow.nio.nd; + +import org.tensorflow.nio.buffer.DataBuffer; +import org.tensorflow.nio.buffer.LongDataBuffer; +import org.tensorflow.nio.nd.index.Index; + +/** + * An {@link NdArray} of longs. + */ +public interface LongNdArray extends NdArray { + + /** + * Returns the long value of the scalar found at the given coordinates. + * + *

To access the scalar element, the number of coordinates provided must be equal to the number + * of dimensions of this array (i.e. its rank). For example: + *

{@code
+   *  LongNdArray matrix = NdArrays.ofLongs(shape(2, 2));  // matrix rank = 2
+   *  matrix.getLong(0, 1);  // succeeds, returns 0L
+   *  matrix.getLong(0);  // throws IllegalRankException
+   *
+   *  LongNdArray scalar = matrix.get(0, 1);  // scalar rank = 0
+   *  scalar.getLong();  // succeeds, returns 0L
+   * }
+ * + * @param coordinates coordinates of the scalar to resolve + * @return value of that scalar + * @throws IndexOutOfBoundsException if some coordinates are outside the limits of their respective dimension + * @throws IllegalRankException if number of coordinates is not sufficient to access a scalar element + */ + long getLong(long... coordinates); + + /** + * Assigns the long value of the scalar found at the given coordinates. + * + *

To access the scalar element, the number of coordinates provided must be equal to the number + * of dimensions of this array (i.e. its rank). For example: + *

{@code
+   *  LongNdArray matrix = NdArrays.ofLongs(shape(2, 2));  // matrix rank = 2
+   *  matrix.setLong(10L, 0, 1);  // succeeds
+   *  matrix.setLong(10L, 0);  // throws IllegalRankException
+   *
+   *  LongNdArray scalar = matrix.get(0, 1);  // scalar rank = 0
+   *  scalar.setLong(10L);  // succeeds
+   * }
+ * + * @param coordinates coordinates of the scalar to assign + * @return this array + * @throws IndexOutOfBoundsException if some coordinates are outside the limits of their respective dimension + * @throws IllegalRankException if number of coordinates is not sufficient to access a scalar element + */ + LongNdArray setLong(long value, long... coordinates); + + /** + * Reads the content of this N-dimensional array into the destination long array. + * + *

The size of the destination array must be equal or greater to the {@link #size()} of this array, + * or an exception is thrown. After the copy, content of the both arrays can be altered + * independently, without affecting each other. + * + * @param dst the destination array + * @return this array + * @throws java.nio.BufferOverflowException if the destination array cannot hold the content of this array + */ + default LongNdArray read(long[] dst) { + return read(dst, 0); + } + + /** + * Reads the content of this N-dimensional array into the destination long array. + * + *

{@code dst.length - offset} must be equal or greater to the {@link #size()} of this array, + * or an exception is thrown. After the copy, content of the both arrays can be altered + * independently, without affecting each other. + * + * @param dst the destination array + * @param offset the index of the first long to write in the destination array + * @return this array + * @throws java.nio.BufferOverflowException if the destination array cannot hold the content of this array + * @throws IndexOutOfBoundsException if offset is greater than dst length or is negative + */ + LongNdArray read(long[] dst, int offset); + + /** + * Writes the content of this N-dimensional array from the source long array. + * + *

The size of the source array must be equal or greater to the {@link #size()} of this array, + * or an exception is thrown. After the copy, content of the both arrays can be altered + * independently, without affecting each other. + * + * @param src the source array + * @return this array + * @throws java.nio.BufferUnderflowException if the size of the source array is less than the size of this array + */ + default LongNdArray write(long[] src) { + return write(src, 0); + } + + /** + * Writes the content of this N-dimensional array from the source long array. + * + *

{@code src.length - offset} must be equal or greater to the {@link #size()} of this array, + * or an exception is thrown. After the copy, content of the both arrays can be altered + * independently, without affecting each other. + * + * @param src the source array + * @param offset the index of the first long to read from the source array + * @return this array + * @throws java.nio.BufferUnderflowException if the size of the source array is less than the size of this array + * @throws IndexOutOfBoundsException if offset is greater than src length or is negative + */ + LongNdArray write(long[] src, int offset); + + @Override + LongNdArray slice(Index... indices); + + @Override + LongNdArray get(long... coordinates); + + @Override + LongNdArray set(NdArray src, long... coordinates); + + @Override + LongNdArray setValue(Long value, long... coordinates); + + @Override + NdArraySequence elements(int dimensionIdx); + + @Override + NdArraySequence scalars(); + + @Override + LongNdArray copyTo(NdArray dst); + + @Override + LongNdArray read(DataBuffer dst); + + LongNdArray read(LongDataBuffer dst); + + @Override + LongNdArray write(DataBuffer src); + + LongNdArray write(LongDataBuffer src); + + @Override + LongNdArray read(Long[] dst); + + @Override + LongNdArray read(Long[] dst, int offset); + + @Override + LongNdArray write(Long[] src); + + @Override + LongNdArray write(Long[] src, int offset); +} diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/NdArray.java b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/NdArray.java new file mode 100644 index 00000000000..448ae7f680c --- /dev/null +++ b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/NdArray.java @@ -0,0 +1,355 @@ +/* + Copyright 2019 The TensorFlow Authors. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ======================================================================= + */ +package org.tensorflow.nio.nd; + +import java.util.function.BiConsumer; +import java.util.function.Consumer; +import org.tensorflow.nio.buffer.DataBuffer; +import org.tensorflow.nio.nd.index.Index; + +/** + * A data structure of N-dimensions. + * + *

The `NdArray` interface creates an abstraction between the physical storage of a data record, + * which can be linear or segmented, and its logical representation. In general, they achieve + * better performances than standard multi-dimensional arrays in Java by mapping directly linear + * data segments in memory. + * + *

Like {@link DataBuffer}, {@code NdArray} instances support 64-bits indexation so they can be + * used to map very large data records. They also support special coordinates that allow traversing + * their values in any direction or to select only a subset of them. + * + *

Example of usage: + *

{@code
+ *    import static org.tensorflow.nio.StaticApi.*;
+ *
+ *    // Creates a 2x3x2 matrix (of rank 3)
+ *    FloatNdArray matrix3d = ndArrayOfFloats(shape(2, 3, 2));
+ *
+ *    // Initialize sub-matrices data with vectors
+ *    matrix.set(vector(1.0f, 2.0f), 0, 0)
+ *          .set(vector(3.0f, 4.0f), 0, 1)
+ *          .set(vector(5.0f, 6.0f), 0, 2)
+ *          .set(vector(7.0f, 8.0f), 1, 0)
+ *          .set(vector(9.0f, 10.0f), 1, 1)
+ *          .set(vector(11.0f, 12.0f), 1, 2);
+ *
+ *    // Access the second 3x2 matrix (of rank 2)
+ *    FloatNdArray matrix = matrix3d.get(1);
+ *
+ *    // Access directly the float value at (1, 0) from the second matrix
+ *    assertEquals(9.0f, matrix.getFloat(1, 0));
+ * }
+ * + * @param the type of values to be mapped + */ +public interface NdArray { + + /** + * @return the shape of this N-dimensional array + */ + Shape shape(); + + /** + * @return the rank of this N-dimensional array + */ + default int rank() { + return shape().numDimensions(); + } + + /** + * Computes and returns the total size of this N-dimensional array, in number of values. + * + *

For example, given a 3x3x2 matrix, the return value will be 18. + * @return total size of this nd array + */ + default long size() { + return shape().size(); + } + + /** + * Visit all elements of a given dimension. + * + *

Logically, the N-dimensional array can be flatten in a single vector, where the scalars of + * the {@code (n - 1)}th element precedes those of the {@code (n)}th element, for a total of + * {@link #size()} values. + * + *

For example, given a {@code n x m} matrix on the {@code [x, y]} axes, values are iterated in + * the following order: + *

+   * x0y0, x0y1, ..., x0ym-1, x1y0, x1y1, ..., xn-1ym-1
+   * 
+ * + *

The returned cursor is used to visit each elements, either by calling + * {@link NdArraySequence#forEach(Consumer)} or {@link NdArraySequence#forEachIndexed(BiConsumer)}. + *

{@code
+   *    // Iterate matrix for initializing each of its vectors
+   *    matrixOfFloats.elements(0).forEach(v -> {
+   *      v.set(vector(1.0f, 2.0f, 3.0f));
+   *    });
+   *
+   *    // Iterate a vector for reading each of its scalar
+   *    vectorOfFloats.scalars().forEachIdx((coords, s) -> {
+   *      System.out.println("Value " + s.getFloat() + " found at " + coords);
+   *    });
+   * }
+ * + * @return a new cursor to visit all elements at the requested dimension + */ + NdArraySequence> elements(int dimensionIdx); + + /** + * Visit all scalars of this array. + * + *

This is equivalent to call {@code elements(shape().numDimensions() - 1)} + * + * @return a new cursor to visit all scalars of this array + */ + NdArraySequence> scalars(); + + /** + * Creates a multi-dimensional view (or slice) of this array by mapping one or more dimensions + * to the given index selectors. + * + *

Slices allow to traverse an N-dimensional array in any of its axis and/or to filter only + * elements of interest. For example, for a given matrix on the {@code [x, y]} axes, it is + * possible to iterate elements at {@code y=0} for all {@code x}. + * + *

Any changes applied to the returned slice affect the data of this array as well, as there + * is no copy involved. + * + *

Example of usage: + *

{@code
+   *    FloatNdArray matrix3d = ndArrayOfFloats(shape(3, 2, 4));  // with [x, y, z] axes
+   *
+   *    // Iterates elements on the x axis by preserving only the 3rd value on the z axis,
+   *    // (i.e. [x, y, 2])
+   *    matrix3d.slice(all(), all(), at(2)).elements(0).forEach(m -> {
+   *      assertEquals(shape(2), m); // y=2, z=0 (scalar)
+   *    });
+   *
+   *    // Creates a slice that contains only the last element of the y axis and elements with an
+   *    // odd `z` coordinate.
+   *    FloatNdArray slice = matrix3d.slice(all(), at(1), odd());
+   *    assertEquals(shape(3, 2), slice.shape());  // x=3, y=0 (scalar), z=2 (odd coordinates)
+   *
+   *    // Iterates backward the elements on the x axis
+   *    matrix3d.slice(flip()).elements(0).forEach(m -> {
+   *      assertEquals(shape(2, 4), m);  // y=2, z=4
+   *    });
+   * }
+ * + * @param indices index selectors per dimensions, starting from dimension 0 of this array. + * @return the element resulting of the index selection + * @throws IndexOutOfBoundsException if some coordinates are outside the limits of their + * respective dimension + */ + NdArray slice(Index... indices); + + /** + * Returns the N-dimensional element of this array at the given coordinates. + * + *

Elements of any of the dimensions of this array can be retrieved. For example, if the number + * of coordinates is equal to the number of dimensions of this array, then a rank-0 (scalar) array + * is returned, which value can then be obtained by calling `array.getValue()`. + * + *

Any changes applied to the returned elements affect the data of this array as well, as there + * is no copy involved. + * + *

Note that invoking this method is an equivalent and more efficient way to slice this array + * on single scalar, i.e. {@code array.get(x, y, z)} is equal to + * {@code array.slice(at(x), at(y), at(z))} + * + * @param coordinates coordinates of the element to access, none will return this array + * @return the element at this index + * @throws IndexOutOfBoundsException if some coordinates are outside the limits of their + * respective dimension + */ + NdArray get(long... coordinates); + + /** + * Assigns the value of the N-dimensional element found at the given coordinates. + * + *

The number of coordinates provided can be anywhere between 0 and rank - 1. For example: + *

{@code
+   *  FloatNdArray matrix = ndArrayOfFloats(shape(2, 2));  // matrix rank = 2
+   *  matrix.set(vector(10.0f, 20.0f), 0);  // success
+   *  matrix.set(scalar(10.0f), 1, 0); // success
+   * }
+ * + * @param coordinates coordinates of the element to assign + * @return this array + * @throws IndexOutOfBoundsException if some coordinates are outside the limits of their + * respective dimension + */ + NdArray set(NdArray src, long... coordinates); + + /** + * Returns the value of the scalar found at the given coordinates. + * + *

To access the scalar element, the number of coordinates provided must be equal to the number + * of dimensions of this array (i.e. its rank). For example: + *

{@code
+   *  FloatNdArray matrix = ndArrayOfFloats(shape(2, 2));  // matrix rank = 2
+   *  matrix.getValue(0, 1);  // succeeds, returns 0.0f
+   *  matrix.getValue(0);  // throws IllegalRankException
+   *
+   *  FloatNdArray scalar = matrix.get(0, 1);  // scalar rank = 0
+   *  scalar.getValue();  // succeeds, returns 0.0f
+   * }
+ * + * Note: if this array stores values of a primitive type, prefer the usage of the specialized + * method in the subclass for that type. For example, {@code floatArray.getFloat(0); }. + * + * @param coordinates coordinates of the scalar to resolve + * @return value of that scalar + * @throws IndexOutOfBoundsException if some coordinates are outside the limits of their + * respective dimension + * @throws IllegalRankException if number of coordinates is not sufficient to access a scalar + * element + */ + T getValue(long... coordinates); + + /** + * Assigns the value of the scalar found at the given coordinates. + * + *

To access the scalar element, the number of coordinates provided must be equal to the number + * of dimensions of this array (i.e. its rank). For example: + *

{@code
+   *  FloatNdArray matrix = ndArrayOfFloats(shape(2, 2));  // matrix rank = 2
+   *  matrix.setValue(10.0f, 0, 1);  // succeeds
+   *  matrix.setValue(10.0f, 0);  // throws IllegalRankException
+   *
+   *  FloatNdArray scalar = matrix.get(0, 1);  // scalar rank = 0
+   *  scalar.setValue(10.0f);  // succeeds
+   * }
+ * + * Note: if this array stores values of a primitive type, prefer the usage of the specialized + * method in the subclass for that type. For example, {@code floatArray.setFloat(10.0f, 0); } + * + * @param coordinates coordinates of the scalar to assign + * @return this array + * @throws IndexOutOfBoundsException if some coordinates are outside the limits of their + * respective dimension + * @throws IllegalRankException if number of coordinates is not sufficient to access a scalar + * element + */ + NdArray setValue(T value, long... coordinates); + + /** + * Copy the content of this array to the destination array. + * + *

The {@link #shape()} of the destination array must be equal to the shape of this array, or + * an exception is thrown. After the copy, the content of both arrays can be altered + * independently, without affecting each other. + * + * @param dst array to receive a copy of the content of this array + * @return this array + * @throws IllegalArgumentException if the shape of {@code dst} is not equal to the shape of this + * array + */ + NdArray copyTo(NdArray dst); + + /** + * Read the content of this N-dimensional array into the destination buffer. + * + *

The size of the buffer must be equal or greater to the {@link #size()} of this + * array, or an exception is thrown. After the copy, content of the buffer and of the array can be + * altered independently, without affecting each other. + * + * @param dst the destination buffer + * @return this array + * @throws java.nio.BufferOverflowException if the buffer cannot hold the content of this array + * @see DataBuffer#size() + */ + NdArray read(DataBuffer dst); + + /** + * Write the content of this N-dimensional array from the source buffer. + * + *

The size of the buffer must be equal or greater to the {@link #size()} of this + * array, or an exception is thrown. After the copy, content of the buffer and of the array can be + * altered independently, without affecting each other. + * + * @param src the source buffer + * @return this array + * @throws java.nio.BufferUnderflowException if the buffer has not enough remaining data to write + * into this array + * @see DataBuffer#size() + */ + NdArray write(DataBuffer src); + + /** + * Reads the content of this N-dimensional array into the destination array. + * + *

The size of the destination array must be equal or greater to the {@link #size()} of this + * array, or an exception is thrown. After the copy, content of the both arrays can be altered + * independently, without affecting each other. + * + * @param dst the destination array + * @return this array + * @throws java.nio.BufferOverflowException if the destination array cannot hold the content of + * this array + */ + NdArray read(T[] dst); + + /** + * Reads the content of this N-dimensional array into the destination array. + * + *

{@code dst.length - offset} must be equal or greater to the {@link #size()} of this array, + * or an exception is thrown. After the copy, content of the both arrays can be altered + * independently, without affecting each other. + * + * @param dst the destination array + * @param offset the index of the first element to write in the destination array + * @return this array + * @throws java.nio.BufferOverflowException if the destination array cannot hold the content of + * this array + * @throws IllegalArgumentException if offset is greater than dst length or is negative + */ + NdArray read(T[] dst, int offset); + + /** + * Writes the content of this N-dimensional array from the source array. + * + *

The size of the source array must be equal or greater to the {@link #size()} of this array, + * or an exception is thrown. After the copy, content of the both arrays can be altered + * independently, without affecting each other. + * + * @param src the source array + * @return this array + * @throws java.nio.BufferUnderflowException if the size of the source array is less than the size + * of this array + */ + NdArray write(T[] src); + + /** + * Writes the content of this N-dimensional array from the source array. + * + *

{@code src.length - offset} must be equal or greater to the {@link #size()} of this array, + * or an exception is thrown. After the copy, content of the both arrays can be altered + * independently, without affecting each other. + * + * @param src the source array + * @param offset the index of the first byte to read from the source array + * @return this array + * @throws java.nio.BufferUnderflowException if the size of the source array is less than the size + * of this array + * @throws IllegalArgumentException if offset is greater than src length or is negative + */ + NdArray write(T[] src, int offset); +} diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/NdArraySequence.java b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/NdArraySequence.java new file mode 100644 index 00000000000..c5d06384b48 --- /dev/null +++ b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/NdArraySequence.java @@ -0,0 +1,29 @@ +package org.tensorflow.nio.nd; + +import java.util.function.BiConsumer; +import java.util.function.Consumer; + +/** + * Iterates through a sequence of elements of an N-dimensional array. + * + * @param data type of the array being iterated + */ +public interface NdArraySequence> { + + /** + * Visit each elements of this iteration. + * + * @param consumer method to invoke for each elements + */ + void forEach(Consumer consumer); + + /** + * Visit each elements of this iteration and their respective coordinates. + * + *

Important: the consumer method should not keep a reference to the coordinates + * as they might are mutable and reuse during the iteration to improve performance. + * + * @param consumer method to invoke for each elements + */ + void forEachIndexed(BiConsumer consumer); +} diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/NdArrays.java b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/NdArrays.java new file mode 100644 index 00000000000..7e409af4fdf --- /dev/null +++ b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/NdArrays.java @@ -0,0 +1,467 @@ +/* + Copyright 2019 The TensorFlow Authors. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ======================================================================= + */ +package org.tensorflow.nio.nd; + +import org.tensorflow.nio.buffer.BooleanDataBuffer; +import org.tensorflow.nio.buffer.ByteDataBuffer; +import org.tensorflow.nio.buffer.DataBuffer; +import org.tensorflow.nio.buffer.DataBuffers; +import org.tensorflow.nio.buffer.DoubleDataBuffer; +import org.tensorflow.nio.buffer.FloatDataBuffer; +import org.tensorflow.nio.buffer.IntDataBuffer; +import org.tensorflow.nio.buffer.LongDataBuffer; +import org.tensorflow.nio.buffer.ShortDataBuffer; +import org.tensorflow.nio.nd.impl.dense.BooleanDenseNdArray; +import org.tensorflow.nio.nd.impl.dense.ByteDenseNdArray; +import org.tensorflow.nio.nd.impl.dense.DenseNdArray; +import org.tensorflow.nio.nd.impl.dense.DoubleDenseNdArray; +import org.tensorflow.nio.nd.impl.dense.FloatDenseNdArray; +import org.tensorflow.nio.nd.impl.dense.IntDenseNdArray; +import org.tensorflow.nio.nd.impl.dense.LongDenseNdArray; +import org.tensorflow.nio.nd.impl.dense.ShortDenseNdArray; + +/** + * Helper class for instantiating {@link NdArray} objects. + */ +public final class NdArrays { + + // BYTE ARRAYS + + /** + * Creates byte scalar (rank 0) initialized with the given value. + * + * @param value scalar value + * @return new byte scalar + */ + public static ByteNdArray scalar(byte value) { + return ofBytes(Shape.scalar()).setByte(value); + } + + /** + * Creates a byte vector (rank 1) initialized with the given values. + * + * @param values vector values + * @return new byte vector + * @throws IllegalArgumentException if values is null + */ + public static ByteNdArray vector(byte... values) { + if (values == null) { + throw new IllegalArgumentException("Values cannot be null"); + } + return ofBytes(Shape.make(values.length)).write(values); + } + + /** + * Creates an N-dimensional array of bytes of the given shape. + * + *

All values are initialized to zeros. + * + * @param shape shape of the array + * @return new byte N-dimensional array + * @throws IllegalArgumentException if shape is null or has unknown dimensions + */ + public static ByteNdArray ofBytes(Shape shape) { + if (shape == null) { + throw new IllegalArgumentException("Shape cannot be null"); + } + return wrap(DataBuffers.ofBytes(shape.size()), shape); + } + + /** + * Wraps a buffer in a byte N-dimensional array of a given shape. + * + * @param buffer buffer to wrap + * @param shape shape of the array + * @return new byte N-dimensional array + * @throws IllegalArgumentException if shape is null, has unknown dimensions or has size bigger + * in the buffer size + */ + public static ByteNdArray wrap(ByteDataBuffer buffer, Shape shape) { + return ByteDenseNdArray.create(buffer, shape); + } + + // LONG ARRAYS + + /** + * Creates long scalar (rank 0) initialized with the given value. + * + * @param value scalar value + * @return new long scalar + */ + public static LongNdArray scalar(long value) { + return ofLongs(Shape.scalar()).setLong(value); + } + + /** + * Creates a long vector (rank 1) initialized with the given values. + * + * @param values vector values + * @return new long vector + * @throws IllegalArgumentException if values is null + */ + public static LongNdArray vector(long... values) { + if (values == null) { + throw new IllegalArgumentException(); + } + return ofLongs(Shape.make(values.length)).write(values); + } + + /** + * Creates an N-dimensional array of longs of the given shape. + * + *

All values are initialized to zeros. + * + * @param shape shape of the array + * @return new long N-dimensional array + * @throws IllegalArgumentException if shape is null or has unknown dimensions + */ + public static LongNdArray ofLongs(Shape shape) { + return wrap(DataBuffers.ofLongs(shape.size()), shape); + } + + /** + * Wraps a buffer in a long N-dimensional array of a given shape. + * + * @param buffer buffer to wrap + * @param shape shape of the array + * @return new long N-dimensional array + * @throws IllegalArgumentException if shape is null, has unknown dimensions or has size bigger + * in the buffer size + */ + public static LongNdArray wrap(LongDataBuffer buffer, Shape shape) { + return LongDenseNdArray.create(buffer, shape); + } + + // INT ARRAYS + + /** + * Creates long scalar (rank 0) initialized with the given value. + * + * @param value scalar value + * @return new long scalar + */ + public static IntNdArray scalar(int value) { + return ofInts(Shape.scalar()).setInt(value); + } + + /** + * Creates a int vector (rank 1) initialized with the given values. + * + * @param values vector values + * @return new int vector + * @throws IllegalArgumentException if values is null + */ + public static IntNdArray vector(int... values) { + if (values == null) { + throw new IllegalArgumentException(); + } + return ofInts(Shape.make(values.length)).write(values); + } + + /** + * Creates an N-dimensional array of ints of the given shape. + * + *

All values are initialized to zeros. + * + * @param shape shape of the array + * @return new int N-dimensional array + * @throws IllegalArgumentException if shape is null or has unknown dimensions + */ + public static IntNdArray ofInts(Shape shape) { + return wrap(DataBuffers.ofInts(shape.size()), shape); + } + + /** + * Wraps a buffer in an int N-dimensional array of a given shape. + * + * @param buffer buffer to wrap + * @param shape shape of the array + * @return new int N-dimensional array + * @throws IllegalArgumentException if shape is null, has unknown dimensions or has size bigger + * in the buffer size + */ + public static IntNdArray wrap(IntDataBuffer buffer, Shape shape) { + return IntDenseNdArray.create(buffer, shape); + } + + // SHORT ARRAYS + + /** + * Creates short scalar (rank 0) initialized with the given value. + * + * @param value scalar value + * @return new short scalar + */ + public static ShortNdArray scalar(short value) { + return ofShorts(Shape.scalar()).setShort(value); + } + + /** + * Creates a short vector (rank 1) initialized with the given values. + * + * @param values vector values + * @return new short vector + * @throws IllegalArgumentException if values is null + */ + public static ShortNdArray vector(short... values) { + if (values == null) { + throw new IllegalArgumentException(); + } + return ofShorts(Shape.make(values.length)).write(values); + } + + /** + * Creates an N-dimensional array of shorts of the given shape. + * + *

All values are initialized to zeros. + * + * @param shape shape of the array + * @return new short N-dimensional array + * @throws IllegalArgumentException if shape is null or has unknown dimensions + */ + public static ShortNdArray ofShorts(Shape shape) { + return wrap(DataBuffers.ofShorts(shape.size()), shape); + } + + /** + * Wraps a buffer in a short N-dimensional array of a given shape. + * + * @param buffer buffer to wrap + * @param shape shape of the array + * @return new short N-dimensional array + * @throws IllegalArgumentException if shape is null, has unknown dimensions or has size bigger + * in the buffer size + */ + public static ShortNdArray wrap(ShortDataBuffer buffer, Shape shape) { + return ShortDenseNdArray.create(buffer, shape); + } + + // FLOAT ARRAYS + + /** + * Creates float scalar (rank 0) initialized with the given value. + * + * @param value scalar value + * @return new float scalar + */ + public static FloatNdArray scalar(float value) { + return ofFloats(Shape.scalar()).setFloat(value); + } + + /** + * Creates a float vector (rank 1) initialized with the given values. + * + * @param values vector values + * @return new float vector + * @throws IllegalArgumentException if values is null + */ + public static FloatNdArray vector(float... values) { + if (values == null) { + throw new IllegalArgumentException(); + } + return ofFloats(Shape.make(values.length)).write(values); + } + + /** + * Creates an N-dimensional array of floats of the given shape. + * + *

All values are initialized to zeros. + * + * @param shape shape of the array + * @return new float N-dimensional array + * @throws IllegalArgumentException if shape is null or has unknown dimensions + */ + public static FloatNdArray ofFloats(Shape shape) { + return wrap(DataBuffers.ofFloats(shape.size()), shape); + } + + /** + * Wraps a buffer in a float N-dimensional array of a given shape. + * + * @param buffer buffer to wrap + * @param shape shape of the array + * @return new float N-dimensional array + * @throws IllegalArgumentException if shape is null, has unknown dimensions or has size bigger + * in the buffer size + */ + public static FloatNdArray wrap(FloatDataBuffer buffer, Shape shape) { + return FloatDenseNdArray.create(buffer, shape); + } + + // DOUBLE ARRAYS + + /** + * Creates double scalar (rank 0) initialized with the given value. + * + * @param value scalar value + * @return new double scalar + */ + public static DoubleNdArray scalar(double value) { + return ofDoubles(Shape.scalar()).setDouble(value); + } + + /** + * Creates a double vector (rank 1) initialized with the given values. + * + * @param values vector values + * @return new double vector + * @throws IllegalArgumentException if values is null + */ + public static DoubleNdArray vector(double... values) { + if (values == null) { + throw new IllegalArgumentException(); + } + return ofDoubles(Shape.make(values.length)).write(values); + } + + /** + * Creates an N-dimensional array of doubles of the given shape. + * + *

All values are initialized to zeros. + * + * @param shape shape of the array + * @return new double N-dimensional array + * @throws IllegalArgumentException if shape is null or has unknown dimensions + */ + public static DoubleNdArray ofDoubles(Shape shape) { + return wrap(DataBuffers.ofDoubles(shape.size()), shape); + } + + /** + * Wraps a buffer in a double N-dimensional array of a given shape. + * + * @param buffer buffer to wrap + * @param shape shape of the array + * @return new double N-dimensional array + * @throws IllegalArgumentException if shape is null, has unknown dimensions or has size bigger + * in the buffer size + */ + public static DoubleNdArray wrap(DoubleDataBuffer buffer, Shape shape) { + return DoubleDenseNdArray.create(buffer, shape); + } + + // BOOLEAN ARRAYS + + /** + * Creates boolean scalar (rank 0) initialized with the given value. + * + * @param value scalar value + * @return new boolean scalar + */ + public static BooleanNdArray scalar(boolean value) { + return ofBooleans(Shape.scalar()).setBoolean(value); + } + + /** + * Creates a boolean vector (rank 1) initialized with the given values. + * + * @param values vector values + * @return new boolean vector + * @throws IllegalArgumentException if values is null + */ + public static BooleanNdArray vector(boolean... values) { + if (values == null) { + throw new IllegalArgumentException(); + } + return ofBooleans(Shape.make(values.length)).write(values); + } + + /** + * Creates an N-dimensional array of booleans of the given shape. + * + *

All values are initialized to zeros. + * + * @param shape shape of the array + * @return new boolean N-dimensional array + * @throws IllegalArgumentException if shape is null or has unknown dimensions + */ + public static BooleanNdArray ofBooleans(Shape shape) { + return wrap(DataBuffers.ofBooleans(shape.size()), shape); + } + + /** + * Wraps a buffer in a boolean N-dimensional array of a given shape. + * + * @param buffer buffer to wrap + * @param shape shape of the array + * @return new boolean N-dimensional array + * @throws IllegalArgumentException if shape is null, has unknown dimensions or has size bigger + * in the buffer size + */ + public static BooleanNdArray wrap(BooleanDataBuffer buffer, Shape shape) { + return BooleanDenseNdArray.create(buffer, shape); + } + + // OBJECT ARRAYS + + /** + * Creates scalar (rank 0) initialized with the given value. + * + * @param value scalar value + * @return new scalar + */ + @SuppressWarnings("unchecked") + public static NdArray scalarOf(T value) { + if (value == null) { + throw new IllegalArgumentException(); + } + return of((Class)value.getClass(), Shape.scalar()).setValue(value); + } + + /** + * Creates a vector (rank 1) initialized with the given values. + * + * @param values vector values + * @return new vector + * @throws IllegalArgumentException if values is null + */ + @SuppressWarnings("unchecked") + public static NdArray vectorOf(T... values) { + if (values == null) { + throw new IllegalArgumentException(); + } + return of((Class)values[0].getClass(), Shape.make(values.length)).write(values); + } + + /** + * Creates an N-dimensional array of the given shape. + * + *

All values are initialized to zeros. + * + * @param clazz class of the data to be stored in this array + * @param shape shape of the array + * @return new N-dimensional array + * @throws IllegalArgumentException if shape is null or has unknown dimensions + */ + public static NdArray of(Class clazz, Shape shape) { + return wrap(DataBuffers.of(clazz, shape.size()), shape); + } + + /** + * Wraps a buffer in an N-dimensional array of a given shape. + * + * @param buffer buffer to wrap + * @param shape shape of the array + * @return new N-dimensional array + * @throws IllegalArgumentException if shape is null, has unknown dimensions or has size bigger + * in the buffer size + */ + public static NdArray wrap(DataBuffer buffer, Shape shape) { + return DenseNdArray.wrap(buffer, shape); + } +} + diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/Shape.java b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/Shape.java new file mode 100644 index 00000000000..3782bb288c4 --- /dev/null +++ b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/Shape.java @@ -0,0 +1,143 @@ +/* + Copyright 2019 The TensorFlow Authors. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ======================================================================= + */ + +package org.tensorflow.nio.nd; + +import java.util.Arrays; + +/** The possibly partially known shape of a tensor produced by an operation. */ +public final class Shape { + + public static long UNKNOWN_SIZE = -1L; + + /** Create a Shape representing an unknown number of dimensions. */ + public static Shape unknown() { + return new Shape(null); + } + + /** Create a Shape representing a scalar value. */ + public static Shape scalar() { + return new Shape(new long[0]); + } + + /** + * Create a Shape representing an N-dimensional value. + * + *

Creates a Shape representing an N-dimensional value (N being at least 1), with the provided + * size for each dimension. A -1 indicates that the size of the corresponding dimension is + * unknown. For example: + * + *

{@code
+   * // A 2-element vector.
+   * Shape vector = Shape.create(2);
+   *
+   * // A 2x3 matrix.
+   * Shape matrix = Shape.create(2, 3);
+   *
+   * // A matrix with 4 columns but an unknown number of rows.
+   * // This is typically used to indicate the shape of tensors that represent
+   * // a variable-sized batch of values. The Shape below might represent a
+   * // variable-sized batch of 4-element vectors.
+   * Shape batch = Shape.create(-1, 4);
+   * }
+ */ + public static Shape make(long... dimensionSizes) { + if (dimensionSizes == null || dimensionSizes.length == 0) { + return scalar(); + } + return new Shape(dimensionSizes); + } + + public long size() { + if (size == null) { + size = computeSize(dimensionSizes); + } + return size; + } + + public long size(int i) { + return dimensionSizes != null ? dimensionSizes[i] : UNKNOWN_SIZE; + } + + public int numDimensions() { + return dimensionSizes != null ? dimensionSizes.length : -1; + } + + public boolean hasUnknownDimension() { + if (dimensionSizes == null) { + return true; + } + for (long dimSize : dimensionSizes) { + if (dimSize == UNKNOWN_SIZE) { + return true; + } + } + return false; + } + + public long[] asArray() { + return dimensionSizes; + } + + @Override + public int hashCode() { + return dimensionSizes != null ? Arrays.hashCode(dimensionSizes) : super.hashCode(); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + // Shapes are equivalent if all of their dimensions are equals + if (obj instanceof Shape) { + Shape otherShape = (Shape)obj; + if (otherShape.hasUnknownDimension()) { + return false; + } + return Arrays.equals(dimensionSizes, otherShape.dimensionSizes); + } + return false; + } + + /** Succinct description of the shape meant for debugging. */ + @Override + public String toString() { + return Arrays.toString(dimensionSizes); + } + + private Shape(long[] dimensionSizes) { + this.dimensionSizes = dimensionSizes; + } + + private final long[] dimensionSizes; + private Long size; + + private static long computeSize(long[] dimensionSizes) { + if (dimensionSizes == null) { + return UNKNOWN_SIZE; + } + long computedSize = 1L; + for (long dimensionSize : dimensionSizes) { + if (dimensionSize == UNKNOWN_SIZE) { + return UNKNOWN_SIZE; + } + computedSize *= dimensionSize; + } + return computedSize; + } +} diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/ShortNdArray.java b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/ShortNdArray.java new file mode 100644 index 00000000000..6bbd081483c --- /dev/null +++ b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/ShortNdArray.java @@ -0,0 +1,172 @@ +/* + Copyright 2019 The TensorFlow Authors. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ======================================================================= + */ +package org.tensorflow.nio.nd; + +import org.tensorflow.nio.buffer.DataBuffer; +import org.tensorflow.nio.buffer.ShortDataBuffer; +import org.tensorflow.nio.nd.index.Index; + +/** + * An {@link NdArray} of shorts. + */ +public interface ShortNdArray extends NdArray { + + /** + * Returns the short value of the scalar found at the given coordinates. + * + *

To access the scalar element, the number of coordinates provided must be equal to the number + * of dimensions of this array (i.e. its rank). For example: + *

{@code
+   *  ShortNdArray matrix = NdArrays.ofShorts(shape(2, 2));  // matrix rank = 2
+   *  matrix.getShort(0, 1);  // succeeds, returns 0.0f
+   *  matrix.getShort(0);  // throws IllegalRankException
+   *
+   *  ShortNdArray scalar = matrix.get(0, 1);  // scalar rank = 0
+   *  scalar.getShort();  // succeeds, returns 0.0f
+   * }
+ * + * @param coordinates coordinates of the scalar to resolve + * @return value of that scalar + * @throws IndexOutOfBoundsException if some coordinates are outside the limits of their respective dimension + * @throws IllegalRankException if number of coordinates is not sufficient to access a scalar element + */ + short getShort(long... coordinates); + + /** + * Assigns the short value of the scalar found at the given coordinates. + * + *

To access the scalar element, the number of coordinates provided must be equal to the number + * of dimensions of this array (i.e. its rank). For example: + *

{@code
+   *  ShortNdArray matrix = NdArrays.ofShorts(shape(2, 2));  // matrix rank = 2
+   *  matrix.setShort(10.0f, 0, 1);  // succeeds
+   *  matrix.setShort(10.0f, 0);  // throws IllegalRankException
+   *
+   *  ShortNdArray scalar = matrix.get(0, 1);  // scalar rank = 0
+   *  scalar.setShort(10.0f);  // succeeds
+   * }
+ * + * @param coordinates coordinates of the scalar to assign + * @return this array + * @throws IndexOutOfBoundsException if some coordinates are outside the limits of their respective dimension + * @throws IllegalRankException if number of coordinates is not sufficient to access a scalar element + */ + ShortNdArray setShort(short value, long... coordinates); + + /** + * Reads the content of this N-dimensional array into the destination short array. + * + *

The size of the destination array must be equal or greater to the {@link #size()} of this array, + * or an exception is thrown. After the copy, content of the both arrays can be altered + * independently, without affecting each other. + * + * @param dst the destination array + * @return this array + * @throws java.nio.BufferOverflowException if the destination array cannot hold the content of this array + */ + default ShortNdArray read(short[] dst) { + return read(dst, 0); + } + + /** + * Reads the content of this N-dimensional array into the destination short array. + * + *

{@code dst.length - offset} must be equal or greater to the {@link #size()} of this array, + * or an exception is thrown. After the copy, content of the both arrays can be altered + * independently, without affecting each other. + * + * @param dst the destination array + * @param offset the index of the first short to write in the destination array + * @return this array + * @throws java.nio.BufferOverflowException if the destination array cannot hold the content of this array + * @throws IndexOutOfBoundsException if offset is greater than dst length or is negative + */ + ShortNdArray read(short[] dst, int offset); + + /** + * Writes the content of this N-dimensional array from the source short array. + * + *

The size of the source array must be equal or greater to the {@link #size()} of this array, + * or an exception is thrown. After the copy, content of the both arrays can be altered + * independently, without affecting each other. + * + * @param src the source array + * @return this array + * @throws java.nio.BufferUnderflowException if the size of the source array is less than the size of this array + */ + default ShortNdArray write(short[] src) { + return write(src, 0); + } + + /** + * Writes the content of this N-dimensional array from the source short array. + * + *

{@code src.length - offset} must be equal or greater to the {@link #size()} of this array, + * or an exception is thrown. After the copy, content of the both arrays can be altered + * independently, without affecting each other. + * + * @param src the source array + * @param offset the index of the first short to read from the source array + * @return this array + * @throws java.nio.BufferUnderflowException if the size of the source array is less than the size of this array + * @throws IndexOutOfBoundsException if offset is greater than src length or is negative + */ + ShortNdArray write(short[] src, int offset); + + @Override + ShortNdArray slice(Index... coordinates); + + @Override + ShortNdArray get(long... coordinates); + + @Override + ShortNdArray set(NdArray src, long... coordinates); + + @Override + ShortNdArray setValue(Short value, long... indices); + + @Override + NdArraySequence elements(int dimensionIdx); + + @Override + NdArraySequence scalars(); + + @Override + ShortNdArray copyTo(NdArray dst); + + @Override + ShortNdArray read(DataBuffer dst); + + ShortNdArray read(ShortDataBuffer dst); + + @Override + ShortNdArray write(DataBuffer src); + + ShortNdArray write(ShortDataBuffer src); + + @Override + ShortNdArray read(Short[] dst); + + @Override + ShortNdArray read(Short[] dst, int offset); + + @Override + ShortNdArray write(Short[] src); + + @Override + ShortNdArray write(Short[] src, int offset); +} diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/AbstractNdArray.java b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/AbstractNdArray.java new file mode 100644 index 00000000000..97a6975ba18 --- /dev/null +++ b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/AbstractNdArray.java @@ -0,0 +1,81 @@ +/* + Copyright 2019 The TensorFlow Authors. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ======================================================================= + */ +package org.tensorflow.nio.nd.impl; + +import org.tensorflow.nio.buffer.DataBuffers; +import org.tensorflow.nio.nd.NdArray; +import org.tensorflow.nio.nd.NdArraySequence; +import org.tensorflow.nio.nd.Shape; +import org.tensorflow.nio.nd.impl.dimension.DimensionalSpace; +import org.tensorflow.nio.nd.impl.sequence.ElementSequence; + +@SuppressWarnings("unchecked") +public abstract class AbstractNdArray> implements NdArray { + + public abstract U slice(long position, DimensionalSpace dimensions); + + public DimensionalSpace dimensions() { + return dimensions; + } + + @Override + public Shape shape() { + return dimensions.shape(); + } + + @Override + public NdArraySequence elements(int dimensionIdx) { + if (dimensionIdx >= shape().numDimensions()) { + throw new IllegalArgumentException("Cannot iterate elements in dimension '" + dimensionIdx + + "' of array with shape " + shape()); + } + return ElementSequence.create(this, dimensionIdx); + } + + @Override + public NdArraySequence scalars() { + return ElementSequence.create(this, shape().numDimensions() - 1); // negative if this array is a scalar + } + + @Override + public U read(T[] dst) { + return (U)read(DataBuffers.wrap(dst, false)); + } + + @Override + public U read(T[] dst, int offset) { + return (U)read(DataBuffers.wrap(dst, false).offset(offset)); + } + + @Override public U write(T[] src) { + return (U)write(DataBuffers.wrap(src, false)); + } + + @Override public U write(T[] src, int offset) { + return (U)write(DataBuffers.wrap(src, false).offset(offset)); + } + + protected AbstractNdArray(DimensionalSpace dimensions) { + this.dimensions = dimensions; + } + + protected void slowCopyTo(NdArray array) { + scalars().forEachIndexed((coords, e) -> array.setValue(e.getValue(), coords)); + } + + private DimensionalSpace dimensions; +} diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/Validator.java b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/Validator.java new file mode 100644 index 00000000000..3a5fca6285f --- /dev/null +++ b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/Validator.java @@ -0,0 +1,69 @@ +/* + Copyright 2019 The TensorFlow Authors. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ======================================================================= + */ +package org.tensorflow.nio.nd.impl; + +import java.nio.BufferOverflowException; +import java.nio.BufferUnderflowException; +import org.tensorflow.nio.buffer.DataBuffer; +import org.tensorflow.nio.nd.NdArray; + +public class Validator { + + public static void getArrayArgs(NdArray ndArray, int arrayLength, int arrayOffset) { + copyArrayArgs(arrayLength, arrayOffset); + if (arrayLength - arrayOffset < ndArray.size()) { + throw new BufferOverflowException(); + } + } + + public static void putArrayArgs(NdArray ndArray, int arrayLength, int arrayOffset) { + copyArrayArgs(arrayLength, arrayOffset); + if (arrayLength - arrayOffset < ndArray.size()) { + throw new BufferUnderflowException(); + } + } + + public static void copyToNdArrayArgs(NdArray ndArray, NdArray otherNdArray) { + if (!ndArray.shape().equals(otherNdArray.shape())) { + throw new IllegalArgumentException("Can only copy to arrays of the same shape (" + + ndArray.shape() + " != " + otherNdArray.shape() + ")"); + } + } + + public static void readToBufferArgs(NdArray ndArray, DataBuffer dst) { + if (dst.size() < ndArray.size()) { + throw new BufferOverflowException(); + } + } + + public static void writeFromBufferArgs(NdArray ndArray, DataBuffer src) { + if (src.size() < ndArray.size()) { + throw new BufferUnderflowException(); + } + } + + private static void copyArrayArgs(int arrayLength, int arrayOffset) { + if (arrayOffset < 0) { + throw new IndexOutOfBoundsException("Offset must be non-negative"); + } + if (arrayOffset > arrayLength) { + throw new IndexOutOfBoundsException("Offset must be no larger than array length"); + } + } + + protected Validator() {} +} diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dense/AbstractDenseNdArray.java b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dense/AbstractDenseNdArray.java new file mode 100644 index 00000000000..5342a406599 --- /dev/null +++ b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dense/AbstractDenseNdArray.java @@ -0,0 +1,112 @@ +/* + Copyright 2019 The TensorFlow Authors. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ======================================================================= + */ +package org.tensorflow.nio.nd.impl.dense; + +import java.util.concurrent.atomic.AtomicLong; +import org.tensorflow.nio.buffer.DataBuffer; +import org.tensorflow.nio.nd.IllegalRankException; +import org.tensorflow.nio.nd.NdArray; +import org.tensorflow.nio.nd.impl.AbstractNdArray; +import org.tensorflow.nio.nd.impl.dimension.DimensionalSpace; +import org.tensorflow.nio.nd.impl.dimension.RelativeDimensionalSpace; +import org.tensorflow.nio.nd.index.Index; + +@SuppressWarnings("unchecked") +public abstract class AbstractDenseNdArray> extends AbstractNdArray { + + @Override + public U slice(long position, DimensionalSpace dimensions) { + return instantiate(buffer().offset(position), dimensions); + } + + @Override + public U slice(Index... indices) { + if (indices == null) { + throw new IllegalArgumentException("Slicing requires at least one index"); + } + RelativeDimensionalSpace sliceDimensions = dimensions().mapTo(indices); + return slice(sliceDimensions.position(), sliceDimensions); + } + + @Override + public U get(long... coords) { + return slice(positionOf(coords, false), dimensions().from(coords.length)); + } + + @Override + public T getValue(long... coords) { + return buffer().get(positionOf(coords, true)); + } + + @Override + public U set(NdArray src, long... coordinates) { + src.copyTo((coordinates == null || coordinates.length == 0) ? this : get(coordinates)); + return (U)this; + } + + @Override + public U setValue(T value, long... coords) { + buffer().set(value, positionOf(coords, true)); + return (U)this; + } + + @Override + public U read(DataBuffer dst) { + Validator.readToBufferArgs(this, dst); + DataTransfer.execute(buffer(), dimensions(), dst, DataTransfer::ofValue); + return (U)this; + } + + @Override + public U write(DataBuffer src) { + Validator.writeFromBufferArgs(this, src); + DataTransfer.execute(src, buffer(), dimensions(), DataTransfer::ofValue); + return (U)this; + } + + protected AbstractDenseNdArray(DimensionalSpace dimensions) { + super(dimensions); + } + + abstract protected DataBuffer buffer(); + + abstract U instantiate(DataBuffer buffer, DimensionalSpace dimensions); + + long positionOf(long[] coords, boolean isValue) { + if (coords == null || coords.length == 0) { + return 0; + } + if (coords.length > dimensions().numDimensions()) { + throw new IndexOutOfBoundsException(); + } + if (isValue && coords.length != dimensions().numDimensions()) { + throw new IllegalRankException("Not a scalar value"); + } + return dimensions().positionOf(coords); + } + + @Override + protected void slowCopyTo(NdArray array) { + if (array instanceof AbstractDenseNdArray) { + AbstractDenseNdArray dst = (AbstractDenseNdArray)array; + AtomicLong off = new AtomicLong(); + scalars().forEach(s -> dst.buffer().set(s.getValue(), off.getAndIncrement())); + } else { + super.slowCopyTo(array); + } + } +} diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dense/BooleanDenseNdArray.java b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dense/BooleanDenseNdArray.java new file mode 100644 index 00000000000..3d9a215c4de --- /dev/null +++ b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dense/BooleanDenseNdArray.java @@ -0,0 +1,104 @@ +/* + Copyright 2019 The TensorFlow Authors. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ======================================================================= + */ +package org.tensorflow.nio.nd.impl.dense; + +import org.tensorflow.nio.buffer.BooleanDataBuffer; +import org.tensorflow.nio.buffer.DataBuffer; +import org.tensorflow.nio.buffer.DataBuffers; +import org.tensorflow.nio.nd.BooleanNdArray; +import org.tensorflow.nio.nd.NdArray; +import org.tensorflow.nio.nd.Shape; +import org.tensorflow.nio.nd.impl.dimension.DimensionalSpace; + +public class BooleanDenseNdArray extends AbstractDenseNdArray + implements BooleanNdArray { + + public static BooleanNdArray create(BooleanDataBuffer buffer, Shape shape) { + Validator.denseShape(buffer, shape); + return new BooleanDenseNdArray(buffer, shape); + } + + @Override + public boolean getBoolean(long... indices) { + return buffer().getBoolean(positionOf(indices, true)); + } + + @Override + public BooleanNdArray setBoolean(boolean value, long... indices) { + buffer().setBoolean(value, positionOf(indices, true)); + return this; + } + + @Override + public BooleanNdArray read(boolean[] dst, int offset) { + Validator.getArrayArgs(this, dst.length, offset); + return read(DataBuffers.wrap(dst, false).offset(offset)); + } + + @Override + public BooleanNdArray write(boolean[] src, int offset) { + Validator.putArrayArgs(this, src.length, offset); + return write(DataBuffers.wrap(src, true).offset(offset)); + } + + @Override + public BooleanNdArray copyTo(NdArray dst) { + Validator.copyToNdArrayArgs(this, dst); + if (dst instanceof BooleanDenseNdArray) { + BooleanDenseNdArray booleanDst = (BooleanDenseNdArray)dst; + DataTransfer.execute(buffer, dimensions(), booleanDst.buffer, booleanDst.dimensions(), DataTransfer::ofBoolean); + } else { + slowCopyTo(dst); + } + return this; + } + + @Override + public BooleanNdArray read(BooleanDataBuffer dst) { + Validator.readToBufferArgs(this, dst); + DataTransfer.execute(buffer, dimensions(), dst, DataTransfer::ofBoolean); + return this; + } + + @Override + public BooleanNdArray write(BooleanDataBuffer src) { + Validator.writeFromBufferArgs(this, src); + DataTransfer.execute(src, buffer, dimensions(), DataTransfer::ofBoolean); + return this; + } + + protected BooleanDenseNdArray(BooleanDataBuffer buffer, Shape shape) { + this(buffer, DimensionalSpace.create(shape)); + } + + @Override + BooleanDenseNdArray instantiate(DataBuffer buffer, DimensionalSpace dimensions) { + return new BooleanDenseNdArray((BooleanDataBuffer)buffer, dimensions); + } + + @Override + protected BooleanDataBuffer buffer() { + return buffer; + } + + private final BooleanDataBuffer buffer; + + private BooleanDenseNdArray(BooleanDataBuffer buffer, DimensionalSpace dimensions) { + super(dimensions); + this.buffer = buffer; + } +} \ No newline at end of file diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dense/ByteDenseNdArray.java b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dense/ByteDenseNdArray.java new file mode 100644 index 00000000000..d357240acce --- /dev/null +++ b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dense/ByteDenseNdArray.java @@ -0,0 +1,104 @@ +/* + Copyright 2019 The TensorFlow Authors. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ======================================================================= + */ +package org.tensorflow.nio.nd.impl.dense; + +import org.tensorflow.nio.buffer.ByteDataBuffer; +import org.tensorflow.nio.buffer.DataBuffer; +import org.tensorflow.nio.buffer.DataBuffers; +import org.tensorflow.nio.nd.ByteNdArray; +import org.tensorflow.nio.nd.NdArray; +import org.tensorflow.nio.nd.Shape; +import org.tensorflow.nio.nd.impl.dimension.DimensionalSpace; + +public class ByteDenseNdArray extends AbstractDenseNdArray + implements ByteNdArray { + + public static ByteNdArray create(ByteDataBuffer buffer, Shape shape) { + Validator.denseShape(buffer, shape); + return new ByteDenseNdArray(buffer, shape); + } + + @Override + public byte getByte(long... indices) { + return buffer().getByte(positionOf(indices, true)); + } + + @Override + public ByteNdArray setByte(byte value, long... indices) { + buffer().setByte(value, positionOf(indices, true)); + return this; + } + + @Override + public ByteNdArray read(byte[] dst, int offset) { + Validator.getArrayArgs(this, dst.length, offset); + return read(DataBuffers.wrap(dst, false).offset(offset)); + } + + @Override + public ByteNdArray write(byte[] src, int offset) { + Validator.putArrayArgs(this, src.length, offset); + return write(DataBuffers.wrap(src, true).offset(offset)); + } + + @Override + public ByteNdArray copyTo(NdArray dst) { + Validator.copyToNdArrayArgs(this, dst); + if (dst instanceof ByteDenseNdArray) { + ByteDenseNdArray byteDst = (ByteDenseNdArray)dst; + DataTransfer.execute(buffer, dimensions(), byteDst.buffer, byteDst.dimensions(), DataTransfer::ofByte); + } else { + slowCopyTo(dst); + } + return this; + } + + @Override + public ByteNdArray read(ByteDataBuffer dst) { + Validator.readToBufferArgs(this, dst); + DataTransfer.execute(buffer, dimensions(), dst, DataTransfer::ofByte); + return this; + } + + @Override + public ByteNdArray write(ByteDataBuffer src) { + Validator.writeFromBufferArgs(this, src); + DataTransfer.execute(src, buffer, dimensions(), DataTransfer::ofByte); + return this; + } + + protected ByteDenseNdArray(ByteDataBuffer buffer, Shape shape) { + this(buffer, DimensionalSpace.create(shape)); + } + + @Override + ByteDenseNdArray instantiate(DataBuffer buffer, DimensionalSpace dimensions) { + return new ByteDenseNdArray((ByteDataBuffer)buffer, dimensions); + } + + @Override + protected ByteDataBuffer buffer() { + return buffer; + } + + private final ByteDataBuffer buffer; + + private ByteDenseNdArray(ByteDataBuffer buffer, DimensionalSpace dimensions) { + super(dimensions); + this.buffer = buffer; + } +} \ No newline at end of file diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dense/DataTransfer.java b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dense/DataTransfer.java new file mode 100644 index 00000000000..eda01d9209f --- /dev/null +++ b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dense/DataTransfer.java @@ -0,0 +1,119 @@ +package org.tensorflow.nio.nd.impl.dense; + +import org.tensorflow.nio.buffer.BooleanDataBuffer; +import org.tensorflow.nio.buffer.ByteDataBuffer; +import org.tensorflow.nio.buffer.DataBuffer; +import org.tensorflow.nio.buffer.DoubleDataBuffer; +import org.tensorflow.nio.buffer.FloatDataBuffer; +import org.tensorflow.nio.buffer.IntDataBuffer; +import org.tensorflow.nio.buffer.LongDataBuffer; +import org.tensorflow.nio.buffer.ShortDataBuffer; +import org.tensorflow.nio.nd.impl.dimension.DimensionalSpace; +import org.tensorflow.nio.nd.impl.sequence.PositionIterator; + +final class DataTransfer { + + @FunctionalInterface + interface OfValue> { + void copy(B srcBuffer, long srcIndex, B dstBuffer, long dstIndex); + } + + static > void ofValue(B srcBuf, long srcIdx, B dstBuf, long dstIdx) { + dstBuf.set(srcBuf.get(srcIdx), dstIdx); + } + + static void ofByte(ByteDataBuffer srcBuf, long srcIdx, ByteDataBuffer dstBuf, long dstIdx) { + dstBuf.setByte(srcBuf.getByte(srcIdx), dstIdx); + } + + static void ofInt(IntDataBuffer srcBuf, long srcIdx, IntDataBuffer dstBuf, long dstIdx) { + dstBuf.setInt(srcBuf.getInt(srcIdx), dstIdx); + } + + static void ofLong(LongDataBuffer srcBuf, long srcIdx, LongDataBuffer dstBuf, long dstIdx) { + dstBuf.setLong(srcBuf.getLong(srcIdx), dstIdx); + } + + static void ofDouble(DoubleDataBuffer srcBuf, long srcIdx, DoubleDataBuffer dstBuf, long dstIdx) { + dstBuf.setDouble(srcBuf.getDouble(srcIdx), dstIdx); + } + + static void ofFloat(FloatDataBuffer srcBuf, long srcIdx, FloatDataBuffer dstBuf, long dstIdx) { + dstBuf.setFloat(srcBuf.getFloat(srcIdx), dstIdx); + } + + static void ofShort(ShortDataBuffer srcBuf, long srcIdx, ShortDataBuffer dstBuf, long dstIdx) { + dstBuf.setShort(srcBuf.getShort(srcIdx), dstIdx); + } + + static void ofBoolean(BooleanDataBuffer srcBuf, long srcIdx, BooleanDataBuffer dstBuf, long dstIdx) { + dstBuf.setBoolean(srcBuf.getBoolean(srcIdx), dstIdx); + } + + static > void execute(B srcBuffer, DimensionalSpace srcDimensions, B dstBuffer, DimensionalSpace dstDimensions, OfValue valueTransfer) { + if (srcDimensions.isSegmented() || dstDimensions.isSegmented()) { + int segmentationIdx = Math.max(srcDimensions.segmentationIdx(), dstDimensions.segmentationIdx()); + copyByElement( + srcBuffer, + PositionIterator.create(srcDimensions, segmentationIdx), + dstBuffer, + PositionIterator.create(dstDimensions, segmentationIdx), + srcDimensions.get(segmentationIdx).elementSize(), + valueTransfer + ); + } else { + srcBuffer.copyTo(dstBuffer, srcDimensions.get(0).totalSize()); + } + } + + static > void execute(B srcBuffer, B dstBuffer, DimensionalSpace dstDimensions, OfValue valueTransfer) { + if (dstDimensions.isSegmented()) { + long elementSize = dstDimensions.get(dstDimensions.segmentationIdx()).elementSize(); + copyByElement( + srcBuffer, + PositionIterator.sequence(elementSize, srcBuffer.size()), + dstBuffer, + PositionIterator.create(dstDimensions, dstDimensions.segmentationIdx()), + elementSize, + valueTransfer + ); + } else { + srcBuffer.copyTo(dstBuffer, dstDimensions.get(0).totalSize()); + } + } + + static > void execute(B srcBuffer, DimensionalSpace srcDimensions, B dstBuffer, OfValue valueTransfer) { + if (srcDimensions.isSegmented()) { + long elementSize = srcDimensions.get(srcDimensions.segmentationIdx()).elementSize(); + copyByElement( + srcBuffer, + PositionIterator.create(srcDimensions, srcDimensions.segmentationIdx()), + dstBuffer, + PositionIterator.sequence(elementSize, dstBuffer.size()), + elementSize, + valueTransfer + ); + } else { + srcBuffer.copyTo(dstBuffer, srcDimensions.get(0).totalSize()); + } + } + + private static > void copyByElement( + B srcBuffer, + PositionIterator srcIterator, + B dstBuffer, + PositionIterator dstIterator, + long elementSize, + OfValue valueTransfer + ) { + if (elementSize == 1) { + while (srcIterator.hasNext()) { + valueTransfer.copy(srcBuffer, srcIterator.nextLong(), dstBuffer, dstIterator.nextLong()); + } + } else { + while (srcIterator.hasNext()) { + srcBuffer.offset(srcIterator.nextLong()).copyTo(dstBuffer.offset(dstIterator.nextLong()), elementSize); + } + } + } +} diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dense/DenseNdArray.java b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dense/DenseNdArray.java new file mode 100644 index 00000000000..53d1b56881b --- /dev/null +++ b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dense/DenseNdArray.java @@ -0,0 +1,63 @@ +/* + Copyright 2019 The TensorFlow Authors. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ======================================================================= + */ +package org.tensorflow.nio.nd.impl.dense; + +import org.tensorflow.nio.buffer.DataBuffer; +import org.tensorflow.nio.nd.NdArray; +import org.tensorflow.nio.nd.Shape; +import org.tensorflow.nio.nd.impl.dimension.DimensionalSpace; + +public class DenseNdArray extends AbstractDenseNdArray> { + + public static NdArray wrap(DataBuffer buffer, Shape shape) { + Validator.denseShape(buffer, shape); + return new DenseNdArray<>(buffer, shape); + } + + @Override + public NdArray copyTo(NdArray dst) { + Validator.copyToNdArrayArgs(this, dst); + if (dst instanceof DenseNdArray) { + DenseNdArray denseDst = (DenseNdArray)dst; + DataTransfer.execute(buffer, dimensions(), denseDst.buffer, denseDst.dimensions(), DataTransfer::ofValue); + } else { + slowCopyTo(dst); + } + return this; + } + + protected DenseNdArray(DataBuffer buffer, Shape shape) { + this(buffer, DimensionalSpace.create(shape)); + } + + @Override + DenseNdArray instantiate(DataBuffer buffer, DimensionalSpace dimensions) { + return new DenseNdArray<>(buffer, dimensions); + } + + @Override + protected DataBuffer buffer() { + return buffer; + } + + private final DataBuffer buffer; + + private DenseNdArray(DataBuffer buffer, DimensionalSpace dimensions) { + super(dimensions); + this.buffer = buffer; + } +} \ No newline at end of file diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dense/DoubleDenseNdArray.java b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dense/DoubleDenseNdArray.java new file mode 100644 index 00000000000..fde7320659e --- /dev/null +++ b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dense/DoubleDenseNdArray.java @@ -0,0 +1,104 @@ +/* + Copyright 2019 The TensorFlow Authors. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ======================================================================= + */ +package org.tensorflow.nio.nd.impl.dense; + +import org.tensorflow.nio.buffer.DataBuffer; +import org.tensorflow.nio.buffer.DataBuffers; +import org.tensorflow.nio.buffer.DoubleDataBuffer; +import org.tensorflow.nio.nd.DoubleNdArray; +import org.tensorflow.nio.nd.NdArray; +import org.tensorflow.nio.nd.Shape; +import org.tensorflow.nio.nd.impl.dimension.DimensionalSpace; + +public class DoubleDenseNdArray extends AbstractDenseNdArray + implements DoubleNdArray { + + public static DoubleNdArray create(DoubleDataBuffer buffer, Shape shape) { + Validator.denseShape(buffer, shape); + return new DoubleDenseNdArray(buffer, shape); + } + + @Override + public double getDouble(long... indices) { + return buffer().getDouble(positionOf(indices, true)); + } + + @Override + public DoubleNdArray setDouble(double value, long... indices) { + buffer().setDouble(value, positionOf(indices, true)); + return this; + } + + @Override + public DoubleNdArray read(double[] dst, int offset) { + Validator.getArrayArgs(this, dst.length, offset); + return read(DataBuffers.wrap(dst, false).offset(offset)); + } + + @Override + public DoubleNdArray write(double[] src, int offset) { + Validator.putArrayArgs(this, src.length, offset); + return write(DataBuffers.wrap(src, true).offset(offset)); + } + + @Override + public DoubleNdArray copyTo(NdArray dst) { + Validator.copyToNdArrayArgs(this, dst); + if (dst instanceof DoubleDenseNdArray) { + DoubleDenseNdArray doubleDst = (DoubleDenseNdArray)dst; + DataTransfer.execute(buffer, dimensions(), doubleDst.buffer, doubleDst.dimensions(), DataTransfer::ofDouble); + } else { + slowCopyTo(dst); + } + return this; + } + + @Override + public DoubleNdArray read(DoubleDataBuffer dst) { + Validator.readToBufferArgs(this, dst); + DataTransfer.execute(buffer, dimensions(), dst, DataTransfer::ofDouble); + return this; + } + + @Override + public DoubleNdArray write(DoubleDataBuffer src) { + Validator.writeFromBufferArgs(this, src); + DataTransfer.execute(src, buffer, dimensions(), DataTransfer::ofDouble); + return this; + } + + protected DoubleDenseNdArray(DoubleDataBuffer buffer, Shape shape) { + this(buffer, DimensionalSpace.create(shape)); + } + + @Override + DoubleDenseNdArray instantiate(DataBuffer buffer, DimensionalSpace dimensions) { + return new DoubleDenseNdArray((DoubleDataBuffer)buffer, dimensions); + } + + @Override + protected DoubleDataBuffer buffer() { + return buffer; + } + + private final DoubleDataBuffer buffer; + + private DoubleDenseNdArray(DoubleDataBuffer buffer, DimensionalSpace dimensions) { + super(dimensions); + this.buffer = buffer; + } +} \ No newline at end of file diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dense/FloatDenseNdArray.java b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dense/FloatDenseNdArray.java new file mode 100644 index 00000000000..2d190ca38ee --- /dev/null +++ b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dense/FloatDenseNdArray.java @@ -0,0 +1,104 @@ +/* + Copyright 2019 The TensorFlow Authors. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ======================================================================= + */ +package org.tensorflow.nio.nd.impl.dense; + +import org.tensorflow.nio.buffer.DataBuffer; +import org.tensorflow.nio.buffer.DataBuffers; +import org.tensorflow.nio.buffer.FloatDataBuffer; +import org.tensorflow.nio.nd.FloatNdArray; +import org.tensorflow.nio.nd.NdArray; +import org.tensorflow.nio.nd.Shape; +import org.tensorflow.nio.nd.impl.dimension.DimensionalSpace; + +public class FloatDenseNdArray extends AbstractDenseNdArray + implements FloatNdArray { + + public static FloatNdArray create(FloatDataBuffer buffer, Shape shape) { + Validator.denseShape(buffer, shape); + return new FloatDenseNdArray(buffer, shape); + } + + @Override + public float getFloat(long... indices) { + return buffer().getFloat(positionOf(indices, true)); + } + + @Override + public FloatNdArray setFloat(float value, long... indices) { + buffer().setFloat(value, positionOf(indices, true)); + return this; + } + + @Override + public FloatNdArray read(float[] dst, int offset) { + Validator.getArrayArgs(this, dst.length, offset); + return read(DataBuffers.wrap(dst, false).offset(offset)); + } + + @Override + public FloatNdArray write(float[] src, int offset) { + Validator.putArrayArgs(this, src.length, offset); + return write(DataBuffers.wrap(src, true).offset(offset)); + } + + @Override + public FloatNdArray copyTo(NdArray dst) { + Validator.copyToNdArrayArgs(this, dst); + if (dst instanceof FloatDenseNdArray) { + FloatDenseNdArray floatDst = (FloatDenseNdArray)dst; + DataTransfer.execute(buffer, dimensions(), floatDst.buffer, floatDst.dimensions(), DataTransfer::ofFloat); + } else { + slowCopyTo(dst); + } + return this; + } + + @Override + public FloatNdArray read(FloatDataBuffer dst) { + Validator.readToBufferArgs(this, dst); + DataTransfer.execute(buffer, dimensions(), dst, DataTransfer::ofFloat); + return this; + } + + @Override + public FloatNdArray write(FloatDataBuffer src) { + Validator.writeFromBufferArgs(this, src); + DataTransfer.execute(src, buffer, dimensions(), DataTransfer::ofFloat); + return this; + } + + protected FloatDenseNdArray(FloatDataBuffer buffer, Shape shape) { + this(buffer, DimensionalSpace.create(shape)); + } + + @Override + FloatDenseNdArray instantiate(DataBuffer buffer, DimensionalSpace dimensions) { + return new FloatDenseNdArray((FloatDataBuffer) buffer, dimensions); + } + + @Override + public FloatDataBuffer buffer() { + return buffer; + } + + private final FloatDataBuffer buffer; + + private FloatDenseNdArray(FloatDataBuffer buffer, DimensionalSpace dimensions) { + super(dimensions); + this.buffer = buffer; + } +} diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dense/IntDenseNdArray.java b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dense/IntDenseNdArray.java new file mode 100644 index 00000000000..921f1e512f5 --- /dev/null +++ b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dense/IntDenseNdArray.java @@ -0,0 +1,104 @@ +/* + Copyright 2019 The TensorFlow Authors. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ======================================================================= + */ +package org.tensorflow.nio.nd.impl.dense; + +import org.tensorflow.nio.buffer.DataBuffer; +import org.tensorflow.nio.buffer.DataBuffers; +import org.tensorflow.nio.buffer.IntDataBuffer; +import org.tensorflow.nio.nd.IntNdArray; +import org.tensorflow.nio.nd.NdArray; +import org.tensorflow.nio.nd.Shape; +import org.tensorflow.nio.nd.impl.dimension.DimensionalSpace; + +public class IntDenseNdArray extends AbstractDenseNdArray + implements IntNdArray { + + public static IntNdArray create(IntDataBuffer buffer, Shape shape) { + Validator.denseShape(buffer, shape); + return new IntDenseNdArray(buffer, shape); + } + + @Override + public int getInt(long... indices) { + return buffer().getInt(positionOf(indices, true)); + } + + @Override + public IntNdArray setInt(int value, long... indices) { + buffer().setInt(value, positionOf(indices, true)); + return this; + } + + @Override + public IntNdArray read(int[] dst, int offset) { + Validator.getArrayArgs(this, dst.length, offset); + return read(DataBuffers.wrap(dst, false).offset(offset)); + } + + @Override + public IntNdArray write(int[] src, int offset) { + Validator.putArrayArgs(this, src.length, offset); + return write(DataBuffers.wrap(src, true).offset(offset)); + } + + @Override + public IntNdArray copyTo(NdArray dst) { + Validator.copyToNdArrayArgs(this, dst); + if (dst instanceof IntDenseNdArray) { + IntDenseNdArray intDst = (IntDenseNdArray)dst; + DataTransfer.execute(buffer, dimensions(), intDst.buffer, intDst.dimensions(), DataTransfer::ofInt); + } else { + slowCopyTo(dst); + } + return this; + } + + @Override + public IntNdArray read(IntDataBuffer dst) { + Validator.readToBufferArgs(this, dst); + DataTransfer.execute(buffer, dimensions(), dst, DataTransfer::ofInt); + return this; + } + + @Override + public IntNdArray write(IntDataBuffer src) { + Validator.writeFromBufferArgs(this, src); + DataTransfer.execute(src, buffer, dimensions(), DataTransfer::ofInt); + return this; + } + + protected IntDenseNdArray(IntDataBuffer buffer, Shape shape) { + this(buffer, DimensionalSpace.create(shape)); + } + + @Override + IntDenseNdArray instantiate(DataBuffer buffer, DimensionalSpace dimensions) { + return new IntDenseNdArray((IntDataBuffer)buffer, dimensions); + } + + @Override + protected IntDataBuffer buffer() { + return buffer; + } + + private final IntDataBuffer buffer; + + private IntDenseNdArray(IntDataBuffer buffer, DimensionalSpace dimensions) { + super(dimensions); + this.buffer = buffer; + } +} \ No newline at end of file diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dense/LongDenseNdArray.java b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dense/LongDenseNdArray.java new file mode 100644 index 00000000000..c214efd120f --- /dev/null +++ b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dense/LongDenseNdArray.java @@ -0,0 +1,104 @@ +/* + Copyright 2019 The TensorFlow Authors. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ======================================================================= + */ +package org.tensorflow.nio.nd.impl.dense; + +import org.tensorflow.nio.buffer.DataBuffer; +import org.tensorflow.nio.buffer.DataBuffers; +import org.tensorflow.nio.buffer.LongDataBuffer; +import org.tensorflow.nio.nd.LongNdArray; +import org.tensorflow.nio.nd.NdArray; +import org.tensorflow.nio.nd.Shape; +import org.tensorflow.nio.nd.impl.dimension.DimensionalSpace; + +public class LongDenseNdArray extends AbstractDenseNdArray + implements LongNdArray { + + public static LongNdArray create(LongDataBuffer buffer, Shape shape) { + Validator.denseShape(buffer, shape); + return new LongDenseNdArray(buffer, shape); + } + + @Override + public long getLong(long... indices) { + return buffer().getLong(positionOf(indices, true)); + } + + @Override + public LongNdArray setLong(long value, long... indices) { + buffer().setLong(value, positionOf(indices, true)); + return this; + } + + @Override + public LongNdArray read(long[] dst, int offset) { + Validator.getArrayArgs(this, dst.length, offset); + return read(DataBuffers.wrap(dst, false).offset(offset)); + } + + @Override + public LongNdArray write(long[] src, int offset) { + Validator.putArrayArgs(this, src.length, offset); + return write(DataBuffers.wrap(src, true).offset(offset)); + } + + @Override + public LongNdArray copyTo(NdArray dst) { + Validator.copyToNdArrayArgs(this, dst); + if (dst instanceof LongDenseNdArray) { + LongDenseNdArray longDst = (LongDenseNdArray)dst; + DataTransfer.execute(buffer, dimensions(), longDst.buffer, longDst.dimensions(), DataTransfer::ofLong); + } else { + slowCopyTo(dst); + } + return this; + } + + @Override + public LongNdArray read(LongDataBuffer dst) { + Validator.readToBufferArgs(this, dst); + DataTransfer.execute(buffer, dimensions(), dst, DataTransfer::ofLong); + return this; + } + + @Override + public LongNdArray write(LongDataBuffer src) { + Validator.writeFromBufferArgs(this, src); + DataTransfer.execute(src, buffer, dimensions(), DataTransfer::ofLong); + return this; + } + + protected LongDenseNdArray(LongDataBuffer buffer, Shape shape) { + this(buffer, DimensionalSpace.create(shape)); + } + + @Override + LongDenseNdArray instantiate(DataBuffer buffer, DimensionalSpace dimensions) { + return new LongDenseNdArray((LongDataBuffer)buffer, dimensions); + } + + @Override + protected LongDataBuffer buffer() { + return buffer; + } + + private final LongDataBuffer buffer; + + private LongDenseNdArray(LongDataBuffer buffer, DimensionalSpace dimensions) { + super(dimensions); + this.buffer = buffer; + } +} \ No newline at end of file diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dense/ShortDenseNdArray.java b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dense/ShortDenseNdArray.java new file mode 100644 index 00000000000..3725002a3cc --- /dev/null +++ b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dense/ShortDenseNdArray.java @@ -0,0 +1,104 @@ +/* + Copyright 2019 The TensorFlow Authors. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ======================================================================= + */ +package org.tensorflow.nio.nd.impl.dense; + +import org.tensorflow.nio.buffer.DataBuffer; +import org.tensorflow.nio.buffer.DataBuffers; +import org.tensorflow.nio.buffer.ShortDataBuffer; +import org.tensorflow.nio.nd.NdArray; +import org.tensorflow.nio.nd.Shape; +import org.tensorflow.nio.nd.ShortNdArray; +import org.tensorflow.nio.nd.impl.dimension.DimensionalSpace; + +public class ShortDenseNdArray extends AbstractDenseNdArray + implements ShortNdArray { + + public static ShortNdArray create(ShortDataBuffer buffer, Shape shape) { + Validator.denseShape(buffer, shape); + return new ShortDenseNdArray(buffer, shape); + } + + @Override + public short getShort(long... indices) { + return buffer().getShort(positionOf(indices, true)); + } + + @Override + public ShortNdArray setShort(short value, long... indices) { + buffer().setShort(value, positionOf(indices, true)); + return this; + } + + @Override + public ShortNdArray read(short[] dst, int offset) { + Validator.getArrayArgs(this, dst.length, offset); + return read(DataBuffers.wrap(dst, false).offset(offset)); + } + + @Override + public ShortNdArray write(short[] src, int offset) { + Validator.putArrayArgs(this, src.length, offset); + return write(DataBuffers.wrap(src, true).offset(offset)); + } + + @Override + public ShortNdArray copyTo(NdArray dst) { + Validator.copyToNdArrayArgs(this, dst); + if (dst instanceof ShortDenseNdArray) { + ShortDenseNdArray shortDst = (ShortDenseNdArray)dst; + DataTransfer.execute(buffer, dimensions(), shortDst.buffer, shortDst.dimensions(), DataTransfer::ofShort); + } else { + slowCopyTo(dst); + } + return this; + } + + @Override + public ShortNdArray read(ShortDataBuffer dst) { + Validator.readToBufferArgs(this, dst); + DataTransfer.execute(buffer, dimensions(), dst, DataTransfer::ofShort); + return this; + } + + @Override + public ShortNdArray write(ShortDataBuffer src) { + Validator.writeFromBufferArgs(this, src); + DataTransfer.execute(src, buffer, dimensions(), DataTransfer::ofShort); + return this; + } + + protected ShortDenseNdArray(ShortDataBuffer buffer, Shape shape) { + this(buffer, DimensionalSpace.create(shape)); + } + + @Override + ShortDenseNdArray instantiate(DataBuffer buffer, DimensionalSpace dimensions) { + return new ShortDenseNdArray((ShortDataBuffer)buffer, dimensions); + } + + @Override + protected ShortDataBuffer buffer() { + return buffer; + } + + private final ShortDataBuffer buffer; + + private ShortDenseNdArray(ShortDataBuffer buffer, DimensionalSpace dimensions) { + super(dimensions); + this.buffer = buffer; + } +} \ No newline at end of file diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dense/Validator.java b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dense/Validator.java new file mode 100644 index 00000000000..8fb3a1b6310 --- /dev/null +++ b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dense/Validator.java @@ -0,0 +1,37 @@ +/* + Copyright 2019 The TensorFlow Authors. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ======================================================================= + */ +package org.tensorflow.nio.nd.impl.dense; + +import org.tensorflow.nio.buffer.DataBuffer; +import org.tensorflow.nio.nd.Shape; + +final class Validator extends org.tensorflow.nio.nd.impl.Validator { + + static void denseShape(DataBuffer buffer, Shape shape) { + if (shape == null) { + throw new IllegalArgumentException("Shape cannot be null"); + } + if (shape.hasUnknownDimension()) { + throw new IllegalArgumentException("Dense arrays cannot have unknown dimension(s)"); + } + if (buffer.size() < shape.size()) { + throw new IllegalArgumentException("Buffer size is smaller than the shape size"); + }; + } + + private Validator() {} +} diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dimension/AbstractDimension.java b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dimension/AbstractDimension.java new file mode 100644 index 00000000000..c03f865308a --- /dev/null +++ b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dimension/AbstractDimension.java @@ -0,0 +1,43 @@ +/* + Copyright 2019 The TensorFlow Authors. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ======================================================================= + */ +package org.tensorflow.nio.nd.impl.dimension; + +abstract class AbstractDimension implements Dimension { + + /** + * Dimensions are known to be equal if they have the same number of elements + */ + @Override + public int hashCode() { + return (int) numElements(); + } + + /** + * Dimensions are known to be equal if they have the same number of elements + */ + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj instanceof Dimension) { + Dimension otherDimension = (Dimension) obj; + return numElements() == otherDimension.numElements(); + } + return false; + } +} diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dimension/Axis.java b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dimension/Axis.java new file mode 100644 index 00000000000..63f284e2578 --- /dev/null +++ b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dimension/Axis.java @@ -0,0 +1,56 @@ +/* + Copyright 2019 The TensorFlow Authors. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ======================================================================= + */ +package org.tensorflow.nio.nd.impl.dimension; + +final class Axis extends AbstractDimension { + + @Override + public long numElements() { + return numElements; + } + + @Override + public long positionOf(long coord) { + if (coord >= numElements) { + throw new IndexOutOfBoundsException(); + } + return elementSize * coord; + } + + @Override + public boolean isSegmented() { + return false; // all axis are continuous + } + + @Override + public long elementSize() { + return elementSize; + } + + @Override + public String toString() { + return String.valueOf(numElements); + } + + Axis(long numElements, long elementSize) { + this.numElements = numElements; + this.elementSize = elementSize; + } + + private final long numElements; + private final long elementSize; +} diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dimension/Dimension.java b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dimension/Dimension.java new file mode 100644 index 00000000000..6d9215069e8 --- /dev/null +++ b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dimension/Dimension.java @@ -0,0 +1,38 @@ +/* + Copyright 2019 The TensorFlow Authors. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ======================================================================= + */ +package org.tensorflow.nio.nd.impl.dimension; + +import org.tensorflow.nio.nd.index.Index; + +public interface Dimension { + + default Dimension withIndex(Index index) { + return new IndexedDimension(index, this); + } + + long numElements(); + + long elementSize(); + + default long totalSize() { + return numElements() * elementSize(); + } + + long positionOf(long coord); + + boolean isSegmented(); +} diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dimension/DimensionalSpace.java b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dimension/DimensionalSpace.java new file mode 100644 index 00000000000..8d4b5934e0f --- /dev/null +++ b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dimension/DimensionalSpace.java @@ -0,0 +1,169 @@ +/* + Copyright 2019 The TensorFlow Authors. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ======================================================================= + */ + +package org.tensorflow.nio.nd.impl.dimension; + +import java.util.Arrays; +import org.tensorflow.nio.nd.Shape; +import org.tensorflow.nio.nd.index.Index; + +public class DimensionalSpace { + + public static DimensionalSpace create(Shape shape) { + Dimension[] dimensions = new Dimension[shape.numDimensions()]; + + // Start from the last dimension, where all elements are continuous + for (int i = dimensions.length - 1, elementSize = 1; i >= 0; --i) { + dimensions[i] = new Axis(shape.size(i), elementSize); + elementSize *= dimensions[i].numElements(); + } + return new DimensionalSpace(dimensions, shape); + } + + public RelativeDimensionalSpace mapTo(Index[] indices) { + if (dimensions == null || indices.length > dimensions.length) { + throw new ArrayIndexOutOfBoundsException(); + } + int dimIdx = 0; + int newDimIdx = 0; + int segmentationIdx = -1; + long initialOffset = 0; + + Dimension[] newDimensions = new Dimension[dimensions.length]; + while (dimIdx < indices.length) { + + if (indices[dimIdx].isPoint()) { + // When an index targets a single point in a given dimension, calculate the offset of this + // point and cumulate the offset of any subsequent point as well + long offset = 0; + do { + offset += indices[dimIdx].mapCoordinate(0, dimensions[dimIdx]); + } while (++dimIdx < indices.length && indices[dimIdx].isPoint()); + + // If this is the first index, then the offset is the position of the whole dimension + // space within the original one. If not, then we apply the offset to the last vectorial + // dimension + if (newDimIdx == 0) { + initialOffset = offset; + } else { + long reducedSize = dimensions[dimIdx - 1].elementSize(); + newDimensions[newDimIdx - 1] = new ReducedDimension(newDimensions[newDimIdx - 1], offset, reducedSize); + segmentationIdx = newDimIdx - 1; + } + + } else { + // Map any other index to the appropriate dimension of this space + Dimension newDimension = indices[dimIdx].apply(dimensions[dimIdx++]); + newDimensions[newDimIdx] = newDimension; + if (newDimension.isSegmented()) { + segmentationIdx = newDimIdx; + } + ++newDimIdx; + } + } + + // When the number of indices provided is smaller than the number of dimensions in this space, + // we copy the remaining dimensions directly to the new space as well. + for (; dimIdx < dimensions.length; ++dimIdx, ++newDimIdx) { + Dimension dim = dimensions[dimIdx]; + newDimensions[newDimIdx] = dim; + if (dim.isSegmented()) { + segmentationIdx = newDimIdx; + } + } + return new RelativeDimensionalSpace(Arrays.copyOf(newDimensions, newDimIdx), segmentationIdx, initialOffset); + } + + public DimensionalSpace from(int dimensionStart) { + if (dimensionStart > dimensions.length) { + throw new IndexOutOfBoundsException(); + } + Dimension[] newDimensions = Arrays.copyOfRange(dimensions, dimensionStart, dimensions.length); + if (segmentationIdx > dimensionStart) { + return new DimensionalSpace(newDimensions, segmentationIdx - dimensionStart); + } + return new DimensionalSpace(newDimensions); + } + + public Shape shape() { + if (shape == null) { + shape = shape(dimensions); + } + return shape; + } + + public int numDimensions() { + return dimensions.length; + } + + public long numElements(int i) { + return dimensions[i].numElements(); + } + + public Dimension get(int i) { + return dimensions[i]; + } + + public boolean isSegmented() { + return segmentationIdx >= 0; + } + + public int segmentationIdx() { + return segmentationIdx; + } + + public long positionOf(long[] coords) { + long position = 0L; + for (int i = 0; i < coords.length; ++i) { + position += dimensions[i].positionOf(coords[i]); + } + return position; + } + + /** Succinct description of the shape meant for debugging. */ + @Override + public String toString() { + return Arrays.toString(dimensions); + } + + DimensionalSpace(Dimension[] dimensions, int segmentationIdx) { + this.dimensions = dimensions; + this.segmentationIdx = segmentationIdx; + } + + private DimensionalSpace(Dimension[] dimensions) { + this(dimensions, -1); + } + + private DimensionalSpace(Dimension[] dimensions, Shape shape) { + this(dimensions); + this.shape = shape; + } + + private final Dimension[] dimensions; + private final int segmentationIdx; + private Shape shape; + + private static Shape shape(Dimension[] dimensions) { + long[] shapeDimSizes = new long[dimensions.length]; + int i = 0; + for (Dimension dimension : dimensions) { + shapeDimSizes[i++] = dimension.numElements(); + } + return Shape.make(shapeDimSizes); + } +} diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dimension/IndexedDimension.java b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dimension/IndexedDimension.java new file mode 100644 index 00000000000..8f3124fbe52 --- /dev/null +++ b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dimension/IndexedDimension.java @@ -0,0 +1,61 @@ +/* + Copyright 2019 The TensorFlow Authors. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ======================================================================= + */ +package org.tensorflow.nio.nd.impl.dimension; + +import org.tensorflow.nio.nd.index.Index; + +final class IndexedDimension extends AbstractDimension { + + @Override + public long numElements() { + return numElements; + } + + @Override + public long positionOf(long coord) { + if (coord >= numElements()) { + throw new IndexOutOfBoundsException(); + } + return originalDimension.positionOf(index.mapCoordinate(coord, originalDimension)); + } + + @Override + public boolean isSegmented() { + // TODO for now we consider all indexed dimensions as segmented but might depend on the actual index + return true; + } + + @Override + public long elementSize() { + return originalDimension.elementSize(); // indices do not change the size of a inner element + } + + @Override + public String toString() { + return String.valueOf(numElements()); + } + + IndexedDimension(Index index, Dimension originalDimension) { + this.index = index; + this.originalDimension = originalDimension; + this.numElements = index.numElements(originalDimension); + } + + private final Index index; + private final Dimension originalDimension; + private final long numElements; +} diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dimension/ReducedDimension.java b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dimension/ReducedDimension.java new file mode 100644 index 00000000000..90741b94a15 --- /dev/null +++ b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dimension/ReducedDimension.java @@ -0,0 +1,55 @@ +/* + Copyright 2019 The TensorFlow Authors. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ======================================================================= + */ +package org.tensorflow.nio.nd.impl.dimension; + +final class ReducedDimension extends AbstractDimension { + + @Override + public long numElements() { + return originalDimension.numElements(); + } + + @Override + public long positionOf(long coord) { + return originalDimension.positionOf(coord) + offset; + } + + @Override + public boolean isSegmented() { + return true; + } + + @Override + public long elementSize() { + return elementSize; + } + + @Override + public String toString() { + return String.valueOf(numElements()); + } + + ReducedDimension(Dimension originalDimension, long offset, long elementSize) { + this.originalDimension = originalDimension; + this.offset = offset; + this.elementSize = elementSize; + } + + private final Dimension originalDimension; + private final long offset; + private final long elementSize; +} diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dimension/RelativeDimensionalSpace.java b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dimension/RelativeDimensionalSpace.java new file mode 100644 index 00000000000..f92c9f5f96f --- /dev/null +++ b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dimension/RelativeDimensionalSpace.java @@ -0,0 +1,32 @@ +/* + Copyright 2019 The TensorFlow Authors. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ======================================================================= + */ + +package org.tensorflow.nio.nd.impl.dimension; + +public class RelativeDimensionalSpace extends DimensionalSpace { + + public long position() { + return position; + } + + RelativeDimensionalSpace(Dimension[] dimensions, int segmentationIdx, long position) { + super(dimensions, segmentationIdx); + this.position = position; + } + + private long position; +} diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dimension/UnknownDimension.java b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dimension/UnknownDimension.java new file mode 100644 index 00000000000..3eaf689cee6 --- /dev/null +++ b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dimension/UnknownDimension.java @@ -0,0 +1,56 @@ +/* + Copyright 2019 The TensorFlow Authors. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ======================================================================= + */ +package org.tensorflow.nio.nd.impl.dimension; + +import org.tensorflow.nio.nd.Shape; + +final class UnknownDimension extends AbstractDimension { + + @Override + public long numElements() { + return Shape.UNKNOWN_SIZE; + } + + @Override + public long positionOf(long coord) { + return coord; + } + + @Override + public boolean isSegmented() { + return false; + } + + @Override + public long elementSize() { + return 0L; + } + + @Override + public String toString() { + return "Unknown"; + } + + @Override public int hashCode() { + return System.identityHashCode(this); // All unknown dimensions are distinct + } + + @Override + public boolean equals(Object obj) { + return false; // All unknown dimensions are distinct + } +} diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/sequence/ElementSequence.java b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/sequence/ElementSequence.java new file mode 100644 index 00000000000..95125bf38c1 --- /dev/null +++ b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/sequence/ElementSequence.java @@ -0,0 +1,42 @@ +package org.tensorflow.nio.nd.impl.sequence; + +import java.util.function.BiConsumer; +import java.util.function.Consumer; +import org.tensorflow.nio.nd.NdArray; +import org.tensorflow.nio.nd.NdArraySequence; +import org.tensorflow.nio.nd.impl.AbstractNdArray; +import org.tensorflow.nio.nd.impl.dimension.DimensionalSpace; + +public class ElementSequence> implements NdArraySequence { + + public static > NdArraySequence create(AbstractNdArray ndArray, int dimensionIdx) { + if (ndArray.rank() == 0 && dimensionIdx < 0) { + return new SingleElementSequence<>(ndArray); + } + return new ElementSequence<>(ndArray, dimensionIdx); + } + + @Override + public void forEach(Consumer consumer) { + DimensionalSpace elementDimensions = ndArray.dimensions().from(dimensionIdx + 1); + PositionIterator.create(ndArray.dimensions(), dimensionIdx).forEachRemaining((long position) -> + consumer.accept(ndArray.slice(position, elementDimensions)) + ); + } + + @Override + public void forEachIndexed(BiConsumer consumer) { + DimensionalSpace elementDimensions = ndArray.dimensions().from(dimensionIdx + 1); + PositionIterator.createIndexed(ndArray.dimensions(), dimensionIdx).forEachIndexed((long[] coords, long position) -> + consumer.accept(coords, ndArray.slice(position, elementDimensions)) + ); + } + + private ElementSequence(AbstractNdArray ndArray, int dimensionIdx) { + this.ndArray = ndArray; + this.dimensionIdx = dimensionIdx; + } + + private final AbstractNdArray ndArray; + private final int dimensionIdx; +} diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/sequence/IndexedPositionIterator.java b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/sequence/IndexedPositionIterator.java new file mode 100644 index 00000000000..82a00ff392d --- /dev/null +++ b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/sequence/IndexedPositionIterator.java @@ -0,0 +1,11 @@ +package org.tensorflow.nio.nd.impl.sequence; + +public interface IndexedPositionIterator extends PositionIterator { + + @FunctionalInterface + interface CoordsLongConsumer { + void consume(long[] coords, long position); + } + + void forEachIndexed(CoordsLongConsumer consumer); +} diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/sequence/IndexedSequentialPositionIterator.java b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/sequence/IndexedSequentialPositionIterator.java new file mode 100644 index 00000000000..0a123b4230d --- /dev/null +++ b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/sequence/IndexedSequentialPositionIterator.java @@ -0,0 +1,23 @@ +package org.tensorflow.nio.nd.impl.sequence; + +import org.tensorflow.nio.nd.impl.dimension.DimensionalSpace; + +class IndexedSequentialPositionIterator extends SequentialPositionIterator implements IndexedPositionIterator { + + @Override + public void forEachIndexed(CoordsLongConsumer consumer) { + while (hasNext()) { + consumer.consume(coords, nextLong()); + NdPositionIterator.increment(coords, dimensions); + } + } + + IndexedSequentialPositionIterator(DimensionalSpace dimensions, int dimensionIdx) { + super(dimensions, dimensionIdx); + this.dimensions = dimensions; + this.coords = new long[dimensionIdx + 1]; + } + + private final DimensionalSpace dimensions; + private final long[] coords; +} diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/sequence/NdPositionIterator.java b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/sequence/NdPositionIterator.java new file mode 100644 index 00000000000..3e030c65a45 --- /dev/null +++ b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/sequence/NdPositionIterator.java @@ -0,0 +1,49 @@ +package org.tensorflow.nio.nd.impl.sequence; + +import org.tensorflow.nio.nd.impl.dimension.DimensionalSpace; + +class NdPositionIterator implements IndexedPositionIterator { + + @Override + public boolean hasNext() { + return coords != null; + } + + @Override + public long nextLong() { + long position = dimensions.positionOf(coords); + increment(); + return position; + } + + @Override + public void forEachIndexed(CoordsLongConsumer consumer) { + while (hasNext()) { + consumer.consume(coords, dimensions.positionOf(coords)); + increment(); + } + } + + private void increment() { + if (!increment(coords, dimensions)) { + coords = null; + } + } + + static boolean increment(long[] coords, DimensionalSpace dimensions) { + for (int i = coords.length - 1; i >= 0; --i) { + if ((coords[i] = (coords[i] + 1) % dimensions.get(i).numElements()) > 0) { + return true; + } + } + return false; + } + + NdPositionIterator(DimensionalSpace dimensions, int dimensionIdx) { + this.dimensions = dimensions; + this.coords = new long[dimensionIdx + 1]; + } + + private final DimensionalSpace dimensions; + private long[] coords; +} diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/sequence/PositionIterator.java b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/sequence/PositionIterator.java new file mode 100644 index 00000000000..4547aef1ef6 --- /dev/null +++ b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/sequence/PositionIterator.java @@ -0,0 +1,25 @@ +package org.tensorflow.nio.nd.impl.sequence; + +import java.util.PrimitiveIterator; +import org.tensorflow.nio.nd.impl.dimension.DimensionalSpace; + +public interface PositionIterator extends PrimitiveIterator.OfLong { + + static PositionIterator create(DimensionalSpace dimensions, int dimensionIdx) { + if (dimensions.isSegmented()) { + return new NdPositionIterator(dimensions, dimensionIdx); + } + return new SequentialPositionIterator(dimensions, dimensionIdx); + } + + static IndexedPositionIterator createIndexed(DimensionalSpace dimensions, int dimensionIdx) { + if (dimensions.isSegmented()) { + return new NdPositionIterator(dimensions, dimensionIdx); + } + return new IndexedSequentialPositionIterator(dimensions, dimensionIdx); + } + + static PositionIterator sequence(long stride, long end) { + return new SequentialPositionIterator(stride, end); + } +} diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/sequence/SequentialPositionIterator.java b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/sequence/SequentialPositionIterator.java new file mode 100644 index 00000000000..f3c3d8362fa --- /dev/null +++ b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/sequence/SequentialPositionIterator.java @@ -0,0 +1,34 @@ +package org.tensorflow.nio.nd.impl.sequence; + +import org.tensorflow.nio.nd.impl.dimension.DimensionalSpace; + +class SequentialPositionIterator implements PositionIterator { + + @Override + public boolean hasNext() { + return index < end; + } + + @Override + public long nextLong() { + return stride * index++; + } + + SequentialPositionIterator(DimensionalSpace dimensions, int dimensionIdx) { + long size = 1; + for (int i = 0; i <= dimensionIdx; ++i) { + size *= dimensions.get(i).numElements(); + } + this.stride = dimensions.get(dimensionIdx).elementSize(); + this.end = size; + } + + SequentialPositionIterator(long stride, long end) { + this.stride = stride; + this.end = end; + } + + private final long stride; + private final long end; + private long index; +} diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/sequence/SingleElementSequence.java b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/sequence/SingleElementSequence.java new file mode 100644 index 00000000000..619fd5a1ca9 --- /dev/null +++ b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/sequence/SingleElementSequence.java @@ -0,0 +1,28 @@ +package org.tensorflow.nio.nd.impl.sequence; + +import java.util.function.BiConsumer; +import java.util.function.Consumer; +import org.tensorflow.nio.nd.IllegalRankException; +import org.tensorflow.nio.nd.NdArray; +import org.tensorflow.nio.nd.NdArraySequence; +import org.tensorflow.nio.nd.impl.AbstractNdArray; + +class SingleElementSequence> implements NdArraySequence { + + @Override + @SuppressWarnings("unchecked") + public void forEach(Consumer consumer) { + consumer.accept((U)ndArray); + } + + @Override + public void forEachIndexed(BiConsumer consumer) { + throw new IllegalRankException("Single element has no coordinates to iterate on, use forEach()"); + } + + SingleElementSequence(AbstractNdArray ndArray) { + this.ndArray = ndArray; + } + + private final AbstractNdArray ndArray; +} diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/index/All.java b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/index/All.java new file mode 100644 index 00000000000..2dfc8933c57 --- /dev/null +++ b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/index/All.java @@ -0,0 +1,42 @@ +/* + Copyright 2019 The TensorFlow Authors. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ======================================================================= + */ +package org.tensorflow.nio.nd.index; + +import org.tensorflow.nio.nd.impl.dimension.Dimension; + +class All implements Index { + + static final All INSTANCE = new All(); + + @Override + public long numElements(Dimension dim) { + return dim.numElements(); + } + + @Override + public long mapCoordinate(long coordinate, Dimension dim) { + return coordinate; + } + + @Override + public Dimension apply(Dimension dim) { + return dim; + } + + private All() { + } +} diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/index/At.java b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/index/At.java new file mode 100644 index 00000000000..f30d4ca52b7 --- /dev/null +++ b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/index/At.java @@ -0,0 +1,48 @@ +/* + Copyright 2019 The TensorFlow Authors. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ======================================================================= + */ +package org.tensorflow.nio.nd.index; + +import org.tensorflow.nio.nd.impl.dimension.Dimension; + +class At implements Index { + + @Override + public long numElements(Dimension dim) { + return 1; + } + + @Override + public long mapCoordinate(long coordinate, Dimension dim) { + return dim.positionOf(coord); // TODO validate coordinate is 0? + } + + @Override + public Dimension apply(Dimension dim) { + throw new IllegalStateException(); // FIXME? + } + + @Override + public boolean isPoint() { + return true; + } + + At(long coord) { + this.coord = coord; + } + + private long coord; +} diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/index/Even.java b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/index/Even.java new file mode 100644 index 00000000000..4564318d735 --- /dev/null +++ b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/index/Even.java @@ -0,0 +1,37 @@ +/* + Copyright 2019 The TensorFlow Authors. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ======================================================================= + */ +package org.tensorflow.nio.nd.index; + +import org.tensorflow.nio.nd.impl.dimension.Dimension; + +class Even implements Index { + + static final Even INSTANCE = new Even(); + + @Override + public long numElements(Dimension dim) { + return (dim.numElements() >> 1) + (dim.numElements() % 2); + } + + @Override + public long mapCoordinate(long coordinate, Dimension dim) { + return coordinate << 1; + } + + private Even() { + } +} diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/index/Flip.java b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/index/Flip.java new file mode 100644 index 00000000000..876eeddb32e --- /dev/null +++ b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/index/Flip.java @@ -0,0 +1,34 @@ +/* + Copyright 2019 The TensorFlow Authors. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ======================================================================= + */ +package org.tensorflow.nio.nd.index; + +import org.tensorflow.nio.nd.impl.dimension.Dimension; + +class Flip implements Index { + + static final Flip INSTANCE = new Flip(); + + @Override + public long numElements(Dimension dim) { + return dim.numElements(); + } + + @Override + public long mapCoordinate(long coordinate, Dimension dim) { + return dim.numElements() - coordinate - 1; + } +} diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/index/From.java b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/index/From.java new file mode 100644 index 00000000000..fb4038f5e77 --- /dev/null +++ b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/index/From.java @@ -0,0 +1,38 @@ +/* + Copyright 2019 The TensorFlow Authors. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ======================================================================= + */ +package org.tensorflow.nio.nd.index; + +import org.tensorflow.nio.nd.impl.dimension.Dimension; + +class From implements Index { + + @Override + public long numElements(Dimension dim) { + return dim.numElements() - start; + } + + @Override + public long mapCoordinate(long coordinate, Dimension dim) { + return start + coordinate; + } + + From(long start) { + this.start = start; + } + + private long start; +} diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/index/Index.java b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/index/Index.java new file mode 100644 index 00000000000..af56f4d3c69 --- /dev/null +++ b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/index/Index.java @@ -0,0 +1,76 @@ +/* + Copyright 2019 The TensorFlow Authors. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ======================================================================= + */ +package org.tensorflow.nio.nd.index; + +import org.tensorflow.nio.nd.impl.dimension.Dimension; + +/** + * An index used for slicing a view out of an N-dimensional array. + * + *

A slice, i.e. a reduced view, of an N-dimensional array is obtain by calling + * {@link org.tensorflow.nio.nd.NdArray#slice(Index...)}, given a list of indices + * that select which elements on a given dimension should be included/excluded + * from that view. + */ +public interface Index { + + /** + * Returns the number of elements that can be retrieved using this index on the + * given dimension. + * + *

An index that maps one-by-one all elements of the dimensions will return a value + * equal to {@code dim.numElements()}, while an index that only maps a subset of these + * will return a smaller value. + * + * @param dim the indexed dimension + * @return number of elements accessible + */ + long numElements(Dimension dim); + + /** + * Transforms an element coordinate to a new coordinate by applying this index to the + * given dimension. + * + *

For example, if the coordinate is 0 and this index flips the {@code n} elements on this + * dimension, then the returned value will be {@code n-1}. + * + * @param coordinate coordinate to transform + * @param dim dimension the indexed dimension + * @return transformed coordinate + */ + long mapCoordinate(long coordinate, Dimension dim); + + /** + * Applies this index to the given dimension. + * + *

When accessing the elements from the returned dimension, this index will automatically + * apply and may transform the original position. + * + * @param dim dimension to apply this index to + * @return an indexed dimension + */ + default Dimension apply(Dimension dim) { + return dim.withIndex(this); + } + + /** + * Returns true if this index is a single point, reducing the number of dimensions by one + */ + default boolean isPoint() { + return false; + } +} diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/index/Indices.java b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/index/Indices.java new file mode 100644 index 00000000000..c485d2b9db0 --- /dev/null +++ b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/index/Indices.java @@ -0,0 +1,204 @@ +/* + Copyright 2019 The TensorFlow Authors. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ======================================================================= + */ +package org.tensorflow.nio.nd.index; + +import org.tensorflow.nio.buffer.DataBuffers; +import org.tensorflow.nio.nd.IllegalRankException; +import org.tensorflow.nio.nd.NdArray; +import org.tensorflow.nio.nd.NdArrays; +import org.tensorflow.nio.nd.Shape; + +/** + * Helper class for instantiating {@link Index} objects. + */ +public final class Indices { + + /** + * A coordinate that selects a specific element on a given dimension. + * + *

When this index is applied to a given dimension, the dimension is resolved as a + * single element and therefore is excluded from the computation of the rank. + * + *

For example, given a 3D matrix on the axis [x, y, z], if + * {@code matrix.slice(all(), at(0), at(0)}, then the rank of the returned slice is 1 and its + * number of elements is {@code x.numElements()} + * + * @param coord coordinate of the element on the indexed axis + * @return index + */ + public static Index at(long coord) { + return new At(coord); + } + + /** + * A coordinate that selects a specific element on a given dimension. + * + *

This is equivalent to call {@link #at(long)} but where the value of the coordinate is + * provided by an N-dimensional array. + * + * @param coord scalar indicating the coordinate of the element on the indexed axis + * @return index + * @throws IllegalRankException if {@code coord} is not a scalar (rank 0) + */ + public static Index at(NdArray coord) { + if (coord.rank() > 0) { + throw new IllegalRankException("Only scalars are accepted as a value index"); + } + return new At(coord.getValue().longValue()); + } + + /** + * An index that returns all elements of a dimension in the original order. + * + *

Applying this index to a given dimension will return the original dimension + * directly. + * + *

For example, given a vector with {@code n} elements, {@code all()} returns + * x0, x1, ..., xn-1 + * + * @return index + */ + public static Index all() { + return All.INSTANCE; + } + + /** + * An index that returns only specific elements on a given dimension. + * + *

For example, given a vector with {@code n} elements on the {@code x} axis, and {@code n > 10}, + * {@code seq(8, 0, 3)} returns x8, x0, x3 + * + * @param coords coordinates of the elements in the sequence + * @return index + */ + public static Index seq(long... coords) { + if (coords == null) { + throw new IllegalArgumentException(); + } + return new Sequence(NdArrays.wrap(DataBuffers.wrap(coords, true), Shape.make(coords.length))); + } + + /** + * An index that returns only specific elements on a given dimension. + * + *

This is equivalent to {@link #seq(long...)} but where the coordinates of the elements in + * the sequence are provided by an N-dimensional array. + * + * @param coords vector of coordinates of the elements in the sequence + * @return index + * @throws IllegalRankException if {@code coords} is not a vector (rank 1) + */ + public static Index seq(NdArray coords) { + if (coords.rank() != 1) { + throw new IllegalRankException("Only vectors are accepted as an element index"); + } + return new Sequence(coords); + } + + /** + * An index that returns only elements found at an even position in the + * original dimension. + * + *

For example, given a vector with {@code n} elements on the {@code x} axis, and n is even, + * {@code even()} returns x0, x2, ..., xn-2 + * + * @return index + */ + public static Index even() { + return Even.INSTANCE; + } + + /** + * An index that returns only elements found at an odd position in the + * original dimension. + * + *

For example, given a vector with {@code n} elements on the {@code x} axis, and n is even, + * {@code odd()} returns x1, x3, ..., xn-1 + * + * @return index + */ + public static Index odd() { + return Odd.INSTANCE; + } + + /** + * An index that skips a fixed amount of coordinates between each values returned. + * + *

For example, given a vector with {@code n} elements on the {@code x} axis, + * {@code step(k)} returns x0, xk, xk*2, ... + * + * @param stepLength the number of elements between each steps + * @return index + */ + public static Index step(long stepLength) { + return new Step(stepLength); + } + + /** + * An index that returns only elements on a given dimension starting at a + * specific coordinate. + * + *

For example, given a vector with {@code n} elements on the {@code x} axis, and {@code n > k}, + * {@code from(k)} returns xk, xk+1, ..., xn-1 + * + * @param start coordinate of the first element of the sequence + * @return index + */ + public static Index from(long start) { + return new From(start); + } + + /** + * An index that returns only elements on a given dimension up to a + * specific coordinate. + * + *

For example, given a vector with {@code n} elements on the {@code x} axis, and {@code n > k}, + * {@code to(k)} returns x0, x1, ..., xk + * + * @param end coordinate of the last element of the sequence (exclusive) + * @return index + */ + public static Index to(long end) { + return new To(end); + } + + /** + * An index that returns only elements on a given dimension between two coordinates. + * + *

For example, given a vector with {@code n} elements on the {@code x} axis, and {@code n > k > j}, + * {@code range(j, k)} returns xj, xj+1, ..., xk + * + * @param start coordinate of the first element of the sequence + * @param end coordinate of the last element of the sequence (exclusive) + * @return index + */ + public static Index range(long start, long end) { + return new Range(start, end); + } + + /** + * An index that returns only elements on a given dimension between two coordinates. + * + *

For example, given a vector with {@code n} elements on the {@code x} axis, and {@code n > k > j}, + * {@code range(j, k)} returns xj, xj+1, ..., xk + * + * @return index + */ + public static Index flip() { + return Flip.INSTANCE; + } +} diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/index/Odd.java b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/index/Odd.java new file mode 100644 index 00000000000..929efad74d5 --- /dev/null +++ b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/index/Odd.java @@ -0,0 +1,37 @@ +/* + Copyright 2019 The TensorFlow Authors. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ======================================================================= + */ +package org.tensorflow.nio.nd.index; + +import org.tensorflow.nio.nd.impl.dimension.Dimension; + +class Odd implements Index { + + static final Odd INSTANCE = new Odd(); + + @Override + public long numElements(Dimension dim) { + return dim.numElements() >> 1; + } + + @Override + public long mapCoordinate(long coordinate, Dimension dim) { + return (coordinate << 1) + 1; + } + + private Odd() { + } +} diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/index/Range.java b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/index/Range.java new file mode 100644 index 00000000000..f356d4ebdd3 --- /dev/null +++ b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/index/Range.java @@ -0,0 +1,40 @@ +/* + Copyright 2019 The TensorFlow Authors. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ======================================================================= + */ +package org.tensorflow.nio.nd.index; + +import org.tensorflow.nio.nd.impl.dimension.Dimension; + +class Range implements Index { + + @Override + public long numElements(Dimension dim) { + return end - start; + } + + @Override + public long mapCoordinate(long coordinate, Dimension dim) { + return start + coordinate; + } + + Range(long start, long end) { + this.start = start; + this.end = end; + } + + private long start; + private long end; +} diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/index/Sequence.java b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/index/Sequence.java new file mode 100644 index 00000000000..fa24003b433 --- /dev/null +++ b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/index/Sequence.java @@ -0,0 +1,39 @@ +/* + Copyright 2019 The TensorFlow Authors. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ======================================================================= + */ +package org.tensorflow.nio.nd.index; + +import org.tensorflow.nio.nd.NdArray; +import org.tensorflow.nio.nd.impl.dimension.Dimension; + +class Sequence implements Index { + + @Override + public long numElements(Dimension dim) { + return coords.size(); + } + + @Override + public long mapCoordinate(long coordinate, Dimension dim) { + return coords.getValue(coordinate).longValue(); + } + + Sequence(NdArray coords) { + this.coords = coords; + } + + private NdArray coords; +} diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/index/Step.java b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/index/Step.java new file mode 100644 index 00000000000..3447cd6cf56 --- /dev/null +++ b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/index/Step.java @@ -0,0 +1,38 @@ +/* + Copyright 2019 The TensorFlow Authors. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ======================================================================= + */ +package org.tensorflow.nio.nd.index; + +import org.tensorflow.nio.nd.impl.dimension.Dimension; + +class Step implements Index { + + @Override + public long numElements(Dimension dim) { + return (dim.numElements() / stepLength) + 1; // FIXME always include element 0? + } + + @Override + public long mapCoordinate(long coordinate, Dimension dim) { + return coordinate * stepLength; + } + + Step(long stepLength) { + this.stepLength = stepLength; + } + + private final long stepLength; +} diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/index/To.java b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/index/To.java new file mode 100644 index 00000000000..783143a1c02 --- /dev/null +++ b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/index/To.java @@ -0,0 +1,38 @@ +/* + Copyright 2019 The TensorFlow Authors. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ======================================================================= + */ +package org.tensorflow.nio.nd.index; + +import org.tensorflow.nio.nd.impl.dimension.Dimension; + +class To implements Index { + + @Override + public long numElements(Dimension dim) { + return end; + } + + @Override + public long mapCoordinate(long coordinate, Dimension dim) { + return coordinate; + } + + To(long end) { + this.end = end; + } + + private long end; +} diff --git a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/benchmark/NdArrayBenchmark.java b/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/benchmark/NdArrayBenchmark.java new file mode 100644 index 00000000000..93fcb8ebb62 --- /dev/null +++ b/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/benchmark/NdArrayBenchmark.java @@ -0,0 +1,146 @@ +/* + Copyright 2019 The TensorFlow Authors. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ======================================================================= + */ +package org.tensorflow.nio.benchmark; + +import static org.tensorflow.nio.nd.index.Indices.all; +import static org.tensorflow.nio.nd.index.Indices.at; + +import java.awt.image.BufferedImage; +import java.awt.image.Raster; +import java.io.IOException; +import javax.imageio.ImageIO; +import org.openjdk.jmh.annotations.Benchmark; +import org.openjdk.jmh.annotations.BenchmarkMode; +import org.openjdk.jmh.annotations.Fork; +import org.openjdk.jmh.annotations.Measurement; +import org.openjdk.jmh.annotations.Mode; +import org.openjdk.jmh.annotations.Scope; +import org.openjdk.jmh.annotations.Setup; +import org.openjdk.jmh.annotations.State; +import org.openjdk.jmh.annotations.Warmup; +import org.openjdk.jmh.runner.RunnerException; +import org.tensorflow.nio.nd.FloatNdArray; +import org.tensorflow.nio.nd.NdArrays; +import org.tensorflow.nio.nd.Shape; + +@Fork(value = 1, jvmArgs = {"-Xms4G", "-Xmx4G"}) +@BenchmarkMode(Mode.AverageTime) +@Warmup(iterations = 0) //3) +@Measurement(iterations = 5) +@State(Scope.Benchmark) +public class NdArrayBenchmark { + + static final String TEST_IMAGE = "1500x916.jpg"; + static final int BATCH_SIZE = 100; + + private FloatNdArray pixels; + private FloatNdArray channels; + private FloatNdArray batches; + private FloatNdArray firstBatch; + + @Setup + public void setUp() throws IOException { + BufferedImage image = ImageIO.read(getClass().getClassLoader().getResourceAsStream(TEST_IMAGE)); + + int numPixels = image.getWidth() * image.getHeight(); + pixels = NdArrays.ofFloats(Shape.make(numPixels, 3)); + channels = NdArrays.ofFloats(Shape.make(3, numPixels)); + + Raster imageData = image.getData(); + float[] pixel = new float[3]; + for (int y = 0, pixelIdx = 0; y < image.getHeight(); ++y) { + for (int x = 0; x < image.getWidth(); ++x, ++pixelIdx) { + imageData.getPixel(x, y, pixel); + pixels.get(pixelIdx).write(pixel); + channels.slice(all(), at(pixelIdx)).write(pixel); + } + } + batches = NdArrays.ofFloats(Shape.make(BATCH_SIZE, 3, numPixels)); + firstBatch = batches.get(0); + } + + @Benchmark + @Measurement(batchSize = 1500 * 916) + public void getElementAtIndex() { + pixels.get(0); + } + + @Benchmark + @Measurement(batchSize = 1500 * 916) + public void slicing() { + batches.slice(at(0), all(), at(0)); + } + + @Benchmark + public void iteratingAllPixels() { + pixels.elements(0).forEach(pixel -> {}); + } + + @Benchmark + @Measurement(batchSize = BATCH_SIZE) + public void writeFirstBatchChannels() { + firstBatch.set(channels); + } + + @Benchmark + public void writeAllBatchChannels() { + batches.elements(0).forEach(batch -> + batch.set(channels) + ); + } + + @Benchmark + @Measurement(batchSize = 1500 * 916) + public void writeOnePixelBySlicing() { + batches.slice(at(0), all(), at(0)).set(pixels.get(0)); + } + + @Benchmark + public void writeAllPixelsBySlicing() { + batches.elements(0).forEach(batch -> + pixels.elements(0).forEachIndexed((coords, pixel) -> + batch.slice(all(), at(coords[0])).set(pixel) + ) + ); + } + + @Benchmark + @Measurement(batchSize = 1500 * 916) + public void writeOnePixelsByIndex() { + batches + .setFloat(pixels.getFloat(0, 0), 0, 0, 0) + .setFloat(pixels.getFloat(0, 1), 0, 1, 0) + .setFloat(pixels.getFloat(0, 2), 0, 2, 0); + } + + @Benchmark + public void writeAllPixelsByIndex() { + batches.elements(0).forEach(batch -> + pixels.elements(0).forEachIndexed((coords, pixel) -> { + long pixelIndex = coords[0]; + batch + .setFloat(pixel.getFloat(0), 0, pixelIndex) + .setFloat(pixel.getFloat(1), 1, pixelIndex) + .setFloat(pixel.getFloat(2), 2, pixelIndex); + }) + ); + } + + public static void main(String[] args) throws IOException, RunnerException { + org.openjdk.jmh.Main.main(args); + } +} diff --git a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/BooleanDataBufferTestBase.java b/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/BooleanDataBufferTestBase.java new file mode 100644 index 00000000000..50b78a37a8f --- /dev/null +++ b/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/BooleanDataBufferTestBase.java @@ -0,0 +1,65 @@ +/* + Copyright 2019 The TensorFlow Authors. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ======================================================================= + */ +package org.tensorflow.nio.buffer; + +import static junit.framework.TestCase.assertTrue; +import static org.junit.Assert.assertArrayEquals; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; + +import java.util.Arrays; +import org.junit.Test; + +public abstract class BooleanDataBufferTestBase extends DataBufferTestBase { + + @Override + protected abstract BooleanDataBuffer allocate(long size); + + @Override + protected Boolean valueOf(Long val) { + return val != 0; + } + + @Test + public void writeAndReadFromArray() { + BooleanDataBuffer buffer = allocate(10L); + boolean[] values = new boolean[]{true, false, false, true, false}; + + buffer.write(values); + assertTrue(buffer.get(0)); + assertFalse(buffer.get(1)); + + buffer.offset(5).write(values); + assertTrue(buffer.get(5)); + + boolean[] read = new boolean[5]; + buffer.read(read); + assertArrayEquals(values, read); + + buffer.write(values, 2, 3); + assertFalse(buffer.get(0)); + assertTrue(buffer.get(1)); + assertFalse(buffer.get(2)); + + Arrays.fill(read, false); + buffer.read(read, 1, 2); + assertFalse(read[0]); + assertFalse(read[1]); + assertTrue(read[2]); + assertFalse(read[3]); + } +} diff --git a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/ByteDataBufferTestBase.java b/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/ByteDataBufferTestBase.java new file mode 100644 index 00000000000..7dca25be32f --- /dev/null +++ b/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/ByteDataBufferTestBase.java @@ -0,0 +1,63 @@ +/* + Copyright 2019 The TensorFlow Authors. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ======================================================================= + */ +package org.tensorflow.nio.buffer; + +import static org.junit.Assert.assertArrayEquals; +import static org.junit.Assert.assertEquals; + +import java.util.Arrays; +import org.junit.Test; + +public abstract class ByteDataBufferTestBase extends DataBufferTestBase { + + @Override + protected abstract ByteDataBuffer allocate(long size); + + @Override + protected Byte valueOf(Long val) { + return val.byteValue(); + } + + @Test + public void writeAndReadFromArray() { + ByteDataBuffer buffer = allocate(10L); + byte[] oneToFive = new byte[]{ 1, 2, 3, 4, 5 }; + + buffer.write(oneToFive); + assertEquals(2, buffer.getByte(1)); + + buffer.offset(5).write(oneToFive); + assertEquals(2, buffer.getByte(1)); + assertEquals(2, buffer.getByte(6)); + + byte[] read = new byte[5]; + buffer.read(read); + assertArrayEquals(oneToFive, read); + + buffer.write(oneToFive, 2, 2); + assertEquals(3, buffer.getByte(0)); + assertEquals(4, buffer.getByte(1)); + assertEquals(3, buffer.getByte(2)); + + Arrays.fill(read, valueOf(0L)); + buffer.read(read, 1, 2); + assertEquals(0, read[0]); + assertEquals(3, read[1]); + assertEquals(4, read[2]); + assertEquals(0, read[3]); + } +} diff --git a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/DataBufferTestBase.java b/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/DataBufferTestBase.java new file mode 100644 index 00000000000..3f0f172302b --- /dev/null +++ b/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/DataBufferTestBase.java @@ -0,0 +1,170 @@ +/* + Copyright 2019 The TensorFlow Authors. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ======================================================================= + */ +package org.tensorflow.nio.buffer; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; + +import java.nio.BufferOverflowException; +import java.nio.BufferUnderflowException; +import org.junit.Test; + +abstract public class DataBufferTestBase { + + protected final boolean enableLargeBufferTests = System.getProperty("testLargeBuffers") != null; + + protected abstract long maxSize(); + + protected abstract DataBuffer allocate(long size); + + protected abstract T valueOf(Long val); + + @Test + public void bufferSize() { + DataBuffer buffer = allocate(10L); + assertEquals(10L, buffer.size()); + + buffer = allocate(0L); + assertEquals(0L, buffer.size()); + + try { + allocate(-1L); + fail(); + } catch (IllegalArgumentException e) { + // as expected + } + try { + allocate(maxSize() + 1); + fail(); + } catch (IllegalArgumentException e) { + // as expected + } + if (enableLargeBufferTests) { + buffer = allocate(maxSize()); + assertEquals(maxSize(), buffer.size()); + } + } + + @Test + public void offsetAndNarrow() { + DataBuffer buffer = allocate(10L); + buffer.set(valueOf(100L), 6); + assertEquals(10L, buffer.size()); + assertEquals(valueOf(100L), buffer.get(6)); + + DataBuffer subBuffer = buffer.offset(3L); + assertEquals(7L, subBuffer.size()); + assertEquals(valueOf(100L), subBuffer.get(3)); + + subBuffer = subBuffer.narrow(2L); + assertEquals(2L, subBuffer.size()); + try { + subBuffer.get(3); + fail(); + } catch (IndexOutOfBoundsException e) { + //as expected + } + try { + buffer.offset(-1L); + fail(); + } catch (IllegalArgumentException e) { + // as expected + } + try { + buffer.offset(11L); + fail(); + } catch (IllegalArgumentException e) { + // as expected + } + try { + buffer.narrow(-1L); + fail(); + } catch (IllegalArgumentException e) { + // as expected + } + try { + buffer.narrow(11L); + fail(); + } catch (IllegalArgumentException e) { + // as expected + } + } + + @Test + public void putAndGet() { + DataBuffer buffer = allocate(10L); + + buffer.set(valueOf(5L), 5L); + assertEquals(valueOf(5L), buffer.get(5L)); + try { + buffer.set(valueOf(10L), 10L); + fail(); + } catch (IndexOutOfBoundsException e) { + // as expected + } + try { + buffer.get(10L); + fail(); + } catch (IndexOutOfBoundsException e) { + // as expected + } + try { + buffer.set(valueOf(-1L), -1L); + fail(); + } catch (IndexOutOfBoundsException e) { + // as expected + } + try { + buffer.get(-1L); + fail(); + } catch (IndexOutOfBoundsException e) { + // as expected + } + } + + @Test + public void copyToBuffer() { + DataBuffer srcBuffer = allocate(25L); + srcBuffer.set(valueOf(5L), 5L); + srcBuffer.set(valueOf(10L), 10L); + srcBuffer.set(valueOf(15L), 15L); + srcBuffer.set(valueOf(20L), 20L); + try { + srcBuffer.copyTo(srcBuffer, srcBuffer.size()); + fail(); + } catch (IllegalArgumentException e) { + // as expected + } + DataBuffer dstBuffer = allocate(30L); + srcBuffer.copyTo(dstBuffer, srcBuffer.size()); + assertEquals(valueOf(5L), dstBuffer.get(5L)); + try { + srcBuffer.copyTo(dstBuffer, dstBuffer.size()); + fail(); + } catch (BufferUnderflowException e) { + // as expected + } + try { + dstBuffer.copyTo(srcBuffer, dstBuffer.size()); + fail(); + } catch (BufferOverflowException e) { + // as expected + } + } +} diff --git a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/DoubleDataBufferTestBase.java b/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/DoubleDataBufferTestBase.java new file mode 100644 index 00000000000..ee06f3ae7ff --- /dev/null +++ b/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/DoubleDataBufferTestBase.java @@ -0,0 +1,63 @@ +/* + Copyright 2019 The TensorFlow Authors. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ======================================================================= + */ +package org.tensorflow.nio.buffer; + +import static org.junit.Assert.assertArrayEquals; +import static org.junit.Assert.assertEquals; + +import java.util.Arrays; +import org.junit.Test; + +public abstract class DoubleDataBufferTestBase extends DataBufferTestBase { + + @Override + protected abstract DoubleDataBuffer allocate(long size); + + @Override + protected Double valueOf(Long val) { + return val.doubleValue(); + } + + @Test + public void writeAndReadFromArray() { + DoubleDataBuffer buffer = allocate(10L); + double[] oneToFive = new double[]{ 1.0, 2.0, 3.0, 4.0, 5.0 }; + + buffer.write(oneToFive); + assertEquals(2.0, buffer.getDouble(1), 0.0); + + buffer.offset(5).write(oneToFive); + assertEquals(2.0, buffer.getDouble(1), 0.0); + assertEquals(2.0, buffer.getDouble(6), 0.0); + + double[] read = new double[5]; + buffer.read(read); + assertArrayEquals(oneToFive, read, 0.0); + + buffer.write(oneToFive, 2, 2); + assertEquals(3.0, buffer.getDouble(0), 0.0); + assertEquals(4.0, buffer.getDouble(1), 0.0); + assertEquals(3.0, buffer.getDouble(2), 0.0); + + Arrays.fill(read, valueOf(0L)); + buffer.read(read, 1, 2); + assertEquals(0.0, read[0], 0.0); + assertEquals(3.0, read[1], 0.0); + assertEquals(4.0, read[2], 0.0); + assertEquals(0.0, read[3], 0.0); + } +} diff --git a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/FloatDataBufferTestBase.java b/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/FloatDataBufferTestBase.java new file mode 100644 index 00000000000..2ab1e761e69 --- /dev/null +++ b/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/FloatDataBufferTestBase.java @@ -0,0 +1,63 @@ +/* + Copyright 2019 The TensorFlow Authors. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ======================================================================= + */ +package org.tensorflow.nio.buffer; + +import static org.junit.Assert.assertArrayEquals; +import static org.junit.Assert.assertEquals; + +import java.util.Arrays; +import org.junit.Test; + +public abstract class FloatDataBufferTestBase extends DataBufferTestBase { + + @Override + protected abstract FloatDataBuffer allocate(long size); + + @Override + protected Float valueOf(Long val) { + return val.floatValue(); + } + + @Test + public void writeAndReadFromArray() { + FloatDataBuffer buffer = allocate(10L); + float[] oneToFive = new float[]{ 1.0f, 2.0f, 3.0f, 4.0f, 5.0f }; + + buffer.write(oneToFive); + assertEquals(2.0f, buffer.getFloat(1), 0.0f); + + buffer.offset(5).write(oneToFive); + assertEquals(2.0f, buffer.getFloat(1), 0.0f); + assertEquals(2.0f, buffer.getFloat(6), 0.0f); + + float[] read = new float[5]; + buffer.read(read); + assertArrayEquals(oneToFive, read, 0.0f); + + buffer.write(oneToFive, 2, 2); + assertEquals(3.0f, buffer.getFloat(0), 0.0f); + assertEquals(4.0f, buffer.getFloat(1), 0.0f); + assertEquals(3.0f, buffer.getFloat(2), 0.0f); + + Arrays.fill(read, valueOf(0L)); + buffer.read(read, 1, 2); + assertEquals(0.0f, read[0], 0.0f); + assertEquals(3.0f, read[1], 0.0f); + assertEquals(4.0f, read[2], 0.0f); + assertEquals(0.0f, read[3], 0.0f); + } +} diff --git a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/IntDataBufferTestBase.java b/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/IntDataBufferTestBase.java new file mode 100644 index 00000000000..8556612650e --- /dev/null +++ b/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/IntDataBufferTestBase.java @@ -0,0 +1,63 @@ +/* + Copyright 2019 The TensorFlow Authors. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ======================================================================= + */ +package org.tensorflow.nio.buffer; + +import static org.junit.Assert.assertArrayEquals; +import static org.junit.Assert.assertEquals; + +import java.util.Arrays; +import org.junit.Test; + +public abstract class IntDataBufferTestBase extends DataBufferTestBase { + + @Override + protected abstract IntDataBuffer allocate(long size); + + @Override + protected Integer valueOf(Long val) { + return val.intValue(); + } + + @Test + public void writeAndReadFromArray() { + IntDataBuffer buffer = allocate(10L); + int[] oneToFive = new int[]{ 1, 2, 3, 4, 5 }; + + buffer.write(oneToFive); + assertEquals(2, buffer.getInt(1)); + + buffer.offset(5).write(oneToFive); + assertEquals(2, buffer.getInt(1)); + assertEquals(2, buffer.getInt(6)); + + int[] read = new int[5]; + buffer.read(read); + assertArrayEquals(oneToFive, read); + + buffer.write(oneToFive, 2, 2); + assertEquals(3, buffer.getInt(0)); + assertEquals(4, buffer.getInt(1)); + assertEquals(3, buffer.getInt(2)); + + Arrays.fill(read, valueOf(0L)); + buffer.read(read, 1, 2); + assertEquals(0, read[0]); + assertEquals(3, read[1]); + assertEquals(4, read[2]); + assertEquals(0, read[3]); + } +} diff --git a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/LongDataBufferTestBase.java b/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/LongDataBufferTestBase.java new file mode 100644 index 00000000000..cb812cfc48b --- /dev/null +++ b/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/LongDataBufferTestBase.java @@ -0,0 +1,63 @@ +/* + Copyright 2019 The TensorFlow Authors. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ======================================================================= + */ +package org.tensorflow.nio.buffer; + +import static org.junit.Assert.assertArrayEquals; +import static org.junit.Assert.assertEquals; + +import java.util.Arrays; +import org.junit.Test; + +public abstract class LongDataBufferTestBase extends DataBufferTestBase { + + @Override + protected abstract LongDataBuffer allocate(long size); + + @Override + protected Long valueOf(Long val) { + return val; + } + + @Test + public void writeAndReadFromArray() { + LongDataBuffer buffer = allocate(10L); + long[] oneToFive = new long[]{ 1L, 2L, 3L, 4L, 5L }; + + buffer.write(oneToFive); + assertEquals(2, buffer.getLong(1)); + + buffer.offset(5).write(oneToFive); + assertEquals(2L, buffer.getLong(1)); + assertEquals(2L, buffer.getLong(6)); + + long[] read = new long[5]; + buffer.read(read); + assertArrayEquals(oneToFive, read); + + buffer.write(oneToFive, 2, 2); + assertEquals(3L, buffer.getLong(0)); + assertEquals(4L, buffer.getLong(1)); + assertEquals(3L, buffer.getLong(2)); + + Arrays.fill(read, valueOf(0L)); + buffer.read(read, 1, 2); + assertEquals(0L, read[0]); + assertEquals(3L, read[1]); + assertEquals(4L, read[2]); + assertEquals(0L, read[3]); + } +} diff --git a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/ShortDataBufferTestBase.java b/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/ShortDataBufferTestBase.java new file mode 100644 index 00000000000..a39f8f6a96b --- /dev/null +++ b/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/ShortDataBufferTestBase.java @@ -0,0 +1,63 @@ +/* + Copyright 2019 The TensorFlow Authors. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ======================================================================= + */ +package org.tensorflow.nio.buffer; + +import static org.junit.Assert.assertArrayEquals; +import static org.junit.Assert.assertEquals; + +import java.util.Arrays; +import org.junit.Test; + +public abstract class ShortDataBufferTestBase extends DataBufferTestBase { + + @Override + protected abstract ShortDataBuffer allocate(long size); + + @Override + protected Short valueOf(Long val) { + return val.shortValue(); + } + + @Test + public void writeAndReadFromArray() { + ShortDataBuffer buffer = allocate(10L); + short[] oneToFive = new short[]{ 1, 2, 3, 4, 5 }; + + buffer.write(oneToFive); + assertEquals(2, buffer.getShort(1)); + + buffer.offset(5).write(oneToFive); + assertEquals(2, buffer.getShort(1), 0); + assertEquals(2, buffer.getShort(6), 0); + + short[] read = new short[5]; + buffer.read(read); + assertArrayEquals(oneToFive, read); + + buffer.write(oneToFive, 2, 2); + assertEquals(3, buffer.getShort(0)); + assertEquals(4, buffer.getShort(1)); + assertEquals(3, buffer.getShort(2)); + + Arrays.fill(read, valueOf(0L)); + buffer.read(read, 1, 2); + assertEquals(0, read[0]); + assertEquals(3, read[1]); + assertEquals(4, read[2]); + assertEquals(0, read[3]); + } +} diff --git a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/jdk/ByteJdkDataBufferTest.java b/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/jdk/ByteJdkDataBufferTest.java new file mode 100644 index 00000000000..258b89c0b5e --- /dev/null +++ b/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/jdk/ByteJdkDataBufferTest.java @@ -0,0 +1,33 @@ +/* + Copyright 2019 The TensorFlow Authors. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ======================================================================= + */ +package org.tensorflow.nio.buffer.impl.jdk; + +import org.tensorflow.nio.buffer.ByteDataBuffer; +import org.tensorflow.nio.buffer.ByteDataBufferTestBase; + +public class ByteJdkDataBufferTest extends ByteDataBufferTestBase { + + @Override + protected long maxSize() { + return ByteJdkDataBuffer.MAX_SIZE; + } + + @Override + protected ByteDataBuffer allocate(long size) { + return ByteJdkDataBuffer.allocate(size); + } +} diff --git a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/jdk/DoubleJdkDataBufferTest.java b/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/jdk/DoubleJdkDataBufferTest.java new file mode 100644 index 00000000000..3db5f1475ed --- /dev/null +++ b/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/jdk/DoubleJdkDataBufferTest.java @@ -0,0 +1,33 @@ +/* + Copyright 2019 The TensorFlow Authors. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ======================================================================= + */ +package org.tensorflow.nio.buffer.impl.jdk; + +import org.tensorflow.nio.buffer.DoubleDataBuffer; +import org.tensorflow.nio.buffer.DoubleDataBufferTestBase; + +public class DoubleJdkDataBufferTest extends DoubleDataBufferTestBase { + + @Override + protected long maxSize() { + return DoubleJdkDataBuffer.MAX_SIZE; + } + + @Override + protected DoubleDataBuffer allocate(long size) { + return DoubleJdkDataBuffer.allocate(size); + } +} diff --git a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/jdk/FloatJdkDataBufferTest.java b/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/jdk/FloatJdkDataBufferTest.java new file mode 100644 index 00000000000..c8d442626fe --- /dev/null +++ b/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/jdk/FloatJdkDataBufferTest.java @@ -0,0 +1,33 @@ +/* + Copyright 2019 The TensorFlow Authors. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ======================================================================= + */ +package org.tensorflow.nio.buffer.impl.jdk; + +import org.tensorflow.nio.buffer.FloatDataBuffer; +import org.tensorflow.nio.buffer.FloatDataBufferTestBase; + +public class FloatJdkDataBufferTest extends FloatDataBufferTestBase { + + @Override + protected long maxSize() { + return FloatJdkDataBuffer.MAX_SIZE; + } + + @Override + protected FloatDataBuffer allocate(long size) { + return FloatJdkDataBuffer.allocate(size); + } +} diff --git a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/jdk/IntJdkDataBufferTest.java b/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/jdk/IntJdkDataBufferTest.java new file mode 100644 index 00000000000..8f676091c59 --- /dev/null +++ b/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/jdk/IntJdkDataBufferTest.java @@ -0,0 +1,33 @@ +/* + Copyright 2019 The TensorFlow Authors. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ======================================================================= + */ +package org.tensorflow.nio.buffer.impl.jdk; + +import org.tensorflow.nio.buffer.IntDataBuffer; +import org.tensorflow.nio.buffer.IntDataBufferTestBase; + +public class IntJdkDataBufferTest extends IntDataBufferTestBase { + + @Override + protected long maxSize() { + return IntJdkDataBuffer.MAX_SIZE; + } + + @Override + protected IntDataBuffer allocate(long size) { + return IntJdkDataBuffer.allocate(size); + } +} diff --git a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/jdk/LongJdkDataBufferTest.java b/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/jdk/LongJdkDataBufferTest.java new file mode 100644 index 00000000000..cc2a3902eaf --- /dev/null +++ b/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/jdk/LongJdkDataBufferTest.java @@ -0,0 +1,33 @@ +/* + Copyright 2019 The TensorFlow Authors. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ======================================================================= + */ +package org.tensorflow.nio.buffer.impl.jdk; + +import org.tensorflow.nio.buffer.LongDataBuffer; +import org.tensorflow.nio.buffer.LongDataBufferTestBase; + +public class LongJdkDataBufferTest extends LongDataBufferTestBase { + + @Override + protected long maxSize() { + return LongJdkDataBuffer.MAX_SIZE; + } + + @Override + protected LongDataBuffer allocate(long size) { + return LongJdkDataBuffer.allocate(size); + } +} diff --git a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/jdk/ShortJdkDataBufferTest.java b/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/jdk/ShortJdkDataBufferTest.java new file mode 100644 index 00000000000..9a648abe8e4 --- /dev/null +++ b/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/jdk/ShortJdkDataBufferTest.java @@ -0,0 +1,33 @@ +/* + Copyright 2019 The TensorFlow Authors. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ======================================================================= + */ +package org.tensorflow.nio.buffer.impl.jdk; + +import org.tensorflow.nio.buffer.ShortDataBuffer; +import org.tensorflow.nio.buffer.ShortDataBufferTestBase; + +public class ShortJdkDataBufferTest extends ShortDataBufferTestBase { + + @Override + protected long maxSize() { + return ShortJdkDataBuffer.MAX_SIZE; + } + + @Override + protected ShortDataBuffer allocate(long size) { + return ShortJdkDataBuffer.allocate(size); + } +} diff --git a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/misc/ArrayDataBufferTest.java b/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/misc/ArrayDataBufferTest.java new file mode 100644 index 00000000000..a72b0b5f578 --- /dev/null +++ b/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/misc/ArrayDataBufferTest.java @@ -0,0 +1,39 @@ +/* + Copyright 2019 The TensorFlow Authors. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ======================================================================= + */ +package org.tensorflow.nio.buffer.impl.misc; + +import java.math.BigDecimal; +import org.tensorflow.nio.buffer.DataBuffer; +import org.tensorflow.nio.buffer.DataBufferTestBase; + +public class ArrayDataBufferTest extends DataBufferTestBase { + + @Override + protected long maxSize() { + return ArrayDataBuffer.MAX_CAPACITY; + } + + @Override + protected DataBuffer allocate(long size) { + return ArrayDataBuffer.allocate(BigDecimal.class, size); + } + + @Override + protected BigDecimal valueOf(Long val) { + return BigDecimal.valueOf(val); + } +} diff --git a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/misc/BitSetDataBufferTest.java b/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/misc/BitSetDataBufferTest.java new file mode 100644 index 00000000000..843f82d6fd3 --- /dev/null +++ b/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/misc/BitSetDataBufferTest.java @@ -0,0 +1,38 @@ +/* + Copyright 2019 The TensorFlow Authors. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ======================================================================= + */ +package org.tensorflow.nio.buffer.impl.misc; + +import org.tensorflow.nio.buffer.BooleanDataBuffer; +import org.tensorflow.nio.buffer.BooleanDataBufferTestBase; + +public class BitSetDataBufferTest extends BooleanDataBufferTestBase { + + @Override + protected long maxSize() { + return BitSetDataBuffer.MAX_CAPACITY; + } + + @Override + protected BooleanDataBuffer allocate(long size) { + return BitSetDataBuffer.allocate(size); + } + + @Override + protected Boolean valueOf(Long val) { + return val != 0; + } +} diff --git a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/misc/StringArrayDataBufferTest.java b/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/misc/StringArrayDataBufferTest.java new file mode 100644 index 00000000000..ae3f67324a7 --- /dev/null +++ b/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/misc/StringArrayDataBufferTest.java @@ -0,0 +1,38 @@ +/* + Copyright 2019 The TensorFlow Authors. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ======================================================================= + */ +package org.tensorflow.nio.buffer.impl.misc; + +import org.tensorflow.nio.buffer.DataBuffer; +import org.tensorflow.nio.buffer.DataBufferTestBase; + +public class StringArrayDataBufferTest extends DataBufferTestBase { + + @Override + protected long maxSize() { + return ArrayDataBuffer.MAX_CAPACITY; + } + + @Override + protected DataBuffer allocate(long size) { + return ArrayDataBuffer.allocate(String.class, size); + } + + @Override + protected String valueOf(Long val) { + return val.toString(); + } +} diff --git a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/raw/BooleanRawDataBufferTest.java b/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/raw/BooleanRawDataBufferTest.java new file mode 100644 index 00000000000..b5219ca778a --- /dev/null +++ b/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/raw/BooleanRawDataBufferTest.java @@ -0,0 +1,33 @@ +/* + Copyright 2019 The TensorFlow Authors. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ======================================================================= + */ +package org.tensorflow.nio.buffer.impl.raw; + +import org.tensorflow.nio.buffer.DoubleDataBuffer; +import org.tensorflow.nio.buffer.DoubleDataBufferTestBase; + +public class BooleanRawDataBufferTest extends DoubleDataBufferTestBase { + + @Override + protected long maxSize() { + return DoubleRawDataBuffer.MAX_32BITS; + } + + @Override + protected DoubleDataBuffer allocate(long size) { + return DoubleRawDataBuffer.allocate(size); + } +} diff --git a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/raw/ByteRawDataBufferTest.java b/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/raw/ByteRawDataBufferTest.java new file mode 100644 index 00000000000..13afa989f87 --- /dev/null +++ b/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/raw/ByteRawDataBufferTest.java @@ -0,0 +1,33 @@ +/* + Copyright 2019 The TensorFlow Authors. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ======================================================================= + */ +package org.tensorflow.nio.buffer.impl.raw; + +import org.tensorflow.nio.buffer.ByteDataBuffer; +import org.tensorflow.nio.buffer.ByteDataBufferTestBase; + +public class ByteRawDataBufferTest extends ByteDataBufferTestBase { + + @Override + protected long maxSize() { + return ByteRawDataBuffer.MAX_32BITS; + } + + @Override + protected ByteDataBuffer allocate(long size) { + return ByteRawDataBuffer.allocate(size); + } +} diff --git a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/raw/DoubleRawDataBufferTest.java b/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/raw/DoubleRawDataBufferTest.java new file mode 100644 index 00000000000..9ff7830d569 --- /dev/null +++ b/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/raw/DoubleRawDataBufferTest.java @@ -0,0 +1,33 @@ +/* + Copyright 2019 The TensorFlow Authors. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ======================================================================= + */ +package org.tensorflow.nio.buffer.impl.raw; + +import org.tensorflow.nio.buffer.DoubleDataBuffer; +import org.tensorflow.nio.buffer.DoubleDataBufferTestBase; + +public class DoubleRawDataBufferTest extends DoubleDataBufferTestBase { + + @Override + protected long maxSize() { + return DoubleRawDataBuffer.MAX_32BITS; + } + + @Override + protected DoubleDataBuffer allocate(long size) { + return DoubleRawDataBuffer.allocate(size); + } +} diff --git a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/raw/FloatRawDataBufferTest.java b/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/raw/FloatRawDataBufferTest.java new file mode 100644 index 00000000000..2a7365f0382 --- /dev/null +++ b/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/raw/FloatRawDataBufferTest.java @@ -0,0 +1,33 @@ +/* + Copyright 2019 The TensorFlow Authors. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ======================================================================= + */ +package org.tensorflow.nio.buffer.impl.raw; + +import org.tensorflow.nio.buffer.FloatDataBuffer; +import org.tensorflow.nio.buffer.FloatDataBufferTestBase; + +public class FloatRawDataBufferTest extends FloatDataBufferTestBase { + + @Override + protected long maxSize() { + return FloatRawDataBuffer.MAX_32BITS; + } + + @Override + protected FloatDataBuffer allocate(long size) { + return FloatRawDataBuffer.allocate(size); + } +} diff --git a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/raw/IntRawDataBufferTest.java b/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/raw/IntRawDataBufferTest.java new file mode 100644 index 00000000000..0b2c26bfcf1 --- /dev/null +++ b/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/raw/IntRawDataBufferTest.java @@ -0,0 +1,33 @@ +/* + Copyright 2019 The TensorFlow Authors. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ======================================================================= + */ +package org.tensorflow.nio.buffer.impl.raw; + +import org.tensorflow.nio.buffer.IntDataBuffer; +import org.tensorflow.nio.buffer.IntDataBufferTestBase; + +public class IntRawDataBufferTest extends IntDataBufferTestBase { + + @Override + protected long maxSize() { + return IntRawDataBuffer.MAX_32BITS; + } + + @Override + protected IntDataBuffer allocate(long size) { + return IntRawDataBuffer.allocate(size); + } +} diff --git a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/raw/LongRawDataBufferTest.java b/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/raw/LongRawDataBufferTest.java new file mode 100644 index 00000000000..600886c232c --- /dev/null +++ b/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/raw/LongRawDataBufferTest.java @@ -0,0 +1,33 @@ +/* + Copyright 2019 The TensorFlow Authors. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ======================================================================= + */ +package org.tensorflow.nio.buffer.impl.raw; + +import org.tensorflow.nio.buffer.LongDataBuffer; +import org.tensorflow.nio.buffer.LongDataBufferTestBase; + +public class LongRawDataBufferTest extends LongDataBufferTestBase { + + @Override + protected long maxSize() { + return LongRawDataBuffer.MAX_32BITS; + } + + @Override + protected LongDataBuffer allocate(long size) { + return LongRawDataBuffer.allocate(size); + } +} diff --git a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/raw/ShortRawDataBufferTest.java b/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/raw/ShortRawDataBufferTest.java new file mode 100644 index 00000000000..529fd498fe0 --- /dev/null +++ b/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/raw/ShortRawDataBufferTest.java @@ -0,0 +1,33 @@ +/* + Copyright 2019 The TensorFlow Authors. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ======================================================================= + */ +package org.tensorflow.nio.buffer.impl.raw; + +import org.tensorflow.nio.buffer.ShortDataBuffer; +import org.tensorflow.nio.buffer.ShortDataBufferTestBase; + +public class ShortRawDataBufferTest extends ShortDataBufferTestBase { + + @Override + protected long maxSize() { + return ShortRawDataBuffer.MAX_32BITS; + } + + @Override + protected ShortDataBuffer allocate(long size) { + return ShortRawDataBuffer.allocate(size); + } +} diff --git a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/virtual/BigIntegerVirtualDataBufferTest.java b/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/virtual/BigIntegerVirtualDataBufferTest.java new file mode 100644 index 00000000000..d578b1957a8 --- /dev/null +++ b/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/virtual/BigIntegerVirtualDataBufferTest.java @@ -0,0 +1,51 @@ +package org.tensorflow.nio.buffer.impl.virtual; + +import java.math.BigInteger; +import org.tensorflow.nio.buffer.ByteDataBuffer; +import org.tensorflow.nio.buffer.DataBuffer; +import org.tensorflow.nio.buffer.DataBufferTestBase; +import org.tensorflow.nio.buffer.DataBuffers; +import org.tensorflow.nio.buffer.adapter.DataAdapter; +import org.tensorflow.nio.buffer.impl.jdk.ByteJdkDataBuffer; + +public class BigIntegerVirtualDataBufferTest extends DataBufferTestBase { + + @Override + protected DataBuffer allocate(long size) { + return DataBuffers.of(size, new TestBigIntegerAdapter()); + } + + @Override + protected long maxSize() { + return ByteJdkDataBuffer.MAX_SIZE / 3; + } + + @Override + protected BigInteger valueOf(Long val) { + return BigInteger.valueOf(val); + } + + private static class TestBigIntegerAdapter implements DataAdapter { + + @Override + public void writeValue(ByteDataBuffer buffer, BigInteger value, long index) { + byte[] bytes = value.toByteArray(); + buffer.set(bytes.length > 2 ? bytes[2] : 0, index); + buffer.set(bytes.length > 1 ? bytes[1] : 0, index + 1); + buffer.set(bytes[0], index + 2); + } + + @Override + public BigInteger readValue(ByteDataBuffer buffer, long index) { + byte byte2 = buffer.get(index); + byte byte1 = buffer.get(index + 1); + byte byte0 = buffer.get(index + 2); + return new BigInteger(new byte[] { byte2, byte1, byte0 }); + } + + @Override + public int sizeInBytes() { + return 3; + } + } +} diff --git a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/virtual/BooleanVirtualDataBufferTest.java b/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/virtual/BooleanVirtualDataBufferTest.java new file mode 100644 index 00000000000..d5be582dca8 --- /dev/null +++ b/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/virtual/BooleanVirtualDataBufferTest.java @@ -0,0 +1,39 @@ +package org.tensorflow.nio.buffer.impl.virtual; + +import org.tensorflow.nio.buffer.BooleanDataBuffer; +import org.tensorflow.nio.buffer.BooleanDataBufferTestBase; +import org.tensorflow.nio.buffer.ByteDataBuffer; +import org.tensorflow.nio.buffer.DataBuffers; +import org.tensorflow.nio.buffer.adapter.BooleanDataAdapter; +import org.tensorflow.nio.buffer.impl.jdk.ByteJdkDataBuffer; + +public class BooleanVirtualDataBufferTest extends BooleanDataBufferTestBase { + + @Override + protected BooleanDataBuffer allocate(long size) { + return DataBuffers.ofBooleans(size, new TestBooleanAdapter()); + } + + @Override + protected long maxSize() { + return ByteJdkDataBuffer.MAX_SIZE; + } + + private static class TestBooleanAdapter implements BooleanDataAdapter { + + @Override + public void writeBoolean(ByteDataBuffer buffer, boolean value, long index) { + buffer.set((byte)(value ? 1 : 0), index); + } + + @Override + public boolean readBoolean(ByteDataBuffer buffer, long index) { + return buffer.get(index) > 0; + } + + @Override + public int sizeInBytes() { + return 1; + } + } +} diff --git a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/virtual/DoubleVirtualDataBufferTest.java b/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/virtual/DoubleVirtualDataBufferTest.java new file mode 100644 index 00000000000..79cc093cefe --- /dev/null +++ b/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/virtual/DoubleVirtualDataBufferTest.java @@ -0,0 +1,45 @@ +package org.tensorflow.nio.buffer.impl.virtual; + +import org.tensorflow.nio.buffer.ByteDataBuffer; +import org.tensorflow.nio.buffer.DataBuffers; +import org.tensorflow.nio.buffer.DoubleDataBuffer; +import org.tensorflow.nio.buffer.DoubleDataBufferTestBase; +import org.tensorflow.nio.buffer.adapter.DoubleDataAdapter; +import org.tensorflow.nio.buffer.impl.jdk.ByteJdkDataBuffer; + +public class DoubleVirtualDataBufferTest extends DoubleDataBufferTestBase { + + @Override + protected DoubleDataBuffer allocate(long size) { + return DataBuffers.ofDoubles(size, new TestDoubleAdapter()); + } + + @Override + protected long maxSize() { + return ByteJdkDataBuffer.MAX_SIZE / 3; + } + + private static class TestDoubleAdapter implements DoubleDataAdapter { + + @Override + public void writeDouble(ByteDataBuffer buffer, double value, long index) { + long bits = Double.doubleToLongBits(value); + buffer.set((byte)((bits >> 56) & 0xFF), index); + buffer.set((byte)((bits >> 48) & 0xFF), index + 1); + buffer.set((byte)((bits >> 40) & 0xFF), index + 2); + } + + @Override + public double readDouble(ByteDataBuffer buffer, long index) { + long byte7 = buffer.get(index); + long byte6 = buffer.get(index + 1); + long byte5 = buffer.get(index + 2); + return Double.longBitsToDouble(((byte7 & 0xFF) << 56) | ((byte6 & 0xFF) << 48) | ((byte5 & 0xFF) << 40)); + } + + @Override + public int sizeInBytes() { + return 3; + } + } +} diff --git a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/virtual/FloatVirtualDataBufferTest.java b/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/virtual/FloatVirtualDataBufferTest.java new file mode 100644 index 00000000000..097bd62cd0e --- /dev/null +++ b/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/virtual/FloatVirtualDataBufferTest.java @@ -0,0 +1,42 @@ +package org.tensorflow.nio.buffer.impl.virtual; + +import org.tensorflow.nio.buffer.ByteDataBuffer; +import org.tensorflow.nio.buffer.DataBuffers; +import org.tensorflow.nio.buffer.FloatDataBuffer; +import org.tensorflow.nio.buffer.FloatDataBufferTestBase; +import org.tensorflow.nio.buffer.adapter.FloatDataAdapter; +import org.tensorflow.nio.buffer.impl.jdk.ByteJdkDataBuffer; + +public class FloatVirtualDataBufferTest extends FloatDataBufferTestBase { + + @Override + protected long maxSize() { + return ByteJdkDataBuffer.MAX_SIZE / 2; + } + + private static class TestFloat16Adapter implements FloatDataAdapter { + + @Override + public void writeFloat(ByteDataBuffer buffer, float value, long index) { + int bits = Float.floatToIntBits(value); + buffer.set((byte)((bits >> 24) & 0xFF), index); + buffer.set((byte)((bits >> 16) & 0xFF), index + 1); + } + + @Override + public float readFloat(ByteDataBuffer buffer, long index) { + int byte3 = buffer.get(index); + int byte2 = buffer.get(index + 1); + return Float.intBitsToFloat(((byte3 & 0xFF) << 24) | ((byte2 & 0xFF) << 16)); + } + + @Override + public int sizeInBytes() { + return 2; + } + } + + public FloatDataBuffer allocate(long size) { + return DataBuffers.ofFloats(size, new TestFloat16Adapter()); + } +} diff --git a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/virtual/IntVirtualDataBufferTest.java b/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/virtual/IntVirtualDataBufferTest.java new file mode 100644 index 00000000000..1753963d581 --- /dev/null +++ b/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/virtual/IntVirtualDataBufferTest.java @@ -0,0 +1,42 @@ +package org.tensorflow.nio.buffer.impl.virtual; + +import org.tensorflow.nio.buffer.ByteDataBuffer; +import org.tensorflow.nio.buffer.DataBuffers; +import org.tensorflow.nio.buffer.IntDataBuffer; +import org.tensorflow.nio.buffer.IntDataBufferTestBase; +import org.tensorflow.nio.buffer.adapter.IntDataAdapter; +import org.tensorflow.nio.buffer.impl.jdk.ByteJdkDataBuffer; + +public class IntVirtualDataBufferTest extends IntDataBufferTestBase { + + @Override + protected IntDataBuffer allocate(long size) { + return DataBuffers.ofInts(size, new TestIntAdapter()); + } + + @Override + protected long maxSize() { + return ByteJdkDataBuffer.MAX_SIZE / 2; + } + + private static class TestIntAdapter implements IntDataAdapter { + + @Override + public void writeInt(ByteDataBuffer buffer, int value, long index) { + buffer.set((byte)(((value & 0x80000000) >> 24) | ((value & 0x7F) >> 7)), index); + buffer.set((byte)(value), index + 1); + } + + @Override + public int readInt(ByteDataBuffer buffer, long index) { + int msb = buffer.get(index); + int lsb = buffer.get(index + 1); + return ((msb & 0x80) << 24) | ((msb & 0x7F) << 7) | lsb; + } + + @Override + public int sizeInBytes() { + return 2; + } + } +} diff --git a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/virtual/LongVirtualDataBufferTest.java b/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/virtual/LongVirtualDataBufferTest.java new file mode 100644 index 00000000000..81ec92bfbf1 --- /dev/null +++ b/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/virtual/LongVirtualDataBufferTest.java @@ -0,0 +1,44 @@ +package org.tensorflow.nio.buffer.impl.virtual; + +import org.tensorflow.nio.buffer.ByteDataBuffer; +import org.tensorflow.nio.buffer.DataBuffers; +import org.tensorflow.nio.buffer.LongDataBuffer; +import org.tensorflow.nio.buffer.LongDataBufferTestBase; +import org.tensorflow.nio.buffer.adapter.LongDataAdapter; +import org.tensorflow.nio.buffer.impl.jdk.ByteJdkDataBuffer; + +public class LongVirtualDataBufferTest extends LongDataBufferTestBase { + + @Override + protected LongDataBuffer allocate(long size) { + return DataBuffers.ofLongs(size, new TestLongAdapter()); + } + + @Override + protected long maxSize() { + return ByteJdkDataBuffer.MAX_SIZE / 3; + } + + private static class TestLongAdapter implements LongDataAdapter { + + @Override + public void writeLong(ByteDataBuffer buffer, long value, long index) { + buffer.set((byte)(((value >> 56) & 0x80) | ((value >> 16) & 0x7F)), index); + buffer.set((byte)((value >> 8) & 0xFF), index + 1); + buffer.set((byte)(value & 0xFF), index + 2); + } + + @Override + public long readLong(ByteDataBuffer buffer, long index) { + long msb = buffer.get(index); + long midb = buffer.get(index + 1); + long lsb = buffer.get(index + 2); + return ((msb & 0x80) << 56) | ((msb & 0x7F) << 16) | ((midb & 0xFF) << 8) | (lsb & 0xFF); + } + + @Override + public int sizeInBytes() { + return 3; + } + } +} diff --git a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/virtual/ShortVirtualDataBufferTest.java b/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/virtual/ShortVirtualDataBufferTest.java new file mode 100644 index 00000000000..dcebda30ada --- /dev/null +++ b/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/virtual/ShortVirtualDataBufferTest.java @@ -0,0 +1,39 @@ +package org.tensorflow.nio.buffer.impl.virtual; + +import org.tensorflow.nio.buffer.ByteDataBuffer; +import org.tensorflow.nio.buffer.DataBuffers; +import org.tensorflow.nio.buffer.ShortDataBuffer; +import org.tensorflow.nio.buffer.ShortDataBufferTestBase; +import org.tensorflow.nio.buffer.adapter.ShortDataAdapter; +import org.tensorflow.nio.buffer.impl.jdk.ByteJdkDataBuffer; + +public class ShortVirtualDataBufferTest extends ShortDataBufferTestBase { + + @Override + protected long maxSize() { + return ByteJdkDataBuffer.MAX_SIZE; + } + + private static class TestShort8Adapter implements ShortDataAdapter { + + @Override + public void writeShort(ByteDataBuffer buffer, short value, long index) { + buffer.set((byte)(((value & 0x8000) >> 8) | (value & 0x7F)), index); + } + + @Override + public short readShort(ByteDataBuffer buffer, long index) { + int b = buffer.get(index); + return (short)(((b & 0x80) << 8) | (b & 0x7F)); + } + + @Override + public int sizeInBytes() { + return 1; + } + } + + public ShortDataBuffer allocate(long size) { + return DataBuffers.ofShorts(size, new TestShort8Adapter()); + } +} diff --git a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/BooleanNdArrayTestBase.java b/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/BooleanNdArrayTestBase.java new file mode 100644 index 00000000000..0191730a699 --- /dev/null +++ b/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/BooleanNdArrayTestBase.java @@ -0,0 +1,136 @@ +/* + Copyright 2019 The TensorFlow Authors. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ======================================================================= + */ +package org.tensorflow.nio.nd; + +import static junit.framework.TestCase.assertTrue; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.fail; +import static org.tensorflow.nio.nd.NdArrays.vector; + +import java.nio.BufferOverflowException; +import java.nio.BufferUnderflowException; +import org.junit.Test; + +public abstract class BooleanNdArrayTestBase extends NdArrayTestBase { + + @Override + protected abstract BooleanNdArray allocate(Shape shape); + + @Override + protected Boolean valueOf(Long val) { + return val > 0; + } + + @Test + public void iteratePrimitiveElements() { + BooleanNdArray matrix3d = allocate(Shape.make(5, 4, 5)); + + matrix3d.scalars().forEachIndexed((coords, scalar) -> { + scalar.setBoolean(coords[2] > 0); + }); + + assertFalse(matrix3d.getBoolean(0, 0, 0)); + assertTrue(matrix3d.getBoolean(0, 0, 1)); + assertTrue(matrix3d.getBoolean(0, 0, 4)); + assertTrue(matrix3d.getBoolean(0, 1, 2)); + + matrix3d.elements(1).forEach(vector -> { + vector.set(vector(true, false, true, false, true)); + }); + + assertTrue(matrix3d.getBoolean(0, 0, 0)); + assertFalse(matrix3d.getBoolean(0, 0, 1)); + assertTrue(matrix3d.getBoolean(0, 0, 4)); + assertTrue(matrix3d.getBoolean(0, 1, 2)); + } + + @Test + public void writeAndReadWithPrimitiveArrays() { + boolean[] values = new boolean[] { true, true, false, false, true, true, false, true, false, false, true, false, true, false, true, true }; + + BooleanNdArray matrix = allocate(Shape.make(3, 4)); + matrix.write(values); + assertTrue(matrix.getBoolean(0, 0)); + assertFalse(matrix.getBoolean(0, 3)); + assertTrue(matrix.getBoolean(1, 0)); + assertFalse(matrix.getBoolean(2, 3)); + + matrix.write(values, 4); + assertTrue(matrix.getBoolean(0, 0)); + assertTrue(matrix.getBoolean(0, 3)); + assertFalse(matrix.getBoolean(1, 0)); + assertTrue(matrix.getBoolean(2, 3)); + + matrix.setBoolean(true, 1, 0); + matrix.read(values, 2); + assertTrue(values[2]); + assertTrue(values[5]); + + matrix.read(values); + assertTrue(values[0]); + assertTrue(values[3]); + + try { + matrix.write(new boolean[] { true, true, true, true }); + fail(); + } catch (BufferUnderflowException e) { + // as expected + } + try { + matrix.write(values, values.length); + fail(); + } catch (BufferUnderflowException e) { + // as expected + } + try { + matrix.write(values, -1); + fail(); + } catch (IndexOutOfBoundsException e) { + // as expected + } + try { + matrix.write(values, values.length + 1); + fail(); + } catch (IndexOutOfBoundsException e) { + // as expected + } + try { + matrix.read(new boolean[4]); + fail(); + } catch (BufferOverflowException e) { + // as expected + } + try { + matrix.read(values, values.length); + fail(); + } catch (BufferOverflowException e) { + // as expected + } + try { + matrix.read(values, -1); + fail(); + } catch (IndexOutOfBoundsException e) { + // as expected + } + try { + matrix.read(values, values.length + 1); + fail(); + } catch (IndexOutOfBoundsException e) { + // as expected + } + } +} diff --git a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/ByteNdArrayTestBase.java b/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/ByteNdArrayTestBase.java new file mode 100644 index 00000000000..e44122d5dcd --- /dev/null +++ b/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/ByteNdArrayTestBase.java @@ -0,0 +1,142 @@ +/* + Copyright 2019 The TensorFlow Authors. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ======================================================================= + */ +package org.tensorflow.nio.nd; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.fail; +import static org.tensorflow.nio.nd.NdArrays.vector; + +import java.nio.BufferOverflowException; +import java.nio.BufferUnderflowException; +import org.junit.Test; + +public abstract class ByteNdArrayTestBase extends NdArrayTestBase { + + @Override + protected abstract ByteNdArray allocate(Shape shape); + + @Override + protected Byte valueOf(Long val) { + return val.byteValue(); + } + + @Test + public void iteratePrimitiveElements() { + ByteNdArray matrix3d = allocate(Shape.make(5, 4, 5)); + + matrix3d.scalars().forEachIndexed((coords, scalar) -> { + scalar.setByte((byte)coords[2]); + }); + + assertEquals(0, matrix3d.getByte(0, 0, 0)); + assertEquals(1, matrix3d.getByte(0, 0, 1)); + assertEquals(4, matrix3d.getByte(0, 0, 4)); + assertEquals(2, matrix3d.getByte(0, 1, 2)); + + matrix3d.elements(1).forEach(vector -> { + vector.set(vector((byte)5, (byte)6, (byte)7, (byte)8, (byte)9)); + }); + + assertEquals(5, matrix3d.getByte(0, 0, 0)); + assertEquals(6, matrix3d.getByte(0, 0, 1)); + assertEquals(9, matrix3d.getByte(0, 0, 4)); + assertEquals(7, matrix3d.getByte(0, 1, 2)); + } + + @Test + public void writeAndReadWithPrimitiveArrays() { + byte[] values = new byte[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }; + + ByteNdArray matrix = allocate(Shape.make(3, 4)); + matrix.write(values); + assertEquals(0, matrix.getByte(0, 0)); + assertEquals(3, matrix.getByte(0, 3)); + assertEquals(4, matrix.getByte(1, 0)); + assertEquals(11, matrix.getByte(2, 3)); + + matrix.write(values, 4); + assertEquals(4, matrix.getByte(0, 0)); + assertEquals(7, matrix.getByte(0, 3)); + assertEquals(8, matrix.getByte(1, 0)); + assertEquals(15, matrix.getByte(2, 3)); + + matrix.setByte((byte)100, 1, 0); + matrix.read(values, 2); + assertEquals(4, values[2]); + assertEquals(7, values[5]); + assertEquals(100, values[6]); + assertEquals(15, values[13]); + assertEquals(15, values[15]); + + matrix.read(values); + assertEquals(4, values[0]); + assertEquals(7, values[3]); + assertEquals(100, values[4]); + assertEquals(15, values[11]); + assertEquals(15, values[13]); + assertEquals(15, values[15]); + + try { + matrix.write(new byte[] { 1, 2, 3, 4 }); + fail(); + } catch (BufferUnderflowException e) { + // as expected + } + try { + matrix.write(values, values.length); + fail(); + } catch (BufferUnderflowException e) { + // as expected + } + try { + matrix.write(values, -1); + fail(); + } catch (IndexOutOfBoundsException e) { + // as expected + } + try { + matrix.write(values, values.length + 1); + fail(); + } catch (IndexOutOfBoundsException e) { + // as expected + } + try { + matrix.read(new byte[4]); + fail(); + } catch (BufferOverflowException e) { + // as expected + } + try { + matrix.read(values, values.length); + fail(); + } catch (BufferOverflowException e) { + // as expected + } + try { + matrix.read(values, -1); + fail(); + } catch (IndexOutOfBoundsException e) { + // as expected + } + try { + matrix.read(values, values.length + 1); + fail(); + } catch (IndexOutOfBoundsException e) { + // as expected + } + } +} diff --git a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/DoubleNdArrayTestBase.java b/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/DoubleNdArrayTestBase.java new file mode 100644 index 00000000000..2a43c25e1dd --- /dev/null +++ b/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/DoubleNdArrayTestBase.java @@ -0,0 +1,142 @@ +/* + Copyright 2019 The TensorFlow Authors. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ======================================================================= + */ +package org.tensorflow.nio.nd; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.fail; +import static org.tensorflow.nio.nd.NdArrays.vector; + +import java.nio.BufferOverflowException; +import java.nio.BufferUnderflowException; +import org.junit.Test; + +public abstract class DoubleNdArrayTestBase extends NdArrayTestBase { + + @Override + protected abstract DoubleNdArray allocate(Shape shape); + + @Override + protected Double valueOf(Long val) { + return val.doubleValue(); + } + + @Test + public void iteratePrimitiveElements() { + DoubleNdArray matrix3d = allocate(Shape.make(5, 4, 5)); + + matrix3d.scalars().forEachIndexed((coords, scalar) -> { + scalar.setDouble((double)coords[2]); + }); + + assertEquals(0.0, matrix3d.getDouble(0, 0, 0), 0.0); + assertEquals(1.0, matrix3d.getDouble(0, 0, 1), 0.0); + assertEquals(4.0, matrix3d.getDouble(0, 0, 4), 0.0); + assertEquals(2.0, matrix3d.getDouble(0, 1, 2), 0.0); + + matrix3d.elements(1).forEach(vector -> { + vector.set(vector(5.0, 6.0, 7.0, 8.0, 9.0)); + }); + + assertEquals(5, matrix3d.getDouble(0, 0, 0), 0.0); + assertEquals(6, matrix3d.getDouble(0, 0, 1), 0.0); + assertEquals(9, matrix3d.getDouble(0, 0, 4), 0.0); + assertEquals(7, matrix3d.getDouble(0, 1, 2), 0.0); + } + + @Test + public void writeAndReadWithPrimitiveArrays() { + double[] values = new double[] { 0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.1, 1.2, 1.3, 1.4, 1.5 }; + + DoubleNdArray matrix = allocate(Shape.make(3, 4)); + matrix.write(values); + assertEquals(0.0, matrix.getDouble(0, 0), 0.0); + assertEquals(0.3, matrix.getDouble(0, 3), 0.0); + assertEquals(0.4, matrix.getDouble(1, 0), 0.0); + assertEquals(1.1, matrix.getDouble(2, 3), 0.0); + + matrix.write(values, 4); + assertEquals(0.4, matrix.getDouble(0, 0), 0.0); + assertEquals(0.7, matrix.getDouble(0, 3), 0.0); + assertEquals(0.8, matrix.getDouble(1, 0), 0.0); + assertEquals(1.5, matrix.getDouble(2, 3), 0.0); + + matrix.setDouble(100.5, 1, 0); + matrix.read(values, 2); + assertEquals(0.4, values[2], 0); + assertEquals(0.7, values[5], 0); + assertEquals(100.5, values[6], 0); + assertEquals(1.5, values[13], 0); + assertEquals(1.5, values[15], 0); + + matrix.read(values); + assertEquals(0.4, values[0], 0); + assertEquals(0.7, values[3], 0); + assertEquals(100.5, values[4], 0); + assertEquals(1.5, values[11], 0); + assertEquals(1.5, values[13], 0); + assertEquals(1.5, values[15], 0); + + try { + matrix.write(new double[] { 0.1, 0.2, 0.3, 0.4 }); + fail(); + } catch (BufferUnderflowException e) { + // as expected + } + try { + matrix.write(values, values.length); + fail(); + } catch (BufferUnderflowException e) { + // as expected + } + try { + matrix.write(values, -1); + fail(); + } catch (IndexOutOfBoundsException e) { + // as expected + } + try { + matrix.write(values, values.length + 1); + fail(); + } catch (IndexOutOfBoundsException e) { + // as expected + } + try { + matrix.read(new double[4]); + fail(); + } catch (BufferOverflowException e) { + // as expected + } + try { + matrix.read(values, values.length); + fail(); + } catch (BufferOverflowException e) { + // as expected + } + try { + matrix.read(values, -1); + fail(); + } catch (IndexOutOfBoundsException e) { + // as expected + } + try { + matrix.read(values, values.length + 1); + fail(); + } catch (IndexOutOfBoundsException e) { + // as expected + } + } +} diff --git a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/FloatNdArrayTestBase.java b/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/FloatNdArrayTestBase.java new file mode 100644 index 00000000000..1de2b459851 --- /dev/null +++ b/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/FloatNdArrayTestBase.java @@ -0,0 +1,142 @@ +/* + Copyright 2019 The TensorFlow Authors. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ======================================================================= + */ +package org.tensorflow.nio.nd; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.fail; +import static org.tensorflow.nio.nd.NdArrays.vector; + +import java.nio.BufferOverflowException; +import java.nio.BufferUnderflowException; +import org.junit.Test; + +public abstract class FloatNdArrayTestBase extends NdArrayTestBase { + + @Override + protected abstract FloatNdArray allocate(Shape shape); + + @Override + protected Float valueOf(Long val) { + return val.floatValue(); + } + + @Test + public void iteratePrimitiveElements() { + FloatNdArray matrix3d = allocate(Shape.make(5, 4, 5)); + + matrix3d.scalars().forEachIndexed((coords, scalar) -> { + scalar.setFloat((float)coords[2]); + }); + + assertEquals(0.0f, matrix3d.getFloat(0, 0, 0), 0.0f); + assertEquals(1.0f, matrix3d.getFloat(0, 0, 1), 0.0f); + assertEquals(4.0f, matrix3d.getFloat(0, 0, 4), 0.0f); + assertEquals(2.0f, matrix3d.getFloat(0, 1, 2), 0.0f); + + matrix3d.elements(1).forEach(vector -> { + vector.set(vector(5.0f, 6.0f, 7.0f, 8.0f, 9.0f)); + }); + + assertEquals(5, matrix3d.getFloat(0, 0, 0), 0.0f); + assertEquals(6, matrix3d.getFloat(0, 0, 1), 0.0f); + assertEquals(9, matrix3d.getFloat(0, 0, 4), 0.0f); + assertEquals(7, matrix3d.getFloat(0, 1, 2), 0.0f); + } + + @Test + public void writeAndReadWithPrimitiveArrays() { + float[] values = new float[] { 0.0f, 0.1f, 0.2f, 0.3f, 0.4f, 0.5f, 0.6f, 0.7f, 0.8f, 0.9f, 1.0f, 1.1f, 1.2f, 1.3f, 1.4f, 1.5f }; + + FloatNdArray matrix = allocate(Shape.make(3, 4)); + matrix.write(values); + assertEquals(0.0f, matrix.getFloat(0, 0), 0.0f); + assertEquals(0.3f, matrix.getFloat(0, 3), 0.0f); + assertEquals(0.4f, matrix.getFloat(1, 0), 0.0f); + assertEquals(1.1f, matrix.getFloat(2, 3), 0.0f); + + matrix.write(values, 4); + assertEquals(0.4f, matrix.getFloat(0, 0), 0.0f); + assertEquals(0.7f, matrix.getFloat(0, 3), 0.0f); + assertEquals(0.8f, matrix.getFloat(1, 0), 0.0f); + assertEquals(1.5f, matrix.getFloat(2, 3), 0.0f); + + matrix.setFloat(100.5f, 1, 0); + matrix.read(values, 2); + assertEquals(0.4f, values[2], 0); + assertEquals(0.7f, values[5], 0); + assertEquals(100.5f, values[6], 0); + assertEquals(1.5f, values[13], 0); + assertEquals(1.5f, values[15], 0); + + matrix.read(values); + assertEquals(0.4f, values[0], 0); + assertEquals(0.7f, values[3], 0); + assertEquals(100.5f, values[4], 0); + assertEquals(1.5f, values[11], 0); + assertEquals(1.5f, values[13], 0); + assertEquals(1.5f, values[15], 0); + + try { + matrix.write(new float[] { 0.1f, 0.2f, 0.3f, 0.4f }); + fail(); + } catch (BufferUnderflowException e) { + // as expected + } + try { + matrix.write(values, values.length); + fail(); + } catch (BufferUnderflowException e) { + // as expected + } + try { + matrix.write(values, -1); + fail(); + } catch (IndexOutOfBoundsException e) { + // as expected + } + try { + matrix.write(values, values.length + 1); + fail(); + } catch (IndexOutOfBoundsException e) { + // as expected + } + try { + matrix.read(new float[4]); + fail(); + } catch (BufferOverflowException e) { + // as expected + } + try { + matrix.read(values, values.length); + fail(); + } catch (BufferOverflowException e) { + // as expected + } + try { + matrix.read(values, -1); + fail(); + } catch (IndexOutOfBoundsException e) { + // as expected + } + try { + matrix.read(values, values.length + 1); + fail(); + } catch (IndexOutOfBoundsException e) { + // as expected + } + } +} diff --git a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/IntNdArrayTestBase.java b/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/IntNdArrayTestBase.java new file mode 100644 index 00000000000..416d2557824 --- /dev/null +++ b/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/IntNdArrayTestBase.java @@ -0,0 +1,142 @@ +/* + Copyright 2019 The TensorFlow Authors. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ======================================================================= + */ +package org.tensorflow.nio.nd; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.fail; +import static org.tensorflow.nio.nd.NdArrays.vector; + +import java.nio.BufferOverflowException; +import java.nio.BufferUnderflowException; +import org.junit.Test; + +public abstract class IntNdArrayTestBase extends NdArrayTestBase { + + @Override + protected abstract IntNdArray allocate(Shape shape); + + @Override + protected Integer valueOf(Long val) { + return val.intValue(); + } + + @Test + public void iteratePrimitiveElements() { + IntNdArray matrix3d = allocate(Shape.make(5, 4, 5)); + + matrix3d.scalars().forEachIndexed((coords, scalar) -> { + scalar.setInt((int)coords[2]); + }); + + assertEquals(0, matrix3d.getInt(0, 0, 0)); + assertEquals(1, matrix3d.getInt(0, 0, 1)); + assertEquals(4, matrix3d.getInt(0, 0, 4)); + assertEquals(2, matrix3d.getInt(0, 1, 2)); + + matrix3d.elements(1).forEach(vector -> { + vector.set(vector(5, 6, 7, 8, 9)); + }); + + assertEquals(5, matrix3d.getInt(0, 0, 0)); + assertEquals(6, matrix3d.getInt(0, 0, 1)); + assertEquals(9, matrix3d.getInt(0, 0, 4)); + assertEquals(7, matrix3d.getInt(0, 1, 2)); + } + + @Test + public void writeAndReadWithPrimitiveArrays() { + int[] values = new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }; + + IntNdArray matrix = allocate(Shape.make(3, 4)); + matrix.write(values); + assertEquals(0, matrix.getInt(0, 0)); + assertEquals(3, matrix.getInt(0, 3)); + assertEquals(4, matrix.getInt(1, 0)); + assertEquals(11, matrix.getInt(2, 3)); + + matrix.write(values, 4); + assertEquals(4, matrix.getInt(0, 0)); + assertEquals(7, matrix.getInt(0, 3)); + assertEquals(8, matrix.getInt(1, 0)); + assertEquals(15, matrix.getInt(2, 3)); + + matrix.setInt(100, 1, 0); + matrix.read(values, 2); + assertEquals(4, values[2]); + assertEquals(7, values[5]); + assertEquals(100, values[6]); + assertEquals(15, values[13]); + assertEquals(15, values[15]); + + matrix.read(values); + assertEquals(4, values[0]); + assertEquals(7, values[3]); + assertEquals(100, values[4]); + assertEquals(15, values[11]); + assertEquals(15, values[13]); + assertEquals(15, values[15]); + + try { + matrix.write(new int[] { 1, 2, 3, 4 }); + fail(); + } catch (BufferUnderflowException e) { + // as expected + } + try { + matrix.write(values, values.length); + fail(); + } catch (BufferUnderflowException e) { + // as expected + } + try { + matrix.write(values, -1); + fail(); + } catch (IndexOutOfBoundsException e) { + // as expected + } + try { + matrix.write(values, values.length + 1); + fail(); + } catch (IndexOutOfBoundsException e) { + // as expected + } + try { + matrix.read(new int[4]); + fail(); + } catch (BufferOverflowException e) { + // as expected + } + try { + matrix.read(values, values.length); + fail(); + } catch (BufferOverflowException e) { + // as expected + } + try { + matrix.read(values, -1); + fail(); + } catch (IndexOutOfBoundsException e) { + // as expected + } + try { + matrix.read(values, values.length + 1); + fail(); + } catch (IndexOutOfBoundsException e) { + // as expected + } + } +} diff --git a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/LongNdArrayTestBase.java b/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/LongNdArrayTestBase.java new file mode 100644 index 00000000000..0c53c1ac81e --- /dev/null +++ b/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/LongNdArrayTestBase.java @@ -0,0 +1,118 @@ +/* + Copyright 2019 The TensorFlow Authors. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ======================================================================= + */ +package org.tensorflow.nio.nd; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.fail; + +import java.nio.BufferOverflowException; +import java.nio.BufferUnderflowException; +import org.junit.Test; + +public abstract class LongNdArrayTestBase extends NdArrayTestBase { + + @Override + protected abstract LongNdArray allocate(Shape shape); + + @Override + protected Long valueOf(Long val) { + return val; + } + + @Test + public void writeAndReadWithPrimitiveArrays() { + long[] values = new long[] { 0L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 13L, 14L, 15L }; + + LongNdArray matrix = allocate(Shape.make(3, 4)); + matrix.write(values); + assertEquals(0L, matrix.getLong(0, 0)); + assertEquals(3L, matrix.getLong(0, 3)); + assertEquals(4L, matrix.getLong(1, 0)); + assertEquals(11L, matrix.getLong(2, 3)); + + matrix.write(values, 4); + assertEquals(4L, matrix.getLong(0, 0)); + assertEquals(7L, matrix.getLong(0, 3)); + assertEquals(8L, matrix.getLong(1, 0)); + assertEquals(15L, matrix.getLong(2, 3)); + + matrix.setLong(100L, 1, 0); + matrix.read(values, 2); + assertEquals(4L, values[2]); + assertEquals(7L, values[5]); + assertEquals(100L, values[6]); + assertEquals(15L, values[13]); + assertEquals(15L, values[15]); + + matrix.read(values); + assertEquals(4L, values[0]); + assertEquals(7L, values[3]); + assertEquals(100L, values[4]); + assertEquals(15L, values[11]); + assertEquals(15L, values[13]); + assertEquals(15L, values[15]); + + try { + matrix.write(new long[] { 1, 2, 3, 4 }); + fail(); + } catch (BufferUnderflowException e) { + // as expected + } + try { + matrix.write(values, values.length); + fail(); + } catch (BufferUnderflowException e) { + // as expected + } + try { + matrix.write(values, -1); + fail(); + } catch (IndexOutOfBoundsException e) { + // as expected + } + try { + matrix.write(values, values.length + 1); + fail(); + } catch (IndexOutOfBoundsException e) { + // as expected + } + try { + matrix.read(new long[4]); + fail(); + } catch (BufferOverflowException e) { + // as expected + } + try { + matrix.read(values, values.length); + fail(); + } catch (BufferOverflowException e) { + // as expected + } + try { + matrix.read(values, -1); + fail(); + } catch (IndexOutOfBoundsException e) { + // as expected + } + try { + matrix.read(values, values.length + 1); + fail(); + } catch (IndexOutOfBoundsException e) { + // as expected + } + } +} diff --git a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/NdArrayTestBase.java b/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/NdArrayTestBase.java new file mode 100644 index 00000000000..af8ce4cc8a4 --- /dev/null +++ b/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/NdArrayTestBase.java @@ -0,0 +1,384 @@ +/* + Copyright 2019 The TensorFlow Authors. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ======================================================================= + */ +package org.tensorflow.nio.nd; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.fail; +import static org.tensorflow.nio.nd.NdArrays.scalar; +import static org.tensorflow.nio.nd.NdArrays.vectorOf; +import static org.tensorflow.nio.nd.index.Indices.all; +import static org.tensorflow.nio.nd.index.Indices.at; +import static org.tensorflow.nio.nd.index.Indices.even; +import static org.tensorflow.nio.nd.index.Indices.flip; +import static org.tensorflow.nio.nd.index.Indices.from; +import static org.tensorflow.nio.nd.index.Indices.odd; +import static org.tensorflow.nio.nd.index.Indices.range; +import static org.tensorflow.nio.nd.index.Indices.seq; +import static org.tensorflow.nio.nd.index.Indices.to; + +import java.nio.BufferOverflowException; +import java.nio.BufferUnderflowException; +import java.util.concurrent.atomic.AtomicLong; +import java.util.stream.LongStream; +import org.junit.Test; +import org.tensorflow.nio.buffer.DataBuffer; + +public abstract class NdArrayTestBase { + + protected abstract NdArray allocate(Shape shape); + + protected abstract DataBuffer allocateBuffer(long size); + + protected abstract T valueOf(Long val); + + protected T zeroOrNull() { + return valueOf(0L); + } + + @Test + public void shapeAndSizes() { + Shape scalarShape = Shape.scalar(); + NdArray scalar = allocate(scalarShape); + assertEquals(scalarShape, scalar.shape()); + assertEquals(0, scalar.rank()); + assertEquals(scalarShape, Shape.make()); + + Shape vectorShape = Shape.make(10); + NdArray vector = allocate(vectorShape); + assertEquals(vectorShape, vector.shape()); + assertEquals(1, vector.rank()); + } + + @Test + public void setAndGetValues() { + NdArray matrix = allocate(Shape.make(5, 4)); + assertEquals(zeroOrNull(), matrix.getValue(3, 3)); + + matrix.setValue(valueOf(10L), 3, 3); + assertEquals(valueOf(10L), matrix.getValue(3, 3)); + try { + matrix.setValue(valueOf(10L), 3, 4); + fail(); + } catch (IndexOutOfBoundsException e) { + // as expected + } + try { + matrix.setValue(valueOf(10L), -1, 3); + fail(); + } catch (IndexOutOfBoundsException e) { + // as expected + } + try { + matrix.getValue(3); + fail(); + } catch (IllegalRankException e) { + // as expected + } + try { + matrix.setValue(valueOf(10L), 3); + fail(); + } catch (IllegalRankException e) { + // as expected + } + + NdArray matrix2 = allocate(Shape.make(3, 2)) + .set(vectorOf(valueOf(1L), valueOf(2L)), 0) + .set(vectorOf(valueOf(3L), valueOf(4L)), 1) + .setValue(valueOf(5L), 2, 0) + .setValue(valueOf(6L), 2, 1); + + assertEquals(valueOf(1L), matrix2.getValue(0, 0)); + assertEquals(valueOf(2L), matrix2.getValue(0, 1)); + assertEquals(valueOf(3L), matrix2.getValue(1, 0)); + assertEquals(valueOf(4L), matrix2.getValue(1, 1)); + assertEquals(valueOf(5L), matrix2.getValue(2, 0)); + assertEquals(valueOf(6L), matrix2.getValue(2, 1)); + } + + @Test + public void iterateElements() { + NdArray matrix3d = allocate(Shape.make(5, 4, 5)); + + matrix3d.scalars().forEachIndexed((coords, scalar) -> { + scalar.setValue(valueOf(coords[2])); + }); + + assertEquals(valueOf(0L), matrix3d.getValue(0, 0, 0)); + assertEquals(valueOf(1L), matrix3d.getValue(0, 0, 1)); + assertEquals(valueOf(4L), matrix3d.getValue(0, 0, 4)); + assertEquals(valueOf(2L), matrix3d.getValue(0, 1, 2)); + + matrix3d.elements(1).forEach(vector -> { + vector.set(vectorOf(valueOf(5L), valueOf(6L), valueOf(7L), valueOf(8L), valueOf(9L))); + }); + + assertEquals(valueOf(5L), matrix3d.getValue(0, 0, 0)); + assertEquals(valueOf(6L), matrix3d.getValue(0, 0, 1)); + assertEquals(valueOf(9L), matrix3d.getValue(0, 0, 4)); + assertEquals(valueOf(7L), matrix3d.getValue(0, 1, 2)); + + AtomicLong value = new AtomicLong(); + matrix3d.elements(0).forEach(matrix -> { + assertEquals(2L, matrix.shape().numDimensions()); + assertEquals(4L, matrix.shape().size(0)); + assertEquals(5L, matrix.shape().size(1)); + + matrix.elements(0).forEach(vector -> { + assertEquals(1L, vector.shape().numDimensions()) ; + assertEquals(5L, vector.shape().size(0)); + + vector.scalars().forEach(scalar -> { + assertEquals(0L, scalar.shape().numDimensions()) ; + scalar.setValue(valueOf(value.getAndIncrement())); + try { + scalar.elements(0); + fail(); + } catch (IllegalArgumentException e) { + // as expected + } + }); + }); + }); + assertEquals(valueOf(0L), matrix3d.getValue(0, 0, 0)); + assertEquals(valueOf(5L), matrix3d.getValue(0, 1, 0)); + assertEquals(valueOf(9L), matrix3d.getValue(0, 1, 4)); + assertEquals(valueOf(20L), matrix3d.getValue(1, 0, 0)); + assertEquals(valueOf(25L), matrix3d.getValue(1, 1, 0)); + assertEquals(valueOf(99L), matrix3d.getValue(4, 3, 4)); + } + + @Test + public void slices() { + NdArray matrix3d = allocate(Shape.make(5, 4, 5)); + + T val100 = valueOf(100L); + matrix3d.setValue(val100, 1, 0, 0); + T val101 = valueOf(101L); + matrix3d.setValue(val101, 1, 0, 1); + + // Vector (1,0,*) + NdArray vector10X = matrix3d.get(1, 0); + assertEquals(Shape.make(5), vector10X.shape()); + assertEquals(val100, vector10X.getValue(0)); + assertEquals(val101, vector10X.getValue(1)); + + T val102 = valueOf(102L); + vector10X.setValue(val102, 2); + assertEquals(val102, vector10X.getValue(2)); + assertEquals(val102, matrix3d.getValue(1, 0, 2)); + + // Vector (*,0,0) + NdArray vectorX00 = matrix3d.slice(all(), at(0), at(0)); + assertEquals(Shape.make(5), vectorX00.shape()); + assertEquals(val100, vectorX00.getValue(1)); + T val200 = valueOf(200L); + vectorX00.setValue(val200, 2); + assertEquals(val200, vectorX00.getValue(2)); + assertEquals(val200, matrix3d.getValue(2, 0, 0)); + + // Vector (1,0,[2,0]) + NdArray vector10_20 = matrix3d.slice(at(1), at(0), seq(2, 0)); + assertEquals(vector10_20.shape(), Shape.make(2)); + assertEquals(val102, vector10_20.getValue(0)); + assertEquals(val100, vector10_20.getValue(1)); + + // Vector (1,0,[even]) + NdArray vector10_even = matrix3d.slice(at(1), at(0), even()); + assertEquals(vector10_even.shape(), Shape.make(3)); + assertEquals(val100, vector10_even.getValue(0)); + assertEquals(val102, vector10_even.getValue(1)); + + // Vector ([odd]) from vector (1,0,[even]) + NdArray vector10_even_odd = vector10_even.slice(odd()); + assertEquals(vector10_even_odd.shape(), Shape.make(1)); + assertEquals(val102, vector10_even_odd.getValue(0)); + + // Vector (1,0,[flip]) + NdArray vector10_flip = matrix3d.slice(at(1), at(0), flip()); + assertEquals(vector10_flip.shape(), Shape.make(5)); + assertEquals(val100, vector10_flip.getValue(4)); + assertEquals(val101, vector10_flip.getValue(3)); + + // Vector (1,0,[from 1]) from vector (1,0,*) + NdArray vector10_1toX = vector10X.slice(from(1)); + assertEquals(vector10_1toX.shape(), Shape.make(4)); + assertEquals(val101, vector10_1toX.getValue(0)); + assertEquals(val102, vector10_1toX.getValue(1)); + + // Vector (1,0,[to 1]) from vector (1,0,*) + NdArray vector10_Xto1 = vector10X.slice(to(2)); + assertEquals(vector10_Xto1.shape(), Shape.make(2)); + assertEquals(val100, vector10_Xto1.getValue(0)); + assertEquals(val101, vector10_Xto1.getValue(1)); + + // Vector (1,0,[1 to 3]) + NdArray vector10_1to3 = matrix3d.slice(at(1), at(0), range(1, 3)); + assertEquals(vector10_1to3.shape(), Shape.make(2)); + assertEquals(val101, vector10_1to3.getValue(0)); + assertEquals(val102, vector10_1to3.getValue(1)); + + // Scalar (1,0,0) from vector (1,0,*) + NdArray scalar100 = vector10X.get(0); + assertEquals(Shape.make(), scalar100.shape()); + assertEquals(val100, scalar100.getValue()); + + // Slice scalar (1,0,z) + LongNdArray z = scalar(2L); + NdArray scalar102 = matrix3d.slice(at(1), at(0), at(z)); + assertEquals(scalar102.shape(), Shape.make()); + assertEquals(val102, scalar102.getValue()); + + // Slicing the 3D matrix so we only keep the first element of the second dimension + NdArray matrix_X0Z = matrix3d.slice(all(), at(0)); + assertEquals(2, matrix_X0Z.rank()); + assertEquals(Shape.make(5, 5), matrix_X0Z.shape()); + assertEquals(val100, matrix_X0Z.getValue(1, 0)); + assertEquals(val101, matrix_X0Z.getValue(1, 1)); + assertEquals(val200, matrix_X0Z.getValue(2, 0)); + } + + @Test + public void writeAndReadWithBuffers() { + DataBuffer buffer = allocateBuffer(15L); + for (long val = 0L; val < buffer.size(); ++val) { + buffer.set(valueOf(val), val); + } + NdArray matrix = allocate(Shape.make(3, 5)); + matrix.write(buffer); + assertEquals(valueOf(0L), matrix.getValue(0, 0)); + assertEquals(valueOf(4L), matrix.getValue(0, 4)); + assertEquals(valueOf(5L), matrix.getValue(1, 0)); + assertEquals(valueOf(10L), matrix.getValue(2, 0)); + assertEquals(valueOf(14L), matrix.getValue(2, 4)); + + matrix.setValue(valueOf(100L), 1, 0); + matrix.read(buffer); + assertEquals(valueOf(0L), buffer.get(0)); + assertEquals(valueOf(4L), buffer.get(4)); + assertEquals(valueOf(100L), buffer.get(5)); + assertEquals(valueOf(10L), buffer.get(10)); + assertEquals(valueOf(14L), buffer.get(14)); + } + + @Test + public void ndArrayCopies() { + NdArray matrixA = allocate(Shape.make(3, 5)); + + AtomicLong value = new AtomicLong(); + matrixA.scalars().forEach(e -> e.setValue(valueOf(value.getAndIncrement()))); + + NdArray matrixB = allocate(Shape.make(3, 5)).setValue(valueOf(100L), 1, 0); + matrixA.copyTo(matrixB); + assertEquals(valueOf(0L), matrixB.getValue(0, 0)); + assertEquals(valueOf(4L), matrixB.getValue(0, 4)); + assertEquals(valueOf(5L), matrixB.getValue(1, 0)); + assertEquals(valueOf(10L), matrixB.getValue(2, 0)); + assertEquals(valueOf(14L), matrixB.getValue(2, 4)); + + NdArray matrixC = allocate(Shape.make(3, 4)); + try { + matrixA.copyTo(matrixC); + fail(); + } catch (IllegalArgumentException e) { + // as expected + } + } + + @Test + @SuppressWarnings("unchecked") + public void writeAndReadWithArrays() { + T[] values = (T[])LongStream.range(0L, 16L).boxed().map(this::valueOf).toArray(); + + NdArray matrix = allocate(Shape.make(3, 4)); + matrix.write(values); + assertEquals(valueOf(0L), matrix.getValue(0, 0)); + assertEquals(valueOf(3L), matrix.getValue(0, 3)); + assertEquals(valueOf(4L), matrix.getValue(1, 0)); + assertEquals(valueOf(11L), matrix.getValue(2, 3)); + + matrix.write(values, 4); + assertEquals(valueOf(4L), matrix.getValue(0, 0)); + assertEquals(valueOf(7L), matrix.getValue(0, 3)); + assertEquals(valueOf(8L), matrix.getValue(1, 0)); + assertEquals(valueOf(15L), matrix.getValue(2, 3)); + + matrix.setValue(valueOf(100L), 1, 0); + matrix.read(values, 2); + assertEquals(valueOf(4L), values[2]); + assertEquals(valueOf(7L), values[5]); + assertEquals(valueOf(100L), values[6]); + assertEquals(valueOf(15L), values[13]); + assertEquals(valueOf(15L), values[15]); + + matrix.read(values); + assertEquals(valueOf(4L), values[0]); + assertEquals(valueOf(7L), values[3]); + assertEquals(valueOf(100L), values[4]); + assertEquals(valueOf(15L), values[11]); + assertEquals(valueOf(15L), values[13]); + assertEquals(valueOf(15L), values[15]); + + try { + matrix.write((T[])LongStream.range(0L, 4L).boxed().map(this::valueOf).toArray()); + fail(); + } catch (BufferUnderflowException e) { + // as expected + } + try { + matrix.write(values, values.length); + fail(); + } catch (BufferUnderflowException e) { + // as expected + } + try { + matrix.write(values, -1); + fail(); + } catch (IllegalArgumentException e) { + // as expected + } + try { + matrix.write(values, values.length + 1); + fail(); + } catch (IllegalArgumentException e) { + // as expected + } + try { + matrix.read((T[])LongStream.range(0L, 4L).boxed().map(this::valueOf).toArray()); + fail(); + } catch (BufferOverflowException e) { + // as expected + } + try { + matrix.read(values, values.length); + fail(); + } catch (BufferOverflowException e) { + // as expected + } + try { + matrix.read(values, -1); + fail(); + } catch (IllegalArgumentException e) { + // as expected + } + try { + matrix.read(values, values.length + 1); + fail(); + } catch (IllegalArgumentException e) { + // as expected + } + } +} diff --git a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/ShapeTest.java b/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/ShapeTest.java new file mode 100644 index 00000000000..10c442e540f --- /dev/null +++ b/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/ShapeTest.java @@ -0,0 +1,75 @@ +/* + Copyright 2019 The TensorFlow Authors. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ======================================================================= + */ +package org.tensorflow.nio.nd; + +import static org.junit.Assert.assertArrayEquals; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotEquals; +import static org.junit.Assert.fail; + +import org.junit.Test; + +public class ShapeTest { + + @Test + public void allKnownDimensions() { + Shape shape = Shape.make(5, 4, 5); + assertEquals(3, shape.numDimensions()); + assertEquals(5, shape.size(0)); + assertEquals(4, shape.size(1)); + assertEquals(5, shape.size(2)); + assertEquals(100, shape.size()); + assertArrayEquals(new long[] {5, 4, 5}, shape.asArray()); + try { + shape.size(3); + fail(); + } catch (IndexOutOfBoundsException e) { + // as expected + } + try { + shape.size(-1); + fail(); + } catch (IndexOutOfBoundsException e) { + // as expected + } + } + + @Test + public void hashCodeEquals() { + Shape shape1 = Shape.make(5, 4, 5); + Shape shape2 = Shape.make(5, 4, 5); + Shape shape3 = Shape.make(5, 4, 5, 6); + Shape shape4 = Shape.make(5, 4, 1); + + assertEquals(shape1, shape2); + assertEquals(shape1.hashCode(), shape2.hashCode()); + assertNotEquals(shape1, shape3); + assertNotEquals(shape1.hashCode(), shape3.hashCode()); + assertNotEquals(shape1, shape4); + assertNotEquals(shape1.hashCode(), shape4.hashCode()); + + Shape scalar1 = Shape.make(); + Shape scalar2 = Shape.make(); + assertEquals(scalar1, scalar2); + assertNotEquals(scalar1, shape1); + + Shape unknown1 = Shape.make(-1, 4, 5); + Shape unknown2 = Shape.make(-1, 4, 5); + assertNotEquals(unknown1, unknown2); + assertNotEquals(unknown1, shape1); + } +} diff --git a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/ShortNdArrayTestBase.java b/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/ShortNdArrayTestBase.java new file mode 100644 index 00000000000..c2318282b44 --- /dev/null +++ b/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/ShortNdArrayTestBase.java @@ -0,0 +1,142 @@ +/* + Copyright 2019 The TensorFlow Authors. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ======================================================================= + */ +package org.tensorflow.nio.nd; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.fail; +import static org.tensorflow.nio.nd.NdArrays.vector; + +import java.nio.BufferOverflowException; +import java.nio.BufferUnderflowException; +import org.junit.Test; + +public abstract class ShortNdArrayTestBase extends NdArrayTestBase { + + @Override + protected abstract ShortNdArray allocate(Shape shape); + + @Override + protected Short valueOf(Long val) { + return val.shortValue(); + } + + @Test + public void iteratePrimitiveElements() { + ShortNdArray matrix3d = allocate(Shape.make(5, 4, 5)); + + matrix3d.scalars().forEachIndexed((coords, scalar) -> { + scalar.setShort((short)coords[2]); + }); + + assertEquals(0, matrix3d.getShort(0, 0, 0)); + assertEquals(1, matrix3d.getShort(0, 0, 1)); + assertEquals(4, matrix3d.getShort(0, 0, 4)); + assertEquals(2, matrix3d.getShort(0, 1, 2)); + + matrix3d.elements(1).forEach(vector -> { + vector.set(vector((short)5, (short)6, (short)7, (short)8, (short)9)); + }); + + assertEquals(5, matrix3d.getShort(0, 0, 0)); + assertEquals(6, matrix3d.getShort(0, 0, 1)); + assertEquals(9, matrix3d.getShort(0, 0, 4)); + assertEquals(7, matrix3d.getShort(0, 1, 2)); + } + + @Test + public void writeAndReadWithPrimitiveArrays() { + short[] values = new short[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }; + + ShortNdArray matrix = allocate(Shape.make(3, 4)); + matrix.write(values); + assertEquals(0, matrix.getShort(0, 0)); + assertEquals(3, matrix.getShort(0, 3)); + assertEquals(4, matrix.getShort(1, 0)); + assertEquals(11, matrix.getShort(2, 3)); + + matrix.write(values, 4); + assertEquals(4, matrix.getShort(0, 0)); + assertEquals(7, matrix.getShort(0, 3)); + assertEquals(8, matrix.getShort(1, 0)); + assertEquals(15, matrix.getShort(2, 3)); + + matrix.setShort((short)100, 1, 0); + matrix.read(values, 2); + assertEquals(4, values[2]); + assertEquals(7, values[5]); + assertEquals(100, values[6]); + assertEquals(15, values[13]); + assertEquals(15, values[15]); + + matrix.read(values); + assertEquals(4, values[0]); + assertEquals(7, values[3]); + assertEquals(100, values[4]); + assertEquals(15, values[11]); + assertEquals(15, values[13]); + assertEquals(15, values[15]); + + try { + matrix.write(new short[] { 1, 2, 3, 4 }); + fail(); + } catch (BufferUnderflowException e) { + // as expected + } + try { + matrix.write(values, values.length); + fail(); + } catch (BufferUnderflowException e) { + // as expected + } + try { + matrix.write(values, -1); + fail(); + } catch (IndexOutOfBoundsException e) { + // as expected + } + try { + matrix.write(values, values.length + 1); + fail(); + } catch (IndexOutOfBoundsException e) { + // as expected + } + try { + matrix.read(new short[4]); + fail(); + } catch (BufferOverflowException e) { + // as expected + } + try { + matrix.read(values, values.length); + fail(); + } catch (BufferOverflowException e) { + // as expected + } + try { + matrix.read(values, -1); + fail(); + } catch (IndexOutOfBoundsException e) { + // as expected + } + try { + matrix.read(values, values.length + 1); + fail(); + } catch (IndexOutOfBoundsException e) { + // as expected + } + } +} diff --git a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/impl/dense/BooleanDenseNdArrayTest.java b/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/impl/dense/BooleanDenseNdArrayTest.java new file mode 100644 index 00000000000..b2d0d579f7d --- /dev/null +++ b/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/impl/dense/BooleanDenseNdArrayTest.java @@ -0,0 +1,35 @@ +/* + Copyright 2019 The TensorFlow Authors. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ======================================================================= + */ +package org.tensorflow.nio.nd.impl.dense; + +import org.tensorflow.nio.buffer.DataBuffer; +import org.tensorflow.nio.buffer.DataBuffers; +import org.tensorflow.nio.nd.BooleanNdArray; +import org.tensorflow.nio.nd.BooleanNdArrayTestBase; +import org.tensorflow.nio.nd.NdArrays; +import org.tensorflow.nio.nd.Shape; + +public class BooleanDenseNdArrayTest extends BooleanNdArrayTestBase { + + @Override protected BooleanNdArray allocate(Shape shape) { + return NdArrays.ofBooleans(shape); + } + + @Override protected DataBuffer allocateBuffer(long size) { + return DataBuffers.ofBooleans(size); + } +} diff --git a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/impl/dense/ByteDenseNdArrayTest.java b/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/impl/dense/ByteDenseNdArrayTest.java new file mode 100644 index 00000000000..72eac334472 --- /dev/null +++ b/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/impl/dense/ByteDenseNdArrayTest.java @@ -0,0 +1,35 @@ +/* + Copyright 2019 The TensorFlow Authors. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ======================================================================= + */ +package org.tensorflow.nio.nd.impl.dense; + +import org.tensorflow.nio.buffer.DataBuffer; +import org.tensorflow.nio.buffer.DataBuffers; +import org.tensorflow.nio.nd.ByteNdArray; +import org.tensorflow.nio.nd.ByteNdArrayTestBase; +import org.tensorflow.nio.nd.NdArrays; +import org.tensorflow.nio.nd.Shape; + +public class ByteDenseNdArrayTest extends ByteNdArrayTestBase { + + @Override protected ByteNdArray allocate(Shape shape) { + return NdArrays.ofBytes(shape); + } + + @Override protected DataBuffer allocateBuffer(long size) { + return DataBuffers.ofBytes(size); + } +} diff --git a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/impl/dense/DoubleDenseNdArrayTest.java b/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/impl/dense/DoubleDenseNdArrayTest.java new file mode 100644 index 00000000000..7928ae61c3c --- /dev/null +++ b/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/impl/dense/DoubleDenseNdArrayTest.java @@ -0,0 +1,35 @@ +/* + Copyright 2019 The TensorFlow Authors. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ======================================================================= + */ +package org.tensorflow.nio.nd.impl.dense; + +import org.tensorflow.nio.buffer.DataBuffer; +import org.tensorflow.nio.buffer.DataBuffers; +import org.tensorflow.nio.nd.DoubleNdArray; +import org.tensorflow.nio.nd.DoubleNdArrayTestBase; +import org.tensorflow.nio.nd.NdArrays; +import org.tensorflow.nio.nd.Shape; + +public class DoubleDenseNdArrayTest extends DoubleNdArrayTestBase { + + @Override protected DoubleNdArray allocate(Shape shape) { + return NdArrays.ofDoubles(shape); + } + + @Override protected DataBuffer allocateBuffer(long size) { + return DataBuffers.ofDoubles(size); + } +} diff --git a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/impl/dense/FloatDenseNdArrayTest.java b/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/impl/dense/FloatDenseNdArrayTest.java new file mode 100644 index 00000000000..636fe2301ab --- /dev/null +++ b/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/impl/dense/FloatDenseNdArrayTest.java @@ -0,0 +1,35 @@ +/* + Copyright 2019 The TensorFlow Authors. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ======================================================================= + */ +package org.tensorflow.nio.nd.impl.dense; + +import org.tensorflow.nio.buffer.DataBuffer; +import org.tensorflow.nio.buffer.DataBuffers; +import org.tensorflow.nio.nd.FloatNdArray; +import org.tensorflow.nio.nd.FloatNdArrayTestBase; +import org.tensorflow.nio.nd.NdArrays; +import org.tensorflow.nio.nd.Shape; + +public class FloatDenseNdArrayTest extends FloatNdArrayTestBase { + + @Override protected FloatNdArray allocate(Shape shape) { + return NdArrays.ofFloats(shape); + } + + @Override protected DataBuffer allocateBuffer(long size) { + return DataBuffers.ofFloats(size); + } +} diff --git a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/impl/dense/IntDenseNdArrayTest.java b/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/impl/dense/IntDenseNdArrayTest.java new file mode 100644 index 00000000000..879b6431dec --- /dev/null +++ b/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/impl/dense/IntDenseNdArrayTest.java @@ -0,0 +1,35 @@ +/* + Copyright 2019 The TensorFlow Authors. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ======================================================================= + */ +package org.tensorflow.nio.nd.impl.dense; + +import org.tensorflow.nio.buffer.DataBuffer; +import org.tensorflow.nio.buffer.DataBuffers; +import org.tensorflow.nio.nd.IntNdArray; +import org.tensorflow.nio.nd.IntNdArrayTestBase; +import org.tensorflow.nio.nd.NdArrays; +import org.tensorflow.nio.nd.Shape; + +public class IntDenseNdArrayTest extends IntNdArrayTestBase { + + @Override protected IntNdArray allocate(Shape shape) { + return NdArrays.ofInts(shape); + } + + @Override protected DataBuffer allocateBuffer(long size) { + return DataBuffers.ofInts(size); + } +} diff --git a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/impl/dense/LongDenseNdArrayTest.java b/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/impl/dense/LongDenseNdArrayTest.java new file mode 100644 index 00000000000..d3ed51db9eb --- /dev/null +++ b/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/impl/dense/LongDenseNdArrayTest.java @@ -0,0 +1,35 @@ +/* + Copyright 2019 The TensorFlow Authors. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ======================================================================= + */ +package org.tensorflow.nio.nd.impl.dense; + +import org.tensorflow.nio.buffer.DataBuffer; +import org.tensorflow.nio.buffer.DataBuffers; +import org.tensorflow.nio.nd.LongNdArray; +import org.tensorflow.nio.nd.LongNdArrayTestBase; +import org.tensorflow.nio.nd.NdArrays; +import org.tensorflow.nio.nd.Shape; + +public class LongDenseNdArrayTest extends LongNdArrayTestBase { + + @Override protected LongNdArray allocate(Shape shape) { + return NdArrays.ofLongs(shape); + } + + @Override protected DataBuffer allocateBuffer(long size) { + return DataBuffers.ofLongs(size); + } +} diff --git a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/impl/dense/ShortDenseNdArrayTest.java b/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/impl/dense/ShortDenseNdArrayTest.java new file mode 100644 index 00000000000..83e430210a8 --- /dev/null +++ b/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/impl/dense/ShortDenseNdArrayTest.java @@ -0,0 +1,35 @@ +/* + Copyright 2019 The TensorFlow Authors. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ======================================================================= + */ +package org.tensorflow.nio.nd.impl.dense; + +import org.tensorflow.nio.buffer.DataBuffer; +import org.tensorflow.nio.buffer.DataBuffers; +import org.tensorflow.nio.nd.ShortNdArray; +import org.tensorflow.nio.nd.ShortNdArrayTestBase; +import org.tensorflow.nio.nd.NdArrays; +import org.tensorflow.nio.nd.Shape; + +public class ShortDenseNdArrayTest extends ShortNdArrayTestBase { + + @Override protected ShortNdArray allocate(Shape shape) { + return NdArrays.ofShorts(shape); + } + + @Override protected DataBuffer allocateBuffer(long size) { + return DataBuffers.ofShorts(size); + } +} diff --git a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/impl/dense/StringDenseNdArrayTest.java b/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/impl/dense/StringDenseNdArrayTest.java new file mode 100644 index 00000000000..d095c2f4d6e --- /dev/null +++ b/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/impl/dense/StringDenseNdArrayTest.java @@ -0,0 +1,43 @@ +/* + Copyright 2019 The TensorFlow Authors. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ======================================================================= + */ +package org.tensorflow.nio.nd.impl.dense; + +import org.tensorflow.nio.buffer.DataBuffer; +import org.tensorflow.nio.buffer.DataBuffers; +import org.tensorflow.nio.nd.NdArray; +import org.tensorflow.nio.nd.NdArrayTestBase; +import org.tensorflow.nio.nd.NdArrays; +import org.tensorflow.nio.nd.Shape; + +public class StringDenseNdArrayTest extends NdArrayTestBase { + + @Override protected NdArray allocate(Shape shape) { + return NdArrays.of(String.class, shape); + } + + @Override protected DataBuffer allocateBuffer(long size) { + return DataBuffers.of(String.class, size); + } + + @Override protected String valueOf(Long val) { + return val.toString(); + } + + protected String zeroOrNull() { + return null; + } +} diff --git a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/impl/sequence/ElementSequenceTest.java b/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/impl/sequence/ElementSequenceTest.java new file mode 100644 index 00000000000..89547713485 --- /dev/null +++ b/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/impl/sequence/ElementSequenceTest.java @@ -0,0 +1,59 @@ +package org.tensorflow.nio.nd.impl.sequence; + +import static org.junit.Assert.assertArrayEquals; +import static org.junit.Assert.assertEquals; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import org.junit.Test; +import org.tensorflow.nio.nd.IntNdArray; +import org.tensorflow.nio.nd.NdArraySequence; +import org.tensorflow.nio.nd.NdArrays; +import org.tensorflow.nio.nd.Shape; +import org.tensorflow.nio.nd.impl.AbstractNdArray; + +public class ElementSequenceTest { + + @Test + public void iterateVectorsWithIndex() { + IntNdArray array = NdArrays.ofInts(Shape.make(2, 3, 2)); + + @SuppressWarnings("unchecked") + NdArraySequence sequence = ElementSequence.create((AbstractNdArray)array, 1); + List coords = new ArrayList<>((int)array.shape().size()); + sequence.forEachIndexed((c, e) -> coords.add(Arrays.copyOf(c, c.length))); + + assertEquals(6, coords.size()); + assertArrayEquals(new long[] {0, 0}, coords.get(0)); + assertArrayEquals(new long[] {0, 1}, coords.get(1)); + assertArrayEquals(new long[] {0, 2}, coords.get(2)); + assertArrayEquals(new long[] {1, 0}, coords.get(3)); + assertArrayEquals(new long[] {1, 1}, coords.get(4)); + assertArrayEquals(new long[] {1, 2}, coords.get(5)); + } + + @Test + public void iterateScalarsWithIndex() { + IntNdArray array = NdArrays.ofInts(Shape.make(2, 3, 2)); + + @SuppressWarnings("unchecked") + NdArraySequence cursor = ElementSequence.create((AbstractNdArray)array, 2); + List coords = new ArrayList<>((int)array.shape().size()); + cursor.forEachIndexed((c, e) -> coords.add(Arrays.copyOf(c, c.length))); + + assertEquals(12, coords.size()); + assertArrayEquals(new long[] {0, 0, 0}, coords.get(0)); + assertArrayEquals(new long[] {0, 0, 1}, coords.get(1)); + assertArrayEquals(new long[] {0, 1, 0}, coords.get(2)); + assertArrayEquals(new long[] {0, 1, 1}, coords.get(3)); + assertArrayEquals(new long[] {0, 2, 0}, coords.get(4)); + assertArrayEquals(new long[] {0, 2, 1}, coords.get(5)); + assertArrayEquals(new long[] {1, 0, 0}, coords.get(6)); + assertArrayEquals(new long[] {1, 0, 1}, coords.get(7)); + assertArrayEquals(new long[] {1, 1, 0}, coords.get(8)); + assertArrayEquals(new long[] {1, 1, 1}, coords.get(9)); + assertArrayEquals(new long[] {1, 2, 0}, coords.get(10)); + assertArrayEquals(new long[] {1, 2, 1}, coords.get(11)); + } +} diff --git a/tensorflow-utils/nio-utils/src/test/resources/1500x916.jpg b/tensorflow-utils/nio-utils/src/test/resources/1500x916.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b01f404e3f722819dbcfd8341009b9aac96a5303 GIT binary patch literal 435586 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%0AIy91>d3)x>Sq z>Tx9MKk(Y#JPyeDP|`a$YwLV%Rg;*MQ53FUj@EYh&`zvVIz#`A z&37bBy?<%?kZ}-brKaCk7|_Vik6g+ECuowu=ZYK0584u@yIs%+Ig02rOcsI z_@Pre3!4k|e>IdG4v(#y?>qd7I+$Xr8k7jW{EI%dPz>%b#YRe}STk0NKijC1HXpeE)9Gn( zXio!wyN5I5@E^BaTjdMC?>I;y94+W1bzHB@{jl7mjBpXCaMiOX#8|c#NpU^#irbFn zMU_o=9O5Cpsv!{{{8s6>JEDYd-f8UrofLY$U7Y6KMQD=mZrI!^Cd37|m(`x z`u0ldUi+shLdl_7S$B3ewhi$&fV80yoCz8IurzX#tcOPoXojT(rfQZW2E*HHS2nih z_N{*BdO0*$KpGA*ESLu+AZio_srsFq7is~tm;3Bv#1|Xi21VF%HC<{M1NVN4 zsLYPoxEpdQu6=D%dOOFLL2yL~k!$UyQ`8%IO&f!=O;=F`{H?ldKx%9Z)gq{ct zvCPp2_z1|yW<9v_FD0{pkpz@>U|^TEzRo(tSur*(f|&Q`RNpo7@og97Ke^$X*S$}} zBcYv0@a6#yqjn;dr0%~rLO;8cLM{7ZP}?2~j0g@%nxTKFt&H+e_5O8+&{rUNrnspu z+smbG5dX%mDOs?-mzih#vBJjbaZ-5W#S{Ytg6X>>RfCGYbN7W3xhNDvm)BIjxsQcu zk`1H$g&vup7)8=Twjk2t7)atTCLAcH>AooTPQrx_6i=4;jhfIFn;Dq;`cPC2)OH^7K=HBi}hJv@csz^%oX zv_cy+elm$6egOhlcFE`-K4M7U!LXuP(Qv-sUV@v3mT_HPw14?shQzqqC?-P;3?A_s zz8bYN_u|B30>Pp*mIKw!wk)HP5d3C~J|PiS@Ke8kdW+Q0SO=VN%(S0EC#PVd+Kmal zUHlDlnQ4cBEJ)}hBWVScTS9tLHJ`xfV;7eORd4{}fy}a*st|SZ50DQx_sXRi!2c0} zW;^R=%8>(UNJLK|_@~XAB;5VAm%sAP1&c}yAx7E8*sbT4ldYtw2OU8V+*J{cp1u*C z4PYD8+bR*tkCHNZqq@XS zN*%1n>yjZ;5xlXyIBsmkwZN8KKK?#qC|0d46Yup!wO$^w8}}1^M3$%v4gaa&ZI7 z#jWz*5ADzPZ-n-~(`vs@-am$M8>&5t8ABwcoY~CY@zZ~wqudjvwG20clW~oS(Vx~;{@ZZfh`Z*qGQRNDJw@@ zif+_3j0pJd9n@AHh!m)E#C;P><@7y=Gc(F=+kuIFbkwi-1R}CG@qwaCIVW5nED;4- zwmeLoGeR%|$Ga?>FvIvc>6+$Ti5Oa>P455_E;OTzz@s8=jldkjjUd6LX)<*iCzI5( z>+n9N;_VFx$xr_}9iD(sTpR_e3E7Ta$anCiM}jBAJck3wdYX3`M=Bt78Ufn(TrraM z8Y->@z^1fBzZ3?)PpFrg?1-s&ylJF(-8)_GIdleX>@D;#?n`48md*?XCiRggwFCKp zKvxS=^t54P3%fgXV(KO+NafiXpy3A6yc{Ucl&)h?Dgn>yqSV;fan}#@9ZUyHYb_WA z5)YGTI;UF-uA}@%PEb2m{;>qfs2EvE7rx* z!b|M1iu_5h^t$D19Q8BQg}n*?XQnVNTR(`N=d^kwyO%@QGr4E9M?B>77T!!w7}8wv zMl)mxDHHkxu5rL>f^xAv2hBz}_4f}9A;v|T``C7j46O(kd@0VS%is;gxL5@Dry|~m z{?vSq<4%O?dAy=xx=CBkCdn|c!r>;;bL&W(zo?3#Vq%2^}X?nhId6I43~NJV9($L{WrCDfz1i9`fSEGGS4fJXVz;+u^= zZn{)M$?C>8A4>Ob`;hIgTjuz0;Tg>|A&>sn=mL$^Uo-Tczi1reFRGB&Eau8m8!+C- zaHw-3jK!ULm%3DF9ooF8P3TWvza-|k8ooctxQl*DCIb{c-`xFa8WeM1p*^pcX=yen z7HjD?b9%R9?Ooz&|3p$=SyavmeL1YA7sqD(+PXEDXOptln_Mn`F+6wCKzfQV;gB^q zx+9&?euZJ_FMHMVW}eT+jzmcZKJe=$!#gJ@$INs4$T08lvL|({8<_Mc>@v49tT{18 zw=~@@;BuTjo4$ulA_Uj=ZG5%)tcA8evJ>i4hw8u}M6IP^C+v>+r1cg$zlqFP?=F0! z&#h{??8?(QB#zVR4NvsDkWXdHsHx2KCz{dPyw|;+-wpFk)m+cO1y4;t);a0yE@ld0gh?Jj&~WlH=)E&PIH6cgEJ>nnXtmlFp&^?>r~V;=ME89pnYH`c$!GCNL# zlBHV|k7Bs2ZEf7Y%n^9jS5?M)<9|21QpI~?-gTNT@oewlpJm(Yue=Ld1X@;JqyUST z&gc30YI|eY^)|1uk?Cg`M;AT~b{YOmgmO>k9UDXqD7IwvvxS*73CdXrHH4_OhfW$- zPF(!87RISID&|;KTvm2p7HG<|X8@bkxaY$0?NBE};|>_7$bao}W9nRPph}6S{{i4l z!rMn>LPu_Y*RmA94%~AiqhZLM)iZg8*N5vz-vyF+v+DV+i;UrT9}$m}w|@OYQT+#? z(Q?=qxkX@BR)|Mcdf|E*EJl+i%_BQZ(M=290hG57de zm&J^THNZ;)*QlNq47dlyewy_~e07nAp@^?cX4f6x54F9>P?#=h_PU4{1(0&Od17s8 z{k7+8x!0&LxNXbmq9N}GV1p7HWCT$ZJl85gVW2xkRumGm{8 zUWK;U-(y`Rhlgzj1>xH39kAdc7-omeg7?eHS942V*`9xrq`x|sxqscfpS#70U8BE! zKA=q>Q8qhH$3mPE3-#xRhL)G3FK%Dyz~d_0H9B=>K-j8mJwc z5OZ=8I|Mbja5iu_=b_;SZrr}tGd7-D!T^!;xouhB6OCijh3C)uBtJ?+W^+Wem*RfE zrqq-w1aI#DDGybc`qJ~O?o3bC<9s@<;4WSwyC4$S>nUPh@opd=X}wXtesz%T2a8r) zT&7;y4YpilMSjUt!GL;)H^3QJ8)?7wYHEA5p1|ax7!L8MZE;j$o<%m(nf$nB=Gp7j zU2L;X<2cALY@F182f@W8bmspWnq08G%j%b9L?Gly$u+LKiY9f$7R0}Ll7dwPF;X>* zvtKNtCmcnT^Sd4ZX3*mj`B#I{KJ)fn6NF*LUh8gJ3IHHL;j|Q0bNOFk%b+@*^4E~gw zW7jwz=FJg<`CE=b9%_8ENYKQFTb)~TNK;mSwrCh@c7s57dI0>QE$MuzuBoe>FLhv; z4W9$$p$VN-Vg0822Ta}go^w1d?LUCUbCOc6X^-&npvL}*JpPLx{>8=`6|5ZltONl# zV`;bO9V*S4ynL4@Eel&gNlDmmP+t1!omB+AQz77LN}uV8_(KmDFvrT7H!pk&plA-n24uCIbfO8y zwyes$?3s-_{47&^_`Sd?KO@ZHvE^=wy=SjT>Q@cowFvls7+_9LQfgvneVqgqeOIS6 zMPhVr$JwZGh(iQ~d6G1(2GHj&wtpfImH!8rrYDZR5dRJuJJE;X_&wEw$uKEgFHV1k{WV1Z-@vZOW7v4u z>%^A|Ut>2}-A2p1#-8^1kn4yq0gZo|-p2F?cqiSXk|iL5F63wHL(Hz0E1sXvagu<# zE+T$$tD6siYefG@3DI+cw8(UdKJ}9C6g~us@yu5kQhPQkq$!4OtB|0@GxM6uw4L3G z7ffnp_&A%)p|}$h6^aZO*Kn{Jr@0)awaRS!43iYz+&E8hYgRia6v#6BO7h~Bjw`BO)9MZ}9PY=shAlgSQ>la1at4=&I2tUS8w3w7oz zw$s3o{{T)p4zz~*b1x6G9S$JkvoGO(Ny3!AlCI)Cg^njDpMV4de;heD9bbKBC%ePG z36_5^k@Q0{Ck4S!ouUHPCzW@0MzEh14k%u{aq-zkT0j8EFJ`uYe*POX+>O5`YISIK z#=fC*`lP@qSN~p)4@Ihjr?=Z0SEF8L7R7!|V+Ag&huLJ?ONg=6k(}6eO8Vk@uw_= zEkoO0UX3u~%+j41I|ZC%wM`FT(jUT8i9w}jjydB9fgKiAdSUc{?hcNU_>di`x-62E zg;xW2QghXx7!$J^a7n!hWsR0}Z0!D8YAYsIr6S&-mL;%XDPphDmGCHi$Bqy$;WRyE z{72lOTZAxmT_U}}mnd>~kKatCI8p5H1~QYc4Oz~+J3I!Ag8fJG;P1f`R)TLG8K#-H zKgy}baF2<G9-;+~aOnO;~`DC!AE0|2W+)iQYpk~jTz zVRPZnfev#oUp88t{iuN%N@*vzy!>rH^TG4ICSJ~0Z$B9-4HXPfHD&upuS`l)VWL{G zamn9ksYadrCr|T64RID}y)1olQw~BO!N~Gqag? zkh&w;?Q$mF(?TMA23XfcTsgZRdesv#gLN4Z?{r95_>7;s1oQ#ICO*b=kY^I0h4X_C znT}YKOwL%Y@lintaW$H+3`!e>?Y5qr!;=_z*u>lVJ9h5pMI9jr2AKZ*-ig9~~@sMHCp`avaFw6fV*wu#+BGveXLAmX&j8 z)qMXLCi{}1OWe*e=ngD&fw;-BsOZ;Z%TP0_MjIRuTQ;G<#?l0?Q57NWo)(8&B3Qp#1Cq;Z^=Or5H>YormYTLK=z*_cxHunH zu7!yp_;8<7{P6FrJU@;Jx9^P|zA2pH(p9zW+siut#Q0ZgF7{bc@UIlQ3jRry1N0LY zwdreK(2|n^2fL*kT$`@;3&=r}bsHyHb%6|;rQmt4yklp^QXH6^6lUd$@iH!jC$&5M2eA+dgP_Z%K03Hmc0b?27)BZ({L5c~#1 zy{Budf|I(b94i4|rj6HWRhS|m%vtLNa&D8Bk zbuWo{PyO8E1}y^&#m!YeFQ!7b@Y5R?h%D1l|9FBm`0rA=Y{UA%$j58>*+62J4uy}L zb*a$6lYxQG&fU`#pSRvlHLv!)dzF0PJC5EtaX~)keoi3v7cP&@$DPYOzKB{ZFBF82 zduNr|xmXETPV<-#>~?KYOHP-u9q~P>)LQ+LB3bXiW4BBr_Bf?u!lQeAW8*)7xc}qE zyQ+NYj|bI>(meqrwc?Nk{x@`uIg0n^zYuQA-F=4cYwn~=ZKB3I(zACX;6xh4AGvAF zF!Q1Mo4*Mwx6h)j=6U^uvYLBu(-gZf>13Ffm)qEe>HYj~BAcu?k@0>&HREHz;)_*wg8tn1Z&$ zjI0+eVQ(@_&AvKtclDk!56!RXUhVuJ0NX$$zy7$#sAQ!`B92W(^y<`qhtv#e^z3Iv z5iS*FRm_w~>IY;w(ny(%gUumcP5Ip7RZ(LQE4zTDhtl>N{ji+ULKX&FUAG{PJ-zW7 zwxVQmA!Y@T5PdK2^~S54u9apI7pkOC$ZC|TDB3aK>wz`ZUOm-qYw24aEPH=EJyjf$ zq2=As>L%v<@G%cBjb$w5j-hZ@(DucMnkv*1PbpBsJPWn1LAKoEO!!gLF!c^?RY@s! zni?r4rByb($P|Eo`gL*N8T>IQSmPHrK4N=V<5T!qQA?5a4qsV2$RT$j*?$+D75umS zu~VtJ!WU@#U6H^?hy%D%sPct;(T-G&rK3=ry?HebOin_YJNE)JvaEOB1X>M8R0 zrORpJib|@ggbJxEG9+fipLW=hw+-u$Iji1d8hIgUZ3#BCifVdu4Lmt)=!GPfSWd8P z41vQ2AlzKAw_)jQS+gXPYIRv74I8N-C5^Qy1${{5V=r9JNcyWPiiMU4R+^%XygM;c zs2|IHfCSpdy~li8dUvR^JjN>ee9k&>v~>#)B~4B!gQ?EMOo*ZOyOxcE+*sGb*L( zPL9t~qA1N}H7iLBfd$rBh0gr)3X$)ObED}+epv#`Cx;)9I}l0ITm$)D{{Ul;VU3d9 zxB+mY-HOMRj)~Met#_^IpQ!!>RuqvMcp!?gR5ixn$6R>O(i~EoL0kISs{Q&PDo}50S*T{ zc!%n7LXLttI=doDkUTeus8!%L3_@Ba0NZj+_vEjyK5B`2t2&pdq?M^;qLw6rkT`It zwk={vAd~HHTp6yDDSXxe4LUo^IVD?VNknYNZr1|aYzer*;^Ul11V@@T@V>}rm}E*` zI6NnkvYv}PN@*Z7QO%Z_lr&ypX!qEE7OyclN5l-OSaX+_7^bKxP5b8yb=ZJB#>anC ziPQ@R?7GAi0qG;m5+Ec$yos8^L{{aMl&y&E=yC3;u98VqPge2xuy`aY{{Y-&zo)6w z`tgcn5ioH1AM&olAQ2Xx`>K{f6m*F#T=ftrGI?xn!20uVTa0}V@X}O%gvxZTkg$~k z_ZuG(z$k0wQ)6UbmmrsA2Ok1VtqcC zbmLQjN|O9N{Z+UHBXfqN;J5C+PsYWBxL;|lQG(;f(KYh#IAy{g>dN_{ZQ ziggi(Db(KGuqtglgx?Q_ByG+cM7|zXBOHykyqCTtM5i2$F!C+2$*l=$FzWhYv4<0k za%Cq_cEqTFz9OeL#E9C~IN*pWDQqG}xVAhb7-Crf-;7EtO|#jy!j?dJ#CCF8;~iG^ z#2~dOHXH{LRjuiV74A95A`VZM?QA;|++3VR4t;pTsV3IMsZxPZEsr=`UkFB0H#l3m zg}5UVY6mHTK)w6%j>f<#zc<5f+mnPAw)eoIDoP#j<;AfPWWvOP*pw;e7vBs@4;WZ* zcfw>h#}y$Ck~R)(ZVAT#v9+-L!ov7tQ1!$vDa0fWaO$uk*Th2BHyyFmmg5~tEjv+b z5rK8|=_Gn|f<5svb{@EmR^=gLFl?}PTuR0MFJ-j!(nV03Qc~J%1&a^sjOhE@?lF1z ztu;+XX%kBzF`z1gxjoJ)I!VXXdNW)w*{H9ab$5qlx`if+fw97Ex!7USJ9jwY1RQDr zvcXMg+m86|k%jlix5rYONz=CY;{n)nh5fLSJlEqLR=Uy%;N!%7KDb@4k6Ocgbttrg zJ+{ZJ2=9g49=16Zri$;d!fZ{j?T>tN*p(KWDmce9dtuT$W1t)JiBg*j#ymxvY&b#f z#yC_H>5dDnBEufv>xGfOr`H@H0ngN8S6WHreR1wh{{WU0M{TjQU7QEP(c z_9pmHBpyyWt7Fa-s!6ciPUNmgy`dJbrXHY46rCPpArHE+O6Kje@@fB9gj4!9s_@wGm!@aR-=m=5kT2*;flFC5fgN)v% zAO8Ru#HZqtB?|E#QIj@d6FQF-?V`i=9@x21Wt8-k;wa+^w(Z{oDJiI$zB3o%MFoNG zKDe^@WT6Tzw>bIUZcE)jmFqF#4FuAt=TcG%t4hkk4c$%n{`is7^$^#~Get3Sq-xu@ zY(JP}kh`?S1IXh`7T)920y0`@GF;9|SdF2om(%c$-%DZ5G0On}?v+nuppmlBsi7VT zVYuXX#0lsX=Q6Ac(toIn?SiyvYIPSRTN5CSK((=eC378NYZ$}DAT$&;D$Hdnh<}B7 z{P8wugy>>Av=MEN2+R>i*k%A1@okPWmzyelFa;npWbiCaABCwedvbQfe7=G}rxWYtgyWwjk&immqNVn$@3X@Bw$6_|Z*7mT&YQX()`dZzwDn{un4xP>L z>;x6y3?fDVVlw-}Qf;3Xbm5u{02fpxnZ@rA*dBe`9Bjm|3=o#?GLW~0j`x4ssyaeLq> zouq5VK^Nxuex9i5vvLiEyNm{&>7qeubh3g70{DR=DQl8%j?~K@g6!Hz;NlpUS=1OZ zowgX@(^iG=QsQBMOi5P&i{cus$2ju7rYLqJ9i>L9MB}On&p3QkE0c52Yzk0#+~dKD z?Q@8vdg)J-%*WphGJD}GAuGQ)_PdK?mud^d0dIUL@J<^HE-!^K^4k))6~m7Pwi4i+ za4Tbw8(u699aDTX7keB$g4pFPwCdj5;mZzi&}=JKITCeR*id{is~jwCh~*WhnoDDz zE%6bZyPS1o-;7Nm)TS@K9|vGD1!W^_I+7dXiXc?L*8c$BJS94}!zxK%d~h3(4{SxE zwI*9j9kBvc(s3j;yW%{}&e-njif2f*@P}KS&K4U9JM)f9DFsV=W12#Xo^a>W4Y}=! zP`R<&3pz&!+YKCY#P`Q8;XGv^SYfFoBzvGJpHL9(GCf~$=!btCBu^;@s@oOE1XX*ZIs>@6ktNDjp%bnLQZ&YNWV`!*R zg`)wS4GuRA*@+wS4{S^Lp+j2qvF0)O(a=v4tHv%CCsCx1ZF~NnmN*$cPmoE`^!d#Y zsgj!7SWMd589Y&^W!VV19l->8V(9fEe5#^`DH^3G@fJ2JN^3U*Q-2S!J@D7KGEn%( z2XwvM($cY51glP0NV3Z!k?b4%{IDB1FD)}DP^LTF6Jue%*t+JqHDwfW<_Qa}B}urG z!a75Zx$km0?}}!53o5ZUQp!~NeLmRq*zRkHrJV3v$_r0B$VE9~(SxY%$>QMPof^!= zA$Y(5Y79?o2g@UQD)fLx#FBqpS?S>sQme|vTTO}V1@`>$ZhlZ&8JQ~>H7Z)ob8WBd z{P68WYLr%ye9Qu#+rAZ&F1moM#Q9CXOj^(y#9gf( zr;70+s*>%nw?6pP@;;c&sya>yq@h$YR68V^iac(BjSP$d8mz@l`LH;m^omu~XLR(G z3945@6aX&75O2SyBHoz#MJgq%&1)l?N0k~Sh22N}saDJlxFv;+`Ph$Kc|N(G_zPIY zqtmfOw&yCJQdP|!SaRuNid3kjk`NiUE`U5{`~&#CdkgQ3v#6qgXY|#Sb9m4+funt8 zwJp4$`Vr`Owl`|{>E%qivO^m|J0ViGSnT_54+JnDVljc&NCQt+v7)bv;xLJ(*Cyxg zZQB((EA<0Oxy;f+yY%a`&(m*L9DXY`RPAxfk$auDzdw9C@RvE6>+|ZGkKfUXfg#pO z3vt0F{jK?6W<^}Ina@ud7!s6I0~4Vo8+{uM#-XJCxHZvqGUdH%)YNgp$euFEAC!@# zo2lEiulXEyV;b1r52x;m4c-sO_ErqRCX=V+Y5bGVmropu5NYuW5^rJUy8=gI1~4v> zXII z52>SC48toyB#w<)D{FSMM<;-9sPb&v+uwg&I;CRi+^o-{DdU+2ri_hAZA&29$GVZf zZuo;)R&yN7A*h09Nu-`==85)J(xhqx?Q*O~<&2Fb&Mxe3)v#!3^hR^av->)ZpT?1h ztUyz^3vs7ax3ODpPUCHkIbQN+IRrJ4##BR4_gy+kxxK;l`g`HCEfsA&Jv3-I#z0F zjle6SPchZ3F>Bx45&7WvP1L4S@eV4AV%{4=6q=8iG-pzge?UhY;7wf`Jn1zwXpuIw zl^l?#VgVNPBiD>ic_yXIGWzy-~n?FKv96(1I|>Qjp4j z3k~i+%V9|suY3sTTFkHZEe=ypFiNOlAj0fR9mymU$lmy{v}A8@(-gZd4N=MqafaG0 z&L#MJ*xw9MPe)%HOGQ@=N+XnJiGu*ckZ}~Cgu}!SJmFEq7lDa>16t%^NfGqKsnD22 zzid8;0pkv&Uf6rW7=*^PG#3j44g|M+a@*S+m=^#%W2#8!9na&N)S-UdF)V*FL!RlYDsMLhD@(VUG!H+}jMhY2Nr@ z<~*J-LAIc}xkNl*cfJ&}eK06gs5_Bwt`PNzt+QC*ydqHefgDAm<$K`wMDr%I78NLdz;{dE-SoXjfut-v#+iz zLp6jplKb#+%8cF^yv9^QKh$wFlDozxeLr8vk5+>A!6nOO?n`*t{B&K^fy zRseH|6%!~nxHdeTHL-4i($HD=#5|S>Sh~st_qez=0~y^-JJU>JkN`)f_ZZdsw=<)R zOAET0bejuYi{mh_aV@$2gIu=W&D; zJRbPpSc!tS!gTs#PL9?V$FyI8#`x_^lu|et@gBfo_EYI>b4kS7yB9Z964-sf-%=hL0ICh;`?KuSbJes@A`}=k1rhd#goeP zmXZNmVOn!qi+}9H5ktwj2Jq?u#9{=L=EoelVa3H|>b-fRxyel5x<2-Nqdp zZ|jbMjF;5V1rDUp2b=vd&^OxW4h1;q2V-nat|cG~THIkk zZ|#L?{{Yq$tBD(^B_Iy?>W(fj;2)M07RP@0fKb{(fqjPKY%0WawiKh=jfumEmo@|6 z9d*irS0Y7YW+g?vFn1`Rl4uEz5W&rtNZa3hBAX(bf89b=r63*J!u;CUxMbOOXH7>6 zP)1evG6q|HN2W5fvl_&PC%l1xK&n7J9ssEvlhcjw3NQ zP`qgM#cQY@wATokj-@x*1;^jG!S0fnO3zI748@IxqidXGneo@%O;fmP{s9a2HXqCxMM#ewkTXCNbUHc?IophZNmE#Dqysp;{MXyG#y6`e6J9cG8le0XROM z#~x2A5MOq;G2|hjQk?Y$NQeqcTNLWt%v0t8O0k(u^pU$B-<~b9sd{N6jr2EW^u-G^ zr>~N&=BNM*+BpduZ@wGTqG53bD>3e96tyg#zByuqmi%#sE9u4wM^v6MKx}b9>3WG{ z3nb1jYXil=#jcuo@)#-q0=G$U8 ztw~!!73@y?U+s$j09^GXwAA$!bdM*As4JEld@=pbBYZx}v)t+vQYLD87~I-Ix76M3 zjYxWVj~~aC)E0B|d`bKW+kX^{!k;kA=XmHTBrOrNh+5abAJ+q`>+0zkQcVdOY??^m zj(5hxLy@jgPVGd#Jo5fFl-z;+a4R-q zA9WM-nTu{S=2U8as40|+O>DAB#`{F^1SgNd>Rp zj6|3?Z)T=BOnF(1ewVh^nO9hbot@32w)Wn`1hPmZnjr3$M%)W;gk^bMJu(P`G^nE9 zb9`9oG@<}Swy?*Sdzw703(~~GcXudvfZ?>2u*ajMK`CZZ2|N9La85uaBWp4C#{_Bt zB=3A8)qv2MYBe$I8xTJ{51ullh88~DVEk4JKw)9)>4ACCj1i@^F~&U4`(7+hKez_rxX&Ts9XM#}B4GBHtVq#I8RT!OigMkU7Id z?T=iXa*L$tVSTZ{#|`6z;#XR5w%9{Swh+yR%VHE4Ckx*SM%xkfTO9E*#RzhiTKkMG z9>a5pVoWGXFKlrrgOL=J4avt#i`*Oxc}d#m3yNaAomhlH>VJ*4_-bc1EDj;bI{|xP zJ~=ns+Yq3=J>y#)6CckJyi1Zu#{=(davf?`yX|{pqW$o~HQL7x-reyigRL&z#yq49 zFw$82W5Mrwp?QhqyBC8HzQhpvwRZ=S&aT8O=RIb1?$imI4`}tJb*U~}0G)nsHzbwi=cBzEX zya-ZAkOMm~7AtQn6LM|^xi-ZNvi(J*cTR{31o|KpIWB3I^bT{<+0)W3G;&Kd4O>sF zi5Y=GxUjP=h#UE~#y4GQXx=J-5ZL)hzLpoT{{VbjI+Lktv+T$`Xt;I^Z?;k@>p6|lnW~s=dc$3cEPFT z)euxRJa4te-|v9=Tx}j|`c%p17gM+v7r*C&6Qd&lx&Q{uLihK^%!10QN{3Wcm7-ll z-HCH+8}}FzBua?&7uMHMSROEMGDHzwQ0WDM1n$0{QGnT1AT;tLkXSX?fxx!c`i|J2 z!rM~K(Co+wEUHD65>Ku1%z=onjYiiEZ(a@_%~Hqyp89n5;|*jA%bFn5sDy33&flK+ zvJJ*l4+~HDRX{2_=8iceMFEMu$lx8X*!p(H?Hn`Z*`-|dEIcWt6K+A*bz`G`7!$EQ zjxkS$ERg5sj-izzo-YN7ARC+7$JcYVH{6vzUnqixuAwR=p}i|lG1cQlE}*fswF@uP ze0=NLB7A?M-RUm=ngd+4*{@Gj(ZM8?w3N^0(BL+Mrpy$LfaiN-9qNp-T1wWUtDPOA zsgWK_k~ScMZ@IV|<5lZw%4T)x_@jDixSkmVfY^X=4flW3B_fNjaJZ`T?O$9_(V;8;K5R5FOQdX+Qc zUsTZ6W${!{M;Oc`p_ZDZmCHt`O@giY)HnP6@tbt^Wjw(+373*$Rby>87QYzW#KDdzvy59rj?APgB5G;=t<-dr_$bBWSte4HesC7=%&)Tlrcg{P#9`v z-+&0`*Ba(wNmUzFOp*lwWRdCY3zChyDJO7kr-C{5#V)Y$TqCt(5E?E*VawLDFM;XV z7D|d$1#Wf=_&_(c?$-6eJhv^Ug`$Py62|jP>l~bhAbO3+z4qkW40MCNd^D7+OvzFy z1f((mSz6i{5y8|CBKr&)%9d&gvWX?|ria6EF4iHWj?up2_PlmI_r0-&Jg#Ug^jG0% zyF)U*ornHnhB~CW)z)~Wqi|Zw_>H->m>s{>?SfrHJaySz^{zC<7GvO|5xvSCL;nE7 zvHRl5lf(0M>zGEODG)RWc2b&`lHQwwK7#?XxGD1fixe}apw%KkM3rUOuBVL79Dz(DV%}RVA+FB+q{`tSF)Hj8!ytdi~3vn0*m zEX?Uz2fa*xy@as6h}i1(xAev5Gx(nlUDLE@OpD=jImJbG2C-GQZAHLiDEs1%nBQb(mE{!llIAP?t@`HbKZShU4jJyJvLz>$Q zO6#t^$>aEGnr3-jK>62Vly_^16Tr z{{Vys2m9kO>WZhTB9HcME?+%60Z`Ga>zU8-F=AHdwvYz>@oMSWp=6IO(3(U6gI>g2 zcGPdN2l`^n_@X#ycPUXwWPbgZ)KsqpWh6CJ&ay!=2_s?MNZ8@Pfp@kupNBsX`gOA0 zpQooY(pD`vK+=FCJOw(hZ#Dk_Pkd98VW7_6^Ag?veaM>WJ2KY_!=RNS* zH{$}OEr}RS@SEe8-yEelTOC#%@WCg1EpaLnqyxCZ)NO`CepphRa+K%_P0l*jw%BZ) z@$FdUA#&Scw&M;lz8Y@$AOaGZmvC?+ZM5xke)y`%RNBZ=NI3LZm`#_D?x{fBHvXD0q*Z%g9qdP7LusxRu!94l*QL{t*fT@K@X zGgZ`2rO{i<+kNp?B;MY=vCLU#ON4T(JE}@}G>XZa%PgFg9ryil8!^o$sU#iy4&Qu3 zQ*W*kn4a#55%n;d*uUqqi`DS-Mg)cGGe5_8`0^5&FaBOY}z6xAO zGN^ww&i7Tz~flB}JT#Ve#}Bx1myUvFG;3Zjsz_`0=neFiEp)zlbSrSd|?#NV*( zi206l`;|yRU9^U7ZTzuay*2JSLbQ6DS~V4RsH;fgW)d#k;;mhqPc?sm8`zO>dtf_e zj~-QM+U&%Q+jaY3JoRqcNF*C>c)m0-I!OfTRC2nmpeZ}lq2`#Kd)OAX0kmWfGLh@H z2_(**U~aaxj`&quK|CtTfhApvjtIw~hT#F7mL#M~OS_>23;nUn4gkc0zSvEM__zwJ z6B;+i7+cqTK32l`NnZGs#W2F-esRqs*7%TDw%9>a?T!U?CIa8SIiOqVhxFSVDZVDx zQe#f|@lj!i^m^mPZF`JGuB6VLuleKJ1|89BlWSpGcE?(j!Cu_qHs1Eb`frXE^KpU% zC@GCMvGvCa{&;*Pjyl(ZeX$^^q{g4+j%m5t-)uZk zaCsbKjJE#(Y!;xplO%d$z<2C$?u+w$c&8YfP?`hN9@B?3Z;pf>hXP9KD;iLK`0cDc zu%f&F08xbn+ZUIkw3Qp2C@CY*dtq4UUfg0761WA8@Uis1Iv2J&K-&-ylDwkh3R7;_ z?wg!;+wG3!2`j*Z+v|?4uejSC3N60F9Sgr0ibA{q$8_>Ap~n|EQ0mBSxeErv9S{Rr-&n zCC^SHi3m`)Td+Uo_y>`*N&;<8qReU{sud7Dp4)->Z;b~bube`!RV%z??O-JY^9DCq!dat@w7wpX#{a&;dUhLeh6u*{CC`jVdMC7+l?MZG}7; zRT9NjO-mToMz=dydg01!$kJqtYwRQ{89*E9JPcGO&E>0I>mR+O_cDy~YjocPN!#Tz2T-^6$W`kWWb^Ew4)5>^6vyYOx4jJrCko|dKHc~M*_ zy2fq?+N$ZT?EuSl?r$y4ZqoXlqE2FlOL$umDu**eNf0_1Km!lu^m z-w%?^wj>dcMH@)^RZAa0F{IN$Ru{r-E***&mDM6b?#E>qxn&;@vwEr&t*B1|Hy1@C z%tzDv;{DLw69!+GIj&TdnGMNXFyHgz82P<>7agR7sET?R6IuX_02`b)Fw%KAi$|aZ8hF$WJl>dy@pt^OKFsFU z!Wt(0Aa~~y3I{gSM273XCkbenjgHuyu>dW8aHWF#>A1&Q5gnm%(JK;P%t`N$R8S)^ zaEq_8^ubq%X&it(G3Ad@_wI1U%HVBxf+~sumGtd0Q?pe>lT}H75>`M(x?am-Fe+b`f z3Kuug4>wWmjw_r?ng-GjY%$;;OhSq)nuZWuTOM>}+YPWI5QLJIs`%({d^B(Aj$Dng zG*H=3>K4Kad*QNhlGvUX5|+(|*zb-p!U@MAJg(~Z!b!QuR1$W>o)Zu@z9n!3ron4t zjLbOa6RGIhL#E$ccA|uh?Yao~i*NBfO2Mn}qpNL{;C7T64TpjK( zlEbzeP}p%$oJB6Q*)4o`%rNT2Po_Pmat#3=M+ng;BdSi+({7Z9=L^(^1ds_H#MZJiyJmGOAjqxE+u?jomz6s-P z*U5kJC0iAL#QNA&mP%M*r)zqs)PGhusAlTMiXRnYF}tWFZmb2u-`|0W-xX$xqv8g6 zSdzS`_3{;FJScl^M{iGTF$krShxU824QXve*b)glUxRV{vF%}Qh?obW^D>=JaYs5k zGkU(9%z9pDSD>Des-iNzmYPHW+ZGL#f4C1P;qLwOYRnaKTmLz*92l?;z=N0(8 zGNz7Ix9=1yhPdZ*Z>MpCY$SNKIA(259FJqU_v7CS5H*k0>-_xGI#OB!haQJ_mP8AC zuQpyRNgVBgd9+L;5-o#wWja*fkIQ@DzwTm!KO4ep+~1eA$^5V*G^vcmQ%+PBRo1>+ z3!W@{cg403I7T^OkNif?k;~WNXO7$50~V6 z98XEEp=oK}q$<7qM`gK;gSfdj81Wv^LJd4~Yh$KJL8S*c$z#mAf~Iv*zS$BsCmk~A`E<~3cIpIQaKmcC$1J=g@k|_L71d_U#-K~3HZ@wpI zQnCp&jaO?Z`~G-FUrb(8QLFyif`a^?U-!n7MwZz?3e)}(<&jh6H96}NR-L7SMFRf- zyD>2`SpNXzsy%UardoQMbb`I(2CfE0X8tnj11UX@`}e)@8{yR#?Czeb%vw2yh=K)G zVzMjh7Gby`?P55;YvRXNut^0I2n>{{0aT1?y_6{g4b8c~BHq~Xd6M{X_u z=`u=*GX9*Z%chP8O)Yl}Lk%QsZD2*ovF7|>zH=-Tk;nT$Mzpib^0F$6_>Sx4BHUQ7 z9C~9XB2ZiaH)}^4E$r|R%%e7=imjGUEXb|^52!qM7Qg=hRE2`#fO+Z+0Cg>`ax88s>inbu6r&>rprYBOl*Yh3ehKjgn>z2X`Y<>CnA3GxS!5Dv8Ow6$7cHy# zdE+s}EDPMR7dth-ipTS|Bj+@;#g)%0#4|2cJe4!7RCcUo(vw67fogHef)vl$(>>TWj;iD_LNxrx{DsYx%6U zsi~?1a?v@{asL2~?exFCE-Mh8F#NnBMT2QJ2l{WmFH99^j+It*j-Nb+Y;o=2I@L_$UYF4o{K*X{b) z;tNMCeNx3ygmNrt1fZJ$7S|q}aDS#6=-DR6eUjSZ)3NTprpWq}CC@lkKY4 z!BDMhfJpTi`LQYUIOz>MN9RI<7AYA@pSv55#`uLEd7kCDy2n9KAf7a743S9Ds+*2M zJM29>oD*S-816;!J3fcPlQoW(ww&@11%1WA3i(dIrt+k&nkJA*IzXH3tlit& z6s)V_USlrxIXw$P0dEy+JS}z`=~lU8W5B;71AZ!XW?9r3Hc^$*r9^cTW)aIIQZACH zpqt<8YzrW9a1IJg&C|ClTcN9tvXVNOt`++pRE>!D+!2R~##`{$tZ6Co$nyH%8DeUZ zk<>kcrN#W@o-PjK*BTquCB>Ukk#Ndx2=xck5#YEQQYHi`ra^|?#v**e?n{0iaSiK} zQvoKx;KnxyP?naf-fJFrC? z`=3*d&Y#kxmYrKHT>h&ZR?uv&<~7eEynTr`z_WZWbG`5Fj%nW>z9<_LXfGcu?v&e- z514O`Z|R3ZgWDV`J#gv?WTuVI+zfb(EU$CMI7g<~>Iy9+j3kQ>TrZx+!ydLKl-g{L zP7+k=!-t%BsO@o%T%4zuLWMhv@G!Y$CPGBE9j%5eH{RGu`fY_6fi|2aEfkeCMC=L& zx{rH|MQucGZU*+lr0sApl6|n&urzEE-16>II!}Bgq1^Yw#Czj}ZGPAwfSuHBJ@MkC zd*R|Z!btjmd=;)t6d;|w{qGIYZcQgy`P=u_1;MM)n+Ffh&}8 z8L_t*;f(QYNUxcDkz;N4e+uiPWV>@XuwoJ)qjw#Db%^+r9C^sz?~^OO#@V9?&gpK1a8|?CNvHE z;U#wdxRGJT_~Bn}G1j?9(|cbYC~t?#dA+?cz?hp-qm(zoN{ipNB$e3r!dZUUkmU)D zH#{78rXOXt{{Ws7ZSP^mJ5q$skOjRl+j@hCYzD)&I22>8NLaXAgWA~WQQHm${ISqB z;~G}CZ6Q}|D@}$MVfV*uLBuGuojhSdZ^jp={5a@Qwm5Ev(_~xI3In$IR*T=$3krQP zB7%ZbdJX$q3erX$3y$f;+Ure~^dC$qSA005jj`Q6fSvIJZIG8F1@stL0BvkIi{98) zpVty9(2|+}eemX+@oS#=TE~B;}+p^`?Bs9DN>@l@D^#^_)jQX5&O zQ}F7R8s~KqFn=KN04hF%zAe2u(0Nu<;r{^BiCHdnI0W4H#lD^d535MI#N<`Sn91u| zQw=V8TQGF!BiuC&Y6#jj0R?~{VRTtwOO_?Cz&)@=$_^Hdwld6)J6gUN+g^qcqQGKQ zaexNcZ5t0MHs1o6)#eyQ?S-=e&KZ%w;~i>APU{voIFB@-n+ze_k`4ssQ_m4T8W#q` zZS9F@B&9v&s#MPmu{d%F;ea@x&eha8{ESiNrDkPSQ}2CPJzpJEP)f)~wzZhzAg5;u z^8^`E*C&E|<5Lx)FmG^HY~;vAY*bk$%%@~%VTu@JzU~Qo`ubp|Q%Lels$~FQe*6Cb zOe%_)J0B1bs(m^C0BjhdMNO4JUqOJHU~_aIF|inYAoRnD74gV`w9HXl+~M_G4Y2BW%!J!)HKzM4 z>bltBnSm|sh0`|H_3wwB3pff-xW_5vD1s-F_U*@9^#!BCswxPc>lB1qWs313VVnnIYC zCSq6}jvHEXH@D}BY^D1u*BhG&p1+`BaBE3tqz)z zG!`3ud*Ed76MR`kIAgx}M3j+}_;EB)5DKca4miFVc$s;{rRfloEo?`ZFIF2|;x|#D zR#{IL-v}W6aDH5=ijn}nBOJYufLC*lOYn*oBR0M`WA*0+W};<5vA!dgQ%fC!w~Bzkfxw4PTS!0uD%&IEIlv|q3+D~HsaWW zu~2CT`DRxm^2b6EwkI7N>fa42t4VTfF&36un2icH;NcUmn&4XmGz}Nz;Sii~8ESv<~dfBvicl5nE+Ii6onQR7FbDY~iMTz35KZH{IY z1tkYdrI)wpF$S6@tH}IncQLg*t{e_c&Botx`s3Za4GrwP)MT4erf&jza;{OepapoXw5V5&G4+wX`~F=~yl|q$_D8FI_w-}^XqxeywAH<}ed;b9I6=894 zHjP^-9Qf3+gtog2TH^NY@5VL{hjqGWDze$-Fqu@y+qhJCI7>QEudFKWlnnaG*%wjyr{h5TjqIwebSGFO74;$li96 zz>V~R0JXk@^}%`B9T`Gs)OTBOHv<>j8)IWw!9WE~?=K{k5>)|Y)Ef63at7G1=Mul| z5~|j)1S#NxNCwz5Jx7NW#=_<7eB7I2ub58HR!ELUk?&xjl5M?!=MRWmt#AgmL^@-n zD>|x7%2=lm#X$*>Nb7WYHX%vuG=|@O>^tCoVGCvT)Rd^YBrl?1M&*N>e@tyZ3+V<; z)0B%;i5JYD7FRYVNj0I*mX&$(s{7B2zm*O<)P>4+8XqMciu0Zz12zr5&CGj2y z3iGkQq}O*^?@m(9OOet?G)=uUQM_s|dtYn+0QF)@K(weNq@F_>IF=S&Bxqm{VX~Xs z{{VRJPR8kxnLIN#kcVB)$~XNK;I3gcEBNA6Ws+DKNKjfMe<<64!)xvL$B=u7l>FAg z;93{b!nzE%B|^pHF`#=3u9A$}$EM%{eef6JRV%hkrk_-DQD!vtOb)=Whyeh79G|u> z9X5riGUSQ%7~xPPWUyZ?ih@6u1!k0{u6gLDys*y^SCBTu_F#R82ippX!^YG{2+PZ3 z(mSRy+^U{@!bJcOSH#juv$f9{2k|p5h7O&iV1IcPVRa;0{vr}j)DSUp%9$1_cak=W zQ4;HW{vmF5?|x7Bz`u$#BQ(n6pcM#}41!o&wz1mXfd~0vkiFjY%R46Oymtb#Y>fC> zO32bJ%*dPV=5OS8wec)?n&7FN$gJ-^rM9Kj%JERqx-FH#+ljf|=` z2iOoXWT{kPmjqcD7O2&@ux}~T@9HtWe5ZcvE#~(fm423l)b%M~*K~_YU$Zv<0ML)V z3}nVwbEbx11aqpZY8JeU=stuGvBXTCDW=XU>LVdS$cbRbbpQe_>Cg4Sda5ZU@S}z= z2hf9mvB1Pb+!{(3w1ISsR~j6$zIwQgsii5dF2$_HN}p18BkAjjl|Ln^<|w+USOar& zW)?U1{V`n6YT_Adq#94lj|xT73DRwL9>ATC*99P``N-CyMLs+XTFb~Vo(hU8gB71r>DZ8a6NvF;(Y0+PC{fJPhAg9XBo8nb;^PvsDOOyv zHVb0fv}xsiy|6bju9BLuVll_zqu5Fo&APR$-j?Uy*cj}%wM)3POw5kt00}|%zA_dH z`eR|`Cv#@EVnwhzp1M53N#oQ6?MfQ@6c)K4eSv?GJh-spjjSA-Ic_-L*x6=b; z%j+t7macke!mJjVT4QE*wb@tHkAB#&l%N^3^-&}msv^-MsUu5ivlY1B{qQcdRXt#= zBr3_UR$>4_{-zrOK;y8tt}Zd#og=bC#f{YZ$#Z)6>ExrY@Tp-^%t7$cWCr)&eZl&>PQPdNX%!W0H#OQpY_Febi*#4L^(*0pql;!bI zOzBe@ENQIP(51E;?QQTADEZF@qA6}!pgZgl?hbT z)-Ct29@jWbV%*@4Ks1G+$=0vp3RgEOq9+(RR%MsiM}YmRvBjXYTz(i-q7WM$*I%`Ra!6|Qpf zKB*Y7KDdrod_ObA0&AK?iaUT=jex~|hp6MNog-9^HYKbJ7QMI^91=Z!4m}&Ej~s8p z^DyJfl5L{VpuNsLZMfSWf=K4n5xmRzl=3j|hI`@B%*h+6r(~HTd~VY5x?rzwTyQ2N z6!$phkbB<;s31|wjCiQ+hsXfoAxG3;tx97^w;1srxOjnt+hdNk$)KZyj%nKd*mw=F zk~Y3MLS(P55J48(58DYN)0`6I%P*!Ar))o@cH$97OkN3a;@e)xAz+y0nNk6*Sp6*ikA)Z>MAxxz;_s) z7bx`-!vtnooJSb7*|rxu40eJ@>!E3BBv*}Gp*QY1#ed>8TEUaWPS>?WmNwjgyPxTd z_*PZYlN}vg(L_$GD{N1$GV^oY1H)Pt#wSe^#jKv|+E1mhrC(e<;d6h!J)?cG>9ty& zNuahIeevBTxV9ctvHIakmfqOwQK>Vg-nde)Yi;X?bb5Bjv>&!46$QyCfMHe^;BW7R z>9-hIUN*!Xlv+SvTqq^>{cy0o?Y0zF%g=mIbS254mOF2W`Be;+auh`jN}CS*VlpYX zxZ~dhviT&0uYeny`8mR;bAwKvR0F*gH1uYC5hRY3I=I@*0UuF;)j2k0PQhiPn{jbv z=No5FLk#qZB}}?WRVtEp7R7-nC?0iB+%st&Ti)36PWF~q9$Mzw*Bv>J0Ebffy=bbU z3eQa-2WzsNB~nFl2E-k`arD(zOHA+;Fve8wL0jURopfa-Mqt$q5~Lt*smlR}V|!H; z#-7?rpQOmo!fj+RiM81mOSOWFZrD3b(-m!uS@v7-`gz_rswose z-$2}v>5U61$|$Ls78nr%b_0wC%QKG_yuh_SBw$=ATON4y7_&Ua2!+5Nhnxpc%F2+2 z$bN|NA%Tsy1Y(|KM9@2S!_i8Fn;Y2TohE1^s}|H%whRu~n@^fVAH(sNQ*IZ&F`a_? zwSAc_J=L~30XM_zAUt3dElU*_IC-lW9UzQTFpz0j5~CpRd+muTpxd@9uvY-qXWQQe zAgc@k2W$(Yb9qc;jdCd#$JY+rTbx0TV0Q-&__yzXP1F<85s2<=G0kM0H#>z=PS}+N z)SH%Ly@l*?0OOBli*AfCc~x-oPUy8VjT~Y`3Kl|d zh_pJjC~f_4K_dX)8P7YbOdZqFpIl3b+;+q@(l)*yiPUTk7OVv^6lwRu&{*2|U^kb_ zan*lZMWzCzk?)TK+YPIWZ_X1WmImD8ms)D7+--a?mmCZ!{OxmvqT*8dPDV|)#|R~^ zG2m^^99vrWlwl`90{!vt4^HR49QVRl-+V%vUDTiru-Poe!;C9#;|{|EIRtPqDibO@ z5rwTeU`ShxN$@oLo8m+vV^AB5W0xKj9R`?w8*jE8jD?iU;1h1xex(DT9E?M%R*7r? zA485&*>bYC#Eixe4}V+>V9eZNYNI!sPC266k+wR}5o$C*qj`nKC8-XU1Akl~p*w+& zi>nUU@l66wDMjw3=r8)9uZ8hOVf94<+=I2c~obgG_kl8Jr=@yZHvHUMGa zzc`Md4)}FW*fx|TF1@szMZJz6cCf@ZkYAs!1;t2G6|m~I*oLo%RmLP06s9X}j*>AQ zUkeR<7;+j;>~Y|~OeIfzEF2Zu6v!Fo*|o4X@hd9tpnj(9j1>=y(QNUm>>D%gwI5r^4H2K;uzb~ob+QKc=o zxZL5FEIziww$d-(46rP50H|_~>vMb{rX-ce1b8b-(`qnWIIHQ0{43$ah+m9xDnnB$ z4jn}&4=fv74@VeLzc_@(u%=aZw|so5@%uWTJNTbhOuw` zfkmd*QyFoSF*VV&&Zht=wbM z$O~dw5uY+nmlY-kWqVv%R=@+k{={V=@3M$lCXwxR*k#g89O_=TD}!$=5`E=Ga2=YLEzl~N$l;rMRc z+mpq<*lQXMAR@O(s(?HNgL#JHz=gKg-yG;#7^^y-HmGmiQ{Gdx_u)_HhQzWfI+JxI z?nUiy^YzBZ@XMpJ{{Z7(@ zY|5T_5VVqb(d>kc&5v`6HhTw$nZX&io<$sR3E%phZ>`eQ?=@1=K+!0K_%XBDH3ncj z-N68yWSvn$l2ubxLP0Ug8)1D*WBiE4JRI2NuoEVM(UEDnqbUlaw$9gGj^p|aF_F~P zm^>dF$pI)9+b{#u>4&Q363memT_~FcJ;wI_U!Dd_=7z1(Psbp2BlxVX$NAd~Yc)2C z;^C}Oujx#$Kc>zz zN-BEa59Z{ki5tQu;fmM`g2KZ7qZ(&T^dCrc{y<)mg(hN-&6rdw$uSIs>j!Nh58+TP zZui1-&Xzf6K*5qw$OFNaq*E~`{`5ddq!Ii&m6zz)Inz}wnDo>yEtlpg<2K}g!pDt> zxH$RdUs0M%^O~}~hBg~n{k@ibEhPmuVbje)G!*gy^2Rkk{qR;W43<1FUG8mtR_7G& zjr0|gbtX$(A$cNN7fBsQ;nO21zvsRzpBE`JT(_)gGx}&1A&O5GUK6M&umF|qx|Jur zf$xU8u5+EfPh9h9rp&1-d}h&c7Xa<;&$$@X#c^R|fY_p_%FEQ!tvx4Z$)QzXJZNLr zYi;GX9*4iaC#@ics6jKZe+$S-8vsDC+n(QC1n8>om>F_O0w8Dxrct_)YXg2a2L<|) zp0VjFW`=i)YDn5Z>Ta?EyY1g&d-HHHN$o9`j@G8_sy0KJLhwY76ND&_;#$C+M0ViV zez;vp3z_LqrX$MgHbH%eKKx)VUs%+0M=eoE;6L>7AUC+!YT$nt^yde28hE6u4i1u+ zy0GWiZ@q}bJ%B#S?L-Pl>3L(9E{Ua>JTSb`T-mM>*l%w^Ve7Ul-w|o5{$_@%1UeLH za5u0V5%>OhDbf+gMESKam^71DGo3Hx0HPAxa84K0bTiFSm&gM=UK0rshnnH6EO_Cs zZ)|WPJdH{5jZqebpLGsev)9n(F~J%=LI)s{Eh>@;{V#>)vb=P36siKef!vtEZw}f) zwfE%S__Js5K;j&-6X8?^9v-31tXsDSkG242q#Bc{f)&&f-}y3*{A@p5YePAdHu&9B znlB8vDA@`J&!t6B6`ahD!uBVBzrWW7vqluT^%~QNSxUUB2E|_CZS?lQsHm$yZ&tov zA}~}MS;-2@03EnCAJ-F7pXRf=I=6Op(JUz=8v+%U*ZPv*mK89!>L<4e@a(`nREliA zDvb6(j@0zkRPrLm=E3B>)Zev_r#Igo&S8r%>CC;-03M>7#)!u$VDc$8x$S!uwjyRZ zi__LS0F1Qqszu>!P078_um=-c{)46RI#p#YPfFpLc_+nU57$W_o(-*gT*oCmwZXu4 zRSGMS4AVlvrA99qHWpwuZ)=PymU&hPvcz_?gdy#^#tqb;<+r9KR8oe{9iuuDSeVBb zVS8HNLx@>faa#|IQnEah!)tCCScVt$xZBp)*aSFQ%r?@kH1z=_bXeJU2KL(a+vspF zHJzlYsuB{>#Id{}wZSAc$oD_f9(wNq%&>)b2EY?zesA``+DyPzX0xNj0MvV@Mu(_}%-h}&Yd=RG0 z>QPn{n|Aa|n;UL#>!e%hfVBu>yCix@*?)(V&%Pxwl9`#BGO3{oG5#=lBNmGqX(3(u z4we_AsH>GD7K=(dZ>Lh8KQa2^%prBCq7PwrU_bI(arux&D}5R&CF$o{X;llpn-jsh zl7As@zAenfpr??b4-1k3^dq@vA-U;X02s2m+=(H%tn$f81rvq zvBbji*X)KyjUf$aillM6FYlYgQ@!0tAdgeP@81D4JjLj1_Hva(L71jB)HTh>v8h3A(hBtzuGs;S;yAXY> zLBkm!l3J;>x0MtYQZ4{4xYo=dG<=p$1YwP@jja!+32A}7mEtGrZZTo-&%P-=J5ePD za`R{;GOPe{4cOfMZDZdW4}kVJ9r?#}*;?4kZ-rB<_ z#~KF@cRxi!oJwxgBTqf~ z7|yc^q|GxYsFbqmQ=}H!KQS6tzi-zW*?mE9DVnm0z$>Q#qk7Q$J5 zyJ99&n`SkgKL>>sJwiiU3==cl$ce_o(%XG7OGi|KamG`KwaJ!I#u1|u8FnAr94dIhYFwBq zI6LEkb~ZNm!^8`1k7+mGe08a`&W}tbfy4GU$BKJnt#V{2^xqyUx3(S92m9hSX;8E| zbwyi{1ZZ1+=eO%@L2v@k2$<618at|Y#Ys{sS`^X?nHh;c!n||uiW0AiqDe@(^xDG* zdY?6X>W&#@Wbvt;qH?QcU`^E9?nm1KBBp8M5-AqnYw^FnJkD-IWs_4^v%!JTz}6l@ zu*;VbuooC*s2DNw?QC9UrJ^RvqH~@dXEN_=weiQzB;fA3hwg(SxQ(T1D zK@~T@KT(AQxE{B`XQbSV4f|m~CO6yi!^G_j`K{iaj{6UBR!SJz;#35(_S^KtgOtM~mn*sF9i^2bKndVm z6BeNYk1)18Bjh35FH!?*bpmXv0#vLhTnk>@4@@?4$ik7KcL!}d91@bQD8y*>w;_MJRoq51^t&#NfqsD8;nRw`gq(x(l3lg$$jw)sOr{886lJ_k~lZ~@Cz@6 z6EtbOMP~!?G29<)X~m9aW~mP9i>A=v){T+O=B?B!yhg;?Y&p2VsOb{9ZGVN|H+ZCqGW2jFV)ky>N!X(VxDU~#;j&H~w_E!8-3_D6YT$H=O-|Z(C2f2gqpuQNKCOk$*cDZq(KSwziXB^Wa6zkKN@ZyD zDjmxXFcU|p0$WI-lB{aFPgK63qgIj)!8~F{S5`{tX$!FA``{YaQ|cYofR0qv#ZHCfaG-jeSGtd=BNV1MudI=4b{@D9)OnO`3nRFY-;ZBxRVAKTJn?yv z#fUqQJa@*gWF0V6&nKiorEzTX!I|o?J0Ee0QC6Ye z_z5J4r~?oVB2Qfuc2$sE`W`V*V`}^%Soe)Qm1`9NjmA1<`(n2SXJ7-c2kVKH^@}Up zSp4v}V>zjf$ZL^xa84dp7#3tagKJ^f=N1IE6{R#h1V|BuD-1%0V0-O}3iujK4z(x{ zapF7Sl|J}ht+B}MIU0i7@rkeiHXLAj$QKVsQSXjjvLR*X4M@r_b-o*pZMQg4I)U2w zn^8(T$js+K@|-m3-*Rxb^51J?z#C#MN2f$xNwt%1?cweP+bvR}SAO@u&5 z4isil&LAv@*BqW-F2@~fwo@dXZDELox4-FzJW_k(n)kc8uVT34)2Jlio0aW|(g0fkQH{{qBevLKg^ni90*e!fbp$Hy z&Lj&JH}>_$1DWQ6N~tBOiM7ui!xQFW zNxNIr{c!^>t$1q!)6B@=7LDURYv}+Rjn>!a+Z(OvvAvpViplrc80}ZLqWVwb_gv8B z9}nuPvTV|lqN=KMLleO!y$xgHaotw`0GP+hw6%KWn@Ll7ZRYm=oZ&gnV?1>5P)j2% zJW5Kc?xDP)h#scH^uW3*h+1id!MVS<_r|6U5XFf1Dz08bvR`FO%|psq%nV^vfVSM< z5i$d63XKYUO+bqt03&}wdBmE@b;}|~e5)SzChTvw^}`uA?x`;z({rh|=Iwji?Te1H z9UoO(8Yry@m7=IF$UN#z``8{omIu|ctE?fyBejCBuWi2gBOIa7mHZ)r)yCW4f6KDS zvqYq{M4O%N)*uhp9U1cygzlwLJHY-Z-9vdn7u#+I{qKYH^x4*9N0?8Q75f7)>e|&v4@UUc)WU-uzohWLAV9OA&kgms6fbPm} z2)`PJGP4`A=8m%?yyO4q*bffmIR!QN0`h3n}D}%O5Xw&rMhK)^#phoIql!C|WY6>mnV4 zsqQWa`(XNCRfjjr!@Ut^VLu%0xb;=q_}wa<9f)In$8op$Y<)@5aGcAfsAP$jcZV_Sbfg;#5!x?=5wFH`&vn1%X0NnW0s&XX~M3eP+NmzVn`oceIe78Ieb1X z6m9b9Myg6GfFn}Bgn_o==jcW<{i4c_P}t)(M=Iw{h0M1%*ui*bH;+m6_<%^aRSiGaP@ zH&z>iZ%?)>*=&Z6wn%)%URwY?Mm?zWHF^6yBGob&DOxe1WQHXKb_9dDA9MG?ABOph zWz~^X%(6W@O4G`SF2o`-p$E5_{{T=iU#@$tO`lG;MOLu5HvMs?d@0FttotLLm{WLJ zjU_UpGLli$wZj|#01(}6e@s#8Q!*@PIm2SDVn$yuqPKb$TKZaNDvFZRM#dxjJ6V)^ zfq}VBQTqogT)H_m$4?{25n;cE#4?Y28{gL*lf%j~9EwVbEQ*oAAXT#Xj+P$d&H(%3 zT2x1vEuk#Blxn{EZVivrW9CFTr1}!Q%w%b<=s#RgAK1xOvZ7ds=GMnazTn^MvA=9( z&z4uk;bhgJ=;NqhNJj=Z;|xD`w&j=rOLqs`8y0J-rh)R;2=WaQs!L)dDtyAPHQRJiUrZqGRICCNuC;tig}S*#1O@X zuWi2gv1j$+axB7}D3)0xWVm7u>=b=BU@?|;#(NYQo6%)!RFl+zUBT0THNgkDC%|?SsV?D?m@9T9mx9giiS@i{fx6n?c&W=?w~H*x9E7m z>N@GGdVVV)j7mY$ZFOKbxbzk`wku>e%m<-O7T~6I)dXT4_D#&1%58cKZ+O1=#e@(wE0qEMfrTBpzEa-|pQ}>L9;G2z)p&XA;Ml79g0xHQ+ zL5;&{)`xL&ExDeCj)sZ`bBM(Yv1yxd;jQN8g^&MBDJ z#Z#;P+JMcb>PdZ8_1Fws78F|IZ*+64k;!6rCw~0>a3LrqtjufCh=`Dkn|VWa2iV&h zm}ED~PXH=ejXc*XR!>g~L6}#qgl`&YBoIL7?a3Cvy1C+^o`#j9E@OzvDI3_g^Zx*G zhwCJ$N`$3}Kv$fr!roTY0s9*p{{WW6T8dd}s#>ZxH)%8-LdppjvHdXN7zDY;m0U{V z16mY%@NL8pleg@v?sxp4K+!Vh{fC9tbMx zYaot!7eRBRk-@e90QZXwQbd)K<<&_cp_Z2NM;lx#DI)9WZ@rGkj2w~{mg(do5#5p% zOE-d9a|D7WDLhe$0|Q_|KY*Usx95P=)RBrvC6Ocni`_salol<0x9)v$f6cmen>kFv zDH-WJIMsmJt}b`qy~!A0HDgJ25 zB&+8|@kM~!cI|KJZ+rrdnUgZBcw=Wpr$uY2uwuub&l(8Gb6HkecxmJa#F61CI*Huv z_rw}LoT*CsscMAq7@2facwAjg$g%Si?_tgkIfF@YC|tro04m)*0S0QRuWY(KYal*T zCXu03AH+??$FabwpPi|wX{u*=rITlOa!3G^z0T)z`QuEgpDvdurORoR>0zglkBM#pk{;qgu@bS4|&XHrv0^FRHLA&5a~%HQipBF7X1zh=QPhrQc^~Zri_@MLEBIy8+&bG?SdK3 zNONw3rBpiVAPu9PwHyBcpIlmOz&)h#$K6+REu;kZLQE2m!I;>ys7FvVgJW^;i*<6T zp>~W)l4(P2cRLaY8SHNl`SVLlVg3>MFqOr1~Al z-vg;NiSsz*k)nSV=!l}sJqOcl5{gMDV>*IFh)u7sBLv|`QdzQ4{S@_(g^@$dBP7Jl zx{^3QQ|s^VioCgenVwBkN2H~7H9?TaZQWO5p5zm^9Afhx*A|y2tUDSba>$x}d zvE$Tx;-#CzGEX&4ES7Onb-IgcvjQ8?jz3&l#(wsbC?&M18KpBrH5*AwEjVp%30nd; zw*AN>d|A3~;%TLsi|V(SZGQG0hTveq9Q4^d zOQtZ<)Hb;Xak|)Fwe5`wG6byC-Bx5pjrWG_f zWkb_iO34a3lVXGbNw=os{I)1iRYsH7GsejsEK3^bKk64GeJ#hPCFk!nFy+;810+<^ z-Qxpx3U&KY)urV4s@#|q!?hl=}SmbN4n$&CPZ#|rlEhls~C`(v$g zWT`mtUf6sl7|doAlob^uU&4&Ny+{Vw7d!x^tu7!1%|4?ZWg7!wz9mZ^?&6b5s~FS9 zjd+Gqpt5~8xbJL5taYZPo}uWVN+b6@6m_@_A%u zmGobW2J(-~2&SLRYLsfTlu*NB!MEG;#JCZl>LMzXq_Mzc0I%ULM?X=2&kCZaSEi?k zwbp5yNVTnYHnu#p&jrMI7A%YOa1wf@)-({%1><;y1%(oWN?iK#A5f)9VG7QtSjnwF+2gIHvy zsHKq3vLL!@1lhFuW6sOG?ymm;>1)O+Fp-tkRmLZ$kV^1HOz+^ZECZ-4NI$}E2tL-q zV2bo~)k+ye@rEjYgxhia@H&alhcwKwtY0r@jEfyi3AfOTZZJ~6GNKt`Or^9^Q)`h= zDlTq6G5U;abd2d)mLk6{_B(L0I=&1~#WGi)YWt>0+^(QVT64Dh5VtCtNP7_ZI zhNr`ktf+uUKh${x9=$^Cu3!F?AJ-m1!+KuWE9_NjS#B&3d-lg?sf@7!g~7FlII4Wi z`+1I|*dNm!N{Lk8d*8o&dq4R7?$?p=T&zZ@{{X46<*7I40L-pAJo;mzr15SrUgn2c zNB(T=1^)m%Hq(aXK(~Hy9cmcwf71&U2iErIYTqp<_Cu(t?6BW%eX+q39{&JuTtX7BBL3L-j6wWI1R-)8Q+yG~IB_G= z!LC6ZVjOcdu5Nz#bWTS%#OQYjZk3jcJ*cNm2&flLhTDu!ld0Z}%!M$ThO{MBXIY^aW%7ovngY8HBWN;w_ru&Hn(uwgm(v?`vVzHWuF4bda^p z(vaDl!*+;O%w?FkkcDmRPQw!a0Bey#urm_F(CxPv3`;jBk6bF>rWfw4Gzj4ryu4j^ zQ|W50C@jxnZc3g#aCVP1Lr!5bTS@YtY*nM;_>l`9Z)_@jHc8nWId6>ev>cwB#Ei<* zAyO~sPT$K6c+*GXLarN0Hn*qO1G0?9oaO6FZ7!|Le-;xo%S>6LOA>pY*z@BR!bdcZ zlHEBiEE;~RwFyyCbzt;q4d_ziW zn_D@*hZ>8E`u=#cBV>(~c2%P>$om_p^&LMN>XYUIxZhH*H^A1TtfwT!=U-5H7$H#} zV$|T5F|jw;^N7y1QPMP(GPvXqf9;1t`6z2}KLm`1NBylK4f%-$&az1EaG^QU$jnNc z95EwmYul60^v8zc{@B&quc$s4S7G6R29s=DI%lX9QzR29xEzy;DvxX7 z=p<;(!61RoDP`bCJbFl0u{wmf@6-y@C(WaC`*$=KD)Mir2aHN6hh%GAVQUM0uYxh35 zbyYO9rY(uEJ+JGFjKhjC_*EG*C6oJ_x4MMKsN@V}DFh%*JaCwOqu=d)sbS1el9&z8n%0-vg3g zC?{+`6r$M9D?mL;E=D@C5r}Or{2+*)8VkN z_>K-2a0Uda1xQ!JizmJ!2Ex_xB@ilKh;XHmfw(w|t%Zgdi$)5TB_v$o#e3o+wib~!xtNX4jDCwq^lbd*y2GY zL7}-*K_g+0afoYHr1rw3pHB9;$8M)(A&Z~^4wEsR2JTJG?}g^?6qOE* zF<#5*dzb zdp7$Yaf@vK0LDTV^GaLzj`13Tq{^F+G}~jwI4+UMn|=)-9`?kU!Yy2AP?rb`+i(TW z;Ngjwr9e`nNoxW}j#JGYaF4>&Ba!tH z!8Qi%{V^TsT3}A56v=xF>_60R_rV;RG!;Sg8bF+=4drwlqAGI?qp8jQ;>Gr_&^H3V59V0NXc1V0}OUF&}=|pyy#B>j>FM zH*&5AYp)*o(Yh}ypsnd?GYu8h6;w?1rXb~4R74fA8(gR(-u~F5)SSTvrwg#GVzik9 zL0hzSuvV=-N-$=A zAaU)C!l$kzqw2^rOqvRVM&L1!I*4j=s+z2>c;%2r%#wcz z^wn*zVm~Z+DdCq8woWhdUY;o%C@m>VOqAJhrlRmxlfe+vs;`w)b{E>#2Ezlh45mh? zO8PetRIJOdNU)MHMZp{sro-ucbE*1;`eL4sGm_$pTDo}V)}u&`gRcIbZ9CtRF<`5a zDpU$qnHHuJ#gz?^@o;$5HadIT3S*w%G46@XY4Z9ZP2)`p$1?a=Mq7dolVN-JBI9qS z0d>svIaWten8ztbiV&kpU(K)v{+P4nP}eLljK!mtSne6oe5^*-AL+Q{VvW~1%jZ2Q znbP#dKh8)cb6XbvG$=22jSlPy8`|~*i{joSW%D=C5o)yb)*Izw722AuCvP!l*CD>; zuem>-0#~A%m}}v0FU)K8*^ZO?oBhrU<}&$yVkrP9LA{UiJ6iyxm4!T1&uiEz)4>)S z{{Wu2`XdE3d4hLdmQft9D>k4;i`w?Lr`+RV_&-?PJ(XA1)W>+`o+zBFZpTUO#f8rN z`HtAhGWt}^I)Z|NS7>3Lx+vN}x6m#%HM`hvjdr3c?6Wegg;6Aln@q@6S~dZ-2O#|c z2G$^+_{HlbvPa;9%F^l0r}&yMt1wJ%o3 z?{vLd)Y3{72*B2?ODW-U& z5r$_L3;?>G4Uc2D`(gz}6m_%}xpS#Rs)geud2inL>^*+?b~J`Jhk8<6;7Ho}ubn!E zlvJ`*DbeyIl2~j*0p&kSe?MFY$zW+ZvXH#uSE!Lgu-$GO)bowwHRz1HI?C$BB9Iia z%``(>M=Fmn0{fq1vEyTmwp^*QJoILZrcrH}{dW3y$G3w%Ib$GlyyNlQ z#{yORAraGL-UUi&(G!-E{lUK9slyp%bac7&88a(so)bOGf7{yNdLBSOo+nkqQ4BH0 zf-=<#W=+3#>9xi9HnF(=_!mftPuBF6(;}pPGbjY!$Uy-`w%XsOFou_hUo^F-nrPu! zvRP>$>Z(PO6CCz#j~lZ7FeptB!(fh5Doa>^uSJ*j!{8PFpe)6 zv5ZK=&7oU+@qbUt3{}?847GxxP4tEVw+C~@zT+6~)hwsrv|3vPVz?-5^oq4==*@Wz z;DXjC)4n3n(rb_Ak?+EjenrOj!_z7Ws;WPCBP;+QW3}~jg*u#QD_k`0tgyoK zQc|O7SR|%(m7`J0x0SEooxb?4P9~2xlP;=H-o#t?s>|gAVafN!+a^e+%d%Ng5f|HL#0tE$ZFsG6doYNSib#0@3R#YKh@i7%bZa#lU4z?cUg*O;1TjAIefhl<-D8 zsymZ^xx;AI09-SMH}?k@nrN!ETP*GV9?LAAHf@_pG2_Fg1#j40kI;7e;=R@#T^?H^ z>54F=h&e(*l~}1}H@ACjeZd3Y7yOY=>?(S>C1kMF?x}Fcx%ROK z7BYIC%LP~>x8-LK_YUvrNGY*L~(d!KqCPS?Gh`BevdlULw6#BjROnrRQ z@MyS&N3MVx*%_M4C>zRd0|EhE{cJYGoU%2E<7q-F*r-+hE`P2X%^+s4mL`lk$g0Q> z;l25{>4qrl^k+~~6c==Ma({pWxczb3bwp_sO*{goR-~FBkT|?^18xYoDu0;3)u)OY z>0Av0Vy>&O+-yj_f#4h;t&2{pE~BKKC)@dP`eLEg_036FNlv~Y24bkoxg!2k@3toz z-gJc%4Jld0MB;{7sZ{v1fZeo<_nE00o!Bs7VV4CfLmSpRh~#G$WXptU8FdY zT8|CZ``is7ZR^|f!3?SC>oOv<&Z0?UWF(WY1Reb?U~rnq;#}cpLVOCkko$IRI(GWl z8~t%#iN00ZnT5hsnArM@{{SpJG)OP%lu2P%tg|Dp&NY=23$j>cqLZ^Qk&6eeI|6!CC7k%iAb|A{7`%6I;_@ zRQ~{-@z7+yAMo#em3+J?@aOHlzkG9h?fKviTb!&vJ@fLCkRKtn&X5P@P4Qt+ z7zP#~?mn2?gC(;I3(aKWNsQ`t=^(e;9S*?XwiRqAPS?ZsD!3(kRravo+Z+U8R<=EG zJ7NeOl-WyCzr-z$NK~5v+X+8wVICKd z>zP_Cgv7ge^CV1f{5QG&Sg~ojCcqDDRDLD8tu|R1JN(N%hoD<;`HUuaRBrhdX9<^* z(eXfEKdj4hNveEE2rW;so|qJD!0FGZ`{Pp^=&|1!n+(voQ(*`e|%r;y=TI{kB{AP>C|5HT(!$$Kv(< zB(S8CMKwyK>bjULMZmf5U@i8+ZllU&$*HpFT8^Tf*-Mv^R3HJ#u(3Lc7W!gEHEmM- zKFYHl1pKygzAcwm+J$! z2k5ui6GLz6naC!ZOySa=X+#REGqj^tr(tr6e}?0}_xs{KHf1hh(^dJDa6?fgI<#V* zLR-kp4Vzaz``?TU=(^;i%>Mv;6-0|utIDo4`AE`id+aUswhht489BpKTxIpuD2l2y z_$*@$Z>VMf;Xz(xWw=)^A>TwjfYxj+!}HNeyyH90SMm#-tGj0(+|S zzgLwrHB~-SP>li!s>8FZ5=sC&f_K$_>Fb8`j-bqQdXqk7I4^HLg|fK-3y?WK?|~WF zc`7O6OSX_$w>-V??X`v+cQV$L(g1C(`EB`nV(5*aTBwQ9bw+(gjMRCRSBDnS#APHd z`&e;rY-(K>nAK(-BU4dV8LF(O0;|Oq23U3IWB_fcb|7+fV;HDY1t?TN1JnUvE={qg zbR?^lQ^_QGfmkc)j4P!BD$BOcHvo;r{+OwkG?1`5GC{O)<3%YVMuG~tM9DNsG;gjs z2BmEzTpwe{dyYmt%e}?~(C2rOM4FY#+fqF{c%n_s$hOx7NZQx74loxa6Ti1O-|4+Y zxg$%3I4>>KI(xBSV|J9zn~zL;NH})eZH{TirL4+L700xX*A5lOEx;Z2wj>lmKo#^x zvPw6eHJt%E7=T*B=HE@fJZ3eWLz&lQveVSKsHb=F5VBdpy}`e4OJUBYG1h1Gl|jjf z&7wPB&1-IdEC-cZc+P@VQ}bpf$NU^y7#VqQE-VLNSF6IojwXlqASlZwfKiKFo=Dsb zb_8DxZ00#a0cFtERUu(eNb)0{XIcfe{uN^KYUepq=x z>}|F>6Seum)EjoTAe%x;;)Wv+Az%mxjxohkU~sfs4UPBP0zgA)#F5v7&p35wd)(om zr)zJ$u;2h#9&iPquGCZOITj>s^~0-E++r$@cjF6H?he=k7*VW(rY&C=U8rvP5yZ`&SSJ;jfv5H3$P zJ@B<2oZ@K>rD+!anDQvTJz@o~&J?3>Ohp=9X=$C(-&`!IwbhB3Tyj0}E~Ki!v8C*y3UZ!BT?*GW+iY6$p9E0}B9_GR#djXqtYy%wlaCQwPpH^m2jW>7 z1so89fbIde{{U7pdVmh{g|E|GTjr}r=%R_7OBp(b!+pNEKTix!puU}0t>p7Wk{CQo zls=r`{1Zl4C}0n#raZP=U8#D^XE3!nQ9`ABwjP*{luV?SAaBMdOHdV6K^)rc|>mys8h7hx9+YEfcn3ESDTyVoI&As&V^*CpPUx^00;YeAo4wH@~ z;9QgR#A%{vlF^bk7sD^A7gr|Y_O~`TAp>2)g7OiFwKo`k&D#u7F)F%-{@$3DN+|Pf zif(NhRvQ5CKoGyU-8Za^cf_~85=cA|vEK~KB84O#H^+E(r&T3OHIE|r_sk$$>J}X0 zt)AvG!!QuA+;8iA2symsOBou+k$h@H(p@8UEUCJzaX(2{Y4a!(ZxCwq#~`ioS5ljf z*rzQ@R1aBM? z?Sl0Aj8c>5TlN93ijwsC8OTJdr!T#P)n7-=du-veJUfRY5BVb7)+8H`sxWdpH2 z@eRXuZV?=&f9#E!!5d;c)rJPM0)55<$(zE1W(McB7^~CO{i|96lyHe=Jk!vx#ZJjEzb;IFy;vY8#)g7?6lnzcDSy$H;U)yKN zbO0XskTX9vkalhD++i;1?;M2Y=f>^|vWXYh3Rx8QzyX=Wn=@{EUkDlO0ldV3IU@`A z84m$B-(wt=XICD$Sd$glGrDF!_iTOfEpr5A))-ssg}WA3@)KK?8-~RiN81Y$U>fFe zU-6Hn@gkbJWql;r`iu#I?c9Xc&eCWUVP5{&=zZ;oNiZGv!-+6+VTICepr%OHjGG@_ zu~*K-+M1yqly=30%WDhZ4^h@f3|fj_GWuMO*t3cWcEMK4ATydkqtB;}!Fv@OZQj@< zoks+#V$3WrV~VD5$d!b~MuILah+;v&AQ8qrAN+K307#;|sp_*t;sLO%mD!BZ&a=eq z)a-5Ur_&Q@vx!MvOr|?uP-~yK#b%zRd@~fJlsw;ij45Ok?Qm6)@OzPneiKO3NSV}J z4y)N)-lzZ`)>1jZ>g>RvE2%>JbAVFTNbO{h=smH*y3{y3{{ZB8`e0+h4dpgYs9q_F z=?Y6WrjW73T=udm9ImG@lmaQ@X<2V;*m3nG~jpEzjqDP1OMR1|Q4XlchCO6&hMHc70bHf$#qS#M^Fh7$8J&u401rbz^%U^S&W~8!JlmfC7<2Brxh` zE?Mv5>TOm$5QdOxd#)g z8&w~Pr1=~j``c?@0_z%InJSiI;9A~;x8yNqHrS;jn?+V&`ll?QMn2?u=?TLp=6e#Iipn*nvte4up@9b^}X;5F`c5!DdLlbg_wmJtZ!gHOjxqw zAykq%ZFym{3v$RiyP4AZK)vMhcLOr5J7)1MBEcG=G4VDM_8?sVq{- z6tr4yq?H!FtFL{rU(GsFw>;_EexS={j-tNCQxKRJcGSwqI}&VcIlkN92L2Avrejkc zV@W@R@QW}k3cPMMBy(_YgqFHxD2VL7+P-z9$%H#TtURzAF@=+2$UCCr9d1dlQp zsbDH~c)E2dx!?<2`hZ3$zY4m>w;`>f%j%$n(PouPJKSkEbEGmG*eD{zA5VN3^X&<#?)&}vMNeH^78uu}3tmJv_0bK{7S7_KB2xZjB+D*l* zZ;K~fJua9-`*t-@n{r-p1y- zJ8t25!Ze-Hj+j5v^f`8+V==H zARF<{D&Ghx;F~(kr7@P0N=J27AQH>w0AIh9TLkN}<33`L)5#>VF}OlBu>^yqhX;H1 zzC8YRnI|lNV6^dVvFaVl+A?_Pr%AI)WE9IhD=eFUj#w_H*w`KcBc5}2yOJ=Bd`92as?pq8DUXrh#DwZLty z>(BBS@h)I=g`=|cVeV@ID28WEYEtbH1QT$ibKL%yz6WK})X7g+(HCjFIT|90NMc6Y z5;xU*j25n`QVd8)V!>1p2~*q~;;*0QnO;$rO;1@3Opj8Gf*8q0WEQ>6#-2#I^tK8p zi^yw5l7Z6E)a72zI+hHpD5uTyDrck3l4c7Bin4sg#jZ+RSZ&SE^Th(IFrPThYU``z zhsLU!;mFc2U)@^#5wmdn#LH8eRTH8o7HE6{({QKNy*rTw2Y)f7suvL#VS zmLTi`n<|Y(ztev$xZe}HwwE}a4Fv+GUQ(@-#4q8;Q5oPPUf`efkUt5>oP2K*(KTyU zIh$K=O2d?-beVhnskOr@b{$(Cnqhbw=N?7gdU`F3jgtDTPhbK-kLiEY5Hp;rZxmHYQ6NZ!I+e|pg90SCrSEh0#iOQ-a}|j}nc@Xk zSsQ`ep5PoKts?&b?t8%+74cD8;9P0ARvw^@u=mK}Af;LWG@Id3{vYMkl+^W<-f>d| z0O@Pp^qcqgCiuKpyfj%fb268VQ%N47{9u7?zT@sNBQMJ4rmaI7$tX&8k5d8-lojCb zz}ykBzAbe0DE$*6RBowG`cG?UxcrV0nI@@2zAFA8{+Vi}W$_rPS_dGy*cI(^2KbGc zP_pZFB^G5WB;zmu_`rE&+d=Jm1k}nTYCO;Wfl}+rV`K|A5@oqN~ z{gPZ7Sx1GTWg-NifnzZ;#OWWD+yYmRTW&u*OrxxVn=+ms8Z+|}mW?&t?fgRCfPwG6 zA@t5#@K7`^O9MZZl-}SCta}lFT}e+=nXX$cN~wB!nL;q~hifY%4}UJ;`{ITv{`3p@Y*t46GHwpms9+-oa(<@WdGr#X8Ahx5y@AS3CJ3Nt8)g?P2AtVgT z#>0SrBZnv@3tg+qBbqZA2YuM=ezyY};As@qNAVj_5{M;Ck*XFVM`Qt$$JYu0FUZ$GqcQoxj3|9|l@#(t4tp#Vp1Yjp@#&jzPY| z05XUoe9!0MDoldN_v8`_Tzm0I~Pyz*#7pQ$>mnOhm{Q8^-|35fc}n@d zP9f77WFV+5{9v2g^4k7`6t1YLoMn{lH{({YV!Qk8*zt>4M7o-*&Ilx{H7zV{@cyDO zUP)u4T|gb~Sx(-=f6EA~f0>Dz2mYG4&m&njG_Q!1*Hd)uGZ+v34TShS%fa396+)y?gs00D2H z@ASmtX zJ+Viq%;v#u^&hI#={VrzS?m^5p2>eSXaNY@dSAEm$9g_Wm9C*<2aaQyD2bb50sKFi zIORxh4qZz6(qe=W=VkhO{{UPR%0pAUGQ}T;=_p$eb~nEsxThn_VKlc|Jm8~*PQ4kP zWx^7zO;9JZ017IwxFf#AAE?22YW_}Ys=At3%`}v7#{)*8mSUg+po?2_cpG3h#2I4! zznMk^kxMd`(0rv2hsN6-xBmdv9;B&b()nUYNvC?)m^z=pRlMqU+V@?(v5nypz~kKi z0FUsrHGp)Y`OQTpRh9gk(z?w`zqoc5H?h6%xdiqi;==;zYlKuZnR_^rGKFVlwTWO! zYxm#pz{H-fMa-ya=AL(wMQs6<`BTX^=WJGIX`}Ijy0VEl(_*CkFi^tRFcZoNB%`tk zGotG?l<~|_w~Vn+!;!e&->*1f|2fsExgZ;2WF{TEbJ2iu#w15+DOOE&( zBr;S;Aq(NSTPZEyxhEQQHdRSBq17tX)J(?98pNnBE#|$=y}kYM7ctclX+sTG1p{+` zTso74iD0p~oQL!y*Yw9TpAG4uWuPLAd|wTr>ii>TbFpx{7Nc83dfK|hTGrq9^6r?;#GnMWwOKuvwgPb z`C`@6xu%@srzyl^_f;~7^?wkcKHLH^OEIp|W8$9+w^Op&Dl)9>!4&OICZqyAXHs~P zxl&6l!3T4D{{Rrh`y|XG%wTml@em`Uc4cere`|Z&6e{Mdqsl3>3PkYgD5|O=HV0Ah zE~V^t8?C!@i4;|H(mgd5JjRkOU^o}^G=+lhHYl_O!sgclfcXrcrZ^)c&>gprEmF^>rhR?S=+1rq zEmwnlEm!isAe1(d8usVY4k+J_JK;e$*kQmwwj$7yl8SA%_;FXhI*K)JEIVOgcfGI{ zfR(^E9q_OP?}Y{Q7+SA37=$*w7Txf*Uc>E=1^eN|Q)~0z5KyFrAn|N2*TTTuY;d5S zpOzxj-6SgShZGz8dSjt??|dy+jqwDiNkPTOI90X){qKbZH~mf)pnbdh;x5qIKwtgg zKprjM3JdH0_+Fj&9O4S(m0kY;o)uwxTMAG(+--#gw&M20TIImMo;z=BII2GQ>0S1~ z+Juz{)0`T%sZn1#s-yYJf$53W3- z{NuJbh0CB{)M8aVGQZ=N-%LkA-0}_Z=p?9H>_1#B;E_P0jldnkKb6x{c#6zNlYQHt zwkOM&QPQ16C~IsJ6-9OfW;jjTzpgVK)BH#3d0K4hUK=#AsLXkUKQw35;MjraFW(MF zol3G@POF~&mOVuOtg%RQ+(J&S8)&a;!Bykjp@ooS<*vufQlAPWrAa@tre{2$^&#Geq zTE#DWdSfdmq&>#lxLX*#ZM9NtvJ)>O$v;&TtDFpa`OJXfdkw+UdFt9uCjz?CtHxXReZE?uZje{*vz5x` zp-&m(WJc`6ae$I5)YSNJ-dmd}QH?t@%jT3cQYNV1Zf$RTOvpNRii8%981*+Tr*n>v zs=p>$|W8kNs(Mt=gAeC8m-_sW0>R9r$ld_{fO38)8PX7QD zDk)@Oz(&$si`X1-%d6T&Wh1d$9BH`@T@@`9bkRZq0_B))$GN^8%rXqRs!tZCon(DB zx$H4V{$?h;jXNz5_!%7-A^ZGRX9TKTvu?NJ(;cahmbfIYE}6$qQJM`fm4)LMSGVYW zMky8XNljHG5;C(c#IFYzu`(mcHr{;}Zf-2NO#%ClRn(Y*03-}7R7hXU#>3MQFYC5D zd|vQd=(BuxdZ|rN_r1vLet1n+1xlNj8)PG9(}vq;I$rPVAA@(65W7n;MkJ(&@ zJ@Id9*Z%-95Z1QXC6#90D|zg<8`$E7sO)g^RJxBV5$)@WlJuzD+G@QAT9K}|D~@NJ zNGf!!;ShiW0efMYsDzYmWSF+C!6fbPiu6^3Ux?>X00jrWJ5!t1Kafa54TAk}w)FRc z0~4Lp;~<$gwGz4+AeTdeLB5tf@W*^O^E{F1V|yEqY&Lnu+ZsbaE6>XCU2WkhZ+_VA z&Hn(N5;nqzp~TfChf-4Q&KwTgZcZD*fWH_L&{2n!=CW~H_@h?QbZpUp3sg-MLgv=r zQ9u4}EMwSQ<2v}ano`YEm*mm8l2{zgKArSxTPXhk<;nII^}^l;m1h{2JSwD9`1I35 zEL!AZ4VPf&Zz(;tu^&%-0Ip#XlS}?J)4Af-Ny_%-u?H*W;Tw?b91_SDIRonS(@dE2+Lr*Z>zt5ukyncE=@R%e+m%x9QN3H z4sfXAK2dZaTF&RV;Ni%oP+1siRRL^~kV)p-;mvIn2ZTDJH+;Iz#Z``w$Bsuh1z9De z5-A42>^9qf>4TYy)0KHvCDGX!gZH<+&H!dID^sY@q$1wqj!xLO16OQm9LVH9vg!07 zapqyZ*16}~5(K{~5n_YIsHoDd&XrJZf1V@d5ty>tbhvAv^4ojb_+qYkWuaLusK+Ca z$8S;naSsQCy0<8BnQHTvb#vs1hW`NL{v2DQW?BY}M`JoFT%CsuMZN8BwkusH3Dom2 zEF_GU7VH~q{YX4|V$!ZvU-x6mw_9yv@Ad?J@R_L_j`WLCW;4*!0ZPsby*!bFVv6eF zl-t|uizQ^u)172<9KDv7mo%0+ROmhu$m^~Qp3=NVPI|fV3f6acU64PPG&Mi7H3YPD4u3yQ7I@9g}1%Q*z;_8+@}XP`F1yd z*-U2~+441G)9ZJK^N?aAujE9%VG6 zFR05WhGtW3^y;xZ2C|kPL5nQ;EOnm_PF0yt9$Q^aT+F7fPy$M%m(u)&btSFqrrhEF zqspn9p%T9*fGt1Cl97Ze5oo$xy^jvT6* zu_~@>Q^Y3vuW`Dcar7PVH{&)|a=xg`YE_%VuBDQdBOC)8_{+KXk+$|2De!73GVY0^ zsHkYlN}_0-J;1%gDfbur@L%J^G?H}AS(;W$OtI0`!#NV0>qb)?i(}5r54gr-B_pXi zje}um2>$^1%?D%<=k$Fx^itQzlR#fgvK1QSjTXi-yXrS5zQ)IlXFXfh`IdeqrIx07 zGWcpFYG~wZv5nZ35)rc%2S_&IMh5j=OtpEYq8RvXWI!#UK((wm9AI&c5X_P`lccaD z@Oj()vFQ4LPmUlYaJMX++>-O9ye4IBT9LqE%7ATt+vAyVK`UHnXux9DJCJ+t@7oDq z8c8%XdoJpr_CM6&$^oh>iFG}R5&5>*Tl@Z)+SrO&)<-JMku=l~^KeekOty4wB=`LQ z=e_Z3%i3JauPDtJYqYB3IV7_mE%dWno=CXBN&^jL6fiIhii;Um1Zp?be%uUO`a>=-T@QRzo zsfarR_=fxOhw7mcOtkVzAX$@jL-@A^N&f)K_rQLZreB!x)-*(s09ce=f`9?N&!`93 zZG!oQO2wJ9PUx_jbtxE94Z}8~58Zk6$Bc0B-f4Po{H#^}pz7h0S0-IoK^1g}sOQ0v zm6eU|tUW-t9l^z8spxZT>KQXS`nZuNQsM?y**942U~Z(Xug&jqwkp38tL0vjdRCjq_<5E^M3odk31VjrdWhV(D$2&!0hyY|u{iXH8{D8| zpl((Xm&cLpJO!ImCmjeEGSqlsEdc$-qncDvkw*ReaEEIVTes2Xa;*GfiM?k{jVU%BTR z-9IR0G`UpDh0wSHt@-^`MKui-6%)c~=-`T?qeBK^Q6M2j$89RN9f`%?qxymxj+2GD zgE(#+6i z;5~nhQ8&sLQwVKHNAWel+~QAH<(1ifYb|ut^$QI0c&x>CB%RduJmIgJhDC@)29`ij z7dHxhap;*BlsTK)#__+k-IlRUShP7U8^im@l2_24y~*{q->xEN_3_kYRk^GnRK_I? zikqDq0)0)cPAR=x)Y)?M{#K$*RYklg(HLq{Yzr~%z&Ih&`Hb0KUe<|Zn_h@uHUYH@ zoyP{lZTZ_7gB8)Y#6GIey!ejLH~|XkXOb$`NL7dKyjJkjPymt@t~eWFsaFt1k)w8w zM~`h}h1Kc$<4;f8P1UC5WT29c)WMW(-PDoE?l0Q-p>-u2QD!qz0z#v>wf71*{Q$Su z8+|@-Agl+32E?24 zP4>5@5g|x&$Wc&<9TeXCmbW9@kG2c+Lef`NEj3JFq-tfgyrs)|bq?d#8j?7M7Zpvd zvr5?gF!{GeH6Md&$|%-)Ni^K+TlszOVlUqKACjc=bcH(6c_yH$TB0pt5siwEPH$uH zi%vu;q>3uzUcLdWaUd#uxALI}{Wl%(A2Ok=$hyXS%8oe=HA;zI2-{J1xz}a4;Ul&& z1loy=o%ss(iUGkj*V)s4&Pbrp)OTVf0d;EUW7}(sj&YyRWwFup-dEHSGfHO6UMiJ8 zg>FN~^x0dU=Lz_MUc)h-mX(82Nl-pnTfAiHAP-Ueu_mG3pC_xyR-h#evk40=&fp6Y zIXYW>Y(WW%7J=OF@>FDyJ>l~_vL!Uo%_UZaTZAfs6Svpzizai_8Gdh9 zmqS8y&r|!bhSrROv1@P+C`$xXitR^P^Nl-%G6?hoZH)zi?6!>wtnF0JGWKmA*4fR``8GSVk43zK}@SjjE{7!U|*8J~^OjmCTP~@qz z+zvtY{PB9}_fwLjuEt}i_=VR)Mha;+`hqyc4l>`f;&^PKY#amIkMLs$0GSK#)oJDc z*0W_^>l!dpD&~kgQ%Dz5HMPb~@BaXazSx+x3}JGM;vtP36*eG|amL((g0(TnS3xa2 z%NUK+s|Mg-+x5W7p^^r8ilQpQs03sHS#QAlUuSmM3SwvH;F3`wBS3@GQh$RmZ z2Yc>peR&wA^-TeiTAFlV%#6~2eL27L#g?TjB&M%4w~|Q&ZwB_%Zoh4}{ILr-Lb?2M zxU$PjsY(9;RlqCn$LeunAL+Ci*rmg%kK`{cy&0+{3`y1js)lp5= zIgVCbf@>PVw!V~8Z@B{wbSe2-dbkS`i%>*+Uv2Hj+YZ%b^w9i4f}qQ2s~5$PllWXM zw(c)sfp*hA{S*)UZ3ERAdT~*g)}$y)eiBPtzo-8IO|OP4Qc0`jrIO1Gltqi7x0_Ek z`itUpN|01k#Nd!nI}%OoruQD$hnX>%K608hmKKH48van*fPeh!VzV4v?bU|{fy%ga z*)Nh(jasyzOZt)i#9)A4_PE6!4C=Qpo8=+Vpi_8~gUXc_u=m@4wlvO|$>q-JY1$gN z7D-|(70unW*-5bDe_LD|<7yn%M!+Q5d91FNGo>amc7&C;BON1dF{5N1BCwYkg(WagxhO1_rEw<>o5mtHkjUlJDLb0{T64Zy|A4do$++cdJeWC z4IM;t3mdDAC)?|a?DM?RG=p_6uR3_=U5dJ2g)eW}WafIpm zj7eyUvnv7$n-F$4`{4zB_{EU$RWicelUCyiBWyZG8>*5zYH2DaV6jAn-H%`~B+#|N zrs;a#nD^HXmAySQno5~s)>QV~{{WwCCrQ147sBJ2lC(X%6xktkPb_ySxn@{26JpHa z5FQzi0~sAHX@jX{tC|q+6;Lv#0mh<8AF0Ll^GWj#to@lvs%VlYMs^kxNPNClw%SRs zBfarJq^8VsO!}^9p=pp*BvQF$R$J;Iu;chh{IQXjIDC#_;05SF2^~>(%cl_os__RGJ&xpR?0%S}bpB^nom(A6O{J)czsHfD)^Zqj;@H)*e5a@~ zo|8(4r!ZQIdRNgZ>Wf^OffhV6u>#xM81Wx1oy9o?yrEfG{t`WYzta@3r19GE$f^rZ zC7v6Hsy*>QtLF1ms!XOwR%LDNe!|?3>5C^q(^JjTvZUfyaPG|>o={rOzN8WQVxiU( ze9b@Z<#jHh6yD4L9^Xt{vZj8Y$#T&&(Y!#13`+|vs&%J4>KC~7IP8Y$fsGvh0EH3m z@=Ar8D>9)jtaR*x*8}}c?{DXTm6R(z504uXY)A@j7~i?|zAlwfLn}!Wbx_M!$sIFKh~V zE@tq`-6F8RwS#`5!xjw2NM(jfv^pA8S5gk_P5%J3@l|?+i!g=;0fRzAHMz05zrQ%Y z6HAgFXl#T6<2k2=IF>+K$DeP{`r*ROQ=X(3*L5Mi`DTi)ky*9SUM2_@>RrJqSesZS6S zV{@lres&lYK#Z|eJAz`B+e-m(SZu=ny9^)ch8)eEoC zt5CO8fCOQts7SMlNfnvstD0E}e=&^7=h*XLFNMVL(`2#Nq=vEx;?Vkyi#$w9sUwZb z@81yqBQ-`(*BOk|Gcvk2iyK(*!*D_8k}xV-scGV=jUY)NtIJ}NNY$-tjo1yWbp!dI zTxZ1|rUwrD{{WS4W2NMJBl%xcO&?KH(&jo1O*{@uFW_lihL9Jw#NT{r5j=GeiJ^3o zHev%Q@{%?`YvbpEY@H9Dn*+}_t*pP zd}`xA-6sI>cKy~qekZ*}u-p}2>z<=*#!*i}G>b}zR#^25NhYIa`dAH)D(ModX=|93 zY;1S`0NwDKc_gTfB1po8kezM^;agn(w!`&vMzMG?-_(=%uitz!SGnfXVvVtlEfk?< zQ$p8OePY0DHv4|K9a2rg0>aFs0JgaF_ru{C=M3(;K`M#}B$2lRf%Uc{*2co7LRbI} z#QnC%GA$x*wHfY)3QjSLUJ@84N{-lW%f(6JO{{X>=(yU@a00eg1 z78vT~0a^fGTyz0_j`&`Yj_KcvKmm@neOB;QQffr<+^T3kpu$Z-_2HN zrXtXilB@i!Y%LW30G+U<2knPZY%hpAZi4MLtLc0?i*doi(MLND_;XJ@;B9hkQr*6o zSO<^37OHQDG>|R&;7L(wu(l&>-wuWQeKF9WZ^iwv;8F+E5o?on*d8#TJNsc_Y%SXg zMX}=%*+NRKhrSdOx2_xu*yEvm*W&|glX`pZaIm|5u(G5Z{#L?({PD|@LY=l2_rieZ zZujR40^^KyFXe%?2{r)twmJsgw!-amj)k@&*CYkMJlhHiM{Fnzbys`$$6DaH0T&qP z8(VxR56t7he=pAvrE=Ey!jyL${{Sp>Ew;YHz7(o&j!|hgzt;-4A516v2ld;0 zXt{o0NlBJRmqHJO7fZFj7rFPwE^kcH%w*~)5fkuQ8(gl z;eAFlZk_3zzb!zaO!5PBB!hB(ov=okB8&it65wnwN}UC<=JNWK*(Qmh@LsPAra_Ci z7JX9I025#^Co;;uVOS6>dz>Bu%VCD(@~I=XDDK_D(RDjwskFU09Uzj^yGbCkdVRex zLW+tiVWkuS^u+lbvy+ZSgq^X@mG0!AWK3rPIRq(fR^JZ!NF#i8JfLALz?+OMJ$a)9 zS%5fPAT5Qhk4DA08)4vp|C5ZBP91(t0y83nFJ7SW>~0sCPk8Ak^mQb%Kmwb$yMjS*Vp4{SLi z0;a@lB9B$GxI5nGW8Vb@#K(=4LhO#0K^A#+Y)Lh>gmy5 zdU<137YtV0V@1mHN=jOI;rUpdfc$KOSAEIBDd}Q*eG>qCZ??7bX* z&RZ?+-}%bOfb{mqY;aGhXyT&Ho+@&pHuEZjeLP@b_ZZuXK_dglb>}9G#PY-0baA#i zJ#pdOI|1xZd{F9V zmMV6hCoBlkBUHN+$+0^O6QtD8eO2siZwF(_k(gB^(m$KT)A-7bl!5)X+W~W@j+Qu@ zYssxkq-)6EzibkbY>}Bf^3)=-8*giGf1x-H)Pa9&*aI5~RdidoZM|?1)1OM|X$?ej zlGUt+c-k@r!iMB+$MeII#3QR@iMPGgHQxJk`eT`FP{o?ZDVVDm#+Btuje$RG9nT?( z1t}V=gvY3sy@4Kw+}~_N-b9-z0i-H&UFfCql>im`*xP&J2#IHwo*4#(U>U40+WX>a z*=Xbs8CT!9zt;GTl>t3^4arc$jxTOL*T#fbxmC(BOiYUMD>5pp3y)LV4Aq$)fCCz$ zk*P($5$*jkF0NQm2uc--H3av*;>Yp_^TaxIYKnSLIg(Xk4+8zZ!)z{1!sczdA(lYY z>jY7g;yhYCKh4R+=q_QXWV14P6aYgzFzhhpT{=foPU&(PE&=QVez;W}qB_)gAxWi% zPZgF!btG;V`Tqcx#YqVQ!j{oHqrE_af|oPM=_7iBSMsp4E9ut6#_|Ha?!Hs>^u>?i zhFo*+h`IiI3{cd@E7c(~9Z;xJ)?sVhfGni!H#nsAHfu|pNlzsOE7LLsS0=!;w$e$r z03HSJVZI6UeqwrKsIt1sNUrf2BlBHEi>GzlZhtEbW=V+Sj^Z|PAJ5TWZbQ z@wYvLFs`7UkzB^q2{dnS{>}WsPq;V1kAnSAl}VM&)A_A^EiSz=)5Rz&ua^8=ek1K; zd|=IuA;4qWERXv9mXsL{87>#GM7n|C>3K6q>tb4bwmDEo;X*W&VhWq~A+K}jFe~E~ zJY7NXvoFo))!rPoMvdgsNYKYiH~vey8~t#PjcJ@v0;A2ZQ}_%8IDgd1PW32+7*k+ky4OYUmmosUkjBB)A*gF*YFkVjs;c z)euBs(1rg1c)h;Z_HAH0g@{~;i5(QldrA>+w&dFmWz6!?&O!eG_=0?*-~ntw%q2FQ zo7|x7`h77sAc9Ep!tyqg;uj0+>3_BejV(jUwb0C{@JD?zEM;s)*F0lL_;ac%Q(EsK zO3SHIEC7sx2>$@^&(n-$xp;-*kz|p)Mvw&?3!ZQ7jVq@WBI&HU1=44&sAP{*ZKxH! z{l$hn&s1;pw2tdb2>G=uH%{iOQJvC97%V&)p0^J-5W1`4K3zka<{528 z38@sSR+4C(Dc5T@tKPs9x2>&gb2r!0xpf~?iKKYxb3?6BLlBP{k4=djHG%ry7=~?A zB}GL|Y=ZL0$KO*D2{*=fPQZ^YQuhxi+v>D4G9<=`0BDruTD?-kn8{+oqRs)ZI*ASX zk}<0MJr!B3R5_G2FFe_Nl@l6i8q1-90Z`j@y4ZtqFN}jN@!oU6f`WKVGp_thCPQ5S&LItt=&Vc*(Vn!5p7M^~Tp&Esq|%_W3NnpQ-Zd?cEvp zotWj)WwmrGBc){Y%N#0PBAfY+{z{^bXMgsqD5_GRaa5pllZnLn-8uY z%_ObK=x35=@G`n6g44?z62aSWbnknUYkCWBitk9zJJr%=^RQZ&DJE7WMV(anTyJ|Y zB=4~sVzJd-buN9G%Si(Kv`B-*NX?da1PhUVHWnSNjMiY8aw(%>%Di%fae0pYmFwa5 ze_Pd=6U|#BFDlB=%$fm?MdV$38+X7?w8>-0>!Om58IqD^B|{ME3FSj`_Bf01dpT+@ zp{U9hHbksPnF1gnGMn1oo7j6CX_e5ubwp_*MN>q__q6V!-AHEFyGM1_H$#QvBp@mj&9v1%q@`k|b zA4B;Y;f|ooqs!{$%i&?+#QIc`z_)St#*9-qJi_y3Q+qtVAPC>XiC&(0B6tjoG7U)k z4VRF6ox9?HUYhADXrZEFjzo?n5)fDgzLxYm+8kL^GW{@3<=&@gOWAwHuHL^Q0z)z5|xb=Ii@(5_NJk6T6IVO&p z7g*Fe1iM@-6W+q&-nfF&$dqzBv6Z4GO$6DQR1HJwG~exlT^%orK|2s{EkPTL6TZjT zafqE)1W->hMQF`MJ2)(-NRV7@?r+DwJv3(DOBwB^+K-l>2QGpdiCLZ@9GBx*ChR`j zeQ$}q9Y*a_npI2$fvZv#1CJ=Vx99p`Z%`J7K$9yh@WiFk;DfLh2h(h6-we8XM93(f zXkm=B=3^wbJ|*`gcOGuz74xMLLR@>R7>(B;9*XtT3Kt{`D~UgF;XvV(18a+Hdt*0g zDXA$8^0-LY*jsR?`r}EXg0C&4%wnkU7LFQ5Xy!}q2xcesKbA7OqLq166VkDkoHDZq z7A(AN`QPb}JJLZfdF`^<>Ys&yOPq+)OwLl^9bNa@?w>o$@kD1RAo)(5SUR>scnWl$c_c1d=tfEBVFt)Wq8V z0CR885jv8I*|O=6mROI5*S_J8`(fskBz`HmXiJ|BhRm!*@AtRU6YC^N5GA)r)%{KX z0IvrJtg=Ahpf^)URo;-02Cio+jAlF9-{%;eo<#@G&}I__F%n>tR`%8SPv>vX5V~p- zvs9SdNcp$Y-r({2oJ;F?9v+scs<^lfBA-iI-$RDTM~(nI?17{DSLlgU(Td<28G&5} zE8G%q@AbAJbo|k_M@K_4D-k0?{%^w|Hx~PWwk32_YySW*()qQ_(TRT*uW)X={jj=v zFqwg}#?-YAvIgTsfviEc*Cda=6i6DFdm`9jypz+>tzl4!yKEBwX zbRis3EvJ`M@&5j)cOVix zfcx720Aq{zok7nojrMI($muK&WU=jCkvZzAB+6*&d{v2Khr?}q4=(2a0G=uNzgp#K zlvK@3(i0?Xw9f0LWqnq#?l!sK(+JC{q^s#{_^Z!mr{If#!8L`qVX@!6@m+c-&%<1* zu1Kya>eVJ^2SW)Q0DVohcEYf-UkDL7+XG*^Jd7x%cZ;WTEkva13c3n7lAcBeA*?9@ zhNHd6^y6+e#h>9!ar~5(tU;Qtx5b&mf>;Ieiyw1veep%j~8qbdsJ_H@%lh2H^MYaqo!EjC;GBIqsW`;v@jApD?6)?wx9K@VwFx z6(v(=(`ye=ao@H+XX+?w6E=A3A$XWc;WnkQJ%#;#xcWmU%+;wOhG?UbIUyhrNCj*S z?th4n*BFn)MM}Di!Zfd%Y2%oPWp%Nz*kAPe^Njw2T-UxbHdgwD5F8atHkVu!?%rZ- z2)5z4x9e+S(IjTJo=m30#Stv@fSrjq1y<*u?TUO=Vz0uAU1>08kd25IwaGthTOfux zD5k7$9Q=zblB_M^F!QIeCvml}++%WaqJia7jB2v1y)j!QZbdxxkg<}DNSN|m4agsF zU+Id)E@?}hQ&dtIRyh_&SgZ*wq?=rRK=#LT{Kgm~Pm-JyT?vAHN)+4>cd<4$+wF=Q zHAOVq>EvWAMZz%#`*Cb59~)Mua8C*(lSlzeo#sj4jLPyzg1|PwZg=~P2dkDy^GbkD zlN39CSdo^`EcH?ufsm>y>h<6CHD+}n4dRDBbJ(vx*kehJ(&{M=HkqX_22%-8 zQKoq=#BX9nhtqCw?nGH(l4nvCCN{UOpZCJ*+1oCZI7RTc0D2O37?l(v3O@y-D(@MJv#iwReK0DvEG?~)IGp9wXjR9p`)qEhH(uTqk1sf6bSO61kOlt$E8}A6XlSYFsU>CI=}N{~fhN~&Hy($+JF3m0 zt#B59!WF?tvHgHZHUrDlRcT{4K~)y3M}_VvSghJ@TH z)Ik>q-uP5*;vp#o&xpkP4TtnNYOVDJb=pDp+Sp*S?U3zC4sjN^^+zd=MvOJV?l#`o zhGl($Admni_PO=J2~MhYQljBco4NYn4E8de&*zJA?l(YoTJD=0W4bux;DG@7KnA~~ zbHNt(#|0Fg*!2QtuN9@r5MMFx?S+LM?oF{XG}I&L8o9p2_D$!fri#L!3TsU(<-NccEZ(tx5J_%qy{(0!96@%-3P4@S7? zyW74TRqci8^f-d$9g|@@IPra;Y4D#kV|@*Sn2LdyD2G^|9ENPS()slvkgN@mQ^F;8AceN)*!v7vs(N}^)5D}yQ{n#r3fS?m2e8IW-C8K$p>4y_W|5lK zZWp*1_Mf=Mjg|a4k?hsAdTuW0h&J{I1SIG@s*!v`B$>(K-rx^FFu6MBD|p>9KWB2C z__hl<$})<~%2ZgQVG|n}EnqQ!>F%GT%VDq{EWDR>7yEl)tTfTWf;3f7yZ|k1N{u$- z9)CNlOOxdWg7jTKq{WNBC)FZ2y|Cz0z{0KRhayl7&iKbAY=q@3c5r0d-vuGD01QHl zM#TPDlCFRP7+=#I3OdTe#ZKSm~BBoU}V^D4G` zjoa_v7PUf#%NVt+Er+9mnIZ`sVNW*$55yI=x8EK+Cnv^vaJ|>P#>Vht4Ca?0x%@)d zkD9EJ)0rb(YzG(QV45P>ZG=?Bu7yb36`JiN6=}`3kg>edSDL~oH}M2S z8vsW>{{XHD4wz#a$@3%&U51z@1-BjjuqLA~3q>O-0L8t#;?xs%4Q!sD(aa{hM}_kKfW%pzzWz~ z>xw5$<~|K7L~M$!ZAaf1iYk!thV{pc>S9kAxy$GsCDC{dYksNNsY1T4{556?@aCzd`_}}7Ac~#VXTbbq_BgiMJk~m2>(-X;Pg^m$`7F;M=kE z_QSbVIvUtvnObH`G>Qk5-qyFa3Q0n`8c9(UgJe}czi(g$H?k(*NLa8(+^WM;NV$Qj zH8M_uFtG*}@YwdZasBWUs05FlL|LS3t%b#ivHE{3Tk|;SZRtdz?zk0z!&>tZqsGe=8h3@KT9hsD`XiGe|5Q0XoiSD2x4+r6L)XJzhS-!<W=HOwf7|iuDX?nfmBkfevX0PrzQ#Mp0S);7hbx%KK@bh{|$-KJOMnTwHP4H$VX)^d;b|I#jq>-<=McHk) zsW=RSuty7Mq~`UL)+IE0*`kV=M;n8`hAwQ@^tt^oA&74&m01#4)R__N$~ON1JK>PR0IERulHyj8k#+WEQIZNalA5Nr z2)v&%_xYGY*u=)$kT@iR$2iYAj(obRXsYt6NwVPgV@;@)jg5&YeLs;HOf_z*wG`6$ zawF>f*|8@4{{T+-jZsx-xSJp!FyCSs^GLj{Wud#%z7B- z(dG)RRS|@&Q^vEQy@E0uG3+g4wfDsmk2k8Mq|2v`9jV$8OtB+u`r~NHx4V#S!S=;B zCZb%^Jf@+Uoy3u~Lq4tDg55^I_qGe?Qq2cL(MZe$&jfO&llVN>2kW*jGXgk&q}}ZQ z0Me{-pC_D(q#vg$5(=uCvc5#648)rerN2&bed#Qo8PQ~soMt&~R8!W*9_q@(sAawM zn-RBh?~Jc4mbR`snP!osnxt+|a(B7gzULZ;K<62(85FgVQ$tq;AxI}Ipv$~_X(yW% z2Yd009YQy?nujS^&ugFXT84K~S)E2QnpwpduBGu~j(CAsS6T zuZnoFNq5K|{{YR9HSx(X4GFye05HpXPM|}UL3k^s6mqC7rkH`}Ta$6I7PiLcoM-u_ zK|Vv&twkdrIti&JVYHDk)*K!WHa_5tT)r+PJAT8R;vNLGZ6#SvkBFnp2h^>%+zVh< zQJA)E(K+YsCsQpeB$TYGOVUILR=1+q5`Arpct=D+R*Sul=&Q;Lo>+c~T`!tY3!?Wwic4^jNFdCz+845K5e%qePM%*{-)M?jzf8Zw)mTpKBFIpBA`GD)N! zAVyL&fTrzpd*D4ediv>O*2NZ3thYW@unl4V0G2OH(&ET?d%mi)d9R73jap|z*5+B& zduRPZt6KH!(KM&XQKHg701bwgA6#e<#T_+3mYP;7PKjZ5;{I^J{{Z91(EDR1=seib zR98T?ZxqJ91reyavJ@JwJ+Z4(%>`{MW{@8eGQpV=`;mRE>N_86cg9CjjK?Ka1$PzJ z(dw!H02!|yPZer0V=O072E@9!-`|t|3$e|# z4alW-=~~t@ES?e>A(6$DCe3ZQ(sd4b!ANrmnzlLyPZD{c`NfE}zjjC(uk}2COkqhR zjgs5jWv0;G8c%dEs164ZxSWL9EzC@1lM z^xKYY-x~aJm!?$k#PPgDuCb++t+J3i@;=zjdb1~Nuc#u-b4pdOrPdb2ltz##3I~5E zx3=RNT{|Prbrn-4Bc_lhElHY0uevzc9(4~}(2&$qu*)W<8XR#aHe;1$P)Rs{28F_~1>tf_ zHT}}oCjS7YE<>5D+eYD5k_{kQrf2Z}(#^8EQyP-es@~s;PUL+JvAo73r!>@Zh|#<~ zE59Tyg{|lS#wVBMVS37q=!G3ez$f4^l1j7J#%i)!icq>sL}K#}Zl=fI80{4#RQ~`oLL&_|NGN^SQpN{{U2Pm8A!g z60mGlL&e6gVgb11VQ7FXNu`4#t?ott00^Nh)^p17-)tfv6sI z+Wh*A2+6!;=_-lkk<7JqfyMYLfUx|?=jnmnQ&#h5(?#Nw9FH4|ak>IU{{H~33}o`s z%alwistjoJm5d<#Hn`jK{IQ@RA}c$W8&sVpr%>#y`6&IPMhRe=Nr)183^rmoxUe6d zB+{zKm}VJ$LIsdWSyt9-71d$%0FSmHP->^jDP*TzNC9^(dyrg!PA&OlG?~0lJWh4I zWGw5->Ai=p))>jikT8;XD)el+rFi%&RW#i$@Ji&QQlA7f>aw2Rw$u(U$~?HpejS-| zUZC)5A3{s1i3aLJJ%_jYajnBNQYrA{R?>8v9tiD<&5%5rR`ieoDZ!56Cf)JnYwU2# zP?d(}jbu`!ZHF=JaTdDiLlJ;L8xfC~{x8U{*7@|Nc7NZLQ+@)*ppUm7Y<)vjB0(F^ zApsFfG4udmA0uXIH&AsX%A|y;sCO>H`azJJpSSYG?w;K)bB_U5%yqL*s=4$vJT&ZjwmF?Xla7 zpUWATY;z~uYgVUrsOYSz&xM-UAx%nDoAK-QzSz)uDzYFeWRS-SnEW|Rgj(CF-1{6* zb4b*fLUU~RI3 zQ~9*+S7_)wcaQ-zu1K}C*jRp~;mnquqsv60NSbyg<+mz0{#a^~oVHa9N~cD)HooNC zl0TLuLh9Kq zG;HNfmi|(=vD>x%@lPi%I9?j#y0HvScqLXo8RhL&)r(72O$_CHP_WEAti$+jIQ}7i z*tdL9j+-j!3M`%~a|2WzZ3{KpA^x9ndz;}MJ3~X##w^aTNnHu5SdzTHgQ(eL*1eb# zcDcA0!H>Fyr~=1>jO#t7nmo>?nLt?b_DB>ni;Eq=_48kU?TreJjLSEa3d#jp)yC#S8x_9%61u-UW|`(+m)BKQXW3mNQ_!>CT5UE&Z9o@O z{(|=w?Y1m*+>jZdjjW6PkY&f_1R*hLT4>{uRmt3K>;C|*FwI&ijF1kHE>CfXnTt_s zj9kQ;zxw&G`+qz)B&jtpC;)Cqx33@18er0-gu4~gfN{0^`(ip$EQ7>tU@^MsVQXSs z6m@x}a#PVn%^|oqYX#=_Cu~E`=<`Z^#z-n@su9ouWQ?%2yAiR&^#E$r0c&kCA>V6X z3t14KY(Nfe#qEVFpHJ5wh{C*Qh=?%?#ZA80@MImn_=qI$V}&E_Y)6En#8WjWxUe`< zvLE3apG-wp9f`w%ffvVkbcbE33!vPD7y4mgP=GX#%M7U>o*YIO{#Q7PrP{0|h~hkq zFT#LI=r6GJKX8;H4+km3S^MMr2G zSH1Dm8*D9!N)N6jQPI>?f?|(Q1O_*-1o4P6h6{3m8=PsP(BQtH+v$a>Z+<Jx3m9moeJ~UT&R{1A|`P zR1mvuxx&KRf$fW(A3$aW1eJ1yTVG0YKBogS9+|D65=keXHNNOBeXoVLs$)IcTJ&;s ztfn_pn1F@C(RDCY+>>BEa9b_Nsw(M)LrNozwvf6>bM6OxT=H&}rh`i&JIQM^A74x_ zE2=>Nqq$7P=`-YRHVT=LWfJBUi~!J)5L;N=o<6wJGF*}7q(L*f$r&$29^7LQ&Mw@o#<8P>GO7s4^DjGKHAhdNhuf7q}X7imFzxJhDf7u^97Ujy$ey(6ncN%C>k7aNd89@qP9_fPkUoes?Fi9 zW=hc?gULd-xc=i6e8(v{o@C#%>BKOu#faGbvFv(YX^omB6ud`N!SP?NBYmk>0`|5$ zru+8A#rj~3nnsWysgCTdoyVaVsx)q^a)b-o{jZITe8{K0CxwZTgDyE5$0?*9*21*k z3kocKG0?Z{cJ{@BRYIH5zB&h{_;fGpg~WkP%7brQL2wIz-82WM9AmmI#~6^>Pw)VJ zK*9j_!0NTmZ4`@oW4cAQ!t8Ib$8=(KE(ri_VTCIC;XrzCg@xMI#1f{GK)>b2EPWM{ z49cogI=6=!i&)!x{{U zTm1_JPcMl60wqaD6e_wQR12`uErK+~bq$9du@K91u_F#65W5>=#TPi6C40u{Zone3 zo8Vq}{{X&J)%-Wpk1cGGfpDyS2Yf=TsS>+6T`htJ&^gJ4Z#}@<(+>t8d`3p@aN>5r zIRi?NfSxzQ!AacVsEHh5-xCY8;Y*;9Nyk=O8xe$RxyLcVO{rGaFfP z)>7kfiBrn)bs&rHi0*g8>rTgvaiDKZauaElI9i+GUI_z?C?OrO%YgMuOX0;L-uPu) z18j822ICx$WaFD*Ag%YrQzJ3HJ*}^fr5b{oq;?olvBYT0p61wkFiUTar8jG=0XDWJ zQj(Td9QVf%CAY$bw430@$`Yzwk_Tm7L=G{Tb@pdHMMBYq(G`QW#_WBMwlqrFyed~a zkOndw_O#b#FDkhy{2_&i`(t0EMdDAW_E=qZT^Ra(Q0rV_LNjO_-yWht;@?vJxt=LAdu)A zkT~|=7kWiy1ABdY{c+NEu^7%;l)BCW zn|8!$YFG>D1Y@%5;|$6HLO9zJ+P%~`?15+b%yB7#HXbAGW7`6#M2!{3hOm8B9!8+z`5mzAhAkpVS!Q6t+kGb6 zV3j)M@k^vDC<5Vcz6GqP(v~Mf-^{~diO|PSByTBWEA3!6H^s@C?X@iIceE3v1n7}o zqxVNdLwk|>AAAqZYxR>HT$R$-!*f(mQ4=g{;e~GB%MA|29d%Y@dK&HO?0hJWD(wG9tAqD{{WP5be;PP5`LKZI%g50 z2+EM)6Db!a{{YUbm%-N@3~d8Ch=cgf}55~(M>b65NwJGU&Gv-7h@S|5+$%j1Y3e_ z$i4z)>{6@5b}BFLx7P)0Dix^YoGzCH`HAQK_`%BBatO^T)Zygum^cM>TTgp${V`q4 zCSzGn!I#T(vVo@d=huOY3{>pUP3N$&2*-X$af-z8c#|rT!Lc5r`db(AK(sTJCFN-x zHlGqe2n6lU9*P8rD>IE|#HH+cKYSrjQ$`uVXD48GC*S(wG_`V>ogx~*vfS(ezjM!g zUt?85Nlr*4k*WePB>`^$U%QIBTGbp$~PTULs z0Ja#cjian0`lE1J7t^^Pmj3`lh%VN2g){(M2xoZ93u^@F9NU{;^udVbaF?+GNd$fy zeSPhS8DlN}WB4KkO@_=){{W!B7%@hRSEvs$5rbpB{{X%g{{V^u%9qpVk+6U-{n}S& zzbs3C@AAOPwUH}~aRt#5?!;dA;^Wr^=&8ttil^|h#_D&tBal70I2~H7E9R6Xj)fjj zck^?K%mL3#B!;LI^f9rPtx1%#mS#I|YY%Z@Z_5X(YT-<_pTrIOwP?bQFY12Q#Ckep znwS+9f5hNeT;BI1+-+=oGL2PMIa^ApVr(uz`(UMLbq_@haT}o8S~*oUhtU}a*7oi6 z9++mRG?ryID`ThE57kpVPZ4XdLfY-WC;3~yvBYL+0y7l=AqvLdTOXz#-qg6J7h1lh z0I+sYIJbZ4hiV9R(!)%L@mTlz`r&bbQquUA4p&(UYyso@oHaCX#|pJlnCwmVV{zr+F<1@{mQjDhCAO9Zr)xu869L;0x{w zf-Z1uuvCM(R#R$%><*M#nC#IcE^CdN=yuNFW0!PtN< zOOdDpa6NrL&rB`mjVK{1u1D~hb&(f)bIpy1eXz-%Uzd<00UnPaCfH)KW1x`01I8Mt zo5zk7iEI@LgV>+#ijQTHY4MtECZLr?C}$;~NhmFQwf6g8xyF_7x~Rv|xuxTou-_Ud!&Fx2xeCZtjZ3S5cDM`A+So@^Yh4DD z>JxB@64+AyDrVxVHmzuqFp^3njmDx1u(%@o`r?H|bmnYXZcKWB^xWS>UfUO1`c zWdQD`;ENu@_CKB_^%Y4O6%{KsveCw+K)$23xc4}7pmKb|yR51biamFxlT#McppZX4 z`wTf-PGzr-I=ZA(q=}Lp9$?G~wa(TC{{UoA4@XP*lfR9Za4d;t0s-tV;`A7be^AFrI?SYx2mU zqv{DErlYS>CSOV8U&PXNY6EZqzpeH-yh$YvdmM2?mo+U(j0aZ)D*#l02>RVvbIv^X zQ|c~0PFl2aahl&TZr@>W_OB2wzyS+40gSZ&(hel=h0Gr&Ce=n zrYH7tE9Z8MnAF%@ zFxdNSacb$A;>vnrww%+X;!MI%5}n)1P_tgdorx%L=S^fa`43eZ`pOAhQBqIgNEX6F z;pvEj^#J{jE7WQZTCY)7zAui>Bat-;6r1~6-iMt>8t(%r=>FZ6HoU?$_cn}tV1Jv- z=`%!nL|9>sM1Cr?g`{S?Tx|Bz0k;z%CQ>BKVV1S7oMPo z9NMa*D27Xl?7BQ|Cj*YN~1& z=^8U)tOAy8y>DTB1?qOBhD4;DK5`f*Sj zc`kkJ^yk|ZW~RY?&8ElZeJRtLgHKAdvPjx$8dzkNwCUE4Q&IE`cfY0tb*@R6)%-k` zjp|KhZdyKRXOTS4R1)jPz>C`6*efMjj;a{7SyY%Dn-D-6mj0X-`kY42`i3ewvifJ4 zB#OF5ifEZN20|@+{cmtRaa$eFW7=9iDUy)jZAR(J{{WxLD8QB4R)K0YI3%5}7@om~ z*d3cuLz~xA^*uZi!jkDpu1A_N<%(TByMy*Pg`2x{r3FWWaRkt;Gz{*4bTt6TeSjx# zOJe6qBvaEuw8<2dPY;DSjQMOAi+hc&+hfixzTrCC!AfWk@|BiRQiyu~voL~i(5)g! zE-sIuw2|&fKSOM6G!a82EMtZ;04lZs=>&f)QK;gh%esOpH;Pn-S{Y-NWEU(JbyZ+{ z3m$EY#S0Tkl{DZ8;zm|YRw@)*^EU5dHlknwW?Yw$?k4EP4J|v#UE$oorntRYhhcjjiSc{cV7mtY0?+!77w_B4S0!7Yqlt zt}5X_L+v*(7q@jt2*F=KZ!u&FM-~Hr*AOzs5>h2e{7k@`jzK$*%>K9~GZmnm4NPNp z1y_;Q*go3+@)&ZO%RNN5qzBrO;e4dyQM)-`d}NN>y(FD;IFg%t`Xv!sPuo z$2^9(5R46AwI-rpm933PP{eAu9Gm)nSa&)}YpA0pKm=qs(l4uf?ftMmrfX-}d_f2A z;E<=(TmA52m@Eov)<=#O^EQ>&;gPdle~4Q9ep}!jKnM3w2^P?(J$I7Mxn(AB6;#DA zq?jh+*1T>%m*tA`Gp<(*jUgmEuRmVjZ`T^WTS}S0&Tx+^oNeE8DG8%dYb+AuT%POk0t+us2*6?E9Y9{#^UxCnhlHUmzbPb{ABQYSU(bq;+(nMTzti6M{*z z4T%Shz`<{X9Z42tlBGRJF;={iF;jasmazlrZ_DqB)n#oewDsn6dWvXX8KT#9uu|xK zLwn*ELDxY?NtD*ozl|I$tp0B`n0fE_W54&tJRU}pehWd?Tmsw~fi~ddh-}zw$QyBl z__}*s;?Z{LU@3U;An}NgTOEJ|UkG~CL}o0g03@;C4_qFlG=lt4sT92nn#rlbF=$;T z#^l@jw0Uj900DlSW2`vKnPjA`9TpVIYJJkZZP=P9a{R0Vq&olS-I+WQ;} z%re-h!qi7a60A}x8|=shhM>cKH{SSbGDK`Ft;$2$t-$&yg@lpI;T2k=D)@plwxujI zuqR>xy~nOHeyprXGhD)~1=1>9u~oL@pTG9T(e^eS!I!ghQuoZZ-1uT{{TE%=)@TaNa`cVDFm+)JQ|9Vz$w_+bMLk% zbSqCwPgy(+3&|$k{{RTLZ>}KbGMOW2mr!syVOd2nj&+bjCj$GAQMbLZ z9-gLeoI~QvET4=Yk?}nuG)|s)+dn~ zQap?XxXrG2!|+R}D47{Xg#&HwP0M~=u>6*im6AkK8+(oS8=HFVh9;9;eDPDO1X%w7 zcvxE78{7Nh`_8SEW(wUyt1+_fS-l1JH$U4Is+c9Ju9hg3wOH$6{2&e3gY>~lshCMj zjb&$$I$PgjF!NI;T14&ms{Bo7esPQG=(2saD&7EN*_J zpU(r4tth8PD;(2D9=-gxDow4G!^3XX5iDLGOJ zvr09c)-@6dNwvVzE-!CeTknO&{b1i@ZfI>Q*F@1e^+d0gp?P9~<3^L0ZS;^k9a?RT zS2`xEFEr0Ks;X(>mO>(F83{IHr_dJO-@}a0;hiM4S<+Q}yQM113%U=$>I(sWz_C+* zL5)r7sw*W~L?u<@kV)nslpa!~je#2wfAPnj>Q4T!_$>@i!)RW8O+YJi2xg>7qpPG6 z%>Yo*PM{FQFLJXBsRv?kMv|-cXHG#4WKq;s!w!id)>PCYrNxtma0edPjhRI>c`0hK zQ9V2mF;+urg(^JSPi6yualR{ETJ;%jVUlMsRLNgMOdLxxfJ(an2CHqr8}WPMizD%X zZ}V^RtU1~ZshQtQWzyErb!JmSK3=8*^_0q^bdfbJ()(Ra&lj*f;q1ew=#EX7Wz`jl z6*Bn7l~|n-wvnRiZN{euQ9EG06>T6&T<)3Ga@wWR5m+cxVY;41&JNz2VkT=0J`{pX z$|_V5F%2was)KM!-(o=0c*l5;Gzr*$KP4amxbCP~-5q^iTT@G!&S1=FBx$AB=J9oq zTmm^4B>HcQR$Y_GvE@+5Q5?$+7J^A|Jd=SqZbJADErlJ*+Hj*^600}5m^RUu=4{rD=B{H-$ZC|=JQwiGC3Yi*D zhO<*WLkC)EBbYhT@ZDLr9N$%k(-f?PP5Vxpr-fv)(YmRgH%k+J+B*w|BwF|Hi#}Of z7^7^yvd{A_vXLZYGpQtSKM*&!)E+Rz**8w)dF=*jGiH*Ns?3b6)|TvVq@Mn30m0tJ z__GZ}9M1cYl;?PkX)7~mW~Gv7ok}v3say+ySb=ftwgkHvVnH05VrDTD!4^AxMaC`t zK`up8Tb|WLGshyxS|cQ*N!7l90NnlkHpMooG+HI4c>rl7QV813s{0S^jkq1DwpAB^ z9IPD}w6HhK%#6~!z6$w{kPgI-*ZS|iFPWSfq>{!c9-KoQVSjkU9_MZNu^)Tluajl8 z@Mp46(|D|r$El+vH;HY|$D79fvqtCEDHp04zEqvC_l?kD?Px=UbH8uKZz2mLm&PJ9j>~SWUa1Tt%)W zB~rBS&b+Zr-;@sggWJd_p^GUGd$uXt` z7Lt;tr0Ieukb!e=Ph2i)d8x<~sa-(;Ol~Sewb_I9t7>$EyIY9?wl+IlwGs74}^Q{(}!JQnwMc_#)l^0KPVb$f*rc zmKY*Z#^h=C=j(}3bj1;@imj6JMRJS6gX?cxB>PJd{?zvSHva(qmRpf@hHsie(sYhvF=N|At}K)0aV5?(MZZH_SWI^6j- z+n~2_x;8#NI;^Nvd1XB`Nel~QUN5=Cx`-4f8{$~D0YlgO}kiihq zV`KHgX|if{n9Pu(yBm@eT%TM_R6`*4#HX2I00FDk*yg;B>$HzW5?U~@>^ST(UCgqX zDoY`9Rj+Z2Gt@KjhO9Sk=LH;&VX${WByD)26?-hmMG`8jvyt5M`QYU(G9m@FzSwhE zUf05dg1(rS%=rzu3~{l7nw(hn+l)B^1lry3)K1s2++pPeHT|%()hRu2wi|44+*d2U z9t&l*2yTR?RR*iy2&;)DLWbMzhgcioi9uVixj2p#gc5wFi9;Wkh!*ZtZHO(GL_TFSbaCmWW3 zB7ti!YvLAll{^lnDtAr1%6GZ-zCE;EMUSSFy6|&!xml^zwV*2*CgDl@VQ&*9wJ8@D z;}%?(FQ}0LFpU6tgAdaKa~QvV+Sg5(iw@hI8*>BX&^sl`fLR!M?uN8wd)$t8$6}{< z0Duks@bNd>*NjZcs46R@A_Og_z}Vr^P8i)zG^@pqWO!&6R3l89tR(O0hWsYA`4{IG zjJKr-l)U60LH+RI=}I9hvGD|BfLj^A^ALwstzY;V+}ofP1dDdJzorxvkWH~?pDLiG znZ!=dU_%Dp*oR4yRMpjKMF@v`@G)(@LMIEl3Y+>|?RJnXq;#D-Pn<@pw{maW(;8Ah z(Jk182Z4ayFVkZ#t6GU4TWKrpi%mi#ilA>}&OEnO%WU&`4#9g4k%a7gdVeZCI=d0J zCPfhj%rKf{0ql9cCKU9>U9EPC3JjFqeQB`t!!kfh8?F8O;KHc2u%(SpY5Q(!jB`jh>Rh9EX7}R>XmwkBNswCz)BwaT*)nOs7(+*=5*fDJ4U>FI zgG-V5M>u$Mf6!sL*5=rg8mIsPz9n+vp5)_>OA7;RIwJ=jbqX!EIZB07t&}F@Uw!Zw zHR;+q;17l(BlweJixFHl$axqz=6pujX(~urD5r}Gyxk*3^304F?Xf3u?~2b-WGj}1 zmYtc9oh1pmzqT|(BY+2Cf%(9Nso2N`_yh}_UB>DYGC^j-&&=ttNf`i9RLp}ihK@T* z3ppSG*kapDn8NU@tEs=g7^CJ?;MPBagb(5bSl_?X38Sczno+2oBb7MQ$iiko);U=C z{X$GjSjg3q)Fng;TC$>0{+>tT|VR3&^?}o=4 z8TgXre3A-o$R&MvoQWb}x7e?y231a5$QbRp_rd(h7DlKYUD}o#JZ-031ZN6a~BD^O_zgtf=1RI5;WNO3dTKI_D7+q zLI~gQh_yA)p*LWpdYpC$oS8W^M^4lDSmC^u8q67{2j`zO8-(T;8dBg&)gDyn2rC=<(>_4X19~BUnFiJ*+ zh%tlszYAR5t@b$464+GqP+X*>sDhEE5}=AgPng^iI5w3B01Sr*&BjZRsR4`>_!Dh z@kY`~uVxMWHa5elC~Znb&bv0pYoF_Z(@lDbH@G6l%WDhnKRjQCI%Q4>j zlfNh54FtRBpzIM?DddMLh1A)}v9{WUuXF9T1ZDzR-WZ`))XWig^|&9?d=<=VT0<2K zarki{3$eL!yI%gB;vQN*`=$xM?#BMt+xz31bel@$5P}$BhAL|oL{?Bpz1Z`&+YV&G zhlKKKjn0z99qu_F?TF3`M93fahQK$azn6R#jyWO;ABPzUu(;d~!|R2Tc|*b{NDSFZ zz^X+=UTDg&2T(T``tCd6Vv_Z8_-e%+7fLe)U@mz*hqflrg%aG77!Cooj^CZ}8nIP# zC7A#+IsnWYW+h1j+hc_@XDL60E|^G)BW)81qI&~tr^Bs=c{dXUp4RnO8 zA(ny_v&d8u#>%Cbge=Ep2KFAftC~xieG@T_IRffhm2Rb&iBE(q%smK8e_LTaH%i%^ zY;>yLABdU}+hM7R7bN!n+YD+|y)Dz77nLS$n!!(;W~(V$kt-7qh`^mFn-3`~a&CFW zMY4?2s;U{Q7MdvQmMJ5XP!R~+y_(}~inYPqSYc6TM|G?oeDlf(i-2B{d|am~A4++#k9c|U2;X3H5fOPFY!zLWdF0}xlf{FCp8 zbKLr`GR!B17|W$W@v!0a6$n5(SAH3)^vwKBzn@f3E>);R7Ho^zN%a5ajtL zcW@p$)r&xAwI?UVAPb&YpIybU?DaJ{R#}xgEDZ{>taG$QgifhsAaXCbKDxcIJFY78 z7=}*i363ugNamCHM8(4XFT-PN+irNpw=kwkyt+7^H!z1ovg*=RgAM+I$LorYeu$ZT z8%+(l3Ln6jY_jE zr>^LX&N{jo5=5w)s+wT-Zq4Pr{cJ(!89hlbQn{!aC}_Gfxp&Yz>5kw*>b78-4L3B+LGGchf%{1BImLpCTP`n7kb6{9+vYTA{k&Ig}hKnK2X|nlV8rf=DBB_iy z@Pe_>V_-KDD}#OQxW)2!D1Oat0Ugb3%_-l?ZuBg#C1P_Jg*}%JvLFQKg4sd*6ek993I6IV?FwShWoc%_PFD zb?7e9ukOILwcV+W_nOnkro4mX1t;{{U#1T3JLdtSib)L=hZz||c$nL#3yc`2H7MjRFM+zthavA4DZ8Nsr%e?(HY+DT7k zdNbafj-H_!t^!n4K`-LC7rLL}V89T5*cf5X`g^Hjh8RS&^%9d6?V@l1u({!^NF&r@ z2g6*~MM%)!x~dVWQhyc6v3#ZlHr)fMS_se zGeKUcqNty#Vb1(WR&kffO;b)9?zeSyZ$q+>N7Dvr3e2CoitBL9@g4my`C^UJIn@jq zZ5r1#Ps~X#jAd6KvtIXZ-R*2$C~8~hD`?g*Dq=f$M#(C-nOoEwSTXH$ig^(bXsc06 z_eI($VWTibE4oT`6(;(8plP}7dGOaIf2EUR1%U}`yIu;qY$&$(o;(->S@dW0MpB>N1XYBuQscW5a z7CvBFJ-4%e;!o*pXT4{X%SV<+Pzt2cD-!BR4-*i4qtg5RMmKRX8t*3sXH6LgQf^jw z`~Vn*S$r)gZ9rUc-vprrDWpe?$PeHn_%FAAz6Q%E{hUz z>RhSPF1ofmY=1uZbH>3Xt~Ih1n9@fgP*w}H)N=r=n;SW?xczWzFEwGDuXe zt%u<|erFJoBo*H!;mEPGX$&kykDBAuf;h#Vo&Z03>UBXW15XD~w&U%$)MB48+%}sqBkTypc=FsPYmcQS zm;qr3H&sJVQ;<~EE#sb^alZt{!ELMGf71|pCZdjfl1eGmEYn^^EW5U*y@PRmxHun} zW})&->B&(OLkL9EeOoT~^{~ONj-!e^uP6x_SEz$YWj~EV>LB(uVmKf`vH7eC2(X3=xmM9mV=ET_gj6c(CuylAsYVeqHi_Lq7bKnj{qdWY17lzv z=&dMSZgD-8lcBTdbBvxCo?vU~;#H}SdyTela7OpRsiXqO?Tki_qD-Sbj;@kJ9MM^{ z?iTkTgWE|2e=&_OE6?dOS;TbnDovm}MsILCiym#a7;ujGRlHz{=CTS}XR5eZ(|HN( zJ#mlqC&b!{?9P0yik>rovm|Qb> zYq?Qw3mbib#y&gK;n?+^fXS3I6Y@M<#2Wmuw- ziflg#3+oa#*;p6(<_uvW%aOAz$1tVj47ZwUA1an{r>=5XIbq37W7W$DoU|-PJjba@&Z}}`T(Z(t&d+NU zkuHwBbNsF_)lERC%PmUgWQ^`EE(ZJC6-Xj;;k~~Wl-AqnCf}(W+uICHJxv93{JC!w z-ZD>n{{TN+Ss1`<4boYVm1d2<=?1+_Y)?CZYmx8ihG(isWDTJYh=>Xe>@Dl};|X$P zmY$tKC>KlE@Bq1Df3Ln7&zHNi|PH7Ai!v@|v&L%XD0Wl@xPpUZTjruCU&1XW>Q|eiopTS<>2DoB9 zHaLev3rCz&z@(K}p6&jk6q}z+Jx+$2hMqTHJH{E0*R}qZ!uov3dYT!Cjzo)7pBHt# zt-$B$`Qi1YuB5xN72n~_bv-{&Ad;$7v{D$5ZWQU>{{Z~0Y-sV;MNv*Bps#d_DzutJ zi*FV=Bi!1@f^T8(!NpsrDmrdTloj+;^!3kDbodMS*sj|Rz_{aZHF{vZPFS=#Z9QI8 z+UV^XAp}O~+OB|}{E?@<@#b@B(%BV$t5yL_q;f+X`RI~;Ql^Dc5S=JNAT^KiY(~S= z13I@YhKnGmq<|KS!DLxAc@)~}rrVKVEJ)bcVr&&~tJ+@})lTUUjS-dMI*o}3xA*Od zlBAv-nwFM&DIzN@&QFwX8A$gQ{Ejo)T*owo{hSC@9IrZbr;jeFik71*smV-p7vi#i~5kNad8((+6M{(yIB|#1g=f zW9e^E?~KPijMdARX2KCoqN-YYgL^1++?6EU?f(Gs+XuRjJ9&C5GOeJk4_yTjE-hw{ zQUIj-U;2zDOj|9}$^4NrLN3;Qm~~}DJ#kucnIiC{ZwM7;B0w1Vl#y^ZCg0Biekx`a zGUU+Ll3nGMORyx_K_qj=_uCNiiW#c&7{oA}rS3K+vY<}k|?E@K3bD8qd(TP9naL0%k2VU!#!)8$4%6=X$3f%0@|W|ik1HW$J+P74DHQ1 z&U%gts(Bzxh`~%)X&B!4wI^E1mG`TKMV%`iCf1dVROB^u)3j|1n?00)$ok@S4@y?dh2}?r zM*2v(Y-!I=8#c-=IK;K4{oSlFpzmm=2O$I}Zc6kyztEy*Yd!0MP* zK*|UMx2`)?r8+%4CgF8oOizkHPa^>|h~yz$+xo>t7>4%8T!!CP-k4~% z*1|y~?r|zDNQ?k5-~*dtI<>aK#Dwf|)~8Tir~^SZ-wA|VSm7?^w!S(K9kJG+l_eI# z*kRmmJk$2qSRL)dbYzG#@v~1E4`j5UOIS(k0 zCv%49WL4Z;+W79HZZC*(&PuQ&&A`MGrj&Uk4>>)s>T`Z^4UeAS;zV){JDX#Wf|ocJ zw-_5bdSZ09V0XSE$T#na1w;2ymN2h!I2dZCm`vNKBKzWPkEb|64Z*dr*1UshE@-MM zAId5NpoR7V*s5lc{t6Tx=zZk zKTV2?XxbY?AQo>f%zbfU=*+b!GV+oj@!77&*XiwvfT$L@z7-pIc4Yezh@U!HnW5Y$ zg9Zp>@fbJZ5oV2U4j@+OU_fhsTydSG1(~<)hU5m@fr@MzPU_>`XdP7(83Bsdza;QJ zzPOc1581}+X8ns!znJ?^NxuN92js>N#d$- z+r`~*u)ADgYBuKt1*lM_LZf~06~Qge3b+li7-`@H0oY&&Qie!M8y<1QH}8p=g)s0# zf#zT3f$G;DTtbB;9Uyw)^lU;TfDbrwIW92-DFsa|dmJT;97i$|ImbR}ROu$z?aJ#3 z;z-!x1-9oLS&_!Z=M2j#D6uxgQMz1B3tf`rUiZNIq|``jk%=Z$0C|V!gh=Y@KqB~K zY!tWCf)4p~MsYr-1adhC1A2~-7*?Vw~i!3labri!`j(jxY!tmOhx$f@g;Z zEZm4AdkbroPl`s4OQ|4?5lq3PvllBO`)qLDX-^u+WJ7&yb{(+`LtAUx84X=J>0uQkeDWB|*cH$1p~bZ>4#+KWtW$3Nyi1 zBkEJMiyJFOX;_950V4br#YRpKUa8>*a9CPNoP$TK8QUegco0|i+9;E5odT?A5BOc_~V61a$*l~rtz8M3X{#eR( zWanb#vfM0jxM)pf@jPHg6a^jqaWsLXoG zN_ErW(j;_%+Q#S3);;$lZ~Spw%QFN_l%Y)~B4R>0W9#~idQ5mcEM}hPm4lHel5^-2 zvX_H1MIf*&WB_fs_B;{w?}1g7O%7!{!~3AIgkna(U$y;kM=>q)1&Z9NT#H|G{J+~3 zS>|bpk+j?Z*C&85_+!*vYzCE#?7*o@DP6^f zxAnoQu^f}Am4$)=+=~O~PuBrhg?1%O#GNFa@85C#adJ0MwE-9D`bG~eZ0byLsqmGz z48U{r7@45cRs8xAuQ9Ue76aDbkT@YnOk>GlE*vnAR+GT?KWrmUiBTDSPM5I1ZLP?_ z2a;_Aih-BYwDsuhzq?iQ8~60bGRCu1)fPHZO_%*)dk=fx6RPGEF;qe#UlK+OvHU(# zc=i5RheuAMVnRfb>E~j{bNuio&gyJw*-47RWh<&lKZ&~o>3?7CiFCAS z`ggg*N~ochIkl@ct?%h@c-w4F$f*m{HEf2!+@_KVAa84W{=48wrrH{^rp*j-xPmrj zm7PwdTM|7x+r6>Mm^@mC(t}eF0Cmz8fw3do4%Jh;Ab9*^D6<2i#>88m{{TbnhhJ1v z#vCaG=~)!rbz6h!dy(&KA+GLG7WPqR1{x0ug`{OAY%Qn)PQ@H!JL6^$fo6DV7q zLgv=vov|jkyr|C7DYG)O6L$PY&QJ z)o(3{x~}|SWkbVPJW)nYorw%BWgmaj1Zxb8jVMsTu57^RAACWkgT)fg;TurX8ifF9 z9GiMyYx`p4TmqKkx{Xt9FF9c1kR^Y zkQ8=P{#$$xrdcX;B$4l-AAS3d2j(ttSGBGj+FoR&$r^*GhfDtez^wIF%<+B=8iC^Ee_R|f!BeJSE@V2imh$gogv+}?D1oiidWhyx zrJiHDH{rzfNegVg66sh)*xze?_BT9ZOX)_XUXhlzzOkt3shz-qs-|YFTAuXp6x95SitEGhV8C}(X?J4ry?Z10}Ja#@a zLs-{uN+g-YxQ^<7NWmU$oaOY=$vk4Fp&%L*5(^s^-?sO~nwn#mWqFoc3$!%}8^cjD zOjHu2hS(b$kVW>|-S@?B;k=$UdrMTnF^Z>BMIV=7*9rjO?Y1v{HPSyh`&O=@ndl!} zu}!H!@U*izCyy)nO}Qfd@T}<=$tmYy`le$>=L&B&s+lDOGj$G5k684G^zTs3_=@RE zi*30##^KQQ;|*b5)pSJ#cdRi6y6bsfA>rucA^}3Dyq*P_>Bl_r_OJhu)#_Z??f`VawpZ zLHesl#CUU>D5)Welr0>=PS9!y>ekhNa94A#^5wX@LGSEz;p*Lc*B z;=qAzjrZTsj`-bUk~#`ju4_h=kZW}%zjjFVA7gK(C^RD>>K>@ft7b^^7g6EIQJ|tE zgOX!Bt1%FESwJwY}DTm1VHYM@=juV^>{JW6<^*V)t;yW`9B7$7 zYU$MLk|d^R(OA^TBes@M)&O4I4t-7s$4v0dm2H<#NSR{J1=mmtVE`51{{YJN><%Jk zsVnuCYnA2oH1N#IlFd?0z`9?N_(?kuY&QoQ6UZ_hN3bfaZ1Bg~Qu=O|O5UxOe8#Lo z_3%m|6w!i9hS(8tr5eO@+Yz#=d8=#ZjU}g~WmfQ(X3?rkU2b?Aj(Eg;)K8U6kv{(oF+OZ_O!hl&b|Mz@Cd zv_>wLm#Rv20zEltS{I&_$Pt*2`@4?&ZEkg9Msrz6DyXwsa7m_1$gHJ{Ko~2=#M{mV z_B$J4KMtxXaz3f*JcvBRQ!+g;vAIpbKVZv$t?^~*Y^f{as-U03@oNccH*K`J8iJc_ zE-pU)*vXb+*#L3!fGgxx=-LRdHz`?6AN|IXj)9sQj}6`!<9i0R$`u};!C_;2+;NOs zJL(#mznh-BRFw-7q(Vyujem@Bw%`Nw7`iV}Pty~(%+t-7BqS=Se>_Up)B)rvvhB_@ zF15`@ZJ$`?`*Cjg%)S!16{;#` zNTRNXz}>)78EioZZVuP(ae4T8oXOMGF!Z)#M%!0S3#7o<#^X|uEwDBmY;YY>y2F~$ z#{U3L=~tc@`2Zr|1tO(&ubPmXJ#TN{PIW7K)!Wt^6!h z_qYK1++pN;bgQn*>WL9UWsXMFt>L}(I; z9$DT&w`H={hu9@#{VO!NLsY{&cb=V$En{Gg9@qX~o;9A9&Z%X3dU+}%`NI&9DX>-- zAe;XH^plLstYMhu8J=rSqDpU=r7Qp!RB%Pe=J(To{zC`4QkogFn%NZ;#sqM!&B_&0 zZ*R!$>uhP}21?Hq^GdWK?RJ2d)wxARU6`^hITS|C6pA*}zw$eMhpsIxP_$W=O(kq7 z9;pQ>l}5+P2tNMf4%E*aF$}t{H%KOpSUV|gGBX6QJXro%7u3{MRdkd>nnyLX5^JRe zfe)lwz+b+@>x!Nyi=;bl%EOuA-J^MaVAW!1YpJBCSBq3q0l_4z4`La053kb-tBj1j zVa#KRgV=!P_MBU{p*Q23;jF%~Cd=t6+BSHlJ{+iuZw!_IU({Vl--`@Ssi&u_ccq;K zrbjH%hC6_7sZI7^R{ZxkL3Wb6k+P4{RTQ)3X#sV1rY{p677Ut>{CBw@YzpccDtf9( zse%~hrIq6f%gVKi{Q=-$%{47OF%wd?K~EW!mh&(+I)T3S1e;;5sG~q?W@IZVK*N4k z;PJ-9VB?ad1bVJ>ZaOM}ld8q94na4&3tVm2hCu}GO1-^BfIgcZ`)`UlV7Z~gg<~A)c9M-zvK5h$9g(Ce3v6su6MKEI z)nz!S*Ot{l&jmzHPST*@II%w48}Hu_WlIcHRS};SG9(7fELX|_U+0L~)@MB?Raq=S zOT`goFU9OOBfi9AJXw7Oet>T46Ox`)$?9@>)GV<~w9aq1()K6mYahNeyo|>k95ibn z4dv4OX%@b(PA`fcZ&Mvsa`lo-i!DP3m?-=&xF+74DIZhmiPia}wK2sVF>ek@1X7SK zU5*pPIB3HQDJxGS5@GgE7ZWxf2( zbEqEQQ}xArK$3Xh!P9?Dh&S^6F&8qG;+sO|R%d&wIJUBPwYfGUwiwKIkkROsESr<+ zi^HAG6sUx}ssJ85Z)ajSxE`2pqP+aHkVh<_Ggui8qJJxU?}0SAh}9&rB)$|t29yI} zzSj4?2UHrY)tu6qL@RNwMbcSEJn%Odu-F@`ib&SrDHNs<#}t+BQdVCo$i!a5Z?*6j zCTE{Jj!|a;ix9_e^NegV#sPpheuEzN+Z*EJ028kyV7LyyFS z_aNV$>~LEunIoF!BymI!S&KHL8GgZuQHN2=TfSRA!Q_9;=mhjY(@!I&sdZa(xpVdy0p-+zKZStU{&)?W zsa(ub3pr+22e%j{m`|>tnG4tsbn*wSzSt8^zCLXbZT!2PT!U}zixJ-BpeFWK3RWHq z%^|eU8ja6y?Y0Kg%cN7)J@qGube)0I!T$h!IbSu)GF^PdP>xEd0{;N1!eONSp8LxCAJ*x%%Ss&=h%ZQqsjmRZTSX zRIoJj((`ay%0qge#cWr4>YFOdYic2vBFFE5 zxlJIZuT`ExuCoTPJDAyQe!cOc^%hMZQqt9Cd2|x3buCPhRm8^n)mW8tzTMXS?6}V> zzjOr7tt5%Uf=$-Sv>ti7I9ye)xis8Q!^OmTX={R>46agpU!^5uO)6?HSLZnXkMDn{3~ zp}yQ)W9cfnfH0b1o+1)eRI4!-xEJSfehx7DuBhAvU4?%RoC?f(!D{lVSPR8c)Sog8 zbHdji85?TnO9tRx#@}oZ$#a>Yj)tO2>S^ER-{!-BoK^<8I%d*AzS$?nc%FEn943% z{muP-aj(Tx^v-gYs*ICHk=gD6XHuGOMbv|&k9<%nvg!)Xoy#lh)!wEm&z6*1OR|@- zQr6qK7vp}%7VyYpPOZU7km{=CTk>kyEAp($SYoG{YGG>Bgs!HBrERLpe}#sv!Q}VF zTjDitS5=WhGKpM0bkQwcJZ9(>QCI}(idtVuLe^)fLYKp)E7}ajfImL(=>1Wh_0ZDLVL8wi2S(q4rP$PHS z)RW1>bO?^xm_4-t&*AqtYBXk7HdAxCW6l*p73%5 zsd_s#imE9LhAC;L1A=@VT9@y=v5@%EQ~vF1=Zj!UqSym(t}Z_fYN{iGe4>^zB$iPk z5KZjL6~4Ey{#egutVrsr7DZe5t!u69FYk)FUvjzha zV(|lO2lTzLieMP;iKqesFZp3)(ql!Yk)yf#dtq)Pn#wjK zz9Q2?Ak|_xl*n!f{8zx4r8Bch6Bxzqao-XW6w{@fP(JvE)Wu&)5)|IxV449!^5T-Q z3+{Zx_r$tb!Z(RxaRuXLdmmfh370VN+$HzHhB?P%pzzbWuq8qfYm4CxGT(E21O1|i z2DVi#>UqOb=COh`N~?3Qz6rR}9s-k;(aBaNm|q++k5P)~%vRS92){Uzm6vN0KG@@q z@yJ{<0SK{@=bU$4``}wvqOHpeaw^cx&fi=QgzDi)m?H@L+W6zl6x#Q|^{TPB?S}ko zl1b+SprSJRBGE_=_x$jsV9mA$B)YLK835cIK?+0d6OF(&+a7s5o>G1B5oI2@Ux+<% z8>R;*LxcFQhiTVCTnk?jmPI|r9TIE+IOR5_846!>zqTW~f^UT*gWn!*4*29rlMV6D z1mWOCu%+DCVo=hG%IWmOZE|<#1PBetz8R{H_90KcB|&PAo0}Xw@B){%*h<8}ZblxB z!5VSPfF02JU>4hP-vVnWWRi7%5tJ_g3|MB5y5c23u)8Sw;qgjXc1V^m;H%YAnkgAS zddlPR^QYSQmqk)!LA}W2cE@X#j4r5dPddBcOcG5L8et@zS1bnrV?nGFM}5|N-eP|I zD*=|uZO^75Ph6vqH@M>vMrgrSM}(cW7u?~QCXN39co#@!zMn&mW-T4UhvkAcD94Ca zKPlG3atA+5KTkfGF6;S?@D`G0I*s&Ox$ln6UZU1ve&Fyi&&SoU2!==i5>c}8NQ9`d z!)V*!bv0J6V0b>5aMh?DQRW@6p8$=M1kF3zD3TFv@g^y@iER*nlUU@Jg6~H1`~PutUgSOJK$%Ew@M!(KTT2LNBXno_2Ff-kYasX!7CyJ7h!7w3FO zX1nUdStv;XC7R4N4Z9PEJ8gz#VD2x@7vd=LmfZ1)qJ$KelSu=fjNZI$nqqY38!MC zWA(+Tqq#K|S0YM`fy#~J*1M@mOIw0R7$Zw0@u+%}ZSX3P$s1gftLcB!6B?mfAg^a2 z*n)41k}~$CLmo}F5{SH!%LyU1E%_K3G^&hM4X%5gu%PI%E`=a)0XTHaM`3mWt+^)P z90MDtfS&m^4p60w#*~ZN`!N_-x8;ul$(aT18duyMxLf1--y@^{qbq8knGU2 zp4gko1xSLORuVurzpf$GU6=(s4@@Phr7LwL05HLsfg=9^d@?wnc2XwEjJHcus;#F; zwY?4-@KIQHw%S_=@j2Z80DKb5a``J#Iec#|_Z`L>_jqGdicC%M&Xx-)kxo}jFPPfo z0k_i=GJ#SYX=W;a)y2IqdJMfHq*#CjefPP-;HOyps-nXgQs##O7VKR=!*F%d>}u-X zs(WH*{{Ut-;|#UcMaKB*HI1%uob#yK)Nhw$u`$(kHaMqzU+WoqXQot9I9$@b%rvIJ zl&}Tf$6`R@`&^7%G@r$fn!n<2KWTcM=xzjAY(f~!dyw)4c^LcKO8p1EEcEdMKcrI7 z;vi`azf}@C-AVeIN2X*A8i68Tn~}M;{9+tyWGXGV0gs@!0}nI1pB6$j5oKa`BK`d_ z4z621ki?tm^6h=U_4(rC0pTUa&dMcrlT=6ntzn^e-_zQ|4CRzlR#%oWS|w}9_VVq> z`r=Q4uBIAOHkoE%WP5%EzV^4%2O6H9mOq!LiHty5FW-I1zdQHC9VU^bNL{I7@EFC) zwSdbs5NLU_=z0i9B{QlxQu{V)o*cQVSmck#Ofku%pz4J$EXc9w%^cm`CuLa2GXnpR z%v;#(eLlkxsw*NvG?MEskpfpqI>>E8-+WVdpigZBx`mq4$vrS&%*-dyNaFii zl8DO1h+Lc%r&1%9q{g*}l~2qJ;+;I270!^OzrFC>a_o_$WJI1+w{K8=yWp04G;&lb ze()@0sUvIOZ|jH&q1j__HJQ`~zarb?N*5BqTorfK?3MEG8kc5mYrcbP+T4D4A5{K4 zF-a>CXBR(z_QAlClEYo%b!|v{d!O@c0j^-F;UfZy`y4%`07PnJEf0pK>^4z-h0V(! zVf}FjDvcy8_bnfcSTSAn@p}wEmeVsdr%@JNPT<(E?e+fv)+A-{tQ3n4(H8oPF|Y*j z`CRSogFI3m6e{|EnPCD)VQ?9TYm>FTZHe^yM1f<{N?BABdkg;npO!qY6iX{Y7_b&3 z{wtrtFUbCwiA5_#AeqUSqFu$UrH-HtzdRxCBv3}te5H{o%vW56Uf_*30B(Qv_Q5%0 zMG>@2(Q6lSK=S~$^8TNm1VElV!ERNV)pcIOxj&{3oewN13jXHyYu%0Zx3{m`3UC*? zE1|NCrb>D+tRC#DRf*o%exc`TT2!cS1(tFaHQAYN4cqf05@CUUVkrWN6)fNZayJ(G z@pFi^4wBS(fypOj56%ZbDm9)GYs<=MBU5WgWRZctl?Oklz}kwT;4?_(z{u)pXr235>#C%byujL0Y+boiefK-xo%zMP;pS0L)R})+)78C1^x33hT0K94lrRi;=HZDW z(XmUYF|LT0cTdGG@dlpB--vY)Mb}n>lSGs?VmT$0g3<)Fg@)Dxi}Q=ORAn@g(!taj zBcBmrr-daKD%AG!-u ztgl6*j;0!1xWgkXMTB`*3o-0&G zT}~bugkefbH4VY_1bs-sjKSukq^Hd3B{c9T63gH*ZA_=|5COf;f%o5x8J@0c%5zC7 zDUv4h0Kl7b$ou|SuN<$AG8@56En}-!D>bHU#!S09>AcP-TG{CuSYJp|&7^s4*{%WD z;<1+0EnRm}=amroWuuOqu^;`ff^~1ezJ=!e<6*3jB?Oa64~ry3Bn(#P&0)Fp-u}OQ zWB&jVE1H(7t0`Qr9KFne+2NMUQ5}YzYqI_M+Zvb>nci9(&&Telr_~)s+O{< zP{{Mk11mgS!MEQUxUU%a`j23#Ow#!X9n-xIv}Z0f^H!u2Q_4!d_6x{2 z-q$1Zwlr*mI;XA~JIWkOF<`<)yV-vYpObIv+iVod;)+G^sHkY7rFaz-tU(;eHzAY_ z?Qze1Gfx#3X_95aSw2>>jz1F7Cx_ukEvw20m9-1)&M>lanK>ka7L0Ki#>HL?boq@H zK4nO+I>o!jYWsbt+fL8vy18=9kA#|o)8+7FP zbRINS4K2*Ab(6#+Q<6^ml_Ykt#g3W*G)U?ho-_*};4uRFhxy+a5&+i`*=d4Y1D0vm zStV9clV(X#G;)0IXHBKm4g3(>srLjaByIWPcf)EaQaP(h1b&$zNPa;D+=&mnwrI3O+9CtS6!vi`pkWzlgq^ze!s-~in85C};Nx9%#efPs8 z$_~fV-v0n3_!vA}Dej}ElB*)8dUifAt&PgA%cPr?7v8~z$Faj1qtZ}RP}J3|%JbD} z3JCJOh&DgzJD;{E$5-OkJSD+`nfxT|#nsdjeXXYsb?qv%(8~(!vXTL9j-~YMd9lSf zopjf5tV}7Sg;~z?I+$yULn2cdR!J3OUR7BO6WZ(vzos0i&Ey?-QI=B9&XH04%)na8 z*XGB5FR=B#1N9ELbIgI6^wY{EjrQ`}ZSTk>Nf!3o1G+k{vZvyHV$#NEWu{n5A1&is zuKxg`_1_xIg{6i={{XMfWZ!4r|qynl14BI8!E+)&{M}2K#&1;_;Z1XS$=|=}XS? zh&q=qO1UW!su?W4B8^cypgD6r08J&s_Zl_S}O}kp$Vtln< zD@!bf2dUD!v?Z>~>M!2g+uI3^#jg%ee(k06?QT^%W`cF!Sn#~VPL>=K?b`$v7D&lh zG+B!cxIX^4oz;1Q{{YN&H57`o(9bDkWRlmo0D?Ok-w-Nl(IW{fUDyx^8*RuJ?T=m@ z=e4#L5vG&6iBLp<#L5~VNNa;@^Z8;T7b!^CwPgg&<0>xr<`!%;Ft5ks-n zaD1R|as7{cD>0}uNv3HTQaHc>4tBMVsoM;)4FtBdRirghi4}+{$l9FTS(2GpIdQ>)RfjOJc;KYg&2XS?ZzO0 zDNA=KRSrktPc-#`bT!f#M?Bwi-q?nE5i>HS$hMPv zDEIX~gAULtwr3TYii52Yh`$@1yIdSZvJ%2dWGw;UB2=j=Q#Z^i8B39*8}2a~D^`xF z%LSSjR%R9(qwS-PYzRHBFNtNEFA*eQSiQpApZCC8`U#}W7P8;FQUsPerS=EtIQG6X z;UUhqaI_{GTe7QXG_&;AQ%5?3B?Vw0NDaKC?0tx^1bbq~Q&P1QqEJGKV=f3g1K5vj z2kPlWnQ)1VIxLq(?PJN`zWe>KsN@UNpFb_<8i;Th|&*ZwolPbq=ydXLfDN6L7z-CG^frwLnOfX-_1q`Wc6m+kty+ zd-K}Zj}04D>y^ok5ea6n{64nzxdR5NYQ9=JUzUb3EKnyfV%>3eYoS>8Ln$ePIDY^s4Hc0Zs1t{ zRtFc{wI&@uMVivc^VB>}<~W+#B)bhndhhzV;$E(;@4_cESoUQsd|4m&!wfO zCZ@5`m5>%o1oGT|B_jOsd@=DKFQh#)L7T}>OAU1KK^&SDmd&N^q#ypD%MBzE4ur}n z{Am9GeN@JxH%3O3$i~Zl_Odt>d(f=aEY4R^V_hz3q&cw#aD) ztgDXmMt(~s%idLC11KdVAl+^V#@W(2wCj*%wQ=d4;;Jx9;u5T*O9kHB`I%S$0IL|S zIfW~wMg&}WS$%lMo$%(q87U;7teI)PRSi@!>HKVDRnhOrKm9nl)nnHfG?Rw-mpPOYliba~zx`T8A@3sG)QgEl@g>FifkVmp6h3N}9Ms#)xi_Ov_;Vaka>>?~JP?k|ctv zI*%GQsf>ztN3yE}aj9*;ZsQgoi20nfIW!$8qNC<1r)jI%qz(+^os^Bpxxcl*#V_Vt z!&cU1c-vi=5&`ZGJq{ED!X)=unJ@ED?6pbj;FqQ9b4aRuW}=a!sS;g8(a4{HPa@5@ zKDWj*SY$8YNE84WhTPwNajbMZ4Cb0@Lk5`hAyE|Q@8vQDR$CFj7w5Pe<1DR+!z)K3 z64Ab!TI7Y>9fZKi9^XQx?zV&{$^_Al>@DnlFs!mRc?X2RNVhlb_x8iGr~N~)0E6v@ zX@eS%2~|s8+O2Va?Ttr%9g+s+XxU8lbX_oWi4h}~IcBDSqS(si0aATJ>NY;u$}5sa zse3U}2@QTpzBKIk<_(c$G_wUtSmSx%WgzPkF$AAW71&~fJZ&WM9XhPUTw^y1{LVef zwE*Gw!m2BR5x+MA z=MvkHl%5;K!ywk*fdq;c~qlJ$7nDZ8uV=1t=ml>S?d4b2@~<+Fljndd1R6 z-L2_>KRX=E_Oi0yW4Zd^PGk(pMQNlA%YOUY3KcBT6q9@HV~vR5EdgQ4 zk{(G@=xW_w?pT4ywg@eI71SR`wgATDZQBynuBuspu(2Kg0MA@5Y-W>mn+99jD$#bR zabBV zZm4%tS2$+`u9ft^IC(Qw3@$y1z42c(72;h29c7M{(7>rafa9%2n8I{PM^L8Yn9ew3 zV?Xe?ebAh|rhXZ%5gU?6>*6r5xCLL zphd8WFe42l6=EKvBb`oax+O(`xxO80kPx-_+~S)SV^L9}NM1QoMhPC4z1WL^#`}6= z24S6=cZw;e4Ale(V~*_4cG3VJ{I0*ADGWHttwCKmj{?IF*<5O~MU34I$lll64b$h> zkyU{g?he?b*XHze?uym%%OsVJL=qraw4%g;>IL^Wk(kQabu6`2B#7gW#Wo{VuWm2R z&9QN~xa0n$>)|HT23nM_UUJ4emzQ7&TSZS!Fa!G&K@U8v<|P zm0@nyI9GuET1eeH#{gZcsF+{rhZa$${jrn}iXd0ZPMI{t5eY)mSiQO6SPT`({v>4e zbh6D=4Miiw+Fb^jE^XL?KT(D|4rc!VY8K{3?(0C2md6nqK^@7(RlXo}-xH@?T?NWD8Xd9z-bt?!uh0k&A zf&K+N>eEwHyiQHXW3e8V#2GUwi=ApY{P7y1qgvb@FW-J~r4}RG#>+Bpp&Py`b!5<^ z7!g4LlXL5Y!)le#6fgcm*8`*6g6HaQhZa*9Dwhk$Hs=;jJqjGEBQH~}+$ZY1NHz~~ zYa3!3$PAYz{%wrqt_dDMccLE3qs+a7LO0a0$8FZSh)C z+Q0fC?5N%4Q_02iLl9Ww>ZM6vnq;Ml~Sa`A{V$; zW&0mo7wP`5&1vg`J!4d`fYz)Relq|uvM7z8+72dGbS6?&Yt+E(Dke`IF7oJ z>7R3Se-HudYhKtp9&JL@hOAV@;0|22!xc<#28dRK%sdoGIUs81frypzMG|Y4SmIN| zI|T>x!0L{u$RU7K&70GtWb8{DpP=O9AnJ_Sa}J=ct$8Gt3FXlNVosDCSRMy^d*aSM zBjhIb2@~ZuF=KV9R&@qNOyOHNq%KXYjvM)5+Agr^{{Rrib67Pl&2Vf#!HjBH>5v9U z)s$S41|vyV1v)f~9;sV^2HXDtTwWbHr)%9(_vbY5w@lBiG75SLDygfXtdT|57+cQg z+Wo!pRFkdqEY6GOV`ZR#lVJ;8j{VsG083*ro~dc*jIzvvKrYHax%=S$Lo9T;WK=aE zi5M4T-%D!V!2bYGY!|pTCf_PO_0k&PBY!(nQqw$>$sx7F85-mta&U~dHq7E#7Mi+n z(byDO2p}F0d*BT&V+1*u?jCs}V`F6;cd^9!`g(U|nv!j5yC6S8xWzg z7j6o$W&LNJQ4p0a9dfpyJYl4Q0X&X4;NYbPT+>y#NoePUh{S=1m;mNL8NU(fW9f<( zTO80_R7RrhwVvYq9q`qC9L7Q-LSkt}*;{*9dUnE{j~Q{8_wepEEDLu&*ymz4!$IXsG8{#fxIDC_O{%Hx4wL)U=hK`;dWa%@>LMfBLH+TP z!7Sn``#an3UH zOEeDiwL?Z01rDQ~i8tGfb{?h8qJ?T;W@Tv|jBeLfTkI`;zPL$;QSze`7V@t3@*t@L zjXV%{KG=&>Ru(o00d^Z)V!xbcx1)Y~(kYPX`UjS#=kU7u`j$Iy}x9E0z-kjFLWtk()}h zUdN8z_rWF0r*WwTfHt#>9&PFVUls;VIChtnLHPMaw!oNrrsslt3@}-X9mu)wg=TTS zUm1G95Ll2wzN6R-4W!MfCY(fLs8MbBAN$3@JPmDwe=XG`jgujwD!owv#4W+^gz09v zzWDV$PF*ZYR;F~i>Kf2n=neaSOi4(gc(sa_R@19QiQCjzkVm+{ocwn3Yv`nO+>`yk zqGco_YhTxH*x*Kez`f1Bn35=*mQ<1{w1US$xVNqqMwgXmjDB>$B-RY-w~j6WfBAAZVn|~ zP;TlrzUP7KjORI{g0#RVvgGFb_rpv0z47TPX+a7njfuAh3W;?c&pU&T4hLlf8&Aeb zup9d0<1dOcOPqCXYb%X%&0jDf2G`V7eu}@AKF>e^7ua);kbWW28V-#ENyzK$4JF6&Y?0$WtkzA+V-`)fD?<%QeG4#q%0Rlm|Ew8 z0Q&d#+ZE25q>*DY%OV#$`(a!laQC>+t%Ivu;i{5 zMK;_Gjqaq5^9>M)VYd<(G>WuEvn=0 zZTbFqu0^`nA4EQgOFZ&aTpv4JZ*V)DL6O>OiL5mT4W*b|D7dh&?eB?MS}Zgq6L89P z?c0-xbYfFd^)}R;DuLL0dScUPpsFd_7}=+mMrA1knzkQ})oed2?SoAs(nPEdxe+hi zvy<3cz6a%qO$$WG0hE?zzU7HG+qZvQNR}A{M(iA)KO1W8e__D<@F#Qx?uk>X#gwH> z5E@FQ(AM2iQHdXYu_GyxINqjd7)B$8S&2OHVQ+hphUybuUqwzLXqXozPX2=b08B>A zAd$>@WMKl-loF8InPXouxb)az7pNW6Hn52-ZTli8jyQpx41l>H1Rh=frsn?G9Wx** zrR3Ek8-g#WfxXWQw`@szhcHx9&=!#Z004Y|0kysTZGqI%UKE9cKiUEE1_U-S6<4=~4QYGV!LlJu}_uCSw=(Ltu5Cnz| zY{zZR_xIZo^QG|Phvk{B_SVCDZaKCLJQrz2R4k~oMLo^O12&m3OuXD!8`A41rXgx{t8VsJ3~&Sp;tq! zmmX1Z<^4Cu5K1cEMU+WQz#@cQ^;~(6sjwp0esF4LW>Ua0@dyWQ9-pUV*HT}v`T*E=fQ_Be2)wGzl24-wcl zk?sw*`fr6t3Po8Ql16kBaJS#LKAyNP$Zb8A(WH5qC-~{Ew+-xlecs4hU+RGnt}?r5k%fDi7Y(CZbl;4$|a@KQ8LD58d_p(ZN;zj0B?l2 z0_zHOY?^y8bRd%{Eg>A~=EL0I?Ta_VuA>3p8A zr?c<*eJdKGDvYGNNaJ%NF}19A0hoiy+XJ&&*)smUjj7&LOxB!u%DlwNJghHZ6pI@J zeUGL*o?K4J$R($p!rO`BDC)jy-z*jRZgJvM-YQ3@@Y<41nI*X@LHE9s_BfSFVyLR9 z%wUE%FSZZ5XsbBnWeYWo1lLN4)!V`l7ZSpImm)1?tk95^XCQJ1iaSZ!J`s;(11ofJnS9qvx| zDCuO$@?4iE%p$0j24K}PG!ZwIEC?gLwKcZ2&LLA* zEfsx6X-`avmP#3k5C?>__)L*sxah6*YEKnbyZQfFg<7DdW2okTBA^b~g?N zliQqUO4qc2(QP&N;ap>yZu$Nd7pm);vmm0WuC7R6uJFi+#sQ8*XYok2uD509+us$= ziD5-Bj)p3U%2YXa(5J^;E-Y{OY&YB2e%Mx5)pX*Gny)DRp(FT^w~XL6o7}F$YuKBE zu{fKSQ`KbMNi`%DSB?sKr4Eugs%SLq6iw#oD zY81|=aI&#b8{1&If#8GbgA{dgOH$%0sAO^_Nsypd8bAc!u^O$vueK}E*T+dwk-Wx3 zEkLzHq+&rN=mM$tHx^;)FTXfHTT4$>P?hv`C2E5m5tg@zBmgir`U8wvPKR5CSo$li zs;=mlNms!mJVH@4=3=S~7X9Q%3!OxNr+?2D2b<;VV z*+dzn^)#`UrKpXPHfxyNu#KMJSo7PQTk31*YoK`6Css%CLk*-lTEN@WZ@$>6l?ZEz zs|w6=0>BYAt&wC7lMyA#1z;@NcNX_N?S%Z)QqI+pyr`@c%A9$7k@;Tu6J1dxAz5QJ zMHyt0F|p9iVB_3rCf{sxDXEGHYG6X_ti{FBziZH6-$*Pw%(oXfnN-fCF;zgq&qbAS$Hx7xL_M+xV4(Z zjrOp_yz&Hk$I0sFWLl2_G??sD#8>d-8}h7x5pFOO;blZ=*UL)Msu~&xjv%)1^|Zq4 ze%u>lQG)TD0qlOtsTyS#JFP1*r=qBeu9a!k;z=4Rm01~iv1?fKZ_9j4N=Rj?s}DQP zt(lq^-oT64eRuq@#PR47PX@ITH;E<446^FA{q3;&W7$o4nst<}iPKzC0dh@`w!~Qe zxWp}ULyMMvF-@q`(Un;lGCV+UCS!~Z+rUsVfq$Y zT9gt7WDN3LcNZq#?ZvR1!Vw)RGKLBB2T4J4F2DkPyue?zv0<+z)>0&E9NKRwo}8)i zvk2Eg2+)<%{{W37x!Cr(1-JIcvb@q7jOwC_IMz0f5hF$o*^r%x^%n-?k$ft6MLuf= zXG-wF<5jPX;$O}Npr8%`vo}2baP>}EOqsCEyc>jTk1F5dmT651m$OWq4O+?O9pRU zuD!jF<&S1`FlRYsURzlnq?b{Qle$O;l=~a+^u8ho2FTLx6hC$lIaoDzn99s+3X=C> zeVEwtzTUWgrWuV{i9jrjKqTC6umkiMFxgcUJvTISuBq9);PT8iw)|{P-uU$`1nof@ zR%nfzNFhNa=rO!Ac346y*r2e|Ri!OKMU5&P0OSG+uX}nQe0eDuaCx_E7H3qRNL~vl2K(&8-u=C~#5Ssp(1}}2K!sClap~>b9N8RqQd$Pd zmPa)fW8nM7e&8*<%%?s3LyfJ9Es}`eH0>>sshR2T8f(dynXGVXbbG4|Ia(2MShv%DO4#Nukpu zZlRXk3wOjAs|4*=c*85hV8>v`kS+RefE07j1$>lNJ_L+Pi+&T$y}RJPQAbr>B|xW$ zw~60{R@-8Iu~@*^n?YGK8Fx%&xl?D%a;<0-r;H?PohUcCw*9ScFZIFv-=pa%Iv&0S zsx!L9)?Z>m`z3-zf0Zj>C%${{Stq3QDas zb4kDrfGOf&4uymW2&ODPUx;)?K}-T zx&7#03=v`xR^Z$9ICmt?UWTTMxf~g3sx=T6`;SrFafen3UNck{GYveOi`n<~=EsYJ zh`Gd>f6PZM6kZT`)5RJ{Q6RV{*NY#m@mayL+fQ`nlFiXtHmH)0YKo`v=6Z%{U5)v- z^572Gf|3MJ6pu1J@5ZID)IOWyZ8Qd&4*(016~XSud;b7DK&zCcBLbkfWg&YpCj!Qb zAaIH9B!W_CY1z7pU}GlXVNu1dLAT|Dxr`D*Gd!-EY2QG3{Vi9b=kG+wF5qUs)*G>&9) zmUK40hFgtZ<8$nBmk*lEx)KRwrumAxYQ1u(YZmafZh1Oy$EGyjhuP}aXuu&zay7|{LpqiUBbYBcIGe-710z2Qh+W!E2 zPo$c7n97ne$p}|dd+8y8zuOlti`^L1Ii!`8t7=NdFHI;mDR-s&#~u$>erWBXQgVwfWrRHp=OfJE_d;e`!^vW=}~3bQIA8 zs#1c)hPbt^-usRA#Ju-Bf?UF$idbWJ%JQYFW=68KuOwh|e<%Xm_a_*cSfW=@`m6BB zSS@OqmSghMJsQ=RmVHeDLb}(?0kO4-yA93u9CyTOyv^xjt)Db>S~yEPypgh%Ko@dv z&GlN=@T(@$@*@xa z&idmc>toyzZSg}J2+1>J_1gacH2Ei{7c8?s&MLE7`mEA8H1-x9LBND@zgeQv3Wrme<<&WyIcLnlB=fT@VOx@f z2j7j04UPk4nZ`#|EWlQ@7-1e0XqC2fHe;E~l**aYywb|+RRu)LaPZ2vLAKt4$~HK?-#Ukc$Avq#?JYmRSW>y1W-sPiFH2%?6A zG>Ob*oKzHe<8V!gu?4)lT#ML?ZI3^k*?~LIb?x$6`2HCcTq_z&Ei|_4gj2Vh-ww|@-X<3C((9wn8y~*uv zE$@QabaTZk&q)GGuH=i8sX#UZj%{;|IK80CikeN2ip-m!;!EbLKLwl^L#UYIIRnCyXFf6sPENFvv1Tek*E=~Il zIMZ4>7Vs)R>Z5HcgvBw^!otOe1Z~bLe+)8<<#d$`M=_pwe}7pj0V9KQKnHNQI}BU$ zMo~xdQyFSqLlGp9l}iK9dkg#D9&@T>c(W0F73q3*IEoNBRDPSzvmDprT$x>T{slAz znk0!CMZs1V?_;?v^=kQU3tVbs2`KDd#dv z8aFzD0SV{0+qfOEb+3;ul8g47PfoH`M3A(?$Hh@|qW9lzUraA4(Yejh>G`KX9@dcW zR2!+YN}769sp^#IVYkhY>Auc0WQ*cNk!A-0He%{ zIWnb4p`}$INEXIP1CU0dZgh>#E!A0^8Qm3P(?FA=uYmy5a9;Li9j*9=z}xOI5|wi* zUZkdC40IIGNhyvgEUF6-#DX{gZRu=j$B^#`w2F7^sYw$kp?svWIi_c5c#aof)$1|%G zjhN2Wa6HlkMBt$9Vk|$NGj6i4lc>7eRDLL>@lrU_M%EW$t8et*R@l+N0$h?v{2>0y zrdbV!f!wQSN7eq#$Uo|7S4^6V2Lv%wZ6epTw!h`;hx;QDG@Bf%a7aKPqjc>~C4UeEBwozKo%Yz_niQm#T7bt$ zZ!NbfY&(y?>4@~tHAN(KH18CN+)3nMKEA^oG>t7gKZ=N7%GzA&UG^W(^TmAvie{x6 zvYqJGp(SF&!vJXIyw?O1?SdJ?Nl}+Y9C3z1Ew13OZ>a5vxs(z^K?)=#jC&GFom>5g z+a1*+Q|S45WU>GS)bD%X=(q#ufSM#I8H@_FvB0FV#)8979B=w!WSs7pa`eE|4h5_9!Iu7_Nd^wNI zQT)`gvMAfjVhJ4E5YJL&OF(O7l1SsZ8d*H%-q;ySnKeNxE85AZ-XfRxJ+WKrv7#p^ zEV9X{4O?%`usH5{c9N5ki3u8jMKcb!tEY|DC}4JFCN^awO~%(9$QIiX^18goGp$;R znWSgeslqW;QS3MvtkbL3W^u+wezW&$?Xa)KD! zt56iI37b?cd~gDMBAS@61&H7Qi0jnzM^7ZO!xNPxMuOv3_P*E*&Zu~gM#>`o&~)VajS%NAid zjaU-Eg(Ta9w;tF9RXof}N`p~$9E%P}{V_TyqJjh`f-c*BBkOESm^-MAt!Lo~esNhW zl?mgpR(A!Mo3k<4UfkfNO-)i(+{drMPfa&tuqOWirUlT}M!AJ$O!YbjoiTv7W#0D# z+iV!=`6=@mo~rF62*<-`TY}!UKTp>MB`^bAB4?P@sd;ooRb(-NF$IfUY)!TpkuI;8 zrH)uxoo>p+SP|)k#SC&sGN@pIz#3k}Tio-9YAM_&mUc^%Ynxc(Je^M6TN^flYcQgQ zR1%qLE>MS6JdgAFV07^KGem--NAR4TOn2CVN%yuS<+W2yUnhwoD1<7Vwk^5XU(*w2 zh|IyhUv=K#^L?-U@gmu=TtIf=H7#99s1taSkzf&&gMX$KnC3FoXl9Z0AT}1UHtv0J zxJ25e(wc^^#ND|6056D@Go>tvAtBoSMFgGy0Mvbk$KMdfG`oe*Bo0(ClTTd{kw)MY z7Z*|LNA$zBRFOQ=rHW)xptvA{MUSu307j<(RJY38OUY3+MnPp;l>x7R zrr0Y}LLRb`tt43DhEg3a19^cL7>AI=9HEUG%Dd{m_uAlb+Y_@YWSWo@t8Ff&S$iB-FMKruv5b{jnYzg{2H5g-Wye()>5m^Eiu8kKx5VJ35Gs zoCwI++ii{;k_xD*q*)vg;5zO_`M<5dTrWWGjJ%>tMHAG177edb5Vz;w^Zcm@R_prTX9 zQS#mtQ|X>X*=3K)z;Xb##}T7+ie!xpuPd+-g$|*ci+QcEu{gA4nR+%-@YhERi6bS8 zF&a+$jkxXG0y;PLT}@SWbxk;730PyWI%6NiZ~1<>S;%geyU`Gc>I2mtsrh-Ll341= zh(*4r$ta+18v?4Ri>wtb69HjxJO2P&1?mYh zsUwPsr6v%3L@VXFX4{Q{_r*+i5^Lg{BS5w6x|%%CC92CQWJwx2qR^K*TEk*M^xyNo z3d0t1v?7`|q>wJ8bS%Jj-`9Und_(A{DOWM6@ZpKPIJ`F+_HcLLo^U|sJv${T%~d^Q z0x1~@@x0p}NGIE$Obo7fh*|}N#;_KGd!aBoYMgzhi4OWF#aZTb zoTtFR&gdR}NmrR?O&+LBP>ZVgyE52cjltiaTnWi3AW3G4>FE+!*o)6{+D)y!yJFLr zWl~h;vs5JS7?Lzl!R>7$(%W2%;C@?0Q$v~`6>27mc5v)w)DecBZR^{<8p*ANpryJm zHPWqSSuC)isHd%`a1`7}Vdp;FZSB4Z^cu}QJzCFN%z{g%vBk%mk#65iS)hhCQjJS2 zwzy_}ZASTga3xc)NaK*|T{p8E9lP!Cf^^Q77c~44F@chTp2(!k z6E&&JC9I|J3X>2jmOi$(u^5A#WGzol^%VXs)=Ri&xK*{TclGb+ac!3%hAM@t`A-f+ zHX3Iv4feO?hbIY75*Z_8)vymH+!8_C(+F(ZU2IHrB#J$iR=*`$sJ>xH47AG|s=ebR zTzPl5;otuNcp*Xav@;6l6Fib4!z3=s6*PjkBK&vu$FqY+N0!se1QC~-bp=*apj?an zN4K^LW?~Akh8I_0SlB+3akY-b`uby?A#*@HC~GK^oTG-Smb!Tse-fT`5-PHjV{P=2 zvEu{kI*Oi?JX$)IGHQcUzMUj`SZoN~-`@nMKP{6);7G4JT8;?u!T8VkoWkida!ix5780-7Nd2<6n+5`4qAr>;GAGkm&_b%8P7 zlyy~_e+64ZX#W6B^&Y?sHJL;5@|Z(voQqpc?bx4h>xlABOzi3j8(o3o*Wdc##HpHS znoZq@;XS>#?`&GoZtVax5Zc%9qhwdP39&r)x%|c~JwHzpQLD;Sum#9ra7ox7%N5Cg z>L0@qUU?WHI;;o#@^6cT2^3Ou)4Ua`2P_)HJNb>&x7|1m+8WlysJZ*KD!BXoQ7W4+}-^c;%acPZ9-5H{b@G5>3RR!;`^*-nO z;KIclI;@9=7wos~f2a1qY?gadvQ4W|H}h--$u|C2DzgY;-L0h#rXtoP6ZwIK$amQd z1mUxP+Q!t}Zd$_vXi+Wn)k3)gQWy~Zhp^0|$ z3vP-|)*h#Cwl2MI3|SY#2=a<>f}*jhYwD4|8taq=PqJ)ros}+t#y6KA$y~;aIJlm{ zRx9e3l|oZOk;0Lxx`ZUU-u(8s^ydMj{lxN?k$gE0nO#NB=KS^+w%D*!P|CSP^VEfF zSynY}Lj@zA!sLE<30RRmB~#5ZBpS+{JOgkp2PbWWH14sjijy@jAIR?69pG?d9R z24kmt0PDyD)0_uMicy6s+M=@RVpOT_2=BG=8lGi{v z){WKBl~Q$En-5RD@z`?es_6V!soTQ8nnu}sdh^a6D0zw$##0fI)?%;VMm4cKl6YTX z>x%+OBuO5XVEHId$)?)XhUZA_zt`uk!nU+nWu0ENpfuFAGLTK>MI@;hNLzPBCGxK_wLV;LpzmB}LKSR@hu z0G0mOCjeMzVIrKYOqx(gF2r-H-L7tMrlo}Pkc$CNg<_01&~i5vM9SBLQkN*xAnp* zDVkXigvhM%>OgoO`Fr-n%3maC#I2$l6q93Nx7z*iH?o45%)`+zglG)vHLyFb{0`o} z`{6LUlCjJG0N)a^x}p3dfHv>?!D%_>-&+z@fx3(r_$_->~pc^lhM-0~P zefhp7>8d#?>5I;*LXnh_2zAtS>N^enx%-=8yuu1-fuyX4R#t^wrCrN0JC9+v`(T3@ z>EftHaWscYPar&%JKNKL(*d5jq|DpJga8yXDRM~m^tZkgz)F%8hK1ubFj7${@aACx zDBLdAwY|r_D>66{O%y;G5ZQxVh0=LG`(UnJP~W#H+8C60PN&3EW*gq#mlnXB`gb|^ zhb%C}vN>l7xFogl4F|-ebTrydMJiL~!l_(5P{^d%?s(vzztEgrvRukesL!)*qs%Ho zO_zMCz>1?&uyCjVKAV1L6or*yN#_W}MpSNW!~%8)j`+3wFzF1_sPhW7jb4t1p~E#q ztO3#u&XLO=1;*Dm#eDL}+GKI9xlhK_@&H%5ny=Z}l@?V|4MC`x+?k_dqQ?@5r$qY!b|}s!5}HpjVP|WHz{0@fXXe zTx>`Oap*8Vr?aT@IOdW&VG{ll$M{Xi9@}4>c-P1zZl($$ZE2@b?x*GC z!x~2vjpnCIYPOJ6=^GzjeX%Y&IyH2v%O#FFrqCu<8ri_O^B&^FZaBBs5Gm?U&X9~< zV-2V+je!@qzaR^nVigpy!Ah)TNM%MhO$B^}mIQy|N8bMcmMX?Il5cc+=~!dyDWa+U zi&qN4SOW;J7+B>1ojO4JUjD}pWt~dZbx#Y$3r|m>82MX&a7VR{D4kW9G`(+? z&qCp&iZo?t*HaJ)zTN)-6|IXYmWMHD>Z#oztnf^;2#6?SI}+ZPJmSQVFf=;8D4R2^ zgeT&@XirVl!%0O5GDy)Oi4>nQley#&MfT?um#(Rwq+p<-qnbxb29%*eCzowEUP*Sj z1JGjY)R}aW^!8+_Fa1q31}?4`X+~DD+skqRzUIT<8J<<2(d4HymoOE{np8umh^(d} zT(!VqWfrj<-%1Yy4dTQun62wK!fE6HBLo>{Vq|y0PbL?k&G_jWaljt_~aXL*}XIFC$6W zMCsLrJl>WHm?E0;ETJU)KluVUZad!>9<9rmqEl1VMI1HY7O1ccQC7^V{{ZQ0BU_9+ z)D$pNDm+?wQZVYP1fbblVr(07SbwPC{{T)? z)YWDWR?&e6guW~5*Q-baQ1v&}ivIveQYfR6wV;NEdf6H(h~q*PqW}~oZ(w$9!SuoU z6syQGII^^gTE%8)=8iTVbqDbQ&46va{+Q3mHsc-l{{XdaA;XGBVI(UP)zZrymU9JX zgmuR(dmb*Y_*gX*&v>goK921ycY*aByD}h>#_Rcg;$*9G#MRkRBFR`{z#)@ z!JXr9REF$W59h`4bIGe@t?0b6x+ZFUA~l_4^IRh~*X^p~d@Cmz&1U|pStDHIN>wb9 zRlxGl*ZieO3SAg4o-5x$CySA5_WPVp&8i(~WScLAXOU^l%0|ZNzJPff`gXsr1ZDX@ z%w}{s&xHkP*_Sp7p= z6f^-ryQ?e(+q;BIFwAM8rWL<85s48bosXK(l{aB)@2cNhVz)=s)RkFitB}bBDSr-$ zK+@(xsA@xgz#IE*-xPkP>#8Q{S~zlwTB=;qMDQ9oSOK7H5Pz!uyNpB0=^A=ED(bmf zuC6Ggl~Vd*rz;`V5-$Ljz1Z)){js4RO{VLYVs=WCDW%>`)~j7ZL7!IA)aC|5Dl$(? zT@rxWL1H6&8#os}hjEPWtMY8uBKVV-=F-!c=qqDKrmBetg(QK2VR5i)?{B^x=`Nzp zTRD!Jx|hHVWT>i%p2v_7DZRf4z5AQ(wluh_iOZs@k>ISOssI>5hgp=Z^xun%SZ!nM zZHoHk!<4l7n&Ck)vNmyKQbtQ!E2vVUP`|v7MBT>(8;nZY=id`*S~w}_lglEsM?;b3;2VM7>&V4wxr`k_ zmr_e**A(ao;DFke+xpuR1-R+-wPzp(w$a@u_Dplmx};}SvbF35#@^nzArhva6?HbX z@fCpB5&VulNEv7V3`W6#Csn~4{ddA4F9kt|Z7czdUe+DQzpv8^0E1;H*2b1`*Objg zo5wmt5|XJ*(U32t&9$!l+n=GpN^13}j5>l=6)IRC#&3VW7}Pq4Aza@snvYh1z_dC| znkhiq$I$VNqII5ygbxIf%i`&hBNmqjxNhIy9)}WPBwBlgnUNV|>~NW$h{-EeR#ZAu zxx1Br#rgD{VV2!+Q?b#2m))M6${lJ1&+} zxnD)w8h%yNw5-w^ifV^wj+JRxX_altg*P96Ocq>=BWS!SvdD}~pzF1~-N&dlAmX?D zn;QNtSr|?t?R@egVNQ`qrZ*CirH=OG1NOEjWnC|uW{zY;0wx+-W;PZk*B0(Ajb2`i z$YHEzrKRzKH(=~oE&K0@vrx+*L~|={g!% zmYhfP^RON(F!CSv!OZV1izmn`E2Z!eqK?qR2jMJsQMb9l9W%vLlbG10_f%Vbho&ok z6Z2t31rA*TKDi&}U2S`yHXloy;*2v(ktl7aIyNz+(xqf{^;9{{Jd%RuHzWYWh5>DJ z?{aWAud_NjhJTd7C3@KHA-s_GigLO*mu7N5$n8Ib5zSEgvU6UqifuNLErM<1=_4dEgXYUXthNY zM~nAs`ySr--H?zdcUg@99s4dwo-Fxn1lc7d&mx`z+>`oXHg#Pbk;=p%w!xKq-+ULL ztBEFR+{&HA4$i8Poz~|1x9x#>#BeIi$W+EuOkz`Oo1PD?zm^6gPoky!iwbmgqN^^Z zl0wQucxu=DX25QL&G4FBuCBRiCqTa|PR?eQO@InD6dv~W>~ZX)K+5u>LbDjb&;`Z! zz5brKl9e?R#FU9U#+6oif{W@>%q~4{Fb^~cYA#Od3~bR!9YX`6XV9+O7TeRe{;{eq zaV0i;m(e+iX=>m~b}GcAjUWcR6#~`!VD-e>?Nj*6nxkpT9KQQSS zk2H9oX+be+Cd^cG#r7DN@K-FU@v{mEXJubFhxcT~D(kYaZ{Z}`+i{4W5~}il`Hq+N zR5dl3!ICt1SXwy?DAr32gNqIYxxOyF0UFZBPa0+Z9Yqg~6z)x#?4)YH{{S#{`Vop5 zQXh9Nt=_Fh&|U|kvrj^q_E}YuXLRwO5RLVI7929SW5)jg(;q$cu1_aTbv0I51!C5C zZFQLlCggD5j4!{_A4yV1@>7bTAz4cktSL8J@<*?4u*PxmyC-bJFHWGR%hDOC{F#F( z+Q!;gj^LfKQ=?`%lXy-$JGY@v%!^Ys0k~PmO;t~oW-CyVM97FWpTr8CixJ+}KTBY@ zK>p3lb1tE;c&Wlx%#gyfEy#&UAluVbwg(kjdEOVQS%;j&7&!ba4;UrUk5NaJredia z@QB$ZiO=J?y}gfcfAPlVR69AtVpSMqx@{{5S;IFiYR&S_4fLxY z;XDiWYhyj?oZ0hOGU%yM4UjYyFHY<&N3NP8wzCap=HrpSI9E=oMYwJ$7FDn*bhUJJ*=eU` zC7LkJZNMtSn_v!cR<$(?;gtvp*m+03J66mmpG2C_Cd>w#f_snij1Q7Px>41G17;%D z-@Z0ufvq}%q+Up*Pb#QtTDYoIDR@rBhWzo3hokB8>in8XGVp4t7FLe3Jw+-ZFWB6T z#;uP83yb3+=}Lv9&!{UWji#rks!1i=kfa-ahZ?3~RhIN$#QvnBq17H=nNTZIxx1Dv z5O|z+JlpS#uBg)YhBJ^a^B?6|#u{6w@Uq^n$^QUjX0>@b$Yx0D7r}lt#@1lg_1?$a z91pB=(v4$DH@G6k{BQ4UPp+=<`jKa^R+r|Fh)SI{Al&|>;Wf1IJGqUtFx)FO{{U0` zv2n6EY1Dv#Z3>mfnN@WU9@iXsfbI1o5h9M6*7CH_nyTW#EoW&Z#LvWYV>olY4dj08r13^OY3&Jz3* z7f;cSG!Cqta;%JJ&?3oK1ZE9u6~~Jzo=wKyZZ`u+$B&-|Jb4TN>L$0X)|)aM_K6P3 z?}8WdKC~705s|Bg%c*sc=O^%btHo=~p=-l0M>GPcF8z;)y#pkM0tm<#N zAva=29=FEs91!6{LDsXTbdx`DtbYwFYG>=3IJ`%YOA{gSWi}|Qe=)xQ07HR45VOg% z{NUBqWzkYeLWYfF@eZa4=Gw2^e{3eJFQKN+I#z<78jlvbHJ+q2hV2{5bXwQa3NGW{ z8dgoy=RE6b-lfel>U4^tHd;7jAx-ONUc`{gTSM5 z6vKOgBZ4{D=^P7R12ea)jkRVyvYZ2RP*pu|R#TPip zYHDJtt3-&+SzS#tX_ez4RLA8kZWwtr4m~heHSw~kWzM9ibf<kHgCiA z3%)$$?>P??dF-`fsF-XkeD!ox$SUNP(X^V3nu6KvLFDpx+mni(cU_t0GsRz)R=Wu$ zQw(C-QB{V--rLyUgMe8UeMQxItzu`?&#GF95|)xw@<0^XwmTOf>bc+3jm~A+WK=R5 zY6=7`q}+l^IKMpk4X_O=xGecaRk01_cDi9~R@m`@c%26Sd;L*oARbP~gB07lo~ z`*VvGJ!NE)Q?(lipsS5#y0(`B!=G|3j4$F(Syoh4oR2J+r8F|AdGy)jBeM1jzyAPL zuZ^E9s;P){^wJ|cNkOKdl+|OUNf#e-EwHzs!Q^1R2$=W(0Ck~{C9*lqZ)8U@%c?UB zvU+OSq&l}Ay<8BHUrpZViS0*TrVa_P0Pg6=1QBHbQQf!%By!Nlcb~ zG9XgKU-@&0`Nj1#3n_0K%KrepE21&Jq3%tG=Y?c)Ll7v+%>zhCW{|zEdmm41cBV|e zqH2YA4H7oq4LKK$REXVtz=g1}C%uUJ;^sq};kBcl>bwBzB?Ia~Ep=3s;+pF8 zuNS#aTeq6_8+Nhu!(B%4<((rcLrkzdkR1^K6_s@Ph+j~;xWhI5K@|+unT>2i>SR5N^_fgqFd0Wk>X;@jI%zoLv-#)0qOu;1pB zEX`p($ydCUY11d6$>`voftHRcs2Ve-;E-8+?Z7wn7#*3^(vg|hXIbSnH4StPNdURj zRZD6*ZT_vUc{_2Bd{?Te$?54Q%4<@VSBa^-5n(5XaCRMr$_e^o9;=pFk`$HQv=26> zxEo*dxczZ|r}X2JJVNRR?y2SGh)$3w5moQ9d8p=GfQ=E`>1 z4S~k^#%3cN))VGgCU?%}mv%?$k{tHJfBNoA#EB{Bky$@f}9$OJUBmh3y~)FBYlVa z;LE}DC}c1NRvKIlt=w_<7;7ttM@1r;JYv>q8FnSRoOWE+8fTK0RAqLyqD`-R4ZkdN z-d_E?E^Bm+*OBy62r1-vj{%o*Y)Bmc014Xods;_J36@r1$lfB~Ywf+q2Mxhqk5VFN zK(*}0bFt&@F$*=Wjq4hMouSqlUPNZopfDb5@!a5pNp(^ip=hM=B)M`zDwbmQ31$Y{ z@>YnD zZHO}FPhMq)a|KLcFC&LG^c?VSY!J<*qIZ@QVAG|`h8uu(76Z4wE7^1&1vc@B!?oiWHiuqb{LImHe)IZQ9)Ld_vYx z#{Ngxf@526$9{1-x}ucR{Ih6F8vqC4KHr`POEoBfG+U+3^qpUCt_^_F2d0(ImWf>? zu_cHETkYEgYvwW0uZ9}xqBUEPNj>l?D14$;4H=d}buE22JMZ5U=bK((8h}BAelDS{ zx7=Z`8-f%u#Xy@ctYW?zGcK(%01`p%zCWuT+wOZ})0I=L9Vn&|J4UQD*xVCgaz6LO z0Xm${f`?J@8Yh@3J@y}aU-ZFbmNl$cTAZm1rak`v7i*8Tjw(+(oHUg9qYXBtf#7O! zsYxSIK9?tKH(OKUQ_mW)S8;DWh}G+e6_qAAP_oE~ro{L}-){Epha)gMX}^cPz(qf; z@mEgPQ?B+01343q~HG2232Mq>!3l)E$B0=MoiEHA~e8aP#? zGf5?##eu%SbGNo4q-$MTnyzWk-`LyN1gaCnOQ~JE064^K&4TML-3!h2OGdP@%GP73 zw%Y-@7;2uLI=NNd2?^x}{GQu-;hg4E6oA1Ql6gr*vhi_nnN~H2*QEQLtFd~|uK{Y{n zr5pKNTKj#y#vG@tNvkD|O9qZL0P3~L-uJgV;vUC4=((=}PN}SpJwWO#x3Er5-M`M* z4V_j;HB>4UoT6$B*R`#OovI^`yp@m`sSzB!Eh*5hH#705073!N$M} z7r5}Py*rvJ#~KE-b_!ELu-f|{t_)P_l^&j2G&JG7=GGu@<{qOJDkCH`$`HJRRCXr7 zT&^s6PG%*YX(U3kZcv{5+4_PIJg(>(HAe(GGbulZeaE2|AACZ~azzwV*HYBTu}2`6!wO4Az0`ns z?|)0+ExK*Ta*Io^WNMk-K!HNGusqT*-237DtuqP?=At7+(o!+hAH@t%mA!yIr;q(& zE?XYK)Y_h8nqDE;>t!PQyFzzgF zKfWeZRkpeH#7t`$ZA&WIkAHtp&kYILC>j1<(!!eAOqW}!zLG%LkVYY{prDI3i&xaw zYE^=kDOJd{o*)2ncl+&unbk#hh*)Li+T!6|NbRb`@NIF3Ih=LO^uZ{>0^wiA3RSIs z2=x9~_Io8*q(^AVp$ZFz1nainncD=`ivl=~p7n#(Rb5Si+&c~A}9#U=SHDKXugKT<%_fa8f zb$l%`l2Ovu*CD8gOHPBtlIFtwuj(*gr?Uf3)NS(7q*V0>!?a^U+p)GO{{XY?k|j(v zrDS5^(N2<}DInkJZLx66)+b6DG+2?e9TLXcu0RcbKBww2r;-I8{goJxn}k|y-Z-;K zDOmuN*%+ZAiMaFx8~#|!elXNj%hYtU_)1vPnBg6o>|1fzi;?!m#|eWmGCM-cRZ998 zgRyH~{@1=UKaCK@t0k*gR0HCth==h3Vn18^^NL+P`f>oJYcYY)5(>z=!Wk9{NfJO& zBw-?dsE{nj>1;~N*w)rXHkji`;{<|#4YmgfQuh7qiKPKF=p78bp|BxT>Ff9TvW!6z{e6_!$PLw`v7QyKht(#Ptf8_@w{18 zLa-@O5=Nz%00~tKu=fC)`{NbCy0$A#jXF)PXSMAb*9ZlpG9rU;88oOndtTQ*qZMq{ zbr3@Ya)TT~<*l=u_w}~_0G=GJSr!_Z9QbOwOKT*zn&#jQx7_`(GO}_Gv_*7pAl5jx zG%@21Z3R|B;&(%?4cHezO5A%_UFrtX%g`5T; z7t{#|2LSzm7#~c`D?<^cLWC9^3ya@viQ5LLqgIAwr-czwb!j{5T{k1^a!wg12nNMM z>Uz0oaw(=r>C4F)g3P{f;9BF-*X?d_52uk}n7g}ajR}uY=0_JM{`WtgCv{ql6k~K3(Wnj>+-xm>t{V+8id;$AN~ex#p!qloytXDlyDjZt zFUP6d59QFTKtn96FpMIN$Sh6&05CVX#F{A9C7M`_QL9Q7Jh##(X z#EhPvMe!5N3r^9eltxrC zMjO5KllQ~a-91Z~bja!olTj&&-d2S;l5?1?#0hhO7jI4-Q z-9-Hr*!T zG=@h8z^&N+BW}a6z7ZoE7#d0@IGY6qhDv(Ok!q4^ns}jMB2>i|mV(X!M)dqZeYiL@ zxqe;qnd4zJ$ok{bP3i}ozc`GKEP1tVT(1R8HP8i?EgoSzDK}Gl5JBh$uzLUyoa(b$2s@Z^sJ#ogUtQtwR*eD$Cp_<;<(z40?66nwmoLbxlQoRVNcy5st6`uE4L3cs z-%##*;*nE6Wz;#>?7X`yr4zJj1cWF)QE*kruyPb}vA@1FKB>y+X3N%|{v=e2l>#}2 zp*5I;81AHwPqD;aoXYa&psJZ^K4UXoJ`B#>L$Fsv+Wu3%`;S~R4>h6#CY|r;^HC&D zbLl-t6Pk4lv>taSAd$XLcaOPwJ_ z_5%Lbweb(8h-S>3%#8Ha3arZH=yITg?rwSeVBA%8v{`GtG}`Hkt2iEO9_Q+I-x=FkW!|Y^hml; zI{;aLZb;i;E$fK=f1C=MY{MuO=BlY{QaV=&VvO9bwkFCgYp(oz;m?OO=PIUyEs|Gf zXA;R79(A21P}V2-N^SY$b0zPa6HA8sf7+!R8p*71v|47Go`A;FmX=Z@d08|Nq+jS; zgK@U!6^^&gvaXw=%qrrfTIn+wmYr5++GA}kw)WBp^fv?77e1-X=(58!wexr|!{Qko z?QJV#wfzZDKDNdemeW-HL+dk`&azTu5Y44hM!GGxG2C0s#O`}v7}!uX?sU?cVCVJ$ zXiYnS3~uD6{u|LQW7TogwH&oH$gVtAuvNI`=bgqb-?L*}(t3(W`~f0JBtYCV5vhqc zyB#9`09-#!I??8J5Wy8aI|#0*2A~s*3v*-raVm)xdU$1*M9Hz5-j+6NZT+?wt(BiV z^9QxG+CbQv#?UsU^!{0w%REywX!R7zSsTN>h5rBz?b`jlZ;Km1zq5rtUW$AJtU`j0^ zxHTScOJ5IxRKoWjds^o9zobjDSNva~h%gPk!VhLO9%YIG2hq=X{rYkb(1U0K1 zaV0_@4tVUVF83gh^#XSr?r_#*7J?-EsBD47OOr~)O&p@(11c6Dft855{kFfRD_OV= z)VWN)A=MhXkf#137q$J5Bl5+|G7*M>f|9!Q-~BsWA8Xj)ZAMfkmKxZPo}HUYZ((aCQpu=^ExMa-FX^z`>xo)*ItKeiKQ7ppC*4 zN0d>}d9wO(1C`Q9JCS4DoBi<;qL_TsOQug44FHZ=ef@_w!Qz*PNV5`2UG0Bs`r;mB zBS=-*R7eKTay0sWcJF}%-sMSXt&=oy2}(4`41ug0K|V>Wc^*64BEE2Ga0-4l5uU zk1IY&T_Ft|CNu1{Vw#RLapjl=Sk~9lm$~kL+}j?c&LL`wa21l8mPHi%X*!klmOi`w zm@!>7GgLW}PYq**zz6uA!%e=M{&=HxFNsG5YK}8IIr&Pi}EPC4woa?8~5u9o+u_;%#C{=hF_;<*>C+%v9@0nT4VQ@g?^s z(~DrkfN>=W1wE6)AnC}g4z-I|C2gb=xcmPATpj6%+Dz?VOUE2O9) zF%9Kqs9JEX;Dij;?_sy{8+%~4P0dY|K{jtwRAXqPD;+Xe$vG!=Adf1Wo$*dr9VWZ0 z5zscI{7FQpmn*2Fv1+i@k+PBDXx3CY?|lN?cNpeHn8ihwR!$J;r1^QFjatCUvRcRM zsNCQs26LF#*U1W5jWVJ|P7no(65FU2y|3?&NEUahS*A*5I;9E$(oOCL+-=7^Vz+>F z_);bp@2#jZRhrJDlB!1i=Yu1KHr?5QEDvjAOX;k~F@kCw^0HC;*yS0ONpB$3zCgp* zN)yK|jH-ebe9o4jG7!rnHm!(J>5T^=r7KfWlhjmHH6=|v{{S%2p%JNK7B>oe-$~!p zVVy;c(_atCMmvvXu=L$oYB(w;3=pBwHpFRVxNoh&*y4U+1wCZ-6m$4fQq4|Mcw2D5 z?R$>>>@i%)oYG|xWtyd0n4{1Pk$F%4Kz%p20@$!s$KlNbC}MvbGO0HMVjI~108Ds? z5ZC#8EymlMMPNNi(dLih9T!j2O(Bk@!z8*0Itez__ZGev(^OF=RRmMZ1?SUEBzjMk z!!@4#Tv&_uzBa7ir`E5isxztqAg-qoM2RrGQ@|4JgZ}`LCdaW*F-4*2*QKh=%_*H) znzDGNg@N5a?nLN&5Tsmp$DLb9TMR zBm#E?DYIiSsgQz9V#-Nkx`6`b{{U-aLhI^`sw{&hqis~x>k_}qt75V$Z)b9XLbnHm}Bj|0v+YILFrk+B8D+A&H#M}^WNBiOY+PD7zx$sge5g|}m0kPZH zzBGU~D}t+8q~1#9WqS|Xcb9I)%*X(`wxZfKbG4LgZ@w=d1g6XK__I9!05Pj*#Tv;p z;p8Algn3ByVnG|;Dv)sO_mnX=wddOr|sdF;K zz?3n7ilh(2$=ll%?!Ke1rOP^dFU)g^svf#8oRMUhG;kv|hMlA5D~t|n#^$x~SzO)zmBegtO6%7d`Q%uFA4iII-hP5P9ajGqz3)$;l) zuUuw%C3jWRPmzz7r>3J6lGTI+%oOt&w`Ceb5-)zk5>Lgv#*(5{%CgERX(I};tc9J` zP*_}oE^UndzOAB1K!6QHWfmGo0}v~9B|e2)6TQ`VH~k0K4QETod|{FeKzgKm+@ZzI zG`4=Xo~AyC$#ZPRxYuXdyBe0QDpjda3y7j0z%1L2{qQ^CpF+=?)Kcfdst~l53-a)? zYF4%Nm$A4bYkHq-7RhKb&Z>_ldfFPQ@01Bjr7Fa6Oak1tljb|Et#D2D+Zq?`&XnnA zT!B`amP@-vAF`jV3=tjriLT@2F8PELiD?4$zQ>9G2p`(laLeO;YrS)`H5(?>-d zrJjH0uRW>~RzjC}DUdro`;s>NHnS7G_P!}SMc0cz zSI}prYm+U4Se5C_>#kVQix5b#+_wjtZ+t{JQp-3xEDPV);HCKy#>&;X?dYRW)vkZk zeLqU^c@{`%-tYw_5yqQ=&zJPa(Nsb>41y$vIFd$K!qgU00rVqo20U4DDjXFjM$RA6s7?MTKRVzGBj<5&_@(+>QRbU=3|eCQp?3 zRPrRG%uH-fpny2k#Ggxo0pwv2N1L{7o6i+oH83O!@x+7%7DI4B;Fep1e@tWeWbQax z8vA!d@)1blT@%3;qFFrTiEVqe@9oI&RacwMmrf|O=%Q%Gpix0sNI|~j z6SxA#=e93lK@_r*^W`6!t&<~|%`6+0Y4~ZBOIMIoXPJb$D>I0mX@tIHi8U~{JFU6n za(m+9(A12Mt_oA($b>@(kuJK0g18qq8h86|j`W^Z*=J2s(bgiXK?v~#XbPYp78`r- z?}>C!L06bdnk24b@RkU{TP#2y>wA-gPa%BHBZ2%0(YH$gC?08-BSDvB!YC>xqVVM& zAt)t~4=Fakd&ozy#Y3p7DKdViY4YWTs=-oKS5gDIlK!j(wjQ{!{{YP~%|)ALg%M zHuN|ZB}pU2Z!5>Ui+AU5<@Y%C*zxJ(h3DmUnk&%9xky&ZwimwFwYT@@2Xgu4o)D5a zW{S)_)&y;}{{X>-Lr5uTR+zkHnFC3vUs><<{+NT)fF^5Ftso#q%D3|Xy#4SJ5g;eg zLq?sENLk`lEi^#v2_BKsEiSUmj+%~;2BH3X?}-UL z4HX?iR8Izn)>t&da7ibAaQonZk}Gt^QobfA`T#(KR%?xs# zC5o{8Ly^e!+X>61r)a~$tHW1ftUwx+lj-yu;T4&RD^(zcrja25V=8WL2^Rd${{Y(p z;!F5k00A+RQX~*hBs3@lub?rv;TwKL-}J=OBvD4JBZ+|pg~%UEZHA1^90>}<>=j8m zU-SNWfl$6JLlu#oBDRIlIoR*q{{So=?sAKvvKO0%NuAQ(G@ewkw6cM{J zs_7)$lWyep;9(M4TIIFC*B^V}1tnnl$S9#!W@gqF*ShX|{V3`&N2yVExjgFgMNeZU zmpY3dOa5nU6UzJ-sks5P+`aa>Jbypa0aX@k(kE3hGu!}8_CL>T80m^E!ml%(X`=nr zt*n~>eLlFEfDN_L*>wPpxs#h<}rAnNEu1gjK~Uu$+xEX8C~N>>o1C;V4ynqM%y0X zU>fV%)VNmkp@~*s+DNg5e;B3iIVu49`r#Sev8-`ZctDwUux+fn@$GDS80!9Zpg{?g z%Oc66!M35d7wuvCVchd7uR0}y67xbw?v;138FBg%u#PdhXJ0Nc0(9{c)R9n12Z+B%exVPz~y)a(mf{W$c&>1n=DXd}gu z*5>5@0DkzH9>%+642{*gsm~Pj{v}kZlFUVjV_>WF?R-PbswIrZMzshD2HvI!<}<~qMiciU`5sL5$kW{MaQix5t$n_G|4*d}E#9m0n|;x<(D2=Ph*XK^Ew zaj@dVpG~mNP6^DaW?-xd(;x@h+h3e$R9O~ZO3gg5qiO}6(2j%Gs<6{L1qONC_I!dvoO**ycC1di9@5s3A_Qjtn%c~JBM?7(;H`Ab~C)<88 z)}mOMgi%5BZlcA|1|aNC_%oHYBW52aYM~VdJxd<230v+6KWt~slGhI+d~s3T3Cucf zzM{0$LmW;dvdFf-YZ5QU*pHj^yy-zDJXO<_M&q&ia&c4Me4PXEr3@jEG^hy66qqWIV{Fj zXiLc*Dr#NBIaR;70REo%zUSR36!a_LD@@RmQ5^ZKZE&yBFbvzo}po13EUI} zk^lf$5>5I3c-_b95k@_BSo7jN?%QQjsmweqtzuHKLjoa>;1yzENxKV}5Omu0_*T)l~ALL!n)OQ=-5Q#Qt3SU}SVK`Ht41jgmt{ zdQN27+f!3R0#-7^O$d#YF6y9K_B&e=@=B8Nh56Z7x$_+$YTuvM_?t!0Zt}>rHPL}G z6>}7KVSh{Qf)xDK0R8@GRC+XNrs{K9J-!3YhxDoOi#{qZVahqTiO z+3TGpR8+c0fhe&<-(K zveB-038n&8Xw-RW>FEOrjG7A#L}@(U-j^S7h|pGi!9^8wK)S&eVs>4-cL094(5rer zCuV4~3ZoH0AA;l+us0und{--aBC?&?>6hkXxhkNjX5-ZRcEy(Dwap>LCD_gc5DSzc zHRWTO3NwYXE0w*iU^ef^<$(VH7P4x3Z-#l@OvxwA$rM3G!Ii_RjfZS9C&p!rj#8f+ z+Q;7u=GywXXAe^`&{zUgZUFS(+W=B}mOx=gc4r}P_?X{o4^6OpGK5HELUn0fd!2#o zJ-NX4jbI8!m6cdH{%}hfHW^RX%&(f<5*rxxQsM}Uc-I&`~H}JC8dg4q?%Q{ zFxmA3Vs`{zy{-K)shJ%hGOC#ml;7IcALq6lrZEO}(qu^`vAE|Gs)FK+Q&UM&i4-#h zA@xYlzyuS0x!mE1qBJ>#Md`$z5oWnj=h%z>xK%ur3a3Jtl#fEU9=L@(?$xYIvmOC0 z&-uP8>2rznN2piDIh#u~@&z(#GTBb{Ax8WA0oxvgEs;^e^X5CB<%ShCPSZ&yl^Y9< zhSoOqxxPCcL=x0TO&nxIwk(5|CjI`{dqn^eon)j^M?FnQNI_HtYb2e{`+NTYwg^>E z6%`^y42oq!6%k`BEKcP6pHFNnnPCLD{Sh_XFq&v9=K-@5&Px+Vd4;>TJX0^Lk2H zB8ibMSy@2^_CIS}{eIYuPa{-iH94$~lglo$V=Q%Fa#;HCHscif$)>8UkjqdemRYPx z+?GG-AMJ|-PH6sZ2x&iXBhU@>5wlzK{V_?<1~d-p<0LO}J(B2Tp;`&nvNJ8@vY9-> z;BMACciY6iKZl($m%*Nl$2nSR_$XkCd8tu##T!T%s>^-J7Exdby8w7N zDV!x7pB3Szf{tXO%A`pq5ylq9yy^<@00Bk2pSBZt=)k(^Bw@)Z|{gP$dpuz5$Aj8+ylV58(aGv zS;4{(+q;yR=Q38xPLwh$g;Z2^@`HPw`Ss%W#Q7?o6?P2m;f*1Wz4pI24of_Son+9` zu+kRVRqT78O|SRID=JxGFo6DW4aqlCZO$}+wN|%L>73W~1v<(U!wR!#2WbekiT2-r zrYMwb-2%@n3M42I4(MHkazf7oFa)dE-vbbl0}yoIh2~U;(#_ME7FOA1vi#%q#w9Wm<;pP-s@v^jK*Syxi`{p`A?%>CqfEK2Dy!yG zJXG~kG&JlEw}`2+Q`>RBp!;I!@Xb70T+WW6AY^-@#<#c%w%GA)i1+V`&S{rr3!Dmi z8Ky|3Vuqc;SB+m=l>?A`gncYAYw1pws-ev3a|$ZS$%c1|c6R_zPEzRWZHGKtd~9V; z8=)Ydh*hG9hXMj(wv6TD_O6wdmN;Y+M=)<8cLU4pEyfDcEE$enRMSq=(&lMsCMrjn zMwbU`Z{_wN6Wbo@1P_tc)W&=W)*{k)hs3c8byx#?Sc7k^u?HcVsw|r?$mp7ma}=tu zy18YQRGkhjxFl*e;=t|3DY*F1>IaX}G;Hch=~`q*`4th{C7w!T5aU&{7 zDLRzQYNJS}n@AcjAVgB7e7j!l$sNeP8(i9f|~APE54&WZzjvnQlxzT&(iGU)1WZFV@ z*o*#W8TZP)bquml)73|pg*KI=)TPG!@)q{L*Bf0Z_;Hszm0L7wZ~&-Tb#76jhJ|QK z+Cs}DB&&mRJ8X6!{YCL{tD$j|P-T83khD{L#bky<`|>oVmDnSAh{=pdzu-DE3wenAIqC)?ADW0|gBBGWw7FjOyurMEZHAO^>7LB5}B_s58w z$s@xuw>^)dx;V8zHkLVZ>Q)G>k}z7AF&opLF%nz7tOvdK#d<8VOuZ_qa{WIt@hn1( zNV~eo9_lY`hNECdpv8_RHPnJiX#5#xD%8>MX3_(NWB!uEP0u3$a)>hz*|gQs1bAvx z1`(#@-_37hVt@L5&NlI$=;NSx+vd68U8a0U@;;zei4W|I&6!nPS@pKBD}Upxn|dh( zVBAuyd93hMKq+bFfqXd?yrtIQmm`6{C;DIyQ)YEpbp$iSrlHch30#EK+DSJWc{Z>F z4}Y#K)RIS2Pnc!UKx2X^j4{g_YB9N6khc6wW=uABIBAjGasJdt!D`MU%d0x4GO5jJ z>C%RtoibewJ zr1JN_(*C&9(ENu6u8EM$<#7l0&O&0l++cd*Y^fidHr_PnEx_H~|E? z+>|z^DXJ!|qCfO?x?IM}!L8d`l6wnWceu6!XL;&Fmc^e_MI6yo%N00yO8I6*1ctu$ zEvug3`r^+}@Kkj^T`W$H1QW%gM7Qt3M*_!t>C|j}J+YPboHFE#K2=N!p{=iuvNUF} zUPGuo%CRHuiNS zBa)t1iYl6#ndS%uwW)O*0kHf^pn79Bs!y5DDv@Ui4uXPKB!hBE-|`3Pf}JVg<@un@ z6_3a8&p*wTNaX&dt=}$|n>D4VsHB+-tg95Di>;$J z8x6r7@5j@8NvwLxR}TvYj0IAtJgh8iZTZ}LV44emcIM$Gbzx_Kpy%#?^fc^d<5Enop2n-RV-*ypC*+tYXnSG5#{Io?TG&XDKg9Z<QDW&Ce{n}{{T)eLjM30VmDTN zKq}Sgq+KZxk#}8sZMV3;<%ex@%mt3Xj`(IFNAl<)UztZBjb{E*FSg!?^22L9kt(FH zG)wA5<6muCTk3HxYI|H1yM{u5i+2aH!0x226j^1`8DyExh>>D0HCp@If&H-bZ4G+7 zP*ljWfON87%g86+?~0CZm*)QfHzLDT9PXqoyg_xo_r3h5_1_TI*63t)4UrF+t)Qlg zNefR>;0+=pa0_l)+mCMd=MOzabt~0X)>TtON^D?=DF;aBQSQgkdtgMlj9FAGO7gW_ z(Z{1liLF8Z0Li&OOjhf2DvGH`i6Lz}FL0yKeKB?nXUKOH6-Un24Y^Y~o2Y6t2JoU* zq=62?GDAt|NX24FCSZJ0wm-tA_8#ZC#JZ9N!*QnfzrF*>ICs#@l+p zL4um7zCulv13IhFB0hfz$!QpJzz#9RtfihRm!vFF0c|C8gt7PUYa9*gX~KrHwaW$4 zKY=ZK0qT8l8!m7}sKB%`>WSjiMZp_h{rAP;jvUKK@rzwukzBwDep#W}C6?gxdkwGb z1}nW?D>XC7TR8q0b$_$6?+K-vp^DvCdjJn|MTQdTTElKe7+tVcte%cp ztE#4_iP_~k5UttDgSfEw!7A*NIHaeNrlx{ulro#?*-7J%ap{ZiMoCFUl4{E-JSkC6 z;@W9sx8b?w`|ZZZ2KsnUEjP_()Q?G6^FD~;lsc`3lB=g;4T-klh#vI)l(W6Dph`FC#Tn? zwOzP78wDKu;_sQ))F)5ZRLet0JdnWUl1(I${*r%)5DmYkGcSkkI+Lh`xxz;#Url{6 zII?)mJdEJ}Be!$ug|btS*U0g(OmhTO!O2=KK`+kbl-cD(q9}6`K~etz*{=FEUz^*W zdBvA5tkBX|2Aq7z@r^u(byf1+RPk+r-_VR#%|k~NbSVUF9AEvEX=QQ2*lpW^>FME-$XRNE0<(fw_Ng+OFW;Z0`SEBT<8O8GtDDCR2=H_Vu zjpZ{fWnO8RS7zCbOqDf~uz94A-QBNpZ}$AKN}^_-2#kya$OtF7-rL}AO%tpkQGt1G z%n7jHfqWfGR3-^zD;qS027~x`B>w;`dWl}x%>c3kOO2IZsgYVbhP{_{CfjY>0#f2o z<=Nc+BkN&{B}@?frF}a&UktHAcP8g+A6@VRETuISQNp{sum;_SbB4twf>e+O%HPv; z(NZMH05dcmD3Fc84ae(&b)F0|c#KO(RE_o|?YGx|%M#*Xl`kDR^L)OGH=sNIm=jkb z)J$aXStE(H1I~?rAo_2LjA<{l!axc%kvy_Qkhw)yEX)ms$QuuQINIq$LO~0s{aoDh z_rk9kZz2$?KI6Xs0G1l8QWb6oHn}?=r>^4`-Y8N~QEJ7Y@nd1O&3<|R00slh%w#($ z!Fs^LH`1X;(`*ElhO=@<(+rFnOlaL{ZBO$Rq1(z!S&y#Uf1dc1Vyl-gs6_I{CL{s1 z#q2(!>xtP^6%%Hv&q~n3Qp#VF1-G&6aW*40K3r*LRA|Cm&M&p~Tk|;2e7k|zD2^)z z%CBU(bnjH4AW}n0E_OB~8+!31(s%mnqx|=7<488<%O0+VCBn2#*R^)6qQUT** z>x}c_K5J3Yywz3N!#6xUkX=+v4fh-8k8vL~_XM9vGa4q&K>(iY%mB z+>5CmgdW()z8F=*QJ9EpRi~}1u9C86a9dKOWQ%{~SliQ_Zq&1-UQ&QaWAQYYhN5f_ z`TF6VP`eIB0o(IKh|!Q8eb>#EYSvnLQJtc)Ib(3m#+&d_` z<8iC#4wlUXQb9!VJv5Sd%}X&4GB@D_+nw$YJMVy5r^1Qz8b}u`&k&bz%MDy5c>Wh< zxZqpdgN@jF<}-i<=~=RL*_w9U6!=MzXL$;I*?MWAt)*G56I>A53Dl?Xg#_*{4;x^n zS2~Q-F{!?(D`YXHEMNypRoF6<_?dv!>214XMayaaOh&Rn40Cu^Ar(UHYw57qakd_t zDaxjis$r&zmZ{W(Q35KsKkD?p`0}!4__Dd~?zbC`8o<`}RE*B`)UX;k;g*$<>iLNE zc}W)+8(5LX{9uhF5uDpFjy8@omrOnsk=s_4ATqE!gJ5mg0z2Z*L6POO5hW!&KvPB- z2#(-tu_Ni+eeqN3K9J36>+;OQD9vi+T4|rgyrSg@Zb8`Z<=fWyTO1$dainfxZ4fOn z@dv1-$Y7*fAX=7nR@G}-z}#*~-0HUW<9t^7H#h1W!e17nFP2Jpfl)ig$aZ6AC`Q)+ z3w9W1KB;Q__LDEDk)q79nEwFj;dV)3l4l?()NR6naCjq*a95?eFRLX0q zv!fL}h(Tw67D1?aw+7zZn|cgrGB~2g^VX$F#qX5Y3gt3itYNw*46rxWUha;WJ_a47) z*lwq&siYbyXw;&MdHEyUe|%DGCDou_z+PT{^nhee4T7fXARX_j&!@`Vi zH0T8VY&PQodWNbg^BJljX$OeGlroMjZLRcg&lb+F$mr|mHH%9M)La%-77~wNuNbU; z&8CW)MyrOQS6M8BmS0PHceXudF=mif1mVP#GO=B0l>s_uL->JPUcg&#PwRoPL?_Nx zEn4BHyE#AV;eNP#IIN9cQAHI)jUvwDOE3N)ci7>ahK8Nfyg zwOiKvVTM{}$;C&@#{`mst*q)T?l#-$i{^RIR8=%>1qDMvKa1iI6kIpA8-KPd-Aj?@ z5M|L(%}ErIM0G6URZ!Ok;F2+~4n!^u4K=!@Br*@ghxFcS6cmxu%A^>9^DpsTueckJ z_rbVXrL2D$k!i;E5)y4|?fT$$LDH2qv@ljdK`5D~yNM(kN`u&Nco;vH^yXz(Un#0l zPa3&KMq6xGmG$IeCVV=H1w$i~(MPMa(g`D-V}XvQVjAGwZMHiUW_g}NRE(iYi>Vhr zr`PF=9Y0G^MHr50B$y4B#IGMrE)0U2l(VOaAs~=TTHe8U;}p(JV}hOFIaMVq4HS&B zK=M4Az$AdY066wPo&>YYuf&^Ca!sx*EAywM3SVQ)`MU@Vzh zL;nCvSyYa}?B+Ph2K;hG_V0@@&doP!ypcN4N`DnIPn}Q^P!udV1deTs9NA5FcO4v% zx++HPc3?NS=ibxtAktdY@a5ty1Ip;T@xFZ}-i zrWHO`q8%S(=%CZHla={cr^;O+ht`H2_jjyC5JdW$NjtMM2|AT+idtV4UOjW5{2O^se@}nsj+xDUmm5(VT+>ZfM$8^N6`CoK z>@0s$f3_HtsEsvCrA%rmlzF69C5OGO{ID{vNa<*s#6jd2Hc@kL&|qF;I{ckILYXyB zF<9GGtzbVfar$DLAZ^mJ=?LLkXX*&WAI!xTq&!)!NcR@F#762&xzXlf7?_PD4gUZ# zIQ+3*1>&WRox*sMfpS5$&!=O6d8IV@hs#tdlww;^335PfzeBz7__1Siw@Q*{G;FT} zsOX?rnhgs9@*{YGOKAVZVGc-QxPCnVuD%eCOq3l4dC+qzkIOh}+cv089*|&swE} zsk;(JffdO5oAK}Mij7SWs?I4=N|zBcHm6%$kPhFj4^zbzEYQ)?#P+eWYax#t-@hNO z7;%`!{7{MHaYtJ|Q0W`GF#(F`{72B0{hT5iBgpw zc^1tpHv9hoEJ4iZV5|uP!XHv8>1OEeNkToko>yn-%AL<4#NKS zwgdGZeOW_N^&AMB!eM_Y;2p1W4Gd7OPp63X)qf69D3PRCHlX%JI(3T;07a*SB*Aa63;u+~GT%jct zssY1+b_d&Gimy*j(^RQ>6+**l0X&ht?c8oIF*hm>xonX~P!EJ#)EaXv^pYJ~Oo4s~uNRhp&by zt3^{nY@4#&*d74&?Y;#jbDGPV)>Q|JNm0rxN!WsH1<$4%${^KEO;UnJsU#FCY!<+d z{{TV0Bbpa7RZ1iw+Cv~6uVuadw?CFSkU$A-d=$D#D(z}LDc1G%d1Q>}@k<4eAtFU5 z+zrS+*0v7M)VaJ=O_;|Lyh=cx6?+g4!I7?ZK95N{XgB&tjM%J{jvY#V-$FjL(U42Vk9Nr}zLWGrL zWh@%SiMHeDabry08C7IddpI@>G_}Cv81`FIDk=ejB&SlOnCwaueS;oIx!U|&V~agF zVq+7$t8z+)2VtqMgmxQ#xX8+2joU3ecNdM-{uyGbgtvxP*WN_h-nbi??-uQN+Pn?DzlF3f$_gxEcPoW2%Z)_p55yE+B z?iF&kqA8}jeA^H=Rb;;Xjw{L0)lk(iX{3`$vAnuan{F@k#lEjHs*z-cV-QqBFNP#l z)Ep6euW&~;BNPnVJj^NHI%%q&P^VVAE3zI4-?7~Nv7wClF9= z36hptl5EUCAy1K`u}cUaUkng@NhzidyT z%<3b8sj}*lA`N)RP&FG7e|zoD8#WY<-OjRtJhn4n7PAzv>KB-5Bl7gbmT0C$SlEJh zJAYo-$f){ES|lgJ;Q-q^8Ibrx>WD5*%LP%n8?!#DbjR+9=wdMgdg zW4Q|V3?V$O7+-z8aPfd&QZc#b-xVrOsg;-m4x%@7B;0;~(+23X`gz;KWf8a?+T#`7 z8=5x>!gf1gQ5e(%aHNCC$Aeo@<&+bTMI>i+)T4fI)P=l4s4fUMYZJZ#(@9FyBrGh~ z8|t-`{W0mAOjZ^I;w^OMf(O%2B}+2`B97&b;9u>Bp^;>SJcLA8UrTIP97=#~GN!}< z!1TgQ){yG4w;Sz;HvBX$hLYYf4vTi{iUPcp`YY?9SRkdsn zI)0#bz}1Q&^4w{}RKzgdk zQ2`d<>N|Y~E#PmG!SM>dPSCjg7t4;(8JWtRJB0Uo1BFfLHCkcE`1l1Uqo2K-xW z7MXOwT!FjT06TxR@FkWhnq4aE6I{C}(piDreJzirG%p?(X^KqBujbf*Ics+~AsHSZ zg;wrK0a1A8bLcEE&PNFp>r^4sT#&nfLXO^_`WT*1fbANXRG_oCH#Qhlgxv&IqRAYR zSw^Mv5+hdQ)crlMspN_Y8&fQjGXOM=z`odQOB~}|V^MSEBz`09?Z)`!T<}uH^1F!` zHJGpYx#a9SVm&LBT8T!5EVg2OFKb^5WtK^`m;LU8 zeMicK?Z4ag!*Ilgtzki}6chsfQ{0j}i{YbSxFQ)`DO(Fv)HoFDXF3I%LwkTd1^eR3 z0zRUoMyT-s=YpW$$_H-P3reyur-1|PN>~lqj>7){Oa7R*X0&inEC`jWC^Y^ga##z< z04xahCr!Br6y}nMOk;I!5GiC>fsI7Snph$;Y6IzDJuiW8f0r#T%1wpa@R7a$07HUx z?5{bfRI(ufL10af`~LtjfYQ}zunJ2l)@-|8=VSKg0L$beAsWf@=&5R6tHlMGL~)i~ zOc$L*adTr~zp2Em-Qk9gMSv%T;hj#~v)pa;=M{Og$)y@4ylg=lkO6z{c-zon`l`8V zVR}kpu7_hKtzqkbz92;6;9Q&H00;nd=-i{6>kubX+RM} z55hp={p>G@=}iEsjsFMzBMFLFPYPQvgs63BUgUWP(KS)CY~f z>J`c5gMZbp=0DStO2PWDL4Smr=M~&-WPg^Z3RSp<3 zXqe4JD@RAZkj zCPz8%JpPL8#5S7Md-yOjICGeDDJl$zV4hi`Z!Wzlr~o_f!1l%Ou4>L@@PKC;eqLO{ z2ww6jCs75qx3~it=R;<6Qs+5lUktJj44EqARkwmTQNME5TYH>YzAjBQ4?uMOLjll* zrENO4RT5bMVd-|U9f0mJjg=RRn#<*1h3#YxD=9<=IszD$VI@>S3w{>UwZ7z>ZMBhC z^$tn%xpdG)4OKeE(g4bQj02Dd;Y%qa)G)>)Pflg7q@<%s46f>dqd$ajb{pT5kEXKv z8hS62qszo_QN;;I00FI4La7JT-A~Y45$yvQ@g4FlD+Pu26(g)N-xD*-Ys?J_nHWmL zkYmzR-?7qd@4hBvx#5adrpy${JsLa=@q^}c^CEzEH$^AxaVtHW<|?yVKL%%xhNWr& zku9lo`GSt)P~*^xbF&>BkKoK_QBq!KV>>Vb?#<>0n;6NqD2Eq71NWt1w6*pTC_~Wx z(w!@2l7lgKmEdI;hD{rQM`L9cHnIBP9$sFPCXCTitaD1Jf#Bc3iQdHAa&(Q(*2Jop zIW-s%qfL33#_rmP3>8?g9IpcXu@k2&<`s`wB(Bgy5k&?&@_foHH{1?>*r@EG7nBR6 zE+9ITtiFmd)%nI|QYplgG|R48t|2PAn{MXkwSoKMK4IWTNlW`l7|jK2l0iEFbVQon zM;nVM7WevM(zMAoUn>O(JW!{IsFw^vh8DMCHn#okiq~1?uK7hA2pd$ZB|;(sY>uD- zYjR4pudunr%vboX0PVtIZjq^GS%qCsQgt)cRlCxODhsnjE>MzAl^w~r9+$<2mZkFS zzG~^`l>C$gNY0*FH8E)8BK8C*+qo^iz+SPLN|R2sG^)|h2J_6amMg!NK^q%)J6YU!!y z^tup=OD~7}!@C_PaG{)Yy|7!O>$5zjrU{ZtV+t37He;!wGAXlLo!fE;rVXtX9ZYpq z@+7YGv=st`w0an*P^He3q~7BF!PAO_QVBCC5UsqRfWu*LP=7o*k_p&acnNN4jltfl zS@?Rf<`iZLA~e;M;FZ=aSHuJvJ#Y9)A5UCZsO#DczM#`f9c4(SX&q4h9UuiH{{Zp_ zZ%y$)&TFTY>;6rpj$FQj!jiN|7?*ZqqU&`!LAKl2kForUvOKdVh4Us@V5Ouq(#;E! zrB)I}&A$^CTVH$FW6b8`zKfbRJ-e+K-UiBT0}8}ffn)H&kii^hOFXEhh*Q4DbAoxi zLYFdVsw#XarH!QoC4z%+sx818j{exH^n|i})?MzZUO?z8{&Orji*F$ZBVQ86Qc|AIhTrz#oO7iRv;OX11O2OD++ON3xUg zgRZjLDk_>>lCdf)s$WQ&HUvkti#MZM;@!!<*u^?tIVI0&YLwlekV$>*aNmgg4bCFx z6;C}-58@f*kd|g0@3}s>x_mXssVX6wOu|nNIiqNx*AqB>?AN#0i|uRU-?JVrpN@S> zpkC~m1ua6JdFk?%6%sfzA$LN6x~#W4Hn6^;59fe?wzCeG$ZBL-m8n`)DMukJ11VdA z!sHtgM&6#7o75H6aGq~-4DnJ`yeNSc?M|lJ zSwIW89`_#S85nrNSBt7D%+4$X1#anl`!MP}xnQz>(xhZC)fWNUp>9`J*DGR0`y2%7 z{K}&>tEs51M24kg5zP(%0PQ~nX+MOW&({_oguOTNu*sQJIw_5nWiG^NT?LK(u0q=T zk@UxYA#~kTQPgL&?G%x`3bkcq1ji!z5s!0!C@s0T-<#m$mKgHO8^>>-r`1E^d!Y_0 zku1v&S1UUfGD2(=cP88WA51`*)*PHuJ4vNNgWCIUPWJx*-U`$cBS!&bXvOX?VYRm( z+gCF04`^3fGMlXHau1u-AFeT+@2jMz=r}rOEdV6PT|i5#JF}8hY5p5q zo_V$}zXxd~qmrH}q>&|!Ja{7!s{`VKm%lo8L$Ty~ok1KqUGq)>I z`4FozGHGB3hbV6`w?EVBF$S%rfntiH7|kJPSy_oC8q1^e-|KN~OQ5exj{=}n7xAtX z5w+Ih#GdyZ`NCzLWP(~b;#M+^C^#oc2YdQl^XZQy2yVbD{m|^nf;p&Kt%^G&qDX<* zs3zckrBANc#eS-RC%kYGPdIH)8th{{`Az#?-%ML%SVpCsy0tmkCmA&oG??g;Ez_sEkyR zamyQC#O==~7FcRwugm76%<0BwPUM?R+JXRkZKx189mX4iqbtv8(To25Y)_O8>_x13 zI1`#vXPIw_H54%z%V{ewosQR1mhNtO-oo1)G(LG`0Kb39D0xShgm)>ar;3uAj+LaR zR6Zp#OQ~dxhVs~*ii@3&;ChT0IqbAmMhf~>r&B3n2{I_ZJAF<4JunVB+FJOMnzoPx zbX}Q1B--~U)Ekd|uY_e))S3HFM(ZL}QONq>m-kaR;2U=OZ((n2Xk%n+F4QazNbH&< zJ5g3F(=eI5QrW&vXyn;i#iR?h(!;+y_BO?Or#YBHX=x>zo|P9u2Vl}^?hAAO0HKJ6 zjbx;xqlR^-ma0}*7NX#m2X$g?W6!1bwh@`+nf6&RYOJoS!(EK1HK0DXTkrM8-ZT&z za5jQjWOroLt_oj;>@dU3fvioq^4`YSjV#Ar)+YOl5CH!81$YATS20ol8pN%uSRH>@9vjrVrH>dBQslC4d8)oCD8kWrnCM zBFQ5SAhm$MKTW>)WMi^|f@U(sIIDr05Myy~J@uP0JNLv4r6dk2bq@=~B!V};t-BsS zEJ~-#Y9_6nomG5>lpa05-`f=$nm?PTf{q1|j-mq*!i~lKg};_Gid>ARh}AQI(%flJzT?){z`D99 za_VZer9l`fQ5}@C9lW=1^Kpraa0LYpVI*3G@}+Xvso8{)!wErSxC4*Z36Y_etm|z` zseQdofj0H@`kZ;B9voU+GKN(k8=brFhz~T-RCs~cXR_aNZZBi){jgDsQ7w&<=}@%I zFm)g}jDxUCZ`;2ZlOi{O(MP=GmV2e_O~0qEBGJ@{VH%-OtnDS8Z+i;{_1_4OFsrC% zhLom;I^C`{NZSAa@7P}mOQvl zvdyTosnghc6UVSPcPolXslI16iHj!iu8-XpTU;{($On!Ev0=!%eX}Sad2=YJDVm{7 zF{-?+D~k|VTy5>|gvldX-P2gtIP9%?W?hr#G$SmAS)h)k5A6EFgs78qt-buagUBNT zA+N2Xe7_;gBZ`+YrJQ`qx!Rx|T4jZn+Z%m*dW>2!Op~YRvqK|R)Kb-wh2acirjhUd zk}M7GMUQiAG4Z;NlQ`-5D(NH!yDmdHUCDUOwJ)*TQ1=%Hd|^i`9VlV^C%?sLmJrQd z!lC?E>q%+p>iT++Z(y}@w3pDwn9}0**j%3Y&$>@AohWOm;ZPP=)Z~+WJ;3^r&LmGq zH&D8VsadP5X3%7sLRcM$XYNIT-+o6JkCRbOnY~_Ev9v6akt%F7_+*#-fH?GVLljV$ zo6jpT?t7o9Y@HWIYw}8CHEP9}Qa-syMyy~MVsYQ-xfnZtH zgR6o?kGSl8G3BOvgsvmCt$5nqAeE4OXNr0%e5!_8GN{PDDE0@MgQsw0eg*vsgjBMXvE$xhRG*U|d4cW!O9)}*k zq_h73ir04`V`YElAS2LaA!z1#0}6=LDrxouf6(EIaZuFs>959uNXy6tt{&rWZrkAf zH;Xh)9KlScLUh~^!rs1?z*?B)q{`zVREudRe#ZX**8(10v0YWVfttu9sB*7=5S>8w zJ8k^&11LsJ(k2gW2IBqi{Jk)zBuL-}HzwEZh;zF~RTQzY)(N$}xc*WuwZV(+tUFg3L3;;Y#Gd3Tsn%B-0l8-a1LfxdxLBgd?vJR zzK)wEu8LNtt)Zz(kj0q_Hm|>+{`i}h^qzT|vaVl~PcnnajEKSYENnj5`av2`5)MX}`h{$$j5}S`} z+QR`e{{V+Mu1hb9dU{O3(Y41cQZ$N+Jpk{&EseJ_%`*I!o=NK}5gIivW51h77be4d z0sOH~ulR;5q%?Fehc6gu5ud}6V<6h&wa07U9S>K`kk}SJU%DA_G27hQq~)+wbhk}Z zSI<`sDoeYQ5%FztU^^Yu`E9+=rYPCv0@guE*I795nrzYGnwkS|0!?L?!~X!psMvBY zMlM+;d*}6iQ9)9Mzb%+YN_5pKJZy?e$Q7&`&3(bS#cL>|tm!=FwHDj@^%Szx)K4^GXy=|N!3r6m1yzGGn~`f1 zVft^3-{THsGk&UqTgW4+f+R7XR_6B~TmJwoEi*A5U71p}lFc?@GqG^i(cMt@S@X7bzXT_meyCS zTBfIsVUWbYhE{WHsRM8~*zM)Tvo5VzqZ3IGWGk$>eImepcO0BjGiv71OsoV;BoZ2@ zkId_91mk@=**`m5oH**vNQ&yrHQbeDTUdQPaa8E6qHM1%i6foM2^pE6d+%a7 z;OxWL3=Zln^Ejl2XRU@vWD+nD7O)CrWIz}j71E)PyJIPklPQU&)`6OtsrxMks-m8n z9~M~@$b#Wn{KS1b{V@ussn;3j5*XjZ9^S73tTCYhLiXD838+W$&(T}4-90v5LzdlC-v>7^zn^U}2 zdQ=+xTawaky@ze^ihiqt@_1BpKK8L9?0vm)O#RIiFsVx((!DcyGRpKkcO?(7ZtD#m9LtTmlXl~ioBw9+f9TJiwlO~5x77!ULHbya>P zQ1FL^T)B;9T$971IhH26mrWroO@IfTt=|TEY8R}9p{VeTN~JujVoCS* z_KO1hMvTFV}-*}S`Rw-!6%TrDAKLR(a1FPQ9h7bEL| z`ILyTOHinyL|f?YINSX7!deFeCpen0lR=!;PEgd$9g)i`D)1YN_dH;#R@A(nA)a+h zYy_H5BXBM0iv27w!BgVsbk`D#4gdnyzkR)Ms)>Tsq;Vvwtjy$q2qxQi+wFpMVaH&W z9zfj}TDtAlpD?OG8tbj^vfAVCiE!r=34zy9D>7>qHUu57#^;OTyO*_fRLfB7955`7 zpo6#|?a$v6kt?T}X=udFrCL3ZfB|pydjWh4qX5xF9%&SoOwziFIK$D*S8(#PD-}J# zUNJt338STwo}!`_@fa2^3ttGK%i*L{OBmu(0)}#RG4=ldJK@a6Z6RY+Zz%wt#Bay> zd{%R>$`iwASx<=|rnF*RXOsfU2=uV$Y$(+R0ZK=v$6@L@zvcG8XNOeDDojDU8|}~Z z#N>sL9Zagcup4jO;tLc9d=#o?h4mTf(HRZYf^Emw0&^V7vOyrEks8gR6$X$^?YF1< z95+=Y)s*HsR|4X|lVIMPfqP;^IdmeF2eL?@yBNr^BZ0p6!3KuzP?B7SL2|H5Dk~XQ z?Cb$L?_z$I0|6=4zFOHTWust3)*;57TkX!nY+53XX#Q#$?Mc1x%5g+st1RQ=cv8P1k{}$@!x@c(6}7Kr z1d@M2zrG@8Qq518B%TmyA<{tyW;Qk#`W`Sy%F8Mkfe$lyXGtev+v(p6I{-pwB!aq? zOtn(MBtS(X3&uyP8M%;wFhKUNYZFX z3Z)8*D_oF0&vA;+S5rutV#y2=0R+n6u(3oZay>`;;=s>n&?4wyJ8Yx;2Ltlz@c#fg zM^cXEW+=%ZHUokBV57F3UW=c&q%tasGKuqI=)qY<{SRy|S)-pZXN`l?s}w{V1!4HN z@ASl6`zW3f^E6VlsS1+OosZ?g;{tkaY1gHacZt-mi1#D$8=d`k=X_mb1DYJ(`+e0% zIJD74)uF0t%SS8f#*Ihf2 zu)~#0oiQYcH{NL?1w~+EmJ5gNz!-Q z)M6C#MI1z_u>gZ@_O-44*e5{*v^funBm_(Nl>=VaJRg1V$*R6+W92Te=rc2GP>eKk z4aaYBf)r^qaIcR40Ka7|w;*}}f$+;cMAYigIHmDCCu6uRVtaPmoJ*~wl1Ela9Y}HE z5Nt*Ewf?xLAp^>+F}5`)GK1r0l`R5+5=KqW`nDW>@H?m)N3E!ZRScdPQK;Kd<4yZw z!<0e$ncK|IA@i0RPRDW6* zfh{DlIPt3&cdyQIw zJ@)NvFgk{@Dd!;w@zs1+QbTcLY;DPo`A(t1Sy9N=3Mk_$L03GXO8|9Q*6MCJ{V`go zgm^DBaur=+jjzWx_Qjg4w6rh?BYC4}z$Vvi*PHs@`*y%w;u#{HbYc%S!Z~0#!o)4c zCJOw)T-tX=Flp=Pc~H)(@mI9v|t|%L2phy#lghV>m^no=>^S>*W)8Qg0eh75N)_WPf?1F#korwQ~Yn~hY`v# z{{S&WlO(=*BL_-_eXqB#*Yx)oFPG=kHFF5%Ri|eNQQgO${1030#xsbdpXC{zR%uzx z*U|>7@<8pizbp@iY30otNlO<>iv#|fAT|dUozs~h_=Q|$xutDcc6J(8rGr>loJK!; zxg;I9+k>~Z7+ls`exX_^l6i!L76RnQ<-VhDLO>(Eu~X^q3VLc>$HtH55>{4?w=%7+ zE__W-K(d&iq?%ZLt?Mp=pHF zVWf@RYDopOD+9*<;2UEs7M+T|L20m#M)H5#5-DZh%sBQo{{RjXS0vK-Z5r)jLEml# zuskemti%g}YmjaFVVzX-O(jxW(6Iy^xEtHHBvVePg{2V?1;7Txdtd?HiY=){ zYFQ+xk=!sQ#H$~`eZ4#5F8=_DMV)$ME8tqKt*GwaLt%}1s$ay__`v)iar)yB{{V>` z=jQWFqa}z15knLZZm?#Ds&n)LPoH<$^QUPx9f`i zM8r|0G+LB+g;fs)uj~BA4rZ#6E18U9%fg$1^gq)T{IOp%&yq86k(;q1`bV$lY<(4+ zYF<&hqoSoLVU7fmP>qJyBHjJB?`$Z>>`=xCjHxy!b|f9Xp7?55BaX3)NL_%qan9o3 z;NWkCO7W3m$}|grO|<%dZ%ico6xu;lT}M})S4%k;(mAm8;{vP1FCxyu$_N%ei*w)K zY)zW2QHG*SDQkIu5%0HrM}kLsgCl?#voRyJ`w#QJ2pZi;T$v?FDvy5m z+~Q7I2#!i*CqZINvJQTqsl-aBRt|tNgi)nG)a2aX3!;utl79B(%BG-ull*|b6lA_p zfoQpvV^QIq3v*@+Zy&Y0lfU`C3(_JCwmPSnvWUr8?tIMKYB%mk9DnF+a%I$1RBI+) zYbU5?@R?*PS4lgY@GbY>6Y0KpHPD#DQfRxODD>~G2M`Qn_8vA1OA3PSUCWM_?( zq>gJOu^e-OQ?zER{_vzqfeV67!C&riH$PyRi!~%jwst2^;RKWZ_!AV7u`MvW zsVbxbN!#_sxLHjF1CI2Dfg-$+G`h4nQKfnJzARZ&D4{4yi*9$li3Zmg0MVAJcMYcY z(zo=!_*y7RvEnP;AI)#XJ#cbL-pUJ2D-?xcu8B4QqjG)jKtIS~i7HGYq053A*KJp@ zvD&M9;XV;8a9IwQK^Fqwa&wTrO*4|LxC2A0;I!S z&z5D-)j4@7rBq_0a~1aQ$QSzof~z!;t4k^krBX;9`+qD}3yMm(%ppubhPNQxfPaEkg>*idfy|DtP*z(`~Sb97@Kh#~Wy{LU&DF{{X%@gL1g2^Tf2% zJaMJsj!i#^-`{`B0t`j!mta9R0Ps!D*eOxsEek4^W_cRh@CSSM?lBIQj%TTjnaV1k zAQ!v(pXZBgri(xcD3(&s9W=$uk*P@_ZEINlcm7x*S4S+dB2&%dYF2qwHZiCdKEu7Y zHnt+^f*8z_xVScreF(4@9j$xf)zfwTKSP{5)=|}*y0VPG*YgH)7Uc2eCsEsr_qHhH zNE!=<>9My`14@$7tIr8K#n3hGMTYmj-S+psBf^U+{t>5Rqz}cm!~EwKzNMz6sm@lD zr)lbHqSDrp6{JUE#IA+>L&{VVZTN4tE}0)dcx~;0Vn1 zGMLvzn5flrbKKYszrvob>CEbk{H+`{S)?(eF6BWf9nPHtacyMZ)bV@=f+{*%dMRd* zOB)i*V>(z9>Ujr~fo@AO+v2s?eUqBg5z|V3Yh4P(TCuFMMPnC;`}yB(Li_+OHpe~{ zR83LULZUDu6x5$91G3!sj5fdj0D^e`08kzAU(PcJtAZQ5<9h=w7ixNiGV>F1uC_vHsq5u= zyubxkWGkfluBNuFxxO3t&6!eWRT&KpG{{4sksVL&)*JXr+PjTG$s^wo{wO>-d7+_% z$vruzAHFGVYHWO@?|TIY*|@-ehm+;`{{UN2ws|Rnf;A987y^W%>5U0H1ny59;)^0K zYjThFgI}V4pe`ZYtHmcr)8$#-Q<+dk^@fhVNHZ1$c|Z%MK)tNodt*?_KoZn9jFQu! zF#y8A0dL6iKP*@B9L9?=shWCLnqrQkr}tzC$`SJkG&y!KHwpE*$_ zGJ&VZRt13re%$-6JldF48Eu_gZib_qKu^EvwuToUQ}hli^&+RCb$ znQ7}OT^gAjl!=6-YqvVBpp$P)9@wvEw3)>{T&|JrQ!kHDH17i_J{SVs#@F=QzAnJl z$nOl1xV2rxyUev5x$?K5rLT@L7^bqcj-&{b*vQN~snl!_uGr81DD~!Lnn^EC^u0Xr z(n48esXzA$AiFB8c|6nIX03R*Wf)6dmt#&AA?j z6|Sd_Zko!nI_RKExpN;7Rx+a#byX^sz4X|yKBQmM7W!;awD^wPlSAmDc^{`h*beH4 z(vZbjnE(N%q-Rq+$fd=-y+*@)SUhtzbXj&-<>AZqwt_XRvdJacdtFMZ0(}Mqm`p^1M8deHL>XM&VzxOtCX8mpRNb*qF}nJuFBpEM4LxZ{FMQ*yA;iC#s9CX!7?C zC1})7A`spSGaCl%3G_a=zrip3xt3;hRP|C+$2tcR)G<;Dw~<1dg2jN?+m7P`>GJt# zvo*<|I}+E|%xe4}}&Y>}7b2o-2L#d;RX_v#g{nx*4_+zXxxZuyS`I9G% z($y@`y09AKV8Ntq_OVw5eKem;R`X7vO8V(&DJGIks)i`UvQ#U6^q{h_3$r4d*}sUN zrX7AXY%Nd*hZ5v>Ca#tY^{SwPWTtlT^2iO;!hmUJ1pY4~sUTm>*S`B2rOctsAvCNt z8hF{*@OKAFT<}fr`2)@wItmEpEEU)WVmoTwkL!(`9-jnxZkes!Rh~x{0HS5_ zne#}al!XrCTMpOS!u|Qj(%EJ~MmkR;SZIt=ygnPqqU^D`zNWV4n_PO4kDoppQ4HIv zC}>_nk<`tkxED6H%X|HC^wwf>>N-jp8nDv@q8cMjjT!uKLX~d2fV0PI@-rteMXW>y?&*BQn;ypPk=@yWrsVaHg3vIp+4nGSU zSsSzzxxcA4f!wWUC8wHtC3<1nMFoHnA1jN zuM)?m6k&ZNFN$r)oCAI_Th981hculs`h3P&;%ONspGBi^uVH;XjqPL3EZrF@Wz^Ma zO%=*2L?1%~8kPj>Cw*Jo0qu+_?XejTJdc92sk(z3!pgI1NpgtRIayg^jp1JGWDG@# z_aqOt15%_kv@&?g?I=WkV;krs#2UP(4nnb)V!MJ+rKWzw*C$l84* zMoz}Sup46S(0Q!{*@sI~EaExXPYjAva^-`npH(}MeRstHY1=8B_|eHqv(MqPwZC`3 zYk|1~n*n|CXw8;RpUtV~%BG!QrF|3CCgMZ0s@mWH%2vYS_BSUJnWj%8Pdt5;!>OKs zMYqw;pS8|Vl+KnuGBI03F2pbf{{V}7fOxhDXH02YI+TH#`8(L1?8DQGe}@9H+`>H4 z9IrK{mh`fOnL{WV1-NTo#4sFR6R9VXdD4cVL7j~ zwm}3YGx=IPt~#}i_qz4#dB#^4Tpz`k{_m zouVJRDxm6HcRl?+_>EF1D}-p}7IiBmaz;of{DFP1VmQL!&2&#RYmj|c9Xu3+RWWy< z&FBQNMB$R7!!0ZlU&;@4_BJDYXnA&X4P7EbTOo>fUD*wR{J1;gI?SW1kx{FWXL$($ zlx}?&ZaBZ(VZ5%cdMb#cO3>7C045HDQs3|mTy{3t`X5{rIhuT}ci|oTqhz{GD{oZf zmC8j-I&(^EY92gl&WE_vHzV(gtjz@Uv6ZK%q?JJo&}z~2U`fB!99wb>=49AU;fLPR z?j-I(_x^Ul6{YFi-2VQGDr$%2&=tSjTlE;;!Rrydqh7^xqigpCWBH9eWi+cb)#KOr z%Ua%^#}IQWmdqv;&_wJ={8rWa3~KqGLqN*wPf-30mkkW*;zm98+BUNK9$UG>Os>@VL4Z>Ux%=%(xWloU76zNxB50rUO z4nP}8S62&5tEvD8#k;Pv#sj8M&d17SW%7Ag{$8TI49O)fpExo)09lT} zdJp%&oc2hN8cS;$K`ypFenB3+utt#zM%5CqX%G5M^p8vTz>c7Q-|LC346iOzIq7m8b2`#pxyny!HW{*^)FMd^+&Ls|AwZ{o*1hljv1zXX1s5u|V;u54j*cT%Z7x-Ozz#t4{$|+r zO;HscYSdNIw3MLujEdSz1t!-%hTLH7UR`)6EL6m=W|rqohra{8`QH)a$mOn9Y2;`r z^yzbReItMeAN#>;4rysaxZyvaW=T?ND(PaDnwGu(Vmeu6)!_{xZLk950rtd9zo~0z zq|0Uf+a(Athl0eCZ*#%meTE{|Oo`#e;272t5Gl66d2RmZ0_BjzL=M4#+l%dcfJb}_ zVr^-qI?dQt%08vdb9&=JSv+!6%40f8fYx2WxZIsYTj`5lQJ+-JLqkx@6mqpOgvkDO zER1}n{{V14xXGz=2nK0KEsMfkcRY&|bL??x=y>ZZCW4UEGZ>~~g$eNyiyblp=x#XM z*A()xm<54UoeYjU5}fFTqMNSjM34bJHG4r7G_F-+fU7YoH^2UdET0#8N~Qr#)%`tr z5>b&44^&mC`ZhHJ=e?t(r2k%UFC%Tg!d8`ip(>^cPMwRXi0a z-VD@I#u=lKc~tHVkEOU4?QZz1ojb9oYubBotYa`p($W@b@b@`rbGlkuS)JjQK!!;g z@!gPJTz?MwZR$z(#p(zneDgKT8kW@6z8Wr>KMO`JaoiGaK9W_7?WUzKIeoH1!S-h2^r3OL9Kno+0(d zVMkifMHA|h2HY^?+W!F43W=2|9*c|iRq-R0YmKdPeRuDOHGp`Lg(P{e`eI-pf}{YT z*x&nN46LtJ5?Js>$=Gkt+ZscilER;nQ^xw_n2{IZQ{Mjo*BqUT0rZ60DLDs9f8R#pp3zjxKpAhJZ_oFvIZkxwpR)3UGHfTaMr0{cwt=8@ed+4L@t)l3E57Ho29eC=VcM_xHdlKn_7*r_$K4R>!G{ z000)iUjV0YWZV(<#IuCvlWX*Do#iB=YLQmKiREv(z@DPdWTBy}dL>7mHW5dEFfyOQ zw!Z$PU^m4srEI6BYbhw}(w4S*DQAkQj>s0J&3yfGkNQUvGST!v_V@Fi1~&uT{U1kOPYvI6=C@KbosKg1)KRR|v5= zW2Du{PLj$w@W$W+Yuf_yo~xkAb6m(1qNg3(wA&}d0Sd(GqAd4J(SfPwW z7zL~+z1oYd6{X8-W63CMXd$Y3%gED73lj+G#=guML`uaGPi9+s+k79csHB&uDxj!I9ifgn zQlKyj%ng@P{R!i3v0c%Y$Tg3MOb!LRDs6kPq`u1+i2BusnOGBhcOZ;6(iK#&)JH8; z4W*fyMosjKZTVu!n`BOva!&+JJToA%wS(Qaw1zk(dlC)7$$xZ^wcmNys^|1BB)j17v^z}Vv zUgQQADCx3ht>4s@U^-o6h&Eo#$WwARd zf}+Q@x%R}Y!oM@=n*7f)o5X4vCR$inF5y@!Tm$%k^9y}(LGl*NTF?)}{3~p2vzk_J zmg@Mb`hK4=idGWM0{D@z)2d)XmQ}FR{6zYYF$=AQR(X{vjatV;c_>5A+* ztX)S_7G+B{Oj6Rw5#n_KNpRkr5n;IX!Thqg!lE%ac-;tMdxC66D-3ZAf$bE1JrO=~ z@ucvw&ZE#N{{UyDNkEY5m;-&33-9lTGNxL2VX@sQ#;+*4>HzQUuoyEYP->~eSHg)_ z<&cF!0NfqNbfTsuQd(x=Tdj2MCu z7i)|8b$Xj^?R-JYnWWGu*;WYT8*WYScJ@2r=<8ZYMNDCIls8fcvx8y*_x}Jn#b*Kr zlwgijndLDhm@5J_xGFfnJg$bLH?Mi)Efo|p5?fBqZp-wx7d~WWoghy9Ufk{2`89~SOicB+v{)73~s2$8&S)zZeM}M!GoUP*Y2i!IzECe)uWm zAxL&A+yFMX{$251?4;(Dik}hTWD=^e*k8Fkfq$+T5!EDm-kw1V8wO#2zvOYooI=t- zW*VY4DtIHY9^Jm!?0KPTQ%|ZnReYsSAnjp%OIkt~5L8H(UlYPaa;S8Ri<9ZU<%iwm z`H>cqS+>&G({AJ638|`jcv^Y&wc5o&uuws^-q=JE88YY0StQb=HU9w87jbXb^}~KC zTpCVGQX{BsYN8m_*ll$H?0Msl&l0D3C!ui^ip=rs%A(tLKHmQTd{^wImbt=_;<_fF zN0?u5e^1v0*TX`Q#%y6ABNjS{u)34zM{IMz*-K5Ps%7zEr>Oq`x#Ez8cifX>W9zUu zToG%UofQd4CE1OIfd|*y9EIbOl9`l7|fka zH0@&>IdD{gU`F=`w;0xqjbN#l(TCQB^ zu0aHC`R$H|Jz|Q7yoXp?630zbL}rOvK_V$-EN^@6eYpIv1x$ib8(rzC*o{WOqhD*= zb6`f;IR#QlBHeEjp$#BA5NtvEVg_wYQftMe1tH0{mObzJTL_KXT}3&<+iA&J>gZlJ z8f2AL_Z+p>)<4e)%;psJF}t$F?y5;+YuJ(fh9uKGljX}WHd^KxOSs4g=yv*SjvdSlTYGMJv*Lo1%$QLo&=DpiJ?h+M&CfVVlUqgfrgFjl_UKX znkJ-5NLxxfHp;tM0PH#A`e0>baisIg6G9;krq{Lq0G~f>N1mpto_`Hvk3@uNZO50n zKYVhsc|0hhI+ZVGw&VT(08BBlkn2h=6r|D8Q_Fhd=%H9DqY@6Q*fF=h->w;}q@B!Y zDp>^QOnQhTZPZlE&TD=Gn~8% zQ#%1TO9#1CHvp15gR$F>t^?Gxi7;w;wNnSwt$xJ%V>&+?M|rljb;2+nVVu^MOv;v~ zmY4w3-X~-DYz@O7zAUq6q`VzFEYBxRQdNf~(@|rmkS;~-f^hV`ZDlJgamNBPl8oGe zf7jO*oR6jQ?2_#B3YxT18JlZgdjZ?;z6?W9jz*Bd`+_&Wr@l3&&pN-Rs7Hyly;XAD zs8Om@E?`;Fc2xmV=ehghOj#8*a+yS;NUvZ}Y<+k2!P+Wt@;8Vg8b+o8w*vnFr_j7{Uz;mnd4^B3~TF{AI8nQa5Vd5d${@8R>=NA;I2?I(!(%Ee^lq=!u zmU?E;S*)S&YlHW`_|$qU=Pyg z2II{sU}P~y%D|Gq9f;e_?dgmjpiIvqmZmL6(61GK1e2pi>>Mc4Sb11-e?9QoiQEJt z#eB9>KqB`R-|4@7{csL~t{)M>l$F)0JDxtDV}dDLI9tq$ns;GivhV)fV-4&r@D8g{&>dv(>_ewFcj2_BouxjF-GR>O|5fp$P8$7{8wZ?h}bHbbFvoQ z@92n7*DigY9WLn%0i=dC7Y0LX-rVjDhrTCN>6V~tl8y>&xnJgd z86}ybAd7||i(B6ZT%QxfF{H7^h~6(77XWYXjXB6f*j@;XKB~j?_%KNEtNK8LpV{PA3Bxu~xU%< z4*cO*nS;kGq?#ou!*}3%++uRP9x#>`)S3xUdkY=^08BnH;gU}&avf9$37p479xJ+w zcw{Ixw>JL(YzLx=8#hIZR)SgNH~u5#!CcuAb^Y5Cx-ac}iyQhJLdq1$T{$In#;WYY zYmI>Vka1y#m|T${w*V2YovWIH9m_s%O;jD z4oYcdMhFPdY<9i&?}OAmZC^;)cg(kr48=%6yIl&4{V#j_V;3W)KK}rxxLR=Lwt#xn zX<&|$Ye%I-?n(0QBqM*IHUs|vc#%^UsMvx~k_kQ3e|!KvS(d#uK$&C^fxN3@VQcC( zy?{QrkTYzyy;gXtqIS{PVW z8+|?a$1=*cs#7pC`Q{=Mdl2p{zmL3ZR41BAg+_&gWzrF%Zoxx3< ztkFnYEnZ5(LV^dCeZV`LV&gHjiUW07^Jq3oxK~cE8^&r@EjumR*K2Kiet7wZ;s#|U ze_dvElDL>hH-N6KsY=ITVd}TP=5ebZiIo{eqFLR_HC70B4TPs6YRBESu!nD#xq!OyvcG)>5{{W^Q zpr8~IIx|KR`lK!2f-mjuh}5B@tC{3wS8FS>t;&yYL5P+0P8p)4O>vLoeZr39`k!oi zVk}TuW12=Po;7`1#f|heyIS`?*d09Zg_M}t+r$MNc6S;>SZsZE zAEqS51cD_}r^rWz5aCVxk6wQ)02Q)=6a|IfNiI~b%NYcb>$ev;k5?-}E|h&+fpU1k ziCz_RsGk%cGY7Z}?0XY{Q(kJOL{AjhYGN&<-|`**04#SXny1AYPX#MYP_UEbP}?+w z?oYki9LKc+oZH;%AV!F7!Qu_KSC`MwobA(4^@V*=h)X5EjezidF*t|}csj(MBIP$Lca zzl-U7Kb9n7Q12L!5>zVr7_Uj;H+1)oE*{_YXx)S#;q{u~cj)YhL0GGIm|hHe(( z!u`%53qK_{vTHF@DT+8!%Np1lU!DH|z9vB5IZI5ai=scqZU`pE-+oRJn>mf;kZ!@j z1RpMvEIzy652PQn=2cUoDwS4SZ)*=ThpTeRNTAEA<*3&LW?7m*LP;ZT3fP-$!1mt;a_sU7uAryOa>|)%1w3g{ zrce|p8d<#ClE+cn+>yRKhf<$6B1bfW8a{z)}&WvxkEHOmn{rN9X>K z$uOecsmNCUC(GZfM+EAfyeOi4=s0ZJS8KwBIm&-u!TR~GRJg&6DJ6)q3 z7QMebWmRE3HU1MYAltb5V#UxI8%a}_<}=F~rJAYfp^5FNgo)c<&^STwsNdZ^N7??L zk_@wr{(GgeSG&j-lNVU@tgzE(vQ?bEXl2m^v)mQ9wTKrCq!G^+9+;8UT_q<{D14XY zUofN8C#E1Lh+4#X#|>f)j>KDodx12NN-1eg11nQkMLdE;8WCKVB}&{C0k2{|hzw}* z$@?R(lQ5QP3g!`rjWREqSpeQ<-|()GEzg^cvF8pa{Cur;E02AS`)sr!guHpT3m42f z7dXn@;+Bb6qiT5JF2zAMxjvsxZ-E^%QB~79jJ1zUJPLs%IwwM+`))6>BV)I0eMLo> z<+;5b4R&Ei`#NgvppK=~NE{R81RmgAdV)3>qkLq^DzkqEhbN$ctE_5#R%8z*o2fvj zeS-t5+;NS}Zm%SyM=M1h>!!hMV7-NW?bQ|X<`YRf&hnAui&5Zl_x^ig!SMGlk2UIw zEQ#idnjKzuadBa}7Pz@?Io|;KlPjppQK8IfXQ!(UH6)8>3{CePk2pK(9=_W@G6kO{7-*L(IzA2epy+m?~ILvV7bnYdRN|dOx z6SaX;u_EWc7$ccxbTp|&)0Fk}nQ_eH2SALo(n?7!A+ffW7yMjvxW|Ue#eATUZ2tg{ z(QWSb(At#D?v6Pn00OG#b{pK2V1K4Nmcd<5P7-ZpOZ>Ck@qNX?<;(i%E9Z?w zUn$_3LDXW9NpW$-im?9x@OQ%>6JIh|lBX>ZK(N5k*GviV8tkQ3+-cZ(y>{<|Io&|k zBYVi=H6`MIBCV{^ush!SgYSe;EIuKIrV=2X8Z~QbxjZX>o8xLOt|F0*VA;ET!Yy^= zYRo#vtE(&O=_w|O0wOE`1I(8nyko-vO@;dmE8>4r)r`iTl_U8-+0g2!5t0H-Q%h*y zuwZZMMl>VP)U~;tC+zfrX#@`)Lh{PY2Ci&Kusd=s_r^={L#H!{I+m`lH!`$RIcXSEx;q3dwe{sT#~~d0DfsQGC;z8QnI|oDEbP23YwaEYHK4|C16VxvptxK^jiNVq;_nb9PbyAH#fS`Ewk-vd`y|PZM?lxdy~7hXmj^Q07fb@j@)lW{r+j5S;j- zlt>mkxcd3p-%AcKXCR5A%!NFE6B%VlI5EYihr1!5~@XlF(@81WeO=In`;Dv z^we#N?olm0RN16-ORFg=lG}0~MMgRSJPUz;pv0W1>$t;ouAe-_?wYze0zw}N>wNxq84+u!-m;Rn7^2pHvy}-7XW+d%@=l{{X~WPQu(1f=Q9qQ*?w>Fn`k2v@yz& zhQ6IPc@>WyZ!z20U?0R8DzjQBsG(*@g|?DFQCw;B8w>B~c(wcDw3$L_wMpuXTx`-7 zZJyQ7RbKEkuOxKMsP0G(b|iN`m&E*|E@(wEL3N(AGBH*wtqPl=-*L9~=L|`fK@MF{ z4qvXWu1JjYy|zT`Jq6g0$a>+tmORkrkkQgrMzu{DK=ZLFPA}#r!|RQ`UP|n#5_Q=| za*Uypww8tFNMoHr(pacbV#K$h^8UTCH>Wy=S$f``<*6SjQy^9@#EXKUu(x{vqi#Pu zSEjClmN{mO7n)eWSsAr4zb)&g+hg4*xn(^qZC!OF^>uJlm#0SAJVH4;@Hw}&u&E-p z5?gyxV;%vex_mf2_KNBb&>I#9(GO+;}hl1KbZ*S6LL6b{z+ z!G-E>maZ`-d6U11;IzheP|ObcK>+S_+uM9$GZP~n&8C_P+vaP@3oEOP%PUpPZt_Uv zuBJK|oz~~R{{W^hw0XoiuS$N+oYTWmJy?GpXJD@sNEcZHh8lntX3LL4aWvt7hNM~D;uON^yZ&7<(eX-o42oo`vGI^(xXreG` z4R-L%&dcRL={Mg1{v64g<(Z8|CSgr2GdyTiPY6=1s5IE9uneVkCu4Kp6Y8O^%YH{Q zrF;0bs|7%i+$;(SBiPxAKVy$Akqd<7fb4hqtu~V8fiYd~I*y%wW=yTac(ET6Ct-8XBe4V#ffLP9nO4YWsbN7lRgskrx>-Q75$t#)vjLBE z_GK}wYB@_({GGvZw1tP_Q|)dsj3O@Fiv2>8?>7q5mPjbGDHc>Q!k`Ts=_AvAcDK-s zSNg-Issl8jDnlwFys;>{4T%Ib!MOAS=ZsmNl`18ss^WM^)(JjkAm98rC6QIFeKgde zH7p>g)0BI^l#M`$# zVrytJwBt>QxGDwC`w{3y->y5=nM=bH8h;KuI97sBDNx*%J?;qlTj_v5v@3GT#-OWY zghD`I!&a-1EvO$tP5av!`S_vE@fs-psSTSXO4lWGWvGzdHe!ujs#Up?lsrm0ttz7F>Pf%fi zl4pe?QqE8QM}M{eOVE*2v(1)fq!54Y%(f%jZ|RGT9e0RYi%;P8$&6v~F*CV#2sHKeP3&0*x{Kgy0dM`1r z*IOkl;t;+jnb<{tW9%`h*VVRH{{T@XK!GHG3<(>S><_v7;p+IlVh6F&Fc%EgI=1{Q zc(L{DaeMw!O4x3b?orlt#)4R&_jiu(&fi7_xfY!nQxy(NZOwdJ%^7o#urVxPYj-oP?v{wKH zVPymoIQ?+R`m5U>^waa>{2&kKr#$(?jD_R8`JZe|Y{VK*!%m*m`%xgDcB2 z%%W;oVUJ2Omy9ZwX+_G9FdTn;SE#y^HmQ|TXgpe!P*_vI#9cuwLSDddHz)g9x>r3+ z+A6l5%?vc&CZ<6cjJKC!PivF)wlL+)l0pN?H}+Rz5rgFk>9TH*i#=M0i!T|8((3Bv zT(G^#v9HYCapzD}hHL1#`$^w;@fG-uxuD~_O zK9}u_LuYF`Kq}9NG?pGyV3r;Iv0g{W*Mjr1b6(d93)D+B6-1#DQyh~S0!UqiXY-g%UL-GdVzn9jvN1-;ywh*aVJ4F(Tzvl;2kybGhRbpN@6) zbbk)&Y2qZUbxc&#G1#nE)WCg8DEs2xBtAAnT6iS{l4xNo0jrVO^%Bg^#pFNgCw?%x zp&L_gAYC93cexk8r08SJQAw{qB$11$YuNb&H>GbdYG4ygM1?DW1YFUz7Z=!(eSq~CMD$Tq(yn75P}4Vv#`}Oq;C;pbNg-OG%Wgrj<9)GU%j;r#XyFk6 ztN8ssg9>vrSqX?Fu{Abo^tCbREfF9d;DAB?SRD!}t#^OI4TQz{B5N~8fh3?{{Y0vvuytWH2spa<>ZE@ zD*B0JlnCk7wJO95atUP{cT#;$Bz#P+rOdjXk07Rv4B2%bjZo3R(tiEbe5}j3Ra+fb zxWBFd3Vi1`>Ku+--c+44DwygXIM-%dX%{MN0)b(E_c#|6)$r%lwGcG*P^DDNXOIBJ zcqBE(uOLxv#j)pcv6?i1MX(d~J1cU?bd&12Ir*%rjOMwSuK~7>Da?_oYOxl+pl@z> zu=?V&;Wa$dEG!x_%me-q$W6hwy@uGgVs#`lSaW-Axf_1Cn^DvvJo0(P zl{`{dr<&?_3uD+DcEc1Du+oVLhN3vEOojZ~TK5}RTK4;5ZESQkdBic!lfyA^%_1^~ z4S!9AuWhl#tuEXs)IdZtEY7-;nx1+%wIkD#sN@zxMv`n!_upT*t*A8BQTU!4g_&7)eMkE3 z`C_z?+a7AFXdtSN{w%1IBz8}z(`$3~_rZLZD^;eBLr)4!e|V!n4uDwLk;n&e zwkp0x_;pFGZ=aNBBaW&$CZ3i>o&h`Em5W(GxwpRGt|fd-nwUim6DGMNXp1}T=48I1 ze&BI|-7#E?9Yo6QH6zTd6t9>uaHie(xxpWaO-(j)PfjCqPgfjlvKx67ETrH60H^iF zJKBBiwy!q46G(nfMN5}bA&x0^%HmL@T#(8w`3qs$5V>bYX0ikzn*nwv{{WS@_QH~- zUQZ36D(A_f_OjTIzX0MzG)nBy60s<|8E>&w8-4b+EIg1)oykgTLE(EdNd*fuU>PGt zYlhsfx%yxuJQXM&t>RFCX_EV{{{Wq@Z_MDd6Ri1*z*|rV2?SiSHNdyiN&Daeqfkon zRXa@4l8iLz1a<&^TjJI!JS5FSaG{L8HO$&o0pwW7vbge#{{Xk%*oROpRZOcpo2tO31=_rn0DtR*cxA@IH#`ajOrEJ@@e)Z&01GT^J*+qFz4pXt^I1}v zLexm)c_S^zzSkh{d?vCghLj&1GD)uMZNpd_+qTCEfe~g!bn#wC1ONv&+xz0fV`v+T zOLT{_wb0IL=@iK>w_9l|eI2>$@({IMpEVJC?5g39ZqMu65fxxeN5;geXx0>x6_ZG0 zHv|GV8*y)Md`6+Knqpvxki=?G$8Cj(_TO+YFUGlwI0G!Q5*Ev2{#yhJLzb*Ymk}xdNU4=%4%cO4Z!Y4*f1R-?JHtd`NS#;(0ZsSx{{TCKhI8f<)Y06jlf=@j$9wEa zziqFM=M&V^M6<+&$z>%}?oIX|(+Y0wYgC<_N<}QNvdXO*gp^&01d(h10Blc(%T}^@ zXwgc#kdbTOesKa zd*Ve$%Sk&sEuC22#M}#ipPmvNZ8Wq}gAQ9oTj3>2xbS4s4ep}+?ZM>ph6NO87F7}I zS#=;sCw=a3iA`9vu`(z|RUv%CbAD}qTjP;ylBFV-$>!d}YY%XH;z4jjK$PscbTZF) zpa#qT0NOVD?YKCr^#)BB$xKos6G!JaQONEwbx#IHVR{0 zG?nPg9vVyopot2A4xKBBVZ1pN<4dE9I+M5t{{W|_*AGn^NYeQ();72tUysiW_+d~) zTFa!^`r6##dVxnu4RjGqj~seZa-~(ZToK0O>E8kCl+#KT${}}HqZd1XIQ*~rV76@m z@uI3ItQN>ohTEHl2iI#`(-5<14N68@jJ!Lyh#yG|2HSVO`{LXuap6;}1&ekwB4eD7$GKY431;m}kU@OC4lkXIShU>F3mu zf2IQ0=TQ!%s+AbW2g~?~ini2Exxe2IV;u8AEVwW$R10Qk<3R+5#2^3#BwU-{a&W4a z0qj7K0i{OYbM1=6+5Z5`l1(v|1bZjWAdsXLVPf%)g#dX8<4OAZ;JlQo zpZ3;5;`&b{dtVv!fHK1c?;tlJcn6SvmbNaPJ)C&ZM?+Z7vWC#JC68^1^%$*@7LPMi zqIRu{dY$JI-LI)hA%j>p`~5v}V2d@Zf{1H?O-iJh7_cTWz3dMDn+yuAh2k2d(|*<$ zQVuIw-A!b=;z?Q{P^+r%Wg^4xioOFfIZg3QTZGS7^%7P}vaL6Ss0czu++Nog_1gjR zRZ5wjW>RKVvL&_*O@;9urU_eV!zoj#0Uf;uuh$cD=$1KBB~2b9D>kj}#0!J#&Nc%X z1Ugu=!F00Qm4+IlLrjTNPL8Te#^|fH`+|O!z6nQ}$5Binq^N=+qz?(AF_s(qp%{Wn z<{lr2C;kZ(u)4S3{M!Qa_$^PSbx#w+{pbX9>N{Vb%Lt>dsf9jSoHT_lP5jB`JKEUf z&XPWcE35wi7QOLhj4X0P$Z%D3kkiOwjbdWjn3Y>=wZK1HVpdSj)G&$G=-~>3#jHvF zZG0y_q>k#*`E}iF4aq;!#}CswQ`Jz@GZ7dnvR`m^wf_K2XuN|Mu1coSPTdli2U2`6 zP!K$(;0^ctTLD@bAT>^nsa`EwI`09~)K+>f!u9J!==l##{O z22jC&`&9)_-iLc(4JE84HNY2zVan#J%5%7BCxx0RqX^Knn=s@MM+6@H@-Y2$`A?41 zNfhEeP8|pV(1UCHsRMtl@jI>Qr%I|^(kF~0PQ%1awGu-MkM&yn;G7v=Rh!2hU1bT4 zjYO$5YbjH=0PVkPk#7FD%63C`k=tLQydgWZAbG_F1T@K2Lzu@U$O0zW$hE-((|cmO zQ7BOifprMxQ_ll%cOJMgQsSrfzu_lT#;c=Xl3wgk+jsY0v9rK%L% zF64g@x23Um0tn{SX@LiEN<{S;#ZOJHSw`~8vz1X8QMfJ`5_{MVN$rXKGt@^SmO}K3 z%TY1D;9T6>`R()=rS*uKC8w_0YjQd8GfWvcNBVLm94EX#X~3vF*gKb{!zOZ4>}GCZCt1LE0< zj582!2V-jkfpSEX<&{u)fFr_KG5)xP)HP==={lN}J`{-#n8&%YgM_jMv^Ar#O*5M$ z_X|GieAv|HEgr2@wCu`?51E?#pZDxOxB)WG^+_R-hm?ljWf$$~eemj1$s@wyfk!uC z+*;)S08B41m1*I9XOm&;>u=W^P4b;8m+lWuGVz;^G>5cQ>`s8lCf z$)qvkjsF0z(`-rHs8DlH3_`4o!ZFBQg8^<2*AsH82o{IQ`?Aa#nZD=y3*c+WDkVcP zFAQy{uB+?Z{$2k7o(raBOESiQNJEfHivfPy{{T!2tOX}vmMP32)k5cG)Y?G>Eqih9 zJ9=VXO$$`d1yPZ_poMN(nEwE4-v0P*Zvwrk;70J{2o^w2us(1;gqJ4 zBQCHEzQXLo&MOe&atf{&kTj5 znFNpmyQx(>*pFXaLdmjCA!d7ujWx5@fU@ zk}6|Lx^)d>&fxz587F?*eKz;6XEn1+8$-E!5}lpxx`NvFxED9=jPt8zl4<3Z za;;G*GCr-!-+w`j@IC7w?`#9;Ro4*=L)5CQv)5+XjMX(SX{u#u7_jGZZ*P78#HvWC zmP8d0c&iiZWhH=+jkg1y++&%n4zv*pW>{HdxhHbRup;|om8Q*#-<`I`rB^{ePITs59O#nCNNy!5c+|^xAOXGh z03EHl`q4Tzo(VJhDC=SQ(LGujAVKDE%rz*rx3ITtYF&GiPeIYtH1+Qb%}Y?!@kY9i zrBFe;6XswD=hL2Xo780jNaE~OtadxYbHc53c4blfa#J-$Ty*n6p#w>O3N&qyvET56 zV|$&kxjMyBnoC(6A2m@FZx@O$;q9cG?a3rq`U8)fgz>{o8wMtMMy9)I3u}f}1X|Vr zgZ0MQlxN-rCRvihBTG?BMy9UE#wynXOIvSK>Me{uyNSc%3ibrrY&lQO=x5AgmWE2Y zsG_QY6<(P&h@>h8q*6G)l-kD4d{kws>rR}`B9Ar9q|7O1r>CZ;@~-WyqL;s%HSS5V zxC$|$!Qy6F6;(wSiI>bK5us((;gISF{{TkEe&1|U`tF2F({(kq$qZr&W~tQ~0z{}! zDy{fsxV63Uk<$!=`f~72>g4SurNIEqa*U_q4IGY@NlTi?P|-ZH9YSvmmAn0W5xCoI zRpH6A?29+kQJ2-y2qY3z7|4+xJ6_1jNMOr*1-pJywyG&e6r?ePT}Ue8+<+I2_S+D$48i4j9vJFAYOBJINnV_Q zKLLLzu>n9;9;1Fq#+TArG_NF$n9UG{;IhD2F_yybF(Yk9VgT3!>xu_VPf=Z4Sye2P zJP=4c2@qZ@lG;JPDp$*X&2O$36z`C}fHXP2{+|?7=IOGvNivBcrA)?;#F5IWs!NgL zs)Ki5R{q$XAMC%INZMe~N}s%F_fodL-o)*1Y-jxe)fM&qOPSJC&g(}*33_-CpDSvy zEN|vE0^dV|xt(N&8FLC6ji@Gg>VZ&DupVv4V#Hei08c}YG1M?62E0EvsNa;4Qeu2j7xQw67Mu`#vO-_qW;7_4V~VLTZfW5XONoKvzR zK*s7=um-^MZb;vegV5$QbI~MeG-QnvB5Jt_AlwedmwcJRk}x!gBbu>LECE<9{&JL9O;bA(bX%o#8cD&3)<>Hx8nD=2evG9j->oqbieSs zy0Z)a0JYpKW(r)xD+^64!(Bl_(MKtig(ZAX4meeJ1PLY8bI1nV3~3S5$(%z|M^oX{ z2t;C8*Z`(gAG>f)_ws^3?}z%nij~Z@)U<*Krwuhk92I45JsZro2fc-{Po&MIrIH1x z1>6##6L7-!0Nb~JTzYKIqa>q99$~$N4*rp()^}T2shDIGVrZb2M4j7Jjms4%kFy2* zSGnHa_{_6Ul#FH#PdipYN>Y|7WPL6R676C9esXs|mg5@6WN0gpOvIzAtE)Ad$FaB| z+iyZKQtPgmNhn~Z%2pa#ZqrJQU>ZqSzT|VH6$97X8hszB$Id~bc}RJ4n|HzqS1wb+R>5z@)OH6F za{mAl8VtuR&0}wzjyOdiDh148tib;Orp$Ned@td88vN3xF&uKw^7Do=t-{6-@8}pa z1NOGq^kYGd#iwD%)c|&)rc?);EUkKdDq(*Rq-(G~8traLAg})KiMiB}%hJ)(!tXDF znx+vDZ&4uq(u3c~E=I$DY*w(!szUUW=3WotxpoTAbLuX<_um)a_>awCqax5(ztlV`J{vZ>lDTB`r|&+Tf;E zmX%9_1xve0D>u5?03Gdwv9}mtWmiGmQ*8_YX%9AsXqM~|g!}C%~^>s3976op^ zvGml}-?+Be%yYcXvaUsq?jwhIz%~oNINHZ^M*=xioDV=?Z75sd!NX$x%DEiev)TwZ)G=%Zx9o6{5}5Q!qwk32?!M zg70I%9>;tqCyq*du4y7!QfNUaQO1>W*5jKS91f_Gtj#Ra*~DR1M+;_Bcex(BW24?e zdntbc(K&N(nayK%f-^9sSX`|?mDnpn0l zQw@PAp`A-6+ueo8Ct+iQS=45dsk2&J2a)1q;CAo7b=#`(5VlT%UnwN%bTboB%%?X7p?osK9y zSJOf&S!-dYmY7qpifA-l&=Io+znBBD#p9)OdMPR-rfpPpE41{|KBd+Tn5pD{whQOk zbTv`{D%zTPhwj|itd`$Sl5B1P1bQ55#OCEgK=1pj1+A64^05q}wn*fTnXet2{YKWl z_x!OVJffwkr>H&*Mn)#mtYL!@_)WPs`u?~n*I5+QH7359QZaupM%b@n2X5n&fiyXi zR?{?csD^0#fH=0cwYD9vY++B1=-;ipg+aqXqN7&ONuNQNXDyt)Ik(Hyc$EYVaiy%6 zwV!QPBFEnbGb*}D4xg)fkt54UvAWeXL~0I3n_F$X*ZX2LH4#R#(p42`i)vWRb|uBP z7w7w9rXs4*vlfH^qUPa6xZk(eY-r2Yi&z-u5D{r14*RXVut#G^#h+w42qJ52vVHFQa3kG4DTJk(|*?f04;~0o_xAu zf~}=eqeO=3sCplKVmfG>DSRM?dL=dD?OCXEAuR3TN?gkJg?KH=wY_bB%WPTbDqUo> z)9G|j#Kz&Sw!M#G^yd_8vUs4C<%%?tV9F!Zc1btf`txgh;FTp7X;C})0y=4oh2%iR zpdbzQBI>&yIK#0gE+nw;+#VIUrB>R?n5uHQCkYi@L`)hu!rZlpu>rU|;+;`jSzANl zK@~(Xv#gBMfo+(NAYj0af%f|1eo0npqiD&FI;KJrSY=mLVQ_Z`+*`Tk*sk?#mH9k5 zywz295mTpy87c<1?;rZNweM~_W6|P=NN9>G!=GZ*y8OVj0oqApNVhK_@SKIWsJ7SM z{{YW?SF-vEWz8QmYUmnZtYM7Z*o)sv*xOO{zXsT#d@T0vDc6prx#3PJV0NjdQZacymZ-@eUqH^sX& zs%h^Q(lzWy#~ehta9rs!H;4Fb#>doee0wBHV_hztW*o|#QdC0BSsG1Ss5TZlh1IsQjquMv zOPNw<5>m-f4JxVdmRmD;%6C>E?lu-X8(#bGjW+`5y!Ca@sznByQZgtivMDKRsV0_3 zr$HNd(3N76ZKQ+vfZKmdV?gOz2y(g!YKo%K$chAIwT%|JQ~sMVZg;i4u}$8 z@yun8IOUReQ+M)xIQ^r=WN6J zr$*+7P*5{ehQ6RwK_p8r5ziWG)&U+vZ^TXZC$|`v4LaAeQYyyv3PQASfuuFBpxbL3 z^NR0C*2Z$VDQlv4t4fE2tG11oP#5$!u>f*6!7iUn+bhiL>(;OKg4USXBav;Ttzlp` z(Q6y~V#Z7)ytJQ}#Y0?=(y~=kK?#h+k+IaNCQ7u`!uW0vpFiO=VL8` zShm4HASnKL^j#OH$|etyv;ehFGbOqUTC4S5W4e*6fJf_xDczO^)44x{Uv6)YOrSdu z--SrOZ>A$8j~&2!kS-S6W7!&5?cFh0M!8e~w-*c+*7m^~HYNz76p z1oE=f>L|W(a<<@mVL5F>EG&hrQMT`YZSgvF1ZQBSW@;p?Gs&pwU9}Cb>M;%gS{;3t zowoMF*__PL*_y<**R_TC$5tmuH6S+tTn_siW1VdPC~o_x6e93?dpG)9zGa|!bh84 zty^Cnm-leo5u_cxaL@p|8w++L0_81Cy4*6@5@ZDaSQ{gG$v52KjX)60RNQ&}e=J9m z7GtRt5PwWVNKIQ7QSk#bizHmB>fxuWocIw;t7fEtFPM-8jlckRxIVb6QRWd*LulT4 zn7eC@z$)u|0B^X}$pZHntmPHdRF&~HTX>H=rpnyg{qOo=+?Kvf@>=mwVpq{@Zs-gLMdURnJItv#fJLp}`;1hpq z?TFcWOXJfd?2(BWX<;EccJv;X#9p1WaY~ZGrfoKB17+UF{{Vj2DIB!RMI)+ekgbDS z+8fw?4mJZ=(M%g3&*G{QN!?j!MB<%QD&&vmr6?|<#XuKqMCxj4YFVU`DW_d(5fFi- z{{ZEE#lQsaZ;JLsSy3%gGPHM%d^qASZAXD^`MDVOZJAG)R>lhXcP2L^kS)hP_)8*p zi>CPHOPx(lM($*iRY1xOgR@vM9l^!p;oQj`4MRGq@aEJL#IS3Dzt?PL*>+;FRmqpd ze-bylG=Pwx`*29O!PU)Z^7@KOMcNvm=6MTTM%!2bJ6gu}?~gmwI_@uu>|za$>dXHkn9@A#0xS_WvZu>?cKV!WP*ul~m(43P zNhHe*OB{||w}$4xYfH2d0_B(oUgk}|Wbva5@W-@q_LVS@Y zl)|n>>^~!Of;p{4233~SRJN$8ZX}&hE!b)Sg^zGZ+uI$@^3`0!D4K``T9khm%0oIK zB|*72*n#%Nw&X%kD`a>P@|h%>1GgOf zlUM^r>AaGOq=q*^aM7YM@86%#2+Zh%W>wT-g0m=PI_$(1-$nKoBv@b97EGcnvYsCv zqN*W8t)#s20I@d#NyR^@`m?0-iiju6b2#OcF;NiOu_16QPhJZgG~+fX-<4Tbi#xfm-paSOmHW@28U zglhX6YTC`~e%4`N5#;cNs24hgM>S)%)uH@JcrSK+| zAd54DAd;mYFsw$IVivlA=zZ_{VT|h7PH}0F0u55FrPoP$(!o;=Jkw0JsHhBqSOKL) z>~F@yf36#?sEMkmq=^*BWNm54xEpW5+@H%2bb!h;8obG>r--goIi^Vs>}~-h_PE?% z1$x6b>AsxGTREtqiK2)B8z$wL@B!n0TYh*sI?gOEV;t|rWPDKwU39rc8|q4mhSnM& z%M14Yxnr6)-yfJERSg+Ff)A`mUXZhRIM%2uD__W+jG= zD{u|B{{Y?xL>X)2`FP216H<-0=KlbeCFc2#S3>mZ6vtIeUMgK|9V|`2@4!Dpi1`tc zYL%#1?zIsXLPp<*Rq?NhosW>x=-v;f#aDYsA#o&SY2=Xp>3~pNoyZ#>*9ApEN>p6| zq_xJTzMa2ZN6aXRriqXlVG)#YI~D_C2W&z3e+@+MBUQ4s6&o^^BIUW*8}0?L$4wLA zGin-J&(T2C9j2AHDTC!HmZn_-R$CLnj2}_!h|yM;kWLla7@u}gYa9OnY$~?039|N{ z7bYUd!#B8YKs#~{;@;ScM^dt6%F!ya_=O$8J2*Bw4@^+T%7-a}Ryy?^m5s*1S!rv8 zRIyE=r17l4DHay(f6Ht}K+8i(T+oFt{{VO>*n(~v_Pkfm?zWk6q$Tc9R#Qaf}dT9Aa}<-nni@xy4(RyR8zrKnNwCe$O100CcA*lwih0s zixM+RX=-TFs+xT!pUlI<-b4o54*X&=xrN?0HbSdnzrsr!?br+L^~BmK?J`9r%A(tA z`P7@=Zgx0M;)q5$P;1_G%-*t@8NfsyVRp9rSo&WL#hJ=#C$wb7r@%J2?Q%!oY;swo zSE#8~EqO|XCz37)(BBa0D`AR@!~`{((sn4vbEtOo{IK@6*}_qE6=X__Q@f;!A}FO> z*4x=-t^;Gb-xRmNvJIFnO z*k1SE*prsY8HCDScpSuxR!gU2vYs!98Dz~`3=_a5Q50<98+IX$?mfoeY!-v2RQ6U{{WzXK)1c|N?97uE4C`rBXhS4vs6bx9CEZWRVaYTBB-|ecJFK3 z>4|8x(`50;DVc>;Vn4kmrTc0TZ01hmZ z)lySHBM{y{47_otD#efWx%}~)lQC#(Tgg{(;Rf|8j%AxtWgS{F`E)fFn@aZ7*VA#h z<7WLZQRz}xTB?q4@d0q)TTr(?-%L{T=^(4DmZ}jM@oHGvPm~3)+XQ+-t%OfbT(YAb zAn{{;v3$Vc8(!18sAL+8Q3}c`s;C{~jI%^llt|%p5q~ww^M1dmz--EznhIMSM&p|U&;GGe&t`KMfYDn^As1p)-+#EaEaU2NqLV!| zCKFXe+RPS<@T<1>+py-|_?JON8c$IpLPL{cZgjEQ*1y*cP>H+%#Iihu00RSc^taOc zVd{CS6`fKj$kZ%N_`cvYx+(^Lzf7i1krB7Iqt7QDI^&_;>uU)lGXWEjE^C3IeD%AY6@x5+kymtRjG;=teqq zwxY^5UG^v64!TsAdFjZR zSj)K=8+e4P9XIvh{+JNL7i+aOtLh-5V=s=B=!I7DErI0UgL@Cx0$#SFv7%=JD<-eU zbG5Xc{{TB5OirDaDkc-O2T%%8&eCynW8T-}5GWc!B}>&9Fltty&YyuAfN)+)kxWw)n&{{YKkruER)<{7IbXtGGa#jEin7ru~vIJdSgW|J?i z2D9cRDgd->$3geEbAYQJSC-~2QyZGN(#lMN;YnS=9Ncm*>x&S*tpuJ@C22M2n^&)u z5WNtXi|Tz=LGFEh{+O4Qx>8=9?9$6^QeMUVeuELKYu&0UX^TV>%*>Ho1GdNOz8lG@ z8g>$SnY4o&D{i~m=eOGoaPphk1Ai3+T8}jo%OH5faIBVAu)f<9VZS&2c<_~BtniB? z)66v`x6XCCak+xW_TFMFa+x7hM3Mki1vclR`#_HZ}HuU!O z$7x!fM7|}JxX>HS4%^uC+iWTA8cn7~PSmc0HySD0M`jHdh!w}-_P4I%5UTSy8Z#tF zjp7TB41zR^SYN+?&j9lZxh0?=qL~&i30lBdk#EcUVKgy(r6naP3`{{spO^JF_c*N_ z0j;#x$Vs4_thAFX%^58zC7kbIIJeyXn2ilY)YSrZi6kKTSDX4`M~y8!%QRAk`wJ1< zY(6|HhjtOfJmKyLKy^1B-kW-1&NL{XZs%l*nPrx6s!PVFUDdye!sh(r$vm;fZ6R{$ zrS-0@H{22Q{`g#wMw3YtaRTwTnEHKB>4qbji^Rl}_=BiBi{8TDm*s&JM##;Jw7BV1 z)Vz~Qu`h-IlRye=JLqG?B@Wvn{Lz_WR-_^Y}F6 zG_B?~025+=%kP6=B>^?c9Z@UQBvLynHkb0RW4P_f-wajBYRJTksxxBAZ{_cVLMEv& ztnvgdj=D!Wj^l3FZmgqLM0{0Qpj6fBcewfuj`+MAMwLS1MWb`es3>D_EH@UoAI}y~ zhUY1omai+WqJ`R74A8um8p-|(p7yrG6s*FfkPwJd*VrD%Y)qqyMal%lbc+T_Zfq{R z9sSPur;`S_wB1^>44Pkj(%5sXrj~rZN;ZL#2`)^Vvm;u;u1}`e5tPx(LsLx@wQb@g zrZN>&t4M&3NVo)mFX(s2ei~;L`Oa4=W-!YdKm==0{{V|s?QeaoZ-SMy(Y0bzO;BVg z!bE+89a|C)`mb@fwmh?g;B%mPTVkFBjoQ_GX9A-ytQ9oTK=S3xg;GD>2h_or*2MAe zdt#d`kxNj{0-0k4l}i)O+x?BZ;HOtq#{ExOBmqZ?KuaIQSMeKq-skUtnTT3!(ivhx zA(Uxi1;UVay}sX;H?Uz0ZlSfT%$ZA_@=bLm5U$Ez3#cG!h@asge=cwns3ih8;6x`x zv495~4Zi&1$z5X!0IjtBk8z5nVQC~*wTn!rbK6PA#wO=}0?wb{tTeN0q-dC^Qb1zc z8x7m-wkW?5`i5GHs4|Ece62LPWMpgjkNt-K0DM`qT*`*3lW z=5j36bm*)Lc$Z;q&CfU}V+F;<5p{}FqwuNe{5B<|QL#gCE$N80@H@dzQXDaMV9}H4 zcQ|&b9!X(^3T{a|^KbBC4rMz=84xnEph0uPUvfV`(-!0A(3I6eJBb?M)eXQreRum{ zq%)*}iZ#ha1eNkFwl@~!k%2HsBo}upumD&c{{X?yz9!{!#%SGHmN&U9*4&F8-(L79 z?xL+ol4^R0p;dU0q0^-RHn0Z#Y&QLHGC3q0JpXZ#YY4bGC0=qA1VbF z=YB^xgt7>KbxKxwEJq$xHn-P|0d;J+C<=UeByqcHC)(Uw>_I-5n?oFu&m3xGI#%I= z*c&P2eqV2<9f}2_VIeW<+T&K__uKh;V?yX3hdo7_D&`W?H6<8(c+)PMEv;ke_^_Gs zV}+&9G>wdOhL|l^ve?vAQa6NY+M*RRd3)Q;Kpn^ff2J3b^xk1sE2?LW=u)y<#tpTy z1KfKLTxr?YN*aS3IaWfDG-bL9t~0q!<9sjXy#Fhe>kOtBVOV`S4N_G7mM zdVO(9Iolw%8%%U=X2d3%o*3!G2_n2vK9?KvKbgR6$v~&5)frC{hI02ZT?Q0nPsawh2K^BGid#qzdV$ zNo5{{pMOht!_S*^Tn*AQNSEb`7F}y~T>#wKcel18Q#_enJu1l^>dDq)BhRGq^gr#3 zeqGag;zT%9q@c^!57Uo>x$d z8MN+w6^Jq9l=*n|S+_#;K6%v6s}(QG&?y?KCsG0@Hv-4sZhZzdte>YcJc%QY8H&@! zrcqTh6j?3!n*3O8$?wK28J=lLEg^#_m0+WVfcc1s5wWo#A>iAR4aXZ>6#SE>DQT%B zp1!%=Dk>V98mgJm)G^#7X?;4o>LA47dfN20tj*&PAD#UGcdGFh_>zbTHj zpsCCVT}csd2r(fTl{XspvE&1DY*?u(VqHl7EOEzcmm5vU^xvM?q+~f4O?3YNP|~Jc z7OrX1NMxvYGcaXRMy4BFTY+JF3t&%E{7*eQm`NQ)H_po}F|-j02B-~=vdjgnO@)UR zH^y_AC3s{2lAo(U)b)DnZmEkR%9k*&t2B^ALHTIo)h$c*iAC(U_3h3v{FgtMsQTSA zob8pNr-`d6D8ca|p$Y&DSB7)2zp1}%sdaUk?^$OR8J%2{R=Oj|=>lr-VqMOJAHo3w z{{U0D#JrlnPFYu87GTwEXjx;j?PPteu?0f|w!{o<$ABS--tRw>ta2Rpiu@~1_@hie zV&zReVPQPe)}w2&21W->ueedLW7@*~v6ANu?OS97qM=q6^*^rU?SuKJQNxx1(DBAm_hM4cMEw|#|f%F)2E=;5FnYxJzSAE5F0+izdl>f}b-?b_uktOHt&o70L4lrs>mv8YOeC-k{5zSVzI5APM}ddMPvT}k3G8)jaw(H%d7foN*duDsWeUV2+Y`8k{BCT0F}splG2HSyDljq5ls4Akl+@(;hFh7XJ?4fgwsuzlE6WvtYx)wP{eL`U zU3Hk%SA03Arixg+6wL}vr)wQITMqZs#GSX>d}>tHIZjWTOGR3#1r=>%nqGS*r;zTp zy^4}J=HEexU31WV8BdhMJe0zcCYc2}f!H%W_CN_budubYusHGM(Z^*wmm)4aO(q`Q^`w=P4T{vo#iQ^|+ zdO$IiwT{Zh-}=O0A^oG7)@2GOgCH`k6)%f+)S~jpHoFxMq$cBHe}@73n>C3er>Uoj z=xd&DFj)#o;j#t|U;_oxc0KM+Hk%QWKtT2U)@<`_q#c6MVQOmnS*vnd=_(;5_Q94g%0UgE@in~lf59qIhqAyp)BNU}p<&I8>D zH{5mvTNTfWO&r}tN7L~%3j{H=iz#++S(Snt`uSMfi?#sO^)6a+nNfhtW`|6E9XMM# zkXV%mb7H=>-`^f(-p=@tw1%Di6JA3}3u67LmgW#mlsij3I;dk3&!y?b&W0VWb+_ki zRl1+2Dl+;5T}eO7wv(ja&f|YDVX+pz*Epwi9ctxy%`b^1MNNKS`s!X*3g0XPX$3eJ zI!FNb#?{f4i&a=?DnETkR!m+IK*5`W2;dR1<8g!rNz-N#IN0?gkM(JhpBKtjS<^y# zns|j!MyQ1uQ8gP_+yl28@1*0^l=+-$W|Ap%(>IGWsz4=1=VRX8`1i%5sJcTiqH~z! zakTVvYaSlV=vQk3r0Pw<2K#Y{*=vl>j8IoZTsj3e^05SNLG>3S^}*#y?(%q!9$x@3Dosqwg?GUCFS1Kx^LjHo5mbu`JWgMU=*CD!e-6iYVfqGE8zz z9b4!@TZ@leU4~YM>V{FI_WuA~kuo87*<+DYR8l03DoGQ9$YRs1>fIS_>wBB~VBf=e zrKIZ!>r#TES>Zy^K%b3>Ww~o`s-chAV$Javr)yH8eEy0fQ$bu>cX8zu?AHV^936?c z+Q#@#N>al>*@k0PSqudr28G1NHfezeQjz$8T|>~=`(xUB+b6};({>W0iNay<-E-nc zPxTK_b#7qwN zTYd+xYJPjy+3sUJ>l!N6SImf>5|xnCrL+r!v15CicQ)r5Ep-Id9S=t|wJSDZR2Ayw zkb|++sTaJn5g9&f|g zkG}ZZlMb3(!%ixjWCYRS7wO!pgD;OW%B6UwikmQiG_qRbSYTI;h1Y@D?}5|wg3|S^ zV^Gw>l((2sX_%|)&{!ZG+ToOY_rW?zqNO%HQ36Tu^%m3K%m@dz{)iMPf^<5_!&i$t3d@M%pjVnm7 z02kW!+XZs0!kz1cxpWlO)Xk^FI?sz4waMMIljtIEa z;GPGr06tf}!0eh^8(IiQa_~z7+5S9O9qCB(S(XqW5cq_XO@->*~6hCdsm? zYH6f_vj}JL6#3C@tcx1~xHsRh!ZJ#X(cq*qPAVy#(d1Ty2_}s>+ScH()oV4e8?I>b z>b&nNtAd)KQ=oqxNd$Ry5pPe%2AkrmbeVy7p+{97%GuL>Se-$h)Ma%p)sRQ3o}NMn znRNp45I`y!LW_NG&JX2PiYEj=8N$cyGkSe21LAQ63!lnaa85$-XLbmSFjp21L+ zk4FChH+b0;IX6NDxzsPDbKkx$5@+=hR7sUpL?)7=BylAxfoTHWkxt{yaD8{TY*xv` zZn|dRjsF13INstctp_=tX=GbR5vHC%OoHI6TgcpQx8z`-N>#;qp`}ESX=aS2i-HIL z0B7(20FML$FML&UKBa>_>2sJQ1|t)Mbu2E8Zz$WjvHY;j6?Hycp2rk1tU{u-Ryfcf zDSzG<-@oF&vB#HxPLeY4?%n&RM)9Z+c~-uvrdpbavy7%=HF#g%NddBkQMqtzRPDCL z{9untb&Pd1@zLio#_Wgw;Xufw3jzl=`fr41Ib5$Z=DB=+IXlZn`*?~4j^f0fxW4@T zX*Kl;OVd(O);h)|2tfzKd$XzATKDIi9qHb=rJ;sM^O1T&xABzQK?1~! z@qNDI7Tr`Cpqop4ZR2>>6@;@a7wGvBkPm$3Y}=yj~xM zUyVs^hO6A0TZ`VERY4*vEbO2xHu)BWN$2$bg^Bk<8}rJ zm&5U+K(E1Vc|M;*jNz^lLxrDDU+`60F`6ly zqdnWrJim;t*1Vn}`PvG|i_VpMG2KYv0MoO3@FfA;SD00y% z#>n5o)&q-QeUGsm9FydFf`HOgq%umNtZG2g!r+iEw)W!`hp%LkK=HiRkb-PUzk46J z!Fm^(H8nAWO(M!z*tNX}emi31Jx3xr1KwBGL8Gc1xnRdEZ zWv!&Dfu%I+pS)rXt^wnXx4_Kk=G@-OTNxXw?qM8~RLc@iC2WyRQ3YnT2v=ft?ZF2~ zEH}Qx5GpAuT8h6chAPHofXf|4#AT(kI3m_NSloM_aAG{Fq}0b$`-?szQ;_cBrOs&)DJT!Atv0$|^lv48+Ay&W1ZOY%IZICO`%qLa=Ii^4=68VZMN8tOgGUPR((VzugvM=%QC1zmS?V$ z!1Dv8zw$no1CTMa_TbM4^xO#_d-SDL7q(5pzB|L3btYp%(LAzK6sdFwH3H}?Tf112 zPoMW-8n%d(L*fKW;FBDqy+eK!zvFC#A}O~$QJ}(k9<+Oldq$p>I}~|==kdC zs%y%m)pI_eR4D-#G6(|RYn}d>&!x;W8obHsC8>IuWg4WCcPv2nCl;`}L3s{vrqJh< z5@of3hVrIUg`-`_Ce~5kzTf5Wi=nfUB@AvzHzB=6{jl7%R~ko{Db&rso9XR_qjgAp zFE@ywu+j&X`1Oon0cALs8!2@}dG&;LZ}j)W6i|58GA6WE(YB$^{jt-hSZ3A_B$2g- z{k!4ps3UyXkl`hIT+X9#?I@yRfy@#d0_l11iMhMa%$v7lC5wRrR{{WT-KwLo!m}n@+ zNoEdIfHamPjCv&=BH4m~Hs=YN-V&nuY;AGLJn@Cauh}K2}GRgiE<6V0}2k9{SsR8}10eG*V)$<`u?#+Fcj$)Uu`8+CV!W>$VPb zM2K2?X;=r6==!)Xb7wupug)uQ!{cQVj}bg%e-Tq_vXQ?2+Z%mxFQg`^8Qd;`q@0Vc zt?mHd^ceZ>Q+!CBe643NXrQ#p9}Ik=O<4?e46SuHvs&RvKEF(Ix=M-|f|rd#nP{D2#o_N>`+}s;r*HBVZW`ih>SscK+)rvQn$+$+j z*l<5QPB&S|#bAm@SR-$Tb)M{I>KENWdiSam<{5wB%cVlPhSHKv&HaD`eNHSUvKgt` zx-|kOIt+_o70LW0_V(uZ5z~D&By`!06FY*`tmeRw_xvS&_uLLHF;{%2HKcg*$(p3C zOiMBm+67B5(M$dW+&C)d)yWY=TICzsJrm9v>M87pT;P#EfP_P7H7 z0Or^!B|^z2U0ef3u$BSX{{Y?vZp=N`YkH5SB~Wy=I4uN~bL&R%!}z1jbX^}#F4u3D8v5(B(k>$h#kBiDRnK4_+KH^2E#wvj`!xaQgA17;KvPvXl> zTLJNPmeDEP9Y{^JTm!ck#}hNBqKROol2eyYs0S~r!`OKk-+M5=DEYp0wNIAA8(pbc zq49~~uW-iw#rHnm_&=0X=2h8rt35hYBwCnCRB4?>gP|aE#^heutC5W2*1k{A>3lO&Miq&mi3P09+3D z#doq=XlbGj+@({1S6;8pD`w8}%+9J&6iU*Ny9{oKv9BzigrD>FU~|nzEWrPSJUbsJfe;^K* z&ZkzWgEJQQJ70b6inU%+x!+Rt6+=~2mzD*VoS3+g)n3H*0Qo`ZwlDO4t2R6ik5=Bb zxFFWws#6Gg^Ax(u*&is6F{gG$%VjGYY1D2T%dzctzW$h-@c#fi%weuotDaP6Ws!(t zRjvsDp7%Dm9DS{Voj;ak?b32BdPvo5+NX%I0#&fE2eS>m_umxyia9z{JC`r15*lgd zR-|=n@NCxlUfXxyzAA}Zlj2AHz?%O6U#f4F*52VTK&W%Kj@=RLv*vAabrBDuen3-{4Rvo7R1pIkg#>TN z1ABU(Tvd9)2G1cm!-%4-qR|~pWsas(vbR00y}d!-4C(Ci2_zdh5r0%z;1OhUq~+PI zcT6XVnAE$B%7sWV5X&P13f-@<3w1w2FdMJ>vTW9#k10^1nv@n&gxHqtW6gjA?Tb%Q zWy_oVBc+}Qtx=V;O3!AwjJA?E=Ipli9@xoAI&X4MdyTQHg4ptpi2ne@!bi*eY^*@m zyy`rKHizaVcAPAdh?4G9+R7|G!-0)7bsle3)0DYtOE`|XULs*%J4OK{TWgcS^|v^G z;JU$8kXKU63RFU?X$6!>sKrUKwf_JTjlP&aG$StRth#KwEoh{ssc)7M$`xH5ZUMJz zZ@)W?XLStrK64Rf?7H9K{!*uNUg{%+;GwC_vUsvM<`HJ}kTjIWL%XR!H0`hq0rjyT zTubO0=|@JqRRTt?%SlfLPbfeaNRH=n#DFdD&INUDY;uYJ0BFGxhB@e7I%fc^k;!n( z0X~El;C?H2z-+TK%zxwz%P@gtt*xk$O!G4MgsIvaaHZWH$}-r17RQbS{Ra4%)z$H2P*Y`DWXL{c)_HZP zEUL^m`dAQozA`M^J*Soko_g8MW5ya%@2nan5@ zF5B5b?`z)I^|myz&QuY-jWowykB_KKb}4U|EgPr0zbvI`GT32c@FaCBAk@M^{8#P| zlr4a_+W4{bgjsDKT~ySywRQTWHWM*67Q1OTJhjcv_agYfa#L4PR`a~AGgRs_M8EfJ zpNT={`h7Y2<51}wz{3R{JvBo3b4U;2;ZFg*8sHDh?UkDZ*h5x4gdgRhmM;u!Rr~ht zQ5{Tl;n^pQ2&axk(cmkAu_u$iZb91%8OC2ln#Dy)GQC8^G++=wLwjmB_B>w{ocdgf zs;a(|Gl`>QR}xf4q|0uRMAgMKZLSIz%{=R1pfdLw&0F2 z5oTt}$GFJhsBij$KB;XQyuoe{)Rc6&xXW}{$~;DvN7yI>x!-T52_r#JBYeJAWTthz zOe|xu;^X*EF)q8#BB-tT3Ro1)OmxdD0?s2M<+P7*E(ae>TYep9?MsuzRZ&qajSH*P zMh4yvpbfq4>+UgY1FUCaXqI0IWLyDEyRsy2dEk~kz*V5dOeU4xk%fK*s)4)(;FX|lN8npoLX zJIJ9GuA`e<)3yDEG%-5F84$J1aPxNf`X&g$b&{s#CYvnHp@vc-mZ%8exZrPg`fvH1 zTB@^bk0gm|9(bjwoo%8oJIbnUwU4RBPnz{bBIZ=|^$>~|NUp5zOxkX2K|Y)M9kDMi z>I}ZNyXB#)imT;x-GKmyJKO=WxEzj7F>^YeBOc)?K2ia$_wo35R$G&xP*;q{s~%d$ z@H|N=7gTCZtrO|so_Ds`1i770goq>tV3&4J{;Mb+fOq?1x0`j2RRl8B!4y(NQHYAf z9~3YJ+qTMB{Yb`lob_{M6wN`G)-08kZqc<-ZIUy%ML&gZOLOho*sT7s0C;XQZ+-8* ze0>)jhd9t$ME)vJ(L~E)0eLNBz5D+FY)#82@bd`ODVazc={7oT`tyoLLDv~fXw>zU zZ!;_iEn>k7FaUi;_dbIb^{H2>M3O+Mr^vyqIO6!;=>0+6LKCgJTsa@ONY$j;w@QgB zfW?E5EpFr7cHb3D$}#3x;|Up*qM&U-lpb&BZN?Aeb+Ob^s05P}X}(jF#f|pk3hBD|nwE*H6;8}Zzpv-^z`V-3N_^6SA{kMfNhr7eOZoAQmM}l? zq1B~Wv&fp3o-yMrp{D^|&Z4*Oy~jVU8_gw+Asz&VSF;CWwY@gSI;L4to&=|aN&CRT zV{zuhi zqNM$%U_gRj0I?dcbE@O%$ik~BDx_&5rkFjH-9f#L`yM{nuOSZsr8$7J%oNJH3YqGL zWR+2w{4X?7wZZH!>tTOGwg*p={wn_Pg$VKc(>| zXI({N*j#=i+qM4p!+=K1;_4+=(T*9mZ>ke3B~#HhFCdtokh?ol^wf(z6V%N<5v zPaCi@)a!K}z*D!l+~U_*>rqcmsuh`IR$T*Ty@++P%~p_%^xZP22hBAsA*pXZA` z0VztWq%jF}ApRZix3$T`CuK&$rGygTlK~<_I#2g)A#1u+xajog|Vk&+v==ab3h7Qv*+BC8O1>7L~PrFuq`Z z_=c=Tu)H;bsTQ!`d>;8BMH?`8493NK4*vk3I29=Qn&^BN31aHRZ@E%O^1`E#5^IER zj)wfG@?E3WOAbYVAOX%HR4I}KW|4?%6(x53@h(4_j-}v%B$8mn6KeuMzdzRzS!MoVh2%o$zJ{&=1UJwtvDb3yn@Vs709*y51}5G^fr4Mnw~~hf@IxxH+44+Z@sUH{YO%%Bxn)|T{XMBR~m)O5Jzhpow4UK zaf9-R3tlNI5o)=c8JYn+k%D8DpKj{F1NxictiU(yM=`jJtVrko0Fv1M0DMd#1ud$a zEJZ+LtAI}*t{~=*mx@X0-n>TannjMH0OO9v)+ZY5a1`G~oaWuqT|;Z5mArs7R~9$r zc=p96O8Dq#4Dz@w9K*@WFbaQNzsumJcc0K@*)NP_c?(CNEPb}N#QNhn&oe_?xr{>+ zvC>JgTaNzrAEq>MN0rLFgK&uE8MOJuN<~#=fH5&do7mfudy~Ea*QBu4i4B0%ZGLw4 z!m{^qKx?5c3QKKFH&ehi_rp1)&rvz3ne@q{amQ>~Ye+kAqh#aPv8zce!PY$}6mrDx z^urZXc#AuPy2#^lFJpW0h|JnYio}#q4bH^&#JXsSNvb4>utF>>4cL$^{IO$8Te=?V z9UBs)Sh&>6EH@VQ^#1^SOrVNM=8T{bt?ovzPkcrZcr>y!WVVT2B(dK74t|G!TpH;t zpEb^y)8&*>)lDOXSmGas$?QC8? zAN(PD6G9KvcOh00125aOI@)E+`e8gF6E?s&zcrG6P@3s&bmu4!v2VrDedsNNh> zuLQQi%G&I=vA!;O)=^WN(6xSDpQU=$O{+w6#SJSe55mcEqfLn+L1GE|NJPuzzIm}7%voKeMH*Y?{ajDSlizWW>9p5d5S?-m8q*~0yEN5v-mdUm{r71%I+>d3n(D%e?!hF zeM^=@Sw~I#xaM$Lv)ezIum}Ct~zr1^Gwe~u8Bfr;t zR3+%1o2#xlJhjsR^_$w~xcmC!Qt2OqC2Cf`sB09=SIq@Gl0Jq0pXncbTQl6pC-`}m zP<*8bm9q-efRaw8UD@56k`xWEwaE0xA^3o^b)(YI#I-q10Wnw1szhqQjYjslH!7=r zjmhH^m)2&HwHCnl?xH+sqds$GTrzC4D9UIGz|^o()14$C76;It-MQxhdgG`dgDtF( z)TB9WG$vYxUD{h6!j4E&Yk)WP#VBNTSxaWwmSHaa1+SdH3H=u2+pC zo8T`})@9JtP@Jl0)hHFzwP9j5V9w2Od26oLzuy?%J3L)CWm%F^1yv%lbwyir!$Fnh z^QVC9lyx<7g_)Mbi2{*j+ySsQ+Z5=HbyZC*1xTGh8k1^L?BHFZGSUv0JGTNjrTaf^SGeR z^ZdkR^P;s>k26%&%dv?`CC1wZZU=EflzF#mCP)PtsrnZD081WeS z*sZo=NfsTH9{4qxbrxlobji#Xj-M@=9qCyqV?h%!IvrRKz`%k)HXCiuGpEc_N|?n= zN<&!QYaK@X``?^v;p?5=BgY?_rI5o2)9R(s*GEfIuLQ&9WGvD?t0))TFQB(^zuOE$ zJ0B6?F6*G_B!O$+YkF>R+|C@nNTM*t(49r3jkg1kdEeI!)6i4Y*`b&~5qFT1pby1j zN9B!x@CB^;^-^+q7CNZi5dx8|{Jh)0(-Em_YK2?1DOgDZ#UO4#I=T8^9fq2!l?gIU zX%v8kZ*V=x{#c1dCxx9JmPuWSEujb&@3>om$rfDLZYppa|auGCDl#B+pkbyzfIOIw}Ogl@cgJZkzC0+aC7z#WeAUGucj%stw6E{3<)0#{U3pYQG8cJr&fo zuBKrF5vI(l1+R4k4cpZAx2`j4oaPtG<)O<|Q;7>pRWdPFmtX{Bo$NnSdt++o`pICW zsi2y5X Xyh@fwuFcY9>aSVeXstJZZTu2Nhg7(s@Gw)z9p*XUVK0~PGK!2EL0h! zarla?T=-yK@klm5yce@}I!654ILfQ*vpU)Hyw@=CCz_@)15U&$J;N6RdwEve4%lxZ zpq{%vr;t!bTk_K@{Ie-B%HWc*k-;R6KDXN!e~dKLr!VQ8#u|8#O$)24DyU!)9ZiL; zeQZ4d7WKoJ$gzuIXx-iZNF4Xb441G_`Z-p=JFM1_3Vgn%s(OPNB_ob+BWZ3;$Cw*- z_r*i2GV1KBJ&ELn;)bLTmGJtV57K4mn5em zqoAm!Sl*I0hGeH*7KyCH3y;OO;`A8aa|NbspEb|pp=c5{ys)%`Ou7ZflVrr#;vXZ z^}ZoweJPUC<F)e37(TArD^T^PL8CXGiffuA=q-h zb7FZvOe3ldK-u-2 zf_&dAqLNCau%4b2AglV^>=n2^gq^V0L3LcY1ksAOl4=Xt^&LhKd2gq!v32UonWL+R zGpB}{w<(@6u1I7uJ1vdIn|Xl;oBseTW#b0r!=^!GY^^Z1Sm-J~Rhh+6mPI|`kUrC| zARVrxcNe(+SdY{hZ8bzq?L+iXYE>LPKM<<$>9P4bfEwK7{m1=JS$ zcDDAv2m9cjStaJxO(V%0Ezv>0m$~1t-}1&B_>$qsT^XuW=(OoXJ{Rdvo6Bm6Ei14H z%c&VH*>A7GF_i6s_w{7l?j5`4a!8(R^6H+=hMl=XCw z!5t)&aVeF2z9ffJ6(?(vac}-d7A&@Jo6d4t*_a|7QYfFvV4#y4oq=L)vD)KqaY4+p z`rQ8jI?Tj0@GV4=tkmiNxhmqut-k&6r7QMrEiYVl3SrPRp0%S8LZA(p6 zBymYBq@aPd-IYlnM^=0p6uO%NRFq&y7d(yk++qHru9BDHAyj&bN-A}ZQ)u>E zi=$~5;{O0}4jZO}FR4mOda)gX=@P_*mR2Axs}Kp?+V>+)9qZZ($_(zbQ`MTZmVtCD z{{Y^!wM3bs$iFV;!YM&;ZE!XNPy*N4 zus5xu`TVY&*Qlqir-+)F0WJ$I>^%s*{+n_z-$R=Crxg`5`rtiK-1?6!JtvYXMjbkV>t_pl{CD7Sm@Yz@^R(F^dR&O>8|eNR@O3 zcc`69!#e5ESngS@Ne7=H^zD2}_)*dI9Z8#t+Q<2tQ0K&&M$=#oZl9u9gG1vxZksZT`*F?@iqdMi zDrKNlc$Sr_sc95^qWIETq8r3fOK4kqn+uJ*;qQplEtGXcsX&O|Ge-$&^zLMiHM3Y> za6;JZePxjDZ^xJaRzc`5{l1&uVwG9@d8hDCHMP3yN z0>;(`+YN?3ebl13iEm@F(2?4r1olZ8Z93}{HRunVDNCL&q;1H*r@kgrX7x0ck;ZjF zPY|-KZRR6u8}~f(fmE^~nU-0dB6rf#Ft>;9ZO9z^@s8-7YlR7oppjzB*a>$tV;wYy{2ba}n#0$aHFTD)G#V&9eWjb>+EI!P5qVOV8}?ia)* z1K)o8Tzo`D0 z0|QGG%`G(P8PZgfxgg`;MGSSg3klA3ss1HZ6>p1AS29S3>moS@*s)N2Kw z1+-eX4A-gpN{#i_)KbY&PIO32%>H{{%Bpuw{^uCS#SXV_rmK-@5J8pGxN3AeJfsiC zM{W&=+~Su}`?U#AE~Sxx07nMfdbxgZpZm=hbd!NX-|mf#FSZu_}gGT4m;p6k)~}#M!HpRU@zYaKvi|< zR84}5i?I5Bryho{V5wfoy*G`8w19Xm^xEC~W3EuJxzs@4bGK|RoqR=bz!^4RINSPr z;vuOj2#VzCAcgP#*f1+(JeA)RnHhm)j@Hx$7<|-4^038Y9?jwsx7XYYU>{^`jiR?IG>Z(?rbP;nq12#%7p5d4kO{Ev zb~d@gaim~tF_YYHa4_I3Qo_bYA$RTmUj}^w;%zk^o13-N0c(!Oz9YZ@F5>o5RDwHU z!qx`YJQlv=>5e-zX{$rB7QNG9&+0M6(waz>+{Q(hP#f>T?S~^PpewLKS5dzA#CB(P z4gv7?2iW`Dj4kEV3pgWjd=lzOVszO^Va0*A8xkv%dt4g@z7*tJP&#dLNbiQ~iY+*1 zWbp;9Vb8t+<86@y)4KfNLiR);wvl_BNSYX4Lgx28@rchAv4^ z_P!NH%3=qXLp?Z>8qXCO0km2*F!CQU9e@V@_$l!6oKf{swMr|-jAFZR3kzTEaCyO= zr=$_pWt~9q+BZQ06tHJ8s26X2BHQ-0@M4xoYpCjk)REB5MxsQMNI)5sY4H>bwaFXr zw&x!&pESNLhRz%O)`R8p-Eyjw8Bn5^Fw5Rlc@nKkKA-d!zvd6qV~)0Nk>*oFE33g4 z@PKTB*Vv8?$9zT!n`YU(*?lDesHlZBDtN-Ury-T54%TEd?%+!do?to0;4xrB&ePovqJ^Y zHjMTb+smnT9k;~>oL9fWZ*ThjQUQ#eA$FHMSfi?%rKIuHFo1`+EW+U2cD=a4ZkU~G zq7lxF%IY;nE;rj#dxK(qF-l6f{$NrF?@uMP>Nj}%ZRl<=Um*qbnR2ayCCSO?Z))+#g#dyr3S ze=KNyB~?M^HFC1k%^CTHQVB`zZAy0Xn}RWqT|=w0rj!vDDk|n$c#S+JRFcQUkIQ3gaeps=Pi$iJ zFX4Crs+2`eZBJC7c>y=yzQmoq&Npt8ifY`RsiCN$b(Wk&l^z)y?ZTUjn{03I-xd1H z8w8A)ZAC^<(BR;)$IZrJRKluJJbx&$0TBVodWmGFb({AS zsFZ4BbGcp3$78^@BGl5?2lM2%N0l?Ix2 zwc|$Es|)Te&(j-HJ{W_29aZuF01D%@F`-_1YFxUJY3L=EC5oaIc*Jd|TNJYfzi@py z`{NJIXrrO(3c5)q5=R8=7{}ZO?S65vbfdroRx!)8zG>vSIb^a^AnEwDEs`#%Oi?5Yq z_)AeqM@-UG#(#buF(REOPUms!zTfSOcUGaQ%MM~gLsyoZihOFI>Mf^CsixW=eZ0eNE$xi# z$ejG$Y#sjqpOQ?vjJqly#CrOS$3CY?qyk9kdmk)>^KVOoeZaBW+g}ag4LiS=1BNOB`^TORDPgYLP{P-@g|J+Z%63i1W^f zjxXLCn3a?|d3BKX|;U1$w0T&3$N1ISf~x0r&zOOMkV(PYPy3j=vQkErEaY>kzG4oZVbSv?kP zU8QEy_>9GPfLu$2-J2g}Go)27{yk;k?1oz(wtfu*CqHsgSG=yun zx6^xlajE3*S(@~HenSzFa~f!#IOi_9JX;IK+wWi-e^Y+g#Fs9rY{j9dmea6i0m(w; zZ*g|F7X2`uj?h}@o__)Rj>s`XNG&~;l8Z6<+GVS$ns}u#_&z;_*xT@1?R)cMY+n8z zRl!G=%GDD{Cy8}RLS2|`W#5yyBepXxlZa+{hwO@2!#zhV(kcZ5a=7aZqo=HTgA~&bGwEb2q?_C=g6=J0xE-;8>~^~# zFzycDT2vh!zJf86ym_dOX&GROMviS^EPPZ4X0bfocE9C`^m5SE)z6tyPR{Codl!gU zhg$+yeYPjPxW;FZXH{@zlYE6eB#jzGBW0K~Tx;_UM#ZcT*kT@8o5@W~I)KemDSTJc z3@oZQzL3Cv5HD|V+jqmC(qwUU8tgy9Z@ZoL;aPql=QMR0u1Dg?Vt?8Znve-X$eR{E zgkIYoEsYkRsFNm1v#R2Tg(4zQ;2lN32;YIn`D|f76Q&uDQ_$5P0<6~4B!j||!V{#2 zLPpy)*z?c6E*(_`R9_F^N?OE{0PqU48ksyu$TmBhkO*Bv+v6t9gCR8wV%oaJ<~K($i0j8#C;<9A#32b)`RJ+YM0 z*VDYwNi9J`C_gr{0?1e%M{#j&{c-dkQ{|baf77}CSq*e3)eN&!B!gIySBtUk_S)QU z^~cQha8ywuJ!LP3CPSwCY5<~K(^Nx{w@1+jZfi5V^2#`XlI&8l6OdC2th5y$hP`c#{BYl=Nh?_OM>4UAC~s@ z9~60!c|5(B(T66i$uha?p{=5M$P7hA^eFpsah_-WL)4GdUpDm+jF(CmW*ckewj4IZ z{#cFF-E*9@RlO5mNY7bNf#Gy(nG~Ir5x}tId*Z#FNd{%mRnyT!TGcQ}qB|3%rf(|^ zH?aXp-?h2NmX|+2F~Qj1Et?| z2D2;7XlsUY5lcErG^}?^ayIn(ZQB!ipR2}8O-~Flm#BEbjuS5W+p!kyZhuUA2Q?2g z1o@VfE|D#yL8tMh`LGwZ-k8R-SZgy3?dag~qNvi_yk;*H18@(y>`CuzH={JZLg)4s z^ivdN&$HQX9Wm5(Ij%`1N>s@ubsn!0G?0~h0?bA1Nwv+e8#3y4tf~{r&`Tm|Xp1RQ z0XHg0+izS$=;K;!k#;ho|lpXSlV+r*)%Jb!{}M3e{yrG!1&GWWC3&kFmi@ zZ0{t@TF_Jg+DTABQU|X5`h9VT8re*xn&{+%bQ*Z{{IO=}e8O1kk?X@6O09628E$}; zBFFA`x7WTsS5TMSam>ZnU6%vm8l``iEvOQ^(=;+f8(N!zZLUYZt@y;wmyW7*m&7Y7 zw2x(uKv)YN{{W^lT-sSOD%hi=uDmj?yT(qEp5W|u+XOO>u#$}S$*Kn?i*51IL*7v_` zRHFEgl2p~x(7im=)h?vU&NVDx3j)WRo<8FddZ($2^%Wf+RhZLB5=3U4FPxLuw$>Kg zgMT&m7sgLf>OSuSo(;LZliCkptmu;b=BTO?ra2u$GT3P$cT@Moh9N_;vdALxxCZ51 zi-1Sdd{BCCIHk=WILXqq!39>LhgrCHUoM{GOKv|aVb6wD`Gp>7n9*i+Vxnr59uvzY z^}haX_}mfeVmo8Zv)aj9{{WGdrmxh4>GJM^gKqmR2BHQD7~0wt9ajYZ0GGlpP&)-i z(x&}`dV)Q#id`pD=Fig&T{#t1*<(p8)XONY>N4-C$l zUsx&)h4l0Nu{SNJWtuq#pyEJTZ_jVbVSzmzn$KC1#aA;T&ZkA$wv^n0Qrw?&&G9{| zSt^R?13*xrxf_2xX!P!;&ZP~rVm2eVD$^uqDrZqwcp4D|j4x#*-sblHm~SeLl2@K) zUkXCr83yDVfp4X+fprydR!Syun$dzt?^+^fi)~w6eaD zVi>XV*q`Ny*}~OHyz^>63mY2~>Cb#=W5(vXiAtJAy}Ka!3^G*I)YgU?k#r;Ta8397 zTMkyn=~D7L-P6h=y@%WDj%AXHYA2c`X%=a&SPnL|{{Y(yrHQAWd8!;DgLRAxkO%QM zueZ}04nAUSQv#ZkQl2ihZ7Y4s?`!jG;$lV?6ArKzLU}&i3#1%g*5%nU5X#luU zYuEsHJ^cpP#Zt4V4sTmfnQX25f;>fy%SaB(&j4@Ri{iA|F|vc40yZ%2<$oPrMbl8i z>{h0uQzFEKT!Or@>^}M2EA!UMQ42ajZlxyDOy}`HM_^Q!R(al}p*5(l< zQvMjEVh`8W+@EU`hwEj^vgxR3s8`2FvjmMYTEiOYQe8BQZFA-zUfbdNABP#l)XfHEH60a; zHnx{rH=rPX9{#+KOkXNGpDxNW`eeF8R%DUI|CQ}szkkRJVG(fo`IY5|L zj`mgW>5A2NL()YXHAZn!;>5?q2}&)d!q&TO$?e+&8?2zHtf_{nZP+EBSB>_v&&wXrza-BremtbBrlpqr#`A^3lm=LsXFRdo7P zJ4P84vi|_9i-0|FUN46|JtSczY~B_UY6MiNx!eB$4mKE~WF1jemef<`u*)QM2{-Q8 zHk-DaFj44kZaacTG~A2gE=il#BFqvoFtJm!#`fWF_?M4PMKA)hg(*f~T0AtlNSSUj6 z+qq+Nv9+(Tc=JrYH%DB`CZ?T&Lm?okBwQ`|-(&Z|sM?)sA!eIQ(u+qPqC>DG>^*() z=4AGVsRA1#i60P~9W#KUEk0S7bpHT_B_!Ef)=CF%5a!KP&JdBb%OCu~`kk$nFZ+nfnzQ+%~WMa#HdT7iWn9OXzo$NG{JwX@W zxy0n@-kHzgT)L*Zs)tDt!5lS5!bV0U01pLNosQp-#q55*Wb(`_>$0^G5*lgUay-*0 z>8Y15ii70*c#UE_5s0*?y`IGCW2tvgEx*$hN=~qvyQb44&9aK80x>MLb&)HpSgQs_ zTWj){ANcp$_`Scw48B~&GmP%GO8S^0Fhe|uP{f^wl-!Ho^FFvATkz&;Ov*gUmZmvr zviRhZhK?BgJuKD)6LYH8x%If?z2AP+X`;S87|2MV#BbzMG3n$TsvElZQh4A2_b z1PQsa+re@F0K_ro_qgB;OizeiE0vjNY_cz%s&i91M+myAh5g|j$u4Yd-1=g>*Vzq3 zIi6`F(T9zpGc1)HMJ&TZGKDv@0jOA8(|lNZS0?GcqUhYeAkJitpEZUS5J?(rfe5&} z3+cHW`uiLUr)h95KRy2dHBo{?DQPuIqnc+~t98{)BsBr@>1Ar#GEbFUK9X?b#!T$ zqem)*jb#(qhG>ZvC3e&eu6Q@t;FnazB_&uhMIA&njSW;+Aox;;MbaCyX>wNfy_kAp zH(6Cx=HCr#YaS;`nnhtH*r_EX@;M^J-9X$DY}Ud&X{HSX&_1h4(KCIw8>k&enabH} zcqvm*q?*X1jRvC$bGatLy*{6oGH#*GD^`wpW2Ma03e9mNr-HG@2q;a~;@+3W%|VzI z%QC7AsuawsB%ykWx6CStjuu7;%jO%BSXdt}#~H801gWg*1Q=pBPp#7%<`EZ*QPhW@1UgEkNh(ZF;0uQ zA5L`AIppoaf4vsRrCNR>QZ{Xt{Qgs!B~=oLq-bMONn_)sT_@S5?fO~$cJE)y=X=Hk;_M~W)%xNlk zifk@y!o+W2FYAN(41GJ6WiZmzr3GDd@vTc5ksu5M1`+B9$Vj*({Z1n0{UuWr%QMqe zEMjI+8K?c~C?d?j4To!y&9>hHD{Ckut!j8-mI`>~@g3^hTd51Aivh4F^tZMwJhv!R zZZ+`Rgt#6fHsC(0^+ioYDIQ$faxxm3k*MdW0n!l4&24H)167x?HX!!GdS1Q$UR<2k zP)e}KUKgXV4tv~Ok=S0}TvK{usU^!JrlG16OOu!$3b^$LKp3@+xCZPke&d`%>3T}` zrX#>Y&p+F>9*{&=J2fi-3dSuz3MN?;RLcRpF$qia7d8LV>8*z3ka0&XH zWKAUb^;0Hol~IVO=?Is{aE+~`E4W?B7B;`Xt}SOUuIav;sH@9q%_oQqOkjw~3P{8T zy|-4;dlD_M-uTR(1~IIFZ2R?77;A|ZDOl(_8=^Bhc}!V!kkeE-F|y3Tm2`kN-rM_P zH8)G;nO0j@Sx28#WtAcmO!ajV31fmgkZz<6&*3&akU+y7C7e`@r{<-NMLCpek}y@3 zNVcmUM<9{D*sXO>QGC}^$98nk&m4O!|6+A8`tlAwcm^+!+6sakH5 zgc2f!-0A1cE)9=1?Tog+Foqn`qIH;0Ah`sv)E}Mw?`^&D^$guF7GU{)V_!a8Dx%j< z1n(n;E4eGC+nZj%?k#|MuSinOo+MeXOGlXO6)Gc%T>~AJi`w?JuX_=0{Nq**y!N@y ze0Qq2{{RXkfRF&;X8D&=!A+Q?i&y(bIv$^DYF8kQa>x|BUgW74z5T6=9cNHgWHq!j z^HU?`RkdK5q$QX}5de@n{{Ry=h{E?HQ1rxJtLW~Lp1ORxf{~K8f&gb~Sxj;3En^uZ zX(S7udu&bx$;-`9LF^&D9M4g`9S`ctjV*sVjM zvx8~z z2=^P?WgBgY&D3={4Kx`$XOh*Lne>U~kd}xQ+^ZD?dJm{OV*Q!dHC+`gM~I8#0~<>n z!n0}&9Ztnu6dRvhXL$0#FO83|^z}?HY>d)*3n1yZ%>_MN6!g;6NWwT|i6jN2R&rws zKZI@#{+^>622V(7GJ5)|i6e|jG;zqpXc83%Qy%)ihu-*!QPZ>&il&Y?q^qfG%c5@# zYh8mYe+k%Z+gKZHF$$WKFw5ondFd+ZT*w-tGz?3yyI+0z)P3%IVsd(t>ZaMXRD}$)HyAM6rL{W4(@`cT%se#Sm3uT)u(hmMKF>5>Fg1ttHt=(r!7hCvMikd9%r+nAc_!fg?#AL|j?B zC?0?eN9rX=a=2$&l!j>8l6F(UEJmd4K^Now@m+?Bm=>yQ)iEKhD7jVyfWy#{jX=Ya z&pFvG#`agrUZ9SWc+uPil2H&}5NR)C_P4$^uAQ!mqoE=dRT0w)aMbL{ zrFZop?~j?N=mgoEd6Nlbcw9ObVpUDQ)98OLalia0rFUBPsCJs3rX(6IbYx@AkD=S> zErgtCv7QS`w}?n~k=<7FoVK1elPIO4dP7}XaCu!kWv;NhPnh`Ca#BTBCK1{0EpQ1Vea~=zELpOiqOZ$o zmN}#On8O1ZCd7J;$DuoR#R9Qwa;(~lI&8jqY3k+EHDVA_CF}_vYu|ge+xp)Yx;Rnk zZ4*TtQ6bU3pe^`7r=A_2A;0o%D3MEe%yhTvnqjoNQF;FpVbS=gfYaZR=~{>Y=IySs?L{Sg2OgK)vsO zuKxc3rY$)|Wc0Nu6&2W+jip;M$VaN%ap-v##b)(9h~KU=vE{wC{ne8pknhT*{Fjf? zR8(|pddfeSsWCi*Sc>JCTn<9B52d@{Q*;#c*^IRiL+0@dQ#w?Eala&uh&J^bo$ZUv zu~5~`QfcF-qpxxs_g+;lx3K_j1)-{D0rSA#&RM^gBicf-uQLj_=(DwYb`R6K}6-(?2K&2jnTI;^V96{Mn+IjVP3 zs;hAtk*iNUoyqPjalU35R2ju2b4Ze_DuqcS^1MJ2KsMsUoyV>yIhReE9O9+bR-PFq zZ7#8GF=bosb{+ORjs0=xdOx&S*#xoMKhXaGH&ElOjVhxAo+Ug_6=Ov#ejKS7QUGy( zF(C7({=DytA6Fd4db)hiFM4W$W~X@~*;YekWng;-93M1@Nb4hV(#JKz>mamjr_8n>4{>5K3YL+gOukAglL>i+M1hdTO0%%=@3rh&>J9c6 z9_aC7adxr4=%kyacj$(ii04EqnFYw6K&r~_g2`?77Z>-oA$2`Ov~!9%G)YqoVl?oY z!ot@iAE>|3VrD^{(&m!Zg@&0RlCnrvMTvo#fmITc2P6&$Y-V2+bEKi_din|w^2+lB zb{jZVHqZ|^rH5q%%R59!A{df~X_dZ<#J8)lGd+jH%FdYo89 zRON+{Hobzf{6C;dIjA~z3-rMZf~&Td}!TK;w(}yPdufgeST#k zz=tN?ta;lM?7EH`r;?{El1QGODC3SfEIdnDOF7`&+Ysi=ockl2B;~HB^v6LD~y0Wby`FZG~qDBM#{~}+}v^o1@#PB+}fye*ePl0ByiGBV zR0&-MmXa`R82Yl4y}M$s(r{8`8AMcqZyQV9n`Ad9i+bR_e9)w#zMDxpbibd?ruF~> z-uL@s&E-e^XEC-%+R!oA%B_4QNdH0;#_Gt;znF6P@&yRhdIN z7{xG<`Ia%VwXNbWqk8`Us@wYGZ=!oZ%vSrpOKQ7>C)6f7>nNtpqLzRk0(qEtZ1!TL zAHsc)uWR3oVR?-OR#jZ|bxYwqauF)9I)*-iqRI0g`F&_4s*a|3p%KS1R$mnq0F3&F zk@gBf^zY6C^>#%Tbx5mU0fRDvHHc2u1dEPrY`_!swmyZ6ksQnpVX%T&&vl5ZtaFx~ zSjXXzG>!iN^@#9?X$T>_iU+aVbAy?!3*{M#Qpo|7MhJCbb$@Vgx^cMQ>1;zYQV3cm zql^b~bq-W|T;l5u>{1N`%xsK+%v$IRd*BNx)TAq4Oa`xsDB_AarHpKr3Q7&j7QL-&f_WQrhtiWR zhH%u;y<02X_#)^z+VvwjJ%%2{r>=5T#g_{$wkYu z*N2fJSRH2IC~xcbz8z|r76w*ujLUOw54QW*`(cU-MTC1TuafKrr;|jEu{m*l7gt2H1dQSO8em1|s6XSbF_A z?S<1xEczEwPzbm-3$f&S-v-9eP*Uoj_faYR(vf!9>bc|e!Y9(oBUDt3FDKL1{-^rk z%Euz9Sy(fLEN(shF%_hJ8x6~XcD~qX2yIBZp=B3hO}1O#*Xgz+)+{PyjyTGZCa!k3 zr_%^QBh@;z%Nf&RRc+gWZ~fqmVkVXuWmGK4R5?oxOeTi5gujqQdq! z=iAd0Tdq+aPYHCz7OSnJ4Y(t@{&@6FDFq%t`clO}u^ZUi+YZPiRxB6F08mN%$;5Lb z3ZlLqpmy7zd;@{BU?n=o3MsvTJ8jASn_-zPruMKrj@$a-zzIfR3tx2A>Q4UvelUr& zrBGEvU@XSN)0`V!>bjE)WRJ~#pKE$!wNMnMEu^V*4dxu%xWl9m4M}e;`0Z{@u!*KM zv$$PBZNs189+;AM*-Lp-1vsgJ9!?q|YjOxD0p!wL`H1>q$m%K`Ra#w_VROL4lSZuJ zw5hloh64%(!85v*Q=QROBrwQDR-56c9A zDY{M+Y47}2x7-Y6H7?5LMHga$!xM5=+wB&vVq>@o8v^tL^ff5NmK zj2t;y_E}ApzgkgdkjoE&EFcJi5Cnm?KHJ>=Mh10fO@I3JPc1DA_;qN^-Vz2=YwK@7 z*16lbz9Mw2+Ubn-U%E*UnB-Nxm^Fw4?fT&8&#UCjBA6DAIw=}q7NdC@!r-vt;GAS1 z8X1n0bO`?d3b8M1tS@CVX`!yjX?!y^EKHQs2G!zkd!Isot|N5)ZB1@tO<630NuDze zX5!}D>^ZO&^dkalB21sH;7WO=NNSlKMb4F10Pb6z%P(tb_rfZ(b*AfDgo)rZ-Z3gg zh0vXkx!~ca7@N>9P`~s3RA|+Ddxa0HI(TK?JykpsApM}hUrD%$(OGx&z5f6|Y(CkI zHB~(I%WQr*S=Te4? zLJO6%atQCqC)*VqlP-=J8#Sncf7$gDcy#qqk2N^EX}aFSkGKcd9qBr%sv3r;Ssp4@ zQnCU8T^2rKM}1p;ImM$SXsI%{L`IUDR#%r`#*^ZDY7!Ne{N8yfz6(CE-e z>`-{JUZBYY`K-bzlEzOQ5vZlq18ezC_8#XI&x{mR5cOMC%R?n9)x{h6hR*sFxd*=I zoNU=sE@9KvRLP-gA5upD0F0MqB!g?*Yze=od}p0)mDc8+Gc1*BP%HAaMm{3`ID3`) zUjG1ZYzI!ybF!{L2XDPn7Dxo4$KEvrNM(s;bLj zhvejfLbC;8Nnx>V`2PTWKhae2JgHQykt|FT%nKP9fp9Iys6Xv;zZEEDr_Cd;T3I#K z)0UaZBzegRb8c)e`D0!4hh>PLxFhpc9UwAkDsN9qHfNVmQ+Z*{(8!^UgUbsG*x$DH z2e3CBV&~VLGgn`eP)9Td85T8)p=7WRrrH$A+t42VybNU>In+%LhXkonC1}$W5=8o4 zMc9LXTaon`(K@H7XRGMgW}31{>glC0D#c_j#E-;pW8IIq_r^waGsl$~X2SmfU)g8m zM)u0m-IWV6=^WBEt(u=Iu8x+3-k~Hbsypy*HgG*{Y-!yUm{HU8>=e{qGp#IvriQ0? ziO5@%rogT2NBd%*OV-(rUbP8TSuIJra%xs{PZX5=u0@Eib7uj+yEXq^7QwqJpi2l<4uBe(-M{ zLAO3&K?h*>)OxT%JwwJ2mMlSmAh;rHxXm zF)FbP&q{BvZ)+2N{+Ae{{G~M(QWG#Y@=cJQki+V>{@~$EK*xVL?^m zQfe^IDhp_fSkO)Rzkg-G&xsU&vbutTXljsC)j%YTkvSS{7?5_j1W%Yx;@(($B0YLcnYS+TinS2Kc9!<@xSGU6|;lO5(B9Q%FXKkyQf7pj&HL5WEfj@rBWY z@#T&3@a{f$U(b@IjPV=TU)^RO4MY_AfvT)1w31#T=GRFDod~}M>-0Pxal25%6-Q4j z6>B9WZNNl~*o|A<4lGT!2Ebzj={k6#t!XEu`P4wmEjkZ6_6$97tn|Hl&(KWEQCBPw zP2p&3nGvsXzS|p{cDTmBv=JA$JRad)&IFsaGvU=Z$)39`%oZ=3@x-NN8nuR7>IZ$p zcL#nkpL}hOvHIvz)y@9^OqA;M(s*{XZcA@({D~LFk<=5xmS)s7lI7C5nOEl&&!lTR zDyYAqzZUO_JzE^P$4%5_@<$l0gD#VDg5hLj(k^$umi@LoV>1sd!%jfF>UFpe5PEx<>9D-!pcPQfLTZuBXeR_*9OD+;TcjG+Z=$| z9mf9vqA3oYE(;ifkk-V0QAE-})-f4E0-mFe;N7p>ZGo_~fy@?m1-!*^?ol`=daCx4Sbkha zwm&Sl@PHe#t^IdDQ^qzvgshJ>qd8l6L`Z@+Fx-YEEYH5mM3<%r}wQt9+*vRWqhcbr5aH;0D z#V6^q>b$o;r>T~RQOg@lu*m2_Ng|RIupBW3TWyZ3@ry2JQ&kU8QBl|A(PlJrp$yJ| zJQWYSGPhuC2L6~%Z$}*cLz7g_^(-o)NhPNf5RA!Ts1vc$yZuG3cD*mGdeW;XuWp`( zfn=tH{^D63wSY;pD+AAak8zAPG5N19qi;x#oQB}S7%+yy_^wl19|naPso$vZlNH+GRnh*tN}VaE0+ z)B%bu5oS#x31vQ84Z;5a1`G;_7L1nCqD8WhNinfECt<$)i||LLJswnECA9EXgsl$Q zAI+!C721nnxJ8y0NnACc9YP{lt366jSjU8Mngm^@;Qu+&6 zT#`HQxb((3l@6z*$z+!I(ddJkuf08u1>kv zT|D&A#~+3@UA%_jO`D(nV)@sxW@$@7PX#o!lffg)PZca>SHdF2LzAlN4Y)j?Oi?np zX(Q?=Y2=z<^^&fr*@IZ=3`r-Qz}S!18ht$L#c(^44*vkp`d1=4qQ2``&2mbbexNzX zk?Z2Di6V0uP((`@7aQ8e_tXdFhEb$w%MFfRN zZT2cg$9{eJ$F=I2?8?Uk5&+`%{(V)*m@87d^$i_OMpI2!EM{bc4MZK0Zft$^1K-o% z6&Z|CM3pee=!6zx&9d*Yxy9yt zT56RMNTHca0j+K>w(Ysbm$I3T9XZW+_LEAdhF>c=XL3hN7fdHrT0Cf2iBun;mF^o<*izDKH)&U#pao2!$nAjjLOk!6*9-m(^9JBrWp- z9~2Y2o0ZskK?c{quY5h$U1u!N)YE0sM;sq4w7Vz;lE5(J>`l)&sALkvl~mOgRT5Le z9FGwgByIa zGPe939>;IF#?8}}Co`p}qGUqStg1>72|6yF{{R)^-`tF4bx8aP1cQ#_iyswNEBbD+ z$8@fWiUCKKXB3R?CMDJul(R-j^EaFDua?_-;@j38Nk@=$MET`ZH0xVc6{+cEkbvd3 zHt%q^Hy(o-PDN9i*L8?c=7%kcF{$K?pwhjD+YQL?Y%%fUs$$QVF3K|Yr(}txWt2&E zJLu73F29FjK;&V)DbqokS_!8P-MuXgEj~V8*Fc3zQ+_#gt_Zb$TE8OXlEXBRxqvz1IVNJ z#?5{^`ixnsGmO768OMzz&HJ-gN>MCTqf@5C_-qLlCjM^tpzNHSIi`pUYwG_1%3Pqf zLt#nH^QhwMdVN(17GDd=Ni>c$_;N5(7?b=U*l%t1axrhO`EoRxW@aOBNhJH<)4o1w z&$@!DJe~?V8Oj>DOVk-iNkd-RTwj54zSjfT<6OwI@t)8|l^Ut$h_B1Z^92Nw^2%-e zBEz5Sk6VY3wAi(t_Vpa?>wGcQ z-9;52O+I0k(xT{$ULsGGi)q|)N3Q!HY-asw)G3)}^%-2#iCtk(!8x#l9+uwus zzAl+_Q05sGc3nX7$kW7OK`0|b7XA`@Z?Qep;azX9%?3ko}wtJDa36fPIqM{#4Wf5fduxx55>{bNi9^F zqb!kS@~EYiXDEU<0o9aS&1?FN?|f4_t31u=^D1oSG>)2isdUL_(!qiAF2?(T{6JpV z&^kvt8HY`LzHs7ssv`){$ToP|)@3K3DI0b_q9@JH#fVDMD1bgy$x1A74JXkB>&;nh z8OvItRCubqbx#XQOoadd_8@5%x2e7n@WLpn^9@fVhLvKppq(C4ceh}EyJFMv6C#GU zrQv!tclkBf8jwqf&BKCwfIvKU#UrKjwS%i*bhFXSMIi`^H_#Q9$APxT7vkz?C!@L1 z{yo9@`u##c1NZEC`*2{CL^4}9>Vj_`+ zwZ_}4epvN>Gy-1-hgJP8GlbMNtd#8mC5i$-BK~h&Ny)qhKQU3`E!ybu5DGZ;zdQOL zOdt4H7F|(SQ$do%jntu^CQMcjFyDUv02Lt9sb6yXD*m9L6VOLaw6xD^M)4R+8DGTudAZn;?YFKj zIYZ_-Y*h96leJXzQON%QyO5HlkgI|3V|yL^!1Kma(iw$qHEPztJQ{>?;sR`Rv9}zO zE>CM%<3Nir$m{b-ylPpX70{|xGMy$EDO;V0wOO^b2e$hP%Sb z1!RymnwZvDDQZ}TbuDHKb9Nww@}2B`@uWpH9R^M+YAMtuM5<4Qd1oM8l7A6xyK#zS z8B95~3|UrmvD8pNifQMHprnFEzPC_#BWqvO`{2fBO;|cja{Q(xtEy<0Hj<&VYhAau z0g8-yOtXsO8pGXm4H3A!6{qypbhUKxW%U(67eJ8J3mabEQa?+c4jRw;q+}Hf9aT7( ztjQfxtJ~#}+<5E=B&paRt|-|8jGrh}sVOn0MlZFDiUHYy;jM9R=Yw4^@%4^o)N{j8 z2Z5KQ`F>(kQJOYjStKM8=qz{qR^;HYalBJ^ z2t3@AaqPz#e_qiqPW5!Zw?f4=OomSr<~1yc%vE%bLWS+x*525?g>P}OYqI8lhht=p zoz5i6>t8ylrpun9Xbb{5>6u(Upj%3@xbAlC&i2LIr}HWw$|r$C%iz^3G%q1- z%wZT6DcaZNah7$aS(>c$b##>#6$wpB@kGCfi#QsC4`x&A$F3a6v%JG6>3I}X6?j_B z9Ln0<++8;}Bp%1L`(sJ?MtDS#I9b}g6$l(hme#774NX(D8DhMY3t$pzbq?WyJ|&MU zxmzyR9gYW8bd^0rNfjfQ-d%nfB=|ts-^$zDUhfqf$En4xJsiq9&4wCxDm39ORT-bNq<2BLb;|9NQPwcD)#!V`I zThm#Kbj5x{RhEfrXO)@?h-40-*xd>4R^S`&_>VTmZIn^PQJNgSwxCljJ4)pWsAZ6B zz>+R30oxx!)7Mc|<_jGWNUC9I+GvPfqbsO@Z)P2~;NrW~xeR%~T7K1!DWj%|qERgI zNCeUoato^sJC94T2H4%f>ThdaAIbcRiSYmy(`vWyW`(9TnV4kxeFR5To2&qaMP2<1 zh9G~Y_yZ14p5=LddJ))E&{Zpn+EjKEh3PmQglKO#~E~ZlqX$he{xG za@=>^ZRk!cbga_GOT{b_LgC$QaKMY*PkZhyf^Sf8dx>p>Uy?TB0?^x~gM2Vq>m`1r z&NC;TSzvhSqY|`wfwC(Hy{x{5{NHP1-Eo$5=120GlyFoT>tqq6br#}Fvo%4c3PPr~2Esnxdp6zn;|tAl5!D$K)ET7FG$v6cERZt^ z6oYM6Ygw)j(+M3z`u-)54%O%sGaS(iHS0{%B#SVUrqe4)5~ihghUoek%K|_aIzia; zzkE#UnKF#Fj)tC&o(RCG`A?T{`r;%2SP;W;vj$*C7rysns{S5+!L6pvvYOhOo3MGQ z%UVNb8|*GY_8WJ_N38PP-Krq)o~nDVijkw4JjIC@ax5*dBL4ux#x!Ge5;>YA*mHiW zyoK!~5xNl#dp28{QOg@eBvl?fjt`x{AxeUKcRcWMaFeZ1{D)JQLp+h@8KE)g7AxUu zQd-~*+Q)xSt^{NqFH@OHl$nIZR7A+}_*bwOeJgG6azB?CcPHqK@}PyFq@JdOTFPHi zMX>W&wavSLqUPfkWjM0C&PJx2NNA9572~0)q^aqcrFw%n5Xk~XOm8Eyl1|OpK^G-< z^f=FIGVZFRshX!V`PiVp@1=h_v}$&x*Q-jg=XGpgLK7N^Q72xXCyKM~~B z8jVhNRAMyWlfDMS(cMz@CpE9kX=*8Arxbw-nMw^ofM69y`}+6a7?I}1j`sjt=G=q( zc3mSL0BG#9+V|w>kkH3?4?;$1Mi4c;K2}|N{-1FM_ z^f>Xt#xxPR?m|=DsmM-E3Cwdk%BtMfu3<|fR7#*}N74bkj{|FMZGgtHnP-wvWmKpo zX_Q8?!ph{`h&r9F1;GTH4axdqt&=SlQPR~Jja6kj#Z?KUjb=j4CH7`Or*PI)!-AWmS{MSrF>e=00tL*bj5YG~B}e5q=S}xAcyALzc!Pb!MZ?9GR9! zX%6PkB5JuJ``gy`^u@a?sHCgaMA?(I9IN9YM%K}QJf{AIcfY8&VljthxphFU&`H;< zG-4(y06Xd2Y}VUv&lb$dGg;|rsw1R^T+*1CBYJwqh(;BxHGixPT!MKXxXsDLgu3l; zex22qsOqyEzOJg7s^oQ@^t^}4C63-wJ83sJw%qZ65Sog$`ADhSSsApV#sDr!*Z_9L z_J(nv(yb+AN=b!?n#$^|M*t1f?oQxao$*tTEc3Jw)TA>D1(2o4vHVsz%$7LX=AKkZ zW}LFD$M(iym2!((u#kUZDW#a8@ZhlcwO4 zaDO~%WX)hYJ^}*ja+%WEYf{q2j$@Llnlg1E0b1meH@&P5*T#wPrn(3-jJk%RswHTu zB&U%E{xOuDBHp@&=e4hl_b1IMGR*FLvc9$)>;9TWEd#UyGTU2Gxnr@~!q@i1+WDz+ z-lwT)CXCh~wLMgbSjG;JrGO)HmKWQb<1$F4bN4?Gt;FEUa{5N1g=fnrqnpH>JB9H> zX=`s|e#9I8SjIZkWkPX+@HM;+j6%E!YbS`rj9RgX;=>{{W;ywqlQ8My3ja zyp#McM>~#wxXpe)!7gBnoc_|&Pe4R2YTZlsVXI&ThU3!~ya!}cIJJIx8tC-| z3p326%H)c&OxjGko-t+$O0&p+2q$r;+Q;pPG&!zopG-3hvbQXzhByBJtD&Z0BCx%~ zsr~{;I~xy7RX^sa#3@mK4WupOX{OPs{cL-2efPzAGpx@m%x27T{K8>U?Wnzj>*nKq zi5;-``cumbcD~CbyLGYD^>qb4Vxp>{;c%vCsTwe*VYmT}{I@qCa6ku)5XiIoO4(&x zrgjer5=e$3x<&1K@V7njljRxZUSkbJ<0hf4s)+>Zj~eQjgXSaDfqM^r__9*<&00h# zT&ywH#vzs%<5)IINam;} zLXH(wF*YO{-u5><;zvwpD%ABEW`9vZQ4Y7JrexI13D68k3thCZJNLcqY-GEq37Kv; zUH<^uV=`GG1njj8t1_aJrOLEG7Gb4aSP^TKZpYLcgNO6{xK9+7a3FZvJxU!4C+BWG z_qVCWbC^+8^zD5q%xYwcDtA5?g%67bLi;ieLts3_a4bMLv}IjYRY>s0?<8=^5tutj z9u@rTZNDIWahZ{hV<0P(@F8QCtEUIkwI2t-wk`UUDj2p#rKo++a7ueYE z-q^pT4quo?1Qvp+ky#XwQbjx59yc5NV`>ho)Nx240uKQ9`4lZ4A=1*ZET=E7s>&w$ zdX_;=1Hy@^fk_Apc0Qhfjfp(%i5V-^(M1()TDMG!wCnwlST7U~h6izAZP}$X{%dBWJQQK-i7dcOzJG zOrly^nyC_|m72Nf3?@G;j>hUiBVttFi!Ld-mOy3eJlejdYKHyv(m~}KiM{m;?8-*2 z4%Y`7}>0!%Zox+uAm;}m&4AeSv|66%$vRq|p*lH(x(P{=nh-Xb0Sj^fu{(}82ipOc zEzM)5t5&9{GnpMcu7hRVk>2Be2W(vP*?M}Ci^8HJnPH~AOeJk1NC*xH8Iv#<{0DV19Vm#)tHBDlXHB;9-xX?1z}4oERMe32EDaf7 z;v&NP`tgbRGesU~YapeTmXb1(EP=@yt!oxO#ET2@_rYXEsiZraRf)Bt)I&#GFrHUu zXzXLVl?8#@VaeOR1$ACw9Rfu?LbQ&l;k<1iLRbz!JNxV~2z6A4xYZjg)0BjLBC!02;qs%FD z7}6*iK58uhX?3w+#DY%5Y%R_Y2acjel&UPE%?mpg+T>h~t~j;9?|>Ok%~hpAtF7?F z=(56*gChk5i&z0;uomBpIglKOD=vvNu~c}Zu$W$3dhf-_J7F`zHw_j?8zH&~odj9c zB3D&R`Et`sBFRvYi4LtBmJH41I}R=_i(J|IEjP|n!qpWF8%Tg^Yl{=G+}i&DU(XbL z_NtZ{Vv4SwmQy3>hET+@OKx@+w)`AZvs~JyilRv=b1@=F8Dj#?;oo9ZZT{>!Firw#J5cncVFX(K<0 zt-q3 zDXA*7O{Lu2YLD=eKM*7RN_ochpJee>?k94l20#_co7@}RSd(Bz*v#XpsFO5U=_x6N zDyuatGSlji>Dhx8VZHCkxVOGG$Czw|z*?%rlvz)KK4nU38lonW2zLq^`aysEdE?U% zD{AZH{{XczMF3qs97+&a`wrip4)skk)aD7A*Ao$_xQ1x$BCegZ6$i*|ZH4*3FA13p zh*7sYUvLMuByGYHhseSr7!N(IbNXPPPCBJbj&6w*E;WEol0|{{^!)J#@KmA@ma!{; z?lCr$r9M$4bn>sw%-UHr?$L5Ip4;>E!-XA+g!1O>lfodTjyTpJl3#sn0R_n56Yc4P z6kyg-Fyo-0=d_751S58TR=^#c=9ryR#bH(uugSff?AS%Fo_5t7S(dc5^JK4 zC;51UKt`bgsMrhdzpprJH$!!@7!qjYX;_U#NFv|U*9br&R70^B)Ni;u?T4o_G_0is zgKiLSU^e@2h7kiimjK$tci!BeelWvIRH{@&fJ{IwAquMFu8V}3L{KDk0D=Di#=_tqTvRJvOr$oJE&&_tdAIrPi&(0ol9l0wyv%jHfp;gjHq~xF z^@{4!G?R+9k`ScsE=|2hzW5fpkpO~;nI$7gX0hk^eZM`h%ikwJG>_f@Y&8?GzprvJ4?6Inb*73dXls@o$@Tp(;UX(TOTEB$15L*p-}B!LI~(1t zfAjqNVo-fb_ZCvRNWY=J8H@Lm24F(9)cbF5%L_J$E=uKM41AX-z4jl=5o(COq%Clu zoBeS*t#rp@d#`^{{@6sYvC{5!UctNS!GW@nR0w67D=dVSCqPyhlErDHNd!s@3mcn{ zOW_p(A5VleMh>HXKA3)*mRXe&H73UDS8MHodC(~q$%=Y!7OTPV*~zmFBeBJwE$MSD zHo2P2SlC+oVn$GuR8uN5j~!#y&Y;@;fc5&}>E5BFyiB2g{h>EFL3)DXcvxi2T@VM{ z?WfZcGW3>dK3W^oj@krTpeARE z)_2(KcJ{&CjIt|E0p<}_Vz4}kGC8_sHJrqZ`Vav4pw zHYD5EW41idozhC?n(jw#7JHqjkeAeH4AE0oy;zO%^t;Oqq&gkNm;V5j^&f5VTIot! zO8%**tItrqG_!yrDdDWF*Yw~6{D|8YEXOZ~KANngHEZKa(p0*j(Wn9}2s~d&^|5RL zsH&P=vRZ7$jpJme28vif3oY!xosOpCa6#mrFzj98En)aydiZ@*!cLMFnbOp>P|;>1 zES93Gq*OhW!(%jP1>!;eu6G;TZ%kz!MHA3xX$c`!m^AUYymuz!Z>Qhyi?>46OftGx zqL!ppRZcv?gLq^O$Q=G2ZaDS8?~V{f4r57~Q!Hq;N5#~sbTWaaKpW6$UA^&B0mdxX zM(y=}$RRpsqJ+Uw95s|vNvfJAX8a>?4fPT`b9)}xx^$jP6vr^FqmfL@rD7J-;vrs0 z@4c<{#!{7%%M(&Y$k53qq8qb%f_ra`7p1D}a*VP%+18Xal?Ec<`ISIZbvL!H1^e%d z9ZDCrFDcyqebc8717uewt$eshX3J)Va>6+!iZ=-CHn0bSZb&x2wi)=d24N7P&8X@} z$eKo`twnDWLlb8#JDU-)+*=ZQ#!A!FiiKj{+c4(jAKIcGI~hy@%(unppQX zR-Mfdcut>sa9LJX^>p)8%TG#c6e}Y*Qf#|@$LWhLK50Ri0anWIW$Su8XyCgp~!Z_T@%?~RF} z68XPBqO$n)(~&y$f`)pSDiNvSlUq}en#&8^Uwe*rJ-zTMuDMMVG*MGU8=-AeC_W^c z+-lz2eFi1P*%M0Ayt@r2G8dp#CgjG2`MRsj8)KpSvffAYkWSNE7ja!nS1{{zzbG|Yv zKCI5@>U?S{ua^xP#?i(Gh5%SycqbgA&NC@1qLFh`LnKUmEhM7GNFbXIFYS!{zL+Py zO#{7-e??wwV2j!N`Tt@Tc{z)-poaT7q#(c zicHeKrs?Zsrf9QDNj_4YAyQgJH!O^!@DbaK@9T=$xa@pPy{nD>$N9oU>;;YWMRF<_ zVa#gscZp2X#pB4zu0)<)N)<=pBe?Y25i`t_Kk6ve=_n?pl6r#CiDmG=bQCVyj}|A> zo(?5d^(_Rs!x&n6dZnh031gNfP+fKmTI7q5L3{dhk98$Ae1duFbLkS4MrMFRyP;J8 z++Y1f-+SA9P-CWSq32?KZ14Q9qTpNzCuN!E`DA%ke^-?&mGEWoi!tWh`yKYiiILM( zbp1s=W={2Ws~fu1)2u|!j0fXY+*q#n7w_2N&auiVrsznkD<_Os(lC?7Z{8Lx4b$8) z(!%^);&xY-qVc8MuQ)b2}3pB%5i|dx5KO*4D+GoYu_)OSl#e)(^+zrfEct z9-Y-uI)bOEx|T>MtbDN`jf`Fx@_35ZEcdmE8x!m>OX4PXOnOTiOFf&M}nfNrVP>RXtTL zMAWmG>DmaaJTY)dKI8*ycjp&9(i1dgpWEB{%7X-Mm4&^KyoW8!Dm7N+(iV7$4v{$V zR9fYN@>bm27w(alF{5|M=nz&(IPrCc(iH)|_w+pbVx5y#w@T)pHA>VOmx~S2t*9ma zyD;2a7m9k!$Eu~v4LEA4AZGcBV<2A*`SRFYsUDkSx{-6g5E?y7Zb5N8Y_3&8Dy)k# zn>mr`-jP~q))>Tu3);%W@=d;i{9<-WBg{%v8nvsHX|)%BCbeOyQHOEmwZ{N{WI8+L zrmB37x`sIGyi+YiY*dRC1Xy}~{V+Q!q^^MGkWWQTf0`*0$2FWI6S=Uq;kFmQ*ki=H zU&O(&8;&?WpZ2mf0c!-!C#$3CIlwY4O+2PF(-}k0BpZ{ruH<7<>8#JFJPEUz%>Dx^ z+E$TK<%vg|Lf9QUZ*D-vQ{&cKPnUK70EsqooF2 zN0L+KlSL$PB-IRpGrr)4JP~1j-TPzJXCHaQib&W9bzSX2U&&~a7LePuPwPzUCeHff zFq(>@PY!nqlaO?^yNjEFeZHNscnee7rk0+}>{zjk?{x%OhSvL>X&pPA z{M;}_J!gt!rWGcARw6*7S~nK4y@#MUq5N;9&N7M_tMaF2%j+tnTBnQ=;M+q4xIR^4 z*SDzejNX*@42Hob&J{I+BAkqn4(+K|ocebemP@lwUyDZg}r* zaC52hET1{c>N97{S_-HtmNO+kh{;gx<|tI$fJ1pm1B-j&C&FHvZlMb{Wm8T>Q9MyA zt=c_SWq)!RfgacNwl5{KSn4LqGt9cGVJ@9jCH1VTHwVkT!5bcJwXvt2l-ROQglWT? zHMRbK6zSY!lgZC@koEpSA5ZlSDWYVjrK}z*ERE%e-*j!su=n1_0V1iUEblaF=R+FD z5z?!%0l!W=<73ToYK-5as#B;k#EmFvym|={jAK!--q+{KKBnBAvC8^t=+sXlM+%sd zD_c#*fyh0`5R8?N{F zwl%JVppP$(T)G&{)iZ>>T^&H0l2=o2GL8+22eI3}F&Z{il>_Qvq!!XUdwP9wqtMc2 zSv?IlZY7yvK7;lHJZ;QQj=&~+Ky$vMu7M?1M_+^P~~*emV$lnb9sM(RoY zPK|;T6csC6Nbu?*7mI5R*MBJ_f_XgKxZaq{QL^gFSIdc5SHrH7IrUjbE}^Vdb^_z_ z_42QGjfNWGxZ3^~@mbnLk!d}bJ}k%8ab-DlS#3mpGFQE&;h!Q=z)&NS@HsN~A(C6g}BQ{`g@6w9k+DG=6#FuL1o zTfg_lT(Hnn=Mc!TNRk&u5WM$SR^)13^p9KaKAZX;jS*%!W7<9h4fo%F$zI21mT4pE zx1Wb~@aGv)R!~A|=5{K`MV+Ekq)08gn-Q?vZ%i*RrlY3Js;Z`nN(16vndGTxyhqi$ z1>uOdBep6301WdgSvr)`$(bru1hf>;F11j)irDO-Pyy;q$-daRbtJUVR@45~RY58$ zv0F5D_0mjYS~? z#9N`cxUti9<8gDo_yy8l9W7-fbxcU}Fpd?uMNn9~_tUlgO|W<4B}7&AG?GOOo;@sb zH9|Vs<1D}^BXN5R+;fPX71TNXJaNJ)o}!FzAy}8hc=)g^4{ysJhBr)b8Lx9)&3ppU ziu@{8N<8mYZSpyN9Zd385F>32sKrJ3?l(Vi^~QVgkrqCw@S}sni{<0-V_Rvxt{GTd zT!VWKFW(v!9&uZks+wG&tZW#HT8f5MDxc^!0_OYzZ*DOcP4Be782D zsd;1Y!=!}E9<=rhJAy#K((O`+wooEn2#Pm5-v0of^TMfPGgcUkVCDT%<{;x>Uid+ zg$1NmlU}oP-<$4#!-q2ZDQY3iX{fV`Ddw^jLQ44dJ88JwfH*&?#a}aOQd8yPk~xCf zZAW7FJPT|+v7e2L5t7}xA3e7Cs?kKpI?nW@^xj?jV>9_So5N;CW!m>3Uf3Hg`GF_+5zG;6gbbd`%vy+=iZ&Gb)P8Xr{|#LVi*!+!B!`xs(N<-%(5Ra z)HmE;zT*D))^Y{O-e~%lDFtCwN{X5&+^&fLwSq*Hkv~n(%lG=%oY9L3!0>^Xf&CW91%Bo!NsT!!FB-6^eVub)!2EzMo zdt0|S(0(V#D>`P5sKcSsIT;#R0d~7Cr5jl38bAZo<2UJat7@B40jwX!%612y0k+2% zI!sJ%H;G?DEHv~P zO-(gbJ$%YoSUa)jWj6|<+uZiW2EH85m8&wxs|iy{EPuU>9>&B1PQdefZ;7iJ`M0Q} z&ZRL+GN6kuq}197)o_;u39wzQbh=GN#-r~o9PH+#eY5IlemZvq2 zpi|E#x0RPhmn4CyEG%0{x&C&;T{lxuGa6bEPXI!6Hzi56h$MEg`jc#3k-j!7cd`c{ z`X&+LLNB-MyO?EpT@GZmF!cmp9Ei;kA+;6*XyhG%;^3QK(+09E+O~>Qoj~Z(N~RGU zj7J0mb{jBJ{6LFa6iT0xio8)(bwe3P#uV0 z-$WSfSP`+cg~s0aWYBA1YmMKpqB$90TE6tXeD!MaO(i{2)hUKohF?01n@eHX{t;_> z^N4*{l*N}xE9KKH6!k2oH;yoMSwfouxEvn*oDa#ChAi!6H8nBSOyyFjz@j%h5DaQ< z>JH?85IDW()D)F@Ze>|0jydTWRw-nVs_7whTHEpTvG0#PJH|dhufltOKc59hSBCl= z6_RFfMVLKh8bwnrRWR~wwvmf&N#xvaK8M#A9)w<^{f`pS6LQLpPcnJ5cPMx(WjlKx zOi{XuAK3Y{p(X^>Jabb8QdCC3?_=C-0l$5*rS!&O4s(!G(pS9FNi=9gv66)xH-Ayb z8(R3$>O{5%mVjDo`AWt^!x{+TURDVYOTj&4sT7baD+OyP42`KlABxz+x-&YUs;O6= z80kVOjiith8x`{|{DKbSa&e@!Vs&@J+UiQ8v{OeJQBtX_Y1F#F7YAT8?TmY;Dg@Qd zO7uxlPLgO98X0Y3Kr9C&iw|wFN2B7@Gqw9V`1Bi}miCtfK(*ehU(cjij$fWdGu4?P zG`0u=f(G(6_Y3ClYg+gV@ot`J<)qEw21q7P1(a`Z7o z0bx28aK*grLF@qS>$W+b16bB(%?!JPDFZ%GwsMyf#08Lm-R)OG|8NAt&^ z>sfDuA~{>w^YA+@460^|RKAmzxhSN}Y1q`%nb*YA6~s}uFY25CPqzK!N(@#qIcZ#wk_L3w|DzmeBZGK7S-&^sEy?--CQ(0s*bN+sai>Vp?yBn;u)WO9m zH;-NQlm4sr2h$I)QD$KTkr`ut zV(N%*eUY{AX|Rt{{9U5UqZIvHMCQ4rV@swm43U$_JXit+!MWel2Xc>y9Y55WF`$YnwWX)4rGnlwFgy5cL1bU3bDes4oT)bdA{bvIAOY7H5dEq-YL1n#GCaemf5y^b(C?~5H(NtQ)NMKPnMm334y zo4anigUXw&zT|hoJkR1zd0ClM=9M*HD3VPbEON*AqhBk9AaV#Nam|meCEXrI(}AP& zM*QX$4Ze!!SJFc*m1CsMMMWg+BS^_o;f=syemnYtMg~1qT4ow#rj25jo#LpDrX>#z zLh-Nol(n?#;NRaAUa;yJ<;^mz!kV(sg^aur+&ljBQ%Xmr?_vG$S3T+pe`aPm^sLe~ zQI3*$*y>U(ZAy9bF8lWwDDmR&m-4tN9n$|$};-VEkY~C zVDTPp8hjNtP=en5hp)Z~b+=k&G|f82PG!-o=>WNrS4jII1&0J|4>*jB%&0(NY17-) zG)~$Fx;xOhN*b8zo;P^miHn&FIGM>T8_aFCz<1kw;??(KOxb-Llq>SF zJYHcph{DX*+Uf@0$J-TPlUXHS$DM>xT71w{JQ30@TSYNY(aWV;U9Ca@3A2BdlB2d zG}zI(S4)69Az8e&KQz@39Z9^FaU&s75F6~=a&d{=s-sh+lY@_Iz2dY5%` zRPiW4ss+~MSP}u>pL|E7%a*$@r>?81r!iBhl$Q($O~`AWNII-e+uxEg0<${E^2tSI zNHw{HbD&T_DkAq??0DYi-vKssEg%u7@5idommoUT%ct@f6IE43JuM?DiDsGze|l8* zLfmWs@3FnR;J@uEAxy0Kbp&eB>Vl3o+C;t7TVOXDu15>DGY+ilsVC`(RaIt4rZ;IX8<1|NP#doRj&We>4C!I%&)OMkJT0BV-#0r{ zFa|^bY0^c3xwzkR^u)6n^3UKqx!8}-_f=hz?OIB?{7vdis*;hbX;UzUpm@~sM-(dX zNhEKe9eZ0*2X#CBag^tow69pTA2jkvgXW7dC|RY|9X zqJ|YW1x1M`+yTx3)aBKO#h#)Tr;Q;JKHCLjZN8-3`dc2i2Nn!MBanbc$G2pcxV)rh zIiltj5>!V^3=$0igenn5>%9J{Y;qRQ!KilT24ilG@F#Y3QrDFIl6y{&J< zb9-YJ(qLl>hgl=O>?~f#ZLon+BS_(Y6KQe@m6hwb4K%!lookVYY_7?4ndREo8VGD(okusOm(Ku-sxjtJSO~t$I#wgiE zB)%Z7flvy1RcDQb%h~N=ZZ_Y16v!l!6_+xhtY(flqJa59(l58Z5<0~)04xm6I zZ>j8o%{OY{(4B21LT0h8Bu|(x?<8lF!dW9002beI+ScvH9qP`u8FfxyPo>PS;k`jB z%n&x<_Zq(!*kX~@b&p*Q4N#9zF*k_1FK;nBoAdU;Drl?oFABOkYKbzki49Z80Z3Ud z-=E{fX>np}n=G3Tii;}M`&tT&+Gx||sh)aSN;DQeWpbxZtKWgP_Bg7eP{BzwkyPd~ z2}nw#R`=5A!pe3UZaDkkRczVZ64FmkLm0e|GBB4@In-}q-q$B=GgqHg(^1tr_&O?> zc)_D3wHw@nz{4TJAo&g7^L5R>=#F(!l|h`)%}4vmTC7hgFq8#KgQO9$7r(hX;oh?9 zI^5GZjMX%46*NH^idmgh@aJ|tg~{}_xWK4$X=yaX>lBg67zuPIbz)T9_usZ6XEkYB zi9W(-yEAIIC+YPV(Z_^p8in?>;O(hsKMOjBOqZxB=U8=R^)U)b!LU%wO9f^;n|hLM zZSk*BiaNP#vKi`@s6plM_Sa6VFK_&XxA*6qeAf+bVU=a{zx5&fIX+@EQ>rrhK@X(t zY&^eHZrHj*pXX854yc^??Di8AZ{8)4?b`c`A78#Kn0HNNfNY|5mqt}({X>~ks)n98 z{%SQQ{{S^kZ~MgGmA2yDiN#rDfg@=mF>2T;>qUuW$H{5J?#L8Kyo~{ZB+9-_Bt5dX*1_YrxNd#Oq z?!LQXmsQktDV|rsOrjWLr;%x+E=mGc+@TBj-S^i^? zWf|<~(qz@t70dvNqrwt0gl{j1K_Gh;^tJZ3Ei^g(eJF|3=9M5&D&eT7(i+D|Vl8z$ zmKskR?}z%2E~KZLm#A_q(xM!ypz3IXs{wQPTKj?YJ8(t-bDZWto_& zguRWA17qub`{Oy~^2peUvDgJ; z4S~46_?Ju7G_^8(dHo|$>_4GK_*oRX41A{BD45X zJ+HCa+>y9AElrkFZ;3@@@OrF zPN$@3P?~m^QtJ`QRJH6j{{Y6_@ftkhJl0regDf=^^3)id9ao3}&A=c7*fAV;#S1W` zi!jORC3=c@OazJiWV(^X><^T0u?M%?2YMl3e7zDm=7iBq^#WMh>tkiH{YTKBL55*4 z88tldva=Rrobjn$qpqbu%}$~}-jpF_yDXj8z0HO8<8g}r08&-eq>^S8-AD2iO9KU` zM~)#W=H%PNJ8^IJ#JtX$wAIpAEKpBP0vRS2{o)n;47RvqYl{HSKrp`!ZZC`{;&yQs zZJgD9%8VpXsbrr;nps-qV>dV0DeMpBk5!KoNWKEKJh~h6LhCaarp{=DQTSATEW%b+ zX4I}+3$qQbme+-FL<5;C&7-0^(G|*PYY6x_3q0C@wxE8(lzy9#tS-f!=85ZvY-5IxQUy@IJ0=%9a zfVY^otNMSN;j*r*%u4BAK<(*=w+W|mR9ZRvey%rpBmO0O>vMKuZ*p&bcfJR;bgwf? zAI&1@xc;Bt5QwoK`EY)?O5QTJ+y&hF;mpK{4i{Nc=2H|kYAT^eH*j{i8{1C*09)X1US-lfEqwr2l}%b!Q@W{lfIWnb?4gCo9gZrt z+UiX^g+`LOY9wT+aK0t=fR_{iE$BP*T+C>m37HmPRGo-7xVFb_uwJ&D(dkLZ z6(QO(7W$Zt^$>Ul_P0A?C0x27G0uUkZVmjvcKVC+gR&0jdm)rTofeeHR`0&s4}2vW zWoMDU8DPTOUR^3lOBuXhhg6Mg0CyJl-vioKd0AEzk&qHx0#!lv#L66^rc`k5kob;VMmM=V zuh?QmG!IM+5yKj``izJ7X>0S`oF2O2M#>V>$h7HGJ2+idRRhl{CxPwmcEOCVC0c13 zN#KmkTJgmZ))ZR*0CIg!*o)&$6q8ZBa}CsZj@!1z#QmF$6ZEb5W z;@|q<&RtO*9dU9$>6JpeU%kz*>$$`=)>B+IM^q)L+jT#Wo)4qNw#K`oul7n2lK$mC28PK2}3iBw%cxddz==epsdg36!egf1xPOP zY^&;b{=T?79C=4gK+({u*JcVX^)e46C%uQZ6!`!_`gv(yOKAE7*2*o&7?BsBU{ zOUhq+FE8)M4~rRSrIG-k}g@j7_3zjo5b_i+kY4X#!DKtg}%;Tb9qdG$UHA z?d4K81Z*w0H}8)i`Lw@53u(`zRE_*S&Q+nFh=A%rb&f{^La65CZEN%27Hs<{rp~f@ zdTIe_a_WRgrrlI4IW9{cc-s607^dY^`D49JZcA3wx&oGqMb3h3be6wzFMe(@bLr}O zjFN%qY9v~UYWcJ*%G!;|*bT*njqZMi*z zN1bY4<@K8~>9B5nP4DeG zr&xe%*y>e1*N#0sjxySO(y41=lvKE$DTan%0|xFcy!ICyV`0gLWiD4wQ4-kW2mo(V4#%vR#9bnHd;)oYFTwlX}MC(9?yql+-F zLrSsgFHR3TUstg1aem8TdY+u8hbXU=-jqoy6KhzKHn#1su)nCr2U3PA4F_)fZM~|K zM$@oQd|JuATQD6#rDu+yAiPIYTx>{d8(QR>p5R+-0?c90X)?u^C(EW#H8q5( zf8n&cdESvErl*0DXCqjVEh3d+vL1OKrZg^}pR44iO1K>wDWhkcB%0o54gUabg6^(; z`3CsU`i-h6^H?T1oE5UD)F*;Na&O7tgNuhvbrw-cEiPu6?NkodO3F%$NvJA-3fK;J z=JxM?`8n(_ggLFd_!GLRF!F~0htttQxue$C=BVizB0yP^NXR0}$ak>0;{O1LYwd?9 zX3Q%(l1S2~p0oCFX(Nqp=~Wl;1O$1518@ij?}AyxS#>^Rndr`F>uK{?jPE?K=y=(| zD!_wt&j4Gowkfq4sG6`<8GH)JB1l$P1%!b{kVpDWfZy+kiKbvk9k$z#=L%cr8+tFG zav_vw9T8WNt5YF`14LdiE5r)fb&Fox+tzBsO3L28;3W}cxZw=TRyAOT07dIBgui{M>y4otYiRorf6auZK zj)fWyq6+Ly{jJVC$ZPR(T>(2dl0J36(5$~RB=FC5Q}~~g#ZgGPrc#wlJyDJoRJumH zxpGILYmxr=${KoStVFJ7F(UY6#=z*er(=zmq-v+l>gUTd2L^e(kwgX3G*Cm9ZMY0< zLEG<)cdQnHx{kZ{R818aox~_eZ7LXnxc0}R=ZE!ik z+>%_h!mFx!dbW7u*RN19u{wwr2IFDR7}c6F;gQX&ax`f@*3m(n=kyZLW;NM$Jkq0D zt1(?C#*5P9W2dq9!EU0>V~44!j2Wznl}!rB&_Iy7~re~c~NQS01V@ngiguW$%Z*~{bE)A{7$Ap_5 zjhq7BK>&fVzCK^F!h2dDL~N+PALC)wlo`@etJ77}g%>wM%YC-m_OZ9VCiI!=iF#^U zdPIUaN_e6wm{9p#TFI$R!vk&h0^8z0Pjvl1S9J9iIn8P4B%-U5rb>D02||R8hjlvz z-|Kv79U<_Vs-lj%u9G-5R24AI4LZCIS|ZEB5_bwn+r6=WCp#Mp6|hR-Y};^scKnuy zg7-utX5=rNt8+!4JCd%ZjtGLi)+i$gibaONcH4orH2#avllB~tLrD}-m2(UzFK1z~ zB%MTBkB073)hvOczW8X?*LG!&8{@A}<{1@LE=yOQ($vr_WvQMzIG_Lvl}6AmNI%T_oKH>mg_-ksOmH6! z?yKcV@?)4|q7@EKqpYN;sZ^;-xg>8bNji(06}`^(AP>_J=;fO;%&8#E=BSD(n6HVZ z?4`Ek^K)!>rD<|nnxhVLQ1s4?a4)4~2H=98HHa~M42@;4OA1!G>B=cZgjBRGCCUr zsZPe^-qtq8pO9Bam2{m16ViA;F&xt@{{V<95CW;a%Qpw^Z*h+!)S;Ftlvs0({YLgb zoz`5@xu;)ps~syunRP@l$(b%+nNq^Av64HikO9CTTTnY(cfR)zrfS*fsnD%mHAsYNAThd;<^_$w2ZAw8$$x6* z8I=xDD`{z_*W*&o(tu)ON&I7B+}qa{M^71X_|lp+_V4rm014g?irqzTvv_s=Ee#%J z5t%DtcxoOs*+?OQxZc9tbG|VTjol?%)3x-^9M4lpIyCXB5`JAvA1McMV{v{D*7(^n zoWZlqq|i%HgEfQADl2$~QEov5S&ruW-wyS@K`wtsM>}-0^#pXz15+(TuuLNe3s^4X zGjp}=-x(b%Io&@j2kg>KjjP~yq&Rljbdk#WizCe{GPbyT__`rVQ3iMOm8X$^k3pv9h!JZawmk#o zP|B?qnagQsnbntT-R!nDJB|+ueQ;aiHeu8CI#DR9lQ>7HYKeSOBQDi4uu~adDbQ3{ z8*hJX1Ip%5l+ndYU7^{$ra_^YSRDYa=Y9{aJ^Wgo2(VDf+Sn_`N&7J7Rh2p^>1C)% z1Tw6eq>!_DUf1&K8xZ!`@r~m*>7J*ms>-UO>3N(+s?R*JUNkxY9z{1c?YDD`XW^pN zS65Kg%LY|El+_BbO+8Y@PZJ>pS<_9AhNX>(x8EOPWO>v%j#C|eUzt;86p|1A_@&up zBW56Wxd$Ex+Dwy=D;x#Yk6PRL$_zf9%%_()(Hv6wN3SyevZ~J~uC2%`sY*xTnGGRm z*%xxxy}`e)t}9tydz)pE)Gcb&RL2Y=B9X>)qOsD-Ao0bqsNmksHRD(6ZeZgT@m2(zoKZ4!>rx8ZAA;GfS5%VnOPsjI1sdZF`>Lbid zD$9RsTWoqJdtK9=VdS^yN+Z+dJW|4FD5>)Sm{jHSR6|`(8e~^MOp%ek-I+zr$7>z2 zQ<>UFEbPw5a!I}M^loABBR?5w%j$a5AuAcY20^B6JB`im0l5}8;9|8^@DjJik!gC9 zEoBjxQzWsCL~=H6J@IQF+76ycJ}CPi@T<2Db`o6GljIX6JztFSglO!`b8YYX;{Df| zbq!BQQ)V>kkeE>l2#6^#Vs)SODF(vC?l{62w7I5Mv*iIq!bun#vAF;MHVv`A1l!*oKT^Y$;%Ma*-OtN~R(v^3 zjc^pR?6Q2ZDP%c-2MN5`^rBn#fyp-+XiA9xsxxL1C$70u9@boG^xFqw>Wbm(uQB_iOS#_R~W;4#H( zrz>kCbf>0SBu27H6lt`VJ1HQ7MbCctgPYeGrHvw{ik1~c9u!)v#@wA(x%a{$t?&_J zrj|r<`k98_Z$WN5j1)N9BGc+gQ5;$uOGnLQr-!K|O1!;llD*ihk|8bpR~+A-ZN;$n zP*vwNbnsJUQdC;C1?EU&Ml68eaDDrp1|sxqG*y|J!CaY~jFkEkHn1^B!p>IPn*azK zUmZ-^dKyY>+KP)VW}PIJBy^cGZ{XozzyB-PNzeQ2T-&ML} zHu;?Er{K$E&ui=FrH!N%lEPyO%W}ZnoqmGX+@3eUe7Z`w>!Y1~II3;td0X&;x^Buy zP(4pLyT{deFHuVcO@B;$?Nt>E2cDj=AOMm{F@QMd%5DKZ*r`Po6)tHhuBTdaRU0cL z7Lfw5KZG6q4fpMbW4+;}k7ax|@6R9MbZ#IPxKZ>>^>o=qK64yejZukU2C^NRKoAGm z``+7Hz;lIv(B^X1&6d@{mDeOK;n)~bsy<0O=~lJ&8xw2|&1K7@d7^Y`!Qq2VQnEB< zKyCIQ+z<`8w#OdJvmB0^K{LZ$P{9mq36Ld}gJK%TaCZXMKc+4=GvSK6Rs(#YTs|7* zRi?Els_C?4^Qspz$@{M`43GY$I!@YqxVg48GnB!a<@C86wR8AUH;U^Ufbt+0yEf!o zor$@|J(G0>OnHSJWqnH%99kg}SO5SZEx03`X*q6U@-NR&flE(S4}~m>yOJ+*j780b z?me%3dG4zW{x66PdVJMe7#<1=4B*kE#=ef0}*ZPe)y{O4p~QCoYGd&I>9v4yGqQ!$Kk53hS-nd zQ|Y@=R;{e6F5RGfyAz!QBS z{{XZ4y1FRqmII{AE`n}TmLqS(0ViR;_!lN=N;;H@yzL0^)-b4Zo!wXO^Jk`E$)pgNPl zB}U}-7=@q5nXW^a(9=r|ZC;H_3)BUWz{HmT9xb;1=GX{kT#~CYsxZ}0lvBvE%NtE$ z3}J!L7W^U3PwidONfD4B?-QXMUF0g~2I03%`RY-dM{BU~gKv>W+x zvH1mE(39pJmP4M$;KF2xKZ5di2I@fC$GG=A^NkDPHAO(pA)Z*C8h8K_%^#gbz$6=7 zomTn{@INfbXNHQuBFyA^XRU-yX&5k!#@Ets!;n-d<9~c};a+1FQ(ZkIloL%eqenOg zbOV#8>2N^w8{^b<34P-k?P#(;L;NcIuJIxu4iqz&*Jj;Kowid>Dxsx!lfy*NLTc0G z2eOmLJ@Im(&T}k}CW@t_lx)c)b0(++GHeahA92nmd_{)0D9$UUY}PuT7#U&KBfo^>Q941nH!aAuxWx(2i!)$&6af11 zX-~4?#{>f~u2}QxnII=Cq-OC&Ax%CJ3OMv29zh)9`_LKv1!19`=!H3_vP2jS4`IBd zo-NM(&phKKKP_2L1frlkG00<*I~98Yv)uOk?Y0Q?y>$%+eBUiBj{~|zAgHnv8y`#W zw{iBv^RPxlBpa|3UmdZ1ZI(_dspF}pEK6&Xy@{VI7o?2nv3O6l}w+ zBB{;}2MW>#Hn94U>5VI=y20{#7`0N0 zn5v2}glw@Pa5rw|+D@(aKAR6enCak~#EZVfe?1dsh>9T;t>`+rng)((gi1&o2fF$K zI3HX+NATmQqo;T&vua6VbSSXM90pxi0jvlheeJd_eLtJUonl@I$Gp<`(p3YRap&EQ&G}oX)Pq>XP#u9^V7?6x``ILi=D09;AeYbjEyAylimYb zKnl(O0OLPDqn2ids`AO0301WnH`2&%hy7R7ZaKsKHStF<$g&E`SVXe7ghUr`0G-(0 zLVdO)-u}3*P115yPVYrjXH9JxmPq#01=ZD*kU?t>#9Ut$x#;TFT9}e2nUxk|Rj*(+ zYg@24zooIegm7}=@;lP|Qlcb#PQ`1{^)+T=TOC_w6T?we5vz`(IhYoB?4>L@xMt_q zY#Yx$AsVXr9+srXO;UmiSq_~o83Z!|fAZgb@9VZOIjd_8G*iVaqvhddynn;K<$k!V zROeZZO+20q?hzTELXD6UztC^KF}kNn@mv_!eAD0(I1zg-JFL3bGs`BbqDtvjT9wez zwwDD#3vFAAbFlUH#Ykqg3a=)o`GsRL6eOxSwSf2RI}03FGd$ep$xq`gq>3*O!~h+E zziU|GYc&)!O&rol?9mdQ9f^#V+y4NS{@7GKIk2!ajr*sv4Ip1DRfj!~GRx@RXw4+G z6O=Na-Hl77uEcR;ZOySx_@_*nbzqu}pG8b8@7*l1Q0gSk+yj@eZk0(aWE7R%EcGAf&52 zD&VuGpTrfd15CETu3!P2et$^dOKA6`!AW0oPT_sH{ z%%*^|A`_(C1Aa9YAlsW-_uS$-fOaI}c5(A&g~ zK(hn>oBMC>3C5VFI=Lt+maE2+BG5|{4Q1eV^0R}$x|RH~k>%Yx)cH+56e~2e5`T9QKGIGSd$vNT|qs^E9If6&d^G+s* z!oOvu90AR;wXU$Bra3()QDwq7B&1-I!4T9M9bdbBxUtj?@L}oGsB#)=jKIjIn2$P? z)T+y3Pq4kp;f|h@C_Ot=OzTeb!D+QIw09gEpT9l##($Yt*JZV|`36@ogt!sR%Hq-! z&576&2KVO}*zd`lh}hyC88lC)byZGMMmc*5{>==53vE#YI zehcOi8j6@}C-7-zk%)+pOoZOcZU7fzPiqVSqctyCUrs5^i9AgbMW`bv7B{iuorybK z^MSo6WTNV5X^RMg%8lobehDBCq5inrk^?MKS@Rk<@>d-YbY-`?(kr8bCC~KdbWur4 zvk4|pmSr3XT#p2$&_ZXMJAd6NQRa}VyxNj0<21FF3Mp2#z5`Q0*D;i7_tLC>Lm1*+`zygZI*tXk#A*7wTzA4!jbyZu`b4b%HkW{h>Cm<@vas~a5Z|8%56Z(i{ z`C!YcAz7-g;WDz69uV*AxxV-9d^lsz4pUnhI*-Te`6~tz9vZJ}QzZHB_^?wzhU-B)A- zzkc7kRFKHmP*C&AY2m7MWR5iw8hGi=!(Binh_$S4KRz*H%_*yY<;<#v2pV}AUQ#0S zD!)WGZ*H{{Rim{YEPlIqbEc5sqC&T492X z{#pqPdozGEhFksu0A04=jBUm3AB_|3l=h4GA&ta?w&7a-9`!u5bTZQhLeM6fcks&% zGB=qRa9392(6Q}{zF{6s)|q&QSX0NNU);`O^TJ8;`!emg?hgRtAnF{{^wnfJhwRv* zk&vZ8@e4wdzNOMe`fams&m+?oOqZ%@sVS-7F^ZCsB&0@Kh(?p+D&2z%opFeN|7ZdP_CS^I4%xsiToB=A08Fy4(KjZErGd+i}JPQOjPGu-8EZ z-W#)sf-z9cplaLKf72H%zpX}O^ebJgym$vPc==SQ z;+CzZVB`ijZTJA%-S*?#8TmfbwVOIV_3$Hc`lUb0RT`?UO7&-!p2JR?vlR`$7w>{~ zJv&g83s5r(c7awmkcY7xf_{MZKKN&@WR4o7si2w(1ytcAhgE=kU4b2eKAz(isz~Wi zO-C$Iu9#u@dVuYMQkcm1Zj|0jI@3!Oiw0k+Ai|^>)KH7@85gs*regH3hxq zooDhLdy@2BB@$1UR>bv9DI>~~S+D7IC5M=CYy|k%AfU*q`gRP$nxpofh`dG@NC9>8 z6dR}mivlhPxHi5o)jd-T{{Rvw^Xe(2P>Q}{cu}_8Y(O8L2z*QG8a&so=*=XgM3gaV z@!7OTBY@AO+?5-P0!_H>zDscKM#x)7P5o8yORC3Y@^uXTC6LRK*Hp&Yh>)c`0xcpm zXH%#+{6V?rYYn-^pVIlV<{1qJXo5jfM2{k)9Y{_5+xqD@9@xsdyDy(M>559(Qa>Ln zm%^!V6e~vm0ENi|akcO7i+@4pG1O8;K^z_)n27Mr#gn>&{A*@5IIWpE5Vls2FeD#O z=XFYG+V*Q4_g0+WFKYUEQKghq%uH=0QUT)d(Uu$$dxL-Uj4vZKnKnUHM_(a|qE>jr zAteZ4r}2A^3GNO9REp{PS23Y9{yg-=HkBny$IaB-i|HJ1zc>^+qN_Ccc5@0f`MDO* zR4X>|g(pj!as~JLj7Bd}d)fnls}_DezUre|``guNl66Eh^wiV7UHj-Q0jY+46DZYd z4eV?;w{Qo(GS0VJnYxxrYDzfZHIsOaBx7j~UT% z9m1{VIi)>jRSgu>rhnYWrt(_SDxFsR&HYB$37b_(nmSD+nm~yn@(Wll%011oVW-Gx zk5yFCm3b)wJkW)G{5Cp6@5xfa;}vYqwu3Cs8!eq@ERM@KzJV&T`58SuZ^xKpejcfa z&-`1uf%~A2GVOp%&ayeE@|?djfy2i;7^fDnNjU@QV1FzK0sdeth{{-P>&Do>&_|V3 zWl+&coILPO=!&kEkr*%_we|!p$KL^_%IBhL>7|HirIqQJo<`S<`-WX4AACQf`$XBA zVx0Nx)$L%Nl)03vkjGH)JgSHHb{4(A_m0#>^7H9!E~Qj$!M@`bPLWzFy!u)y(ybFy zKCs`y3hu+)9qshNYAlwDr{;2rri^AZ&LxU#58jJu(m~&QsR#1KjE`wC@uo4zIIpqq z^zN2L9n}q&TuezI$HQsZdtyXTEVN-Y0?19b+t>X1;I2{Ab+zwXNh7U2L~Ue877{o+ zi~4rIt|DfXHMx9j)6&TbGk8JRZLDu^%IEEkG1PJ9d5Mo2g?IJ+S8j*Qz7vI2Vv0dq z?rcWH3lL+aUfv8 zk71|z;3KTiNXWrK1ABr;rx=*0@kwiYDOzVjRnInFlzt?V)=A2h2 z;QoDH)p^EEm{Ug5(pN_%6+l8kKux5++^IbMPZ-O3Q#N{B?vA48%Ha*p#ZJUn_TLx! z_L&&eQ_mmnss&u@DGbq)4!uVARnSKJ4n1)$pluL6l`}l1iia?*p%o7|$;@I_adtk0 zp63IqU*=*3fw}S$dFPxJ&!?u%>SWF6!Sl)T^$J?!Q2Y+IWnohBY$tN_s6KHGi<`7#YF&n9Yl?SuXbX19;D)Y z865Itk=Dms7mGBktR!GiSP$a$++2H%6zN{1rOTsSjf^r$G~udhH2yW@C;tE&atbnNq1)$&}{5>Twds-BM_Y`ZITs-Ab%TTr9Q+IR>K_8gWrztaPwX)C{VQ3Ayx z3#qo7`r_l%*>xUMnwt6(3bkBX^wU5N>wKGBzpiAWukSrWq zpRX9ohuYj{k>w$zUH+nxIg~95$+GE-MrCNxTxuwJWwo^rpv35D;#pKhd7}i4V6~61 z9rpg1L-hp?P1HvvbrU_zbwxn{5qs$;dkZ(0 z+B|rqEOSkI_CjMdY00LoiDZ~Wu%H0klc}2a7e90QVY#Ku8!@Vyc}IwrkX4f4%U01U*7u>jt~dk<57*o~WJ!J-qygUhNY%UEbqn>B^a&9)t|HAP4s ziY9Sh)bqq8PaYUlIAVOvZLz=W-<(z|r41mSFyImv_pm>1*dq;m>rf<-b;!C!f!VEK z6pu>_W0fgMG*UfGaX{klsxxa`+$Nqj>~I0Znobne3dQM_iUD$b;CX;vZTZ^-P&0*R zaZ40|O}W&(3)ouQVlYUBB(g_Rk|D4+79(%vw`@k5s!?cTAT72w?rnS)!F5_CQ&UQ4 zzFL-J5Q%|4V|MO;o*{nFiB(Zl*m9(7PpJpj5aCCZh~iRB>`l4B&XVc$%_pg8r&v;! zZwg4l>Xn*pcG;YAF>TN_R)Gc#hE!*21mP)#cf+R7cEy70Z z03_|XJAJX6A5@MtX#nV&t-M*e-WAB1FY*dib{LM`9>3LaXm58%QHzN4X=z6Yq zrjnkfX9-ZA6I*``3ts-UV zuF0U5nHqI6RGUVDuE2Y*Z?Aj=&$D_MYxGDUVW-Kg79nnIIQru*rL9k%nd0$~L`gx)NG%N<>GQPWrazmE`w#Grv?7eM5J=m&dP zT;i!vGYYgbG)73lDp?cC2pjRn*hCT+v==LJxV!>U%%?285SqG)9txO&rIlY{6%7>v!BI~zmY2eGl9py5#(xH*eTsm28}W>zr%q&*P{mB`rLINeEEe7O z+ZRbPjMB1b{4B%7N!3xQV+F>PAeB%qK-d%7{{T#7br|)y2R?@X0MDAMkkU<)vbAU3 zJ^uhQ^b%3f$xl<5Q@4pk_tMfE>3aff0SdOiHpW#KPuI~x?Ol=0Qmif-DMyrFeTDn~ z08DOqWNjl+u!zKv&cX$RhGA=574Lf!zpgQS?!PeUEb}zWa{9L~Bk7r$ZlHz@+f z%xh;=5o(D`c#7BjCz}y#@6Gwe&ZUVY@R9qHn~@Wq&DC3}>FV-csjG;iQ_mFTl&Kz2 zcN}asIE7a_RHS-h(=w^l!)yEdcl`0Lb!>F>d2;nMF+pDp39fjjq*)?)A543&;2uV+ z+p##zX06C;B&yMr&qmG*Q-~@HX+4(2aDS#Q;N=Nq!zQMUm7C$lbCy!X za-8OsW`V$HSSpzj?{6zy8xggSt?_9cFHH#xmsL^COu#h%05LNw1l_mV+lZ~m4y=Nb=6K21*??G|%9tMcIqy~JUyV1y0Y;@9;0V>|e}m($T_ zmCzc00vW2jWSM2v_|s4tFK|gbp4L6_pVC41r^ZglemP6Vcb`F348BTwcdc;nylyOx z@f#m7BmjM{^})`rph@cJC#tK080Cw@jEznd`B*8w>upvh+~3y~x?mqElAY<<-&lCv zK@5iAZ`i5#;E!{Ao?$*;K1&TIV@pvKu+ybGm2JF2e5TemvVu=@Ve7Z2p4lT@--uRZ zI$j7s+BW^*o{g3zyiQTjGNSEa?s>WA-vRoMDw8de37JtNs#7FUi8VAr{{V%y8;n^p zCaC#z`PeB|kTXDyEP6z)E<-Wy${20lz*yqD)y&_u3}&cQ2-ixmh#OGDzyo=^YuDT!&7T z7Y*%;Q~m-$q~~y^S6@jqLb`?~kycoQ zc8mabZDf2G`skJL57*BbDGW{%-W{-nGJ6j?I!n2i6p@Qs)xIM^y~e z!a}fxaKRG$0>f@L{PEtNrJ|EDrb@*5nB~-DSfvrM0Zz(J+PEV8+THLfvg+Oo85AJ4 zmt7tgTGy+!7@U?Q~%%`VG9VUa#IGA{1Xn|cO#MxO$ z{Ehot7fP(lFU)#hJg3d$h6&SLOs9461;PM$zT(}sxyEns`zc)Z04nPtdZ}F&A>wIm z7V{hMZ*mAb-|{EA+aa&3&#Ah407Im4yhxy^auhAvPR;Cg*m~o|=ED@3nq2xLf0Znm zV`HW}q5VIa=CqckT)t|<5j3%~4NMgN6}h#=_rGg;Vw3SVDx;(7m}qjS?o1Japo4d{ zkKCJ`@qWv)-lL_ZtfH&TY6Or%4xu2|7UUf^ZO9_S@9l+rN$H%sGU-};`iCmbrLNMH z@VIM26b*>=T%e_$geyS zv{EuX!64h8Oi0RQ%Atl~SrtppPK6P_kg4R~u?EC)Jw`ng@w!HW#}V>Ye#>I% znhfJS$Y|0y^1Rt{qUJV`mXk%SVr4(Vc^1FY`(l;U8J1%~MD16VwJlga3b_oSVK=gX zK-5nAp2xoSuyhR%%F)YB9%~}QRU$;O3kj7QN!O?Gud@!v70-(Fm04Y7CRtTmB~m0n z$0MriQGdd8o9(sLw+8mu?}diYa@`T4IU5o2KMq!GAQ_7e>ci5NktIzm@X^6M1$48~ zp-?=g$s*WlVPHwH8++dySHm8!o`#NGsvM5KzHMZ)p;Q1U{1Jj|yML&UuNc67AJ<2g zWpc*>%cuFJ{p?kfyi!GBdxQ9F$G+#cd}|#A)p1a0&S078gQ$9yMM#h$*m(;vEUl); zU~Uh-F@2!J@k6|}JAD5DpLKRO806Fn(6ir&wLLwSO;c0Q-AE~+BV4sp#8 z4EnOJswfpEeL^&w$5{EWSMO_^9DSYf7NK9GGiVZOe-J`-m8vPFJF?p5?~A`fRp)s<7@C%ZW>gZmj;fs_ETN6cl2`bK_B@LoJLk(_=dmEz zjm`0I=_#b9NT}(v8mQj0OCv(;zHc&^id+T+>EGMm9_uD0|DqMM;<1-aC03C0M+9Vqn6V*9^)>|lSTogm{XTI$RP>onT}T6z@d6Oer-nB+B--SG z-vKDLD03xmI6W7-9f5W+z}h2}@rQI!;LE z$f=};o@rsRRC#WqL2Hr+esD=%aTyMww6h%{Hr)E1{{Z!mn(OeKLx4Xu>f@cRj1%2g zrRr{>qj1%~53^a2MoK*$Y!i{{plTnM*c+OBOnN9Jl3tDLsKRe^K%^Uc_=F5tWX#MG zGPNyhHS7wj1;6FTz8`}ys(NzIPf*bTWD(hh=kwd&oLz24KQDxR97pa_PGn))b$(0Y z-;0!a)^F9VomXV@_uYP-+R5MySY_fV7CXdHc3QsYO zh}EcHNF;5s1B`w6^-WP4nwmJ|h!bUSH7&m|H^eC^Ddn6jnFS=YQV-*WSxLRSsr>Qn zalN|{uts6n4$l7oN`#MyyJug~d}Gp)$C!0KUrm%zQAsT0T&Yp2qAn4e#+}OhnL^86iJSd_#l2e~LT(&Axa*7fQ745OL zh}+W>D5$8}#IaN%C_o}mS5Wk^=kmrMTlSm&MWKz4NFJvD05tqq#81>WL|ZkFP2@n! z;tfEy`fPoB-q?>%nZY$YEjX4r1L~7l7b524W4_q)QLu9yl6bI<&z9xA@S2K5ArQr* zf}v2Uzi!s&wmiqYA4R0;WvdjqHf;b2BSldpqDCYRNZ#A=!Q&l=I1CV&t55{64r~dy zKhyQV`l=d;Tf_olgpy96%BTMTEv_*Q=P->^O0b~WyvIrO-}1o+lfs~SgsgQr7?(Y% zq*T*IFk`-`*fsqwHpD6Vj#O5YEZN~=@&bEC)gMv7)-|2*{Qkeo&G{;Wp zO}xI=!HHd4p>})Cgw-Z{lm7Lm>8cvJ+ zr9kCN8}(|nU7z8nK*>v@o`#_o{vsIa8&F^khM;yFdSG^G@N1!@nn`G3%xNm+K+RDN zb0ayqy0O0G>`6Y@xJewL0<3YXIo(OnMg7Lumlab)o*Se@sQg=!NAtqRSj}eal>N%I z&Z-X2U_T|7W`7U9ALTjJ6Vzu})i=pTP%PC(Sb`H`Jiyo;MD4eHQ8TWJ_y#r0{{S`A z(C7zRMJr0zzh&^wK956zmMt7%T#^C& zL+CwmsfFzvtZ?zAkbH>$012XOcM{+z{8!1p7}Md*d0tNsOlGxJ^)M2Wx5@~$LPpnZ zDp|n*ZVtzsW(P=SC`zfg0G;iRwsY@F2iDP>Ae8TKsCRP zZ-B6L{1eU8dBoo+w_S13GXTU{SP*?r(`;Ni3n}OhjV7*4;!{T~L*<>;R5x8A-Pvt@ z#em>nd*S*0cNO4Ck8dNe2Y-dqsQ#Syy{@|TUo$RT^1Sts)6{7Vf0htB_=9r59l#4= z$-WG9^a~_SB|=AZh^#WaG85tk79FkSJodKzvGoOC#UF;g32~iK4HAh|O-5u^Yh6l) zQh7XrH^nP6_~SuY(RCHn71Wd!{w%RBR`eR#g9D~PCB=uYdy%mN5f@v|$`mn3+zrVe zxAVGm*vtZpmLFS717&m>l(C&2D+-dk7X<7_JM+(`1ZJy24QGdz&rvib!A5bU{{Zh6 zjHaTBqo=CrvnOK#Z7)$v7-9isdysADM`A8UD~nAQV^%W!r6j1G&XaZ7 zNwHlGVXI}iJ-vIaf)!UlLdmTY^-9^|80y;~H2Cm|E-KVenO?kA2tB-wkUi@_N~6>n2){84i&Z z?i8QIZaMbtjEAoC2|j+hyD!Qh`EybPbvFu;9}~`AGPZ3&t!B9!Z((d+GHS$vN3SAk zX)1<@=^cvcd)ro_V_~-U9rwj2t10J;I;4WSH_YiPW!AM)z|QQ~Ar+ZO)Z{I|x9h$< z-%5-}l=mL}y=#>iv(pStR?MS2q^HfGj1e^|=`qU;V7*g?yCs+bu^Bz4x&FafbB9QI*x#Qd3jrwU9>~&Sj#hg`kpa0B!>d z1=`oR{643BqowmYJj#;vu+EYo0%e*qrAXLnumE4Rt;R8W#Qy9-ivB#U3@5W3okGD_ zUS;spuOaxGQk4s$i&@0Ge8Q zhd^JF$UlT%`QpK@m1m3s`-@#DuJ!R_RcZSnzopd*ZG~wDZlTytFHB{{S^= zGmRaR!@AB_;3r1YSBbKTD`_drY$m-?W+vj^R#FJH?|t#?!{DYtIj425&W&U+2n|xa zdYwh|+#gN=4pCQ^&UgbnGK^ZzxCvOas=n~*w!sgw%#v=|vpJg&URsAQJk3G^^=_F!6 zQUY*1takR>(;s=sQ74V8iz@I;r*CU*z7}hlrZKt(Z~+Rh{rlS+cz)VC2A0U(SMjgW z3-R#WDX&>y!5oV;%(_Av(Dbx%xULipqZ(CLe!+&YR!U6J(9IcWfc!0P2_OJ%em!vmth!sQW=y7{9-PjF zTv3FmfuSvCR0^`{7aN=He#0MCnP}Vhzbia4Mh=&2`G2MX%hq{KKUmXb5@wWeNi`vw zF(iXi$*c_m)*N=d_v0J*-quYlq5c?gXgqp5xM z!xXSVJZuE6iV?^JdICV_6}*Ei&Z?^ElBX-oWr`W~G8kQ1K^xfG{14L~aKl`)EM^%} zT}0a8?r&|cj5p%X#VonAKbOe!T*`*Bil{;=Y3jTxd09a+i!jo~b{q0Y0AqWn`&%|h zIPpR&)OOh;Bcw+gN!F@4PD@2yo7BoFp$l59!WneOG;$U4jU?;v#W}$SGs^gn6+fBTndSiL` zE;A@{*)sg}8LJ^c#z~QMB9rA+weC*jpKMi=u4MGr7Z++fYk25H1W)$?B$ zbp>Rt6m-=N<>}mr)s!ZSdZ_#UcrnuzrYah`oXUGb@c3%ead$iU58_c{$F|t}lB1{k zYNBVBUYf{i9hb~aI%{Ej_ZK_j3-m`uE@HWX=$yFK0p)n&we+-Z`24Dy+Uiev=$U1tCBE=L*qr(%D5;8W}d;0Tn z?~4Bb#C+j09=fEUqRgX6AY)M?q96Ksm|D$iUv2C!ZC>OH@58@_J#|T%LzQOvI^}et zk>Pr?D486E@|&*q=GWr(2VgKG;!nX0>Pq~_sI#7|$Z3&LUPjR*U~i;Y5PJdK-x)aB zIC1C6szIg0fxX`xTFZ;3%w=<)+HUGYWLa-e<<$QGwJB88(yAo0Q_tXuk%=tYO6*jT zamM%y(op5oXV7KP<+PGf)KkeqWTGNRCDex3eYhun=Zp`a%rhK=GyRz+ZI|X0Z%^UU z*V9NHV~=sTZLY%OOO5@kF&C*QtFk=Fv#g2=MayKEB{Z=nfYO8o+B z8IL8pGX8%LHT?eoX+8vuacWk3@S>)pIHqozkzX&a6Bxsid=Cr*WnK@+utG8{(jsPc{t8-6bL9jM?(z`Ynax_QD=m(fl;nz zR#E^A4#vbEwXva4W>KzBm(;GY6cHFz2?RQ@1l-@vy@mM~-;MG5vqeiu9AoDaw1MMA zHMC#Ua98MYa_QXHF3uyPrm9Auu7U-LWmdAx+zmkAatXQbZ)^uq#xgWWcOSA&LmWKE zvb@q{^mPTXLHa4}vxVIc&R1_~yTbJfARnkz&IoS-elCrfO+g*Va@s1Gpe=pj>aZ-LWU8$rFoxJw6{) zV-$ycLZ|hmRburN)c*i0B`m4CM=s$F_Fzx39QvGaX7wK@Ej^tt*U&kYK?nmVw^LL?EENNjZ5n-E6e-uU%# z!~G@#H>IrD>3}QHY|=iNmPjb+;7Do1E6Sv6H?^#GEpF$Y*rmakQ`KknH8tW{o~gC8 zw+iLG!P@t+^~Bno`l_OuYDgwjTDA=|Mp6QhM*2_XY$};DdYWZ=44R_7Q5tHQwYI3* z-e5@J0k}TA++i?6VGh_H8=}jCdn{Q7O2-tEzJRLnVJsx8vRYgQK`E(j5@MEr3U>!!Cavgx+bH3YPC&XA@ z9MYLmXLXvKXhY{ANxij?#4orwb~~8qsiy27+hkFenJW2O&q`+kPLh&JI;Vviqr%f6 zQO@eOHvk*)Z>_OJ_`w}xO4TaR%Sv4qMoBzF6NT7sx@x)GgKSI7en%+ioW651O$@M- zVrjyGQqnSs7!UM|kDwm7pmk1ZEq-S%nx>XLl$9-|taj&e2W#S&O~I_UO3o~#V&ewN zToG=Po{(0vR!#Cz7>LsxVZ@{nwvuh{zT0765u&L@qNmPXt@k z_QiiKnmuJCrt!aa$f~SVh9ba=azVD;@h?286J^wh=@ZO^jbh=n*lbkszBW7pG6TZ9 zqND^SI%Y>q&Nf|F);AyDvG?}H$E@B+#V)jS94p~0jHg4X0jv%AxghbzDqSxVOUEBXLx>8M1~M2}Xd_cad6JaC~^h__&GwfVj? zs%+LdBdN(&e;Nu<$qcczgqmA%zbZxc+hL18SpNX~lD{OX%w01|SF zu;n?GPF1N{BDRN)Jt|dzZGq&1O6}=@Qf4yGLhw`)_COXUN*Z6sIkQBHEBIo!P+im&phjPm2e;OdFsiY%WZbI@;dlGx$vh=pOw0H$H z!A;T?=C3fBz8y4?vqw}V)Fh5eke5338+wsr?}{2rQ&CGY($q1DY-Ekv%+}uEZ?N3r z?~uDyWNi%e$mq{zQbvL`U4vVD6Sl{k0nL>3$5P1-UmQk~r%bV|mT-%6bY>#ZJMqMex?+fib+-^xdR z#~sb7si zEXOOXqL5|PD&gdcFlots)<7D?ZMDZ@E-_H(TG$|}YFe78<&s%`UPO>wYEnqK;gz=E zdmLFhn?`5w&2y)cwhGzKsGQ7h@4lrdNEWi+>Gj58($uS%=BSWLBD{#xD;7qC1_I=d zON$&^!GukZA&}7(n%gf^jXwP^v8~agU~ac_$IV#6Z30TVbe3(K%|w}NOwMF* z%1eTweJ_2xj9h3dOwv}+*TpxCAZmJ$+vztZ8Fuau(_xIirlqEXFj!{`N+e}nekb4- z=Iyrk2iqD~N@k$-Y_L3SUWNk<%1|>M1ReDLEtN?2_r*@54~F+WgW{Kz$|S1Q40Uup zUGsC)#;H4nonVvBw*T4*dhW79(nSzaH8i0&(nXbt7VmL?TvubySyEWaq>Usg61y(oslKi^@6InrigI+$ zcd!wN3&?-LUAn`m4rNh3b&(|cV0dJCmNJ3~c`Q3`_7@)bw{(tUKU4IK;<8k%G9x=1 zd81|A5BzuBfA1A9hOI{>Eo~K2FrlcI<>gX)I-kUQdmh+-rDT^NudB*T6*5;-)B_QX zNLkQ;Q&AiZu1&bU;~Cj8G&IK;r!ayKdR4L`0h(FJO3rg}2ToE@KBOsAtHxr?BeDEL zum@KjxVh%}ep{Mlf48ZoR-P3JR>18duAMFIa7ZM5@l5Lp{!^-ID2yo$qZ30TX>>7_ z)WN|XVa<R?aUZ8_+lZ0PgQc(56QhiK@FRhEbJN)K)Xc45d=&tXoI#4*(s7_9yL! zJ|kvTeLvE7dVUmj`NspU%B!Z;= z7F!-amNRa-&MUJDsA=bv$rz?W1cPO33zgrUt$b@^b*Xa){yi-=Io&%R4NeYnJMi~2 z6wsKfBWj9DmmtQiYms0H^tZP7m)1!(Os_Ijg^Fm)zyk$w*r^_%?0s=j>Dq@{d1#)& z;yRL|J&G^Wm5T{J9b2pY^uwU69@Htm5~PH_cvLbARn?(?zo9S2syY)A4wm&FoV zl^IlY@vre}BstuVZrqF;=^E%-IdaOjM5kiYMgX>{EnrUjTN(1;h6x|PnB97IM(l9i zPxVH#3hIgKDW;smB1txejaZh6L9qvKzb6+?rK_Z+lP1rD2~e+sM;;=m{C4)et@Onj zQw~|;Lsz1%s7C4?uVf(D5(fKk_Be%Eo(ifeT0$iK#C{te66ygr)H{!VrYXM<#&b(X z!v4h%hpMP6>Pb(X=M=To6solo!z>Lqiau7qus)jkx#Q+k-9N500 za0UDN{SF|wFOi^;za}i_wBj14$!OSIo4G*DoHhMJS!DKm$+aF+X_~4H#b{%;2*9zl~N+s%Pfmc z9Bx#2jOR|0MxsgFlegDwR=y_Ygl3s0V+y)cF?|J;saFkW_uzsr$KM5WTEE#DMFYwi z8ni62k_sxIBHJGK^IwY_W7Bj_viPyu$-nj6<}YPX#B{gfr&st{wqaFJ(4;>ux2JO2 zPMFUh_=9tQ>xyn~HB=Qf6s`;?WDH_b3JtEd^{_nQ%+EQFyQvzjglw*h9I;7o_XB$Y zZHX7Q{{XHX>Zq4RJxa~uc|=lg{8qo|hxGohG`X53*{|SwA4JDS8A=RN1=S?70J=yd zn~*-3m5|cGo7O4~D;uK}knrpWlppPY8N7>6lgd!*ce0ahfbIQpJK>D7G;_%#5|9AO zjJ{S=v9-4ZcKhEKdd7S4q9#6T^Gs}48F^1UGs{$HVu6D`%NSd4-~Rx3Et2GrzG(Sn zMMK3@^!EvC>3fYz!@fITm}L?+Z&5)j8n*JhjMt5WfpkCx@6C<(BG?zvIe?F-)~Cdg zrnp5i`GXF?_ZY;@>sd2KT^E*z*8c#)mcn!rjOSD3xfWMkl%kwhm?JSUzN4x1u>kNw zf_-oTk2so#EzWZcwe+Nw3J{jmR2}tizy7e-#p)__&l57BnPjG|8r4)CDYyp2``?Tg z$QK|zJ4FQY)0a2#l$-0ZvAE=3{EKaDRd-O4(6b@Ll7BByp3v6D9I3rInYh}YDb zta!b){#a$CZ~0`|h)0+h!!Wj!f5=}F=Q2l$8Q)~b2A66I=>}#Yh*f3+CyH2OA=Cck zZZCV=eZjuon9VwZux6RXT|`eW%ZBm-E_B}AwjQ`Km{iQ&GcwMNtqSUr_PODB+wY3? z1st!I)Yru^Lr&-vnI8QPO1$fXNh|A^>+6wforr06bS#X;f(h*n3|HXZ1n8$QpG8bNH17 zTZ($84w0%UP|Au0#=u*0M*Q{|1=IEYM?oMtYSb`!fdDBgWEtPKV|`EM*;?KGZgCGUNf^^547Biktj1WLS34!i z-1i5#w`@p`hO;}!9=0i#X`q`+XsZa(CBF%botEbMhQh}98IokQ8I4woTKbVfo=Q(=LS|Hl=qqK1=@q`PSp< zi2nc;^62Y+AJbP$0H>*=lt&aXlP-w&*y%b_`>`Z;9Ag6=&Wor6$M*63_$=0v%z;~W zRIIM2C|tgyDbK1BSErM~h%72uR1$8I1I@|Vwj;l!%#ms$&7_Bg>&($ujisjcz(lhwQR093?_)t$VXswn|<+N_10 zm0|=kF>nAXMUD3KKAU3il4meeGE(KwC_&&Y+MS$STIS>%9mhIx=(E{m5Id)2 zw}Ju-Nl8wXGsQh zcb7+2AZg!lUSf9^2g{@#iQ{X~^R9~OUXH4!tKQoM5C)k;Sbw_q=ZjW>EtE4&lC*ic{{SKB zhNc}AndJT|f{K;7rAxyIH`V*QXs{z=d*dJYkJQ~m)IC%y=guL_>S5X$^6=p!2Ij)x z9&gX4B~ttx_<<#zGCFr%T3EGYM?vlg*RdX$MQ6f)h2()xyNBh+0~>+NQk}0 z_ZXX)^!{s?K@~+!9G@>PqLS&@={9TnSdn|%k%(G@Mxy6Q7O>bU$Dzs@UEQ% zO(tL^qpcIHdxT}u%DWO*pMU3#ZanuZ5>w{6o@e4yO$b?HVqztbf~*L&$g%c2V-@L) zvaX?^nv$lKqn#ISW+*;oM z0DO6FuLMt-rOvC{uq!@L!5}3}pv*EDVb1ef6-wwTCA6X4yhiaH=|BMIzo*{?dVY-8 zdF7STDC3dho$56!0)GHb;ahgUpdPrX!_qKIMzms>(dGms(naE3R14gb*xP#!#NyNN z@{X!nTB#+Zp%E!59G5p?*hV`k2HJ@n<1;8m*xcqje~MFu{t~fXp~?j{3T97R5fTy+ zbeqgPN4pKIIN+W!+?y~k#ZRLtp^c+bO!8jryl{Es@%=B0PC?W8R&_MlK6II`T4<-0 zm7%6-WMtj6l)b?mk8AUT6--&FR@SnBeiG5#=So-u{68>KTAy zCO~hu$y2DR=F1ftC@NBN{{a1?oi3i1w)_5m*uG7jSJS}+)DqKWm5}LqAz00)Cw3z1 zN@fzxTl>0}QX5E8whi11jtJ*$7R&1CdV?^@@>=}z zu1OwbP~hr`M4OPH?k#XMf$ML5JhnCdXE%$r4QVdAQ$9C!Oua|cbXDt|!wFIAPN1d9dYAT$wXviSz@{Y>rbKBjrp*~3T}{t$SPKgqjfdi2 z!!D8OE{w|O&1mYUs-B^ssH+kiA!H;=xwe%ff;SD@7)gcNvY${9=1{ndGci_uH!9>C z4U_?E@3(wX>A4uWn0g`yK(WC7eoDll&2_t#^yD8LejS{?nQAjU!Z{>?gs_Sa5=coF zv2BANUfkp6KZzCjHEw@bKTj@U7Ff@!6{;Y)C-D+4bli*B99Vj{q+rTvGK~JD*1=1d zmX_{+>SR=5s#3ftYm%bmZO-_uNte-8)<4Qu$SLJ=ViT(PhCRt7k0`acBy+Y0qjbD1 zCpuhWX!G1`eo2zd`6xIl>MVX67bHIlw%hA`7s#HoEvTi<);fiST&z+`>|>fr`h+17%-aTkcA%EU2XrM$#gZbiuB z8+q9t97NTsvJwXtn}avby3;bJOy<35XsTWq=Rg4Qkv3+xI?2B_=NfGlCR@|FGv$+3 zRfT$%SZb+!x>VROEG`Yf15YISV>w)}E|F?$MUen6t%bf)&8pNZ1i;T#JkQ%D1)<~) z%NXlCwwElcucf5Ssp=_WaA7f_26bY2^eT2E)Ep0lW;8UBfQW^m6C*Qkr15UoKA2u{ zNf^&$ijCx$iJ4*|B7ud-1OvYKg;KM8lmbaSj-;^jY)1s&Z=o3VaX0#H4ma}(_-z0d zrO+~Ex&B!XPUewS%d1q>(t})QlV~sQ6`@7H6H5(6k~;P*FR}%(+r9S~T$Jeyg=UNceZUtVPp&wwtzf;shR6Bh zyPv(%L{0F8IY8OjR2C1Y`ea(O-!w|Y-tTOJRoBoo6HbqiVq^Y7Y zs*o;5;{0)gbIULUMI**9*#X-AxEDPeNk54tZ9rf@6B2gx3Kf`u2mk=!TzX%>rX;-H8i>}VWRwwctPT6zbBffoRnt?b@gAWG zwabKXJwp-*!TNs;p??Ob4TtY4R!#-BH^PW!osR0>CR3yYylG2@XnaNnVH>}i$b^1v z!NfYusuG4!tV)yR_9Ku_Y)of}u?CzeJBuxV{{TO>8k(iid^JW}l11(1zvqQ(1BGI5 z4b8sj0i}3cM!>Rtu0OsbNfK&URh!Jkl4~*v(D+J7Hw23wef=>WXepn|I89^t zwOPMBHI6;ko_o#tlxnJZqao>B23^SDll-vlH9%Fgs!-ox-cj_!(8~1o{pge_HdY}0 zuY@deI}+h#Mm|(+?d^OXpy8yV@;~OK_=*VC8!EBb9{5DC#NYr$&ifKSJ7Egd3P^c0 z2H{rV{(KxZB+#rCwSmg_AAZD)>2*u`+TdSp_V*Zj@w~Rw_Q>`Qc2)}7e9#1vhNhi#3lQM$54g3D=Z0Xdm&91A zsb9>5YHPG%eeMT7m{kPSvBw-#wn)(2M!=mvpBRwxLL(wnWsQZ23<~~SoFGc(`78ED z+~IY?6{#TW-RSZK=s;ZI2n%~bA9NXa6!>rC{mO4kJc`g{Fo>m@%kU93n zcsGQvt z>_Kz*fv~wgn_C}X_4mYCdMc)XRAg1zwKYs_u38xuLmMfv3@mpb-+W-bO_2OS_<@?# z=Le-}DI=m(Xc9_DDdd?3=ot;QY{ZZT`i9(N=)TVNESE6Noj@KOU9tZF@w&g+DgFsM zn6nq8%EcW(kw~aUMG{2hqTGv@2IP&l0>^ukwTXU@8C@P;)ip2)rA3lK;?3d2;dqbA z3kE#wLATchbFP@pG7OtCq3RrtzLu-NYOx@tS5@Ex;tjOjg~#xlZE=kw;4j0jo9d2^ zseY$|x{T9Ei7e8(DtHDlAY}wzGo;^E_a4~a&gyVOie-C=ZH_m)^is-s*<`hEnP+gd zN@W3~qY9EwPJ-Z)NDe@;zWbhRFlwj5$YG+XhI(rG;Bd1d=m{BXu|OAh)yCv$;|z5u zr|EpoYJ8umR$27f*ZeEq+HHFgxgGFVptJm=ZNjjID9y2V!m5 zch!aU4q1@p*=}J~N0L=iM-`Hp!!UNK1nG4;iDm_k#`hOI40%{uAyBE$kaexC9%G@v>6U#{{xTOB8hSO=f+Gy}eK0 zA2jqXcKIe_MN>r8Ib}3z5^9McQW%nMq#c1E6R29?TKi*t$hwM)H-SD>y-SrWUIsUR zdv+d|^~aU=gAz#P4`8PJKa{;6PkRl5cSq_aoRXu=$>kbH^!j2qmPXPkgl+}Sv>>0q z*B*(vbsDqGrD|h_QKhFqRDOpPDXqaD4wIcTI z#s2`F1<{VhQIiN&vG%00NNwT0!8@r-+U1o)wp08XOUQ}2aoa8#WXj7ky0$H^>$!+$mH?exQQQ^wM(2r1e{`~`rxKHGDS z{OD77v_Gj9+*=M**U{3!;#ADh$FMJ?oj%qB1~r4SkRM1-R!>Pm)7gbyYYBQJr(-gS zG?pLfByn?Le|&t6pY;Yuo7JS5+>+2k4BDxwC}2lO;Uo~7k!Kd%*x$ZBl=$P;SvEt` zGE-FM?F5y|SHh=-WSUs_45HwLzZ#Dlk-f3#0~HI zo=M*yPWB@N_zsoei#s2erT(j%soOhbTjASgwYmCDl0#JRquxnOB1Z#rr?)oZ;9tHr zu8YoS8#Y*|YO54MC~A17T`zEM!HSYMJ-7Pf=d`BHdUgst%ATp_|)7fEDH0!{0w}Pslo1fE{U$O@K@u?c%iD3iC0j* zM4iDS{a8emHEh?CSezb1t?%j2d?=)6PMI3k-$)qojcwv2s!hd%DdW)E;}n}Cy;Zj5 z$#tsJOu}s^kAdj{Xv7<2()3TG# z_uB;7oZbp!I)ld6rA1#OsWwJlPnP~M5M}|0KDNI7v400HK|2V2 zZZ|!XPf&Y-Ylti5zMrPb@_z~p%z;4D%N}uGhFyd-1;Z?tSsIrH(_INM@(Z=cv#op0>JED4DJXm2Uq4UvFFj z&FXTgs4}|xSEYKnqiRX1L;x)^0CdP49ouqlciYn+V1$gA+dOXkUke}4vY{z+_$xr6 zfhcO~vk3Dd?*e?gt6TR>O|*sj2K+k`du&h89}V(W%erYPo=nD^M8x=paiN9o3NH3i zH{AEf&b!NnMvl zKX(%*tK478PT&qb{W0Tu`D6=WKo!uA&yzZS$;s?t@lg;{s7U952zsp@lu$SP`b7z5WRR)s25=wdxh zzQ3)zW6DDI$nXKB=^K*^fgrD)el7Jjb(?j?Pwd{G%PDH;keI5g>BMqKtf1M^yrq=h z&12YOIeDvU^Xe3m2wJ)dkyBAwNgkO=AX#+mpaXxc@I$UMDk}c4mpkh$;cI6lOq3a9 z4+xy9+m;$YxZRHAUv2Ozx~e#7%`G}XPL~W?7Cscmo3{)=R<+K=@6JBGi3f!X8V7HW z>UTeCSQ$?)C(x^*tIBI>sh$doSgRnAOCgS(oT~=1kidWm7B;cDByEciPf*dZ&FS;0 zqO73J9zmrfBUDS~C5Sgr4=1(pONYlDE}14>TbI+zQpr&Wh1^M`66b3h?R)RoV#|=w z%N<=#O;rUoYtz6L*y>R*y~ww7#q4)4C$6OKULrAG4&q*wln&YujBm`V{2NODyNUC01 zn5pJOGiZ(3jerY%Hs<#?=Zjxn1)6Ijad<&I2!B-5D%JE05c2&6^_PD?2jW4Y$ zsAuVTD za04;;DbtzeMGjM%=2E=$;50Q9^x_wdP5idp6yn71w>V_J*5G8w$G8^hKbO<)FLMiH&MAf2kWoFaf>J;1%b|=#Tv#*@Udd^I{GnQI}rgTFh z5;Z3x)*ygy^~cn4d48jDf=ur?>}ww-&xP?yLU*hpdUCntY~w z`j%$4h>TIxt^I7Q8sC}5SDJh#>uk2Jj7ODMO$@|poKv^%o4AocBwO0|9AnU6b&i`f z0yw0vnxAugQRt;7;srKgm~_oXWtqiFC!(m1nIGo0F^yM9up;aY)wN%JTw^YkfgOdm z_s7#T-wS%zFzAY$qc#~xGa+ay1!_ETZU_JmI5rjl-otIU#(7cy01tl=HMh${m(&2v z6pE#fSpxPNt;joH9n(7240@xIW`Yje?MN}9lmZ+(tdtXCr0vcM!t|?`q^S0Abi8EU zjfL(G-cxh8Vlir;;J3u+NDb08%v*32t8MFWZGm+i57s$TM|xy)3}E|zHN*y_{B zRsf6RXW#KA*^;#Ui2nd7&xzG!B9t{U#+h4ao<&3w&Lmr+TEHD3ZY{mk~#h@zw+GefO*bYQPcfHNOEktu1adi<1j5ot#C2&v_-Z6 zgR!_9TNZfoobHkctLkVe<}WLi5l$tGTALLBUq^6mEy>0fL&ILlnBYHq?5Mga4LzY} z*`mEhKxAh}Di&1Jwt!8Z`*$|5zhjEJ+fdWZ_{PUi)15^IM*jdcMU_iRMW!&+!#$C% zw+gLrR2!AIp|&!~@_g2oMv?ORuLww0WblaugYEXlz7A6zsg^nQ3DF1c94TA#T6L@G z3M$P(S1&#b0tvdk$>Y(F>wuKGmYS&y^=%E(@q|rUjfS1Oa4+=5qoO*7o^bgtXOTny z0Axidf+ksN0by{4#gsBFy@`GYHzt`Ux zolY?JjR$tAk-Kf#6zZ(zzboljvg#5kYw4pk6*SY3@yQcd6}xgq+j?IVzK}D=nt0-B zHJ?d$nJm$;ZPZ+GVl9bP`PEHdRc8rPE>}|o&7s}bQnD|ZK-I$lpjg=40q=-3F;isu zgwf`d)6h~BG9m({oNx&Q`<^gRLE%7SBg}XC+Dk#A)5^DeV4{Mfp|bqps^Dsskix3M z?J66eFS`1k*v^bn&(TImqDvUk~#6D<~>*=_9nyPR|;!Eb`q*5vmd|zJqT5xONL)i-mQj&MJ%!p9ix;MM-E$n z+io|vsqKg5Kg5v6MZY@2+f8%o{@?6T6GZRS+k;x^B%EVadBZ~mS#1nn} zF_}Qe#Xv8y#pB{GZemr)-ks$!#=2*ncjuMuz|(!s*1p)Hz^$uL*sZ?UyVBw@;)ap( z{gd&UTNM?5=qlm!PpO1+tX2h>g?3YPC)2p^i&sN{^I~3#bK^ ziraJBoK(6>rivNkC6VKuEm7iA>)bFP4?%lx_P4F$D~~VvTI{B(qsN;`sAPT}KqYK= z76QXhsUFzF&Ml6A5|8@es+j_vsaJk0MDG?wR;xK-NEzNmAwrfV2KG0#{@6S4xoRP- zRa(fUotMKg#G$PXuEbi~kS&0nVLT%(q40A$h}1yJ5~RMSI|fS-Hop7urr4M8t2CHa z&{35%^l``@&_U~#xBQjZ7#h-jRPM5?W~9rhORvLVjmQSuAEw*k{8J znr4SFhH@EDNUCJH0WL=SdjpHHv1(Fe5Dm=b`jJ95Ge;&eP2%4nUhPW zEvbs6Yo@G;#mTmpQE*3VmIEH^N@1608HE>~2l;~D68-{*alfwn;8hg5X(a*NI=Zr2 z{{VY?;KO`YYaRDe2BwE7zHp?Ky|_M}{{W^YQBDO~$uZLA%GO(L>)ZbTc$J%F(Lo(O zT00tgi2nc*n~@;4pikUj!GW_THFXr!>nzZCMWlZY?0^Eo`xe`dPdJ$;X>Il@T_B{_ zT4qqz)-6<2OcilsI-*53**Ll?;`@>Ww>v|93cl$+gj{{Ww^FWD>!JkZQ*rOY6xZ4aryV7C7Nw#j}N z*zMZ~ogt0k?R8S@owo=N#CkeYk<(SvGojjvepLSe4Ucc_i$*~mJe3VoB}`g~1u7sOdwQ_-{s7lN zD8JaD!z)23mLO$~R0mlABIIr@f|&(X0%mbZI26!^8obPI2^Sssz9%ajx-&_ykIHFU zJ|nCD0Lrv1jFQI{L*7s=- zEja*z@_MQ&%0NvtL_Ujt{RaO4?hY&cZ&w9PeKST$aT1vp`v$)r#?~KfPRVK|q>ZZU z=I|-a)o*9HwSc(axW zcS_X5RYCKvBB**KG1MpFV+jm3Uu%u+Z*hu0QPRZ)T2BIqqN!gMBTzs+mq@&Fx@-K6UpI$f8ql8iVru(R10r&i{XH7pFkp+ zt!+(mtvU$>9Y6iJ(U``h*cY)UNo|R?*pE?_W|U=2^fgdw;Ji$@`%+Ajg^z&weqPWP zEEi9PyKrr7@UPgkwh>8|L8Yuiu+*RrvD+R8{{XHdXr{xr&0ZLd1C{aCO_x{JR%vLa zYsOucN73Q{J8il4#gi<^>*yteJEn?!wbDSrBhxQ!mobNg5XmWhFGRtY0(o}rp2C)vb zj0YS0*a3a-wmzXsT1Sc$dIX+0S)LhQFmx6IYmauD>o|x9rL*I4iSKIxDzUY%#x)=9el)Ef9Sv>Z60>v$~nH6kW{=b;V z+3nL5)udD$zo)ZWZx2H)URbfrZf@6QBVuAqmep=HlO(#io^;{r_bdFbrt_H;3 zGB3FR-)ufFY%v%FZI6$LAFU}E@rLa0$$X`k=G9qdO)Rlj+Id()QDh7ZWL({Tpl`pX z4&^zVxz15OU0dKZaHZmt!8(a8d+qJm?Zz+tWANiKtoVVF=KlcxFP?{|6u^~K)U`2G zJEEJjX+jCxYg+qbSEcAKiLQmJV_dogDdD(kSt(V38wXYZY&-i5H>h>|IOA);vUjjS zqv^6&x_E$=^03^4r|9XG-50{lW=RyNsQG^qJ6}@j1SlYGF=^?ahxtZ(l~l!?*H)~r z6_nG|3&wz4hHDiA*x%ClzfgP<$fBfw*_AV1`lBF;koiai+@C4iY!j#WXG;i;MP+3& zXm*8 zkS;;>18iOTXQDboETNfcdUk56XOn-Nyp}3Xotx`!2YhIeblo6OwOOuXP!ck_rkLs% z>=<0{iS+peG;SoP53m*mfw%(J{-oOc;~Ov9EQ#5n(zyL=^jfXL)kL*ZYI2;dBzfw3 za*0f25>geB_~Xmo+Ihr0%d9Ero~E9oEzI)eia!uZ6*=>PVPFc|QS1fy#rd*oG(cLF zre*vK8P(jIb{69uVHGJ8)R?JDIWfmFg5#bDzV;ZP%*GRPG`s8n0BX;<05;it&GDl% z%sRIvrKG3Jv*>}UGI*Jk9t>?|unJEn`{6w^)V*EP{V=pyKTFqUl@dDZohkK2p;pB# zw_vYJJS9Y3PfX0ysbws>_5+*kzyM(E9Zm5y za~7eOrTUIKh|ox>2&as!ceU4>BdOW>6V_N6<2SXQ+=!nT|)l=OnjeFo7ZMD)H=NG&ncPRr6t{u2KK*m zwms)Y>W=CVxzV&WqiZ+t-}p+SkpYO%QL>6Ex6V8`^h-FoSc`$;4oC*}`(r`NBkCG% znw5nVeho8+BB+&*Q<3Fe#-$>}F5B@9#7O2}GsC+?6N0j|SlzbF3y zc)HD-&J@E=)ljq~Gtty2mJk-|?hW=P_S)xsH>gbKIjsZHX3J&3QlFI5zsOY7<}*wo zBm+m{A`4hwOM&=rw)=tg!5q4LxoV`Xq$VLEEK{V;N=FzYNjr_N-`|eds!Nu>V?Zh? zswm@$=PYSMw2~-Q1h*S0<8!^Sb?HiKob#%eF3BOOQ7~1Vi2cGUF6|&ItN?6n+ikbU zpUP+rbBX!(1Nr);G7@FdH(HlWbmaoX*~%p<&rlS#WC~+;17JxvwYy@uB2F!)=;2r z>uh}QK1n=FFV*$zy@B~pJtUn!4r@nMmNsb}Bx;W|Q%s8~acydnAlMRoq^{nE z*oB%=H6~>uR#(i;p|3P?Fjj3B3%!XKu)n6__?^@BwcS6R)8=&VOeCd|CNR}rM4SWo zSwK4-_Bi_)Xc5~zHXH)5!1GaBKU8&2SwquH)49cNW7HW=aT-;nNULK}MLKyxc#eT& z0AEnj2caC}I;N?OmPlfHd0v_z@Vsipn$30f^DX^_mfM~1TjD2OR&~yIO<6QFw2e#z zaK%O$fEN}DA8u{7!r-3x5bc{(*Vg#+1)8ZIXIhuk^%|Pu;cw<7TeYv-oKnKZFvI2= zTz4Y-{k;&(?L^W$*Bxb_bw5Z_<@FSFpR=;bG^vUQ@nK{9PV7nZlE%YfZZS-sEX*nD zqok^eN_k!ZDhYP-71k_02)E~pr%mRWLg&#@^`#YEJv>U<*Ib3E(@4@IL(38Y-^*-9 zj<=_VVk)w1l5n$^J{3bDjt~X(hJBf>+=H>O2MmGU?mRf-q0hsAjj3P`W};PP61qyY zrl_xu7N5+`G31ia~ZcUu(Ta`8f*IOO^ zF<;9+W~{SRSIQnwGbC!7wJ`?EZHG4VZ~)-(f_*2{8I=&IOuiIxKD3#ni5$9;HuG`- zwZ|_Nm00D?`gb|aPH9b5rW!>7%#4b3lwbijweCgiZEpCs zbf;5NS9I-FPJdMSO?@*4TDGN*L7?5V6d-bMvvNm0u~5xt&vPvDY{xF4GSgI`nmA}7 zSi$h4G3xMCiyeq3(&r6z96$36S$!QM*Tb38#9*$1syl0!UZAUCsO(PcJx2J!ml#eO z*&Xq{i60I)?YgQWFEkzgRbw}iX)|iY$&b%MnoL#FQ;6jCy{~1tBpdUBbv4zw-bInp z=XByqDkz#LK3+9|s*Bt-nog!VNwMD=_rkx1@0qlpJCnmLJoM=r*?wX;rMm`gOxys! zh+lp&o%~03r0A@pC|X$|S`5Q9fN1T1Ni>L%-~= zx(79&p6Y*1^zKh5O3V93D&`9Z%&hcvA~v2NMb(h20#|QBaish;%;@r1Qm-n^<~05| zfC++zOWSn=fOQS+@9r}`jm$F2x=K8q&0Moif<|auplNO8Cgb>Y+V|X_sm1>QBY`6@ zB|Q{X6Gt&g^0}3lRAm4RueJ9ly|*Ca&-Hefhes(po8N_=*xY0Qa=wFteANm&$x_9I z-%9Ea^z_4yGZ&ahO<}Wciq-@X+#cAOkcN*cr$aj+L;yrCH2V;JHW--y0J^%=2atA< zCzNmBf7c&380VWS)JKT=-Q@tT%Vn#l@akyG)0>+#L4iK{uZc8?m{3HKQ{~Rl1sVcI zBMbBw;{_?I5sR;fQjKs+k!$*F4;WNyAOK4$F=4Q1%92I7{P5OB=8D#77{ze@@`KgO zTT>$!g_c457Ph14NF4j(K8e9gAsX0)OOkKj+WTVCk1?|cTZ?dRexF}_H!KoMCE6x% zcPv`K{kQePos1l8l2AJsIQfmBbLF*50jv@a4MpAbkVn)LhWsgGa0nosjpy*qImmCxy%yEb^Rfye%=5pfK*o*x}4xE^V(6aJuS>q}R`(S2c zkxLw+XjwzCvnX~p{Wie17c`wgRhl_lxM@LzY|{9RWo{H|)qm@WDH@OgL}sd=-)P5fCfKHvKU-YdTF%*}*q3k|zZn^pkS3AU|MlwmSYB+&rpF z3)qb~k^-w}c%UkOhzpOMA8YZ2ymXEi!|@T6Y+Y`DJPm-5`EJOy z9zxQgjzrj-6=VGf!&7CH4J*j>;Y87H%19Tm+z!VRJRlsm?--F_$}rtj23m>0LNw9A?1G!M#4OF50zyAg3?_r)_a_*v97R1!o! zCg;-1s!S^{m34pQRNRbcSyMB>z9nIm#kGs?{jol`!Z8gHOC`I;)+6hSkabL)L!vhd zzTh9!D)P!T(6#fnXYfa^p^l=W4zF67t#J~|Dzu)&lWYBO4L%h7RPoqrtyGK_5*)xE z{{RGBZ;zyDq?H}iq`;HqSC`9f;`ZkR&Y=#|q;}j|LAm>5alY5}2!%K`-%s#}P@|aF@U7@uQA*<5++WZR- z$YbnT=dLUk3e}Clxf4bhZS*RB;`pR>wFYZZ9P;L!0ZY^nIu&!5=8g*k{{ZaR1Nmcb z3)*(%(`JFU^8^0?`mfbpk0_tS7tQsZO`m32EoM`h^#*2W>P%}gNHs>q8vByRd)tA% zhBeNM_<;^Zl+oq&Ij&OlQNbK_bBw*7I+Y2cF(VrtN}+FSjfULfELqpXY@P^HGWbQC zLE!=m%@>KF@oh}P;QcTcJ^0Z{RhRzHi{ZXPXklV$lByEwoB9E5?YQF_v+L>&5i=Zy zU#kH5jm@jE%G$71Q{rDxtmFlv} zf149h)Ws_kH9yOl018Fhai;tG?R;6YUx~e4na1$YCRdijEB^A9nk@?a9m96Ljkezs zD5dzXndRYQrFm&{NK77BBPYUd-JJ>tlWn%P*xH9yGy*v(qWiwj-jq>1uJpvvP<0ep zg%({ZD#%ttJkCVjoGVC)*WE}NaDj|pQwZzCFtIfil&}OB>B0~$w4gI(~@{=^QzyLE)nH< zM1Ca61aNBFL-=p@7!e(EYtbzXk%-;2w}cJuaUfKJY%>WdkddhvvA_B6>5nh((md3g z{MN)RWNp&XNQkG)YE;7wQU*{4ooY`P@7ma9@>UX-r>F)ZE^igZ$8lqbh>0AYA)b;@ zNogdNNny2=THFnX-w(%{F66*s3`+Q_fd%*28{7W?c!M-YcQ@>vWlpA{@Rv+d1O!;M zxgNs%W0e_PRSV}vCdSMxFYm@6$5ztGplgl6BpFmbuc#b-aSp3Bs-de|YK+S)jh(g# z((1RmfJN~wk{1dMK_jCgoDo@affD}ent2q9+(-cgeYe9B-eprOGwWCvsMYbBWa6$AuV4RudMAW1M1a8fwD2y}T+$lcT7n*f7 zE>G&IfA#$E{3+qH z9a>nMA1^-G&oi%%y$hAqqE+Pi^+vSw%M}iQq-|odGM4q&VmyBy{u|8u#hbzi@|meE zU_OPv!Hom#{{T`g4iOspD(=R=!r+|v-_yC4ca>98Wt5p(4;>zC!f6pqC^^&`z<>#D z&9=wO9Z#6SK6zJ79P+(b5eF@wt;{tk5r#fzYx`#EJJf^42X{PZe%imM1v1{3NDw`57{-Nt^eLJ9G zOVco0?|k+HwePw91z3R-NpdIC)x9i`C1lxMToWZb_%6r_EWiPEYk_O(*}Xu%G%lQc zqB}HHR8ZH+OedzPfpqD99a!CfwSnIEz4qSqT#q5F5V8ZM8m(zQLVc24qQhaX)o%bjFeZtF- zG@kpdi{Z>!O+QZzw<)ZGwpb)*s}afzB(8NbpH6M|KA5vPRMHBpOU~O{+ZlIF{2Z*I z>RMd-Ji(~wjG}6aDo}Jt!*Bspq%HS0^*m!)`Ff2+JO!5a1dD$>eAlbP6K2;F%k^${ z>4WfzIjtZ!qa@s5d7V`)!_Epe@Ww&Mw?oWUvthN?u< zU}A8m~Dm<@0hZ|gZPM${?M~x-UiI95{$;TwGf#LATQr0)|HGZRPcf*Eg z?(s$}2B8r;So>dl;It4dsc3sf=VY%Mdw^0GCy)vKFaxafc(Tlvt$YcDf-@nINE5;z z{!>%-Q)}`^q2mUg6pcxQ$ci?wVlj<>#9mpQSLH`mVjCvZ0>*Bl7t_3rq!w{~t?W6* zw?)K@D>00Fs3x8F3k~Y7vFh)LdDIkQdb)(AZBRr)lO4^Ac|f_|+#YaSD(P0NicE}V z2)WUj+GKWMrDH>7DW_0vi00ekim`fN|+arU_&42&`Y7}kxp^!=1d9PSMdRdLE*&0sB$rurwSC_1C0vh40S8Yt@_xkm=-!0BzrBH-BiW9N$h0E$_* zQe^1PyGV1)u2HI{s*D7hRBi9SmgE7*2evmagxPTE?vfO=$swYsf0(1CnCdV_{$Qtl zxdz>?dB@KEsD!&2vP{}_>_Me_yq$sV@0 zx~7JS0Z`FNrsBu3HodM#7bCwIH7u^qS>Q#CZ>cs1?b{ju0LJ|7vQC|fq;&jQ-5o@} z9Q5*B*xOP)>~;(W-uUu;E(gt$$houYU#hktk|C+5>{riya~@o<=9%VMmd`F(Jz9pA zwtwG9#kB@NEu&B!!(1EvDOHt|%a=(rQ|JmrcR{dIVlLgz-&22V8tRU*&bq?!R(Mp@ zP`B=*jx`Caw#G+0w%dIGwYR`5;b5kxYASi6kSQWsohSFjPw;9Qw0G^e;~#XwiSfqP zNH_W3-xKPQXS&q7UY?3fu9mYgcwnnac3M}Zi&L_JYdW3VZR{*>e%L+GXxU{{6vlLu z$1GMyW2Q|e+X60xa#r>t-SJ-O8oc$WGRhi(mQIfvOBC@)qF)GYq1@Wv>9y~%#nYve z_GV)mJwj$OQqALqWFi>Yi!ayPw%GEWNyVYWV4i%PH+yHAJf# znFxWG&0+XQpxAw}A!p2pJTj0ksv>sx{`eV?^-0XAQcAkjr$=1?)K8(>LHMkP_(30j zdtl`>^1NbbYhz$RTbTj47w5OGK5-;cHQmDYkwdB==-fh%)m4&d0*sq?O+XuQ#w5@^ zb=m4tnl&cs46F^k2y2de;Ub}!>Jzh_JA!Pd(!^mBy)wn(Oj5;n+yZ{Lz>Q$;Q=`Y2 zemCFIP18h)W|km1CsN!GafCEkQ?o|ZSM6{X#}U3-iQ7?~&=IxNd0PA&COonoLrqaC z&1GK_{{Vb8-Bds*-H#dAwJxHIDOFU7r4N5Iuo`dMwi7KiB3|t&RR;DWe|~VPe6b;! zohlwhV{Zyc4Yc>Q_`}ahOk_SJajm(v&Hb%y@eao?-hfuY{^acSgYbSAwgaHjVAW9EN}JxyIj@y|4D&&wuPAZjS%CDJ&+xL}~z zhEsA4h~D`6SEu8p&hi|-x>Qwp>5^N-`i7!6u^jydFZB+B>`3B$-l2b9e?^rXES_gZ zED)1Ylii(S-A&r$ujlE8qn7Le@R`Q?OM`4!RtlKov~y44*aEtP06h)%KDb15l;j;> zCdI5yxb1QO0MpJhMiDzFKc~EK#|^tPi*jDX52qjc z!WyFPx{>u?QLrDLB^nIIGihk$Eo-x)@IO2->gdHJr;!04#Tgd^-xzu&Zy=^IlXpmY zA$hz-Mpg#;yi1ey7W&~yJygwN+JGIx-23nM$5+B+b_Pa0t~tYA6k#r;YhisM4<7q- zfYeUNA0*eZb)|M+4dP;hU|FmI`hHmSGRCnJ7$6P+QKWr_0(G8#I&Y=xv*)CivN}Xo zXk%|P0>OLmH{|0q_zTy$&rx*-XGxq*JgHFTN>!C?Vj7!ZZ@BH=);^fi$LV<)7;cc3ll^JxP+9c*Ke?Ymabuzhmw(QPEDwn<)e|@Oua#if~4mvib%5=r;JY)+Fd zWej6#Xy#%Mh}3b&THc_K{bF~TO->zc#r+OASNB9o6C3((d=bvb)u_DR^VJBPwCZY) zOq2NGt0qqlGhk8(&z9Q@*bqIj&;I~Z#%1%>b-6R22*aXp1yF7qj&y@@G}eg60Vej8?2EOAt8PBF!_w!{CElirnb2D7j!v(p*8Op;eWS~h zO-Mz0f1sNmxf82ph;^6zF~eB&>(jZ+lr)ed0~Jl@W@1j`i+UUh>92r&YmnDdRK9(Z zpn_GMWq%Nnr2Y;@#2x)DkDymRh4)%^P}~tAPzmQG!pCdVuXFL*ZWC0b+zCD_2-`5(&Opaz0Lhs$~{g001rKDoM%;4a_6)%+y2V5 zQh5-PLf8u^_8z#X)qDl($_WZI6l}L8n^OQ3cfOtvw)p!@=ai}DksMr$X>ojZUZSLo zF<72u99h2?>5DM?Wt73EP_L3}v2j{C{MW^m9|}6_FP@5)Jhlpns~p1<(@a@V9!uDH zM*N#wY+rJZhkp|yrloppnJ0poLYZKyh`aB)2j9!bYx9q!8>#3^D2kS$909W%Sc9wSa&wuZQWcynqz-!nK-BFet5AJfn`itPtTy-1}Pf;F2l{MYn8g?#N zwa9a0_P18Lmhc7a~vkt#Oh!Q*gdk?Z03>PB$~2*Ry%%jlDI(4k3m_ zmFj7!sp+SCc#i~OHQS4TEsAH_oQ)bb)AIiSYMZ~~S_3zw@~6jshU&bpI;72WStv7E zD>;sVnaY&_kje$X-=D51G`%^VR#gcoavaVmrMQaJ@-QR~z#wmryPGx4gask15K34R zDTPVrjje|pH_ZNEmYEuzkP=j|Z9~{?W41Q2eYbQlh8V#k>G@J~UxG)K#iQiDFoU7G znztjKob=XY9SAVIv6z5uu6))OAQ9_|Tu@I%TRl9YNacl!F+~q&8(QOQU%%fUprQ<} zz66Uh%c*NjM^ho|V<wTd+-O}jj>`6ZHQ~GE5DB) zujsEs)1sBX(|Y)usX9+T>N-rfG|F;(#<9!`4L}sqY7RTGKDYfa0;{7s!z`ely0ak6 z>8YXr0J$U6utnb2Cf4TI`^P!YXepy_nay(AK3D##W=%e~w*LU%8TVWD$HT1SEUoGK zto3W@YEUfkQ&CAHxE3QzY5;Bl9{96^?LJfKjfUIxJ1K8XiZ*F3-F(fGbmn>0SqIAG z)PFxeiLA#0Tf-x7F*X2^zqtBhRcFFaiCJ|NRT+j!SrsvDDB8rDPd|l8w;!fHi}-2q z>nZ5Oi#5noG^~X{n9r21}3d6=0XT-tO1>b=46$C!{V zeFd>q_@hPC>5^q~QuMb@r9N9Uj?}b|EbUSs!`6-(FdF(2_a^o@yB}1_acfI7`tBD$ z7y;#V{TIv`e}PP1YKYRHTm;CIEND9$FRt&t?7q^?Sug_1><$N>V@2Wv4K z6UP`oThl#TSvgsL9_6&!o@XkQ?-)&D*CZQRZE!mrGY3QU8s{=p4vJ`L)o*BAg+5)v zu_pJu_}><$&c=`(P8VPM5Av$N4esnwY>u7hudAV~nkXm5S&79y+X__hH=;b01fkKB%{o_lOe2w zNevBNT;lh*+?DdT(;1KJPQaMO3@&?i++XFfx>hl;+8A!Z`7e&>9-G9qOcKg%>Vw#>ffzgaRit zaHQlpaj9r(p{Rkh$UI*W{L6lPr=Qmr9I6SDmZmy~q%TrlHF0SLueR3$*1pFT`01-) z9wf0xO$-t$GQ56mEq%eYxwoe~V$GD$En2k%d9^humHam>0SJVCEl2oH_a9M;8E^jL zcKsDe2?uqabp;f(Ih2r8z4t7RM#OszLw7?=v81hV*V1?*+>Bqkqv4lSQW|d(nhKcQ z9|dUCvpQ{N*lY+r&MWmDH=EMIQw?TWQBJU@%qeKDN|IC(djeG2{+QB(HVI=IUJ9{b zfSu^s6@F?L2(LU$iu#BsJBxP)_-m^v-aM9?2cD75G128eyteiq&k^#Pbyqavo_XqS z8C?MZ0Q^AxkLQ9tU6Ue+K3az`l$Eh$i1=joA+B{3g_73fgM6ii4R)yj-;60m#tYN* z?rBw39V|IzZ;K-ZP-7rm@xK@>pAUMRtb zIgr4GhJj=Hjt&XpAnB9j7Aep4GS)`Z6sNATzP*!aF=K;v37_~0jf_yBr7L{OX5p& z{;fctsNWI=Lbc;-t6soxPt${l?L8@-Rz(p>_(Pxq#}Z^UG{6dnilGheO6hTgx{#Tg zS1CMekhN>({s|P1wh>hY8@7a_264GDF^Wa?*b#gw<`TkM7gh)OB(ooJ{{XCZDQVs{ zj>{2m!jE=a`UBe%3z}>pd2Ip|IBC{5r>CcR5;&MKihWHc+t@KWu8ddy{UO)hCmRSi62_mw{+%^YA~b|4#lO|ZP5uew7vf&3n$%Ozy6P%0HQUvBo= z-&{7*)k~StzL}#)#Em1HJZ-grHr#J~R=TgCIyXF?`Ho3SC6({vQ-0;RJe2@`U}E$v z!f*n8K%U}{{7qj?)W9M0R8&;zQdHb0eftmPhhnNRQLdV% zb_;M`QUD%@YoE40R)UM;zfHBHeAak^l~89BrH}ee&G0g_sXjF=bJEFOolNHNIlj7HtRwi_Z+^AQ6^Hn;D{ z9=wxr`eWnz+HZ_mjG^lvs3lpA*_cQaTYK0Izbq7Nm#ye&;ghKPt2UxpA^!lUSDsW5 zs6UB^`gS}6f`77swRtVG=n4JMf69P3Tero&iRvDvh9${!l!wNF>13ptHKQwk5)yWP z#QGdzIcLBQrmL!&n=Q;Dp01IK)iQ=iVw7C!?7JJ^j!xLC<}U=fj8ycQzGSrXC}}Drsvy#?l4K5l7TbWFwSeaveI=Q= zk(_v?6hHfaUHAAb_vObk{{Rl@9YfI>=Rr-F#U#$34b{s@B|=ED)2bnn3NtOqEG=-i^tb1S@(=iZpsC6pdGjpLLzp5+ z7h0sDIRTe@?_+EK04!TNYv4CT&_^_N$vtbool7$zQ~vW;zoe5FSHD z`))Ti&&RT{9uJ#QWuSRC!LgUat0U`_YFiePrV4bC$o~LIDoT;>+uITPVU26-=vHQ9r0u!B{+Q5@!!C!3Y}rLB=>bejQsOoPg6I#Mp7+PH z&xJn@sipCu=_*k&n*k!TrODiY+imaL7{ji_;O`mkb^ieNH;+rTWtc8$u-f{o6kT=E zjZz~20Ge`lCv+ydHV3&E2W(G+Jjhz3!Kcphim6$32!4G@3vPCAr#P?G{4VHvupVrJ znPZP-NZ~*ezXN~I0IR+Yd^tBtiWv|i9X4$Qdg`|4wY@Qn*t%&JT=Db=_X_@*eFD7a zIrd4EsrPZ{AkN7z=O3y99iwmNl>go z^xM}O4sFsO4Rbu632FLoBd?y46?kEWts_awsPY+6tO4#DzA1U%{4wOLk1kWxwGi)c zCxke*+guQKz^v2$8WJjPbRAq2vJEReHGwwb>fB%38~*vz9}H2qG0iO}dUc!iukxuD z%-bb_V_y-{nun`1Cdzt!vRXN0yfo4km19HxmO8h+_YKDwX1S)%yd1zqOpdWCJ4Eru z&ckb%!MP^=g~;O?U3dI7b<9tuin}kXM%?O^lHP{IZ-G*L0_$37QF9rnDPk-Uojgf& zllVuK4<_GB?~h{-Tj`EtLuY9qdhhw}vm}AV*Hl#sT6wE$Da}S}NeVQgp7k>wQK&q+ zo3K&ujcD{IK<5nt)cjD&g$zz3o%}U`rI&FMv9l6JBkrJZDCk1o^Ens4U9& zjzF=2z`eQW(;fc+^l$37tMK5cfXAejmO`OLzLz`p+Z6J;&IF_eWoWD558NiV9!7s^ znegi=_!&!0D9-bEX01w-`^w2A3Q#dn6vRiAuH>EX$GAS8>Ys#kG#UO+oOI1yd^6_L zOG8siLP;GdBS2O=jhEAZxy7b~{uw3{$eF)UG-{wWs(NKA1-H3o8-sm-!5BZ`vmsb! zIhRo8DzQD5bx4&;`dGIo8P4k6AUXafQ{Ae#y{poKVS-=%R$WKb-6KcwD=o}&icHz^ zXlPoRN_vWs9HvtfrNiH4)WGlVF|5yB@S3+VgQ;pOsp%`?fptqyRN=f$w6XCN-Nm=q z;zYmj&(j7NzFVm)<5>;V$sBA*AX>z2_xHyuKjG6NmPjLyscWc84L%gHEWi`o5Xwi; zj`**a)_OKcX>9Ll0;~hL`0ct6b)Bcm70;q`kA~TOLZ?mjE{BmkizKWmkTVw1zzQ`J zvEJt&IQ&j9)b-C+Qqmw&_WPSI1ma_9N^ zB<@mC4fo`LPxClMFZ?}xJ&F|hjMBZ`+U2CFUCB1mEG$PN{O^iAH>-5442R6wp7P;a zjs9t_hG(=iwGGQY9Q5vM(z#Uh{YL`UQMi&L9B<$lTS?Nw!M3vyd)(sDll0|&L)2@S z5ArW)ER9SXHS<&Q4&4XSP40H1b_vuHroBM7cI^quWF+-s+7^4O6d03a!K^Ph8Rrs zsEw6pWks(|tE*--FQ-jYtJrE94%ha#>4##gfz&%pqB1TR>f7_cl_jB9S>j++NWLoq z5777Rg@tF+YsL=uBT#L(7Qp+=n=2Y@Y^K%K(Sji|$0V9Xk>fTX@xJ(Om%)}+ZM{nK+A+5h_Vhwd&xK5&k##z( zNcG&~qM_DJQqv{K+QeJyh>=1^oW`L^u^itL-62)5P`CBi{{ZU}Lq^DIH@kC5Z&MV5 zc$5~oxkG=iw;=v_Tuljbrf>)PMs_u04Ow=Kla}Ajd82(T$GBP&WGDb|nmu zhMkVfi4rx~sspgGOJDNBkCH)UC_vb${`gA6q=t6`)64yEq=}dSY60}}@s2++XNg( z2=`uO`Bz#qg)1Xyp}|R#22xO4^cPBfXEhu_{Nk zuto@at1m>Rrk^NC(`1^OiDH&J-*CIBC(~|mXd>V;$OZ3Ue%NeBBi&Dg_C1dS77ta* zc&S~h=fCQ@9IUKf3H?wp9E~T5QzmCnNdTE$P_Ev#wYfZESM0iax>R~PXo9NlP?l?V z1nS%EiSpA(P1S%0YaPZQwF3#v;uwsd>s8Xj?l1!TcxKz!*b#l~cJ00b3arW`(b~yAu_C! zLp3!+n-)KW0q!~9*AQE%-z#e$I~rY@?a??Dm8{DgSKKJME&%77^N%2y&bE>R;tMhW z2y1YCiNgYCFo7ic!jMqv2KK+EBt;%yC^5+_%EskWN$vIH3jy2(sLjQ-KMf5;agX0D zM5!T?>>t+lKA+12YO>dylJzQEa!M(`94*Jwd`pTt9}3XTAW>~fV_{>*(%0{Y)|MSB zHnQq&qf+l~cE1PvVr;a~T|rw!!1wk)Uu-ijUo5viGlEDzx?;o)x8B&<#`cFZ90mti z9f-frm0ny>c;$SHoOEx+I-06#I_$GLVJj6>b~OQgZ+q$3Uw_XPtm~(Gm!}n~b9{;6 zh@TB)tA^X|EC@W~?kH%5CZ(*-ouU>D&V*?_fNuQa7HgF)RA!c@II3u!O_kAD7VJnM z`k#Dm!|k-Ja1V*Pd)2CPVm-Vsf%7dB%4QT0(!$2dAZ96X&g@CQ9q}tHgDsV3jMU~Z zltS@C3}xBeeh^P#?`(aOS@7ef=8UU!)=t3pScU%Hm|j`Y{Wq5QZB5gZ5J?+=lE+S1 zmHvk38qW6X6tl@0znDraaN3q9@K-6z+oWn?%-5^MZBK~}WHfOy!{IZlTHsuhVQ@XT z#;wx56_r6$7biK)No5nqG(|wSHg`7!-oy@Ze5A`V+8K>pIdW3eI2w#lg=6Wxu{KJY zSzsSE9F)?Avv{Xop?^><_Q#LvKG02_s_P^SdhQ!y6E)<*T%)K%i9|te1C0Vcg z+KoY1as`O8jn2adW384*kAp07xY^^;<{xYRxCIqe2_hM)qAq^|Xl>7+*aP*%scI?W zSoP9Qg$2W#*@ou){+Pn?q%OCTwBP}vhX{;$lB*FkE-ZY2>>Pf7RDY(7$+ zSqQ$R3%BXEAy-5vmRA{+RB|H)J}fc1sr@Z{Af-*;Oi-vj%j!43agRBf(CVZ~pOB?4 zK)cv{6l5D{`zX~EnWWV*#|~?d&WbfWbJ8`)w%02lx31Q}@t5^QG)&Rc z^!&1hvZPYa4x!u3#en>eY)PDwOBTa)n-HAVxXIQU}Z*UnYt()HfvRy+f=~T z-q+mki%hijl2e^{bYSfm{Qm&TL;8Fq zY^tx(Jw2J!y?u8{QmtCYV$UC#4?qUj_ZZLfK7q~$$BIs&gQVn}r_Bn{N*UFei$+w* zpqsLb+th$<+Z%j&L30yFJdyZqeL;!h`v7*tdhCihNG&bgoq_b-AavjlD?QKt6LdClT=G@q$c$mqUN&S3E;qf#{+Hhl^yf`4N#(N8 z!_>9a7n$ZSR*Ngxjg+5Y2lK{)GO1vJnPHNkZ>Bdux9x6r7#}Pdh*Dz9VAvMChgRV3 zHtn_$?Ci(0!F$V_=y&~5j0$$ds1&tO)Klw^G>T>&qeox4*nx;$SCK>2T{~5h)T`*7 z029T$ke!HO=yn@-7s2PE&8LU{iRocO-a~7PdT;N6(_}St;aaCNxaHW86;1Z~j4CF& zH;Gy0AlOd#AzZ98H~1CQ6m^jP$g0cIIKUuOz{(Z%p5Mi5++Wt);3j$SU#+sZ>gTM= zDEh6cBUX*6@8Tx)aoL#B58LRFQ8@ho&FPvP_?#q+)dmi7l`O z{{Y(tI&-2r`z)skE=L^AR7jRz91s+@@WlKSs<@sck2;L<1 z468QwzmrirTll?kbdw;XngxPNY9^0Xpn<$Ge_tsWyQM5*rL729is`s(7QZ`NY&df2 zBp{kdi%0luM|YYTz-U(*sWwVN-r)<)oLy3l%BYMmF*)?$3J?0Effsj{ghluXr? zkrG2`S**Kru^sRFV9)~WOcJK|y|!-O(-5k&7~qhI;FeGTu#71mnP4$!K-LN+SP~Kz zebhe(dK0L#TAbfJqpPp4oB;I(w5uwCU)#EG=4llg3Q$2le;I^!7QMyp4k{U&b>e!~_$GkIxYMDimm7ETLcYQeFoyGLW3xU0h-s87yc(qT49y$ov1E`^G&*g=9p#K1O z>-piC;mQkmZ4@fpTg5AXdtzcrz8bSq6>)M=6qE07TrnK9 zr5f~dt@&0{d;VC582BW8lFV?smaOCBhe%a*S4SM1rYfn0M~)s?Dr&SO$N}<_EWqB@ zu>jk9<1+Y1@SmEtF-j(-f>n2(DaGSc_@mM+beofH#l}94cry2&Sc!~`cKy&N z`{T_=5=DA)ReqN5&9S2gRhk@UV@4aG-)~fjI(9tAaZ4olkMK#lx2oHy*Q$jJLkNx- zj5k!UHYVr&Rwox8hv@3AoatIjqO(1Qx=3{aKZZuTn}9*Td;WN`Ed^7_WYSl@f)CKx z-}J(b9O6?UNwr$q<4{LG`^8+G$#OB<1cKV$HsZdEozwA&x=~vskyAu%1c$L>rGWmJ zN9-DgTNtUB+#mavBNAFc8nBTp>b5$zHslXsg^5W}NMM8l8%PXx?b{ii1U`rEx!o=T zIZ($>))A>`p(mTHfRJ#Ra*FtoN>IpF!~Wcak?(H!Ae9gR%FfqQa?DM@_5T2DI~7pY zBUu3@ZmhiiR@)Qq&^x*Nq5lAjXJSxy%PJfRB%-MSfnDQmu?_P5Cdzb?xD2-2-`f^Y z(}XV!qevICvHqA!R#g%hM|D$ctc8!|Yyrez;mJ?wSN+Pil+#2*GeScx!iFS}eFh>! z3~8=V7M-l6nGJ|1u^fJwx7F02-I-t#Fx$*Wr}?%qulTLc<>~H)qg<7mo_x};<%>tL z(ic(M`&^N@#jGxwCRRgXiNkWLPt&D|x|%||BxR7Pj5DR~5p=Qj^55;Xv5RMa8#20X zq>`4Or?U#GYH6M+XJg>Xpa49mZ*mwgHy~^{#?SD(_NI66`zFmZ8uJZZL_v!90qmfV zw>KM*E>EsA&Y=GQhMGG3(yK6stS5!)=8|b5Y_n1;I}>HJm$%g8XQJZZ!90!XTaE=; zA084T!IACMS<0W4d{y{wUqqEMbvw|=#?J*!D~62w+Tf3-Ceii(07cix<1Ok+O4Nh{ zD+G~NAbYXXqzpOG{{RK4dTT7Gps1{%&I`@rM=eDbf`Z?M%v%1u`rxAcGBo+EU2GA; zkyTKwBT~_ojU-UcbvD=BHHjQ=i}Vwh=uj^DOa(1aQz_9v$-lYe}U* zW6BQps&dKU!X=o-BhpRXv?;du;5Sg|P7bgcNIHS~5OHK^DAf!?D2n$(7%Of#^~0Yn zP7!pZAPZ>wfSuG6ntT35bV2rUU zyx98pwk&z3YeSbnO>IIb2mK|#AU8iuX1#6kGoq+6it00(W=&Z1(#Hx485rtiAOcxO zbL+M=x^^s?aK%IYTS z2O#Oq>l`&hvDl3#LHg?Li`!-JMLW?`fny3z*A7PKW68jJUX9Lw=e*Xl zren%7=_+#Q1Wj2)L?X^ZsMuME(0?&)uZOd)lla$FrI)EXQ}-h379wqac|&Y@PNrgZ zO+}CcfBT$y_zI-K)q^^wVvELy%Hd^h;Xo77X(X0&UY#SPXUkaT2A?oNfZiQ956Y&|iZ zR`h>XQAkp&rn6Yc=Jc+AkjJ#?FU58{TKO2~dW!Wzazo96jt`1o5y>vSW18>kQ~6sP zm%zGiqw4OBrRq%At@@Yd1!SqB38V1Bt$;do8=cPg$IW#a27gY0>T(>$CG1|2!2Iox zsQ&=ra+fiS;XDcANgeB_aT7zOm+;!`dmZ@24{By+KTj`#z#9W)#R~2|6s|o{&!%;iA-74?(}a_!(0+VNU1es3Bdi;!aBdJM1ww zHgjnvg;rDnmPA4oiS_gt`6+vkm=)+tf#G#2Vp@+6!lXtQVpNr89^al9Ef>zrz88fm zEsmGdu>*~*zrGv=B!rsEl}Aye1=3V|Ta$^9nLGuaDs`DdS($CP?{Dpb1i49dnnNd2 zwoM97;GksR=zYB~ii&z;Ay$G}Lys`gs{M$yx4{~?fRxEkPXvKL)EI(o?k~0!@l(d0 zD-f<$d2ptx z(q&HwFmv17eXMbFGs7w@k<`g32Fw8=$I$R`9qD3VB#uI}2LAx<900@AVWTQx_*{PK zD0d2%Kf_Ol)t(rBoy#p6=mHgJ^ov`29sc*g%-i7?L07Uv4oPMjbw^87$X?&X%X<^= zY-whip^ct6ET-l_Kvnwp!;2S&s^QTWigR60+F&}9+H z4q2FId1B0gbwOO^(MJNt zxUsdj?Tt&QGg^u{#1Tg!MYf>Ja2wj^kMDr#oX;Yb4>dR@*qfeo=S(9Xoyh5{ zBdCpIl17oy*#Xpo#MqnPi*tr5tBajFo>EuL8HvSLHR^7g@Mp`U&uD2T(9xC^15^!S zE&;gIKKtXbotZm@5^K|%`fiZ^rHluWh@4~L>CVn+D%H!^5`6 zo8J>fM?}F*95kIsl(B^c5yG%QcoqYmaq`_aSmrqvX;+ctIl8`69bBzTHC#(0So``n zKXQBF>aM@)Ss4k=sIO}kT0|Rtd*j?Y*+)LLOnBKV#)ekg;{>m!%-LkK$4y7nxm>eI z;UZTJ9=1Fv>`pmVlxL|R3mk4O%uZN;JbdxfzYzZb>g0#2vwE6}O#sL8G*K2N`>AHO zk#6gK@ww%-(${6QwXm9*BAykI9mo#Ajf(-b{cVg6uhJjWw2h<7Qk)%pnz!B(WkZf%t&f zk4$-Q9EaK9tM0JX6;@gD<&hPxSIoM#59I z^;E*>EL485Fk+|*-B}p6=RNf*oEWQ5#cfZp37Z%<2DjGZ5O-xb``ig3zstv*z^$jPr!NbV$ zRQ~QsW{yy{V4OF<7>7+=B_nuF{{Xog5UIHOZ;2H?R9T=h+wp7%m*45_fgtdlTph~d z%<;?N)xzu2FLQm*)+u=nNW`tmm_2S zF&(6+hBB2=0}wU`PND~wqKd&HL*-+V=*d4Pzee`oxtQSqAo}D!4oAqqty6`Oc6@KxU~o1waY z;b&iGzwA!Ej)9_$=A^BHZBev( zeDJ-$i;_bRFtxkmD9B{jnp1xDt5P*SJQF$a^@2{Zz5VUS)L>s`+RRuE4pyks?qEB^q<8+%^~R;(E)lDfK?rppRVO75Y_M+AuP>2L^M z*C%Xm#{_IIV|Q!6aoHFe9jT>kb9`#*b$s3`Z4uT%PJv)BEQ;IfE!~} z_(|85ooP*0wWcVgr%2sq&{xDq9B;57f-m3GA02eoWjuMMPHNQC5~?PWc70k&bp@Mm zFuD5N-safTdLK0~RY;W;H59TfNt%{0bgX&?y%xQ}u;AQp_Q#y-KF?za9N5?a=Eu_2 zsJeu(OdRJ}Uscr0Qpzdej*(D*s#QO7ECwP}Rpv3-7buptRI@+}DkGbA^dDSBSx{2= zi4I}mvLmBKAaM8JZSP_0-we=ZGb%HsbyYp2U=pRn0x!+|`+rP))HH5L;d)_`%3h=D z%-Gbt8Ld4m6Dd`CNP|48TW~dTYhQbjf@xOuQbx~~mX}|cyf-Iph&%qc^m)y6ZW38y zm0r=_B_3PwMTzwvmKdw6sqkCFS$}wUDgqQ9gf+_yGD64x9h7+NcX~!mL{a%)z=C2m zcwugBen4No5|xB1lHa@J7J|f&t8uknPsB8{5#)DEgKl=;Vn3b;48|XqEl^~X z+Q&pU2iKc^Sgz>E3#@h^qcPOH&Oq!%?hp^Z<_0=QDXyj@bsU9^F$dPe{M!K`%yPXq z6f3YEWni~ILxKxcPf&qiiS8J0;;8(<7)fayp#?}Y(}1JrCy&#}ZaudjrLg)%48Va` zSs>H4kSxCZZN5261k*DVr!rhvuChS4bNb^0`1SExT$?jJJCIJW8YeL36VfnX?;?~Je{%h9VJWDK@75Hl=>w= z(N9gJqpz)xW7`MRdQ`X+W^TuXIQdY{EG5rM8ebYZ)`CJTs??!~KSDP+gC1K^^HDsN zk33*lgG?1z`r8I!l9cOND^_KRlF#mL^jg$Hs|fz>xwNpb^%-Q8S10b zP)5Ecg%CTE8t$xvAd!w2^>+Q-wtg$tJG}Wh0V?<8NYdA|34rdqG1f=*og!VMSwd@vq@M z_G|ula#)1LO4PgfXUnC}lmpyGAzjz`5A71Bd zFyYC_Q{uPPLkVzIq%z#^b@KzYhQk%^v#kA_Lj^TFk-=SB%?%?;+C+{JwU5*(-`ln= zgD8nsK(!Lx&zXXAw>bIp;?8{@W0B_cxuMLMWpxnC9LoR=OHi8y=XGUPYw_3z@90Ww+rx5)WqJ*c^K=4mjd;Qn!vj)%X1ukD6;9 zZ;Ic#GPZj92qmp$@Flv@tf1;3ek1I=SbZ?xQ0FHl>P)hRcc+FN$s|{iDnQaygKHi8 zk2f3QyOC#c^yHa_ahf=invMw`njoORhO4SgHt)5-w*vUUx|6G#yRFYq<{6CB)}%V9 zDPbZ(OownEQh>lN_Z<6M9%H8TM`p_N{h)q*tL5CSY)++E;CH{teTA3H6tvMv4RW}3 zy|ro%JA=;u0DL&!Be9MqAd&&ncLUqF=NaexJM{$)caaRPmcDwGOUiN)aO~A*NO4+o>O|#qkchvM&tiVI=!mZ>4ST&J|OT zPUg~03zNAjZ-jr#wd$c`c=X?Kdw)zN&`f`@sxxFxMKy{9@|mMp=0p*L$>e@mi5G~s zD5}eIrJHfvf!_t>>5R)}@uGY38*jDnx9QrnP+n-4ZVvwd`oMdv!~06hmMn=4xFAr* z=_51Q-b2eepg*1!G+HDwOHmp#Za`tT`+YD*v#0ZhQecXinSTi>tA5*GY($eI&u+S@ z%cl$xG?DZ-;}Rf{?n12G5Z7CV>4+3bW{#^^8;>y^@gqZOUnBv2S|Cmq*-74fj}sUA>C7i3^Z>H6VjH(G;=>+-d6kSQS4C}jg>OAG#3TzZi~X1({g zA+Pyki4D@$~e=RS-&`Yf7aZoJbTXKhqprdnK3!(}7P3nUt1RD{BLL zSbAYeR9kYo$=V0i!mbm-cRd}y)60|mL@WHP@vz_9a=LCVU{;C zf2+gV-j>99X)rfXOCBA?iBo;IzSwaWNZ7b1z5f8dBe)KlJSM+#6x;o=z`e-1jPG(r z14`;}*-Hh2f}>lHYme6)026sEr0@R#Z}i)oLM-W6ptV1N;gZebklL;+0OQwkaO2Gf zhOUyU3;Bp6`eICEA=J=!Qp=dwg_Xgz#gveLo)lc#&*78B?QiLUgEXgRu%1n?dq@8G zTxZB$VMDQ`GO_jM0~3|@$1LZ#~p~&D}XBAK&!GjVh`UC z;;EX<40?U-b8lQYWl11!5~MB7ltWU;m&Z^+)~vdT-?hH@4yH}jWMT&4wrhJITzLgni>j+zktWCV#MxGcc1t(A z`YR}_rIyAzh)Z&OMJhn{Hrokx68`X1M99P&MJMaG9{8)fR57?U5nFq&oiXU1v9zR& zlHTW1t(Xs|rWxCR)jgeFPw#E3OTkk)D%B`sH{DcT-j@fqJhW=M5KTLv0>ztAAD8pR zVGTmvbTJ2T87+Uy4nbJamQi?G#?~YPewW0DH~#=%%{9GcfbPThN6uUW1ZhcA{0+L1 za%?doI#x(Vn1#W$tVy@^#daLtwi%M4kz|Y$a0xf|DtNc3!A0r`WF~ZuCL@4J8+(f! zHI0K!y1`cB>NwI1J0daV)e6D%3!iYH1K(lqh$4E1Ap_Dz9$yVS?6+%Naq2tq+ZC>- z>U`RoRH>wjlt)dfdW&6|qTt%+pFwU%Y*w=ls+i@|Nl!d9Nizu%} zELmmhu!_lF?3m-r^y@?weU}aTiL!Z{qB{p0qsG^rlhDx~%Wxxc6LFjFL zyJMM&8FALrw?E567H%WWlC*fKX=jaDb7pi^*eeYq-~I5WOsFS@)hi>l*fTK(+*lvB zD74wkxnvR2(@|x}j<5Ube-lVN>;cpT_Q9;1GoLY|Gc83F^w6->@xtYzak*9o=N$Nh z1%|B{{3n5+qEytfM|FZ)PYX`WW-RCPHa|==nP*f~Af&X8?zLW=H{{VEMq>Y%L2ms-arq?$%=MT|mv@ete3sU!@a@d0~;%*l2ary%+dp}XteErUf*0WOiOJ3%bMd# z=}(zbOz!BBkUtYE4sF`T}_#l`QcDz(W@_v(>%qkbc26wSG~smxOcn z^i=N~YKTj#Z@)Nhnt&vBhB;IVpWbRMe{*}=+Y6?sVl>ADg5&tNA6@?dmK;wI z`Q?dFj!2N5{{W}c7Cf)xbs?lAG*BumQ%H{YzwZ=}z5f8VAm*8FvLu3@DuyI#S){tE z-uo!9HZ~W;ny6^dndE@PRkasWvg|K?_s5<(S?R259isqljmY&Q(-27Flz~Wjf~sn9 z8<^KLD|udW5nqrxlfq2_bLNYc&WOj=zjdUSna`*L<8e%NY?omya8 z5R!(t`HHPX3w|JscD@V662`&Aj^0qVAOb+P+hP@4GRP#Rf`B_(?CjoCzarc1e)wJ4 zwF%eD>*T4LVOLckHZkgv6&G``P%aN^`e8LuW~(rWfWzax+5>4CNNa(FL1Gt&5xo3twHr_>Y9 z{qK$u{#m;{#|RcBy8ODJh8-jUr7z z4*b~f=uQ@81YMyruyxJMEyq~*|#Vo4U;BRYNY(UB~ zB#G8RD>9H+=@J{?-L5wJdf=)Y%+$1S)xfmMEQo2;72fwG>~HkIzPlZelp`>$p{1*M zYbsFBs_Kg?T>Ezx+l)t)eQC5ic?C{;EjX%}7YJNx1THn0j)nYR|FWbI7t9W^y9s}hS{ z%esNv&2KN?7HTN;#TiP3Ww#2~1K-?Yp;FmyT?)9(Vut3+s(nSfZNBH%66mvhvbEuh z_SNbNUh5y@7aMQ&{V)JIr(G2cW1F}N(=|)eyGGs*-IU#|lk?3XxIl_A=< zYI>fwPXtOtk+Rq!o)-ajw{SPX3Rz|hbx9K`u>}ip@A}{s1oZDz$hDG6RNbQ>5ZCQ} z$Q$62RG2)I(CV-unO$w|Z?+i=+|ryHRM~1?;CSL4V%H6C=f~R|h_WT5sdo*z3Kw&J zcK-l2z%0i%mMFC?G?yo3ETErpd`pKhin^GVrx42+0Hm`6uVN09?S~1;vuKE}LMDw8 zs)Y@tt+c$`kMD;HqepWD3_BC%HvaexBvh2~__9|KuEgqoFWYUqVJ2&(W2n8pk_d{C>{ zs})r;17KJMW?;OtZN@d33=%P~e61EZAcKCN?JwS#)8^T2%al|2EDV#CW2<)G3HcZ! zLIv5H`$>KMjss;GmTOOz(zLq*l zID{0?u9)CN(2Bj4Kp1&u8a&^-ax82t-|vEC#O%u@tZi_@_QO657up!hax83i`rx#< zaO7<@wJ07kIXjDv~=ket(PdJ+Tq8 zxe)4(sI#9iEp#|rn%iWub>mTCs*r+Bak(THINJWNMX3`w?AwOn={Mc z&6_Q&%_-L~L=N=tP`bjK*pYrVxWQ8_(MPIO3+f05d-0Bby7RP;nv=&1lB_Q7vrJup zx$zJZKHvf|60%?eB&Bu8I+;F0Zq>4eNq{f!u6SwroCXPnAT9y{t;A&Cr ze&2j>%EdLrH6b?Mt$ezGQyhp+*OLDL%J_L|pej6Aw5|D82mSHNh$$tEmOc!Bh_bbZ+zT8= zmYN1n4klng*v2*|*5|evOgr$c2x2YNr2|3YUI)G-T6d3A5TFf2T<|V7!H6|}5|-?8;bB;3sI6;*RU>(9R#gnY z{s|whIZq`*`Kn{1m>ukqG;Moxv9-4J!1$}{RRTyF!;jr+Kb|DgS1Xnzutgh!rFZq; z0$TQp?3Q44RsKoCEm51xM<0YiI^n2gb@bZSBiDRA9c@mAN#?IjfI`ZXFVOe4BTHFI zEKJd<$5yTvK3Itz?AF8wI1j?Po+M|=e^n|>%4EIjDO>3 zBYjRiH3b{_+QCWM#1K8V!FcRHh${^1Q=jY~bv{YFH&aPjMJk>3NmQc$0Q^UNu!>cR zDVepN<9qtCfbze~V3pzM~OGO;A&d!ssk-WhYnXgVzZgJMvEd z0GNMvD@|r^mqh_ejKO?{>*0$spRM@7SLy)zeobKp`@fX4eZ4UO`g}`fj-pZ6j~d_2 zPCFh(V?! zfcaQhvKP$Sbl5{4Yo;J7*ul$YBnS`{{Ta_7BXDP zBeFuxzS?9~E%hC+*5wBN7gD(B%0pNv{59^3bu}e9OGaqW<3fhofFvv z6Nv`?U1V5~Of^wT;f94*P<1O``QUqIw-*qy0oX}(Z?g;}W>X)-PZL{`t)++MvBY>U zyG<}{NZgTAR76B_1(a?9HXz}s6)7fTCZtFFTU>+dfyTaRHdx4E%1EKD^zV;+-B1HX zF(2wE%%k$-03ml4fI`xEM5?2XVqOxn2K-94zt{b->RBmXAq?uM;1PFAU2y3H-&5BzTqVmJv(<+_Hk>>tYTg!!=8^w02ycjo^`Gf(YeNy688**ALAMb#&@g zp%R02S2iQmZ-qlen!1}%OvGB`N2B>1O-zeAnQpO6+x{6WN8ankCrgTt1;6^C^a=8k zl$jYLamyjn2ud^qA=ZYHQ-%=#$}Ydb4MGE>|{^N8iKuwiXh z?mckaPV}?uV(y#}tEeAOz6a*ev{}Yja_VZy=_W3f(%7MaE}BY$dAKBj%HO@PY5xFX zK&-OKJeIec!`Kh0JYZ$VYZ})z*Q)G#De)uVkf>iAGs z**u0&#!xpenQS5PxRnpPaMHJK3l$J^`;yB|fOxmng#`iYdow>)-EkzWf1_j6CAe96S&cN^Mhk8GRKFUoJ@;^yy7` z))^zzwrxMW)y@9>0&OIw~V{EN%o=K%!Q#A?-uaq#Z&EQJIH93(1GB7SKIBh(U z&#npejYow%bxoPUn3-Zo=7EyT89~x4001Zo2jz)XG?`@CWi@_W9$C_qt0tQg6pc+_ zZ?)}lZ(aApwUpI4mqb&+P1EsI&pY4eB9wmN)R0iA9#djF@xB-0gCkvAaa(QoTu%4d z2kETls(4K$bz_PcA$4o9-ANu#{x`jpcQ~|D)ro51l9mEtqpL`uGO~!sC=hEKgL1aj zzN=!jK~D@lGSyMY!c~mHJYE``>nsCr__!7$kJkjccB-O>Ts4&GBjuAUj}*~=+eHUr zHs4bVetY0@V{5fJza)v9y@mE4!ve>na^;gVrFnu8Aa`9+l5eEg_P?OTqvW8dh&+`P zOuSs#hCX!oEt<_))RZrmR=P^DlUWSb@a2x)b=7ONn{~gXueLXbtY(+G7B>aHdO=0)j2=)7+bg~_s>Qpa}e-P{XXW{KdNw2F)+Q$_1OXBaVmT#i3 z>PN0VNv^MoT)v1_m}mXtPaKK7htG11M&yyb&luJ};*Y4QsydxAsNHHK$|6m1qyxh; zOLHK11Q2wH?Qeg+Jw-tsR$-RY*u*N>+94TZ3X^c){{RyAC(s;yhuLff<8`ngbh~ZRC3M$JJ8RpxEJkM@yL3c|wyW z+o5aQ?TO#C5s)~bf;IVu?q}kha@{M z>5q*)ggAmItrkdHF4U#1cWW$;M|BDm9C$j31fCh#@a_G(VTfubVWh`mPhf0)t^IKK zh)C4&M14WneJ{=wTe>hy_byNTRPTuY9{$=EAODOQnDj^|2paG%--#oDdS&lVu##K8*!#IrX) ziuiCHTcj)$`VZ-BMyg%?LH)^$&oZlnE}o_ex`kwkm~6yc4&ZKn*!j2Oon}>=VQZIy~Ni5`&6e_j1Cgk4WV&z5E)j3u{Pf;(9vAil8 zc(gksc}tx)B&#SOo9=D60OGaMv{iYAWQfA9o--KnyeQLPM!*6Np?xCfd!7A<(&Sl$ z{WnupL77I&^5?;Ac2`YcG);Y#w+7$%`(GaOCMdEbsZPL;&i)HNVA(|;-@2L9zY}Jt zG_cUuv@1j-lmQqPz03KC4 zn+taIz%xfJOf^$O89yvWvb)$4cRt?uR!vP6MQW_h6;|3nYc!_z03Yk=jo5H8@!~CD z+xS(+M9AAgZXFfZ`KL~2G0Tjj?K&}wLsLdTYmGz96x!a0i{BVg;l%k{C~qMD0I%o$ zA&PhD0Pw!b_;1x!S;tR7K4T4CIgALDRLHVU;0qR)VPZ%-dt$*hXO}(o#ZKpNHL2V3 z9AoDXg`GoHmGuo~MN0K3?;5d-F)OYJz||#HNdRazK3MOlmfyBFc1C5^Eb71zNI#xF zW7i^|2PBK8ox;(JHeEH{7mGSpH%efU-|^`H4&C?1YI9KUwMi_y7}3Z#`T@TlxCHUK z+{RcAKM>yvMU@TAceeX%Mlt>JU^a4}f0S|&id?{`Ys+UBJ{i;q{Qm%u#Q3v0blu{K z6z;|4*pB;haaoeByiYQaM>ms?vBQ(Fs7*Qm+*l%5{$u|DSmx%=)3cKfd2%^b)GQal zq@Y<`{s&`ZC$;Uk{IS^cTK0of;xN~-(IMFT6WakGFHD4zVE#%4O2An z{{Z*3JtTJ^F=l7}M`MKi-eDp(x`+WBTVTIy9B|K^55$Y!f&T!cb@RYL9u%Mp9Z1BJ z_89D$IgUjYN{cKZX{4IcXnb=*Nc6y^fi?d09GXg@pG~JU|pY*JEc1y zgG7EvqUJQLbW~767gf|-VfVu7PERZZEj^s^;UDjTG0P*UCD(Jemi_*ilGO8G#20iu z&B6V4#dDb<6hJ>fm8iTM0Y{dGjzt2UH&Jqh4e#r>+YD4wRU#cBO5XPuHy?aYl+;tc z;Xr#>?6>+Gxf_?}+#lTo9 zy);hh7{;JqomaLQMVn2_gSExQt#~@J_mfVGF{{ZWJ6qxNgu(p6JPB-jSy{qWBj-l$!EhyYGnnM)ScLDzZUfA+V1cyl=>`Jh?{&;aN#OioRZWXY%5$L$e?o@LyDP{0mdu=6% z{V?QC6^DyV0aI{8f^YTp#|#mGSHeQ1*nq%(Sd4yE*_FqYO|&ekSbZ@d0uc#Zh||@8 ztWlj!{{YM5%+#`-PIYg{TU+$R2wWBoJ;yWR1ZCaq2tmi}2xO8g*~!>JsF1dc37l zq0dHbO$|M4vd3FTctvcH5d`Gzpgx}Bz}z1(+Wg>lWz+SI4NhZERSiy8H5Y;5F>@J4QR?k$~n^QG3%kq)a$Qf;B1-4e%6?EK_e)q+fD|jKu86A?T z3M^no`pmJD!hya0HW#bC*W;w$8V?C?6c;`EHy|)R%Mpu-3woxJmxov14528 z+T~S28}0)x!_$9UQa%)Q1!W&pzH3#L%`}w|%TwbmQn{JUl&C6BqFH|l<9|!w7sia* zk1fh*dUB62j;gMZ%TH3~Lc~Ns(zf7m0sbIH{NkO_xr)UbHGFe^$%;jh;)+WI(|=wG zVh=vtW71)CcE1KkJAHTXHQK*bcODbql6$YR%n)XgM_UMvNTvb9!~s^Z?R~#2LVT{g zWFg=5XeeB6#5{j^$TvCgZ;T_x{-VrbBXYV7L zkw^;B$95k4>BPjTtB5Jmk=eBaruW|cjm8C}bF!05RcrD#y~l0v(Wkx?B{RsM$ThY&m5C9APZ^$S%C+eo_6ht51AGW+UgxuMUpnV1Nqwc zuf;UWCx~6$TY&Zeewcl#O6jsI5-b=3z~T&&1!#2wH?(KPq?VLe$ZcW!?ID5ZzTDxr zpTk)iF(hhDhOHi9W5ut5ek^RCy%!92u(iIpX@mjPr9vxS<Jz5a0)X8 z3e~TVSC^{;_+9LFJKo%bZ`Th00L#>dWRxpNK(GXnf35{Il_r^h%vLeVlwbGX38Js9 zf(9v6r9rbX2G{lW!&@^5+#~-0k&ftubu#t4_o;6`OFa__hOX z-lo_UL0_9z$dt6wnWcM(?l(RCIQKoU>rwTxO77VRkf0**)WmgP()K@|HE{4J%wcvs zCBS@>S)UO^l|y-p$gDQhr0>4>w{Pu)W)sCr5t5>^I&h>ayE(S~iT?fVfilI{k(;MV zi3$Qp`IvxUeJtGn0DNOV@j=#IK|#~8^tDz?Ta#60BV2B+9D-y6{@DSI$zr|179?L9 z*#6Gv$o94ImV@80MEuypNpCA^%QG5U`s&1|%%zf89aV&Se3x75;`SrH7nsoIQj+Oj zrBK~U-uAVH#@l^y^Dq28b$(xzO(tocilAqu(+demMus9plCk95f6xJYoNPT2);0OA zeVfR7b2X=kq%xT&BqxGFD##k!w!{tXxI9}G`iDrD5$^|Z+TVfvwb=QMkPTd`-dgoE z^LSIA5f_x3t z!qX+oqZ)h}2;%K4U-{$E{{Zx+W4UvF=lm*%IzHC3+4^#drIufpy8*b7NV)W|!!1tP zIS)sbmkn>i#g84qIMQD$%dM%Y#jnnzx9g9ZI4qpO zR=!UTr!`u(j1bC@HNy`}f&T!k9?Rm(GdgH9OsYCbsp=D2&lpxoM`A2_9;5Gxkqe*r_x6WOhbsh zNUp}|6*0z=80m61k|&SKQ%8mRTbxLXE`j_xWXs@!Rb41buCP6V-}&N4feO;3Q{}M6 z_qwdNR{nq2j6|Mlms1*0gpIjjBUsz$LGR8M_twcycGbd>QA?G{EGwK+f`aUtLDUERY41FmD>3b__SY_aq;<#EK`Y zr4TIB)~RD=Dtwf$ArK+oeVP{8Bh&J>pckhNDGmTG&KZ|3x{X1OWu^_KFSS@j&n8&f) z6zw8W%Q8(&iYFwG6hK!|x!e$Y`kZ?)r=3*1?N_xc0afhn1D3y$veQ;B4(Y(>Od;4Lk`uy1&R8W{4wS&zdWYhFfYkf~_MvFEgHx*J* zJgNygQ%%U+gM2g08(}5+ak0GGEW$*k5iE34Fgi`a1uyo*N6sqaM_j8fgT`Bu)5ug1 zIk$WT74>Wk@lPBeoj`;PW4|L-+JW~N5uIlARnsrd%QFL|K#5O>Aplz8ZZ2*4;jlvD z?_ZEr-PBk%1S^T^TITShd2-zjY-1pwIUmADKKo(l^QhWa`HET@i=hn5QlMO(KqB|s z8I5c-w8c+@nMX|8q=dOKMvZZCwXJ=&Je)t3bpZK52EQaVb@EZur6NwTjZ7+IXRsq; zfv%_Ri*jMT?bO}C3Y+?lplfmRT0KORQc0y@h+f1I86_1zV|}-`-}J(wr0NL;sU{~wsD&oh8{5+jH5piRtyGMACmi~XkESRMk>>3U&r)X2M(jf%{!8hG zKVekIC7-D?Gpw5*7+-KZ>FwD2;myW^sK_tmf5N{9RK_E6FX#T2j~y(D2Z{-mPZpBL z>tpMLM3VT71oCrjE>wZ{#&b*4*^0=o7gc6%BL?yKgU$Z{%gg+&g2Ib1iBu<1W<-Hz zAdCM1{J4ih8wk@U>;4nn*Rf(WO`nJGEebiz4QXk3g*|m*#LzWNHJ{ToLxR7}*{Mmb>*v&uDRvVys!0L-e+D zBhQ%RnRQiA5`WZ8iqkKMPNT1#yLxuTii}4`mebJ^(??GVLJY0q7YYCbp66k{GZm@K z+CtIw1xqfCB_0ULKKy=|Qs!BNBu7zQJ1Dung^ZgWuVHIq*~yf&G`j2O`-IQ_pvSt> zR+*xcR<8gfKIEz$&-vRCWy`^lv`jQJSn4Ec->^NgNT<$ou_2N=ikSfXLcxlQ^Tr&D zKFw#3Of_CHP3%-^+t^y;d?Dvh+$T4znLsegbuFwO#Cz^AiI*~kbchVm z>=>&HpRvVyi>PyXRJe%?Dvi7?AaQ#O{r>oT=lQzA3~3F6-%W@k*SW&~0HzHSN%8e8 zcZ;L;L~5MJ6`qFRY{<#?{V*@)AU2XDo&rXs44zSb4af4ti2ACm#((Hxl&yg!>`okm zsOeHq60<9KgYB|{rF~BP;YKDN=$$4c#9#RRkfSQhNs3V0SlLJ$`hqbUSSkr2WLtj< z>N|Zfc6`SrsDvfhGj22~j98xL-L}LArl5wcQfznO6XjcKbxJUG%e zwb1$@=>>j}1jt!?6({w={3^)6NYP?Z{+rn1anUQsG&zmZ#5gt^U!Skr5um5dB&VZa z+Z2XcWn_@(w~nN3tO2oG+iptVy|7Jadr2e@qNqA{8;v%9(IdsJ1W5B2QOdD4x6=@F zYK-O9IO!^~*y;BN$1iYC7O=Ii?}GI-nYyeXO-^*lcGJU)a0oo{+XA|yHqLU4u6pV` zri(C+2%b`{IafMVn`yE7bLoa-#9Z(jM4w%ikjEG*i@t{2LmFg)#U z0X$s#;S~P>HB;@*g)QM5u|B`t8X2TMpFbnE@!$CfZ2zA8azSJcCrQ!V}O*x%L*rBRT0gXYe4+VVX@k+$8(PHs{lx_>Wti z^xP7_kk*=nmQe^a^$6opV7BMA#qgHmNKFPGvWIkOM&ye5s2{d-hs?xD(h{vGeKOAV zk%AZfNT8iV)N_fgnNhLcf}-UK)M0De)7um4Wy)zK@FdOYppkdb?tuRQKdvNCNl&2E z9MUZsb!t?&@#nA8@QSY06({{YPG^*{Q< z=RAQE{-O$LB>wVt%`0l^ND!W2%jfm&@fQ{@1=G%hT{k&ny*m z2+G^(K-MFWaU5jwDKpd8LSz7JU6wmoTHt*!=KHbj_q4ZknH+Yop;Bk_c#^BrRD!Lh z+Aa6NShGM-w3RZ%N!WKEki$^ZW(_OG&z96nAUmq*zkPt;4hkB`#+@-C2G6Cu!)`ag z$Ra0T5ByKx3?S3(0o3{;;OYBo=wrSGn861mEfF zg^CQY6)!DRPC?YAYzgg!RAC9}8GeZZzcA84km)_S2MVUmD{0&niUv}D3nm8D)7PZd zrir8$xc%kDzNBI#tJH|0o{F7fe<@{a>GwO~t;b`>At&53T4*$*ljkxskt&t8{z5nQ z-wTg7W-Dr$V`Up?+5_WGA1lb&gv8rNIp`1Ho^O}1N)SW zEaHC)zRKSwcA}gUS1FZE?XKT^N0UBnSNX-%~6T@h}{{XHUeA}oP0{NtI{{RS7r;OX|R|o-vxLZE)4f2OamuAupQPVMA%o&Bx z+l($evoWYrO%#o8OC`tKz9xsxk_IO-%w}?K1@y1z02pPev$8*VT;Z>{T7uX7jwHNx zAw#m^8!pL{<_Mq)c@EpH?_q{pCaWjJ`Da3QB--DeBss5mhPsNgA^tBEfWMv)A*hg# zn5rP#@oT;R0GXP!c@OzEiL|>KJ~QT%$9Z9W_fNp-#n}nEpo*&0Q2RX=y-j zRc3G392uNIs)^mS@?ijxf3G;=WOrncPbJCPSqvu9z^cOc)V9<4_Qa&CrXWVt@i6`$ zF2nW15avebN6j%Dnuj0A405ufs-#&fL~Cu;16ZHSo&Nw#EzGmJ=e(BssY({=UY$Vo ziLOu33_;K6n>5KY46q}?4OKhE;yPZ$i*s>oHw`MW4kxQ)xF#h(m!<-IM9A|j{{Wjx8_Af(u}|oFQg7VFg}SFHHw;w6fc>yuF`zN*h%FUP)~i2J;=l^psB2vIF?$- zRtk+)l~5J)jf)UY#G8}G=WAhky>xZ85xp>yB?_gySq03Nv3-EY-eQYPY+w~bw;%M7 zMU9beoy}H)ttfLwm*wJ(yg1F+M*G=(Hn3}wRNsKa-)voC%;@uMu+rwW-VD#n8`d@tPk?6>O5Z&bsGU==3q&-_O>q_6G4(gHB>ah zqP8evc`6;yny5J6vI{ z(<6&cpU)~+|IaO&O~+}LVkeI~@% z9rpGZIiF;->D1{pE@csxx?Ob2`jkNvN3sTREC!%89qqrV!b8~7 zz8~hyGb##(l1fIUo+n=vTjq5VT?ie?U>5%X>MU{eEXzt*qs#yez>M4jDg4E*dVuV*!oMPGc3NRB%r1>UM*5mt4hrgLTzEH$6z-d_&3Lb z_OBR?6F1|>`B4MF1+~hYDKe{CNhNK#)2H*olx6WUm?WxO8TS7_r+>=!!d;~BtcEz~Q_& zC(TPTC>#|B@6HnxPRbKOl}9>F^!sDA(~Pc;dfJGo;iadH%JWL6N-B$z#P<3R>4dav zaA@SBF^b`Qd-3|7vX|p7XEH-gQR5YqMHti^X#j^G>jYeb>~U1-Ov$0mX==WDC}e`3 zNRwT_P<3p0$ip2&EEW00mGb8vB~0_k^8v2PNn@!QuXNa2`hpjI7r43mV8&6HNm9*GJw$C+Axd2VJkQRX;)H&rB&viC#8`SUwRFFw#ixu|2ut7BIDLLOelzbc=zC zC;T~9$4}E)jTKg59Zgk5V^ks!z|iSc47MCz;P<#V)*7NS5D@q~?nZ#u9^j08Q>-_^ z&5@Pg^;(cc9FaA|s{E^-Lc~E#CxHI|6lY7Q^dR&0ICe9en+B(t0k96X{YQKnj;w4Q z;<5h#_8V>g0IVsbpqK(}sd+HDQ*V9ooMjceLbP$CE#1g!Ek}o@NMze>J6jQ?jnRdY zbT{BF?Sl;n7kH{AAPs`bH~zR=nbHd|lrGlPLtpg5gTO#>qtnVA1ytctZ0tz61|UWh zW?e+QH{`(eJTFYkoxWhUckTYKUQ$Hi_mev5@L6RBAk*Ku_Bo(WvYa z^anQWX8!;hXa~wJeUj7~e9Dd)9-(|j{q!IWif#(sM%!Q47)>$EtE-`wt}1vQS89sK zk#8iDIMt_6H*aCW-+tK8J~4G>dC}cdUeqRPnW|#~B$}0`M?!AMZgi*$I}NoTU8)^L z)O}T&)h2mc(lXG=;3CS6L>3(+4-J$Nrq(OD1c7b$$JII>Jn-T+=z=ykzsvJf<}M69 z)rYEK%W|%ihBVC92<1s$o@Y@I@jnravfS%8Yd0Kh0lq7lS&F}*DeCEHvTDialjVen zpD#2-s}j;N8d#7G$F;$|@DJi-^>wfbYDQ-o2D`-}R)@t3E=G-yHYc|jpuJ^sQb(3i z)g+YU{K<)JWpXTcJD*EqcLS!nNC7YNU7zu?&So)tM*H2TD3dVBDr+hhk!q<`0#z$q z#>)2s{rT_eF%zdMsbS9|p1L-803f6-p@|@X0rlg2MS9uec~U2tVwH5rrLJ3T!S&w% z08B3`kWk{3BvZE|;wN?g{yycd#3)O-eFFXm(Zl^k)mrYCgVYYk*nlg$`eAbQ1u0EpD`l`5r)*$5Us z;E%2`sECM@etsY2RcWTtS|>%;L0Q+iPfz99trO)*Qe>&2q^D(!pttWTU6`39EnpVz z1%W5FK8wop+8oZ0=cwJyG_$-gKEzB=l`Ow?KbAg3>X{B%m&qjyQ^A+T2!>f`m6%Da z+(cwy+fLWs_rczc>%7J}@{GA=hMIa>JquSU4-Q`gwxU&k{HrdJxwt2`Jbzl~PUFQJC$SoGWrjm9lSkI@~hTiyK)~Q7eByJA-F#Ptws#@9VDWZ}H+^nby znG`t#+ylRCKO8a^{p6Idn{t0F2`n50J{;ihRFO*C1`vh- ze+kiX+Srq-YhB}iHyi4=)Ous8s)PRAWO{Lq2@_wPM!k6WkY4B0j+&bF$;?#J1eC(kA0OY%Vc$Ey%GJxwG&CS8*^}rkMpQBNtQ%_L@ zBJ7?J=ITlQm~hwA%78~CEL*z^59Nr}6$lAerHwbSD|I9D#AfiyStW69EgM_&!88De z#L!3y^E(0ok}W=gt-rR|=m{#@!r2*DOGd!|0I6dK z^SH-wP{!x(K{T51DWKCBEgJ4XNbjfoIChvA-AcUsZZ!)p-wY^`jf4){?8Y(A+~MR( z)KHPqAlrQ?2>yFuiA2&hS^de4h zj7J{1mUkWWNqc`Yj#`nadO3A1b_d~uCRlM30LXJ0Kx46VO z*u!K-h0%?H6@gfLkaxnGu%edz@~}KCfv^4XC4?Z6tpdpkW1t>jv9O6u%GXap(K>0)qpIb5J1gSE&>3Y&cn8kDoSXL$|x)1VRh zVa%RJg3#kf`TGS9j8%e%&6h>u?;H*^>A3_j{{U zBoDNj&!(aMu)|YRJ8Th1+-YkOgA)$nNdk~ms&zy^CQAY}TIc*2b*6Wblz7U-6J>jU zOWOoKN6Vy5DM8x%@r?ffFYElaUx*U);#4KkBttyWX)7WfxZgtoaK!JuhA!h{Nt7Ju zn|ei*Y>9)qFVuZQHdP{1jEku2!^No0M^2JQ8NICKooskK98+`8h*h~IV0!$gHKL`G zpTLk!8U}fk8%Pyc*c&zeqqXsK_?MnlWZf5;O;VJzv89orRk0-ngAlAo;nWTJ9OEp> zde%CwhLW48aw@#eB%^ozr6>@GgtnWRNYqrZD|pWQZ+-nAO2Uq8aVLXf=O}S8+u!Q*v;XZfwNr@WVMiGZ(OwnDB>(kOxDmYHf^i}6L3xr^fy-I@b&dgCTlZO zD7E<=tslLnBmEW%X6D<@E0{r)LorHnD9*PNFZs91hqs*4al) z<`CBP4^37qwQ@t_3UyUj%9d4)R3(M9gR0yRLs;#K4ttT-WHhxBoay42_zUBiSr8DH55g1FY^aCA{t$oNO z8y{njin1!>9(1+!i!EJsM8vdjbl&FfO71P_yPfg$=fj-qPeRknlvKe?v4)NbDwxUP zS-4Qb3~GtJm1s#{?$nt;kbNOqGBnuN}iwwJ7cA#UF25)jtbuY z0FcL`sH~O{VUjjwwx)exk?MA2kdl(zbeTy`B_P1TqrD z#u%ROZ_ti#iD;yQc+{?~h!P7BeXw3iia`lidcPE&W{q7>(!gVtGG)4#!)Y`fh>-yT z-G>-G1aRPpbmp{qU0+lb$1pmUHPyze3;uX{UUC^^jz=JF6l@MB&n*ir;)dp_G=D6^y2{AbEu^F4~(BOi7f95mYD*^yt6orFV_2GB>0o@ zQ>glTJ%)!Qk0Gw6sY4|^sX39+L9tmBY#R4FY)8=IPsERfxzAi?jZ>L*>r=*v5h)|3 zWrc0Y3K;HA=e_-awNj7%9Wz>5!!;jQ(YONNzNc}q^|NEy^o(wc2-lM{TDoybGU+(8I=KrLpXUS?9g$Qaupd)=9gF@gGe@~@fQ%@%kaH#$ z`uQ3D@ViCn7 zK=c6r0EME-F^J(^fBh`87@PN>596@D>6vkF{*QcAf8u8~>YVzYrdz49w1SH=gT{g3 zl$BMPgQR+ji^~|>jl)=RxNnGG3bTHT=~?sIoc4mQDC7w`#SsNVY%EyVf@}}g_|7_q zu4?o8T53L^s8x!YtxWXHT*V%hO)5?O3FmY52O5}}&d+OP$8d8j-C7A>j^>cgQnHz; zDc&e0rJ70U;+8t53$jKBm6Ug4HzwOy8)I+jo~z4fv#4_VnX8&AR!Cr43WFhe09^yI za0`*EZNWAp7-cSTU6SO_OG@)gSDI6$G;$dAN|A0Pi5MR(?6(%Zh#VYRGF)-BHVRM?{rF~>fAr(MAkFH|g zYwk81+xy`a5XB=bo)jYA>f3K?jsBRdd@!J@{{WLB*P2CF8oQL0&g=*Un6}4qN#Bk; zUlwoKd4r&M>mUhh+e=#3>`n3U?3mjO&W~3Fj_9Pwo#S@?iP)xti$M;nf;8N>uWhi~ zK9p1v%BJUu{{RsC;uy;F7}fjLZGqE2NqY!D%YlSx&`B0Z1a_d{jOq^tV=ZcSp;SB@R09Pk=pW1)DRaT0Jr-@GW)dbuYV3Y{{W{lBOPZ?o}E%OQF81$z$mBgc47C3Mv1nQLaTcM$DdmtOhIRf z;$1U%ip{ZNLHxn|u+~W-Am0i{v~45G&&_F>g=S4K5mYp8rHK}AGMj&F4tX+IWGhY; z8LmqKvkis+04rjWWClGn?GaWR6^l_ne0r5hA{vTqYStrSR508gcKUb3NIXr+K>oh% zHr9{2vP~@qit;4LvM=ETTW-MOJLfA-nxm?uP&Qja(h_*R_Tv@$idfoVGD%j4Zx~dq~VsfNoUU=hF%XB5aOTcVy1jekxBx zn#f^QT3fSzHD@*+{Ndeol1A}G3`uiqI3Ro2;w(_cDSRos6~5>3YQMd(N|vEwTj+O< z2JWcD53TU2C~nZH%_c*I#PU=(iNr!Wsb}0=_$jsi_=hx9>e?c!s4Pd6yAbMoas9iT z9o8!8{7B?F2RB2$AxtFzf7>f!06;Zc`QxLQj#WsdCwUx2c0sDBp0Sh(p$_8Pg4Z4U z+X(%W8ErL{5J>yzX;#GBu(9;S$fMCv?p<|gur@aQt4hT3=1Jlwe-YS*KK{6Ia!jI=NLo5-bIK7B3`ecNzUK*${E=A6 ziYAs@nHeu`4U}$A-x8sY2*=6+&!hDF=#z+n)@Lo^Xd z46)9(1-v=*l6?sG_wR>OHED_YOtr#-5uG3`$Mm(m#uONMrOd^GGIfe8(p98Pu!a#x zPQfMBZ@sKA;gBuSkzV_f&H-5{n$VE`s2`=$Q(v#W-18)x^4FS z`(jfxPK-ufE}cT<8&Drh@s4xP34#}}UDw0@lu4nGq+zP1sQ{9!&u0hg{qZN}m7*#s zrkBghB8ztXK<|fXRu(Q60B$zb_`d%D?S?98R>Vc)hrZ(b3=fHW6isv5HcO+a@D#;W zO0u2o3ao^Wu@*Rx6E0m7KZ23B;8$X&@+a2=R*Imp(pOnK*|$H-4nvezFfSgJ1aTqT z>AocBJ?S<%o&^@#lU)v5P~oa+7C@vBSdn0M#MmOro-Yj3p+(-;I+uS--~`V+4dKsA zB9ph3Ne2!sLP<@etjIM27xz1Auu^Ugr9W=ifj(JBD>1xUwy@S# z=jadXhWp22O1Q`v(dBVfsA9O#8`1bqQ6-W+w$=rk(!>*owoPB$e(7&56cBm3L!joBXRGP@Fv$AU z#`0Kwk9B72hLp!a)!C9Gj%Blp``ldpFc&eT>eyxRDY~kP zxM~`ss-^(_ir(G6xSBHhdg|n8YH8$-;nPg+*7O!u9sNhP45cj+KnqpG(hGta$i2U@ z#eEHjM|joZ^JE_g@L0@)>*>@8+yD)imEQT-8X5KqZ$= z@7(Y(+>^r6N|gcXk>%AMun(5NTk(4xz42d;7L|5(TW&#OZHF3_*m+osbLZIMJ{v*h zS#EUXZyF;tR&5?oVasYMDJ4`kylnUMvhjbuIh5wvr7bj2)%6THg+mr6#DqY~EOyg< zfVLnCX*6HOkQ?5?_WZERLh@V{)O%|J{{X4O0AXoq1MDyF%4fa0!E+UaXYCB~txZD7 zq$u(_w&wnrRGG$OESg}J1qv?WMJE27e>_zllFf5R3g4Cp1Ab!>rOT+=%Pkh5hUyTq zk$(O{FipmW`Tl*;o}$n0YPX!%IhEQq6bHj?49>0QKEMsR9N>VcgTwvg%8a%Q6;+o1 z0DbYACR()3dVJqLitVdQRx_%fYme)RF}*}_G=H@!3bpo;6_4Ki{qS;N#(x90`4mH_ z<5u8>ef^;T*3niWMPeS&n_O}Qjyy9uX}reXO9lo*r`Y8VZlE(P03XZ-4!4jWM z`0&!i{m8_|uULhIbqqV+MHc%3fl>UyBvMEo+$cIn>x9htvp5nfBtQ?uMv{FmjKdId z{{U;nUXijalF`cAT6O@Ad|g}n+zcV7NL7q=aHu`D2lN<$^AX1d=A%u1iu$=ehY6#o zq;@7qqa+*Ydy9We4~6T(=YUZZ2F7Dmzr}R7F+2^N>6?h-b{{ZdDKb5e>MR}D~ z4Ajtt7F%6^UJfG~vvcB9#U+QA&RW9@@a*uQiX5pyDP#q;XiI;f@$ZRI#YX5rm_$bZ z0E*wHASQ02C5*yuy~mZ#l?{{XHeY6o(-y7*BhrkZO7t2sKn?cXuvN=qyb_3uxWEQ?8%0lM1 zS9C13(7Mx3&0%n3(g*(lgM`HK%H+xWv3@Rg{O^N`(LT#Mxxbh_u6Fxj4-_wA(8nWO z?X7Nqo&(1CDIf$Lqt-x!Q*U8+z5aw@aZ~233da;dec1m1Q;8KcaL5}~OG0hBsMvd4 zTO1Vg#k^I6O|QHE0PhALw#sg~DV3$nB0s&B#1Hf>{{TFE-SNY&bBw>@X?&kCsfn`q zgh+n~M<9td8#V81t`F#~uMV#ewOB`j=F9v3UT34|J>;{%6 zgK$X~8)2V^=PmuZk>+qk8qPq5a?AoZVdUHs>ITNg+aFvK7DnP5KyhB51P>*xBqxkC zIdm2A*Gj*%X(A1m%ObE@)Z2mBf#y@+`3zp5%qk=b@;0f8{KK~5OLKMLi|_7m*H=;I zw7I*S&{aDN0Mimk01GA0bp#6zINOXd6RWeTLZPM%Ob@ z-q41E+geo~W0u1xrfTVCqo$^6*y(~2u*gStUD>Qb)Ic1I4Y5Ye>nXE-s7WbIG@GKW zP)3Y94kTqIfHt}hfdIRql36Mgg-CVVbR6l~Km)k3sXL#nyST5t z`XxVA+KoL#c{Wo=Lz#x9g1Ah9nM<`h76{Th_tK))8{8AzUsK3VSnyAplL#s2`{ zpTvp`fR32!EV7q5>1vifN|;tgp?0t`M{#fshNT?Z;>2RcM@?kV5b>(+{zuVTiUy6! z`nTYIMN`x{CS{vt+00R7@MbcMyFmi`Zva(!DP(j5$AyjVj5M9ifgbp=bVpXnRZR|8 zo6T1SYa#}Z#?)h*KpMRE&{%2&o9+lA`{T`L^xPbWG&!elU)^42FOyiMZCY_>k?Y06 z>LL>oBDmq%Po`KD8t8POpsbg_@| zbII&E9q@*GE7Qw$7VYyWT=$0&pygJ zEt;Pwg|g7$>t?ZHLb{ZUfI(Gbd$8PCTbttj)%pHYHf}01s@d~3k|B1dR%HYo)av{u z*VyiH+_q{A+KuVvDN!S#Nond)e|Z}X(U9!d1dI+pL+SX_i5S~0H@RKr(@XQprlVR% z7L_4E+zW1bIGxk6MgIU%RZ@{n62{2Ulja1EE8CKw+V-*Z-x`PfLVPr>=yED@h(!G> zSx{t&j0$C=l#QZiwyh*zPWCoE#xdG@hlI+JNbBP!hqv)9!65y>{IT=~I87b3S8ya! zFD&q+wDpFDW`)pOt1 z>4_Dv!%fn;23s3PC0ooh8d*z~F{>Ri2OYPG2qOCrwi=_%W|EppVOdWF4~)o+z$&tq z1&)!q8*OV_oKbuAQ<^xj^i>?|0EMCa7tbTey55l|l2~b+2-)O)ku>>>5PaTewXM%$ zarDAZD#$^RTH6p*+*`57$$t)V*`?~_&NDi?YIJCsIBumEMM1JEG; zSn^iPk}kE9%njSJk9vM{OMGDd z7b4MB$Yv=eICVDC*YDh3_^$j(%BgeypOuz>lBl6mQw-iF(K_xP<8g1U{qR-_N|IG- zbdVOoI@PMG%&fxU z0^NXB3ZM`-EPGzTkGaSVZ_|!`6pv9O%(+FL^(K7Lc%M*H_4@w+EJj+XtDPd6q?t(qGc)-E6S*u;lzyK~dKN+|;vh8o56wr0X> z+mz&Vm06!qWKUNU<}qL8rHMSUy6(VS6JkfV^uRc>nyMP9>*}j0<7h}{ZxLAeiLq55 zi2nd9i{Mo_tD&xzXeO3AnrFX>1K&vpol9}gf7cUpippyEerCQpwawneZq>a*PeDME)*wR#G;$@&BPsCCtbtOAHs?iHAi#=_RH*nMydpd)0>>9b75BbJ#VlEcI*(4wI_#fY&R z>GfgjgK#cgU7E$3%TtDxmRwUAM$zrk%2y`B&xZYTfF{jYhdcI*6{k zSe;e_dwnm6QqZhfEhS9yNl^@QHmDjvOS#}_wT8f(+}hx5aWac1%xSZD`lm2TS~@cy z%tGo~L`G%(-TRIE@CY`<>5Z)-{eGv@_eLY8{1?;z01SGPO!~H`CyJHd_GA%?ipSEr zk$Ul}G1d+He ze{gWvk+%XwYaO*M_s3UKjYbh~{9k+uS$hWwMnwu$wJ7v%Ftw7(KxJ{Tu{dMq7S{dZ z-1l39h4_%WZji9Q@h+S~Tcl@ky77u5a3BZVTwn4((;XTBe$S?ke zz82L;yD~XGg*6NbvXK7(2)frANi-cb5)cRafgh0=^G&+zTemkGVGA`mJ9t1^;FSR5 z&S2ayOAg@Q9bTzF(Y^2Pm8}hm%wt>kj{gA6+?KlLje``W<$vF#D4ETRc-_=#eq{{Wu2 zg$$HTx>r(LYeL!ym;r5XW3bhNuE?DPjusIHFnE8wi6^$!L2Na6iLyfR9^5tY z00CmfgB}3}*i?Fe1rkf1G`;PC(3WAbM`bmZO|Iw~-dpYZVZ`x*ohA}L@nUc{ODP1j z;M&$VBMz*Lia&c35ImvcB>i~A7J4CUAN|OwjoKjJy4C*x$nEy+hP)YxyBGzBDy{wS zEh_32!x2v7f;B9Xiw9b+;qPRL3z09>gc1N9jA<2B6aO;YBxGu2e)buq}( z!qMDAAaGSKMr53i02)(u!1YY9zJ-);2r$%l*Igz9|Ke+BY zSncun{%Csv6c(HD8?8ob@bYTddaD&|G6q!9qDwgFiPK1SWa17=ZU?>FHmP}KFl zWm^`1HeZ+Y-8>ON;Kz8(iyD=N2-K6c{N~%=xY%Ro*&}I8^)bRDgfQ}!9#F?%FV6=T z&V{BEMf*xwo{ukwOm%e{^~@>Hm4d0-=ZkI6peGyIT`DMX9UDy^#)XbJuKtN<$_1_S zuAd{Lqsy|&H2J);Raq;t;+i}~(lko43+}osPpBZDFvdgi4i1KF&Z4S zms+7vpn`As3Dsr{+Y4L1K8g5GmGp*v(y&m&AO8SzDQTJ%$_s{+sgRRA%X^n?BgwtJ z?`&5-CVUggGfC*{dTNR%rIMpmu+!NV2vv6qO_-gwO}8fa@?AHnW8vg@GP%tn#rpjJ z0G|t13B$k;vx6-N?S`+xEqis;HYF&JwPQk1ro2N6%BqPy~#+e+IBlxXvt?}$|VKO|*)8%m6)D=mQJ&)Y%xgJ=Q zqDdxCRFv65E@D8PlBfL$*x6owzmZO?_uhB?~2k@ z&GO3)NqHgI0Na(*ehK5A0k#X|PKF;6hb%P}5Sy3r${sJI1+i`q1e<>{8EUXwEo zAVQ?vBJw+KyB_(Bjr&e2syeDVT1>eWBz4fyl#y;3mg4ri17^0X4X$mAKftPZD>~wj zFwU!@IaLF#I@HfotXP6pH3NHUA-DhlOC7Q0`lJn$8b_P33H9x;RkT^uzK^G;fgwez zpp}_OI^xv2kGR!{nbuWDH6pbQ3nO`in%+=I(!gwuen_>CrsEdqDOzO{(`FI0Y`WCz zxFGsr&y%UJluV2}SdZ(EkGCoDzffL+JhIR&j{B-YNt-Mw6L`_Yif+)WmLPhU4R5vY zgd|z}JxGSKsRKIrLRC_2q+gIepIl!)POigR#@8RhSC7vO%S|&mR*FDD;4SQa$B%p; zzgPAIMHRuk{W$`OQ%={Hg zlpCL0Y%Fn@oT>?^U~G=2EY3;YrJ9T7m`_cjb%ByHUr2NKZMvJD0^^-WJ6C0`nY}br!b2S{xMNt+nRaIdSN_`q*9&2*eew2u zCm>A;%!cwG=zjL?W8chv8XO-3{ zr>FVa+R%JTI(mN*p>PS(7!n*RF$DYDwkn-JmQlf;$5lf^Tbd(8AHa$ie*)`rt`vtl zY;S99LBDJo9amX2^_95=6HwEcV~!ZsVrHjsK@6l=k^-ApZE<`?aCFY5jjMav41&ep z%R-OhIg_V`Q<_08S(4>JP*OTxr!tfhbe*)SY6OvEemCPAhfQYHS*A%#UtJt@l@$?* z1WLrB2HXHmueG<^A3S8sl;mb!qNvPLe8HU}rjoh_m?NlC+9JP|l(xIcU0>BE_3PLtHt5i%la5u{&*N-co^kZexm-yb^mmktpKbWNdr@5$%=lk!c61mx@` z(ovT)tUA77Bp~l%MaBNS;dJteRZ!IEkpBPxYhTlx6B!*LL{N;N8{1IAf91+RO_=T2 zfJfJyc%2I5T@HBmbeg_)p{lC}XzF}I8pqGLBaluJpflLE@BaYDZ|ZS2E}El^9R@|a zv#`^B$+_=^{{YMJMs-I$QnzN(4YAIRpzL-{e@b}bklVn_x+Vmlq5F#*IpO$<5nd)9 z6H6+_3b|4fQMe6lkJ#G? zjynAzTq$AzYc8Grf1U_Az+I}Rq|Dp$AqE5>xl}}4LVCOw&acn^uZT` zeq@av{{ZS?x%9+hk}F@s&;Y&v0H@a-uKOyF>2JN`{Fj(g$^kV=aCX-fzpf*_Jt@09 zOV1$ef3_qTSeu6ofAT%P;|VZ|V=O3DMBQRY?^?Q!;pwD-_mlq>I>_`{U1-(m7-_ko~n10ZFB(u^xOIN z?}HIjU(K#ZU*Q+H{c$A34Zs}sV850--fOT;WHK~RjaTaHUOF*XQ$->vuw@CU*K$7y z-1_1kX`a#KG;3X$hlV*6No77MYny%*7rxlFM$FoR6_g`bfn%ktEq9k7M*0#^ zKsGyhfVJ^xG!&!|VF%59+W2kq%6CzwBBQas*fEh9ZDHK+~qbGN3BO9Wqi(vXEEIUZ&3HzRCvI?glv(E>og4 z6mrKYUEVvDHtb0}VfX2<0Pyn~)jD+Q3<k}eR$i3uw|Q1Y4SQ|2pX-L?q?~UYZ>Wuf)NT*3x9NmdW%-3x zT`e5}G<(uf;7j-i)jmU=;|{^VN_-3}IB0r?-gX^n%j zCr6eo5o0UKN*wn#~nN&S!zq_1J1(0{=8rb%QI$-M!Ae2AH+;-Z~Eh} zlh!&a&oos80r=GJFb`{7Y`i8mwAe-JX44^Rdd7vou@P;6Pm$R5vr&S zX;*?uR3ME=-eBKN_QQ}<)F|-8(IQxs3cCaU0O4+NT#7!TqN8L;Xe6u`F-Q>jOMU?W zAJYxc=G{vKgl3hUJ5Y$4#EPaTVs^0%O0TgWOf+IRwCQl!3nM1L*&3K;6yjLwD=DTe zx`%+qqT_A*;o2Cp1}X`NF&wKCVd=-Yz(_i>sby$03cRIdH(-Xj8Dm}fAPvW+=MT~K zO4d{brmM=BA=4pxhQAwI`{G}VI2*JkHxT-(46!pI6;$#Y*aie2*AbsB0f?ulb?!B` z%lEzk&+!5pX~iURW%UwAv-mYyfd2sHzSxH+SLby_en%^%mIA~uT9qUY`xE8*_rSNO z$WlQ-I@tiWXzF$9F5S%VCx>3$O|=vh%-j zeeoVlu!(e2O41vE2ZDCLsT&MXI)ANtsMkuBne5XfSCQYtgT=8H(m*ErgKKHMhio58 z{MN20TQ2GfsSqFEB}Rm2-~Bpw`fM;#^vQAEPk8+Q0Kzkg3z1rrQA;_2+BJ1+A2ql3 zz7s0cR09%K#ve!_n&C(P08sw;6PMIQEkx84=5$grfbvtgyT%UoAnkAPV32w`8gU&Y zRP7zE)@4-#*4v%E2d)z6bQ-PFTZI_hy-13Jx+-%7Q;B;!8SGFGOY`-_AC%37VnRf0 zt@v)7Uwi@TGhJHiOO;R`m}byrisc|aL+@MZLh>_U=iIw7XbPU2_=5mO-%b9b3-Mh3 zS7|i8Iy#_qdW#Wo2?yk@>LXk4YY*>)*Hz4xCa1-**aY6gzkF8G zxmG}ih4dSUq(o7zuh{E6dj0V-y{d!?@JUwET>j{~o15O=oBeRZiKW04Kug@BYgsRu z{!&?Eum#d#x6~E?04;}BT)KOaP{`VdBT#D}OX8sxc@*(6mX@+f;S8-2sJp1!P`}~# z=jd?SSLLlxhA7g8R*O)1q7l38dv0`+N3E~69(r@Tf<8#Wt;n@?SSj91Eks3$*fGam zIHOU24EpoG+t(C{^ID~vI1OD?F*|5SUkXLkdt8Ed?b~kHV!JTTmSC~L8!NF;WtCJn zU~U<0z4#w&b9!6J9$<_*F6>wMa|l0 zjyxzFs`70flk~?T6%?vSw4J*gKw3=z2qv&RYH|SkZ){JdlCl_-B#Aw_wTT~2_`!R2 z*xK=+Z)!qKEmEqQMtj(R=HUK=3Ys%4YYQl+(ke<#)*~@+y*56M+hO!?MfU^WeR+(hXE?!u^+`P&*_Geh2m?gjX>Cvp@I8gnWlkM zhMgFmb|U`((+*QRK*(Y&qWh2oV7zx#T38?+5ZNm0U}A+)Qr8Nx6(3$PDw48LS6vxq zJN^y6+hToHY$(O$W^$symNxvc9M#j*LRZ9f2k|O?D_{$?joOI2&ACz|R+I*Mnq^D* zl}_W^Y&{)Sk(QcNWgC7gpYMTBmYHQ&rjA(1{5p-V^*HTDTO}aY4T}S~U`OfS09eOu zX#7G=fQdz0AthR^9NPMBEv%_`o^fLrmd=GVQiw%8F#RV^)a zRY|1D6NXU2;^6UaE$xq~u!1SQl7YSvs!pIs>6-kTG=b`jgiA>=Z!{9>8i~Ilmf(+D z90Gw<$e_p*o0Hq}#osH3AnGdVB+Fq;yExP1K}}TZ)RM5~A$`|x!VSg17Z=4MrAT&W z&wDwl;);}%#f=TW4!m_F=tm3HC#VUBJgrYlX z2HWW!hkk4@IacHgfq#B6WXq_TGHl1?Go%wnz)ws+?avm&TDAPd6UBzxf_E4>4uln&PKT*Dt{0cB!Q@0X|cu2_H=b?nAIA1 zFHZmzwvC}!_aOL+KLc2n{wvr3ZH!#Eh~7x`=ao`I1D08yVC zOl)II;kj1vPquQv&c&=6P>pm<2}b?y^i4S`R_*8s>4y0 z%MBh7G(a!mSwDV185wk<@L*bA=q>$(%- zk3wfPRT(`Nbp;hIMuA%#Y++@;mD<-9u@}C>e0@ck%R}=&Fq6=tpwiH_R)Zqjh9KDP zNw=`X%&)6@U1D0PXQ6^n0C6=%zMvcVwg(ybIc{JvxLEk2k)g*>UozF^pB!l9lnVOq z87-+2G}h$U?YElO9AOl>*T(Aj=aK94DCCR)iuA)=w{8;4cDH7b@Z}AgffWbS1w8N>R#T5k%D$khfs~bI$RnK_J(xl zPf1iH5Biiwo+VC8ROP5D z*+?wB=x;|HA6`a2!maAQny8L6eA*>=NRdj(=Cy|g{rxtzupg*t`cJHKX)?;RrFsgs zwS__5>lAPP%FOvF#o{Fy_q|9f`1vP9G;uB9CEu@X~ zja&kJ#Gd>5Vi!);($5@mRMQHIq+k(7piDqrxZ7Z)@xAeJ_>Iz1^yE>)B^^#^^pZSs z%^ESMk}EHO;fEyZU{vnAi*bq`O_s?HY7)7G1qs#}z%j7nSmX~;i?J4%O`lasplG7C zABOcgam}TYx|*djv@Ja}Dom$9VPHLU@!#Iq+WIRnugyA6lQgYpK5lk-TSI>iqhW7l zx8;loQ6en0R5^;($5~T0nP5lL8Ub}ej5Y-WcobE7<~U^}oXY!$u~WxRI+_v~yw z!q|0lDmmCRikgYoSbk#=KVp|5Wt1sVwfDEsj43iHJj3QJtSm~O=y0Ogk95{UBe)2T zw-*q|t$l*B+w41Uh}q)Hy5>MEknX~IfNJQ5d2 zI&7d=ZpVH1`(ga*mp)x53xoNVj z-j2RV&{ahX-C-``%7wYT>~z?Ri*3F$4z`ag&e~q3%`-gHG|Z~eMI9^A7?WLwwS7Ac z!+CCOH12n|)$nt&GFrov9+9_We-HLf)R8PKt;)}9^ZctdrExY~>r}{sS)-oXz~tDE z#&!p{uM$SF_|6IejRt66+QU>j?T^JBI-*7=7{*SMP_$yXofUbMop8-N}#e5|WxxIBjCP7%`;RQaZFNtC8l z8!MoKs(8VXowaINRW1}gthVoOQ;0cTFHq*`{{Sn&1uW7TI z7;?8H9W75DYdu_Fv}vk@CYCd?kX*0_xL+wJ)vP$aC_Dn^HO}1dJvRLk9acd+qh~kI zvSg~C<+4bktyV7_^rB{n4YVO(OlnTsaC`5HXHaJqwRI4h`hi&lV^T%pH-<0f(YF@8 ztT2BtsjsQ&lu0ry#oOk!#dyh0Cfe5j0E))LzAM?LU*XK5#X`uj2k_pU#3GE?t6Y*u zyK;TL%*2h2b+`-oCPd?=o!MNz8P(OkbSml?e%Mxu45dok!o-jcljT%Va!)r4ZcYBa z>D-zurznbs8QNx2UU}vGa>#dPW4*~Y-yb*pBg%SrC9li+#3k7^VZWbWo5X9^b*7iS%Q#vvXO;G!2ks$Mm!Krzg%Wr6Y-;?x{Vq->ZmeGhCW89 z)MNS<8-FZl^kM2_H7Qw_%^MJ7lAlw8zV{;@QQpdR0BOJvnO0olcL7Q=YEQ=>J;401 z*;f{Dk(--&THn_aAeIIQ^20`~SeLXVf!lBhZ`6!Nnx;j7vQkrtFSdhVK|Brl!5?Jv z0I)(+nn=Fu+GS(-D>oPa04oR{tD48v9nwWBo9b0I<4ainrweGLRVq?Vz_7j?VAdk;3FgGx z`D4mq;hbtdq;J1C&$5BgICe}ldXx?c^u)01^a ze%DmD)4mO^OpYdv-c&ywV{6G%3%~yW5-s+}Uae8VNZFZti7ofsVeuMBHE7h|`6~mD z3Tks8)X}NA+fl#dMh@F*>loG_DE!oUDom(Um()198}E-OQM{K;ANX7K#I;HY^(wLh z+^7KG`eVTsOXs!V;lA_nX;{Nz`5@)#a+<-knwjM}eQdmrP zzSd!L`D3jL6aghw?Qq}U0$dWMWL3(B(z;zwnU59&dwnqMQ(pf7xeV6c(Vy>xy&GG3 z*x!qQ*k(#fhIKK`A=Y<=-vQ+XJ_0I(xjv=k4De zYAGFUYm>dz?fme_q>&~L(G_5Pw~LbwR8N4|cxGKP05I`W|*itCS@Yc)fRZYKKRC?d8 zsrqX&jw)=ia}|a$CSgkhpsR{EV6jUYHH3h%u>kFdVPnrc!MOhbi?UPnRh66kMah05 z*5!45F`Cll-9wYLWHgz6VJ(+1aO@ax+6lUV#gtqrBpxwMX(Fn(- zRh|j1+Hh!}#a&1m6nUZj<5b3k+S;tF--U@A5n^^1#+}hwRJrv(QdVRY#-5WY z3o`ukN8-q!STloQRZ4@Wer>t6{a#)}apSTE+h5LtsO~5)p#K2j-!91Lx)up(D$=hp ztd-WLu~aKc>2E4rT&jXUJNLjB>Ta;9Y2zN|7Z*i(fp1#TCgXQfyQcvw?6M z&2TZ1d>HtJ7fof;*2=ktY1IXuhbUT!k~$b;eJ11<3>cg21&+ewd~M$rvRwIk1+yH= zsu$0oy0p~LGOS`j=2T_5PyisY7dEixA2!XxIDJXNdUItpzpui(4ZRh%zsL)FFQ5J^ zXPKoBhloe!eKk1!;I ziw<+vS@Ps{{VP#XGiCBPRi~BwSm~8mGKlZ^4fZ5A*T z+xAt7w09$~r=^`Fcw?%jAz_-5bNJP_Z7s^!_Z#tp5Dbc&IHa2;%yV46Rf&qc(W8)c zFw^A!0LS>Z?|Tdf>Fk{|O5l~%2}F-h(;*_>Fj0LgVPI?y=WCB#PU%YI%V}%sqMdwC z55jtRBGnx6zQh*2)b3B)kZ^OfZ>N=A^}Q<|cbH|hSxfxBZ#_+0Q!OlrV=N^IQT6gP zizj)f90_mq`qZmxC&dE_=M=0X4;m=?YLhkXo47E>Fxh9hwDFXfMw z{{Z2BD%!mGL7L_ji4+%}8fS5#h)@IBjqCwD4o@S$)Fi8FSxmsEe+U!xxET27w74w8 z&U0D4@Aq2}ei7YDas(wBs12{EFboIRj3opmRCw&nHq;*H^u%=_okm3#8!%v``{StU z3nsT!3t-4bug@NO(}^V5PgH5Px2y`J?#_Ano+dT6KXpzLQdQ+qWSNvl zEw6#g$5ht{=++@!ZNR<5e>;m6%_wQ|oT`?VyEe?cK=IYaz8cF+L0#+)*W$+H5Zl_= zt<*g{bhNcDvD7QZLc;okA-MpPVQ@aD1}Hj)N%JZiYH1{vJ4YO_)#>nxps2>b7mk7i*F?Bi|M5?wsXaM^#G<4#Y|tFvjkn@IJfP^NR%qEeA;E zGK#vFlB!BnMQG7T*2L>EIARC@0dhAC+iWnWvAzzTNgI0nKGwOz`gDu@u8fu{yvC_h zLP}`ql=#hEHnzK!JDAB(q#KVRxW>Wo02`>Co;v_}$u5sgD? zZNh_K1@DYDqKZ7mvoo5mvSw&#jDlELkdCXVq9B2CNIY?3c)@I|s&k4=-k!2*VJ0+ z1Dlz%K3&RABpiwYI|I2loD=y_QHm+q$@YI&GE#jgjk;uFSh7#qfwjlj z;r{>(5qF(f(S;GJ000&{4{mVG`4t?<(S~BIrC4eP z;PNprMuYek{PB)yU&Iwf_BPn#iFn<2hSUE5N+8LjTmJG(TYfgjA1G}^q~_M{pp*XC zm>NKM9=5qB{{UF&mQXEZu`RM{+V6j0ohj)lQWL@q9lX9hQEEViCUsI{q#K%;d*GWCSG%@CUsrX@+%TUz=H_k&F62CZI zPpHy%xwWr{4198Tc^^;qgyIUjD7#A~)8(4(1k8lncYD%ELyQ_|1e+PuYt zxYyYRze8>DX}GxOmsim}v^SuxD_E+c@=F62ui&aqN7+75Z_u0@XvEQ%XdX87$N5v6^X`HIYHs`BacV`u%WGU`F>A zhYz?-G8S(^U&eDx%14NVb|sjd``-A2Uk+JZvAp%Ms6qe?7tg)ye5U^ZOah?IYGI5B z^4JEQfr@VD)7$bs*nOqVDkc)GFldkB8f@44`(iu;6S=RbMBJUYPgHd63+4}36g0Zn z0Eo)2fc7>38~x5XCr(C=M6=6jNoN46+@DRaZ{?3N=4~#aPa<<-ruH9vIUG66ssKq9 z0kI8hn{o%H49h6~^ybKUq#CE9@`)-WXrMIEu?*oQEic`Vy}v9!MUdp#dq$d4q@}@m zBr3#Pi-Tdmwg|~jn8sC_4K8_YKy8L5`ID&l4B=0h+#UAX{jkq^nc|D=eAJhG5*idS zO-~F_q%E|HwFH}DI_4A7(~4N>jY=o|q4N5R-~RwBoBsf|B%y_@-?CU)?sf;aazCCO z6HF5DMDgEM^&OA5(;cjhj^S{b$7)d1GNGy4G|A(qXYzjW6cg=Z&LURi-7A<>>z(Df zUBQ$nYgmGLu@>6a#7xIC$zlR(uaq)GNFd9nN2nI>_QQ2K_f1Dib4sd3l9|qr5(Nmi z2G%TX`ixzU8Hbu6;qqM9w~`c@x?83sh$FRqgKCT#vI6@Jw;sfvPB{HPmAm-VS(8Jg zkzoWZ6rSMN5q|!-6PML=HfvJUh-S;?cL>n5irTw|*@vgw78vphIiPu>t&S@T6`xFZ z1NetGz8fp1h|}Kd_>cQQ;KTi)LZ!*6soMF4eAQ7gD!@}1*o*KCZGF35_!jh;OtTtc zPhUu|zN&en&HUi@U9^Db8vdF9Yv*Ho0kt%c9;fZcf%EX0& zj`~kNpaX*R!#${^5+1h9-6TTbnAC4;ZUMUX?~5fR0@vm9Q{=P9noktI4NuKdn9OZs zrIZ_m2E?CyE?%DMntG^AkCsaspw}^t%Z2~~EC2_+yJK=p*lSB#))DXn_OuKQjE!5M z(dGGsk_o@&I{A1yT5Az*#BcpDQAEh9CaS+-sJ+Ry+g{i(dUH52EQ?c@$G>8 z@%R3?O+HB_I+m9;rI7H#D49O@V~oi&82!tK+x;yj>Ff$cIO`fd_n!Eme3hiTGyGQZ7dZ@HtogmOE1kSo|DFw80lA7U3CDd1nw<+ zUvA?RrEB@qvM}A#pD|gae)2HF#^U!r{9);2nc}pv!T}xB+<%_F_-N)a1Rp6;4q*4R zal<+1c8ktBpgIO4Vk)t`|!cw*BwNY(M*cXzHMb zvYRbMV_?f#w`+glVtWy9*AF;zkNXHbQCp%@(89(0N5Nf`DDPKnQB^; z)6Mj?zmdesI@s#GUzZR%$GIyou=MSLIgNE~BpxKsNmWcs7I?zO6kA|exd8k7;Ze3? z?Ki*2pXb$0_X%{l6sb`(hL!{lH0ehw-(PcX_(gw7MVL+nMDVH&v=jv2u{ZDUh{H5W zhJ_=huZ6A{UP2>d&iYN8*T3tD)biC!AB<{*u?8UcZralPbKd^DVea>a9a^ZaX%vRd z(V2W~jXd=MqZ(17lmI>Wwe7##9iZvDx_F{kYowk#`F>@DiO*{ge%|<(Rar+9EOJel zLo;`8!cVoqzWu=T!qUDu3J0q)%5SG!q=vVzmksf!X)Rwbr{Inh@ce%t9``FF>s@zFe$V5crtMK=1{->v}F)p(!^ zc7jE>H?xneuz@XXKpJ#14a-;yn|gn2Qy9)XmE)f~38GboEXo25byBqU{t+dw_C3DX zNUEZF0jJd(gZwS16a26f$F8V~@~nY*yN>*yrMKG*%%_2LOAF~BZ){JyH@T#PlNj37 zlrb%ME0K=?NpJ_X#vYe5sg66cKth|AjzM+$@BJ}eqoHR&%`|Ggq^NxZ`=7QCWVt0O z&l}WLLol#67t?ES7x58~PB*oyOyGuh#EnuL@tdr_2eenXTGN-A8G-!2hz8c0; zLB9u^{+J(`WtAb(=SYb*u1z=T4BZf$Z0} z*9=r;@x`TIFr{>Jb1ag(miyoI;}Bwwk5Y*zlA&W4Ql*qH*aLsl1t_xYuX$fC*? z3QGFbeG=B@9&f=6N}yldfou}2sZ>Boq<{Xgd;0e{7}akiVXqsin;#CrN7ndcK%K}$ z>0NZ7XWdznDN)2y;Dhb&Vn+3)2man0-o{@D38moLa6%<5^g zs`~0?ggV_|*Q!v&3+@PB_uTDn_s6&PW2a$cw94S^Z9f{NN=aNzT31|kWp7vJRQZhg zUR^~|O#;NtK~7@vH2(k_?rz@uV!cyQEkhY6CP%Ou&pTm$KZ7Km5dGYWR0HXb#o@If zNTHO}YC5D1wu82vHudj+w|spfD47!jSSSRO@l3LKYLBf>p>d_IN7vBd+B(*zj&xLs z#PRrVtpOlh9gkzTBN3fS+#7;BVHj!LDNAMqn_#|K^3Mm#wQE2m^D$_Juf?@c(8@S!m`1TRKZ%Smu56gN@ei=WLKhVSNtT6S5aZT z_&ng$nXOd@Z}LqoRV?jFlrhgM>xGw2l57hD=ot;JE;+?(qO%!etcsc(z6seRX+(^G zuv=~{b|b%=)3zt%6|huwWc71Uipp}X;woKH6jT2IKWc-%{a#efw@ zgJ#D8S-u|BWl_{Lxt3_K(bG(j9V|Sn%g9-U^tSf^Uv(I;({yjbeB(KbE{a_0Jj$&M z@WV8Y9$3iK9_4Mg1oMi80C%mEEX&{(wKWxDT5%&YI9(*}ZN1AMG1w7uH^z}k(q@~k zXu7lKRv`rv(;7#+vbTfb{{Y?Lw>z6)ahgoTi{JVFRaqVyNe&}q%>Muc`YUjf=O}xB z)Saw(IOMbf>IVxYRk?*m$vM-o#jo3_fjQ z#gvxh%YTTbI*+00`fsNjs59QV>S|27m4iI7ctw=Rbd8oPo3nie0Q8FVUsZJ!IYvYA zGp?u1r;LSP6T%u)7B?n4dgJK7ir)+~Zn5}XUDKI$bp&-aYfMq63={WqqmW1hi-jYO z_{}~I{{X{RRP=AedTyo6GhC8NXwpE*1Io@dDF6Ua4*s}XabMh@=h1D&8;oSR)KW*m z`AQUSx$9z#b!h#n06X9PAAASvzKqK{Ga(&8)ID+6?Mob@An@j9M^=0A0*-Bus1v3v zENed~{{Y_<{{W2N3MT8Wh?A%2^GIoAdD34JSjk%`K8E+-9qy71^%S_T);FtV4*K`kAzI|8J6m?M=328)d)3UYP$L6^_Sq|Rg7SD-43wk%H zv&eG}q{?H>t0RSCS!QEbAHx6@k67aQ=OU_YLaAzWo2~veKlLOaE&VRSh+lwCxS^Q(;qGNt1<~lY)=G(+mDU*=Y@X< z6arlEpOOXG&EcyZfpNax;|L{uz8eC6@E5iu30W8SvLlVIZDaah4@7eLK-Z%Et}XiP zapH@sm8RKYZq%W)s@nnP8PNX0DqRbB@YPaSF6XA&V z60;5YQoH`RVB2t2N94ThTC={T_&=2Ad7PQFRr6C-6$u-`6k;?`4<5*C zd{fHla=xIbqNjMB;gGC`5Ht?KZZ^~{xa>{4V!KD0SJ2VPNfhcJlpRRXtAlZ4$Tr*4 z1->B5nA2yqc|B!CYo#QnGaW%1gAPdpZhQJ$0BK|Ktd7NFy~zUPZRwA&Vl?}^bsN}j zfDM#!e%JbX;?qlHE zoX@Ifo=9@YOQwlYOkh|KOK!sLZZF>0J6D@#%}%remn$_kj6iCpjl>dd=Sz}FAdSzj zwg!AJtjcNgYWZvOy>wm!=+eeVjld)*Qf$h9@*Rf<3d@9f)_*3f!e+`OV^om{gU*^% zsPd_>VQT%U|5!!%HR>jnm^tDE>KBLN`l!cN-omwf1HHZwP zvo@<6uEYjCup2p>D9j>BD>{!boW(*_1dFWrs>jKH;!;kac>vpcVATCRN10Sp9Lqj& zM^T~MMK^?@$Rr_9Nh|@{!;WpSBxrKnzon^X&hmJr%uH+ur>x7B;i`x?nbh2}Cg=w@ zu_Uh;D5Z!HFMoic_aQ@E-&9(JW)F}-m*g?gMwN7t(TGG%B(F4r!c_Qr|uo2vRZraFp;I_u3@ZABE*y)`8) zW?2>F(n9H5=~cNPYz6z0ZMqNmo%lQu$@^w{5gDPk4wkWbt!wDLaGsKdinOnucbZ~{{X~?O-&s6MoT&XZ)C23q1%Q+`hPKx zq0jtDd>$$f{K-}>KZh=w#=yI7|S3jTw8Dql{2 z`0|C|k39HRDkNiPs;8`h9h7l!B(?9{_QkGRii#|?s``s985AhWC6cnHIO9TZr}vty z4acv170muJYz8tOB7D9Se2vfjCYYWZsEP|@%>F6#6#>y% z)>&-t7$MRk^J?rtCRy-Wq@+~vsJJV3t&(OU`x{2K;E&4-l1z3t z&8YpAh;R(Q+_aj1kNqbtZ9NSoE^RE5utZ0uRMzIeSn9Hip7+MBk&MQ&8KuoAT8Wwe z0CyLQuF3_E0>f~7o8I@fK5^-cgQsEmyU}eNP)!8QJ)%~1ZBe0Rb|;&j+hgif%%xbu zpAk@40Ll%9K6~wVy2fK{5z%n6ezn`=tK>R7XPDenQ$l%;L_=@%o0Ei!TIjA8p<4W1 zH^jEC4dw)c?54*YYV{)0FmG)HD zrw#+yTv!6u!>=VerlU>*`s)N7NO|;3ZbN-kSlSB$(aY)$n%w%1*mONJDALye+*yt| z+FX|K0A75rYkpXHDHc?^IZ`>=_!8inGC?~gKk3ODUgxj`H}l7qIMue4?f$67-C9sl_lc&W?p2ALX3PV(` zF6>8e1@3(?!e;AlO_2Uwv+FU@QFkxd}iqyjzu6F@yXZDI`RSn-M-;Y102Sf8+_Wg z{{Tlg@9h|fAP{%-wf()YJ`;yz{{Vj<+=($HX)+Pc;Rp1?dL?2?nA_IsM%aWaP4tL~ zt^|f7N*3m{xbkzta2H=Ca4c|~x`>$5D^ zC6*feyTKnXldU?^Igv|;RX|@!4dzpQ?Y83u{xJ04M^(+0XIXn!)hx8eYPnL8>CuIdNqAxj8>)>UfB+)kVopn$8fYr= zyFA9M7}9^3WJP0ZF;lVh^KpH*0O9J&E~FJy`G0{N%?dSQy*Ne%SyZ!XQMds{-HrR- z6Z$@fs52beOxl*3o~BqE=O>bND5^_XSbzW}wgb5U3~R{dHZ#Q!kJ(osl&*xAGN9`U zOu$w_N@J<;=BcW1B15P6?h9$P_#T!Z*yHKXiWLyekHWwrkXMIedaB>nh{&%?lk58bBDGAwav@l=Q76zbNgFZ*7JnZ;$M5(`wLsp`ham=?0tTi*S;`hy)Ti^mbO z^#jEkBt%vrRg|uqvEsvlzULX9TU`wtk|j+N&jieZp$&tT4j6=Mc?q!>-<*2BpOfR` zwe7#I$xakVP^qG+sFfjsB$8G-QZxjy_5%j87$ImXlC@R`k}E{hP2sJ{uxne)Ha_2c zLye}F$E>EKaSSc5RD8v#*>2v(!~0>X`bx?*jcX%ic~D9fzYtS>C)gX`-uSZbKbM5J zTeeqxwx>DijQz5D%*wW&7DkYzB&4a-x`P3=*N?5PF)OX|V+Tmn=TK%5)aCOiij`-N z_sbb}atXD|E9&!bZa^oDR`NWKX=o;{V@p>6R1(IruxRx#0fmO-Z?^un+YIJatxcED zM^92~DV@{zl8ZW()B=I1-9R@7`C~W2xkICN#Sw!UX!EDYiMdRny1)BHm}~>_|TEMlX1VM zK0@fp>GF712&9f&-!KY8wVFC;`>}ol06jMDMXY|7>2HXcJ$_)FJCs!##iN8tUzj`| z3_x4}s0k$8Y@l0VVUG#zZU>1NY*AfV)xN{O-0T&+M>&Ls@%pVh#G{=Q%@azhZW~J* zeM;g|$w;A!G)e&T0_1ExuZVF{POGd7mfdbh0{+(92$BYM(9amX&DDq}-ybj_acfPk zEgUJ*wKD;#xJC%LA&4Ja;j{~*Ty-liZ7#rS#8{}^SxVGMM)tek^20S0T6B|{$#H)u zBw{qTi$eE4uSzJdRiu_gjcu_5Rx=NdJz{!rWpvX~xK^u*c&2#@!7xjfM%dky*xTF@ zb8(ASXP8lB^lzBv8HDK+7AN=QTowz#*zVZJf8ql@>b#pPq@b+Ia_rKEe9y(o>woV% zSX~j5vyE2O!zkk7=hAyQ)BJqK7XU}cYx#QDr=nA`H8lFGcf`u9r#$_GO;I!y8MKi} zHd|dZ#VO57XcEy(q>Bazbz&?)7rw{l4~THm!_<<~QsfnRer`kj^&&8Mqm-5`(3RYw zQl)nw3-S&u@9_q%t2L;PI9##g&1jMu?;bV~RU%oGF&<@b$SmC4Za3R7&Z%l(%_jZS zN-uR08^>#Hq~DBvOWFREa0iA?z-_;&C-^?QSqh_{tuvEX#Y37?%~?quWjsxGr<7S+ zYY=c=hCG(Gx-SNzN;qPbv^4QuKqQpbS8{GZzhU`cMn_u>9dR`ju}vGHjn+YZh~D0Z z-?llHnJ29Mp9>(4rcj_r`c+BTF+2-joO($aWS%xlcXeZ|h78o!)k8UoT1ID`<7Q(t zM%qa2WntRa)qdEM*ECsdbu=}(Zeb~<6p5wejOs}QVf1Oauo~0@aq30yf)P{69Wyph zET1t95#_EViF6YttwDF)NH-*nzTo1sSxq*9m7~aNDP=x1FB58KCre+Q@3!{Xj`*V! zwLDRvJ0-E*lho457Dr4Vm7`f2N}8$UjOs2tx)k>sP5%J;jqzm2;Sf~Bxpf^SW@A;B z7ptw7S3fKafsCN=ji71UdociCkhyosRz)6FnZ0E-YJm->CqnP#8hIXG`wfA?_ekQa znu?sgOv@sOBt{X(PaJGp#FSWv1RI6D#eulst0BX7@PW^xvigtV6ICu-CVN|1BGT7N zkx(s47~RFRf{A+tHn7^{E%wHN^OTYn{p@;y)2PU7J-)d4dmyNrFs}`mbtZ57veelR z$mxzMSk^z@PUHi)UppuSk*eOf`b(y0mW!vTsi;)RNfb&Eod_~melzQSZ;y@pMbpMS zo*{Pb>;}Mm`}}@3w4r;;018UPQhymDUCyH6fdu_9^VSXGU{K%83h}qF!-T2)OCQ$O zvHsX{Js<_JMz#4T^{~g8vY6i#a8y{PWeOu-5k~=*_WB!N4!vHGRiKb++QgsG;c{!S z@g#|d{&BYd0G1j?K!0}{U%i|G`iymyCDM)xV6@=siZ`2o`)=fc_6M9K=QPQfE?*>a zEmOzhga=X32p+zt5=jlD7(rroI>8tBwXySbe-tWY`1-H%5~9;ia@lFwwK83by@1(< zt=GQh=NkPhrAySjO+VNP{{RR~vNQ@S=#y68GEmWlj99FIS+Cp?VYlBBNn@%~t6}fYY$Bqno+#RR z>MtirtNAOb%&KEjx{$K-tq8{>&DpMAH6eFqQ?@Hv{{U0c<(*TM>Hb?`D08@gSTiaK)B*U5DgM}&w09}($%+2}+^uR2 z$C#V;*x?POe7c+-`*DC!Rp-UQk~)0^fA(@*-v0fuCF|Gw=* zj3@B~M_AQ$m~;GCQ8Qc0RF6=0z;l?$K?xY*=a7Gv5Y?M8I)HEDQ_eUt)waYR!37vH zP7RH{y-qpfP7TVNeMj=ZBb*!Rigrc4h-5Z6P|oBbmQM`qG>!iNJP?W1vTwRS&?4_s zAUbu07r4}%;h)+{q^z>R8B@NaqVf(z7lH`TFg^W?`^%XzX~>uQDj*Zje`xx-?ku{K*afo zbJ#Z@ToACOtzqR)@!*vT&WOPBuDt$Oy056(_P6DZ9KB3- z5xs%21lyi%Y!qul+WXQsU=jZw~9NEPx8cbOF$bzf>^!P#vMvURdBOT zst*2bNA<(41TVOIu(1G(AFcqt_DXC_8&VwkeLE)7RVtS9?i%gKLX}ZhK(uL`@26LmA$~Q7Q-AUkwGVkbxX-+D@fppT9U{Z!O@X7|gCvfk z4GgOBc(K%pACYEw&^R{IKNN zEIUaXFe3U$KW+v%C@Yl-5&{n<=D=~-;PeU581jR0c+-VieriF(eN_Il=~I zPb`0lMy||+U+O#Jd~is^Kq&7S)NI`SZ@9z-{{W>y6H?Ar>_}bgOB286iSWg7y5Wr} z;DnZ{p+E+R1;*n-jCr1t$67*Ai;>Cu;hAb7X@Uw_n#RNt#t}Nwc^V@l5%{bD1J`rS zvB8JB=HkzP=?cv{N29YxFIkdN7hz&lyk~#@Bw@OKhv^t&MT;q?P>fj*nY6X7eeZA3 z;G}~~TUO58nTs2DZcWZ1HR(+u;&(Am5ZlI1srn*A1hUAo@g@}LcvwxyNmc? zfDL~7c-!lTF)%hn%d2|b2Wdwdl z?}Hg{NBq+>5dLB|ZEK|al79SRfBdDF#AI1qm)HU-0_o@duo7lO58^hHt&iMa*;9(; znSA8ZWpJd-w(%*cfVlJ|Z*Qg(m{n#*9}bGPo*CW0?bX0Z3+Mpk{jqIshoGsDM@5|G z6xA2IG%O_B(!_2rY(GKpm13En_U3fVMSyvODE9)x4rX3Eyv4+yh$V0$>WZM#&znDp zDzeH}BJHde7eD-1YWwkQcf_lbT@g{iMr=IGAdo+?4coQ9t~EMehA=>=Uaqot0>qa9 z`{Hds!@RI-Gb^!m(tmgX`s_c;oD;K~s>6RH{!wXY*erRda@uN{W=yt`BP>e@qcD-N zwaW57ruc45+P}lJbh%vg4yN+cw+8zX8)Nx>akbL)E=vQ-KV?UwNDAIR;y&wbzP<4B zbdFLKr3cDWsW-89E9?H0h?qP6O9GFkvlmzWFwmbg-C1y!C z%|({Z>gL*-Sv9aDn~PiesI0L!*+Ia6$w)^57;9EH9$x^N4e1~@*e0fJhp!*55k5s7LKj-L zP%VEBU=)74eR07hB{!O@MBuH#5fEFo+T`!_$2@u}=$l)lF^z&O#FOeYjt(Dk17M$; z^5Yj68q;YFlEVrqyaP%6ekqr~-+!hbwp|3jzo=Kb?7}iYH|I~=xWkE291xhPA~M1N zJ|~Dt0^d!)uGoSoAgh?jV`OVxb>8RfM)=_8J9m>wQe%c2V^qlV>OmnfWpT=?e6q-b z{{Ys&dSZ1xXPQa{L7gZTPvVL+)Ki^_Khy1oVyA^*P-QX3rp@7ipL?7>a+(Qpmp%%=69?TB#(B&iaFDJu z+k(UbeY~S@&kaLOT_r`*c;8PtU{?EI{jfqDuQGVu^+xfx;%R0UA3z4*Oap{X91qPY zvdVZvB$KEe$Bfj}QL(uN!s#8r?tb`gu9d1HAm=kC+`tJSdokeeiB&Sv(lHa%QidC- zLZsi+VW+PkGa^pFg2b}vP%r+jKU^`T+_YEGA zdDt&!c^+F?l+|VR750vzBO7=sp_b!fEIIn)59@!2wH-E(nN1CDYmn&%qDb5cBYh+b z-seapZfrUB#_dT9q}u7J;0$;mHy!@~5je>{DdjnJBWARjpHt=;Y)xv2s0z7)M?2^i zC3ZGz0xS;L^d8RTO3BPY`yNGI{Hu!fQX)Ny#X5>yx@^Wq%3)||brAwdZxAn|5zp5U zY3Fzg6bt53rsDf!ljt%X0?XK5_QD4~xcZA)13*XFE_t4J*7|i=4=RNl3wFa;TMu!B z+iVh*?lCJYs%lDsD#Z-LhDlU1pY8P<;w|waj-{Yt%BV{QQdt9RMZ4k%u}TQAtaW}S zVFp)44P6D^Jp@DqS`NSmxB~m~Iq!&+GOadq6cm!w)JCr!!t3tKvD^cF@7n$G32IG5 zZ!JPf@+4tlF|bgi8{LJjMX$xNGby32si3K=%HTJqjJ)$10AQB6DmfOhxfjJ^%?%)( zzsgRK1r@15)KW9kE>>%#Gc=MlP=rGAg}uaL_hO>r?Q>&m4Y1`8SLXBP(pJ?|R!Icx z#bOf%))?9)2KGc<`L)j^oM+uJTbonV8kEZB%*499S~Xik%%Ih-H^CR(k?XF2H_!-~})IJ!ewNrn9QDm=v3~jc()ZVfx_Q zU-11+PalmRS5G{Oe4!}N57tlXh2(on()I>Xe*k~NOXb63g_HEZ@V@1XsdA{Hh9!AT z(QT#&J%_ixJs((PQoF1*elsJqWn)suT8ot1h8G(jQIC)+GT)9FZBiVY;&fHCF4uRT zNYU$cA&2B}Y^TLUvcJU2HBDNa!IZ_~6Jc|EelL7bf3%Hl5j!aS9sU-N{DvJ}mGvU^ zZdhQanWL*koC2Y#*cHDThi*IKLUk1b#vOc83hK9pZ~k`2%`ZovRDjh#5IT|HNb^Qv zjSl^QLv6meX!QR8i%~62M_6?W&h{GRtBlA1_f!N7QvU$z`X=58{{Z@wQRc-j;9*}) zQ}q=UKzF8&X`@yv;wt$|4nW^~8;_{PW2vhp%%w-7ndq9l-S-(!gd4fUllTavSh8$NgpQv0JP5( zgZ}`I{>Z0XQ>R&FJyX&~s8@WQ7#}Y+D5s265K5JqKr91TkT%-ej8{5m;l@MK^21e? zWYm8=u}2Z8dAB40rN#C_ZF8sB2Tw=j#X>a#NC#88v?id7;u>>O$P`(e6@eAZZi(vhIw zRBLneusmV~Z^RCjq-Ty^r=X40^CVINzilJ=;h+Bi8eIee>*|UEIUx~`^u97%g`HZ2 zB>f6RnHjotkN`xM8s+`ltxSP;^Hbdq(|&OD64b;NMvk>EY&6gl>DXeuH^q;Ka1!G_ zg~_neDc!I63`dvaXTz8mO6HOu{9~n%f%;*;@x4LAYYoegPnEa3(C*Bfp5j5#m-NOYjNT!%Sw+mOtH z->wb*&F9~j6#oGG1;$*v-M9IzDyOJYFEez#kA!qd(6FAG19~ z{{a54-QVp#Jgm0t7!_mwA$mVFscHJcKAOz3=rx6@6}1q)l57Tmj9S;e$Bbe|IpK`z zM@4&pO4{~2jC~1T{{Rvher1=>L7Q{}R#Q%;B!%-ID+Am9-#+-pAE>C;F{qL}hL(Cc z=SfU8q{}AP^7yNy*xcUM{W0{8g6#O<@Uo%Pr;Wh`dUMKrZ{P zbx6ocq2AZE&A8kRuiqY8F>OMoB0NzUu{YoNfaHuOuA{`OsFoUJr;b-G;HC7SCgDZy zY(4!k8swgL$Dsg}>MGNkWD{i76tdS&l~h$Rq|nt;xzi*^Vn(5LVa1pOe_TP2=d%df z3RsyH4Zuq%eXL0&?s)x9AM1Cd z5owY&kHiSYl(PYHK|K2bimq(UZO|nF)&-+*zg2YV*5!25W#I%1EdCULECpBq%1wjG z?z)cW-wn`w#RhFhRh=5BY2{N5M7yMNM5!1ZueREXcNIlV*s*Dwlu+ zc>@Pz01fqzOIVKhH(k*ke)KtcpvkK9Y2-mAL7qE!c4MJ5F|~@@k-jn{o;G=8b3u0} zi`&&xd2bG_)48=}AN;Iy%!*oU#;YxoRHt(oR!D7Tkc0TN-4qjZ-10GwHC;}Sf1@f@*X zSQg}-cLNphI>$|c&yDjpp5%SKKFBcgB8<7E%PEI2o$9=4SxkpW1d9L%Z>9}@_kLP= zGbpI)nvn@ssYnTgZ@-$>7}K)P_;k-I>Y3_udO8|IVQqdihi(4=3W3k_#(~p+4gMtL zxqUucPw@qzqk<`E{56fGjK?LsrYG`PSex_tVbgm_(i&^U7xn)D3hQ&B28)n1>tB^0 zvGVF9hJt!%p;(|&e-tNH%ii)e_rH8)9~Rl_x~`f~4cd+*J8U$0NFQ*2EPWr+-wouZ zdaACYtfH;V3x=etfms4ChOy~numo9o7CW1qTk5(mqidj!I?RfWqe_(opt!jt*z!5` z$B-V=V08S8j2G>>9scOEy8KcA2H|I!W>uLLsHmu;UmUVcP8u_&LE+l^v@sX8^=y64 zC)3B9S3(U3O2OhS{Ia1?$7}B+DY)D1Y-!R(NY4hSLmGJeD4S2=L2D@X*kSNgMlPpM zY+z;kROuc}asAeFy{46(SmXMYn$_eeGc1C#YFd1_<&~zOM-WDTG-X;ZCu4EBCf4-D zl9NBKuFa*QhbW#JaSF{9T#h_8zQ7PS)o|dcu@(n{FkX1*nr4(k33IbEY<9!SOpGkc zW4iBq<1Z(v`^dRjWC|Y+{{YKXX6g=@YkO_qWYslYay*MX0yy|ZRs`66_xoe5I;}}} zNi{IrxVP7~-LTb72BI}crrY0pkINp8C{_F+P@uQr4E?yqanN@GC^_=*q&;S}3E@Ib z`^JAyOnGL7tOYuYZD22KcjP7^Tf~g^xRekuvXu%#G=5v$X9K&#( zj;c^Xin*1E{4Au~?}fE&#xw^q*-g*x`+aSWB_uL22{2XQY8~;$qC1G>@h!;!5&2`h zs>>jli*ZjSdZE|?#K%8ArmH9%3$ zn8~&zM$^J!YunuxYJ$V}ls;zI7dm(K<7_h}L>4FHrcQQQHo&~sGLtXMC(K%;vc@h| z!2q7ie%trs3ZbiP#)&HFYJ~C0aT_SxVnN@yxVNSlG29uhw&KxS`&uH828B}$=vaTJ z9xX}~E6t&}Ke#)4afn~_dO(mT7u^2LvO8Fx0V3kFY|wy_&|@5k&Hdv&_xF zQVcUW)fyH6@1TvpzBqhjH(*!a*X@R44zFn&N$wIme_k;1xdUk}ZUI&n`r=Kdw=M46 zg;MyV(-L*ROa8^z0SlPvF*K+%gUI$3BQA%N;W%<_v8H{@f_oB3Zd~ss@h0svbw+9 zP4X~XDwbIxK^$&LHW3Xb_D%0`rroib(p1q3sU*xPB&k-4MO`y!J|PE7lfCTLHt%dq z&bo%XI?c{yoJSo?tRfgY2RZGiLR`STB#F4iMpbPr}#y+o!j3A6Q ztL6J6JMO1Nm{iis5fyDbaG@0F@)k(JHzP^f*SWW@_&<|Yip4wW2 zT-6q(zE<`5-E}--cbXkV)UBm*s&(z{Vs{<4wl(aIIr=xG;mKN9iO-QLrOT>HM5vkx z1*KvxtT)?mK<|n%=qiQi+McFJ>!nqac$%ULl`#z_*Wj}$zT}bLY;k4JV#-q{k2T5b zq|9Pfl*t;+AVB3o@gHzSz#2EP+l*snXv+bOcp;~8@gL)r!Nt5NxtGKm$fA@}<&+Rs z&$QB*mQ>MUq%3R-sn|B5z59$(DPf+jWP*|@C!SNGBSkFCeTT2p66!KqxaX^knDo+I z$n3#E7q-CfdyYB!V0>~(PddpHv~nQ?5O)M)VhAFMq(-IAFXa`c$+NiWrmAeKG5ICB z%_73VMYr7A!o&^e%IL9KnUww^a6b_AI6v35 z5lcfy)45JdQBF0jMfI5#gRRiVaj9+%$hq8K6ltuOXdIh9iB=l%LzNSx>lT+QT4-q@ zNvfR3Eo7)9V7%ECw!YWBx8ol}d=TlmGJLr8JzW~mWFj`2l*+@!owZm=DCApx0NmZL z&9U?MMPT-#CMqk?5gmldl38V2G1~LFZ(g-2BJ6MZe z_T*swQ(v13KAT+s05)MI2^DlvO%RzFJ-3cXZ05&sx~w#TeTFVS8|!-38n#@pWz{)m zUlP>S36&d4k_Vk%v2BKvx!asmYqOfpvdpNV&vQJn%%jjJAF|C^Rxw5vRq?_

?mpPFXESC!H=oo!Moy75@iHV;)Vh?!b`GKMZZ;sFt}5xF z=JQ!p_a@fI&>#S^#|L!gQ5L0TR1;&XWSZ)YAgM#@UX;mI~6;(q?R?c+HuH^WLc?QH2 zx4sHdB@)u1;rr2AFHS+3Q03X4Txw9&!5mXVW>ey9Rx#q~_Bc797T9k1xvWGK|W$nPP}XOC<1l=51_l7+(FX zr_|eSV0D}_=2_KMK4z&NVFb+>mYOojIlbM87q*)Lq;Y@zY;rNcFD2j*dE0%zpG8g* zL9@b(K`nh=iz}(uX$g|E2a3stcDtdMbsxRDJ z`gh-drX1BzXVQ7c$pNVQ2jkSO{3uBLby-O2wC5Qh2 zl#Of;^~G-@&0?1`%xT^&Mk~%j z@gpXaT}4?-kYsh4&St0O=_4{qAd2#71Os3W_P#zu>%8A0uK2N8)LC9cldx}z@5C@L8uqpE_NQc<+p*&(Wo9d=~` z%sBws=Z~B7N($V!sA6hboSk!T9!96C%9QB^7%hMvRRE92VZq$v>7L1SpLP$DPwoPU zI}kFtgvz2tq+#NL&b0Mp(pyN}fIt^GurJH#v9P(nnU2==wmyIO>7VBv8&_Eq zQodu5SJg+DP*gO`4JBIsGz3`bHn?4gK45tTp3dO=)@vFK5JBI+%j4hZrP4FGSl)MD zxs=EzuZU2@lf{=442aN0<7-w^q>>nx05cM$tZiY7@4;&Nnq0OCpD;=|1hUUk;z0LB zHw|NC)Xo)jlc~s2Z6F5BGA!pXq^YN9>sqdmhXE!~RwCn6npBf(ZN9?$_QyJJI<3kb zVxmPg=~LpYP6H!beGZM!7XWX22Ts6Vm zfLm|@KX6U4=Q_7Qj%W+o%5z&lCF^zDm)B+(HEIMY>}~w9(?uSeCifir`t5;n*HX(& zC!>{~IS?=*t^oV<^~XM8>xRt~k=wzI zN3Pf3>xic^l}*?X0Njzr5c!>KFRqZI}oe@>7jJ>S+1;ZMHo%1q~O=3p`}+e)e$udq1%PVN=WSVIz=SOmMouc{yy|4AdbLTlEB#ES+iPvHtPy+pS;}(W3pXri*O3P+= zx^eu~r6SAQbz>QCRv)I=@5rQpT6&fof-Ku$4F!EQR69W>!yW57v~SmP(RdJi)Zy;ayGs=MTpXR9Dqq6S?4$MTQ{5nAbBA z9G)=Po2WMb0BlW4!shKq9F{lz+2`KF(-7kzUv^YlgWa498PVa_<91SJ$>AnWAxG$J@|hMn?|G@pVaE_?ik*O(n{mWP!n6 zM>ujU)5BX!8WDREyAkP#?GYrH=LBBXB;gMe=>?pUIP-ry;(S1RCwu!{_?U_e#*O1v z@g+@M0=Kp#!eE^|wKqPbV!YBcWa@<6`*VhdV-Q^~p-;8OCu7-1y+V7Ctddhob!wYm zZ6FQs%LH4mksjAJUOu=CGZZhRO6o@*a1ZN=511sWWtCiTcE8&ISe)6TG&QM$qF~G- zm0xed8%_S0gISzZ($yqwNi2brcK{VZ?r?!o0;up-GwbHCA6y})VhHe5+#loqSUB59 zg=v9~+)-1Kx;ax>rL&Q+Wf!;G5vo@&d4tr$V2yCdt#D7M7>OLh*A((Cz3*@K$6}S8 zixNoQ-k{-)0lU&@fK{n5#X(d50BWjqRU{8FTl?JZ4m#0O(o3}U6BkPpsIrg`KU^@? z5u!=0**!}ej4qz8iRsy4nish9Dw|v14zWlb845r$QUno39^(4R8jk&s^f-iin=Y3( zIXogY%oHn05!r}4hWGA$eX%JX0+INVvH}1Ffc~8QvGXs*o~g~D>-i)7p41Z3!yP?S z$2c-i=3^YHbooV?0ynr8zBRf}O+7+G8%Rd+mwUG>Ks>c6gs{?A^UT&N1@+4_(yJOhh%PAf}C^6Fh4l%*mvw z79WU`H4R(ra982~09jR>!{%ywnpo(m)FaV|nm`bZZ4f-_Eqk|M2^Je;LnGO_nAbQR zfcT%#EVz2}+CY0~->Tbso|3YcBCdKHwL-$qml_;^E_Cf;ZNT-$f6$$G(=~uYQCTUG zi3-BPYuK|EQ@eU>F@DMVf}5&hc_`!(!vla^23^kUZ(chbX5CNHy&=FbNV{ur?qLZ?++IK7KM;^8DGNNpcFxc+x2TTT2-lsxkj}g8WNk;Y55Zs*^L_5e#LtNNj%@On^BU-BYeF=%ZonXQ ze<)(3@pn7iU(*|S{>+z1%_7=)zuWw(89iEQLz?6ArMAV@y*(rU0M=xaQcD>vBx?e&c=={eNlhd!;y6?pJW%#0Uc~A_sDpAh;@G^>)#Wl$ zuk8AGM3EbQ9#u!UZv?_0O|{?MTr+A1veHJIMIF;^_6E) z*8a(dEJ$b|hSdHVl_U#V`~EM*#mCpSXIALX3^KEU&ieuTrDJs$vDzF4>q(M{CXk6% zX%4HA8#liT^*C?#eqSX)lu?l)f`rPgVh>`V*pH~g^rtwQa~(R6Hw?_mRc&y4Zf-5@ zh<#a~%hOUsnbJ|~k#7fMC$;ysJk)HR?$XYF1!?&2?h1B;FQdz2KeF=3AVNS3O#+Vp z08PG_n#)qx0-e#C#`9DK{RSw5;w5c+S!QY=x3n-vd;b9S{$8BoZ9h=v^U%uQEgbBs z9VVFAenXpk99fqKBpZ{TiUwpj8WyZ=PcljtrRde|{4FC~9CX7HI4UUJ4&G!Mjk)I) z>Q14qb$IKlvhbxz@Z(c)w#S?g8P!rV3aZL|JS!@VXX}CYIY~z6mu?m6pECJSeq1ae zl$J3nk@wTMIF|-}n33mHXvMBY)ve!RF`pdrD0LODA+(kQb94Q%9=E6Tq=bhFq&7n8jRQD z*bGLit7`_9wnDc%39b5D1>wl;iAH*W?iHgjmYT3L)XLE)P`6r%6W@Wgy~g;BPgRy> zlSuJRRNByLRH$ZA^amA~>Z!wMXvBo@3I6~$!-45{QhB-`@*d+Lb{8VpVTe z2LAv|G?{`cG?0oyz0^cmuj$RNhJhjMvrJwasM3rJOjS#o_qRSJ9dz?#hFo-rYM zvgJV___GcMMBjzK&$vr7!rk0Q-Cckv z-@c7WJCKCfeNPx-rWjw!@vGa-<~JW<+w&NrN!7WGEJS?^o1~5STB=y$B>w>QcE?w$ zI-*;w9VL~k0l1dDxm$B^gN`v}y(1tS*njyq{Hc>K9E&6sZmrAm`r301MJ!S#wQ#Mg zMxn;Q^RPH>qMCwW4B=T5{{XXV=>+;M>`nsG&)3xw1m8TbDHwWLK)NT4f5%mE}ZBL4u_5^oajRe>XY zDlLqXqpp4I-6Texr!~n`a^$AH5b87r9i7gJ2-U-<0M;BLJ`P&qU7&5BqQKVYnbM^Pe zhNf`RyF8Dw2@|f?_HMNHNhmTVK z0LT%19ijMl@bZNCqoOkC+y4OCyGgP3W+U{)X??iCX!5bg?fy|{E91#zfD{=@R1Xmd zk~bQSf%P1XuY#FgPn*?h5YW|5Wh6Y1!d+~6{5*}n+aF+4WL+sqwHHfdun+uVKri`X zN>m7ti2nd*M1bzF5#{``n=iKE&8VS2Q~oU_?X9hR!_plK))|a)9Jed0qnQfN47005 zfT6fh#EUh?-(J|(ei(E$ep_EAYn`M~W)9k(ElBZ_0kPCKxFnyr=Gf8XmFFuQaz<=- zA(@H&HpiLfMbuv8eiOj{Si#}p)wF>R9r@b);u6PMGu&n- zQ*mXE6=Asi{{Y_&WCZSAO1tx1e+y69Sk`(-07+qv{k+Tx{d;0+S9nTHD;nxIKZ&o# z`<<~&S}e*L%!4zklsO5y{ZLwK=dt83noQJBA@j7s0QFkv-ciX-PXPRy~L7jRGctqtP#g zBJwUSN#@_K7KuV6C&EDIcOo877T;lr9cw&oQAAlTrS$cdK_;Vdkj`;$%qHKmq zH2zl>!?OG<_-d=AdRmRHFZi4h_tpMi8Vv4|kNRmDlwRaTau3%L(jwrAp?NGtuAxuo zhW`M}^#i$?-*S*~PO7y)e}%se&|CgfpdfL1WZ(7o!1~{WUk)c!E0DY;TTu|yI^S;O zo<9BYs|Xb=-Q6p~A4h~K zhVcbqx%EPRx3((1=0k2I{LnX}x0l&a#B$sp5b5j#A3=p03W>(OO2D1B7<)v+Zydhc z6B`^ZDD<_As2m#f^KyOxaY7wn_B_7N_S3=xJmhmw+||YwXUM}`(GT4Oc*?pEUL$i zBwr1o8i*>IN#5`M&LzTIP5j5Qkzs$od`T1&G4SIDkI8arF2LzP0OP;s+X!7MPy@?{DyF2rK^kgy3ZR4HI}2__x4zgW#QVBM zqB1C5tXtzRR@c;0e1sJ+45v4x)dboY63Bmf8{hbWx0b-(*1j~)h1s@USJG58(N@#e zRno$%RI&aj*zcu>uWom>_Tw1G{6yDf^flin(|KiO6X_D>l2f6Mp2e;n#BRj@01!6% z;>qx8wG$O+ zvDu}yN?_!{84JKs+TZ5*pTB{DeV0s+Tzx#=?+NULdP*9@zwHdC=4qY~94^Al?e z_vZNU4h5!JP=S=;iEk7xLC)n(%OEzVoZ@oAo5IOU~RF&7Lgpa zrglD?90(xyShkkuVF^`FTbMVVM$oiON zS)^aK>axE8PO&^mQ>DQX?`=#pf(aZj-;gH!R`@eZn&s6w##djOe%X%l$ZIBP%}EMw zH0i#rfEFBfIKe6UM>3|Z%kvD=DTaK$qJIsDs}%6LS7l&jHw*Y~PXlY?>0Zrrj+-NW z;yK-@5x3#^*Lxc&k69MyDuqia^D~`x0N5MiFn3qh8G~N;zWBU#eIHK)A*7tg~5L`vml zMzo8h>`1ZPi`;L{CQma63yIlT>i!~iOfyzAImG@ARMVHI@kxXCn>h)49YWyTf3Z5e z<1JN_E2gT;t5Y?A_$^GVtwT~+jXI=Jr5F+jUAG63ft@p&(B+UzRaes#+1_0kmP&P# zP!a3Ac9oZXJ;1m(u>@jvchemly&F#^Rhq$3)H2k}XNXk+6+BTR77A=cnur=r!8aBL z_r_b>3tjoN0 zL!)uCd;4?77>!ueAdP@#ZHq8aH||c@L#~-wS%X-e!MHfquZkp3FUzUwa@yMIb1G_P zrU0xAt>Q~^0108Fo$t9D0&yyqqDeA{GNDWJ4=qQ`qKMAE3Xr64V{iWeG;@Iu2oQ+_ z*b{4iwk6WlM@bS-7yaEsNi0N>5JA+WTHc%B9@6dkLRzI&(p5f2nVnSh-WXzu3&;eH zNVUR^>;<(3gF^*A8%@6Lw zDIkJJv9TIM>}CbM5V8-op0%|=bxqvWjUJV&rJb}mR#L}cogu{YD6S*+Y-bJ+#c+0#wtBImWs+| z6xEJ14cZELm6+|Zu^b)mgSiexR|OpPreKv!s?>4<#i|Kn9>-#6274LN14xE(?*V_7^zJ&l}H-J%JN-+<9&d)18iEVgF&iPL#1w5p>E#R zH^x`+Ge1njIi$&FsDf0drN1l|ra^laAcAbB_XJ$-dt&|ZAhuDL$J7m<=D9^BD=Irt z7}f9ZeJF89g#gh3mm+ zrD)HYR^W~=&4<$#Ou)-em(NgQnr4Lzo(u{LFavNdM*jeOe6#-mJV{ZQWi`=M&sAKK zOonjJQqY%T0YzWKNpZKFe3=_ee)BK#Y)ewq!(OABcqQ!|80E+>B=H}SX%SI#w z$K|z%2b^e~c%rmY!ALwhS))pcvqA)C`+Pt@IR^;w+oXns(3fhz%jjgsfx^D0W zo>b$001B0tQ9Wu@7(p)zi3k9nExN@#hG$lhz76~7}~ zw=K(|%vO?I!Z;nOB3b6p1V9jU@C#o1^JN=ho{&mvHGiI=kW$u0)Y2KMMX8bHUoaam zK2i<2`{J#hLz*g4QaU{FLrxqlL5`3KzOQgizJy}Q@cs(i+Pb4QsDeDu&{G!hRi zNH)3Pa80=1-x*TG855peck%lwj%JpZ6Ur6Ul&7cqj<%kPYITOP9i&C_1bZ-EHXvyy zxHuUEpS4z(Es8x6LI$!;!E2JtNEZP18}EZT)>)S2`HIx$2BxAJr18>>ORr2Mm1b!a zTK7?6w;OYg=Md9SQaqU|R}8g0>n6Z>-@~cxzQs}0* z(>%(~g{PEPWPCr=n|53fyXy2Yn;VSDOQX{YRfgm2~AsXh_o- zC0ak;j`~@GpTouN>xw7Fy!^@2Vpx@PEVgPfJSG^~WTKn`1iHww#M+QDw&as;ZI2t$ zdP}CujMX<+>Aip2wqD{0b9YsbhP_2wm1i-fmMOpHgmHQ2RmMG8m%X8T2I-EfjMq%PZ<4P7e*a3IB z0LQQvzQF3mdp)Img07y6GNi~VgqeE74D{6kRMrV1Q>6YOeZkts_Bi%E4<1ZBL5%lV z9DFt(f8a#Y9k-&f^e0s19T%Ksx#dkwHD+ZNsz%Fc%c8>(=0}j-Njizz_ORO@PV|RX zNz~L+W)w7)6x1R@l=99r{K|{@(0`|neR1+%NM?+&4itCx^~aI+(g>OxAz>~%YQ4Q`hvoU8 zbMziILp~>FmDzqqC0L?-wpoQXVL8-hriuK%I$Lic^AdeAn|wp-W|qG$=)SS(sjBHJ zK#r=Sk^tT;sKZ4~J2#cpm4MPfvA+9^Y2OfNvbye{o|mcS5aktRVseh?&nZ4d)Te^L zZNWAe`G==E)|)D=ho^Js>T5FmzNyhZVG6s%PRQWgs`2F<5(wV+?`5##$j9*ncIFax z+nxwMqtoQ3H-oqepO|Fy)m>MaWxYEosi%#lc%>IjQ45{bt!sB2>}`8))gscYa6(<4 zx^N?8nx9AnosOe@tVfstcl+a=NZCaOcPH$szuHkc>Jo%x3eCQoHs?Vdaq%1>!`BTS~%If?He#g zj0+g7cObF8{+O9boy%EOlT7-Ia8IL4FNUS8Jk2VNM&w+M!;DO)8D?{zH9bo&hfxy7 zz$h%TDYcY7O^xbty}?7A|$QA-+$5~4`z5v4XDT}8mL2c8X%*BAx{JZU3({X$Ix zwJ)!}7U#8HRnxJNSRS=uMsaN{ig@j?z145#AYY3dT4&4aV}n|jl!6Hb?QN`X1}Ogk z2D9FmT#}0<$iM08W>qeezwak~KZz9GiU6&>^o^~~G`d=c`D5bP0CfUwyU&9}`BSb9Ow9huiz%m@8^pL_;tLiC`Q9=CtsFXp%@YfDCjS6j zMy#q80amh>3DNevr~z@`bG{g9+8H%XGZ23WBFNsDT0E>+NfWU)B2BIbCjR(iS*LXN zW69aX6gcFWdQ^!OD=FE87hX#SC?`( z^}~|OMAY$`n2-rBQM(@2KK|I}%_F}S>eiXteqd8E=1?oFQ-w!ufF|0H-)t&b=-O6A zB#%Y&ucVX4%;v!Uc&^dsG0zg1(UrFh z#0%Tp4S@c5Ae!XzN)&)RrF&u@j#;yj47mZ=BEq3rE?CAb+}i&DOJOe1KFuQrI}xb< zSHQZObqX$AmEX=cKVgUtQY}SwYGc0U{{U=5A_sz@-BMQU=GaGGikem|8Cu=8{-+GR z5Rta0b_8zf*uaLrl*84? z{?z0~s^e7pZ|kc609#?^c~L<#so!hui1hLa7$VAvakY;hTleBTE#b9G z{{WEo?}t2ckrGvcgSMN3qp`Pf?}9L%#am}skQ%a@_?MbyIX6XSS*}VFddgUXBD+`x zy^C>UruVmdTbz9PoqSTG>rC1j4Ev^Od}fSMjKNu&N^o0tRU}*jZWP3&m36&YjnL*!_=xTw@;+I$}4fuFqe*32_XPUy zx3BhH_{|z6ZMw}6X!hEzDniy1-a!%8xpbDNrx#LOn z#X~Ua;h4I}*}S?~O5$k+q%n|G#!*L*usinP_r)%{S@U^ilCqXDmAyb>zf=*q?79lPIySPSGpdmw%rg3T z<{~wEDGO-5x#PG1U+>=$vTU{JW=Se@SZJzbmEdTZbu&j{=38FZxfeFKYxcUoS5NyQ zTD-?Ls;TggkwXJ0msRds_ckra>;V=yre+!LTNL$aPeheL>O6F-BhF3yqQqP+f!n?Q z*wcbssY9Caw;O-3jgNbd`vq~%s54q@#u{1)<5X5-8bXge@BpBJw$>}ZH?_g{mlY>f z)YMbLGU~8u=2H_oIRqvHjU9ors~(y zoi9x;RnnEs z9z8Mh6ZN)b)Dy3ZB=aa$`Gu;ga~rWFmhzCzsFH2k+j?Vi_&b~AG~GD{Q%zqCwG8r3 zkyL4lSxb{}7h*swu^-bOBdK&buo!X+jCTq( zH;Ujst8=#7Z@wFTo2PN4Ru^VB(9LoAjxlG3Wsz0}r;bPU@k26`-v0p83a!g@uZaT3 z5Mij0wk5kC_Q#v|*+aa}-B^++gNu&gQ^r*bEU=oSR%Osh4R$x@5Z5N8s1dxA!!52G zQrP}jwM#`Wh+=aU#kCSN1^4Hia+4&cX;y!l*2R3l1ta-lz|1WcT)N>kO1zm}JXZ}G zyn1|uoq_bz>x9w+PJz`li&=>NAE*|^oaIz+Arq}ck*T-`P-E(SFyYH`XjPgj5oREf zEYD-@vD@vA_rOP*%2UG+{xyz#SowOMmpOh>84}A-o-B>CLN9$lC??xj-(U_M>1blg zGVs*34rwZ2M;c-W#C|mqVB+@so8v~$`gbDDGWMnuOO~XFVtJ`53QMH&p_niLgJZVi z2p>|&;SDF-&2i-^;mt&!WVbNbMdr*z#XknAyMR?*;tvH)Op_^!Q1e%?E6G&@`Cx%uqi+&TYi?v+&MEZ`65UNh z6&y262j~a&#Chh5HqoXbsB8?Su6?)T5^*0VE+rw;$iZMMge5b_Qe8u+AkTQ%Oz%uW_?em+;Q*gfpvL&wUYSMwY4;{TFVkU*?&9Y)O{_4 zZu&v*Qm=x7P#yQW-B5ZEN321~}zy{^N7^ z#JYHCSrVR_3Z{-Fwc}kD_1yd6ZlE?llH3h@sFdA(Hd`BoVxm+0Z_htYZHRLYpP5-E zfoe(uNYns7TXFQ?2IR{Ox=T?+wzbPic0W=%!i_x@GT6lq-J?LaKYnoyoHTN8=Bdjb zlc~fi7HYjTk*~<~o?lZ?z=kH5QYWFg-L2`j*8yoV$ym(EO(a5Q)~eA2i7Y_^Fu#Bc za0%~ndB(9E@d*4eNI-tl+*+pKIWncbM%Yn@MoL`lFJlmqqyd@b3NpTzfn`xIJB zj{!obsg4)d6cEDK*gB~EfKhBolQw-86G|C)P&pWv@)99n)$t+p3Z~=gMmUsNWST_M zPbnRO0e@|W7^>-5cXA&BxfX>4pa7Z@8t52ECNAA|v+*ybpo(>{Y!U&F> z*>=90pUmGJmPr;iU<_~9*wPRhzg@_N+4xGKf zEj4vpvEI!o1M>98q)8-~_ti@oVX#(R{?@}U3=JmpvkO@3J0Hsht>=^ZC>~$J6uFFa z!~x>5xBmcXQ{}b3nDSP-BB)U85AZ$5>Mw{792ztt=pX6?-}zwzo@Kj7GbudSk#X;i z3~3%^I;1CHrc_o)Qtti}a;H}x*4SJ!B$16(Xc>;<#6O+~r97?`q?>zft}w^*H{TDM zZ80^KLD+)uFCS1h#Fj7$wFFCcRJpVbNFF%{7dnalm}o~#8+xjB1Di&`lZdZRRK5~i zV}`C<7Evp+Y{JScKRio0d_;vY1Kqd;3_TWK3#X;V;ILtDLx3-gC5R+D0)$CAxU;Kk zKZjclzM|iy@bnE-5Zg;%ZMN0;G8)#{`l(*XR2 z4Vn~;6Mkh~5XjC%=@`}cj=KTd(-LU1^*WJEU@-*qy}p28@@rtioXB1r*UEZp=tK+C9Hqc_{|C)-s5zbA3ON7&r3pmkk^Rh55a|t{wSN za_X8zxL_`Ro|sw4Ay{r5ak3JLT*0FVt_Z%O!*5Nn_sTM$@dO(9A)5XDZ-NFWRzfu` z$lZY79#~pQ0H&6v2RXeLsps6I2W4G7T z;DE~>R<^Nm!3(+ij`&*T!B_WRUB$R z%Wg3s(^HkQf=F8~_6OehNTiP5p0{J$3)B+>9Z7IWU<*kQ1n$B6`fM=atpiy}qO$FB zZ@sYJ%ET^4pIu$Q&GF#0YHafe_k=eA0a}$jjj~&^~AFr zLHyxShT63paIThQNu)OIbB@%U*lj}a)B>#-QODxj{juQyEJHI~a6_Boeu4lbhPMTQ z*!}Uw@g&()8~P4$+R^wlp)?Bi0G0M5lZ3P^!$*jO`jsEk69O=~@W40T;NSUSNgTbS z@Xfp8brc@#)7e9gnGLTJYv7bVyK#q2JEL35cjIC)Gs0jkqfLdjJYpqMNb7AOl=dt? zz92Zbqi!f1E~v4$i~{eq$g%wJ+dL|6N~s%@$iL-={234w2nP4RiQn7%VYy=<>OL!* z@CC;oOc-cI;9kW%&rb-w>@Ej3{m5g>R;g7=Az62tvGm>Q!-ursWP8t!$Qeie{4xwtzKwmzXVSaA-w`L`A{-I4IveE$G6rV`hV%jw!W zifL%0G{l%nT?zmfNaDlO4y{YvDUNS92My(v6rz$Brw(b%YGPaPwif5xz9*_GY_PDf z-0HQxxyQ%k(j05^SH=3M+TDO92?TF(uoyvU7->}va6gB0?R-n{(2aUY0QX^Gjxm&* zBB%p^H~ZmMt4nGTr=Is=8v0v({+QvQibV}RnJjg0y^pRXnA=(LB$Hi_lyUX?Vd$ZV zI0e)@a5%NGI>_GDF^uOMRqm#bsbi#px>5|fYQGeChO$OTmOkdoxi=t-5y!qU-234+ zd7Ndi<{fXGNMNU^l1hc4hh(MNmdN{i-ON`ZcUEH_t@bTFvCpoYMLsoXtEy(&4421 zSled$WA2P&THP&5r0qnpe9J3L)5H;yEiQb%fLvbOf3_y|y=Gle*7?O|PfrY4e3g*_N4oSq!2gD;?| zkV!OD@RcsXwFerB(8p`(wZH>#1_K~DW_ec<7LuIJHh5~Js(P8L z7Oue%Orewz5C8xmYzEwKY*QGqI%6Rm(eKaRlx(9!>D7jhAnbzPa#LIzkG6(=gfe&5rZi{W@B(gxV94&OsN~j zgnsa8Vn8I1OZMXno#1lO#Z0JO#*?U>Bh!31$a4D0spgIeom8duYEVenf)6;01G0p6 zJfAk9q=HC{ii`&>=17%jqGu5b`wn(X^kUN-zxrw~r zyCJMt_CCiMWd9Hq{wyW6kul*a;8A$3lE9%}t^f9Zn6yr%^1;+e6&4(R@ho-CX zbFI>&rRZFExpj4H4EcR@a)Ap^qzP%|Ku*O?#qK`fW9P1p$>*w;rYIHT(&40*LRk2B z9&0a{00=i6orWg-b*Yg~SwyhRA%y^rVvLC(2&$sY0n`BGfW#4g20Z-zCJFkCM)w!` ze?4|x3z!^OIW((T4s$IWt|+IKa~G7y2g;_Aa;0^KxH^fj_PIFHBISwz;*zx!3}1J$*(imC>yoTP$-+;zsuKDN?rW z>ImcQgZUjRbqt~mqMCTK2;lwXal1%rm~d=O!8aGRz~;jj9}6RoZ^K`2^rh_3-MCgv z^D>5?Kc10jWk2-E9qSRi5N;3QCgL%^kU1jw&$^PHl8-v7q@$`@$YPYL&a0$9t%c6l zzAm|pd5(2UnC4mDV-*bL(cj)}nE2fol>dGaSnrPI?4MPS)B8#gl^BE_ez!QDA zZ0vM)@n_(QMwad@sM&5~n?sh%R4RmZER0vgVy~gC=SDpDU%n>vbyP1)Q$0rNHJ059CBT(h3OIaNw(#WxiRJeq>V&WiqUG4Q3=K*rux{{8p zR8-8*4LK4|2qZG0AXt&L&Bd&D_Qhua_P97v{!&o^?I4O)ABeP6RMpR((bbAdvofO4 zvKF~jQpGGR5OKdd`d}1!hGUmd(`7=9rSWeniBLEUYypgRHn2Xvn+#eiYANb^Q#hY3 zG;zl*I+Tg&?<_G139uk}7?N9a_(-wsh%_~oDVJsO{?voPh7S$mN}VqtW+v8K5!e&R zw)PlIFK~=C&AL7QTYo<_5SIq&tEFS;ysED)s-(_jp@tgDS2Yr~Ojm{z{2{N&W3e5# zu;U*^WF1YHS7p%U(F#7Iu2n~=5<&9Eb8;Hu-N{`eaHjbAUnk6G&GYjnbC}ghP_n6` zrH1l?%G|IA_*7ec&4&2WI$A^1-BQ`_Qr1fy7F$1uOjaE!EQLuRoAw8AK{oGfdET#v zWj7)70bp0;JD;MnhdGLBa0bzDk6l8P`A%g~)5({>kP|^t@oHu=u@{d|3O2ZKM+^wx z6!X+szgB!P%wwsotftRs-Zn@JtT9Uifn^E&LtuCB-q@=AUFr;ns&i>G3Mk{Fo@out zB&2hozL{B0>PWSLxy5rluc8w{MI}J2@CS$UkTE5qwSXgwuWN0-G_bl;Mm%7)oDK2E zsQBLs0YLl{L#t_E6PDsu@)N=YzgPq*wiaJlB$Y>_J2-w z1sBgxH_X>&^>UcQ&uyW-$YHrlTElJqGA@m)rtwy%Fr=)lkyt}d1WTk!du}-+U`IA< z_Qi)ip{r^txaz5>=aP~ony8wUrxfhVsZumM5Tk9jB#~lyZgwjs$Qu6uZ{Yy`XS$`U zNk?+Jtf*Jkn*6SoTKJ|}9bjPU^0O6a(RN(`-u#=mw!;B>>m{hlz9LT?1LX3$&|z8M zK~obow16xWs9Rf+r<_%~cChBTmQ9n^(wX9=k%F}=1)0&vZ2`D8Hz0F%IJ37>Oz{57 z&uCJi=at$((JK|Q=maj>N~#flc_iG75yz7rT}?M*ar=+A=9CMYCf)uhrgbc^<~e-~ zxivCJm&K*4O(9_H0kg2w%HW~{ao+YDUmr>QILse8=~_CJrmoARMOB4rY?4f&NAEO_ z#{7LT^FCG7&6vX`Oxd(_bab@(sZ%nP$qFu;Y%QyCYXN&+*wFqT=5?8$Rng{kPbEZ@ zk@#>uG^Jojjlp%)ZonHG5p(IbJh!ws4x1XBD7MY-{NKN#y&SqO-rOrBOYE2L_D2B082a26|ln}(U zX3RAZ2(aAW7B7sIeOHubS=LLM&q15e=dk?9o=H|978@N%8LX37Sb_MquqSM18E;qS zl(`OJmDSfzAZj0!M5;xSC4`^C2^xVHB}hGh;A2PG-k9ucc1sBao_91s_;w?X-?D74 zYq$!XO&d*`EDt1F*|eD%?7R0T`r^SQXYBr-k1cC8O-UfjPa=}B5-z64b8+}v?TXZB zB9%#XBm&nSZ=u`z;>FXslGaSLwNy~~nN=zyrx%Tl_plZ>y|){4$j7nB8v|AXsOuZ0 z9!-u zLgsQ>3A`vIZE4weE4ZWmJ>Nm%zU= z^2-wGW|qOEBa&^l{{WUgRQNH}Ic`&*(mADibdUGd61zy+5mel&uFrey2(Uj~eMyn$ zl=bwG)mm5{MZSq*@SmRR*zd+ZTkUQ<@nmu3?Y92_B5afV*=h9h)8$TA(3zun-r$>! zw(f0g4rr<=T*|E@snca6a&2S3^~IT`iP(m3GYcKY{{Zif$w?cf&?_iB{{W}AYHlAP2-AR!{&3l0B?(8AK(@vq-E)mMWx$`iu~2Hi@)pC_O>Cx3ANj zGaOSxF=x0g2rP|t2L7Jc=hFn&1xec4>Tq7Atw)PXUx2J%V{7h3{`+Ayz6wiqQj&(c zI9^uVezSw*(M-@BFYLWU8lkD2fznQnw7cPb6FO zwi_4+Yg}}bu~HJ2meXa5q*BDl6auAzvF&TGsl$-hS#)@B zVtmVMo8N0+n_m$8c#H+sFsvDrsQ{aOG0KXChM+|(L`LB0kX)!ew;W)+JzG)%C2W;b zS1QV8pkmOo639tgfDaz~Y%oP;hcu=~nIqD`1_x$RZbh%TIM?54fgh(E!;4u8rS9XUtLGgBiXl{aNgyWiLEk0f0Y zl_7=dsip+l(nw_+o%q|F3#X0$0E1Cg-H#i&Y6;>9m={-A$KbSsVnzF66;5GLBy;lg zPWKqpMrB9l zSskoK;a73*u)}p3r2?xjj#!<|?hX5Mh90GLrX)?0Chpo)%&#%e+8CEG$!3~1ux2q9 z0R8N6S#r|svO!HXIlbC98b>{W+XQCJDI99>%j)A>Ft@ijizZNPTb!3!ZTi~Y{#XWFRb~`o;66!S?CQcmQCeZGLT#shKk?)FV$IVX zHJWEXF0_vqiVHd=OzN@BLjYB8wynn8@oQ3)`igd)<7uQ&@<$QY$U88%9^;XGY<&SO4@}am)tNmERg~3c7;}>( zu~SVV0jLU<1v{0oRU2C8d|x_lmmqB3U-_n((N)$><5OkQD0nAObt^3K-6!N(Lv3qm z$DGRRZ^bSmGFm-5{D$a+C49M`Q%-)D8FT zihXT&PAH|y`mZz0YVv5yNkt7PP~s9rwG_48N{~Yf*n$b;7O^_#yhPWry1jjN^xL1Z zGY|_YNGT<+Ms*$>Y&Bb8K^qc%&ul@4H#8ao032`y@#gw zvyIf*DEux5iXklN8z6KL*VE-9v2x<&CeSL7jzZXgPd&Hw#=r15$3IfREp<%-GDqUW z5O$WJx!h_z05|W?Z%QXjbQe%{Wa#k7A*GCl*E5w^t$Qc~U`gO@w;1{dr20OCAf}{h zT0Eu-m?J;F*v!n^u_TgzJ_gwHe$n+jX2R%oTg~y?=7o`mI3GoA)fzDH>Stoxok}hF z;l-?sAYT>8{vy&457O8dEj2`|BTHJIYl5pVACM`?A4Ww>X zkBz5mQy#W~4ykIOVs-(wHO>9-+}VUIo+J}S(W?T%K_=JVZ%ip+qe1{&yTk^=QK@Rj+J1AhK@LhHhaFUUYy@=Y%BJDWb?;SQ=Q7I8tEwW`5OMI!8nfD9JMto zB-z}~h&GNXNU^sz1b=K3OK!`*BBVyfjg+N}GgT_B6j6g^AdBDn3?M;OuE#J&z1Xdf zKE&)W{5gFrN>!>Wr(?(p02}d!rxC)973-u}#?h>d0RI5+ZO-@r@J`>Nn+@)}7GE6h z(R}4eFJq}#FbCKL!-FNGhDDNky;5GN~E%(IuPIGr8rJ0#_Xe$F$$@5{n349T7Nw>9# z7xwqUrJ9W-J}paXJJ>*W_Qi5~jK9Iwj#at1cDP?#_xoX^T^m@ek+}6~%9Dr~#QLfC z(R2V(ALZ$!A}DFm+k(R9>4ws!LA0|Q4#=X%em=OIw5LmHhMhODy4;_--uP{4Ri#_X zh~2dLO}?Dl1|HHkLm|j{+^BPwn(QQ!HRFA)^}|9dTf$l1PBu-C-v(l&jY(pFwYFlQ zAI#y`SVEO&L2mn>=eOyI6M?V^e&Y9=B?U2585o*#8rscqeg6RYTo2O;`3+Z8Wa9Sm zH5>Z*cEN>;79!zf3%KE}k2|W87_y=4%oJY!gA?PP$lKEiG=U~pDjjh|q@Mb;Tu3RT_$@#zWdp z)&SW50KPn#VuUQ=)DvT`a(M zJC!36CLRVXM(|o+Sqx2EFcK925k<$mn4tB7)?f7JGQi!$~aX) z=KF4N+fvr4x+AT|*N`Y1dT)QQ!2r|2Q{ut@0I5>ErqDLAt~chMa|aV zrUtbYT*ws1DFoQ6%YW42;g`;_s+EZr{%u!se!a0JtsmTsO&9)(a;)r4g*Y7fMm^!i zgb5_KZ#oa{hN7Wx2rnJ)y6Yehwmh_OM+N{^}Vg_Y)y=!ub4-w{f78?2_J^&FSr|Rf!0Egc4uIRGDyT7EJ56k zMgIUSIUPKb0>vFHcJ(+Ur3TNpJKp%}%NQ0_u?Kq*zvgfTLX`NLISLd|&0wOLw&Lx{ z{ITO4!HEz^TGrf)59^811=Xyr$m5bm6eI%n)qC!3x7Pq(LZ3-QgZtwp~fj`*!{=UtCHcEFQ;m2$v4r52p9A|(+@!UQpp%L;Dz_ZkCw97D=EJl3~*8o6xf4t=EQ3V14uii zEUx4N2t19r`(X|VT`eLh?S3$$1wa~XdB5Vl@WikHNq8Bqf75gS0IWrVr%>RhJRm?} zBI+C){+LUwfa+%(8x1!%Kb{pGJOyo~*2eZA?S-srIFXO0{{Y{%JA_+~0z%6mOQ;8s zbsanYxM<5RySnXfZT+z%C@cnrBK-1k#)>ij0NL380Pq;?K|v)%E(?u~t!rEL!l9_A zBF@(%)3E;lErd1*#7`bb%MCd>Jx9_?p95~^!<3lS_KZ}T#KPXeR;ROI+Jy-n6G;#-S+c2sn=t@^nfutuGT@>C7^|x#WuFv8)0UhKnl7? z(0@DOmRT4B=u|oSR5zYgrHgPh>xqDmlhO zozUk8JLy@e)_R$PW)xMV_!T{if;`d5Yg~kn^@Fl7$`0>b0(P=3DVID9>WcEBca`Fw130B$}d1TZJKjRZYPKfj(XZxj55X!d+S-usz$b#2D%s zZcNCwvD6g#vEP}A0lRA;*e-%UTzscDDfv$hEdY-}UsFoMCSe;XipgNkNeBG{9abR; z*P(5DwgP7AC#v;|!F>=#M8`$g=n|(1*MoOP~17Z<3sHcnZR2C0yj|AUsvF|;T#KwEbE(dEZcEl0Gntgu7R($PwptIb=FRRNQkEkAwj+P3! zJbFq;B2_Wm@1=<)0a85N;f(7#r>@JXsG!N{sD(O#;=&HO8~E9ea!J^5qQDF3?ttzveMAvnHyes}!|=xTt4j5w)%u5G>xD;N75*PbvytRh4E{Ygax|1od&# zM9(=`uc9!wEJpSg2Y+l|dJ3y4&N?QqqVtBLrFQ=StEa8`X(p8jVXFFg@&*HLS$kg; z{EsipX{&P>DKj~!YT~D85dTU8^$0DE1wR;F}Vi#&&&R$Hv5VrvH1KK80;!AXsGJiWTje&Rzf53!Lhd&0@zk+ z)6}@l{{UvKB|SuptKr7W3ox-@r0v{X1GW2Yj^}xV`GZ3wk)$Y)q)MrKSyV56`(S#r zwv^OJ2g(W9U(*^b1dT_P)RN~@lcWGm>^K;c5*C5?!c`zWH93_*{yQ?N5dK;cGTP|0{5qk#VCU+LFkbq=4WkkJ6 zO_ul-an_@01BQ*mYzRDY`Qp#<8jhPTpv#(Sn5rHnF*HbnP?34_Uv(zORkywjd_~Js zCaI##g$%*-4<1Qpj(u)euqxLZSZ`~ao11ZbGuHhfmD9^jQwfO}Dr(T`7DPqWB!Chb zn!|7fu6a1c8LXB_q$YvCxaCs!fakQ`58VprTD79e25CGo%7SvD;jYd=3Z#Sh1%cae zPA(r6QcUA1H7%1>R8{5_vdW@m^TJXP>tv#$mE26)gm5Sp&@Xi^$4$oLgXxNyrP0jH zklpW()A{sO@=0usmbYI%@0WM+wHx_Y);H6vgk!MMI~>| zG=#IG{w2BO_P-lk;>Fi=MyI9nyum2piQ!Qk>m5FZ99Z0JRNQvHqQeVhf*%cozw^2l zyfaIERSpeJXu!SL8(Vw-0EZS_*DM)D4Lxm51nDfg!G=|2jU>ISH@UFh+j73(*D0g% zW=Q-*j4`lgHUk<@RMKa2^p063VAT?c$c9C$s1rTb)@0n-O8I!TwDWu6nNsL`1&SpU zuhKwNe6p`J75AZ*Q8N=D5e>oQl^u`JcEyJ<=<2FWv1(p=LaiUnFPN#4Hnx&a3%LL< zH}=B1+J&g|s3wXfr4I<`F5H~4)=CShF%gAz4aQr9fYWk|pqme6iV+zS(H??yuC=K|;x zzdw>goLMHvl7)22(oi?;tg5-7GP6S!JWO6{Wn*Kditb2bW48yKScgo@S)VOn5azVu zK%h#wyfVxI0bBh;VB1@B&MI9f^^_6OH4Q3L)=o!*JwpPvCjL@Rl^_B)?npQ>E@ww3 zY)mz^GE=a1iZciA6u40!O^ERtz+Zr%TMNi!o*~eEcjxr|Z`E_!{X~Ql;;vs$LpvYY zanV-1f#&&P`+}!XR$b1WR@H9Xk4#l)E1{>$>ggq-Ns@2~kb)f;Ue+M-zTn@sFFz4- zXcsD`&S8u*%@W38*M9~70MdBW*0rsBSl^6N^kxGm@aLJqYjetCs(hk?- z8dx$mOm^A7@~%Sg=7f9U^?qWM^H5MgXR4k^j11ePO{&F++kP#${If;hevJQqHzuKxf(ulPdmE2&NRdUDDM+6v6D zRn}Ch{IjgKb-lnM<48C20(~)J%(7|>x?JlkcJcDKCTV;^%GDZBn;~EZotQ1{_=wur z2}AonYEhXV4Wx=c082Cu@s-x)`N_4w_je3N(gK5F?&1R>&1>@t8EPlXGW@(qLGa_2?9I4lwX6X*BG}9_e77#j7EHirHRCRY^-`rPsAF=< z&uwZ0X(xM|hOjrd5wbeGz8dNCDq4)@yD+DyQamr+IaP1RBV2|y+eo>+<?=IKw_7 z(0KSC@;(aKczbQC!|^_rQPeW^G)yyCCXIzWQpkoFSuCekpmjui_X6AZ7|gS-rs{f} zh}2C@0_D{RXiTCTtAS@!B=2+t1w4V=;@OyHCZ?III(E3^^E8rAB|4Xhlnp@h~dnnxP$K_%$3NxkD=?2F8 z@rg9L2o>RNhZD=C*jxM13@ zHq;M)w|oMvT3M>7-nIc6&cS9xlFGwg?xf#AwZ*sJe)hz!i=L8-tLA~4N@*Z?e|HC* z%17Y6jfoc^-+K$&6LSo%mQ1>A#$a5$DxWPWQ{laak_bB+3z5GzCg&KWh^BS$Rb4Qk@X^k!sciqQ=FBlg8VFzCN4E>nhG&^O>A&MDi(Rftyf{=gJQ^ zHuT$@W98nI%jv2!x;i@8s+x`&nWZinZ5_pm>`nGIUtT%K(>*2AnRRzf2FddL$K|JD z$kQZ>FRjK5Iu5J65Kv92GH`o<)@DAO-{0*1;^cvCBI6 znzYzyD{Z?U^Vb3CI$u0jZ9t-Ub|s_$i+%Uo*93B|n9X2EdWxE6xBw93=^g9<-?lz| zGhw4nT9M?CX~?LRg6>L|YXaPVo$#N;JUJ{_@!Jw9vdXCGjBis8k+AZ%k$d}MNy|bd zrj#)o+BM(a_d8=exuHD1Hw!3Cw6PUyYC*{i*BAr%NRw+V zP!wLkve^FspIk7ra$3v5~ERPCl3+A?>=V_s83HU0QmPB6uq1&QFF<<~G9r z0A$xl3Hfb7$Q%q$ygK#? zVm9+iirpibM<8$+Shk|X`G=<*kFD_`dT%lD2x+v(7z(T+W5M5YK-+v=j1D0IswI$v zxieVa-=-i`B9sr{Bj51}Dhmt!zm^;Cvb&WUfE%GN)3m{XSy|j0shPGX(#zW9Vpdg@ z8dIux=*q9+A~FH{6MS^$)X-fF%gF^;H~O@5Up%%8_c7Nsue(2RA%XnpIaK5s`{wO2Te@38+HI#es{yt9y4yi=XR`nnaAVO>$2Kq}JEM%UXB6)qi;; z@4A~blnrnCcWrxIy@l}_N$8>$6zJ>)j<+Wsi7AzUay;AI9^Y(m)=@@D2=y9B7ESlP zt-d*B1_!vpq>Yz#7E6xGqQfnt~YHZ zq#y(IH`sb&6?at7P;E2~8{B}PhGIuH0}b#cd8V-)>DZ%^36?SAP2w9~%V04WItD79 z1bc2;<-a^vYI@QpRWMOYD-D6vpj*?|k8BU0sB1F@(MyuNp?32rwa=yOF!=g>-`p$g zr0lbwkDV!=)b%`FL(}op)gV>zRyX_-TrU>|NfsMk{jrO6C3b0FUGq7zkyU*fm{^d$ zTVK7cYoAVW^^H{?eO{{tNXufPl?uxXKxJpWzX{k2dfy*Cd|#+h@ja=YPui(MvBTzO zZxyYnm5E}16BR#BG4#)7I*X-iaot3)ay>sp*xm`HND@q{l~n{v2r;eRm&3K~O`Yz1f#d!7PVKT_79k7Y6}zp)|SNa8Tt&hG}9*g*@HHq5|) ze9APn$y*EDV;QS8aORqPRx^gw#N258k<>Cct4e6=g-mfM3gL1ui+wFU>T>C`RHk}FWs0O;;YId5-Im94H{9D3ocCQc*Yo1J^655Kq41Kb zf_j9GjHTq- zWZijFOP5wuPZSc+tLT7G*-6o}FbB-Q-9^qIx5RwkG|sYm43x04(mb%8sAR1kBA_5c63?lG(K1VmY^d*pQhn zl2&T(7Qhfx*?ye!-w`TmB90QXW-MQ^Ru|`fPqrS9HAt#_2x}S6;_;{p$9A?b93~=% z=$;zGy(i932|iY4xVEDyu=nS-JqAN6knz+@uGSK(0#DrUh|4stf#t3Nuc?H9zv=eG zx2P=;wMmd}rMDkj94whzuqfKlI8p@!u-u~5PkwJQfq$?#W<-%?C*=yPtVEcErFL-E^0{Rvur@!_ z3`dwj68MyvV#yuuOki8}u=^ieb!MrkU@76Hfn-~23aV}B$Lr~SF)e_%k+KH^R-BTy zRzu;yi6W>gt6&G*;C)S8k;LYIl8uta#CU|r zAA8~@eKd(rA*GI#6?@uLxVh)>_Sj%m9%t0fnq-7Dd+IScC_TQOm|%xk)WQeMgeEqF zL?RPC5|;64lIkv3Q9^D0dSGatEy7V$GJ~-Ucfs7YTG?bqn|r6mrd;#dvz9ltyUo4VVyO+~#$v6IZ%Nj=|dL0^#rOP`e-WV-wAKrKOwi-2o$qdk|0k|8t-scUj zUkiT&$StvU+x+`s_^DutcaEKJ&6{@oh9}54Oby*f`H&OODALDadmqyrM`sJ7n&cgZ z_CHKbv|#xm7QZ?T@$Z^M+vTQ{dlP#Cf37$?&?_DzTfj;1Y6u9hq)lsrK{#?arxy;( zqWcTjenj6Mjc!Yz(5$XVqOnk!tOOIqhXB z{{W_QZT!af{J*{&hEyMhBEM0<{PDz|%bSlEDV3#&5PW$>j^RnehK&hkI*Xt66Kpx- zNH4epo2Wmo97iJCiyjGK$I}8_?^HrKhh)mrE|7|@t8MgxaKD!*zGopj>g|UZHjq?@ z?sqoFJUh0csHAaYd=8`Pm?Ud>UPOTaB0;G0{{W$fRYt{0Hrn8mf36uRQQ6gZ$&ZZNNsJTH{1}v?TK;Gy7@v8+_kyGf|bJt^ME!0ZEOAT8p26? zk0n8jvtG*P-HVaywiO%_v9MP48-KnDifGBZwAQ!!hS=go05&D}?rweimqJt3ZGmf!h*Ty4>v0X)za9N&-A99hHJ-9p=&@Gve+)Cmfm zAfX)o8OPi2HbbMfS|kqvb7ecYcZKr+j23*F&{F`s1vXY#lEAFNLJAGm)Xk zVZFD%rYTLGPJaLnSX>RRf7=NCu_Uah${-@;gKoC%^&iU;Fy5uP0J@60%+LZ)h|7LW z@fE5gR0K?=cicDW^~GjP&r+hgje8PpweZZfQZYJ1CxnVdKb0kCPf@RB{`ixOTgs?q zCt!~yd<}A0Y!2I;ITb?4*N;W}s)9}Z@C-`&*ov0YN0jMSAI}ORrp_VE3|jUFN8vuh zj7NYjtui@J_ca-L*+Bv{APx=1zW8CDGId!L^QzbX0Bl2y&kaACq|68UhxX&?guQwr zdE=i*0^laA{Wru2&CpIcF|+Y(rnIT1?8*riQKb4|Cq<5iLbuw$+#Esutx0mJEUBoG z=8vCaj+&x5mcy{HwhO~>MkQWha5XhT9A$#*kdQhCG3&?e@cFc54AHkOjy) zVU{w=S&Jaw*ZSkC(3!<4306t7#H>4Rcl+TUAhn8s4+7RZ_V&UAGKDq~Fz!bn{cxdh zFQHGk{&<=TyjKyj@m4CObiV%p#BH`3n9CT{QX^xyUr$bX!===QBo+W(-q>%&O;#gG zxwZLh5VSh`6winy7Y!H;N0czz>-EQFZ#Y&i9NdF@Tm7-gQAOGzuhgjk{{Wxc4U=W^ zPF#cLw${IVGQAZ^S|t1>G_n|pCK*UKI}zr?)b-I2S~LNzeMEvzBTp)zD)Obf`H!de z$0SWL__08Z>dEvvm)yVa{_rm*u*0zKW8xNDB$! zE|W)M84mjk8~s4WSDPP;v|Td|9949(%})=91ywu>Y9S?>>8uj^h*jTl`_1^;-PfH{ z)EOuVP16-Q#48z^qN*80NfPP+jy%TO*jnEBp>+?$j=M~xK3CD=ib>UtJhM&WN+S)X z<~t3^I@QYMIGP)lU_ITRc zixI~gV)FGllTkF8CQyPOmVCQfM(ksBf5#EkZxDhw;^xDARBDZ8ahp$9oHIQ{M5K&> zcxc+TTQ6cs-|2^fAYnRjoZtW)}HS9iWsohpTY?ypTTy7*;=$lZwFbFsgn#l7pEk6wvpbp#RT*x%5eG4g(`AG}TCG`5eR zuh)O7Ya)@&)nOfw#x5R0!q55lh^(_xiy&TYog=(iy0;=rlg`>C91Ebg07-7EC`?hD&KGp_aflh z_xg-eel_MZ<$W+^UY@4UvcDaEZjwkP@c~lA$|a44h0+C!Dcm2XIn^0vMb()cOPf+k zOw1*vo+)(s&jknvNHzeFFJOH!m-Uu)@l&KaTxE4t&ovw+Ry@iftUPAmMr7Mkn~+t3 zJ9=Y(qV%}kksFvsuy<>=zl%uyIZP2Xjkj)AW7jqFRA;V|R8UBU81)>zSHm||HY5)- z0tLz5dmE7qBC6Yzgna1=PzmMDkBNv&kbCc4Kl_?n%eiB9BN7t%5>#D~!vTQp4gHwals> z;Ay!6_dHt%vkF?OeBK)BnzKG(QBy0ojUtU;F&fN=%5Fn`UrY*Iy<(P&=18ZCqjKzZ zSOa5lHwW9?Vm$GsK4Ia!hD1iOW!#bJzkh5?yvLQqD^g9E^@eYoX4KA<*}R4`9UUZW z49sk&PWK17?YZL>+}bSLF0HAi%syfYhGveYHoB6^cUB$jMhRtA5=GT<)%5LkR#ws3 zlA+|$Bx1u+B{}XaIrQHaKDEl_%=)sTtEg)0X%eAim`yoZWEK`LCXfNt_8wipxUse> z2Z&@1HKx9zyCc)Jszn4<`Lv5g6rLu8BrC`OR8=IM`v3|4`0j6%<{2$yboJD-LootG z)Gi%P>dWd5A)^==*oFiiI6bjt>aMGoKFPAmO0a4sqo#%kq+@RZP|0*qHX(y4B;4F$ z%gl{?bdM?J2pb?7q^~|#(t%_pg) zqmGUjBSa~CC;$%q_PO^sg@-qV3#bWe0ds=1RT0Gqq!0#?+-h)de?T`ITZ6*zCMeHNvP~wdu9)_{n^pGQ zY8J(Rr#hMnE`+M4%;{+oD#=wTkS4ha0_^tmxLxmJc?R2QSuFiGnmrX>YV=uzsEJMD z#D`KglBdDm@8)Gu$8tEwiQs&YuPOph~%F_M7=IEzR}(yGklgSjLDWf#~T@3t!+52>r_^N49H zvneR)DA&Yk1U@3dG@G`TAchvTz}vTL=rQr+VTU-=o6k4$s=wyRz=Maor_+fokWD2?k%fM-|6+f2V{AHl8QQcDWdR<$g@;Q`>+>KI(1wE ze7ulNuZzE2^xYnF)Y)ZhIfY@Ps;6lndYJVjaL2NXuJ#}^8v?^nxV`U5hKDdU8HPzy z<0z+N;Kd}GVGSD-q~F_E7UY~=!;zBXv6o~G)wmoV6Io;1gwyvH@e(yaDBJ1Jm404Lnc)`aKk*F1n`MskZN5@N#u4Qf~0zbi*QHe@W@sp zkIPP0PQ0OuA!=in&{H)u&EwE!2>OYPd3-j~N*NT7F$C|p*o+tH`C-nwc+=*OGc#VH zsulpkHIGl2D*pfo0fGCT0m42N=H^bD&ay1eF%VL~kyO*Hnva6T#BD0Bl8&HArP1se z0V8!7dZRI^$=TpaT)K}pq7v+|FcMsX9dweQZ*{N$@9Vv6xcs4`ka7H3mk6*gxI5Ryz^Dp>`m1ZSRcZIL@WcYN*7YxfF?@NC{%1{0r}4djZ?m8VAD3<@tQc^4i%X zTPKb4(0L27vl}h-5H%hJ1?pazlA=nQ{F0VA%jQo>PLUw+%xEsIzNM^gc;DX% z#*!#<9@lIK9}T!s2?A#}zDaqT<{9Q+JP^S_Qo@cYC8(1?)h63SKmkYuDO1S=o9%>U zSyg1!GUU08k!#AOcCgz~Xu7Z-~`YE|O%~k}R=WQy3594SW&E zJ6L@O9OFUhzk?k`)KrurY8bLQM3L53s3grI>98-}<%!k3jm5adY5JBnGd%LN3+!x< z=gCZ z;Q@S7E&#Bx^4oL0t=kr-{{V-+xTBm%XlbjowVE+f0Or7h-|6XX@oGNtSF?) z#hUu9dtdO4yIbEMPE-E?!&gU#kzX~;T}(k4OaK)-ZifEbi+91Shu~ksyo#MtYI@4s zxn^p%xIa*~7Qp2DZ__^$ONsd_PsMYW%E?I-Jw2H`l@8TX7?L;(mHB(IyL|$1nU!td zj(xH98>>2(3m{wY8`F$2^79vIG$xWX-bXrs_w9tAZ90H)a|mz9D-q!`Gi7}9k^cb0 z22iL@ZBv-L02~oj9AJxn5;U&T~i@J_nhtDgI{{WHy04YU{X}{Su7=npWGW?1t+SVH?00$cZhg&nOX+_|T zQAe44QTN;ph8_zJ8Q6UZ{>%ZR8B2J93-zMVRQAvannH)6Jaiq;Xd8Bs$tu;HU@*Y-g`|J(9@Rj+IFNp+nDWrJ- zgT44Y{{Sycb+cv(XlXTi9ag>?nzngU#PDH^fxXE#w*Afs2M!W^SXg~g11!3C5eW|D zqWMSXh%-t+CQ9XrfY_{H1N0}pI2u+`WvW#?`F0!s04y~+QnCxq9sM0cT=wU;^~W?< zDjhpLKQzpmCW&KOxu<5hZ~A~q`wS`wAcz>!PYyS2*IxJUgtUMKVL4sD2;1}+jXa`I zJc>ZzhW@y2=U}VNlr-OuBu;&3K6M339uxnV} z$NOQaBVt6eR?HY|$|OI?ZG&t#-BWbKnp2uuajRPieAXphtZ<*6fN>N+Tb92+bAh5N z2<6wQ!R&5t_5T2DH!sL5Sdz`nn_}2-iKlJSjF-qnMRLwc-$^HHTlB&uc(v$h-Ac86%ktoWQ5ZUi=!0P>bVIorNWmN!ieiZtf^MVnJ*#JJJN-|Rwyo~l^a&68$V~@dC zL~@(~tNLS+7TQLZFizwZ{@h{G>czD_+Cjaxx7QqY;Td&=)5vrMNTbtxdf}_otW3)G zU9JjweX#kEM*0#d2p@{dH}}2x!w)>hK_bG$uEyYteq7+15Qf@liB8(5W7|Qt{{U<^ zWsSVvA==|nxg_z4COX-at46U{^8DZP!(S&Vr-mg$ce;QrZ%gmS8VIe*lF}1TGHy^g zaF?)6Onr#@;yVe0m8YeOH*MF&VYu|~iEz@^5_MEYsv5we>^-hd6wgYeMI@St1cg;3 zu^sSX;A}TjMDT}IP_(Pz$ySOs)FTA{0G92BpvtIJ>5>ViCH7~yzTSfb#Bk^Z(p6Jp zmRnzb{{GlqB{sHJSmn|$xw!gRet16_&2KcA$YgRH(ZK;zOP8h2&7^3!w{mdgKQPSB zDalm=_Iv)8{s2zwm z?~kg!B4-0B=v?NZma!Qr9Tmz2LehB^LBC>0*5@BTd>ZM@v#C0cqK`AGo*@K3FtJ3S znZmHtw~Zu@WeahzC7MC7Joh90C&s`w8PUjnxe+>TsXmw=0IZsnXm(f&Z!nynfc}QfDlF4y!e86r%BXWCV zDxQNXr_J*WyEKO}qLv7qX`_TB%+uUxS0#W8Yu$y;!()$AhtzTBu@@i%^gJdxg{eI` zQ3WLOOe$u8#6zJ|=VluVF9d=?->^2{7H*~eo111a)Y9hE<)n48fvQ(_ux8@R_(g@s zKG^104^LKQ6xmK?9D;Rnuui|bk`2jdm=R|Hl1abu3<~Nzjk2j{T3YuskWQhRP!;uW z<|;TmkUcNWunu!1o4Z^-9I9ls?({0zL6}ojP)u_dma=&oNal=7XOWG?f+!ak0NnAv z*8wZ@3PjB6DCeN06UM4ybQ)Js*p|2AVlFwbz3?w6tEzZE>2mLw5xES=q_oAhyAM&l zzQ24YGR&(atDP&TB&Bu(LI{SXRW{|WMTXmYVNv5~kk{+`A`tIs8D#WOR+(wqR=k9) z7SzOxoi`uDz&^OLHB5gf(AFdl(Zr0gteObE#^-={1Y2$Ih!hiL^+Uw2s|3SPCGflt zJ&SGuxEj0LYwzuXIbnd&RaU{4v%Ab1NToU=3HX&YZd;3xN2hFdK?K7ni4zbN5r;31tCy&Ipu@@YR9BsW3(78`ftkqP)TB)V5W|q!k7W^n} z#{K;{#y65?ElC|EYOwK)gG4?)vM<4Pw(4)kZO%4ciHk9)$m6N6tC-Zx%=)8UXsf8% zRgX5}-)wmQ0BEM4!=UXg;EzoZ%`H1~W2r6y=lmF3O-C8DaKReiVzBJq zzidUTSt+bup_<^UF$zA!Vi~Tb6D&~6SkJYzC}Do)-N4_2j~XI#_q$e0LwHZt*7$NU z)lRYSTGk(*<%qs0l|U0jMxCtp`tgZVH2x~FbcP-L^QPQii~V-n0!@7^a)hX^f>{~P z@X|K+xb8;VA6!_9Eknu_Fih>kRQQ&SR24*KwUw`Kcp#47Ttuj>q>iIpG^SY=Jta%E z(|yUf`eH2ExQ^_ZCS_2gP_x3Q2;lK^Z+sA?pF8cB#R4BLkx)rfer^`l!%R+Rncu26 z$1xOBehbzB4JBk~N8&q!@4c^te!)qL{{YjJeYBO?hTPk0;Dl89qcVabG8MC|l_0n` z>^C@Ap{fXn=9sD3LZM(q?b`w3xu1m6N4md|2~93hPar=wNwFXU66v+Q5Aw%ir-}%c z7#2vQLFJ8M8WeW~4ZZNXApjAHGZ%IsfU1|Zj{KX8dSkT`2;4@wiCG(Bib~(;aJ^4) z(n@L6!DnQnC2&+ljagLcE#QCw_5=Lq4A1*TqqK##I;~viA~4(&b_dYy+qZjR{tH+&7XXFMbc6s(Cqo)5c#^a+6g-

+l2;n3&Z1-+ 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�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 E2Pf2JfdBvi literal 0 HcmV?d00001 diff --git a/tensorflow-utils/pom.xml b/tensorflow-utils/pom.xml new file mode 100644 index 00000000000..25f580fdde8 --- /dev/null +++ b/tensorflow-utils/pom.xml @@ -0,0 +1,22 @@ + + + 4.0.0 + + + org.tensorflow + tensorflow-java + 0.1.0-SNAPSHOT + + tensorflow-utils + pom + + Tensorflow Utility Parent + Parent POM for TensorFlow utility artifacts + + + nio-utils + + + + From b2dd45b2716095838b020353c153b4d9e308d0f4 Mon Sep 17 00:00:00 2001 From: Karl Lessard Date: Mon, 2 Dec 2019 17:17:42 -0500 Subject: [PATCH 2/8] Quick fixes in the README file --- tensorflow-utils/nio-utils/README.md | 74 +++++++++++----------------- 1 file changed, 30 insertions(+), 44 deletions(-) diff --git a/tensorflow-utils/nio-utils/README.md b/tensorflow-utils/nio-utils/README.md index 9525fc5d824..ca55bbd1443 100644 --- a/tensorflow-utils/nio-utils/README.md +++ b/tensorflow-utils/nio-utils/README.md @@ -3,8 +3,8 @@ ## Introduction TensorFlow NIO utility library helps manipulating large N-dimensional data records in the JVM -runtime environment by providing an intuitive API on top of linear memory segments commonly -used, such as standard arrays or JDK NIO buffers. +runtime environment by providing an intuitive API on top of linear memory segments, such as standard +arrays, JDK NIO buffers or native memory. The need of additional utilities to handle those data structures became obvious when users observed slow performances by using standard multidimensional arrays in Java, resulting from the @@ -22,7 +22,7 @@ structures utilities) It is important to note that the TensorFlow NIO library does not depend on any other TensorFlow -runtime libraries, thus can used easily by any other projects who wants to benifits from its +runtime libraries, thus can used easily by any other projects who wants to benefit from its features. For example, an instance of `NdArray` could easily be passed from one library to another for sharing data. @@ -30,7 +30,7 @@ To import TensorFlow NIO in your project, simply add the following dependency: ```xml org.tensorflow - tensorflow-utils-nio + nio-utils 0.1.0-SNAPSHOT ``` @@ -47,9 +47,9 @@ All examples of this README page are based on those imports. ### Data Buffers -In TensorFlow NIO library, data is stored in a `DataBuffer`, which can be seen as an extension to -the JDK NIO `Buffer` objects but with the addition of 64-bits indexation support and usage of -generic parametrization useful when the actual type of the buffer is unknown. +In TensorFlow NIO library, data is stored in a `DataBuffer`, which maps a contiguous segment of +memory with 64-bits indexation and supports generic parametrization while still allowing direct +access to primitive types. ```java // Allocate a buffer of 4K int values @@ -57,33 +57,24 @@ IntDataBuffer bufferA = bufferOfInts(4096L); assertEquals(4096L, bufferA.size()); // Write an int array at the beginning of the buffer -bufferA.put(new int[] { 1, 2, 3 }); -assertEquals(3L, bufferA.position()); +bufferA.write(new int[] { 1, 2, 3 }); assertEquals(3, bufferA.getInt(2)); -// Slice buffer after first value -IntDataBuffer bufferB = bufferA.position(1).slice(); +// Slice buffer after its first value +IntDataBuffer bufferB = bufferA.offset(1); assertEquals(4095L, bufferB.size()); -assertEquals(0L, bufferB.position()); assertEquals(2, bufferB.getInt(0)); -// Wrap an int array into a data buffer -IntDataBuffer bufferC = bufferOf(new int[] { 10, 20, 30, 40 }, false); -assertEquals(4L, bufferC.size()); -assertEquals(40, bufferC.getInt(3)); - -// Join buffers together -IntDataBuffer bufferBC = DataBuffers.join(bufferB, bufferC); -assertEquals(4099L, bufferBC.size()); -assertEquals(2, bufferBC.getInt(0)); -assertEquals(40, bufferBC.getInt(bufferBC.size() - 1)); +// Resize a buffer to 10 elements +IntDataBuffer bufferC = bufferA.narrow(10); +assertEquals(10L, bufferB.size()); +assertEquals(2, bufferB.getInt(0)); ``` ### ND Arrays -TensorFlow NIO provides an interface called `NdArray` for wrapping up a `DataBuffer` (physically -or logically contiguous) to expose utilities for traversing, reading or writing data in a -multi-dimensional space. +TensorFlow NIO provides an interface called `NdArray` for wrapping up a `DataBuffer` to expose +an API for traversing, reading or writing data in a multi-dimensional space. ```java // Allocating a 3D matrix of 2x3x2 @@ -94,7 +85,10 @@ assertEquals(3, matrix3d.rank()); matrix3d.elements(0).forEach(matrix -> { assertEquals(2, matrix.rank()); assertEquals(shape(3, 2), matrix.shape()); - matrix.set(vector(1, 2), 0).set(vector(3, 4), 1).set(vector(5, 6), 2); + matrix + .set(vector(1, 2), 0) + .set(vector(3, 4), 1) + .set(vector(5, 6), 2); }); // Visit all scalars of 3D matrix, printing their coordinates and value @@ -138,26 +132,18 @@ assertEquals(12, tensorData.size()); try (EagerSession session = EagerSession.create()) { Ops tf = Ops.create(session); - // Initialize tensor memory with zeros - tensorData.write(bufferOfInts(tensorData.size())); - tensorData.scalars().forEach(scalar -> - assertEquals(0, scalar.getInt()) - ); - Constant x = tf.constant(tensor); // take snapshot of `tensor` with all zeros - - // Initialize tensor memory with all ones - int[] ones = new int[(int)tensorData.size()]; - Arrays.fill(ones, 1); - tensorData.write(ones); - tensorData.scalars().forEach(scalar -> - assertEquals(1, scalar.getInt()) - ); - Constant y = tf.constant(tensor); // take snapshot of `tensor` with all ones + // Initialize tensor memory with zeros and take a snapshot + tensorData.scalars().forEach(scalar -> scalar.setValue(valueOf(0))); + Constant x = tf.constant(tensor); + + // Initialize the same tensor memory with ones and take a snapshot + tensorData.scalars().forEach(scalar -> scalar.setValue(valueOf(1))); + Constant y = tf.constant(tensor); // Subtract y from x and validate the result - Sub sub = tf.math.sub(x, y); + Sub sub = tf.math.sub(x, y); sub.tensorData().scalars().forEach(scalar -> - assertEquals(-1, scalar.getInt()) - ); + assertEquals(valueOf(-1), scalar.getValue()) + ); } ``` \ No newline at end of file From b22a74f837e27315c2d6e2bac7166e01f6ee6699 Mon Sep 17 00:00:00 2001 From: Karl Lessard Date: Mon, 2 Dec 2019 22:03:29 -0500 Subject: [PATCH 3/8] Apply post-review changes and rename artifacts --- pom.xml | 2 +- tensorflow-core/tensorflow-core-api/pom.xml | 3 +- .../api_def/api_def_CollectiveBcastRecv.pbtxt | 4 + .../api_def/api_def_CollectiveBcastSend.pbtxt | 4 + .../api_def/api_def_CollectiveGather.pbtxt | 7 + .../api_def/api_def_CollectiveReduce.pbtxt | 4 + .../bazel/api_def/api_def_NcclAllReduce.pbtxt | 4 + .../bazel/api_def/api_def_NcclReduce.pbtxt | 4 + .../src/bazel/op_generator/op_specs.cc | 2 +- .../org/tensorflow/op/DataOps.java | 124 +- .../org/tensorflow/op/DtypesOps.java | 26 +- .../org/tensorflow/op/ImageOps.java | 122 +- .../annotations/org/tensorflow/op/IoOps.java | 160 +-- .../org/tensorflow/op/LinalgOps.java | 94 +- .../org/tensorflow/op/MathOps.java | 280 ++-- .../annotations/org/tensorflow/op/NnOps.java | 182 +-- .../annotations/org/tensorflow/op/Ops.java | 1222 ++++++++++++----- .../org/tensorflow/op/QuantizationOps.java | 114 +- .../org/tensorflow/op/RandomOps.java | 106 +- .../org/tensorflow/op/SignalOps.java | 36 +- .../org/tensorflow/op/SparseOps.java | 140 +- .../org/tensorflow/op/StringsOps.java | 36 +- .../org/tensorflow/op/SummaryOps.java | 22 +- .../org/tensorflow/op/TrainOps.java | 182 +-- .../tensorflow/op/collective/AllReduce.java | 12 +- .../op/collective/BroadcastRecv.java | 14 +- .../op/collective/BroadcastSend.java | 14 +- .../op/core/AnonymousIteratorV2.java | 2 +- .../op/core/AnonymousMultiDeviceIterator.java | 2 +- .../tensorflow/op/core/AssertNextDataset.java | 2 +- .../tensorflow/op/core/AutoShardDataset.java | 2 +- .../java/org/tensorflow/op/core/Barrier.java | 2 +- .../org/tensorflow/op/core/CSVDataset.java | 2 +- .../tensorflow/op/core/CacheDatasetV2.java | 2 +- .../op/core/ChooseFastestDataset.java | 2 +- .../tensorflow/op/core/CollectiveGather.java | 14 +- .../op/core/DirectedInterleaveDataset.java | 2 +- .../org/tensorflow/op/core/EnsureShape.java | 2 +- .../op/core/ExperimentalAutoShardDataset.java | 2 +- ...ExperimentalBytesProducedStatsDataset.java | 2 +- .../ExperimentalChooseFastestDataset.java | 2 +- ...ExperimentalDenseToSparseBatchDataset.java | 2 +- .../core/ExperimentalLatencyStatsDataset.java | 2 +- ...erimentalMaxIntraOpParallelismDataset.java | 2 +- .../core/ExperimentalParseExampleDataset.java | 2 +- .../ExperimentalPrivateThreadPoolDataset.java | 2 +- .../op/core/ExperimentalRandomDataset.java | 2 +- .../op/core/ExperimentalRebatchDataset.java | 2 +- ...ExperimentalSetStatsAggregatorDataset.java | 2 +- .../ExperimentalSlidingWindowDataset.java | 2 +- .../op/core/ExperimentalSqlDataset.java | 2 +- .../op/core/ExperimentalUnbatchDataset.java | 2 +- .../op/core/IgnoreErrorsDataset.java | 2 +- .../tensorflow/op/core/ImmutableConst.java | 2 +- .../org/tensorflow/op/core/InfeedDequeue.java | 2 +- .../op/core/InfeedDequeueTuple.java | 2 +- .../org/tensorflow/op/core/InfeedEnqueue.java | 2 +- .../op/core/InfeedEnqueueTuple.java | 2 +- .../org/tensorflow/op/core/LMDBDataset.java | 2 +- .../op/core/MaxIntraOpParallelismDataset.java | 2 +- .../op/core/MutableDenseHashTable.java | 2 +- .../op/core/MutableHashTableOfTensors.java | 2 +- .../org/tensorflow/op/core/NcclAllReduce.java | 12 +- .../org/tensorflow/op/core/NcclBroadcast.java | 2 +- .../org/tensorflow/op/core/NcclReduce.java | 12 +- .../op/core/NonSerializableDataset.java | 2 +- .../tensorflow/op/core/OutfeedDequeue.java | 2 +- .../op/core/OutfeedDequeueTuple.java | 2 +- .../tensorflow/op/core/ParallelConcat.java | 2 +- .../org/tensorflow/op/core/Placeholder.java | 2 +- .../op/core/PlaceholderWithDefault.java | 2 +- .../org/tensorflow/op/core/Prelinearize.java | 2 +- .../tensorflow/op/core/PrelinearizeTuple.java | 2 +- .../op/core/PrivateThreadPoolDataset.java | 2 +- .../tensorflow/op/core/RebatchDataset.java | 2 +- .../core/ResourceConditionalAccumulator.java | 2 +- .../tensorflow/op/core/SamplingDataset.java | 2 +- .../org/tensorflow/op/core/ShardDataset.java | 2 +- .../tensorflow/op/core/ShuffleDatasetV2.java | 2 +- .../org/tensorflow/op/core/SleepDataset.java | 2 +- .../op/core/SlidingWindowDataset.java | 2 +- .../tensorflow/op/core/SnapshotDataset.java | 2 +- .../tensorflow/op/core/TemporaryVariable.java | 2 +- .../org/tensorflow/op/core/TensorArray.java | 2 +- .../tensorflow/op/core/TensorArrayConcat.java | 2 +- .../tensorflow/op/core/TensorArrayGather.java | 2 +- .../tensorflow/op/core/TensorArrayPack.java | 2 +- .../tensorflow/op/core/TensorListConcat.java | 2 +- .../tensorflow/op/core/ThreadPoolDataset.java | 2 +- .../org/tensorflow/op/core/UniqueDataset.java | 2 +- .../org/tensorflow/op/core/VarHandleOp.java | 2 +- .../java/org/tensorflow/op/core/Variable.java | 2 +- .../tensorflow/op/data/AnonymousIterator.java | 2 +- .../org/tensorflow/op/data/BatchDataset.java | 2 +- .../op/data/BytesProducedStatsDataset.java | 2 +- .../org/tensorflow/op/data/CacheDataset.java | 2 +- .../op/data/ConcatenateDataset.java | 2 +- .../op/data/DatasetToSingleElement.java | 2 +- .../op/data/DenseToSparseBatchDataset.java | 2 +- .../data/ExperimentalAssertNextDataset.java | 2 +- .../op/data/ExperimentalCsvDataset.java | 2 +- ...ExperimentalDirectedInterleaveDataset.java | 2 +- .../data/ExperimentalIgnoreErrorsDataset.java | 2 +- .../op/data/ExperimentalLmdbDataset.java | 2 +- .../ExperimentalNonSerializableDataset.java | 2 +- .../op/data/ExperimentalSleepDataset.java | 2 +- .../data/ExperimentalThreadPoolDataset.java | 2 +- .../op/data/ExperimentalUniqueDataset.java | 2 +- .../op/data/FilterByLastComponentDataset.java | 2 +- .../java/org/tensorflow/op/data/Iterator.java | 2 +- .../op/data/IteratorFromStringHandle.java | 2 +- .../tensorflow/op/data/IteratorGetNext.java | 2 +- .../op/data/IteratorGetNextAsOptional.java | 2 +- .../op/data/IteratorGetNextSync.java | 2 +- .../org/tensorflow/op/data/KafkaDataset.java | 90 ++ .../op/data/LatencyStatsDataset.java | 2 +- .../org/tensorflow/op/data/ModelDataset.java | 2 +- .../op/data/MultiDeviceIterator.java | 2 +- .../MultiDeviceIteratorFromStringHandle.java | 2 +- .../MultiDeviceIteratorGetNextFromShard.java | 2 +- .../tensorflow/op/data/OptimizeDataset.java | 2 +- .../tensorflow/op/data/OptionalGetValue.java | 2 +- .../op/data/PaddedBatchDataset.java | 2 +- .../op/data/ParseExampleDataset.java | 2 +- .../tensorflow/op/data/PrefetchDataset.java | 2 +- .../org/tensorflow/op/data/RandomDataset.java | 2 +- .../org/tensorflow/op/data/RangeDataset.java | 2 +- .../org/tensorflow/op/data/RepeatDataset.java | 2 +- .../op/data/SetStatsAggregatorDataset.java | 2 +- .../op/data/ShuffleAndRepeatDataset.java | 2 +- .../tensorflow/op/data/ShuffleDataset.java | 2 +- .../org/tensorflow/op/data/SkipDataset.java | 2 +- .../org/tensorflow/op/data/SqlDataset.java | 2 +- .../org/tensorflow/op/data/TakeDataset.java | 2 +- .../org/tensorflow/op/data/TensorDataset.java | 2 +- .../op/data/TensorSliceDataset.java | 2 +- .../tensorflow/op/data/UnbatchDataset.java | 2 +- .../org/tensorflow/op/data/WindowDataset.java | 2 +- .../org/tensorflow/op/data/ZipDataset.java | 2 +- .../java/org/tensorflow/op/io/FifoQueue.java | 2 +- .../tensorflow/op/io/PaddingFifoQueue.java | 2 +- .../org/tensorflow/op/io/ParseExample.java | 2 +- .../op/io/ParseSequenceExample.java | 2 +- .../tensorflow/op/io/ParseSingleExample.java | 2 +- .../op/io/ParseSingleSequenceExample.java | 2 +- .../org/tensorflow/op/io/PriorityQueue.java | 2 +- .../tensorflow/op/io/RandomShuffleQueue.java | 2 +- .../org/tensorflow/op/math/AccumulateN.java | 2 +- .../sparse/SparseConditionalAccumulator.java | 2 +- .../op/train/ConditionalAccumulator.java | 2 +- .../org/tensorflow/AbstractOperation.java | 2 +- .../main/java/org/tensorflow/DataType.java | 2 +- .../java/org/tensorflow/EagerOperation.java | 2 +- .../org/tensorflow/EagerOperationBuilder.java | 2 +- .../src/main/java/org/tensorflow/Graph.java | 22 +- .../java/org/tensorflow/GraphOperation.java | 2 +- .../org/tensorflow/GraphOperationBuilder.java | 2 +- .../src/main/java/org/tensorflow/Operand.java | 2 +- .../java/org/tensorflow/OperationBuilder.java | 2 +- .../src/main/java/org/tensorflow/Output.java | 2 +- .../src/main/java/org/tensorflow/Tensor.java | 2 +- .../internal/buffer/RawBufferHelper.java | 56 +- .../internal/buffer/StringTensorBuffer.java | 28 +- .../internal/buffer/TensorBuffers.java | 84 +- .../java/org/tensorflow/op/core/Constant.java | 4 +- .../main/java/org/tensorflow/types/TBool.java | 32 +- .../java/org/tensorflow/types/TDouble.java | 22 +- .../java/org/tensorflow/types/TFloat.java | 22 +- .../java/org/tensorflow/types/TInt32.java | 22 +- .../java/org/tensorflow/types/TInt64.java | 22 +- .../java/org/tensorflow/types/TString.java | 18 +- .../java/org/tensorflow/types/TUInt8.java | 22 +- .../src/main/native/tensor_buffers_jni.cc | 42 - .../src/main/native/tensor_buffers_jni.h | 36 - .../tensorflow/EagerOperationBuilderTest.java | 2 +- .../tensorflow/GraphOperationBuilderTest.java | 2 +- .../op/core/GeneratedOperationsTest.java | 2 +- .../types/NumericTypesTestBase.java | 28 +- .../org/tensorflow/types/TDoubleTest.java | 17 + .../java/org/tensorflow/types/TFloatTest.java | 17 + .../java/org/tensorflow/types/TInt32Test.java | 8 +- .../java/org/tensorflow/types/TInt64Test.java | 17 + .../java/org/tensorflow/types/TUInt8Test.java | 17 + tensorflow-utils/{nio-utils => }/README.md | 69 +- tensorflow-utils/nio-utils/pom.xml | 70 - .../buffer/impl/raw/UnsafeMemoryHandle.java | 138 -- .../virtual/LongVirtualDataBufferTest.java | 44 - .../nio-utils/src/test/resources/1500x916.jpg | Bin 435586 -> 0 bytes tensorflow-utils/pom.xml | 69 +- .../java/org/tensorflow/util}/StaticApi.java | 117 +- .../util}/buffer/BooleanDataBuffer.java | 6 +- .../util}/buffer/ByteDataBuffer.java | 6 +- .../tensorflow/util}/buffer/DataBuffer.java | 6 +- .../tensorflow/util}/buffer/DataBuffers.java | 102 +- .../util}/buffer/DoubleDataBuffer.java | 6 +- .../util}/buffer/FloatDataBuffer.java | 6 +- .../util}/buffer/IntDataBuffer.java | 6 +- .../util}/buffer/LongDataBuffer.java | 6 +- .../util}/buffer/ShortDataBuffer.java | 6 +- .../buffer/adapter/BooleanDataAdapter.java | 4 +- .../util}/buffer/adapter/DataAdapter.java | 4 +- .../buffer/adapter/DoubleDataAdapter.java | 4 +- .../buffer/adapter/FloatDataAdapter.java | 4 +- .../util}/buffer/adapter/IntDataAdapter.java | 4 +- .../util}/buffer/adapter/LongDataAdapter.java | 4 +- .../buffer/adapter/ShortDataAdapter.java | 4 +- .../util}/buffer/impl/AbstractDataBuffer.java | 6 +- .../util}/buffer/impl/Validator.java | 4 +- .../impl/jdk/AbstractJdkDataBuffer.java | 4 +- .../buffer/impl/jdk/ByteJdkDataBuffer.java | 8 +- .../buffer/impl/jdk/DoubleJdkDataBuffer.java | 8 +- .../buffer/impl/jdk/FloatJdkDataBuffer.java | 8 +- .../buffer/impl/jdk/IntJdkDataBuffer.java | 8 +- .../buffer/impl/jdk/LongJdkDataBuffer.java | 8 +- .../buffer/impl/jdk/ShortJdkDataBuffer.java | 8 +- .../buffer/impl/misc/ArrayDataBuffer.java | 12 +- .../buffer/impl/misc/BitSetDataBuffer.java | 12 +- .../impl/misc/BooleanArrayDataBuffer.java | 13 +- .../impl/raw/AbstractRawDataBuffer.java | 22 +- .../buffer/impl/raw/BooleanRawDataBuffer.java | 10 +- .../buffer/impl/raw/ByteRawDataBuffer.java | 10 +- .../buffer/impl/raw/DoubleRawDataBuffer.java | 10 +- .../buffer/impl/raw/FloatRawDataBuffer.java | 10 +- .../buffer/impl/raw/IntRawDataBuffer.java | 10 +- .../buffer/impl/raw/LongRawDataBuffer.java | 10 +- .../buffer/impl/raw/ShortRawDataBuffer.java | 10 +- .../buffer/impl/raw/UnsafeMemoryHandle.java | 138 ++ .../util/buffer/impl/raw/UnsafeReference.java | 87 ++ .../virtual/AbstractVirtualDataBuffer.java | 16 +- .../virtual/BooleanVirtualDataBuffer.java | 10 +- .../impl/virtual/DoubleVirtualDataBuffer.java | 10 +- .../impl/virtual/FloatVirtualDataBuffer.java | 10 +- .../impl/virtual/IntVirtualDataBuffer.java | 10 +- .../impl/virtual/LongVirtualDataBuffer.java | 10 +- .../impl/virtual/ShortVirtualDataBuffer.java | 10 +- .../impl/virtual/VirtualDataBuffer.java | 8 +- .../util/ndarray}/BooleanNdArray.java | 17 +- .../tensorflow/util/ndarray}/ByteNdArray.java | 17 +- .../util/ndarray}/DoubleNdArray.java | 17 +- .../util/ndarray}/FloatNdArray.java | 17 +- .../util/ndarray}/IllegalRankException.java | 2 +- .../tensorflow/util/ndarray}/IntNdArray.java | 17 +- .../tensorflow/util/ndarray}/LongNdArray.java | 17 +- .../org/tensorflow/util/ndarray}/NdArray.java | 24 +- .../util/ndarray}/NdArraySequence.java | 2 +- .../tensorflow/util/ndarray}/NdArrays.java | 72 +- .../org/tensorflow/util/ndarray}/Shape.java | 2 +- .../util/ndarray}/ShortNdArray.java | 17 +- .../util/ndarray}/impl/AbstractNdArray.java | 16 +- .../util/ndarray}/impl/Validator.java | 6 +- .../impl/dense/AbstractDenseNdArray.java | 26 +- .../impl/dense/BooleanDenseNdArray.java | 18 +- .../ndarray}/impl/dense/ByteDenseNdArray.java | 18 +- .../ndarray}/impl/dense/DataTransfer.java | 24 +- .../ndarray}/impl/dense/DenseNdArray.java | 10 +- .../impl/dense/DoubleDenseNdArray.java | 18 +- .../impl/dense/FloatDenseNdArray.java | 18 +- .../ndarray}/impl/dense/IntDenseNdArray.java | 18 +- .../ndarray}/impl/dense/LongDenseNdArray.java | 18 +- .../impl/dense/ShortDenseNdArray.java | 18 +- .../util/ndarray}/impl/dense/Validator.java | 8 +- .../impl/dimension/AbstractDimension.java | 2 +- .../util/ndarray}/impl/dimension/Axis.java | 2 +- .../ndarray}/impl/dimension/Dimension.java | 4 +- .../impl/dimension/DimensionalSpace.java | 6 +- .../impl/dimension/IndexedDimension.java | 4 +- .../impl/dimension/ReducedDimension.java | 2 +- .../dimension/RelativeDimensionalSpace.java | 2 +- .../impl/dimension/UnknownDimension.java | 4 +- .../impl/sequence/ElementSequence.java | 10 +- .../sequence/IndexedPositionIterator.java | 2 +- .../IndexedSequentialPositionIterator.java | 4 +- .../impl/sequence/NdPositionIterator.java | 4 +- .../impl/sequence/PositionIterator.java | 4 +- .../sequence/SequentialPositionIterator.java | 4 +- .../impl/sequence/SingleElementSequence.java | 10 +- .../tensorflow/util/ndarray}/index/All.java | 4 +- .../tensorflow/util/ndarray}/index/At.java | 4 +- .../tensorflow/util/ndarray}/index/Even.java | 4 +- .../tensorflow/util/ndarray}/index/Flip.java | 4 +- .../tensorflow/util/ndarray}/index/From.java | 4 +- .../tensorflow/util/ndarray}/index/Index.java | 7 +- .../util/ndarray}/index/Indices.java | 14 +- .../tensorflow/util/ndarray}/index/Odd.java | 4 +- .../tensorflow/util/ndarray}/index/Range.java | 4 +- .../util/ndarray}/index/Sequence.java | 8 +- .../tensorflow/util/ndarray}/index/Step.java | 4 +- .../tensorflow/util/ndarray}/index/To.java | 4 +- .../util}/benchmark/NdArrayBenchmark.java | 26 +- .../buffer/BooleanDataBufferTestBase.java | 14 +- .../util}/buffer/ByteDataBufferTestBase.java | 2 +- .../util}/buffer/DataBufferTestBase.java | 32 +- .../buffer/DoubleDataBufferTestBase.java | 2 +- .../util}/buffer/FloatDataBufferTestBase.java | 2 +- .../util}/buffer/IntDataBufferTestBase.java | 2 +- .../util}/buffer/LongDataBufferTestBase.java | 2 +- .../util}/buffer/ShortDataBufferTestBase.java | 2 +- .../impl/jdk/ByteJdkDataBufferTest.java | 6 +- .../impl/jdk/DoubleJdkDataBufferTest.java | 6 +- .../impl/jdk/FloatJdkDataBufferTest.java | 6 +- .../buffer/impl/jdk/IntJdkDataBufferTest.java | 6 +- .../impl/jdk/LongJdkDataBufferTest.java | 6 +- .../impl/jdk/ShortJdkDataBufferTest.java | 6 +- .../buffer/impl/misc/ArrayDataBufferTest.java | 6 +- .../impl/misc/BitSetDataBufferTest.java | 6 +- .../impl/misc/StringArrayDataBufferTest.java | 6 +- .../impl/raw/BooleanRawDataBufferTest.java | 6 +- .../impl/raw/ByteRawDataBufferTest.java | 6 +- .../impl/raw/DoubleRawDataBufferTest.java | 6 +- .../impl/raw/FloatRawDataBufferTest.java | 6 +- .../buffer/impl/raw/IntRawDataBufferTest.java | 6 +- .../impl/raw/LongRawDataBufferTest.java | 6 +- .../impl/raw/ShortRawDataBufferTest.java | 6 +- .../BigIntegerVirtualDataBufferTest.java | 26 +- .../virtual/BooleanVirtualDataBufferTest.java | 18 +- .../virtual/DoubleVirtualDataBufferTest.java | 26 +- .../virtual/FloatVirtualDataBufferTest.java | 22 +- .../virtual/IntVirtualDataBufferTest.java | 22 +- .../virtual/LongVirtualDataBufferTest.java | 44 + .../virtual/ShortVirtualDataBufferTest.java | 18 +- .../util/ndarray}/BooleanNdArrayTestBase.java | 6 +- .../util/ndarray}/ByteNdArrayTestBase.java | 6 +- .../util/ndarray}/DoubleNdArrayTestBase.java | 6 +- .../util/ndarray}/FloatNdArrayTestBase.java | 6 +- .../util/ndarray}/IntNdArrayTestBase.java | 6 +- .../util/ndarray}/LongNdArrayTestBase.java | 2 +- .../util/ndarray}/NdArrayTestBase.java | 212 +-- .../tensorflow/util/ndarray}/ShapeTest.java | 2 +- .../util/ndarray}/ShortNdArrayTestBase.java | 6 +- .../impl/dense/BooleanDenseNdArrayTest.java | 14 +- .../impl/dense/ByteDenseNdArrayTest.java | 14 +- .../impl/dense/DoubleDenseNdArrayTest.java | 14 +- .../impl/dense/FloatDenseNdArrayTest.java | 14 +- .../impl/dense/IntDenseNdArrayTest.java | 14 +- .../impl/dense/LongDenseNdArrayTest.java | 14 +- .../impl/dense/ShortDenseNdArrayTest.java | 14 +- .../impl/dense/StringDenseNdArrayTest.java | 16 +- .../impl/sequence/ElementSequenceTest.java | 12 +- .../src/test/resources/COPYRIGHT.txt | 1 + .../src/test/resources/castle.jpg | Bin 0 -> 436164 bytes 340 files changed, 3560 insertions(+), 2774 deletions(-) create mode 100644 tensorflow-core/tensorflow-core-api/src/bazel/api_def/api_def_CollectiveGather.pbtxt create mode 100644 tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/KafkaDataset.java delete mode 100644 tensorflow-core/tensorflow-core-api/src/main/native/tensor_buffers_jni.cc delete mode 100644 tensorflow-core/tensorflow-core-api/src/main/native/tensor_buffers_jni.h create mode 100644 tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/types/TDoubleTest.java create mode 100644 tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/types/TFloatTest.java create mode 100644 tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/types/TInt64Test.java create mode 100644 tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/types/TUInt8Test.java rename tensorflow-utils/{nio-utils => }/README.md (61%) delete mode 100644 tensorflow-utils/nio-utils/pom.xml delete mode 100644 tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/raw/UnsafeMemoryHandle.java delete mode 100644 tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/virtual/LongVirtualDataBufferTest.java delete mode 100644 tensorflow-utils/nio-utils/src/test/resources/1500x916.jpg rename tensorflow-utils/{nio-utils/src/main/java/org/tensorflow/nio => src/main/java/org/tensorflow/util}/StaticApi.java (87%) rename tensorflow-utils/{nio-utils/src/main/java/org/tensorflow/nio => src/main/java/org/tensorflow/util}/buffer/BooleanDataBuffer.java (97%) rename tensorflow-utils/{nio-utils/src/main/java/org/tensorflow/nio => src/main/java/org/tensorflow/util}/buffer/ByteDataBuffer.java (97%) rename tensorflow-utils/{nio-utils/src/main/java/org/tensorflow/nio => src/main/java/org/tensorflow/util}/buffer/DataBuffer.java (98%) rename tensorflow-utils/{nio-utils/src/main/java/org/tensorflow/nio => src/main/java/org/tensorflow/util}/buffer/DataBuffers.java (81%) rename tensorflow-utils/{nio-utils/src/main/java/org/tensorflow/nio => src/main/java/org/tensorflow/util}/buffer/DoubleDataBuffer.java (97%) rename tensorflow-utils/{nio-utils/src/main/java/org/tensorflow/nio => src/main/java/org/tensorflow/util}/buffer/FloatDataBuffer.java (97%) rename tensorflow-utils/{nio-utils/src/main/java/org/tensorflow/nio => src/main/java/org/tensorflow/util}/buffer/IntDataBuffer.java (97%) rename tensorflow-utils/{nio-utils/src/main/java/org/tensorflow/nio => src/main/java/org/tensorflow/util}/buffer/LongDataBuffer.java (97%) rename tensorflow-utils/{nio-utils/src/main/java/org/tensorflow/nio => src/main/java/org/tensorflow/util}/buffer/ShortDataBuffer.java (97%) rename tensorflow-utils/{nio-utils/src/main/java/org/tensorflow/nio => src/main/java/org/tensorflow/util}/buffer/adapter/BooleanDataAdapter.java (90%) rename tensorflow-utils/{nio-utils/src/main/java/org/tensorflow/nio => src/main/java/org/tensorflow/util}/buffer/adapter/DataAdapter.java (89%) rename tensorflow-utils/{nio-utils/src/main/java/org/tensorflow/nio => src/main/java/org/tensorflow/util}/buffer/adapter/DoubleDataAdapter.java (90%) rename tensorflow-utils/{nio-utils/src/main/java/org/tensorflow/nio => src/main/java/org/tensorflow/util}/buffer/adapter/FloatDataAdapter.java (90%) rename tensorflow-utils/{nio-utils/src/main/java/org/tensorflow/nio => src/main/java/org/tensorflow/util}/buffer/adapter/IntDataAdapter.java (90%) rename tensorflow-utils/{nio-utils/src/main/java/org/tensorflow/nio => src/main/java/org/tensorflow/util}/buffer/adapter/LongDataAdapter.java (90%) rename tensorflow-utils/{nio-utils/src/main/java/org/tensorflow/nio => src/main/java/org/tensorflow/util}/buffer/adapter/ShortDataAdapter.java (90%) rename tensorflow-utils/{nio-utils/src/main/java/org/tensorflow/nio => src/main/java/org/tensorflow/util}/buffer/impl/AbstractDataBuffer.java (87%) rename tensorflow-utils/{nio-utils/src/main/java/org/tensorflow/nio => src/main/java/org/tensorflow/util}/buffer/impl/Validator.java (97%) rename tensorflow-utils/{nio-utils/src/main/java/org/tensorflow/nio => src/main/java/org/tensorflow/util}/buffer/impl/jdk/AbstractJdkDataBuffer.java (93%) rename tensorflow-utils/{nio-utils/src/main/java/org/tensorflow/nio => src/main/java/org/tensorflow/util}/buffer/impl/jdk/ByteJdkDataBuffer.java (94%) rename tensorflow-utils/{nio-utils/src/main/java/org/tensorflow/nio => src/main/java/org/tensorflow/util}/buffer/impl/jdk/DoubleJdkDataBuffer.java (94%) rename tensorflow-utils/{nio-utils/src/main/java/org/tensorflow/nio => src/main/java/org/tensorflow/util}/buffer/impl/jdk/FloatJdkDataBuffer.java (94%) rename tensorflow-utils/{nio-utils/src/main/java/org/tensorflow/nio => src/main/java/org/tensorflow/util}/buffer/impl/jdk/IntJdkDataBuffer.java (94%) rename tensorflow-utils/{nio-utils/src/main/java/org/tensorflow/nio => src/main/java/org/tensorflow/util}/buffer/impl/jdk/LongJdkDataBuffer.java (94%) rename tensorflow-utils/{nio-utils/src/main/java/org/tensorflow/nio => src/main/java/org/tensorflow/util}/buffer/impl/jdk/ShortJdkDataBuffer.java (94%) rename tensorflow-utils/{nio-utils/src/main/java/org/tensorflow/nio => src/main/java/org/tensorflow/util}/buffer/impl/misc/ArrayDataBuffer.java (91%) rename tensorflow-utils/{nio-utils/src/main/java/org/tensorflow/nio => src/main/java/org/tensorflow/util}/buffer/impl/misc/BitSetDataBuffer.java (89%) rename tensorflow-utils/{nio-utils/src/main/java/org/tensorflow/nio => src/main/java/org/tensorflow/util}/buffer/impl/misc/BooleanArrayDataBuffer.java (90%) rename tensorflow-utils/{nio-utils/src/main/java/org/tensorflow/nio => src/main/java/org/tensorflow/util}/buffer/impl/raw/AbstractRawDataBuffer.java (73%) rename tensorflow-utils/{nio-utils/src/main/java/org/tensorflow/nio => src/main/java/org/tensorflow/util}/buffer/impl/raw/BooleanRawDataBuffer.java (85%) rename tensorflow-utils/{nio-utils/src/main/java/org/tensorflow/nio => src/main/java/org/tensorflow/util}/buffer/impl/raw/ByteRawDataBuffer.java (85%) rename tensorflow-utils/{nio-utils/src/main/java/org/tensorflow/nio => src/main/java/org/tensorflow/util}/buffer/impl/raw/DoubleRawDataBuffer.java (85%) rename tensorflow-utils/{nio-utils/src/main/java/org/tensorflow/nio => src/main/java/org/tensorflow/util}/buffer/impl/raw/FloatRawDataBuffer.java (85%) rename tensorflow-utils/{nio-utils/src/main/java/org/tensorflow/nio => src/main/java/org/tensorflow/util}/buffer/impl/raw/IntRawDataBuffer.java (85%) rename tensorflow-utils/{nio-utils/src/main/java/org/tensorflow/nio => src/main/java/org/tensorflow/util}/buffer/impl/raw/LongRawDataBuffer.java (85%) rename tensorflow-utils/{nio-utils/src/main/java/org/tensorflow/nio => src/main/java/org/tensorflow/util}/buffer/impl/raw/ShortRawDataBuffer.java (85%) create mode 100644 tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/raw/UnsafeMemoryHandle.java create mode 100644 tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/raw/UnsafeReference.java rename tensorflow-utils/{nio-utils/src/main/java/org/tensorflow/nio => src/main/java/org/tensorflow/util}/buffer/impl/virtual/AbstractVirtualDataBuffer.java (75%) rename tensorflow-utils/{nio-utils/src/main/java/org/tensorflow/nio => src/main/java/org/tensorflow/util}/buffer/impl/virtual/BooleanVirtualDataBuffer.java (87%) rename tensorflow-utils/{nio-utils/src/main/java/org/tensorflow/nio => src/main/java/org/tensorflow/util}/buffer/impl/virtual/DoubleVirtualDataBuffer.java (87%) rename tensorflow-utils/{nio-utils/src/main/java/org/tensorflow/nio => src/main/java/org/tensorflow/util}/buffer/impl/virtual/FloatVirtualDataBuffer.java (87%) rename tensorflow-utils/{nio-utils/src/main/java/org/tensorflow/nio => src/main/java/org/tensorflow/util}/buffer/impl/virtual/IntVirtualDataBuffer.java (87%) rename tensorflow-utils/{nio-utils/src/main/java/org/tensorflow/nio => src/main/java/org/tensorflow/util}/buffer/impl/virtual/LongVirtualDataBuffer.java (87%) rename tensorflow-utils/{nio-utils/src/main/java/org/tensorflow/nio => src/main/java/org/tensorflow/util}/buffer/impl/virtual/ShortVirtualDataBuffer.java (87%) rename tensorflow-utils/{nio-utils/src/main/java/org/tensorflow/nio => src/main/java/org/tensorflow/util}/buffer/impl/virtual/VirtualDataBuffer.java (78%) rename tensorflow-utils/{nio-utils/src/main/java/org/tensorflow/nio/nd => src/main/java/org/tensorflow/util/ndarray}/BooleanNdArray.java (93%) rename tensorflow-utils/{nio-utils/src/main/java/org/tensorflow/nio/nd => src/main/java/org/tensorflow/util/ndarray}/ByteNdArray.java (93%) rename tensorflow-utils/{nio-utils/src/main/java/org/tensorflow/nio/nd => src/main/java/org/tensorflow/util/ndarray}/DoubleNdArray.java (93%) rename tensorflow-utils/{nio-utils/src/main/java/org/tensorflow/nio/nd => src/main/java/org/tensorflow/util/ndarray}/FloatNdArray.java (93%) rename tensorflow-utils/{nio-utils/src/main/java/org/tensorflow/nio/nd => src/main/java/org/tensorflow/util/ndarray}/IllegalRankException.java (95%) rename tensorflow-utils/{nio-utils/src/main/java/org/tensorflow/nio/nd => src/main/java/org/tensorflow/util/ndarray}/IntNdArray.java (93%) rename tensorflow-utils/{nio-utils/src/main/java/org/tensorflow/nio/nd => src/main/java/org/tensorflow/util/ndarray}/LongNdArray.java (93%) rename tensorflow-utils/{nio-utils/src/main/java/org/tensorflow/nio/nd => src/main/java/org/tensorflow/util/ndarray}/NdArray.java (96%) rename tensorflow-utils/{nio-utils/src/main/java/org/tensorflow/nio/nd => src/main/java/org/tensorflow/util/ndarray}/NdArraySequence.java (95%) rename tensorflow-utils/{nio-utils/src/main/java/org/tensorflow/nio/nd => src/main/java/org/tensorflow/util/ndarray}/NdArrays.java (86%) rename tensorflow-utils/{nio-utils/src/main/java/org/tensorflow/nio/nd => src/main/java/org/tensorflow/util/ndarray}/Shape.java (99%) rename tensorflow-utils/{nio-utils/src/main/java/org/tensorflow/nio/nd => src/main/java/org/tensorflow/util/ndarray}/ShortNdArray.java (93%) rename tensorflow-utils/{nio-utils/src/main/java/org/tensorflow/nio/nd => src/main/java/org/tensorflow/util/ndarray}/impl/AbstractNdArray.java (82%) rename tensorflow-utils/{nio-utils/src/main/java/org/tensorflow/nio/nd => src/main/java/org/tensorflow/util/ndarray}/impl/Validator.java (94%) rename tensorflow-utils/{nio-utils/src/main/java/org/tensorflow/nio/nd => src/main/java/org/tensorflow/util/ndarray}/impl/dense/AbstractDenseNdArray.java (80%) rename tensorflow-utils/{nio-utils/src/main/java/org/tensorflow/nio/nd => src/main/java/org/tensorflow/util/ndarray}/impl/dense/BooleanDenseNdArray.java (88%) rename tensorflow-utils/{nio-utils/src/main/java/org/tensorflow/nio/nd => src/main/java/org/tensorflow/util/ndarray}/impl/dense/ByteDenseNdArray.java (88%) rename tensorflow-utils/{nio-utils/src/main/java/org/tensorflow/nio/nd => src/main/java/org/tensorflow/util/ndarray}/impl/dense/DataTransfer.java (86%) rename tensorflow-utils/{nio-utils/src/main/java/org/tensorflow/nio/nd => src/main/java/org/tensorflow/util/ndarray}/impl/dense/DenseNdArray.java (87%) rename tensorflow-utils/{nio-utils/src/main/java/org/tensorflow/nio/nd => src/main/java/org/tensorflow/util/ndarray}/impl/dense/DoubleDenseNdArray.java (88%) rename tensorflow-utils/{nio-utils/src/main/java/org/tensorflow/nio/nd => src/main/java/org/tensorflow/util/ndarray}/impl/dense/FloatDenseNdArray.java (88%) rename tensorflow-utils/{nio-utils/src/main/java/org/tensorflow/nio/nd => src/main/java/org/tensorflow/util/ndarray}/impl/dense/IntDenseNdArray.java (88%) rename tensorflow-utils/{nio-utils/src/main/java/org/tensorflow/nio/nd => src/main/java/org/tensorflow/util/ndarray}/impl/dense/LongDenseNdArray.java (88%) rename tensorflow-utils/{nio-utils/src/main/java/org/tensorflow/nio/nd => src/main/java/org/tensorflow/util/ndarray}/impl/dense/ShortDenseNdArray.java (88%) rename tensorflow-utils/{nio-utils/src/main/java/org/tensorflow/nio/nd => src/main/java/org/tensorflow/util/ndarray}/impl/dense/Validator.java (84%) rename tensorflow-utils/{nio-utils/src/main/java/org/tensorflow/nio/nd => src/main/java/org/tensorflow/util/ndarray}/impl/dimension/AbstractDimension.java (96%) rename tensorflow-utils/{nio-utils/src/main/java/org/tensorflow/nio/nd => src/main/java/org/tensorflow/util/ndarray}/impl/dimension/Axis.java (96%) rename tensorflow-utils/{nio-utils/src/main/java/org/tensorflow/nio/nd => src/main/java/org/tensorflow/util/ndarray}/impl/dimension/Dimension.java (90%) rename tensorflow-utils/{nio-utils/src/main/java/org/tensorflow/nio/nd => src/main/java/org/tensorflow/util/ndarray}/impl/dimension/DimensionalSpace.java (97%) rename tensorflow-utils/{nio-utils/src/main/java/org/tensorflow/nio/nd => src/main/java/org/tensorflow/util/ndarray}/impl/dimension/IndexedDimension.java (94%) rename tensorflow-utils/{nio-utils/src/main/java/org/tensorflow/nio/nd => src/main/java/org/tensorflow/util/ndarray}/impl/dimension/ReducedDimension.java (96%) rename tensorflow-utils/{nio-utils/src/main/java/org/tensorflow/nio/nd => src/main/java/org/tensorflow/util/ndarray}/impl/dimension/RelativeDimensionalSpace.java (94%) rename tensorflow-utils/{nio-utils/src/main/java/org/tensorflow/nio/nd => src/main/java/org/tensorflow/util/ndarray}/impl/dimension/UnknownDimension.java (93%) rename tensorflow-utils/{nio-utils/src/main/java/org/tensorflow/nio/nd => src/main/java/org/tensorflow/util/ndarray}/impl/sequence/ElementSequence.java (83%) rename tensorflow-utils/{nio-utils/src/main/java/org/tensorflow/nio/nd => src/main/java/org/tensorflow/util/ndarray}/impl/sequence/IndexedPositionIterator.java (82%) rename tensorflow-utils/{nio-utils/src/main/java/org/tensorflow/nio/nd => src/main/java/org/tensorflow/util/ndarray}/impl/sequence/IndexedSequentialPositionIterator.java (83%) rename tensorflow-utils/{nio-utils/src/main/java/org/tensorflow/nio/nd => src/main/java/org/tensorflow/util/ndarray}/impl/sequence/NdPositionIterator.java (89%) rename tensorflow-utils/{nio-utils/src/main/java/org/tensorflow/nio/nd => src/main/java/org/tensorflow/util/ndarray}/impl/sequence/PositionIterator.java (86%) rename tensorflow-utils/{nio-utils/src/main/java/org/tensorflow/nio/nd => src/main/java/org/tensorflow/util/ndarray}/impl/sequence/SequentialPositionIterator.java (85%) rename tensorflow-utils/{nio-utils/src/main/java/org/tensorflow/nio/nd => src/main/java/org/tensorflow/util/ndarray}/impl/sequence/SingleElementSequence.java (70%) rename tensorflow-utils/{nio-utils/src/main/java/org/tensorflow/nio/nd => src/main/java/org/tensorflow/util/ndarray}/index/All.java (90%) rename tensorflow-utils/{nio-utils/src/main/java/org/tensorflow/nio/nd => src/main/java/org/tensorflow/util/ndarray}/index/At.java (91%) rename tensorflow-utils/{nio-utils/src/main/java/org/tensorflow/nio/nd => src/main/java/org/tensorflow/util/ndarray}/index/Even.java (90%) rename tensorflow-utils/{nio-utils/src/main/java/org/tensorflow/nio/nd => src/main/java/org/tensorflow/util/ndarray}/index/Flip.java (90%) rename tensorflow-utils/{nio-utils/src/main/java/org/tensorflow/nio/nd => src/main/java/org/tensorflow/util/ndarray}/index/From.java (90%) rename tensorflow-utils/{nio-utils/src/main/java/org/tensorflow/nio/nd => src/main/java/org/tensorflow/util/ndarray}/index/Index.java (92%) rename tensorflow-utils/{nio-utils/src/main/java/org/tensorflow/nio/nd => src/main/java/org/tensorflow/util/ndarray}/index/Indices.java (95%) rename tensorflow-utils/{nio-utils/src/main/java/org/tensorflow/nio/nd => src/main/java/org/tensorflow/util/ndarray}/index/Odd.java (90%) rename tensorflow-utils/{nio-utils/src/main/java/org/tensorflow/nio/nd => src/main/java/org/tensorflow/util/ndarray}/index/Range.java (90%) rename tensorflow-utils/{nio-utils/src/main/java/org/tensorflow/nio/nd => src/main/java/org/tensorflow/util/ndarray}/index/Sequence.java (83%) rename tensorflow-utils/{nio-utils/src/main/java/org/tensorflow/nio/nd => src/main/java/org/tensorflow/util/ndarray}/index/Step.java (91%) rename tensorflow-utils/{nio-utils/src/main/java/org/tensorflow/nio/nd => src/main/java/org/tensorflow/util/ndarray}/index/To.java (90%) rename tensorflow-utils/{nio-utils/src/test/java/org/tensorflow/nio => src/test/java/org/tensorflow/util}/benchmark/NdArrayBenchmark.java (87%) rename tensorflow-utils/{nio-utils/src/test/java/org/tensorflow/nio => src/test/java/org/tensorflow/util}/buffer/BooleanDataBufferTestBase.java (86%) rename tensorflow-utils/{nio-utils/src/test/java/org/tensorflow/nio => src/test/java/org/tensorflow/util}/buffer/ByteDataBufferTestBase.java (98%) rename tensorflow-utils/{nio-utils/src/test/java/org/tensorflow/nio => src/test/java/org/tensorflow/util}/buffer/DataBufferTestBase.java (84%) rename tensorflow-utils/{nio-utils/src/test/java/org/tensorflow/nio => src/test/java/org/tensorflow/util}/buffer/DoubleDataBufferTestBase.java (98%) rename tensorflow-utils/{nio-utils/src/test/java/org/tensorflow/nio => src/test/java/org/tensorflow/util}/buffer/FloatDataBufferTestBase.java (98%) rename tensorflow-utils/{nio-utils/src/test/java/org/tensorflow/nio => src/test/java/org/tensorflow/util}/buffer/IntDataBufferTestBase.java (98%) rename tensorflow-utils/{nio-utils/src/test/java/org/tensorflow/nio => src/test/java/org/tensorflow/util}/buffer/LongDataBufferTestBase.java (98%) rename tensorflow-utils/{nio-utils/src/test/java/org/tensorflow/nio => src/test/java/org/tensorflow/util}/buffer/ShortDataBufferTestBase.java (98%) rename tensorflow-utils/{nio-utils/src/test/java/org/tensorflow/nio => src/test/java/org/tensorflow/util}/buffer/impl/jdk/ByteJdkDataBufferTest.java (86%) rename tensorflow-utils/{nio-utils/src/test/java/org/tensorflow/nio => src/test/java/org/tensorflow/util}/buffer/impl/jdk/DoubleJdkDataBufferTest.java (85%) rename tensorflow-utils/{nio-utils/src/test/java/org/tensorflow/nio => src/test/java/org/tensorflow/util}/buffer/impl/jdk/FloatJdkDataBufferTest.java (85%) rename tensorflow-utils/{nio-utils/src/test/java/org/tensorflow/nio => src/test/java/org/tensorflow/util}/buffer/impl/jdk/IntJdkDataBufferTest.java (86%) rename tensorflow-utils/{nio-utils/src/test/java/org/tensorflow/nio => src/test/java/org/tensorflow/util}/buffer/impl/jdk/LongJdkDataBufferTest.java (86%) rename tensorflow-utils/{nio-utils/src/test/java/org/tensorflow/nio => src/test/java/org/tensorflow/util}/buffer/impl/jdk/ShortJdkDataBufferTest.java (85%) rename tensorflow-utils/{nio-utils/src/test/java/org/tensorflow/nio => src/test/java/org/tensorflow/util}/buffer/impl/misc/ArrayDataBufferTest.java (88%) rename tensorflow-utils/{nio-utils/src/test/java/org/tensorflow/nio => src/test/java/org/tensorflow/util}/buffer/impl/misc/BitSetDataBufferTest.java (86%) rename tensorflow-utils/{nio-utils/src/test/java/org/tensorflow/nio => src/test/java/org/tensorflow/util}/buffer/impl/misc/StringArrayDataBufferTest.java (87%) rename tensorflow-utils/{nio-utils/src/test/java/org/tensorflow/nio => src/test/java/org/tensorflow/util}/buffer/impl/raw/BooleanRawDataBufferTest.java (85%) rename tensorflow-utils/{nio-utils/src/test/java/org/tensorflow/nio => src/test/java/org/tensorflow/util}/buffer/impl/raw/ByteRawDataBufferTest.java (86%) rename tensorflow-utils/{nio-utils/src/test/java/org/tensorflow/nio => src/test/java/org/tensorflow/util}/buffer/impl/raw/DoubleRawDataBufferTest.java (85%) rename tensorflow-utils/{nio-utils/src/test/java/org/tensorflow/nio => src/test/java/org/tensorflow/util}/buffer/impl/raw/FloatRawDataBufferTest.java (85%) rename tensorflow-utils/{nio-utils/src/test/java/org/tensorflow/nio => src/test/java/org/tensorflow/util}/buffer/impl/raw/IntRawDataBufferTest.java (86%) rename tensorflow-utils/{nio-utils/src/test/java/org/tensorflow/nio => src/test/java/org/tensorflow/util}/buffer/impl/raw/LongRawDataBufferTest.java (86%) rename tensorflow-utils/{nio-utils/src/test/java/org/tensorflow/nio => src/test/java/org/tensorflow/util}/buffer/impl/raw/ShortRawDataBufferTest.java (85%) rename tensorflow-utils/{nio-utils/src/test/java/org/tensorflow/nio => src/test/java/org/tensorflow/util}/buffer/impl/virtual/BigIntegerVirtualDataBufferTest.java (56%) rename tensorflow-utils/{nio-utils/src/test/java/org/tensorflow/nio => src/test/java/org/tensorflow/util}/buffer/impl/virtual/BooleanVirtualDataBufferTest.java (57%) rename tensorflow-utils/{nio-utils/src/test/java/org/tensorflow/nio => src/test/java/org/tensorflow/util}/buffer/impl/virtual/DoubleVirtualDataBufferTest.java (52%) rename tensorflow-utils/{nio-utils/src/test/java/org/tensorflow/nio => src/test/java/org/tensorflow/util}/buffer/impl/virtual/FloatVirtualDataBufferTest.java (55%) rename tensorflow-utils/{nio-utils/src/test/java/org/tensorflow/nio => src/test/java/org/tensorflow/util}/buffer/impl/virtual/IntVirtualDataBufferTest.java (52%) create mode 100644 tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/virtual/LongVirtualDataBufferTest.java rename tensorflow-utils/{nio-utils/src/test/java/org/tensorflow/nio => src/test/java/org/tensorflow/util}/buffer/impl/virtual/ShortVirtualDataBufferTest.java (56%) rename tensorflow-utils/{nio-utils/src/test/java/org/tensorflow/nio/nd => src/test/java/org/tensorflow/util/ndarray}/BooleanNdArrayTestBase.java (96%) rename tensorflow-utils/{nio-utils/src/test/java/org/tensorflow/nio/nd => src/test/java/org/tensorflow/util/ndarray}/ByteNdArrayTestBase.java (95%) rename tensorflow-utils/{nio-utils/src/test/java/org/tensorflow/nio/nd => src/test/java/org/tensorflow/util/ndarray}/DoubleNdArrayTestBase.java (96%) rename tensorflow-utils/{nio-utils/src/test/java/org/tensorflow/nio/nd => src/test/java/org/tensorflow/util/ndarray}/FloatNdArrayTestBase.java (96%) rename tensorflow-utils/{nio-utils/src/test/java/org/tensorflow/nio/nd => src/test/java/org/tensorflow/util/ndarray}/IntNdArrayTestBase.java (96%) rename tensorflow-utils/{nio-utils/src/test/java/org/tensorflow/nio/nd => src/test/java/org/tensorflow/util/ndarray}/LongNdArrayTestBase.java (98%) rename tensorflow-utils/{nio-utils/src/test/java/org/tensorflow/nio/nd => src/test/java/org/tensorflow/util/ndarray}/NdArrayTestBase.java (57%) rename tensorflow-utils/{nio-utils/src/test/java/org/tensorflow/nio/nd => src/test/java/org/tensorflow/util/ndarray}/ShapeTest.java (98%) rename tensorflow-utils/{nio-utils/src/test/java/org/tensorflow/nio/nd => src/test/java/org/tensorflow/util/ndarray}/ShortNdArrayTestBase.java (95%) rename tensorflow-utils/{nio-utils/src/test/java/org/tensorflow/nio/nd => src/test/java/org/tensorflow/util/ndarray}/impl/dense/BooleanDenseNdArrayTest.java (74%) rename tensorflow-utils/{nio-utils/src/test/java/org/tensorflow/nio/nd => src/test/java/org/tensorflow/util/ndarray}/impl/dense/ByteDenseNdArrayTest.java (74%) rename tensorflow-utils/{nio-utils/src/test/java/org/tensorflow/nio/nd => src/test/java/org/tensorflow/util/ndarray}/impl/dense/DoubleDenseNdArrayTest.java (74%) rename tensorflow-utils/{nio-utils/src/test/java/org/tensorflow/nio/nd => src/test/java/org/tensorflow/util/ndarray}/impl/dense/FloatDenseNdArrayTest.java (74%) rename tensorflow-utils/{nio-utils/src/test/java/org/tensorflow/nio/nd => src/test/java/org/tensorflow/util/ndarray}/impl/dense/IntDenseNdArrayTest.java (74%) rename tensorflow-utils/{nio-utils/src/test/java/org/tensorflow/nio/nd => src/test/java/org/tensorflow/util/ndarray}/impl/dense/LongDenseNdArrayTest.java (74%) rename tensorflow-utils/{nio-utils/src/test/java/org/tensorflow/nio/nd => src/test/java/org/tensorflow/util/ndarray}/impl/dense/ShortDenseNdArrayTest.java (74%) rename tensorflow-utils/{nio-utils/src/test/java/org/tensorflow/nio/nd => src/test/java/org/tensorflow/util/ndarray}/impl/dense/StringDenseNdArrayTest.java (77%) rename tensorflow-utils/{nio-utils/src/test/java/org/tensorflow/nio/nd => src/test/java/org/tensorflow/util/ndarray}/impl/sequence/ElementSequenceTest.java (88%) create mode 100644 tensorflow-utils/src/test/resources/COPYRIGHT.txt create mode 100644 tensorflow-utils/src/test/resources/castle.jpg diff --git a/pom.xml b/pom.xml index d676860cd23..5f17425a3c0 100644 --- a/pom.xml +++ b/pom.xml @@ -29,8 +29,8 @@ - tensorflow-core tensorflow-utils + tensorflow-core diff --git a/tensorflow-core/tensorflow-core-api/pom.xml b/tensorflow-core/tensorflow-core-api/pom.xml index 055c2b9ae5d..2ec4f163427 100644 --- a/tensorflow-core/tensorflow-core-api/pom.xml +++ b/tensorflow-core/tensorflow-core-api/pom.xml @@ -28,7 +28,7 @@ org.tensorflow - nio-utils + tensorflow-utils ${project.version} @@ -146,7 +146,6 @@ ${project.basedir}/src/main/native/server_jni.cc ${project.basedir}/src/main/native/session_jni.cc ${project.basedir}/src/main/native/tensorflow_jni.cc - ${project.basedir}/src/main/native/tensor_buffers_jni.cc ${project.basedir}/src/main/native/tensor_jni.cc ${project.basedir}/src/main/native/utils_jni.cc diff --git a/tensorflow-core/tensorflow-core-api/src/bazel/api_def/api_def_CollectiveBcastRecv.pbtxt b/tensorflow-core/tensorflow-core-api/src/bazel/api_def/api_def_CollectiveBcastRecv.pbtxt index 8ada333e446..a5c7a7ffaba 100644 --- a/tensorflow-core/tensorflow-core-api/src/bazel/api_def/api_def_CollectiveBcastRecv.pbtxt +++ b/tensorflow-core/tensorflow-core-api/src/bazel/api_def/api_def_CollectiveBcastRecv.pbtxt @@ -3,4 +3,8 @@ op { endpoint { name: "collective.BroadcastRecv" } + out_arg: { + name: "data" + rename_to: "output" + } } diff --git a/tensorflow-core/tensorflow-core-api/src/bazel/api_def/api_def_CollectiveBcastSend.pbtxt b/tensorflow-core/tensorflow-core-api/src/bazel/api_def/api_def_CollectiveBcastSend.pbtxt index 18b4bef345e..628ad951a5b 100644 --- a/tensorflow-core/tensorflow-core-api/src/bazel/api_def/api_def_CollectiveBcastSend.pbtxt +++ b/tensorflow-core/tensorflow-core-api/src/bazel/api_def/api_def_CollectiveBcastSend.pbtxt @@ -3,4 +3,8 @@ op { endpoint { name: "collective.BroadcastSend" } + out_arg: { + name: "data" + rename_to: "output" + } } diff --git a/tensorflow-core/tensorflow-core-api/src/bazel/api_def/api_def_CollectiveGather.pbtxt b/tensorflow-core/tensorflow-core-api/src/bazel/api_def/api_def_CollectiveGather.pbtxt new file mode 100644 index 00000000000..5be0737f80a --- /dev/null +++ b/tensorflow-core/tensorflow-core-api/src/bazel/api_def/api_def_CollectiveGather.pbtxt @@ -0,0 +1,7 @@ +op { + graph_op_name: "CollectiveGather" + out_arg: { + name: "data" + rename_to: "output" + } +} \ No newline at end of file diff --git a/tensorflow-core/tensorflow-core-api/src/bazel/api_def/api_def_CollectiveReduce.pbtxt b/tensorflow-core/tensorflow-core-api/src/bazel/api_def/api_def_CollectiveReduce.pbtxt index 6226cc05ec3..84251a19aa5 100644 --- a/tensorflow-core/tensorflow-core-api/src/bazel/api_def/api_def_CollectiveReduce.pbtxt +++ b/tensorflow-core/tensorflow-core-api/src/bazel/api_def/api_def_CollectiveReduce.pbtxt @@ -3,4 +3,8 @@ op { endpoint { name: "collective.AllReduce" } + out_arg: { + name: "data" + rename_to: "output" + } } diff --git a/tensorflow-core/tensorflow-core-api/src/bazel/api_def/api_def_NcclAllReduce.pbtxt b/tensorflow-core/tensorflow-core-api/src/bazel/api_def/api_def_NcclAllReduce.pbtxt index c7133d4a4a8..26ee24f6cde 100644 --- a/tensorflow-core/tensorflow-core-api/src/bazel/api_def/api_def_NcclAllReduce.pbtxt +++ b/tensorflow-core/tensorflow-core-api/src/bazel/api_def/api_def_NcclAllReduce.pbtxt @@ -1,3 +1,7 @@ op { graph_op_name: "NcclAllReduce" + out_arg: { + name: "data" + rename_to: "output" + } } diff --git a/tensorflow-core/tensorflow-core-api/src/bazel/api_def/api_def_NcclReduce.pbtxt b/tensorflow-core/tensorflow-core-api/src/bazel/api_def/api_def_NcclReduce.pbtxt index 18dc8901778..42c6e131c14 100644 --- a/tensorflow-core/tensorflow-core-api/src/bazel/api_def/api_def_NcclReduce.pbtxt +++ b/tensorflow-core/tensorflow-core-api/src/bazel/api_def/api_def_NcclReduce.pbtxt @@ -1,3 +1,7 @@ op { graph_op_name: "NcclReduce" + out_arg: { + name: "data" + rename_to: "output" + } } diff --git a/tensorflow-core/tensorflow-core-api/src/bazel/op_generator/op_specs.cc b/tensorflow-core/tensorflow-core-api/src/bazel/op_generator/op_specs.cc index 1de4742db18..2a2d5e84c82 100644 --- a/tensorflow-core/tensorflow-core-api/src/bazel/op_generator/op_specs.cc +++ b/tensorflow-core/tensorflow-core-api/src/bazel/op_generator/op_specs.cc @@ -148,7 +148,7 @@ std::pair TypeResolver::TypesOf(const OpDef_AttrDef& attr_def, types = MakeTypePair(Type::Class("Boolean"), Type::Boolean()); } else if (attr_type == "shape") { - types = MakeTypePair(Type::Class("Shape", "org.tensorflow.nio.nd")); + types = MakeTypePair(Type::Class("Shape", "org.tensorflow.util.ndarray")); } else if (attr_type == "tensor") { types = MakeTypePair(Type::Class("Tensor", "org.tensorflow") diff --git a/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/DataOps.java b/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/DataOps.java index c9a4fbff122..b1b7dc1eb5a 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/DataOps.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/DataOps.java @@ -3,7 +3,6 @@ import java.util.List; import org.tensorflow.DataType; import org.tensorflow.Operand; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.data.AnonymousIterator; import org.tensorflow.op.data.DeserializeIterator; import org.tensorflow.op.data.IteratorGetNext; @@ -20,6 +19,7 @@ import org.tensorflow.types.TBool; import org.tensorflow.types.TInt64; import org.tensorflow.types.TString; +import org.tensorflow.util.ndarray.Shape; /** * An API for building {@code data} operations as {@link Op Op}s @@ -34,17 +34,17 @@ public final class DataOps { } /** - * Builds an {@link IteratorGetNextAsOptional} operation + * Builds an {@link OptionalGetValue} operation * - * @param iterator + * @param optional * @param outputTypes * @param outputShapes - * @return a new instance of IteratorGetNextAsOptional - * @see org.tensorflow.op.data.IteratorGetNextAsOptional + * @return a new instance of OptionalGetValue + * @see org.tensorflow.op.data.OptionalGetValue */ - public IteratorGetNextAsOptional iteratorGetNextAsOptional(Operand iterator, - List> outputTypes, List outputShapes) { - return IteratorGetNextAsOptional.create(scope, iterator, outputTypes, outputShapes); + public OptionalGetValue optionalGetValue(Operand optional, List> outputTypes, + List outputShapes) { + return OptionalGetValue.create(scope, optional, outputTypes, outputShapes); } /** @@ -79,16 +79,17 @@ public DeserializeIterator deserializeIterator(Operand resourceHandle, Operan } /** - * Builds an {@link AnonymousIterator} operation + * Builds an {@link IteratorGetNextAsOptional} operation * + * @param iterator * @param outputTypes * @param outputShapes - * @return a new instance of AnonymousIterator - * @see org.tensorflow.op.data.AnonymousIterator + * @return a new instance of IteratorGetNextAsOptional + * @see org.tensorflow.op.data.IteratorGetNextAsOptional */ - public AnonymousIterator anonymousIterator(List> outputTypes, - List outputShapes) { - return AnonymousIterator.create(scope, outputTypes, outputShapes); + public IteratorGetNextAsOptional iteratorGetNextAsOptional(Operand iterator, + List> outputTypes, List outputShapes) { + return IteratorGetNextAsOptional.create(scope, iterator, outputTypes, outputShapes); } /** @@ -101,34 +102,6 @@ public OptionalNone optionalNone() { return OptionalNone.create(scope); } - /** - * Builds an {@link IteratorGetNext} operation - * - * @param iterator - * @param outputTypes - * @param outputShapes - * @return a new instance of IteratorGetNext - * @see org.tensorflow.op.data.IteratorGetNext - */ - public IteratorGetNext iteratorGetNext(Operand iterator, List> outputTypes, - List outputShapes) { - return IteratorGetNext.create(scope, iterator, outputTypes, outputShapes); - } - - /** - * Builds an {@link IteratorGetNextSync} operation - * - * @param iterator - * @param outputTypes - * @param outputShapes - * @return a new instance of IteratorGetNextSync - * @see org.tensorflow.op.data.IteratorGetNextSync - */ - public IteratorGetNextSync iteratorGetNextSync(Operand iterator, List> outputTypes, - List outputShapes) { - return IteratorGetNextSync.create(scope, iterator, outputTypes, outputShapes); - } - /** * Builds an {@link OptionalFromValue} operation * @@ -140,20 +113,6 @@ public OptionalFromValue optionalFromValue(Iterable> components) { return OptionalFromValue.create(scope, components); } - /** - * Builds an {@link OptionalGetValue} operation - * - * @param optional - * @param outputTypes - * @param outputShapes - * @return a new instance of OptionalGetValue - * @see org.tensorflow.op.data.OptionalGetValue - */ - public OptionalGetValue optionalGetValue(Operand optional, List> outputTypes, - List outputShapes) { - return OptionalGetValue.create(scope, optional, outputTypes, outputShapes); - } - /** * Builds an {@link IteratorToStringHandle} operation * @@ -165,6 +124,19 @@ public IteratorToStringHandle iteratorToStringHandle(Operand resourceHandle) return IteratorToStringHandle.create(scope, resourceHandle); } + /** + * Builds an {@link AnonymousIterator} operation + * + * @param outputTypes + * @param outputShapes + * @return a new instance of AnonymousIterator + * @see org.tensorflow.op.data.AnonymousIterator + */ + public AnonymousIterator anonymousIterator(List> outputTypes, + List outputShapes) { + return AnonymousIterator.create(scope, outputTypes, outputShapes); + } + /** * Builds an {@link OptionalHasValue} operation * @@ -177,15 +149,17 @@ public OptionalHasValue optionalHasValue(Operand optional) { } /** - * Builds an {@link MakeIterator} operation + * Builds an {@link IteratorGetNextSync} operation * - * @param dataset * @param iterator - * @return a new instance of MakeIterator - * @see org.tensorflow.op.data.MakeIterator + * @param outputTypes + * @param outputShapes + * @return a new instance of IteratorGetNextSync + * @see org.tensorflow.op.data.IteratorGetNextSync */ - public MakeIterator makeIterator(Operand dataset, Operand iterator) { - return MakeIterator.create(scope, dataset, iterator); + public IteratorGetNextSync iteratorGetNextSync(Operand iterator, List> outputTypes, + List outputShapes) { + return IteratorGetNextSync.create(scope, iterator, outputTypes, outputShapes); } /** @@ -198,4 +172,30 @@ public MakeIterator makeIterator(Operand dataset, Operand iterator) { public SerializeIterator serializeIterator(Operand resourceHandle) { return SerializeIterator.create(scope, resourceHandle); } + + /** + * Builds an {@link MakeIterator} operation + * + * @param dataset + * @param iterator + * @return a new instance of MakeIterator + * @see org.tensorflow.op.data.MakeIterator + */ + public MakeIterator makeIterator(Operand dataset, Operand iterator) { + return MakeIterator.create(scope, dataset, iterator); + } + + /** + * Builds an {@link IteratorGetNext} operation + * + * @param iterator + * @param outputTypes + * @param outputShapes + * @return a new instance of IteratorGetNext + * @see org.tensorflow.op.data.IteratorGetNext + */ + public IteratorGetNext iteratorGetNext(Operand iterator, List> outputTypes, + List outputShapes) { + return IteratorGetNext.create(scope, iterator, outputTypes, outputShapes); + } } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/DtypesOps.java b/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/DtypesOps.java index e01b8aa48cc..66af36b6580 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/DtypesOps.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/DtypesOps.java @@ -19,6 +19,19 @@ public final class DtypesOps { this.scope = scope; } + /** + * Builds an {@link Cast} operation + * + * @param x + * @param DstT + * @param options carries optional attributes values + * @return a new instance of Cast + * @see org.tensorflow.op.dtypes.Cast + */ + public Cast cast(Operand x, DataType DstT, Cast.Options... options) { + return Cast.create(scope, x, DstT, options); + } + /** * Builds an {@link AsString} operation * @@ -44,17 +57,4 @@ public Complex complex(Operand real, Operand ima DataType Tout) { return Complex.create(scope, real, imag, Tout); } - - /** - * Builds an {@link Cast} operation - * - * @param x - * @param DstT - * @param options carries optional attributes values - * @return a new instance of Cast - * @see org.tensorflow.op.dtypes.Cast - */ - public Cast cast(Operand x, DataType DstT, Cast.Options... options) { - return Cast.create(scope, x, DstT, options); - } } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/ImageOps.java b/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/ImageOps.java index f1dd22c8579..3f5c149cf9f 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/ImageOps.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/ImageOps.java @@ -64,17 +64,6 @@ public DrawBoundingBoxes drawBoundingBoxes(Operand ima return DrawBoundingBoxes.create(scope, images, boxes); } - /** - * Builds an {@link DecodeGif} operation - * - * @param contents 0-D. The GIF-encoded image. - * @return a new instance of DecodeGif - * @see org.tensorflow.op.image.DecodeGif - */ - public DecodeGif decodeGif(Operand contents) { - return DecodeGif.create(scope, contents); - } - /** * Builds an {@link ResizeBilinear} operation * @@ -89,6 +78,17 @@ public ResizeBilinear resizeBilinear(Operand images, Oper return ResizeBilinear.create(scope, images, size, options); } + /** + * Builds an {@link DecodeGif} operation + * + * @param contents 0-D. The GIF-encoded image. + * @return a new instance of DecodeGif + * @see org.tensorflow.op.image.DecodeGif + */ + public DecodeGif decodeGif(Operand contents) { + return DecodeGif.create(scope, contents); + } + /** * Builds an {@link RgbToHsv} operation * @@ -111,18 +111,6 @@ public HsvToRgb hsvToRgb(Operand images) { return HsvToRgb.create(scope, images); } - /** - * Builds an {@link DecodeBmp} operation - * - * @param contents 0-D. The BMP-encoded image. - * @param options carries optional attributes values - * @return a new instance of DecodeBmp - * @see org.tensorflow.op.image.DecodeBmp - */ - public DecodeBmp decodeBmp(Operand contents, DecodeBmp.Options... options) { - return DecodeBmp.create(scope, contents, options); - } - /** * Builds an {@link CropAndResizeGradBoxes} operation * @@ -140,6 +128,18 @@ public CropAndResizeGradBoxes cropAndResizeGradBoxes(Operand return CropAndResizeGradBoxes.create(scope, grads, image, boxes, boxInd, options); } + /** + * Builds an {@link DecodeBmp} operation + * + * @param contents 0-D. The BMP-encoded image. + * @param options carries optional attributes values + * @return a new instance of DecodeBmp + * @see org.tensorflow.op.image.DecodeBmp + */ + public DecodeBmp decodeBmp(Operand contents, DecodeBmp.Options... options) { + return DecodeBmp.create(scope, contents, options); + } + /** * Builds an {@link ExtractGlimpse} operation * @@ -169,20 +169,6 @@ public ResizeBicubic resizeBicubic(Operand images, Operan return ResizeBicubic.create(scope, images, size, options); } - /** - * Builds an {@link RandomCrop} operation - * - * @param image 3-D of shape `[height, width, channels]`. - * @param size 1-D of length 2 containing: `crop_height`, `crop_width`.. - * @param options carries optional attributes values - * @return a new instance of RandomCrop - * @see org.tensorflow.op.image.RandomCrop - */ - public RandomCrop randomCrop(Operand image, Operand size, - RandomCrop.Options... options) { - return RandomCrop.create(scope, image, size, options); - } - /** * Builds an {@link DecodePng} operation * @@ -197,6 +183,20 @@ public DecodePng decodePng(Operand contents, Dat return DecodePng.create(scope, contents, dtype, options); } + /** + * Builds an {@link RandomCrop} operation + * + * @param image 3-D of shape `[height, width, channels]`. + * @param size 1-D of length 2 containing: `crop_height`, `crop_width`.. + * @param options carries optional attributes values + * @return a new instance of RandomCrop + * @see org.tensorflow.op.image.RandomCrop + */ + public RandomCrop randomCrop(Operand image, Operand size, + RandomCrop.Options... options) { + return RandomCrop.create(scope, image, size, options); + } + /** * Builds an {@link DecodeAndCropJpeg} operation * @@ -264,6 +264,18 @@ public ResizeArea resizeArea(Operand images, Operand EncodePng encodePng(Operand image, EncodePng.Options... options) { + return EncodePng.create(scope, image, options); + } + /** * Builds an {@link NonMaxSuppression} operation * @@ -282,18 +294,6 @@ public NonMaxSuppression nonMaxSuppressio return NonMaxSuppression.create(scope, boxes, scores, maxOutputSize, iouThreshold, scoreThreshold, options); } - /** - * Builds an {@link EncodePng} operation - * - * @param image 3-D with shape `[height, width, channels]`. - * @param options carries optional attributes values - * @return a new instance of EncodePng - * @see org.tensorflow.op.image.EncodePng - */ - public EncodePng encodePng(Operand image, EncodePng.Options... options) { - return EncodePng.create(scope, image, options); - } - /** * Builds an {@link CropAndResize} operation * @@ -423,6 +423,18 @@ public ExtractJpegShape extractJpegShape(Operand contents) { return ExtractJpegShape.create(scope, contents); } + /** + * Builds an {@link EncodeJpeg} operation + * + * @param image 3-D with shape `[height, width, channels]`. + * @param options carries optional attributes values + * @return a new instance of EncodeJpeg + * @see org.tensorflow.op.image.EncodeJpeg + */ + public EncodeJpeg encodeJpeg(Operand image, EncodeJpeg.Options... options) { + return EncodeJpeg.create(scope, image, options); + } + /** * Builds an {@link NonMaxSuppressionWithOverlaps} operation * @@ -440,18 +452,6 @@ public NonMaxSuppressionWithOverlaps nonMaxSuppressionWithOverlaps(Operand image, EncodeJpeg.Options... options) { - return EncodeJpeg.create(scope, image, options); - } - /** * Builds an {@link DecodeJpeg} operation * diff --git a/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/IoOps.java b/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/IoOps.java index 1bd9a9ffe7f..645f739131b 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/IoOps.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/IoOps.java @@ -3,7 +3,6 @@ import java.util.List; import org.tensorflow.DataType; import org.tensorflow.Operand; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.io.DecodeBase64; import org.tensorflow.op.io.DecodeCompressed; import org.tensorflow.op.io.DecodeCsv; @@ -52,6 +51,7 @@ import org.tensorflow.types.TInt32; import org.tensorflow.types.TInt64; import org.tensorflow.types.TString; +import org.tensorflow.util.ndarray.Shape; /** * An API for building {@code io} operations as {@link Op Op}s @@ -155,6 +155,25 @@ public DecodeRaw decodeRaw(Operand bytes, DataType outType, return DecodeRaw.create(scope, bytes, outType, options); } + /** + * Builds an {@link ParseExample} operation + * + * @param serialized A vector containing a batch of binary serialized Example protos. + * @param names A vector containing the names of the serialized protos. + * @param sparseKeys A list of Nsparse string Tensors (scalars). + * @param denseKeys A list of Ndense string Tensors (scalars). + * @param denseDefaults A list of Ndense Tensors (some may be empty). + * @param sparseTypes A list of Nsparse types; the data types of data in each Feature + * @param denseShapes A list of Ndense shapes; the shapes of data in each Feature + * @return a new instance of ParseExample + * @see org.tensorflow.op.io.ParseExample + */ + public ParseExample parseExample(Operand serialized, Operand names, + Iterable> sparseKeys, Iterable> denseKeys, + Iterable> denseDefaults, List> sparseTypes, List denseShapes) { + return ParseExample.create(scope, serialized, names, sparseKeys, denseKeys, denseDefaults, sparseTypes, denseShapes); + } + /** * Builds an {@link DecodeBase64} operation * @@ -166,25 +185,6 @@ public DecodeBase64 decodeBase64(Operand input) { return DecodeBase64.create(scope, input); } - /** - * Builds an {@link ParseSingleExample} operation - * - * @param serialized A vector containing a batch of binary serialized Example protos. - * @param denseDefaults A list of Tensors (some may be empty), whose length matches - * @param numSparse The number of sparse features to be parsed from the example. This - * @param sparseKeys A list of `num_sparse` strings. - * @param denseKeys The keys expected in the Examples' features associated with dense - * @param sparseTypes A list of `num_sparse` types; the data types of data in each - * @param denseShapes The shapes of data in each Feature given in dense_keys. - * @return a new instance of ParseSingleExample - * @see org.tensorflow.op.io.ParseSingleExample - */ - public ParseSingleExample parseSingleExample(Operand serialized, - Iterable> denseDefaults, Long numSparse, List sparseKeys, - List denseKeys, List> sparseTypes, List denseShapes) { - return ParseSingleExample.create(scope, serialized, denseDefaults, numSparse, sparseKeys, denseKeys, sparseTypes, denseShapes); - } - /** * Builds an {@link MatchingFiles} operation * @@ -221,6 +221,18 @@ public SerializeManySparse serializeManySparse(Operand spar return SerializeManySparse.create(scope, sparseIndices, sparseValues, sparseShape); } + /** + * Builds an {@link WriteFile} operation + * + * @param filename scalar. The name of the file to which we write the contents. + * @param contents scalar. The content to be written to the output file. + * @return a new instance of WriteFile + * @see org.tensorflow.op.io.WriteFile + */ + public WriteFile writeFile(Operand filename, Operand contents) { + return WriteFile.create(scope, filename, contents); + } + /** * Builds an {@link ReaderNumRecordsProduced} operation * @@ -246,32 +258,6 @@ public QueueEnqueue queueEnqueue(Operand handle, Iterable> compone return QueueEnqueue.create(scope, handle, components, options); } - /** - * Builds an {@link WriteFile} operation - * - * @param filename scalar. The name of the file to which we write the contents. - * @param contents scalar. The content to be written to the output file. - * @return a new instance of WriteFile - * @see org.tensorflow.op.io.WriteFile - */ - public WriteFile writeFile(Operand filename, Operand contents) { - return WriteFile.create(scope, filename, contents); - } - - /** - * Builds an {@link PriorityQueue} operation - * - * @param componentTypes The type of each component in a value. - * @param shapes The shape of each component in a value. The length of this attr must - * @param options carries optional attributes values - * @return a new instance of PriorityQueue - * @see org.tensorflow.op.io.PriorityQueue - */ - public PriorityQueue priorityQueue(List> componentTypes, List shapes, - PriorityQueue.Options... options) { - return PriorityQueue.create(scope, componentTypes, shapes, options); - } - /** * Builds an {@link ReaderSerializeState} operation * @@ -423,6 +409,25 @@ public EncodeBase64 encodeBase64(Operand input, EncodeBase64.Options... return EncodeBase64.create(scope, input, options); } + /** + * Builds an {@link ParseSingleExample} operation + * + * @param serialized A vector containing a batch of binary serialized Example protos. + * @param denseDefaults A list of Tensors (some may be empty), whose length matches + * @param numSparse The number of sparse features to be parsed from the example. This + * @param sparseKeys A list of `num_sparse` strings. + * @param denseKeys The keys expected in the Examples' features associated with dense + * @param sparseTypes A list of `num_sparse` types; the data types of data in each + * @param denseShapes The shapes of data in each Feature given in dense_keys. + * @return a new instance of ParseSingleExample + * @see org.tensorflow.op.io.ParseSingleExample + */ + public ParseSingleExample parseSingleExample(Operand serialized, + Iterable> denseDefaults, Long numSparse, List sparseKeys, + List denseKeys, List> sparseTypes, List denseShapes) { + return ParseSingleExample.create(scope, serialized, denseDefaults, numSparse, sparseKeys, denseKeys, sparseTypes, denseShapes); + } + /** * Builds an {@link SerializeSparse} operation * @@ -489,25 +494,6 @@ public ReaderNumWorkUnitsCompleted readerNumWorkUnitsCompleted(Operand reader return ReaderNumWorkUnitsCompleted.create(scope, readerHandle); } - /** - * Builds an {@link ParseExample} operation - * - * @param serialized A vector containing a batch of binary serialized Example protos. - * @param names A vector containing the names of the serialized protos. - * @param sparseKeys A list of Nsparse string Tensors (scalars). - * @param denseKeys A list of Ndense string Tensors (scalars). - * @param denseDefaults A list of Ndense Tensors (some may be empty). - * @param sparseTypes A list of Nsparse types; the data types of data in each Feature - * @param denseShapes A list of Ndense shapes; the shapes of data in each Feature - * @return a new instance of ParseExample - * @see org.tensorflow.op.io.ParseExample - */ - public ParseExample parseExample(Operand serialized, Operand names, - Iterable> sparseKeys, Iterable> denseKeys, - Iterable> denseDefaults, List> sparseTypes, List denseShapes) { - return ParseExample.create(scope, serialized, names, sparseKeys, denseKeys, denseDefaults, sparseTypes, denseShapes); - } - /** * Builds an {@link ReaderRead} operation * @@ -560,16 +546,17 @@ public SerializeTensor serializeTensor(Operand tensor) { } /** - * Builds an {@link DecodeCompressed} operation + * Builds an {@link PriorityQueue} operation * - * @param bytes A Tensor of string which is compressed. + * @param componentTypes The type of each component in a value. + * @param shapes The shape of each component in a value. The length of this attr must * @param options carries optional attributes values - * @return a new instance of DecodeCompressed - * @see org.tensorflow.op.io.DecodeCompressed + * @return a new instance of PriorityQueue + * @see org.tensorflow.op.io.PriorityQueue */ - public DecodeCompressed decodeCompressed(Operand bytes, - DecodeCompressed.Options... options) { - return DecodeCompressed.create(scope, bytes, options); + public PriorityQueue priorityQueue(List> componentTypes, List shapes, + PriorityQueue.Options... options) { + return PriorityQueue.create(scope, componentTypes, shapes, options); } /** @@ -584,16 +571,16 @@ public QueueIsClosed queueIsClosed(Operand handle) { } /** - * Builds an {@link DeserializeManySparse} operation + * Builds an {@link DecodeCompressed} operation * - * @param serializedSparse 2-D, The `N` serialized `SparseTensor` objects. - * @param dtype The `dtype` of the serialized `SparseTensor` objects. - * @return a new instance of DeserializeManySparse - * @see org.tensorflow.op.io.DeserializeManySparse + * @param bytes A Tensor of string which is compressed. + * @param options carries optional attributes values + * @return a new instance of DecodeCompressed + * @see org.tensorflow.op.io.DecodeCompressed */ - public DeserializeManySparse deserializeManySparse(Operand serializedSparse, - DataType dtype) { - return DeserializeManySparse.create(scope, serializedSparse, dtype); + public DecodeCompressed decodeCompressed(Operand bytes, + DecodeCompressed.Options... options) { + return DecodeCompressed.create(scope, bytes, options); } /** @@ -607,6 +594,19 @@ public QueueSize queueSize(Operand handle) { return QueueSize.create(scope, handle); } + /** + * Builds an {@link DeserializeManySparse} operation + * + * @param serializedSparse 2-D, The `N` serialized `SparseTensor` objects. + * @param dtype The `dtype` of the serialized `SparseTensor` objects. + * @return a new instance of DeserializeManySparse + * @see org.tensorflow.op.io.DeserializeManySparse + */ + public DeserializeManySparse deserializeManySparse(Operand serializedSparse, + DataType dtype) { + return DeserializeManySparse.create(scope, serializedSparse, dtype); + } + /** * Builds an {@link RandomShuffleQueue} operation * diff --git a/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/LinalgOps.java b/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/LinalgOps.java index 7a4ca1367f0..2c31fe8c331 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/LinalgOps.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/LinalgOps.java @@ -70,17 +70,6 @@ public Qr qr(Operand input, Qr.Options... options) { return Qr.create(scope, input, options); } - /** - * Builds an {@link BatchMatrixDiagPart} operation - * - * @param input - * @return a new instance of BatchMatrixDiagPart - * @see org.tensorflow.op.linalg.BatchMatrixDiagPart - */ - public BatchMatrixDiagPart batchMatrixDiagPart(Operand input) { - return BatchMatrixDiagPart.create(scope, input); - } - /** * Builds an {@link BatchMatrixSolveLs} operation * @@ -96,6 +85,17 @@ public BatchMatrixSolveLs batchMatrixSolveLs(Operand m return BatchMatrixSolveLs.create(scope, matrix, rhs, l2Regularizer, options); } + /** + * Builds an {@link BatchMatrixDiagPart} operation + * + * @param input + * @return a new instance of BatchMatrixDiagPart + * @see org.tensorflow.op.linalg.BatchMatrixDiagPart + */ + public BatchMatrixDiagPart batchMatrixDiagPart(Operand input) { + return BatchMatrixDiagPart.create(scope, input); + } + /** * Builds an {@link BatchMatrixBandPart} operation * @@ -157,6 +157,18 @@ public Cross cross(Operand a, Operand b) { return Cross.create(scope, a, b); } + /** + * Builds an {@link SelfAdjointEig} operation + * + * @param input `Tensor` input of shape `[N, N]`. + * @param options carries optional attributes values + * @return a new instance of SelfAdjointEig + * @see org.tensorflow.op.linalg.SelfAdjointEig + */ + public SelfAdjointEig selfAdjointEig(Operand input, SelfAdjointEig.Options... options) { + return SelfAdjointEig.create(scope, input, options); + } + /** * Builds an {@link TriangularSolve} operation * @@ -171,18 +183,6 @@ public TriangularSolve triangularSolve(Operand matrix, Operand rhs, return TriangularSolve.create(scope, matrix, rhs, options); } - /** - * Builds an {@link SelfAdjointEig} operation - * - * @param input `Tensor` input of shape `[N, N]`. - * @param options carries optional attributes values - * @return a new instance of SelfAdjointEig - * @see org.tensorflow.op.linalg.SelfAdjointEig - */ - public SelfAdjointEig selfAdjointEig(Operand input, SelfAdjointEig.Options... options) { - return SelfAdjointEig.create(scope, input, options); - } - /** * Builds an {@link Transpose} operation * @@ -206,18 +206,6 @@ public Sqrtm sqrtm(Operand input) { return Sqrtm.create(scope, input); } - /** - * Builds an {@link Svd} operation - * - * @param input A tensor of shape `[..., M, N]` whose inner-most 2 dimensions - * @param options carries optional attributes values - * @return a new instance of Svd - * @see org.tensorflow.op.linalg.Svd - */ - public Svd svd(Operand input, Svd.Options... options) { - return Svd.create(scope, input, options); - } - /** * Builds an {@link Cholesky} operation * @@ -240,6 +228,18 @@ public Det det(Operand input) { return Det.create(scope, input); } + /** + * Builds an {@link Svd} operation + * + * @param input A tensor of shape `[..., M, N]` whose inner-most 2 dimensions + * @param options carries optional attributes values + * @return a new instance of Svd + * @see org.tensorflow.op.linalg.Svd + */ + public Svd svd(Operand input, Svd.Options... options) { + return Svd.create(scope, input, options); + } + /** * Builds an {@link CholeskyGrad} operation * @@ -297,18 +297,6 @@ public DiagPart diagPart(Operand input) { return DiagPart.create(scope, input); } - /** - * Builds an {@link SetDiag} operation - * - * @param input Rank `k+1`, where `k >= 1`. - * @param diagonal Rank `k`, where `k >= 1`. - * @return a new instance of SetDiag - * @see org.tensorflow.op.linalg.SetDiag - */ - public SetDiag setDiag(Operand input, Operand diagonal) { - return SetDiag.create(scope, input, diagonal); - } - /** * Builds an {@link Solve} operation * @@ -322,6 +310,18 @@ public Solve solve(Operand matrix, Operand rhs, Solve.Options... op return Solve.create(scope, matrix, rhs, options); } + /** + * Builds an {@link SetDiag} operation + * + * @param input Rank `k+1`, where `k >= 1`. + * @param diagonal Rank `k`, where `k >= 1`. + * @return a new instance of SetDiag + * @see org.tensorflow.op.linalg.SetDiag + */ + public SetDiag setDiag(Operand input, Operand diagonal) { + return SetDiag.create(scope, input, diagonal); + } + /** * Builds an {@link LoadAndRemapMatrix} operation * diff --git a/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/MathOps.java b/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/MathOps.java index e1b387a6f0b..6acd3d4a99a 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/MathOps.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/MathOps.java @@ -2,7 +2,6 @@ import org.tensorflow.DataType; import org.tensorflow.Operand; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.math.Abs; import org.tensorflow.op.math.AccumulateN; import org.tensorflow.op.math.Acos; @@ -108,6 +107,7 @@ import org.tensorflow.types.TInt32; import org.tensorflow.types.TInt64; import org.tensorflow.types.family.TNumber; +import org.tensorflow.util.ndarray.Shape; /** * An API for building {@code math} operations as {@link Op Op}s @@ -133,18 +133,6 @@ public ArgMax argMax(Operand input, Operand return ArgMax.create(scope, input, dimension); } - /** - * Builds an {@link Polygamma} operation - * - * @param a - * @param x - * @return a new instance of Polygamma - * @see org.tensorflow.op.math.Polygamma - */ - public Polygamma polygamma(Operand a, Operand x) { - return Polygamma.create(scope, a, x); - } - /** * Builds an {@link Bincount} operation * @@ -159,6 +147,18 @@ public Bincount bincount(Operand arr, Operand Polygamma polygamma(Operand a, Operand x) { + return Polygamma.create(scope, a, x); + } + /** * Builds an {@link BesselI0e} operation * @@ -291,6 +291,17 @@ public Equal equal(Operand x, Operand y, Equal.Options... options) { return Equal.create(scope, x, y, options); } + /** + * Builds an {@link Ceil} operation + * + * @param x + * @return a new instance of Ceil + * @see org.tensorflow.op.math.Ceil + */ + public Ceil ceil(Operand x) { + return Ceil.create(scope, x); + } + /** * Builds an {@link Mul} operation * @@ -304,14 +315,14 @@ public Mul mul(Operand x, Operand y) { } /** - * Builds an {@link Ceil} operation + * Builds an {@link Neg} operation * * @param x - * @return a new instance of Ceil - * @see org.tensorflow.op.math.Ceil + * @return a new instance of Neg + * @see org.tensorflow.op.math.Neg */ - public Ceil ceil(Operand x) { - return Ceil.create(scope, x); + public Neg neg(Operand x) { + return Neg.create(scope, x); } /** @@ -326,17 +337,6 @@ public Atan2 atan2(Operand y, Operand x) { return Atan2.create(scope, y, x); } - /** - * Builds an {@link Neg} operation - * - * @param x - * @return a new instance of Neg - * @see org.tensorflow.op.math.Neg - */ - public Neg neg(Operand x) { - return Neg.create(scope, x); - } - /** * Builds an {@link Asinh} operation * @@ -360,26 +360,26 @@ public Atan atan(Operand x) { } /** - * Builds an {@link Xlogy} operation + * Builds an {@link Acos} operation * * @param x - * @param y - * @return a new instance of Xlogy - * @see org.tensorflow.op.math.Xlogy + * @return a new instance of Acos + * @see org.tensorflow.op.math.Acos */ - public Xlogy xlogy(Operand x, Operand y) { - return Xlogy.create(scope, x, y); + public Acos acos(Operand x) { + return Acos.create(scope, x); } /** - * Builds an {@link Acos} operation + * Builds an {@link Xlogy} operation * * @param x - * @return a new instance of Acos - * @see org.tensorflow.op.math.Acos + * @param y + * @return a new instance of Xlogy + * @see org.tensorflow.op.math.Xlogy */ - public Acos acos(Operand x) { - return Acos.create(scope, x); + public Xlogy xlogy(Operand x, Operand y) { + return Xlogy.create(scope, x, y); } /** @@ -443,25 +443,25 @@ public Log log(Operand x) { } /** - * Builds an {@link LogicalNot} operation + * Builds an {@link Sqrt} operation * * @param x - * @return a new instance of LogicalNot - * @see org.tensorflow.op.math.LogicalNot + * @return a new instance of Sqrt + * @see org.tensorflow.op.math.Sqrt */ - public LogicalNot logicalNot(Operand x) { - return LogicalNot.create(scope, x); + public Sqrt sqrt(Operand x) { + return Sqrt.create(scope, x); } /** - * Builds an {@link Sqrt} operation + * Builds an {@link LogicalNot} operation * * @param x - * @return a new instance of Sqrt - * @see org.tensorflow.op.math.Sqrt + * @return a new instance of LogicalNot + * @see org.tensorflow.op.math.LogicalNot */ - public Sqrt sqrt(Operand x) { - return Sqrt.create(scope, x); + public LogicalNot logicalNot(Operand x) { + return LogicalNot.create(scope, x); } /** @@ -558,6 +558,18 @@ public RealDiv realDiv(Operand x, Operand y) { return RealDiv.create(scope, x, y); } + /** + * Builds an {@link AccumulateN} operation + * + * @param inputs A list of `Tensor` objects, each with same shape and type. + * @param shape Shape of elements of `inputs`. + * @return a new instance of AccumulateN + * @see org.tensorflow.op.math.AccumulateN + */ + public AccumulateN accumulateN(Iterable> inputs, Shape shape) { + return AccumulateN.create(scope, inputs, shape); + } + /** * Builds an {@link Digamma} operation * @@ -604,17 +616,6 @@ public Betainc betainc(Operand a, Operand b, Operan return Betainc.create(scope, a, b, x); } - /** - * Builds an {@link Sin} operation - * - * @param x - * @return a new instance of Sin - * @see org.tensorflow.op.math.Sin - */ - public Sin sin(Operand x) { - return Sin.create(scope, x); - } - /** * Builds an {@link SegmentMean} operation * @@ -627,6 +628,17 @@ public SegmentMean segmentMean(Operand data, Operan return SegmentMean.create(scope, data, segmentIds); } + /** + * Builds an {@link Sin} operation + * + * @param x + * @return a new instance of Sin + * @see org.tensorflow.op.math.Sin + */ + public Sin sin(Operand x) { + return Sin.create(scope, x); + } + /** * Builds an {@link ApproximateEqual} operation * @@ -796,6 +808,17 @@ public Exp exp(Operand x) { return Exp.create(scope, x); } + /** + * Builds an {@link Real} operation + * + * @param input + * @return a new instance of Real + * @see org.tensorflow.op.math.Real + */ + public Real real(Operand input) { + return Real.create(scope, input); + } + /** * Builds an {@link FloorMod} operation * @@ -808,17 +831,6 @@ public FloorMod floorMod(Operand x, Operand y) { return FloorMod.create(scope, x, y); } - /** - * Builds an {@link Real} operation - * - * @param input - * @return a new instance of Real - * @see org.tensorflow.op.math.Real - */ - public Real real(Operand input) { - return Real.create(scope, input); - } - /** * Builds an {@link SquaredDifference} operation * @@ -855,17 +867,6 @@ public CompareAndBitpack compareAndBitpack(Operand input, Operand thre return CompareAndBitpack.create(scope, input, threshold); } - /** - * Builds an {@link Lgamma} operation - * - * @param x - * @return a new instance of Lgamma - * @see org.tensorflow.op.math.Lgamma - */ - public Lgamma lgamma(Operand x) { - return Lgamma.create(scope, x); - } - /** * Builds an {@link Sub} operation * @@ -878,6 +879,17 @@ public Sub sub(Operand x, Operand y) { return Sub.create(scope, x, y); } + /** + * Builds an {@link Lgamma} operation + * + * @param x + * @return a new instance of Lgamma + * @see org.tensorflow.op.math.Lgamma + */ + public Lgamma lgamma(Operand x) { + return Lgamma.create(scope, x); + } + /** * Builds an {@link IsNan} operation * @@ -901,25 +913,25 @@ public Erf erf(Operand x) { } /** - * Builds an {@link Asin} operation + * Builds an {@link Round} operation * * @param x - * @return a new instance of Asin - * @see org.tensorflow.op.math.Asin + * @return a new instance of Round + * @see org.tensorflow.op.math.Round */ - public Asin asin(Operand x) { - return Asin.create(scope, x); + public Round round(Operand x) { + return Round.create(scope, x); } /** - * Builds an {@link Round} operation + * Builds an {@link Asin} operation * * @param x - * @return a new instance of Round - * @see org.tensorflow.op.math.Round + * @return a new instance of Asin + * @see org.tensorflow.op.math.Asin */ - public Round round(Operand x) { - return Round.create(scope, x); + public Asin asin(Operand x) { + return Asin.create(scope, x); } /** @@ -969,6 +981,18 @@ public Div div(Operand x, Operand y) { return Div.create(scope, x, y); } + /** + * Builds an {@link Pow} operation + * + * @param x + * @param y + * @return a new instance of Pow + * @see org.tensorflow.op.math.Pow + */ + public Pow pow(Operand x, Operand y) { + return Pow.create(scope, x, y); + } + /** * Builds an {@link UnsortedSegmentMax} operation * @@ -995,15 +1019,14 @@ public Imag imag(Operand input) { } /** - * Builds an {@link Pow} operation + * Builds an {@link InvertPermutation} operation * - * @param x - * @param y - * @return a new instance of Pow - * @see org.tensorflow.op.math.Pow + * @param x 1-D. + * @return a new instance of InvertPermutation + * @see org.tensorflow.op.math.InvertPermutation */ - public Pow pow(Operand x, Operand y) { - return Pow.create(scope, x, y); + public InvertPermutation invertPermutation(Operand x) { + return InvertPermutation.create(scope, x); } /** @@ -1017,17 +1040,6 @@ public IsFinite isFinite(Operand x) { return IsFinite.create(scope, x); } - /** - * Builds an {@link InvertPermutation} operation - * - * @param x 1-D. - * @return a new instance of InvertPermutation - * @see org.tensorflow.op.math.InvertPermutation - */ - public InvertPermutation invertPermutation(Operand x) { - return InvertPermutation.create(scope, x); - } - /** * Builds an {@link Abs} operation * @@ -1190,17 +1202,6 @@ public Cosh cosh(Operand x) { return Cosh.create(scope, x); } - /** - * Builds an {@link Conj} operation - * - * @param input - * @return a new instance of Conj - * @see org.tensorflow.op.math.Conj - */ - public Conj conj(Operand input) { - return Conj.create(scope, input); - } - /** * Builds an {@link ArgMax} operation * @@ -1215,6 +1216,17 @@ public ArgMax argMax(Operand inp return ArgMax.create(scope, input, dimension, outputType); } + /** + * Builds an {@link Conj} operation + * + * @param input + * @return a new instance of Conj + * @see org.tensorflow.op.math.Conj + */ + public Conj conj(Operand input) { + return Conj.create(scope, input); + } + /** * Builds an {@link Angle} operation * @@ -1262,17 +1274,6 @@ public Add add(Operand x, Operand y) { return Add.create(scope, x, y); } - /** - * Builds an {@link Cos} operation - * - * @param x - * @return a new instance of Cos - * @see org.tensorflow.op.math.Cos - */ - public Cos cos(Operand x) { - return Cos.create(scope, x); - } - /** * Builds an {@link Fact} operation * @@ -1284,15 +1285,14 @@ public Fact fact() { } /** - * Builds an {@link AccumulateN} operation + * Builds an {@link Cos} operation * - * @param inputs A list of `Tensor` objects, each with same shape and type. - * @param shape Shape of elements of `inputs`. - * @return a new instance of AccumulateN - * @see org.tensorflow.op.math.AccumulateN + * @param x + * @return a new instance of Cos + * @see org.tensorflow.op.math.Cos */ - public AccumulateN accumulateN(Iterable> inputs, Shape shape) { - return AccumulateN.create(scope, inputs, shape); + public Cos cos(Operand x) { + return Cos.create(scope, x); } /** diff --git a/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/NnOps.java b/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/NnOps.java index b69e7326e1b..b1407704b27 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/NnOps.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/NnOps.java @@ -233,16 +233,21 @@ public Conv2dBackpropInput conv2dBackpropInput(Operand SparseSoftmaxCrossEntropyWithLogits sparseSoftmaxCrossEntropyWithLogits( - Operand features, Operand labels) { - return SparseSoftmaxCrossEntropyWithLogits.create(scope, features, labels); + public CudnnRnnParamsToCanonical cudnnRnnParamsToCanonical( + Operand numLayers, Operand numUnits, Operand inputSize, + Operand params, Long numParams, CudnnRnnParamsToCanonical.Options... options) { + return CudnnRnnParamsToCanonical.create(scope, numLayers, numUnits, inputSize, params, numParams, options); } /** @@ -260,21 +265,16 @@ public FractionalAvgPool fractionalAvgPool(Operand val } /** - * Builds an {@link CudnnRnnParamsToCanonical} operation + * Builds an {@link SparseSoftmaxCrossEntropyWithLogits} operation * - * @param numLayers - * @param numUnits - * @param inputSize - * @param params - * @param numParams - * @param options carries optional attributes values - * @return a new instance of CudnnRnnParamsToCanonical - * @see org.tensorflow.op.nn.CudnnRnnParamsToCanonical + * @param features batch_size x num_classes matrix + * @param labels batch_size vector with values in [0, num_classes). + * @return a new instance of SparseSoftmaxCrossEntropyWithLogits + * @see org.tensorflow.op.nn.SparseSoftmaxCrossEntropyWithLogits */ - public CudnnRnnParamsToCanonical cudnnRnnParamsToCanonical( - Operand numLayers, Operand numUnits, Operand inputSize, - Operand params, Long numParams, CudnnRnnParamsToCanonical.Options... options) { - return CudnnRnnParamsToCanonical.create(scope, numLayers, numUnits, inputSize, params, numParams, options); + public SparseSoftmaxCrossEntropyWithLogits sparseSoftmaxCrossEntropyWithLogits( + Operand features, Operand labels) { + return SparseSoftmaxCrossEntropyWithLogits.create(scope, features, labels); } /** @@ -366,6 +366,22 @@ public L2Loss l2Loss(Operand t) { return L2Loss.create(scope, t); } + /** + * Builds an {@link Conv3d} operation + * + * @param input Shape `[batch, in_depth, in_height, in_width, in_channels]`. + * @param filter Shape `[filter_depth, filter_height, filter_width, in_channels, + * @param strides 1-D tensor of length 5. The stride of the sliding window for each + * @param padding The type of padding algorithm to use. + * @param options carries optional attributes values + * @return a new instance of Conv3d + * @see org.tensorflow.op.nn.Conv3d + */ + public Conv3d conv3d(Operand input, Operand filter, + List strides, String padding, Conv3d.Options... options) { + return Conv3d.create(scope, input, filter, strides, padding, options); + } + /** * Builds an {@link DepthwiseConv2dNativeBackpropFilter} operation * @@ -384,22 +400,6 @@ public DepthwiseConv2dNativeBackpropFilter depthwiseConv2 return DepthwiseConv2dNativeBackpropFilter.create(scope, input, filterSizes, outBackprop, strides, padding, options); } - /** - * Builds an {@link Conv3d} operation - * - * @param input Shape `[batch, in_depth, in_height, in_width, in_channels]`. - * @param filter Shape `[filter_depth, filter_height, filter_width, in_channels, - * @param strides 1-D tensor of length 5. The stride of the sliding window for each - * @param padding The type of padding algorithm to use. - * @param options carries optional attributes values - * @return a new instance of Conv3d - * @see org.tensorflow.op.nn.Conv3d - */ - public Conv3d conv3d(Operand input, Operand filter, - List strides, String padding, Conv3d.Options... options) { - return Conv3d.create(scope, input, filter, strides, padding, options); - } - /** * Builds an {@link FusedBatchNorm} operation * @@ -737,6 +737,24 @@ public Selu selu(Operand features) { return Selu.create(scope, features); } + /** + * Builds an {@link Conv3dBackpropFilter} operation + * + * @param input Shape `[batch, depth, rows, cols, in_channels]`. + * @param filterSizes An integer vector representing the tensor shape of `filter`, + * @param outBackprop Backprop signal of shape `[batch, out_depth, out_rows, out_cols, + * @param strides 1-D tensor of length 5. The stride of the sliding window for each + * @param padding The type of padding algorithm to use. + * @param options carries optional attributes values + * @return a new instance of Conv3dBackpropFilter + * @see org.tensorflow.op.nn.Conv3dBackpropFilter + */ + public Conv3dBackpropFilter conv3dBackpropFilter(Operand input, + Operand filterSizes, Operand outBackprop, List strides, String padding, + Conv3dBackpropFilter.Options... options) { + return Conv3dBackpropFilter.create(scope, input, filterSizes, outBackprop, strides, padding, options); + } + /** * Builds an {@link BatchNormWithGlobalNormalization} operation * @@ -756,24 +774,6 @@ public BatchNormWithGlobalNormalization batchNormWithGlobalNormalization( return BatchNormWithGlobalNormalization.create(scope, t, m, v, beta, gamma, varianceEpsilon, scaleAfterNormalization); } - /** - * Builds an {@link Conv3dBackpropFilter} operation - * - * @param input Shape `[batch, depth, rows, cols, in_channels]`. - * @param filterSizes An integer vector representing the tensor shape of `filter`, - * @param outBackprop Backprop signal of shape `[batch, out_depth, out_rows, out_cols, - * @param strides 1-D tensor of length 5. The stride of the sliding window for each - * @param padding The type of padding algorithm to use. - * @param options carries optional attributes values - * @return a new instance of Conv3dBackpropFilter - * @see org.tensorflow.op.nn.Conv3dBackpropFilter - */ - public Conv3dBackpropFilter conv3dBackpropFilter(Operand input, - Operand filterSizes, Operand outBackprop, List strides, String padding, - Conv3dBackpropFilter.Options... options) { - return Conv3dBackpropFilter.create(scope, input, filterSizes, outBackprop, strides, padding, options); - } - /** * Builds an {@link AvgPool3d} operation * @@ -836,18 +836,6 @@ public TopK topK(Operand input, Operand k, return TopK.create(scope, input, k, options); } - /** - * Builds an {@link BiasAddGrad} operation - * - * @param outBackprop Any number of dimensions. - * @param options carries optional attributes values - * @return a new instance of BiasAddGrad - * @see org.tensorflow.op.nn.BiasAddGrad - */ - public BiasAddGrad biasAddGrad(Operand outBackprop, BiasAddGrad.Options... options) { - return BiasAddGrad.create(scope, outBackprop, options); - } - /** * Builds an {@link QuantizedInstanceNorm} operation * @@ -863,6 +851,18 @@ public QuantizedInstanceNorm quantizedInstanceNorm(Operand x, Operand< return QuantizedInstanceNorm.create(scope, x, xMin, xMax, options); } + /** + * Builds an {@link BiasAddGrad} operation + * + * @param outBackprop Any number of dimensions. + * @param options carries optional attributes values + * @return a new instance of BiasAddGrad + * @see org.tensorflow.op.nn.BiasAddGrad + */ + public BiasAddGrad biasAddGrad(Operand outBackprop, BiasAddGrad.Options... options) { + return BiasAddGrad.create(scope, outBackprop, options); + } + /** * Builds an {@link LogSoftmax} operation * @@ -1015,6 +1015,24 @@ public FusedPadConv2d fusedPadConv2d(Operand input, return FusedPadConv2d.create(scope, input, paddings, filter, mode, strides, padding); } + /** + * Builds an {@link FixedUnigramCandidateSampler} operation + * + * @param trueClasses A batch_size * num_true matrix, in which each row contains the + * @param numTrue Number of true labels per context. + * @param numSampled Number of candidates to randomly sample. + * @param unique If unique is true, we sample with rejection, so that all sampled + * @param rangeMax The sampler will sample integers from the interval [0, range_max). + * @param options carries optional attributes values + * @return a new instance of FixedUnigramCandidateSampler + * @see org.tensorflow.op.nn.FixedUnigramCandidateSampler + */ + public FixedUnigramCandidateSampler fixedUnigramCandidateSampler(Operand trueClasses, + Long numTrue, Long numSampled, Boolean unique, Long rangeMax, + FixedUnigramCandidateSampler.Options... options) { + return FixedUnigramCandidateSampler.create(scope, trueClasses, numTrue, numSampled, unique, rangeMax, options); + } + /** * Builds an {@link Dilation2dBackpropFilter} operation * @@ -1034,21 +1052,14 @@ public Dilation2dBackpropFilter dilation2dBackpropFilter( } /** - * Builds an {@link FixedUnigramCandidateSampler} operation + * Builds an {@link Elu} operation * - * @param trueClasses A batch_size * num_true matrix, in which each row contains the - * @param numTrue Number of true labels per context. - * @param numSampled Number of candidates to randomly sample. - * @param unique If unique is true, we sample with rejection, so that all sampled - * @param rangeMax The sampler will sample integers from the interval [0, range_max). - * @param options carries optional attributes values - * @return a new instance of FixedUnigramCandidateSampler - * @see org.tensorflow.op.nn.FixedUnigramCandidateSampler + * @param features + * @return a new instance of Elu + * @see org.tensorflow.op.nn.Elu */ - public FixedUnigramCandidateSampler fixedUnigramCandidateSampler(Operand trueClasses, - Long numTrue, Long numSampled, Boolean unique, Long rangeMax, - FixedUnigramCandidateSampler.Options... options) { - return FixedUnigramCandidateSampler.create(scope, trueClasses, numTrue, numSampled, unique, rangeMax, options); + public Elu elu(Operand features) { + return Elu.create(scope, features); } /** @@ -1067,17 +1078,6 @@ public Dilation2d dilation2d(Operand input, Operand return Dilation2d.create(scope, input, filter, strides, rates, padding); } - /** - * Builds an {@link Elu} operation - * - * @param features - * @return a new instance of Elu - * @see org.tensorflow.op.nn.Elu - */ - public Elu elu(Operand features) { - return Elu.create(scope, features); - } - /** * Builds an {@link MaxPool3d} operation * diff --git a/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/Ops.java b/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/Ops.java index 4da3667b168..f95d175ddce 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/Ops.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/Ops.java @@ -1,11 +1,17 @@ package org.tensorflow.op; +import java.nio.ByteBuffer; +import java.nio.DoubleBuffer; +import java.nio.FloatBuffer; +import java.nio.IntBuffer; +import java.nio.LongBuffer; +import java.nio.charset.Charset; import java.util.List; import org.tensorflow.DataType; import org.tensorflow.EagerSession; import org.tensorflow.ExecutionEnvironment; import org.tensorflow.Operand; -import org.tensorflow.nio.nd.Shape; +import org.tensorflow.Tensor; import org.tensorflow.op.core.Abort; import org.tensorflow.op.core.All; import org.tensorflow.op.core.Any; @@ -33,6 +39,7 @@ import org.tensorflow.op.core.ClipByValue; import org.tensorflow.op.core.CombinedNonMaxSuppression; import org.tensorflow.op.core.Concat; +import org.tensorflow.op.core.Constant; import org.tensorflow.op.core.ConsumeMutexLock; import org.tensorflow.op.core.ControlTrigger; import org.tensorflow.op.core.CountUpTo; @@ -62,6 +69,7 @@ import org.tensorflow.op.core.GatherNd; import org.tensorflow.op.core.GetSessionHandle; import org.tensorflow.op.core.GetSessionTensor; +import org.tensorflow.op.core.Gradients; import org.tensorflow.op.core.GuaranteeConst; import org.tensorflow.op.core.HashTable; import org.tensorflow.op.core.HistogramFixedWidth; @@ -257,13 +265,17 @@ import org.tensorflow.op.core.Where; import org.tensorflow.op.core.Where3; import org.tensorflow.op.core.WriteKafka; +import org.tensorflow.op.core.Zeros; import org.tensorflow.op.core.ZerosLike; import org.tensorflow.types.TBool; +import org.tensorflow.types.TDouble; import org.tensorflow.types.TFloat; import org.tensorflow.types.TInt32; import org.tensorflow.types.TInt64; import org.tensorflow.types.TString; import org.tensorflow.types.family.TNumber; +import org.tensorflow.types.family.TType; +import org.tensorflow.util.ndarray.Shape; /** * An API for building operations as {@link Op Op}s @@ -377,16 +389,17 @@ public InplaceAdd inplaceAdd(Operand x, Operand i, Operand } /** - * Builds an {@link Variable} operation + * Builds an {@link DrawBoundingBoxesV2} operation * - * @param shape The shape of the variable tensor. - * @param dtype The type of elements in the variable tensor. - * @param options carries optional attributes values - * @return a new instance of Variable - * @see org.tensorflow.op.core.Variable + * @param images 4-D with shape `[batch, height, width, depth]`. A batch of images. + * @param boxes 3-D with shape `[batch, num_bounding_boxes, 4]` containing bounding + * @param colors 2-D. A list of RGBA colors to cycle through for the boxes. + * @return a new instance of DrawBoundingBoxesV2 + * @see org.tensorflow.op.core.DrawBoundingBoxesV2 */ - public Variable variable(Shape shape, DataType dtype, Variable.Options... options) { - return Variable.create(scope, shape, dtype, options); + public DrawBoundingBoxesV2 drawBoundingBoxesV2(Operand images, + Operand boxes, Operand colors) { + return DrawBoundingBoxesV2.create(scope, images, boxes, colors); } /** @@ -401,20 +414,6 @@ public StringUpper stringUpper(Operand input, StringUpper.Options... op return StringUpper.create(scope, input, options); } - /** - * Builds an {@link DrawBoundingBoxesV2} operation - * - * @param images 4-D with shape `[batch, height, width, depth]`. A batch of images. - * @param boxes 3-D with shape `[batch, num_bounding_boxes, 4]` containing bounding - * @param colors 2-D. A list of RGBA colors to cycle through for the boxes. - * @return a new instance of DrawBoundingBoxesV2 - * @see org.tensorflow.op.core.DrawBoundingBoxesV2 - */ - public DrawBoundingBoxesV2 drawBoundingBoxesV2(Operand images, - Operand boxes, Operand colors) { - return DrawBoundingBoxesV2.create(scope, images, boxes, colors); - } - /** * Builds an {@link TensorListScatter} operation * @@ -457,6 +456,20 @@ public ResourceScatterAdd resourceScatterAdd(Operand r return ResourceScatterAdd.create(scope, resource, indices, updates); } + /** + * Builds an {@link ImmutableConst} operation + * + * @param dtype Type of the returned tensor. + * @param shape Shape of the returned tensor. + * @param memoryRegionName Name of readonly memory region used by the tensor, see + * @return a new instance of ImmutableConst + * @see org.tensorflow.op.core.ImmutableConst + */ + public ImmutableConst immutableConst(DataType dtype, Shape shape, + String memoryRegionName) { + return ImmutableConst.create(scope, dtype, shape, memoryRegionName); + } + /** * Builds an {@link TensorArraySize} operation * @@ -497,20 +510,6 @@ public TensorListSplit tensorListSplit(Operand tensor, return TensorListSplit.create(scope, tensor, elementShape, lengths); } - /** - * Builds an {@link All} operation - * - * @param input The tensor to reduce. - * @param axis The dimensions to reduce. Must be in the range - * @param options carries optional attributes values - * @return a new instance of All - * @see org.tensorflow.op.core.All - */ - public All all(Operand input, Operand axis, - All.Options... options) { - return All.create(scope, input, axis, options); - } - /** * Builds an {@link FusedBatchNormGradV3} operation * @@ -530,6 +529,20 @@ public FusedBatchNormGradV3 fusedBa return FusedBatchNormGradV3.create(scope, yBackprop, x, scale, reserveSpace1, reserveSpace2, reserveSpace3, options); } + /** + * Builds an {@link All} operation + * + * @param input The tensor to reduce. + * @param axis The dimensions to reduce. Must be in the range + * @param options carries optional attributes values + * @return a new instance of All + * @see org.tensorflow.op.core.All + */ + public All all(Operand input, Operand axis, + All.Options... options) { + return All.create(scope, input, axis, options); + } + /** * Builds an {@link TensorListPushBackBatch} operation * @@ -581,6 +594,18 @@ public ScatterAdd scatterAdd(Operand ref, Operand> dtypes, StageClear.Options... options) { + return StageClear.create(scope, dtypes, options); + } + /** * Builds an {@link Gather} operation * @@ -597,15 +622,13 @@ public Gather gather(Operand par } /** - * Builds an {@link StageClear} operation + * Builds an {@link Constant} operation * - * @param dtypes - * @param options carries optional attributes values - * @return a new instance of StageClear - * @see org.tensorflow.op.core.StageClear + * @param data An array containing the values to put into the new constant. The dimensions of the + * @see org.tensorflow.op.core.Constant */ - public StageClear stageClear(List> dtypes, StageClear.Options... options) { - return StageClear.create(scope, dtypes, options); + public Constant constant(float[][][] data) { + return Constant.create(scope, data); } /** @@ -655,6 +678,17 @@ public LinSpace linSpace(Operand st return LinSpace.create(scope, start, stop, num); } + /** + * Builds an {@link Constant} operation + * + * @param data The string to put into the new constant. + * @return a string constant + * @see org.tensorflow.op.core.Constant + */ + public Constant constant(String data) { + return Constant.create(scope, data); + } + /** * Builds an {@link StringLower} operation * @@ -667,6 +701,17 @@ public StringLower stringLower(Operand input, StringLower.Options... op return StringLower.create(scope, input, options); } + /** + * Builds an {@link BarrierIncompleteSize} operation + * + * @param handle The handle to a barrier. + * @return a new instance of BarrierIncompleteSize + * @see org.tensorflow.op.core.BarrierIncompleteSize + */ + public BarrierIncompleteSize barrierIncompleteSize(Operand handle) { + return BarrierIncompleteSize.create(scope, handle); + } + /** * Builds an {@link MatrixDiagPartV2} operation * @@ -681,17 +726,6 @@ public MatrixDiagPartV2 matrixDiagPartV2(Operand input, Operand handle) { - return BarrierIncompleteSize.create(scope, handle); - } - /** * Builds an {@link QuantizedReshape} operation * @@ -725,6 +759,16 @@ public StridedSliceGrad stridedSliceGrad(Operand sh return StridedSliceGrad.create(scope, shape, begin, end, strides, dy, options); } + /** + * Builds an {@link Constant} operation + * + * @param data An array containing the values to put into the new constant. The dimensions of the + * @see org.tensorflow.op.core.Constant + */ + public Constant constant(int[] data) { + return Constant.create(scope, data); + } + /** * Builds an {@link StridedSlice} operation * @@ -811,6 +855,19 @@ public TensorArrayRead tensorArrayRead(Operand handle, Operand return TensorArrayRead.create(scope, handle, index, flowIn, dtype); } + /** + * Builds an {@link Constant} operation + * + * @param shape the tensor shape. + * @param data a buffer containing the tensor data. + * @return a float constant + * @throws IllegalArgumentException If the tensor shape is not compatible with the buffer + * @see org.tensorflow.op.core.Constant + */ + public Constant constant(long[] shape, FloatBuffer data) { + return Constant.create(scope, shape, data); + } + /** * Builds an {@link AssignAdd} operation * @@ -885,6 +942,28 @@ public OrderedMapSize orderedMapSize(List> dtypes, return OrderedMapSize.create(scope, dtypes, options); } + /** + * Builds an {@link ParallelConcat} operation + * + * @param values Tensors to be concatenated. All must have size 1 in the first dimension + * @param shape the final shape of the result; should be equal to the shapes of any input + * @return a new instance of ParallelConcat + * @see org.tensorflow.op.core.ParallelConcat + */ + public ParallelConcat parallelConcat(Iterable> values, Shape shape) { + return ParallelConcat.create(scope, values, shape); + } + + /** + * Builds an {@link Constant} operation + * + * @param data An array containing the values to put into the new constant. String elements are + * @see org.tensorflow.op.core.Constant + */ + public Constant constant(byte[][][][][][] data) { + return Constant.create(scope, data); + } + /** * Builds an {@link Fill} operation * @@ -897,6 +976,44 @@ public Fill fill(Operand dims, Operand value) { return Fill.create(scope, dims, value); } + /** + * Builds an {@link Constant} operation + * + * @param data An array containing the values to put into the new constant. String elements are + * @see org.tensorflow.op.core.Constant + */ + public Constant constant(byte[][][] data) { + return Constant.create(scope, data); + } + + /** + * Builds an {@link Constant} operation + * + * @param shape the tensor shape. + * @param data a buffer containing the tensor data. + * @return a long constant + * @throws IllegalArgumentException If the tensor shape is not compatible with the buffer + * @see org.tensorflow.op.core.Constant + */ + public Constant constant(long[] shape, LongBuffer data) { + return Constant.create(scope, shape, data); + } + + /** + * Builds an {@link Gradients} operation + * + * @param y output of the function to derive + * @param x inputs of the function for which partial derivatives are computed + * @param options carries optional attributes values + * @return a new instance of {@code Gradients} + * @throws IllegalArgumentException if execution environment is not a graph + * @see org.tensorflow.op.core.Gradients + */ + public Gradients gradients(Operand y, Iterable> x, + Gradients.Options... options) { + return Gradients.create(scope, y, x, options); + } + /** * Builds an {@link Bitcast} operation * @@ -910,18 +1027,13 @@ public Bitcast bitcast(Operand input, DataType type) { } /** - * Builds an {@link DecodePaddedRaw} operation + * Builds an {@link Constant} operation * - * @param inputBytes Tensor of string to be decoded. - * @param fixedLength Length in bytes for each element of the decoded output. Must be a multiple - * @param outType - * @param options carries optional attributes values - * @return a new instance of DecodePaddedRaw - * @see org.tensorflow.op.core.DecodePaddedRaw + * @param data An array containing the values to put into the new constant. The dimensions of the + * @see org.tensorflow.op.core.Constant */ - public DecodePaddedRaw decodePaddedRaw(Operand inputBytes, - Operand fixedLength, DataType outType, DecodePaddedRaw.Options... options) { - return DecodePaddedRaw.create(scope, inputBytes, fixedLength, outType, options); + public Constant constant(int[][] data) { + return Constant.create(scope, data); } /** @@ -937,6 +1049,21 @@ public UniqueWithCounts uniqueWithCounts(Opera return UniqueWithCounts.create(scope, x, axis); } + /** + * Builds an {@link DecodePaddedRaw} operation + * + * @param inputBytes Tensor of string to be decoded. + * @param fixedLength Length in bytes for each element of the decoded output. Must be a multiple + * @param outType + * @param options carries optional attributes values + * @return a new instance of DecodePaddedRaw + * @see org.tensorflow.op.core.DecodePaddedRaw + */ + public DecodePaddedRaw decodePaddedRaw(Operand inputBytes, + Operand fixedLength, DataType outType, DecodePaddedRaw.Options... options) { + return DecodePaddedRaw.create(scope, inputBytes, fixedLength, outType, options); + } + /** * Builds an {@link Slice} operation * @@ -969,6 +1096,17 @@ public StatefulRandomB return StatefulRandomBinomial.create(scope, resource, algorithm, shape, counts, probs, dtype); } + /** + * Builds an {@link IsVariableInitialized} operation + * + * @param ref Should be from a `Variable` node. May be uninitialized. + * @return a new instance of IsVariableInitialized + * @see org.tensorflow.op.core.IsVariableInitialized + */ + public IsVariableInitialized isVariableInitialized(Operand ref) { + return IsVariableInitialized.create(scope, ref); + } + /** * Builds an {@link TensorListGather} operation * @@ -995,17 +1133,6 @@ public ZerosLike zerosLike(Operand x) { return ZerosLike.create(scope, x); } - /** - * Builds an {@link IsVariableInitialized} operation - * - * @param ref Should be from a `Variable` node. May be uninitialized. - * @return a new instance of IsVariableInitialized - * @see org.tensorflow.op.core.IsVariableInitialized - */ - public IsVariableInitialized isVariableInitialized(Operand ref) { - return IsVariableInitialized.create(scope, ref); - } - /** * Builds an {@link Unstage} operation * @@ -1018,22 +1145,6 @@ public Unstage unstage(List> dtypes, Unstage.Options... options) { return Unstage.create(scope, dtypes, options); } - /** - * Builds an {@link TensorArrayGather} operation - * - * @param handle The handle to a TensorArray. - * @param indices The locations in the TensorArray from which to read tensor elements. - * @param flowIn A float scalar that enforces proper chaining of operations. - * @param dtype The type of the elem that is returned. - * @param options carries optional attributes values - * @return a new instance of TensorArrayGather - * @see org.tensorflow.op.core.TensorArrayGather - */ - public TensorArrayGather tensorArrayGather(Operand handle, Operand indices, - Operand flowIn, DataType dtype, TensorArrayGather.Options... options) { - return TensorArrayGather.create(scope, handle, indices, flowIn, dtype, options); - } - /** * Builds an {@link StringNGrams} operation * @@ -1054,6 +1165,22 @@ public StringNGrams stringNGrams(Operand data, return StringNGrams.create(scope, data, dataSplits, separator, ngramWidths, leftPad, rightPad, padWidth, preserveShortSequences); } + /** + * Builds an {@link TensorArrayGather} operation + * + * @param handle The handle to a TensorArray. + * @param indices The locations in the TensorArray from which to read tensor elements. + * @param flowIn A float scalar that enforces proper chaining of operations. + * @param dtype The type of the elem that is returned. + * @param options carries optional attributes values + * @return a new instance of TensorArrayGather + * @see org.tensorflow.op.core.TensorArrayGather + */ + public TensorArrayGather tensorArrayGather(Operand handle, Operand indices, + Operand flowIn, DataType dtype, TensorArrayGather.Options... options) { + return TensorArrayGather.create(scope, handle, indices, flowIn, dtype, options); + } + /** * Builds an {@link TensorListScatterV2} operation * @@ -1069,6 +1196,26 @@ public TensorListScatterV2 tensorListScatterV2(Operand return TensorListScatterV2.create(scope, tensor, indices, elementShape, numElements); } + /** + * Builds an {@link Constant} operation + * + * @param data An array containing the values to put into the new constant. The dimensions of the + * @see org.tensorflow.op.core.Constant + */ + public Constant constant(double[][][][][][] data) { + return Constant.create(scope, data); + } + + /** + * Builds an {@link Constant} operation + * + * @param data An array containing the values to put into the new constant. The dimensions of the + * @see org.tensorflow.op.core.Constant + */ + public Constant constant(boolean[][] data) { + return Constant.create(scope, data); + } + /** * Builds an {@link Reverse} operation * @@ -1109,6 +1256,17 @@ public Min min(Operand input, Operand axis, return Min.create(scope, input, axis, options); } + /** + * Builds an {@link OnesLike} operation + * + * @param x a tensor of type T. + * @return a new instance of OnesLike + * @see org.tensorflow.op.core.OnesLike + */ + public OnesLike onesLike(Operand x) { + return OnesLike.create(scope, x); + } + /** * Builds an {@link RefSwitch} operation * @@ -1121,17 +1279,6 @@ public RefSwitch refSwitch(Operand data, Operand pred) { return RefSwitch.create(scope, data, pred); } - /** - * Builds an {@link OnesLike} operation - * - * @param x a tensor of type T. - * @return a new instance of OnesLike - * @see org.tensorflow.op.core.OnesLike - */ - public OnesLike onesLike(Operand x) { - return OnesLike.create(scope, x); - } - /** * Builds an {@link Placeholder} operation * @@ -1156,6 +1303,16 @@ public Fingerprint fingerprint(Operand data, Operand method) { return Fingerprint.create(scope, data, method); } + /** + * Builds an {@link Constant} operation + * + * @param data An array containing the values to put into the new constant. The dimensions of the + * @see org.tensorflow.op.core.Constant + */ + public Constant constant(boolean[][][][][] data) { + return Constant.create(scope, data); + } + /** * Builds an {@link LookupTableInsert} operation * @@ -1170,6 +1327,19 @@ public LookupTableInsert lookupTableInsert(Operand tableHandle, Operan return LookupTableInsert.create(scope, tableHandle, keys, values); } + /** + * Builds an {@link Constant} operation + * + * @param shape the tensor shape. + * @param data a buffer containing the tensor data. + * @return a double constant + * @throws IllegalArgumentException If the tensor shape is not compatible with the buffer + * @see org.tensorflow.op.core.Constant + */ + public Constant constant(long[] shape, DoubleBuffer data) { + return Constant.create(scope, shape, data); + } + /** * Builds an {@link BarrierReadySize} operation * @@ -1195,6 +1365,27 @@ public TensorScatterUpdate tensorScatterUpdate(Operand return TensorScatterUpdate.create(scope, tensor, indices, updates); } + /** + * Builds an {@link Constant} operation + * + * @param data The value to put into the new constant. + * @return a long constant + * @see org.tensorflow.op.core.Constant + */ + public Constant constant(long data) { + return Constant.create(scope, data); + } + + /** + * Builds an {@link Constant} operation + * + * @param data An array containing the values to put into the new constant. The dimensions of the + * @see org.tensorflow.op.core.Constant + */ + public Constant constant(long[][][] data) { + return Constant.create(scope, data); + } + /** * Builds an {@link GetSessionTensor} operation * @@ -1249,6 +1440,16 @@ public ClipByValue clipByValue(Operand t, Operand clipValueMin, return ClipByValue.create(scope, t, clipValueMin, clipValueMax); } + /** + * Builds an {@link Constant} operation + * + * @param data An array containing the values to put into the new constant. The dimensions of the + * @see org.tensorflow.op.core.Constant + */ + public Constant constant(int[][][][] data) { + return Constant.create(scope, data); + } + /** * Builds an {@link TryRpc} operation * @@ -1279,6 +1480,16 @@ public TensorArrayScatter tensorArrayScatter(Operand handle, Operand constant(float[] data) { + return Constant.create(scope, data); + } + /** * Builds an {@link TensorListConcat} operation * @@ -1294,13 +1505,13 @@ public TensorListConcat tensorListConcat(Operand inputHandle, DataType } /** - * Builds an {@link Timestamp} operation + * Builds an {@link Constant} operation * - * @return a new instance of Timestamp - * @see org.tensorflow.op.core.Timestamp + * @param data An array containing the values to put into the new constant. String elements are + * @see org.tensorflow.op.core.Constant */ - public Timestamp timestamp() { - return Timestamp.create(scope); + public Constant constant(byte[][][][] data) { + return Constant.create(scope, data); } /** @@ -1317,6 +1528,16 @@ public StatefulStandardNormalV2 statefulStandardNormalV2(Operand return StatefulStandardNormalV2.create(scope, resource, algorithm, shape); } + /** + * Builds an {@link Timestamp} operation + * + * @return a new instance of Timestamp + * @see org.tensorflow.op.core.Timestamp + */ + public Timestamp timestamp() { + return Timestamp.create(scope); + } + /** * Builds an {@link ScatterNdNonAliasingAdd} operation * @@ -1356,6 +1577,16 @@ public HashTable hashTable(DataType keyDtype, DataType valueDtype, return HashTable.create(scope, keyDtype, valueDtype, options); } + /** + * Builds an {@link Constant} operation + * + * @param data An array containing the values to put into the new constant. The dimensions of the + * @see org.tensorflow.op.core.Constant + */ + public Constant constant(double[][][][] data) { + return Constant.create(scope, data); + } + /** * Builds an {@link QuantizedConcatV2} operation * @@ -1371,6 +1602,26 @@ public QuantizedConcatV2 quantizedConcatV2(Iterable constant(boolean[][][][][][] data) { + return Constant.create(scope, data); + } + + /** + * Builds an {@link Constant} operation + * + * @param data An array containing the values to put into the new constant. String elements are + * @see org.tensorflow.op.core.Constant + */ + public Constant constant(byte[] data) { + return Constant.create(scope, data); + } + /** * Builds an {@link UnbatchGrad} operation * @@ -1500,6 +1751,20 @@ public Stack stack(Iterable> values, Stack.Options... options) return Stack.create(scope, values, options); } + /** + * Builds an {@link TemporaryVariable} operation + * + * @param shape The shape of the variable tensor. + * @param dtype The type of elements in the variable tensor. + * @param options carries optional attributes values + * @return a new instance of TemporaryVariable + * @see org.tensorflow.op.core.TemporaryVariable + */ + public TemporaryVariable temporaryVariable(Shape shape, DataType dtype, + TemporaryVariable.Options... options) { + return TemporaryVariable.create(scope, shape, dtype, options); + } + /** * Builds an {@link VariableShape} operation * @@ -1511,6 +1776,16 @@ public VariableShape variableShape(Operand input) { return VariableShape.create(scope, input); } + /** + * Builds an {@link Constant} operation + * + * @param data An array containing the values to put into the new constant. The dimensions of the + * @see org.tensorflow.op.core.Constant + */ + public Constant constant(boolean[][][] data) { + return Constant.create(scope, data); + } + /** * Builds an {@link TensorScatterAdd} operation * @@ -1525,6 +1800,16 @@ public TensorScatterAdd tensorScatterAdd(Operand te return TensorScatterAdd.create(scope, tensor, indices, updates); } + /** + * Builds an {@link Constant} operation + * + * @param data An array containing the values to put into the new constant. The dimensions of the + * @see org.tensorflow.op.core.Constant + */ + public Constant constant(boolean[] data) { + return Constant.create(scope, data); + } + /** * Builds an {@link Stage} operation * @@ -1580,6 +1865,17 @@ public DynamicPartition dynamicPartition(Operand data, Operand return DynamicPartition.create(scope, data, partitions, numPartitions); } + /** + * Builds an {@link Constant} operation + * + * @param data The value to put into the new constant. + * @return a float constant + * @see org.tensorflow.op.core.Constant + */ + public Constant constant(float data) { + return Constant.create(scope, data); + } + /** * Builds an {@link BarrierInsertMany} operation * @@ -1633,6 +1929,18 @@ public Bucketize bucketize(Operand input, List bou return Bucketize.create(scope, input, boundaries); } + /** + * Builds an {@link EnsureShape} operation + * + * @param input A tensor, whose shape is to be validated. + * @param shape The expected (possibly partially specified) shape of the input tensor. + * @return a new instance of EnsureShape + * @see org.tensorflow.op.core.EnsureShape + */ + public EnsureShape ensureShape(Operand input, Shape shape) { + return EnsureShape.create(scope, input, shape); + } + /** * Builds an {@link CountUpTo} operation * @@ -1664,29 +1972,15 @@ public ScatterMin scatterMin(Operand key, Operand indices, List> dtypes, - MapPeek.Options... options) { - return MapPeek.create(scope, key, indices, dtypes, options); - } - - /** - * Builds an {@link TensorListScatterIntoExistingList} operation - * - * @param inputHandle - * @param tensor - * @param indices - * @return a new instance of TensorListScatterIntoExistingList - * @see org.tensorflow.op.core.TensorListScatterIntoExistingList + * @param indices + * @param dtypes + * @param options carries optional attributes values + * @return a new instance of MapPeek + * @see org.tensorflow.op.core.MapPeek */ - public TensorListScatterIntoExistingList tensorListScatterIntoExistingList( - Operand inputHandle, Operand tensor, Operand indices) { - return TensorListScatterIntoExistingList.create(scope, inputHandle, tensor, indices); + public MapPeek mapPeek(Operand key, Operand indices, List> dtypes, + MapPeek.Options... options) { + return MapPeek.create(scope, key, indices, dtypes, options); } /** @@ -1706,6 +2000,20 @@ public ScaleAndTranslate scaleAndTranslate(Operand images return ScaleAndTranslate.create(scope, images, size, scale, translation, options); } + /** + * Builds an {@link TensorListScatterIntoExistingList} operation + * + * @param inputHandle + * @param tensor + * @param indices + * @return a new instance of TensorListScatterIntoExistingList + * @see org.tensorflow.op.core.TensorListScatterIntoExistingList + */ + public TensorListScatterIntoExistingList tensorListScatterIntoExistingList( + Operand inputHandle, Operand tensor, Operand indices) { + return TensorListScatterIntoExistingList.create(scope, inputHandle, tensor, indices); + } + /** * Builds an {@link SpaceToBatchNd} operation * @@ -1784,6 +2092,16 @@ public MirrorPad mirrorPad(Operand input, Operand constant(long[] data) { + return Constant.create(scope, data); + } + /** * Builds an {@link TensorListReserve} operation * @@ -1798,6 +2116,16 @@ public TensorListReserve tensorListReserve(Operand ele return TensorListReserve.create(scope, elementShape, numElements, elementDtype); } + /** + * Builds an {@link Constant} operation + * + * @param data An array containing the values to put into the new constant. The dimensions of the + * @see org.tensorflow.op.core.Constant + */ + public Constant constant(double[] data) { + return Constant.create(scope, data); + } + /** * Builds an {@link StatefulStandardNormal} operation * @@ -1842,6 +2170,21 @@ public Unbatch unbatch(Operand batchedTensor, Operand batchInd return Unbatch.create(scope, batchedTensor, batchIndex, id, timeoutMicros, options); } + /** + * Builds an {@link Gradients} operation + * + * @param y outputs of the function to derive + * @param x inputs of the function for which partial derivatives are computed + * @param options carries optional attributes values + * @return a new instance of {@code Gradients} + * @throws IllegalArgumentException if execution environment is not a graph + * @see org.tensorflow.op.core.Gradients + */ + public Gradients gradients(Iterable> y, Iterable> x, + Gradients.Options... options) { + return Gradients.create(scope, y, x, options); + } + /** * Builds an {@link BatchToSpaceNd} operation * @@ -1866,21 +2209,6 @@ public NoOp noOp() { return NoOp.create(scope); } - /** - * Builds an {@link ScatterNdSub} operation - * - * @param ref A mutable Tensor. Should be from a Variable node. - * @param indices A Tensor. Must be one of the following types: int32, int64. - * @param updates A Tensor. Must have the same type as ref. A tensor of updated values - * @param options carries optional attributes values - * @return a new instance of ScatterNdSub - * @see org.tensorflow.op.core.ScatterNdSub - */ - public ScatterNdSub scatterNdSub(Operand ref, Operand indices, - Operand updates, ScatterNdSub.Options... options) { - return ScatterNdSub.create(scope, ref, indices, updates, options); - } - /** * Builds an {@link ResourceApplyKerasMomentum} operation * @@ -1899,6 +2227,21 @@ public ResourceApplyKerasMomentum resourceApplyKerasMomentum(Operand var, return ResourceApplyKerasMomentum.create(scope, var, accum, lr, grad, momentum, options); } + /** + * Builds an {@link ScatterNdSub} operation + * + * @param ref A mutable Tensor. Should be from a Variable node. + * @param indices A Tensor. Must be one of the following types: int32, int64. + * @param updates A Tensor. Must have the same type as ref. A tensor of updated values + * @param options carries optional attributes values + * @return a new instance of ScatterNdSub + * @see org.tensorflow.op.core.ScatterNdSub + */ + public ScatterNdSub scatterNdSub(Operand ref, Operand indices, + Operand updates, ScatterNdSub.Options... options) { + return ScatterNdSub.create(scope, ref, indices, updates, options); + } + /** * Builds an {@link TensorListLength} operation * @@ -1923,20 +2266,6 @@ public OrderedMapClear orderedMapClear(List> dtypes, return OrderedMapClear.create(scope, dtypes, options); } - /** - * Builds an {@link ImmutableConst} operation - * - * @param dtype Type of the returned tensor. - * @param shape Shape of the returned tensor. - * @param memoryRegionName Name of readonly memory region used by the tensor, see - * @return a new instance of ImmutableConst - * @see org.tensorflow.op.core.ImmutableConst - */ - public ImmutableConst immutableConst(DataType dtype, Shape shape, - String memoryRegionName) { - return ImmutableConst.create(scope, dtype, shape, memoryRegionName); - } - /** * Builds an {@link StopGradient} operation * @@ -1972,6 +2301,19 @@ public Skipgram skipgram(String filename, Long batchSize, Skipgram.Options... op return Skipgram.create(scope, filename, batchSize, options); } + /** + * Builds an {@link Variable} operation + * + * @param shape The shape of the variable tensor. + * @param dtype The type of elements in the variable tensor. + * @param options carries optional attributes values + * @return a new instance of Variable + * @see org.tensorflow.op.core.Variable + */ + public Variable variable(Shape shape, DataType dtype, Variable.Options... options) { + return Variable.create(scope, shape, dtype, options); + } + /** * Builds an {@link TensorArrayClose} operation * @@ -2063,6 +2405,18 @@ public ShapeN shapeN(Iterable> input, DataT return ShapeN.create(scope, input, outType); } + /** + * Builds an {@link Constant} operation + * + * @param object a Java object representing the constant. + * @return a constant of type `type` + * @see org.tensorflow.Tensor#create(Object) Tensor.create + * @see org.tensorflow.op.core.Constant + */ + public Constant constant(Object object, DataType type) { + return Constant.create(scope, object, type); + } + /** * Builds an {@link InitializeTableFromTextFile} operation * @@ -2080,6 +2434,18 @@ public InitializeTableFromTextFile initializeTableFromTextFile(Operand tableH return InitializeTableFromTextFile.create(scope, tableHandle, filename, keyIndex, valueIndex, options); } + /** + * Builds an {@link Lu} operation + * + * @param input A tensor of shape `[..., M, M]` whose inner-most 2 dimensions form matrices of + * @param outputIdxType + * @return a new instance of Lu + * @see org.tensorflow.op.core.Lu + */ + public Lu lu(Operand input, DataType outputIdxType) { + return Lu.create(scope, input, outputIdxType); + } + /** * Builds an {@link AssignAddVariableOp} operation * @@ -2093,15 +2459,16 @@ public AssignAddVariableOp assignAddVariableOp(Operand resource, Operand< } /** - * Builds an {@link Lu} operation + * Builds an {@link ParallelDynamicStitch} operation * - * @param input A tensor of shape `[..., M, M]` whose inner-most 2 dimensions form matrices of - * @param outputIdxType - * @return a new instance of Lu - * @see org.tensorflow.op.core.Lu + * @param indices + * @param data + * @return a new instance of ParallelDynamicStitch + * @see org.tensorflow.op.core.ParallelDynamicStitch */ - public Lu lu(Operand input, DataType outputIdxType) { - return Lu.create(scope, input, outputIdxType); + public ParallelDynamicStitch parallelDynamicStitch(Iterable> indices, + Iterable> data) { + return ParallelDynamicStitch.create(scope, indices, data); } /** @@ -2118,19 +2485,6 @@ public ResourceScatterSub resourceScatterSub(Operand r return ResourceScatterSub.create(scope, resource, indices, updates); } - /** - * Builds an {@link ParallelDynamicStitch} operation - * - * @param indices - * @param data - * @return a new instance of ParallelDynamicStitch - * @see org.tensorflow.op.core.ParallelDynamicStitch - */ - public ParallelDynamicStitch parallelDynamicStitch(Iterable> indices, - Iterable> data) { - return ParallelDynamicStitch.create(scope, indices, data); - } - /** * Builds an {@link AssignSub} operation * @@ -2167,17 +2521,6 @@ public Size size(Operand input) { return Size.create(scope, input); } - /** - * Builds an {@link Mutex} operation - * - * @param options carries optional attributes values - * @return a new instance of Mutex - * @see org.tensorflow.op.core.Mutex - */ - public Mutex mutex(Mutex.Options... options) { - return Mutex.create(scope, options); - } - /** * Builds an {@link StatefulRandomBinomial} operation * @@ -2195,6 +2538,17 @@ public StatefulRandomBinomial sta return StatefulRandomBinomial.create(scope, resource, algorithm, shape, counts, probs); } + /** + * Builds an {@link Mutex} operation + * + * @param options carries optional attributes values + * @return a new instance of Mutex + * @see org.tensorflow.op.core.Mutex + */ + public Mutex mutex(Mutex.Options... options) { + return Mutex.create(scope, options); + } + /** * Builds an {@link Split} operation * @@ -2370,6 +2724,17 @@ public TensorListStack tensorListStack(Operand inputHandle, return TensorListStack.create(scope, inputHandle, elementShape, elementDtype, options); } + /** + * Builds an {@link Constant} operation + * + * @param data The value to put into the new constant. + * @return an integer constant + * @see org.tensorflow.op.core.Constant + */ + public Constant constant(int data) { + return Constant.create(scope, data); + } + /** * Builds an {@link CudnnRNNParamsToCanonicalV2} operation * @@ -2418,17 +2783,13 @@ public BroadcastDynamicShape broadcastDynamicShape(Operan } /** - * Builds an {@link TemporaryVariable} operation + * Builds an {@link Constant} operation * - * @param shape The shape of the variable tensor. - * @param dtype The type of elements in the variable tensor. - * @param options carries optional attributes values - * @return a new instance of TemporaryVariable - * @see org.tensorflow.op.core.TemporaryVariable + * @param data An array containing the values to put into the new constant. String elements are + * @see org.tensorflow.op.core.Constant */ - public TemporaryVariable temporaryVariable(Shape shape, DataType dtype, - TemporaryVariable.Options... options) { - return TemporaryVariable.create(scope, shape, dtype, options); + public Constant constant(byte[][] data) { + return Constant.create(scope, data); } /** @@ -2445,21 +2806,6 @@ public ResourceScatterMax resourceScatterMax(Operand r return ResourceScatterMax.create(scope, resource, indices, updates); } - /** - * Builds an {@link Rpc} operation - * - * @param address `0-D` or `1-D`. The address (i.e. host_name:port) of the RPC server. - * @param method `0-D` or `1-D`. The method address on the RPC server. - * @param request `0-D` or `1-D`. Serialized proto strings: the rpc request argument. - * @param options carries optional attributes values - * @return a new instance of Rpc - * @see org.tensorflow.op.core.Rpc - */ - public Rpc rpc(Operand address, Operand method, Operand request, - Rpc.Options... options) { - return Rpc.create(scope, address, method, request, options); - } - /** * Builds an {@link Roll} operation * @@ -2488,6 +2834,21 @@ public LookupTableImport lookupTableImport(Operand tableHandle, Operan return LookupTableImport.create(scope, tableHandle, keys, values); } + /** + * Builds an {@link Rpc} operation + * + * @param address `0-D` or `1-D`. The address (i.e. host_name:port) of the RPC server. + * @param method `0-D` or `1-D`. The method address on the RPC server. + * @param request `0-D` or `1-D`. Serialized proto strings: the rpc request argument. + * @param options carries optional attributes values + * @return a new instance of Rpc + * @see org.tensorflow.op.core.Rpc + */ + public Rpc rpc(Operand address, Operand method, Operand request, + Rpc.Options... options) { + return Rpc.create(scope, address, method, request, options); + } + /** * Builds an {@link DestroyResourceOp} operation * @@ -2597,6 +2958,17 @@ public TensorListGetItem tensorListGetItem(Operand inputHandle, Operan return TensorListGetItem.create(scope, inputHandle, index, elementShape, elementDtype); } + /** + * Builds an {@link ConsumeMutexLock} operation + * + * @param mutexLock A tensor returned by `MutexLock`. + * @return a new instance of ConsumeMutexLock + * @see org.tensorflow.op.core.ConsumeMutexLock + */ + public ConsumeMutexLock consumeMutexLock(Operand mutexLock) { + return ConsumeMutexLock.create(scope, mutexLock); + } + /** * Builds an {@link TensorArrayWrite} operation * @@ -2627,17 +2999,6 @@ public SplitV splitV(Operand value, Operand size return SplitV.create(scope, value, sizeSplits, axis, numSplit); } - /** - * Builds an {@link ConsumeMutexLock} operation - * - * @param mutexLock A tensor returned by `MutexLock`. - * @return a new instance of ConsumeMutexLock - * @see org.tensorflow.op.core.ConsumeMutexLock - */ - public ConsumeMutexLock consumeMutexLock(Operand mutexLock) { - return ConsumeMutexLock.create(scope, mutexLock); - } - /** * Builds an {@link ScatterDiv} operation * @@ -2775,6 +3136,16 @@ public TensorArrayConcat tensorArrayConcat(Operand handle, Operand constant(double[][] data) { + return Constant.create(scope, data); + } + /** * Builds an {@link Where3} operation * @@ -2788,6 +3159,26 @@ public Where3 where3(Operand condition, Operand x, Operand y return Where3.create(scope, condition, x, y); } + /** + * Builds an {@link Constant} operation + * + * @param data An array containing the values to put into the new constant. The dimensions of the + * @see org.tensorflow.op.core.Constant + */ + public Constant constant(float[][][][][] data) { + return Constant.create(scope, data); + } + + /** + * Builds an {@link Constant} operation + * + * @param data An array containing the values to put into the new constant. The dimensions of the + * @see org.tensorflow.op.core.Constant + */ + public Constant constant(double[][][][][] data) { + return Constant.create(scope, data); + } + /** * Builds an {@link BatchMatMulV2} operation * @@ -2908,16 +3299,23 @@ public Abort abort(Abort.Options... options) { } /** - * Builds an {@link TensorListElementShape} operation + * Builds an {@link Constant} operation * - * @param inputHandle - * @param shapeType - * @return a new instance of TensorListElementShape - * @see org.tensorflow.op.core.TensorListElementShape + * @param data An array containing the values to put into the new constant. The dimensions of the + * @see org.tensorflow.op.core.Constant + */ + public Constant constant(long[][][][] data) { + return Constant.create(scope, data); + } + + /** + * Builds an {@link Constant} operation + * + * @param data An array containing the values to put into the new constant. String elements are + * @see org.tensorflow.op.core.Constant */ - public TensorListElementShape tensorListElementShape( - Operand inputHandle, DataType shapeType) { - return TensorListElementShape.create(scope, inputHandle, shapeType); + public Constant constant(byte[][][][][] data) { + return Constant.create(scope, data); } /** @@ -2945,15 +3343,16 @@ public OrderedMapIncompleteSize orderedMapIncompleteSize(List> dtype } /** - * Builds an {@link EnsureShape} operation + * Builds an {@link TensorListElementShape} operation * - * @param input A tensor, whose shape is to be validated. - * @param shape The expected (possibly partially specified) shape of the input tensor. - * @return a new instance of EnsureShape - * @see org.tensorflow.op.core.EnsureShape + * @param inputHandle + * @param shapeType + * @return a new instance of TensorListElementShape + * @see org.tensorflow.op.core.TensorListElementShape */ - public EnsureShape ensureShape(Operand input, Shape shape) { - return EnsureShape.create(scope, input, shape); + public TensorListElementShape tensorListElementShape( + Operand inputHandle, DataType shapeType) { + return TensorListElementShape.create(scope, inputHandle, shapeType); } /** @@ -2999,6 +3398,20 @@ public LookupTableExport lookupTableExport(Operand tableHandle, return LookupTableExport.create(scope, tableHandle, Tkeys, Tvalues); } + /** + * Builds an {@link ReduceMax} operation + * + * @param input The tensor to reduce. + * @param axis The dimensions to reduce. Must be in the range + * @param options carries optional attributes values + * @return a new instance of ReduceMax + * @see org.tensorflow.op.core.ReduceMax + */ + public ReduceMax reduceMax(Operand input, Operand axis, + ReduceMax.Options... options) { + return ReduceMax.create(scope, input, axis, options); + } + /** * Builds an {@link ReadVariableOp} operation * @@ -3012,17 +3425,16 @@ public ReadVariableOp readVariableOp(Operand resource, DataType dty } /** - * Builds an {@link ReduceMax} operation + * Builds an {@link Zeros} operation * - * @param input The tensor to reduce. - * @param axis The dimensions to reduce. Must be in the range - * @param options carries optional attributes values - * @return a new instance of ReduceMax - * @see org.tensorflow.op.core.ReduceMax + * @param dims a 1-D operand that represents the shape of the output tensor + * @param type the output tensor datatype + * @return a constant tensor initialized with zeros + * @throws IllegalArgumentException if the tensor type or shape cannot be initialized with zeros. + * @see org.tensorflow.op.core.Zeros */ - public ReduceMax reduceMax(Operand input, Operand axis, - ReduceMax.Options... options) { - return ReduceMax.create(scope, input, axis, options); + public Zeros zeros(Operand dims, DataType type) { + return Zeros.create(scope, dims, type); } /** @@ -3155,6 +3567,16 @@ public Reshape reshape(Operand tensor, Operand s return Reshape.create(scope, tensor, shape); } + /** + * Builds an {@link Constant} operation + * + * @param data An array containing the values to put into the new constant. The dimensions of the + * @see org.tensorflow.op.core.Constant + */ + public Constant constant(float[][][][][][] data) { + return Constant.create(scope, data); + } + /** * Builds an {@link OneHot} operation * @@ -3182,6 +3604,16 @@ public Where where(Operand condition) { return Where.create(scope, condition); } + /** + * Builds an {@link Constant} operation + * + * @param data An array containing the values to put into the new constant. The dimensions of the + * @see org.tensorflow.op.core.Constant + */ + public Constant constant(int[][][][][] data) { + return Constant.create(scope, data); + } + /** * Builds an {@link MutableHashTableOfTensors} operation * @@ -3196,6 +3628,19 @@ public MutableHashTableOfTensors mutableHashTableOfTensors(DataType ke return MutableHashTableOfTensors.create(scope, keyDtype, valueDtype, options); } + /** + * Builds an {@link Constant} operation + * + * @param shape the tensor shape. + * @param data a buffer containing the tensor data. + * @return an integer constant + * @throws IllegalArgumentException If the tensor shape is not compatible with the buffer + * @see org.tensorflow.op.core.Constant + */ + public Constant constant(long[] shape, IntBuffer data) { + return Constant.create(scope, shape, data); + } + /** * Builds an {@link UniqueWithCounts} operation * @@ -3210,6 +3655,16 @@ public UniqueWithCounts uniqueWi return UniqueWithCounts.create(scope, x, axis, outIdx); } + /** + * Builds an {@link Constant} operation + * + * @param data An array containing the values to put into the new constant. The dimensions of the + * @see org.tensorflow.op.core.Constant + */ + public Constant constant(long[][][][][] data) { + return Constant.create(scope, data); + } + /** * Builds an {@link ResourceScatterNdAdd} operation * @@ -3240,15 +3695,13 @@ public HistogramFixedWidth histogramFixedWidth(Opera } /** - * Builds an {@link VariableShape} operation + * Builds an {@link Constant} operation * - * @param input - * @param outType - * @return a new instance of VariableShape - * @see org.tensorflow.op.core.VariableShape + * @param data An array containing the values to put into the new constant. The dimensions of the + * @see org.tensorflow.op.core.Constant */ - public VariableShape variableShape(Operand input, DataType outType) { - return VariableShape.create(scope, input, outType); + public Constant constant(boolean[][][][] data) { + return Constant.create(scope, data); } /** @@ -3266,6 +3719,18 @@ public MapUnstage mapUnstage(Operand key, Operand indices, return MapUnstage.create(scope, key, indices, dtypes, options); } + /** + * Builds an {@link VariableShape} operation + * + * @param input + * @param outType + * @return a new instance of VariableShape + * @see org.tensorflow.op.core.VariableShape + */ + public VariableShape variableShape(Operand input, DataType outType) { + return VariableShape.create(scope, input, outType); + } + /** * Builds an {@link Concat} operation * @@ -3290,6 +3755,20 @@ public BarrierClose barrierClose(Operand handle, BarrierClose.Options.. return BarrierClose.create(scope, handle, options); } + /** + * Builds an {@link Constant} operation + * + * @param type the tensor datatype. + * @param shape the tensor shape. + * @param data a buffer containing the tensor data. + * @return a constant of type `type` + * @throws IllegalArgumentException If the tensor datatype or shape is not compatible with the + * @see org.tensorflow.op.core.Constant + */ + public Constant constant(DataType type, long[] shape, ByteBuffer data) { + return Constant.create(scope, type, shape, data); + } + /** * Builds an {@link IdentityN} operation * @@ -3314,20 +3793,6 @@ public InplaceSub inplaceSub(Operand x, Operand i, Operand return InplaceSub.create(scope, x, i, v); } - /** - * Builds an {@link VarHandleOp} operation - * - * @param dtype the type of this variable. Must agree with the dtypes - * @param shape The (possibly partially specified) shape of this variable. - * @param options carries optional attributes values - * @return a new instance of VarHandleOp - * @see org.tensorflow.op.core.VarHandleOp - */ - public VarHandleOp varHandleOp(DataType dtype, Shape shape, - VarHandleOp.Options... options) { - return VarHandleOp.create(scope, dtype, shape, options); - } - /** * Builds an {@link TensorArraySplit} operation * @@ -3343,6 +3808,16 @@ public TensorArraySplit tensorArraySplit(Operand handle, Operand value return TensorArraySplit.create(scope, handle, value, lengths, flowIn); } + /** + * Builds an {@link Constant} operation + * + * @param data An array containing the values to put into the new constant. The dimensions of the + * @see org.tensorflow.op.core.Constant + */ + public Constant constant(int[][][][][][] data) { + return Constant.create(scope, data); + } + /** * Builds an {@link DeepCopy} operation * @@ -3368,6 +3843,31 @@ public StagePeek stagePeek(Operand index, List> dtypes, return StagePeek.create(scope, index, dtypes, options); } + /** + * Builds an {@link Constant} operation + * + * @param data The value to put into the new constant. + * @return a double constant + * @see org.tensorflow.op.core.Constant + */ + public Constant constant(double data) { + return Constant.create(scope, data); + } + + /** + * Builds an {@link VarHandleOp} operation + * + * @param dtype the type of this variable. Must agree with the dtypes + * @param shape The (possibly partially specified) shape of this variable. + * @param options carries optional attributes values + * @return a new instance of VarHandleOp + * @see org.tensorflow.op.core.VarHandleOp + */ + public VarHandleOp varHandleOp(DataType dtype, Shape shape, + VarHandleOp.Options... options) { + return VarHandleOp.create(scope, dtype, shape, options); + } + /** * Builds an {@link ResourceApplyAdamWithAmsgrad} operation * @@ -3450,6 +3950,29 @@ public ExtractVolumePatches extractVolumePatches(Operand< return ExtractVolumePatches.create(scope, input, ksizes, strides, padding); } + /** + * Builds an {@link Constant} operation + * + * @param data An array containing the values to put into the new constant. The dimensions of the + * @see org.tensorflow.op.core.Constant + */ + public Constant constant(float[][] data) { + return Constant.create(scope, data); + } + + /** + * Builds an {@link SelectV2} operation + * + * @param condition + * @param t + * @param e + * @return a new instance of SelectV2 + * @see org.tensorflow.op.core.SelectV2 + */ + public SelectV2 selectV2(Operand condition, Operand t, Operand e) { + return SelectV2.create(scope, condition, t, e); + } + /** * Builds an {@link ResourceSparseApplyKerasMomentum} operation * @@ -3469,19 +3992,6 @@ public ResourceSparseApplyKerasMomentum resourceSparseApp return ResourceSparseApplyKerasMomentum.create(scope, var, accum, lr, grad, indices, momentum, options); } - /** - * Builds an {@link SelectV2} operation - * - * @param condition - * @param t - * @param e - * @return a new instance of SelectV2 - * @see org.tensorflow.op.core.SelectV2 - */ - public SelectV2 selectV2(Operand condition, Operand t, Operand e) { - return SelectV2.create(scope, condition, t, e); - } - /** * Builds an {@link AssignVariableOp} operation * @@ -3521,15 +4031,13 @@ public Max max(Operand input, Operand axis, } /** - * Builds an {@link PlaceholderWithDefault} operation + * Builds an {@link Constant} operation * - * @param input The default value to produce when `output` is not fed. - * @param shape The (possibly partial) shape of the tensor. - * @return a new instance of PlaceholderWithDefault - * @see org.tensorflow.op.core.PlaceholderWithDefault + * @param data An array containing the values to put into the new constant. The dimensions of the + * @see org.tensorflow.op.core.Constant */ - public PlaceholderWithDefault placeholderWithDefault(Operand input, Shape shape) { - return PlaceholderWithDefault.create(scope, input, shape); + public Constant constant(int[][][] data) { + return Constant.create(scope, data); } /** @@ -3586,6 +4094,18 @@ public EmptyTensorList emptyTensorList(Operand element return EmptyTensorList.create(scope, elementShape, maxNumElements, elementDtype); } + /** + * Builds an {@link PlaceholderWithDefault} operation + * + * @param input The default value to produce when `output` is not fed. + * @param shape The (possibly partial) shape of the tensor. + * @return a new instance of PlaceholderWithDefault + * @see org.tensorflow.op.core.PlaceholderWithDefault + */ + public PlaceholderWithDefault placeholderWithDefault(Operand input, Shape shape) { + return PlaceholderWithDefault.create(scope, input, shape); + } + /** * Builds an {@link DeleteSessionTensor} operation * @@ -3636,6 +4156,18 @@ public Empty empty(Operand shape, DataType dtype, Empty.Option return Empty.create(scope, shape, dtype, options); } + /** + * Builds an {@link SetDiff1d} operation + * + * @param x 1-D. Values to keep. + * @param y 1-D. Values to remove. + * @return a new instance of SetDiff1d + * @see org.tensorflow.op.core.SetDiff1d + */ + public SetDiff1d setDiff1d(Operand x, Operand y) { + return SetDiff1d.create(scope, x, y); + } + /** * Builds an {@link ScatterNd} operation * @@ -3650,18 +4182,6 @@ public ScatterNd scatterNd(Operand indices, Operand return ScatterNd.create(scope, indices, updates, shape); } - /** - * Builds an {@link SetDiff1d} operation - * - * @param x 1-D. Values to keep. - * @param y 1-D. Values to remove. - * @return a new instance of SetDiff1d - * @see org.tensorflow.op.core.SetDiff1d - */ - public SetDiff1d setDiff1d(Operand x, Operand y) { - return SetDiff1d.create(scope, x, y); - } - /** * Builds an {@link Rank} operation * @@ -3745,15 +4265,23 @@ public Pad pad(Operand input, Operand paddings, } /** - * Builds an {@link ParallelConcat} operation + * Builds an {@link Constant} operation * - * @param values Tensors to be concatenated. All must have size 1 in the first dimension - * @param shape the final shape of the result; should be equal to the shapes of any input - * @return a new instance of ParallelConcat - * @see org.tensorflow.op.core.ParallelConcat + * @param data An array containing the values to put into the new constant. The dimensions of the + * @see org.tensorflow.op.core.Constant */ - public ParallelConcat parallelConcat(Iterable> values, Shape shape) { - return ParallelConcat.create(scope, values, shape); + public Constant constant(double[][][] data) { + return Constant.create(scope, data); + } + + /** + * Builds an {@link Constant} operation + * + * @param data An array containing the values to put into the new constant. The dimensions of the + * @see org.tensorflow.op.core.Constant + */ + public Constant constant(float[][][][] data) { + return Constant.create(scope, data); } /** @@ -3779,6 +4307,17 @@ public LookupTableSize lookupTableSize(Operand tableHandle) { return LookupTableSize.create(scope, tableHandle); } + /** + * Builds an {@link Snapshot} operation + * + * @param input + * @return a new instance of Snapshot + * @see org.tensorflow.op.core.Snapshot + */ + public Snapshot snapshot(Operand input) { + return Snapshot.create(scope, input); + } + /** * Builds an {@link ReduceAny} operation * @@ -3793,17 +4332,6 @@ public ReduceAny reduceAny(Operand input, Operand return ReduceAny.create(scope, input, axis, options); } - /** - * Builds an {@link Snapshot} operation - * - * @param input - * @return a new instance of Snapshot - * @see org.tensorflow.op.core.Snapshot - */ - public Snapshot snapshot(Operand input) { - return Snapshot.create(scope, input); - } - /** * Builds an {@link CombinedNonMaxSuppression} operation * @@ -3853,6 +4381,16 @@ public ResourceScatterNdSub resourceScatterNdSub(Operand< return ResourceScatterNdSub.create(scope, ref, indices, updates, options); } + /** + * Builds an {@link Constant} operation + * + * @param data An array containing the values to put into the new constant. The dimensions of the + * @see org.tensorflow.op.core.Constant + */ + public Constant constant(long[][][][][][] data) { + return Constant.create(scope, data); + } + /** * Builds an {@link StageSize} operation * @@ -3865,6 +4403,27 @@ public StageSize stageSize(List> dtypes, StageSize.Options... option return StageSize.create(scope, dtypes, options); } + /** + * Builds an {@link Constant} operation + * + * @param data An array containing the values to put into the new constant. The dimensions of the + * @see org.tensorflow.op.core.Constant + */ + public Constant constant(long[][] data) { + return Constant.create(scope, data); + } + + /** + * Builds an {@link Constant} operation + * + * @param tensor a Tensor holding the constant value + * @return a constant of the same data type as `tensor` + * @see org.tensorflow.op.core.Constant + */ + public Constant constant(Tensor tensor) { + return Constant.create(scope, tensor); + } + /** * Builds an {@link LoopCond} operation * @@ -3963,6 +4522,18 @@ public Barrier barrier(List> componentTypes, Barrier.Options... opti return Barrier.create(scope, componentTypes, options); } + /** + * Builds an {@link Constant} operation + * + * @param charset The encoding from String to bytes. + * @param data The string to put into the new constant. + * @return a string constant + * @see org.tensorflow.op.core.Constant + */ + public Constant constant(String data, Charset charset) { + return Constant.create(scope, data, charset); + } + /** * Builds an {@link ControlTrigger} operation * @@ -3984,6 +4555,17 @@ public ShapeN shapeN(Iterable> input) { return ShapeN.create(scope, input); } + /** + * Builds an {@link Constant} operation + * + * @param data The value to put into the new constant. + * @return a boolean constant + * @see org.tensorflow.op.core.Constant + */ + public Constant constant(boolean data) { + return Constant.create(scope, data); + } + /** * Returns an API that builds operations with the provided name prefix. * diff --git a/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/QuantizationOps.java b/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/QuantizationOps.java index 411662b6b55..c6ee0dbe632 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/QuantizationOps.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/QuantizationOps.java @@ -44,6 +44,21 @@ public FakeQuantWithMinMaxArgsGradient fakeQuantWithMinMaxArgsGradient(Operand Dequantize dequantize(Operand input, Operand minRange, + Operand maxRange, Dequantize.Options... options) { + return Dequantize.create(scope, input, minRange, maxRange, options); + } + /** * Builds an {@link FakeQuantWithMinMaxVarsGradient} operation * @@ -61,21 +76,6 @@ public FakeQuantWithMinMaxVarsGradient fakeQuantWithMinMaxVarsGradient(Operand Dequantize dequantize(Operand input, Operand minRange, - Operand maxRange, Dequantize.Options... options) { - return Dequantize.create(scope, input, minRange, maxRange, options); - } - /** * Builds an {@link Requantize} operation * @@ -94,23 +94,6 @@ public Requantize requantize(Operand input, Operand inputMi return Requantize.create(scope, input, inputMin, inputMax, requestedOutputMin, requestedOutputMax, outType); } - /** - * Builds an {@link FakeQuantWithMinMaxVarsPerChannelGradient} operation - * - * @param gradients Backpropagated gradients above the FakeQuantWithMinMaxVars operation, - * @param inputs Values passed as inputs to the FakeQuantWithMinMaxVars operation, shape - * @param min - * @param max - * @param options carries optional attributes values - * @return a new instance of FakeQuantWithMinMaxVarsPerChannelGradient - * @see org.tensorflow.op.quantization.FakeQuantWithMinMaxVarsPerChannelGradient - */ - public FakeQuantWithMinMaxVarsPerChannelGradient fakeQuantWithMinMaxVarsPerChannelGradient( - Operand gradients, Operand inputs, Operand min, Operand max, - FakeQuantWithMinMaxVarsPerChannelGradient.Options... options) { - return FakeQuantWithMinMaxVarsPerChannelGradient.create(scope, gradients, inputs, min, max, options); - } - /** * Builds an {@link QuantizeAndDequantize} operation * @@ -129,17 +112,20 @@ public QuantizeAndDequantize quantizeAndDequantize(Operan } /** - * Builds an {@link RequantizationRange} operation + * Builds an {@link FakeQuantWithMinMaxVarsPerChannelGradient} operation * - * @param input - * @param inputMin The float value that the minimum quantized input value represents. - * @param inputMax The float value that the maximum quantized input value represents. - * @return a new instance of RequantizationRange - * @see org.tensorflow.op.quantization.RequantizationRange + * @param gradients Backpropagated gradients above the FakeQuantWithMinMaxVars operation, + * @param inputs Values passed as inputs to the FakeQuantWithMinMaxVars operation, shape + * @param min + * @param max + * @param options carries optional attributes values + * @return a new instance of FakeQuantWithMinMaxVarsPerChannelGradient + * @see org.tensorflow.op.quantization.FakeQuantWithMinMaxVarsPerChannelGradient */ - public RequantizationRange requantizationRange(Operand input, Operand inputMin, - Operand inputMax) { - return RequantizationRange.create(scope, input, inputMin, inputMax); + public FakeQuantWithMinMaxVarsPerChannelGradient fakeQuantWithMinMaxVarsPerChannelGradient( + Operand gradients, Operand inputs, Operand min, Operand max, + FakeQuantWithMinMaxVarsPerChannelGradient.Options... options) { + return FakeQuantWithMinMaxVarsPerChannelGradient.create(scope, gradients, inputs, min, max, options); } /** @@ -159,16 +145,17 @@ public FakeQuantWithMinMaxVarsPerChannel fakeQuantWithMinMaxVarsPerChannel(Opera } /** - * Builds an {@link FakeQuantWithMinMaxArgs} operation + * Builds an {@link RequantizationRange} operation * - * @param inputs - * @param options carries optional attributes values - * @return a new instance of FakeQuantWithMinMaxArgs - * @see org.tensorflow.op.quantization.FakeQuantWithMinMaxArgs + * @param input + * @param inputMin The float value that the minimum quantized input value represents. + * @param inputMax The float value that the maximum quantized input value represents. + * @return a new instance of RequantizationRange + * @see org.tensorflow.op.quantization.RequantizationRange */ - public FakeQuantWithMinMaxArgs fakeQuantWithMinMaxArgs(Operand inputs, - FakeQuantWithMinMaxArgs.Options... options) { - return FakeQuantWithMinMaxArgs.create(scope, inputs, options); + public RequantizationRange requantizationRange(Operand input, Operand inputMin, + Operand inputMax) { + return RequantizationRange.create(scope, input, inputMin, inputMax); } /** @@ -187,18 +174,16 @@ public QuantizeDownAndShrinkRange quantizeDownAndShrinkRange(Operand inputs, - Operand min, Operand max, FakeQuantWithMinMaxVars.Options... options) { - return FakeQuantWithMinMaxVars.create(scope, inputs, min, max, options); + public FakeQuantWithMinMaxArgs fakeQuantWithMinMaxArgs(Operand inputs, + FakeQuantWithMinMaxArgs.Options... options) { + return FakeQuantWithMinMaxArgs.create(scope, inputs, options); } /** @@ -216,4 +201,19 @@ public Quantize quantize(Operand input, Operand minRange, Operand maxRange, DataType T, Quantize.Options... options) { return Quantize.create(scope, input, minRange, maxRange, T, options); } + + /** + * Builds an {@link FakeQuantWithMinMaxVars} operation + * + * @param inputs + * @param min + * @param max + * @param options carries optional attributes values + * @return a new instance of FakeQuantWithMinMaxVars + * @see org.tensorflow.op.quantization.FakeQuantWithMinMaxVars + */ + public FakeQuantWithMinMaxVars fakeQuantWithMinMaxVars(Operand inputs, + Operand min, Operand max, FakeQuantWithMinMaxVars.Options... options) { + return FakeQuantWithMinMaxVars.create(scope, inputs, min, max, options); + } } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/RandomOps.java b/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/RandomOps.java index d7eb835691b..38f0bfdb0fb 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/RandomOps.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/RandomOps.java @@ -77,6 +77,20 @@ public RandomGamma randomGamma(Operand return RandomGamma.create(scope, shape, alpha, options); } + /** + * Builds an {@link RandomPoisson} operation + * + * @param shape 1-D integer tensor. Shape of independent samples to draw from each + * @param rate A tensor in which each scalar is a "rate" parameter describing the + * @param options carries optional attributes values + * @return a new instance of RandomPoisson + * @see org.tensorflow.op.random.RandomPoisson + */ + public RandomPoisson randomPoisson( + Operand shape, Operand rate, RandomPoisson.Options... options) { + return RandomPoisson.create(scope, shape, rate, options); + } + /** * Builds an {@link ParameterizedTruncatedNormal} operation * @@ -100,13 +114,14 @@ public ParameterizedTruncatedNormal pa * * @param shape 1-D integer tensor. Shape of independent samples to draw from each * @param rate A tensor in which each scalar is a "rate" parameter describing the + * @param dtype * @param options carries optional attributes values * @return a new instance of RandomPoisson * @see org.tensorflow.op.random.RandomPoisson */ - public RandomPoisson randomPoisson( - Operand shape, Operand rate, RandomPoisson.Options... options) { - return RandomPoisson.create(scope, shape, rate, options); + public RandomPoisson randomPoisson( + Operand shape, Operand rate, DataType dtype, RandomPoisson.Options... options) { + return RandomPoisson.create(scope, shape, rate, dtype, options); } /** @@ -125,34 +140,6 @@ public AllCandidateSampler allCandidateSampler(Operand trueClasses, Long return AllCandidateSampler.create(scope, trueClasses, numTrue, numSampled, unique, options); } - /** - * Builds an {@link RandomPoisson} operation - * - * @param shape 1-D integer tensor. Shape of independent samples to draw from each - * @param rate A tensor in which each scalar is a "rate" parameter describing the - * @param dtype - * @param options carries optional attributes values - * @return a new instance of RandomPoisson - * @see org.tensorflow.op.random.RandomPoisson - */ - public RandomPoisson randomPoisson( - Operand shape, Operand rate, DataType dtype, RandomPoisson.Options... options) { - return RandomPoisson.create(scope, shape, rate, dtype, options); - } - - /** - * Builds an {@link StatelessRandomNormal} operation - * - * @param shape The shape of the output tensor. - * @param seed 2 seeds (shape [2]). - * @return a new instance of StatelessRandomNormal - * @see org.tensorflow.op.random.StatelessRandomNormal - */ - public StatelessRandomNormal statelessRandomNormal( - Operand shape, Operand seed) { - return StatelessRandomNormal.create(scope, shape, seed); - } - /** * Builds an {@link StatelessTruncatedNormal} operation * @@ -183,6 +170,19 @@ public UniformCandidateSampler uniformCandidateSampler(Operand trueClass return UniformCandidateSampler.create(scope, trueClasses, numTrue, numSampled, unique, rangeMax, options); } + /** + * Builds an {@link StatelessRandomNormal} operation + * + * @param shape The shape of the output tensor. + * @param seed 2 seeds (shape [2]). + * @return a new instance of StatelessRandomNormal + * @see org.tensorflow.op.random.StatelessRandomNormal + */ + public StatelessRandomNormal statelessRandomNormal( + Operand shape, Operand seed) { + return StatelessRandomNormal.create(scope, shape, seed); + } + /** * Builds an {@link TruncatedNormal} operation * @@ -231,31 +231,31 @@ public StatelessMultin } /** - * Builds an {@link StatelessRandomUniform} operation + * Builds an {@link StatelessTruncatedNormal} operation * * @param shape The shape of the output tensor. * @param seed 2 seeds (shape [2]). * @param dtype The type of the output. - * @return a new instance of StatelessRandomUniform - * @see org.tensorflow.op.random.StatelessRandomUniform + * @return a new instance of StatelessTruncatedNormal + * @see org.tensorflow.op.random.StatelessTruncatedNormal */ - public StatelessRandomUniform statelessRandomUniform( + public StatelessTruncatedNormal statelessTruncatedNormal( Operand shape, Operand seed, DataType dtype) { - return StatelessRandomUniform.create(scope, shape, seed, dtype); + return StatelessTruncatedNormal.create(scope, shape, seed, dtype); } /** - * Builds an {@link StatelessTruncatedNormal} operation + * Builds an {@link StatelessRandomUniform} operation * * @param shape The shape of the output tensor. * @param seed 2 seeds (shape [2]). * @param dtype The type of the output. - * @return a new instance of StatelessTruncatedNormal - * @see org.tensorflow.op.random.StatelessTruncatedNormal + * @return a new instance of StatelessRandomUniform + * @see org.tensorflow.op.random.StatelessRandomUniform */ - public StatelessTruncatedNormal statelessTruncatedNormal( + public StatelessRandomUniform statelessRandomUniform( Operand shape, Operand seed, DataType dtype) { - return StatelessTruncatedNormal.create(scope, shape, seed, dtype); + return StatelessRandomUniform.create(scope, shape, seed, dtype); } /** @@ -329,31 +329,31 @@ public StatelessRandomUniform sta } /** - * Builds an {@link RandomUniform} operation + * Builds an {@link RandomStandardNormal} operation * * @param shape The shape of the output tensor. * @param dtype The type of the output. * @param options carries optional attributes values - * @return a new instance of RandomUniform - * @see org.tensorflow.op.random.RandomUniform + * @return a new instance of RandomStandardNormal + * @see org.tensorflow.op.random.RandomStandardNormal */ - public RandomUniform randomUniform(Operand shape, - DataType dtype, RandomUniform.Options... options) { - return RandomUniform.create(scope, shape, dtype, options); + public RandomStandardNormal randomStandardNormal( + Operand shape, DataType dtype, RandomStandardNormal.Options... options) { + return RandomStandardNormal.create(scope, shape, dtype, options); } /** - * Builds an {@link RandomStandardNormal} operation + * Builds an {@link RandomUniform} operation * * @param shape The shape of the output tensor. * @param dtype The type of the output. * @param options carries optional attributes values - * @return a new instance of RandomStandardNormal - * @see org.tensorflow.op.random.RandomStandardNormal + * @return a new instance of RandomUniform + * @see org.tensorflow.op.random.RandomUniform */ - public RandomStandardNormal randomStandardNormal( - Operand shape, DataType dtype, RandomStandardNormal.Options... options) { - return RandomStandardNormal.create(scope, shape, dtype, options); + public RandomUniform randomUniform(Operand shape, + DataType dtype, RandomUniform.Options... options) { + return RandomUniform.create(scope, shape, dtype, options); } /** diff --git a/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/SignalOps.java b/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/SignalOps.java index 5acdb7ba628..86383f5dc27 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/SignalOps.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/SignalOps.java @@ -180,17 +180,6 @@ public Irfft irfft(Operand input, Operand fftLength) { return Irfft.create(scope, input, fftLength); } - /** - * Builds an {@link BatchIfft2d} operation - * - * @param input - * @return a new instance of BatchIfft2d - * @see org.tensorflow.op.signal.BatchIfft2d - */ - public BatchIfft2d batchIfft2d(Operand input) { - return BatchIfft2d.create(scope, input); - } - /** * Builds an {@link BatchFft} operation * @@ -203,15 +192,14 @@ public BatchFft batchFft(Operand input) { } /** - * Builds an {@link Rfft2d} operation + * Builds an {@link BatchIfft2d} operation * - * @param input A float32 tensor. - * @param fftLength An int32 tensor of shape [2]. The FFT length for each dimension. - * @return a new instance of Rfft2d - * @see org.tensorflow.op.signal.Rfft2d + * @param input + * @return a new instance of BatchIfft2d + * @see org.tensorflow.op.signal.BatchIfft2d */ - public Rfft2d rfft2d(Operand input, Operand fftLength) { - return Rfft2d.create(scope, input, fftLength); + public BatchIfft2d batchIfft2d(Operand input) { + return BatchIfft2d.create(scope, input); } /** @@ -226,6 +214,18 @@ public Irfft3d irfft3d(Operand input, Operand fftLength) { return Irfft3d.create(scope, input, fftLength); } + /** + * Builds an {@link Rfft2d} operation + * + * @param input A float32 tensor. + * @param fftLength An int32 tensor of shape [2]. The FFT length for each dimension. + * @return a new instance of Rfft2d + * @see org.tensorflow.op.signal.Rfft2d + */ + public Rfft2d rfft2d(Operand input, Operand fftLength) { + return Rfft2d.create(scope, input, fftLength); + } + /** * Builds an {@link Rfft3d} operation * diff --git a/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/SparseOps.java b/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/SparseOps.java index a0deffcb84d..a0e064b78d2 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/SparseOps.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/SparseOps.java @@ -2,7 +2,6 @@ import org.tensorflow.DataType; import org.tensorflow.Operand; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.sparse.AddManySparseToTensorsMap; import org.tensorflow.op.sparse.AddSparseToTensorsMap; import org.tensorflow.op.sparse.DenseToDenseSetOperation; @@ -50,6 +49,7 @@ import org.tensorflow.types.TInt64; import org.tensorflow.types.TString; import org.tensorflow.types.family.TNumber; +import org.tensorflow.util.ndarray.Shape; /** * An API for building {@code sparse} operations as {@link Op Op}s @@ -198,20 +198,6 @@ public SparseFillEmptyRowsGrad sparseFillEmptyRowsGrad(Operand re return SparseFillEmptyRowsGrad.create(scope, reverseIndexMap, gradValues); } - /** - * Builds an {@link SparseConditionalAccumulator} operation - * - * @param dtype The type of the value being accumulated. - * @param shape The shape of the values. - * @param options carries optional attributes values - * @return a new instance of SparseConditionalAccumulator - * @see org.tensorflow.op.sparse.SparseConditionalAccumulator - */ - public SparseConditionalAccumulator sparseConditionalAccumulator(DataType dtype, - Shape shape, SparseConditionalAccumulator.Options... options) { - return SparseConditionalAccumulator.create(scope, dtype, shape, options); - } - /** * Builds an {@link SparseToDense} operation * @@ -278,6 +264,21 @@ public SparseSplit sparseSplit(Operand splitDim, Operand return SparseSplit.create(scope, splitDim, indices, values, shape, numSplit); } + /** + * Builds an {@link SparseSegmentMeanWithNumSegments} operation + * + * @param data + * @param indices A 1-D tensor. Has same rank as `segment_ids`. + * @param segmentIds A 1-D tensor. Values should be sorted and can be repeated. + * @param numSegments Should equal the number of distinct segment IDs. + * @return a new instance of SparseSegmentMeanWithNumSegments + * @see org.tensorflow.op.sparse.SparseSegmentMeanWithNumSegments + */ + public SparseSegmentMeanWithNumSegments sparseSegmentMeanWithNumSegments( + Operand data, Operand indices, Operand segmentIds, Operand numSegments) { + return SparseSegmentMeanWithNumSegments.create(scope, data, indices, segmentIds, numSegments); + } + /** * Builds an {@link SparseReduceSumSparse} operation * @@ -314,18 +315,21 @@ public DenseToSparseSetOperation denseToSparseSetOperation(Operand set } /** - * Builds an {@link SparseSegmentMeanWithNumSegments} operation + * Builds an {@link SparseSparseMinimum} operation * - * @param data - * @param indices A 1-D tensor. Has same rank as `segment_ids`. - * @param segmentIds A 1-D tensor. Values should be sorted and can be repeated. - * @param numSegments Should equal the number of distinct segment IDs. - * @return a new instance of SparseSegmentMeanWithNumSegments - * @see org.tensorflow.op.sparse.SparseSegmentMeanWithNumSegments + * @param aIndices 2-D. `N x R` matrix with the indices of non-empty values in a + * @param aValues 1-D. `N` non-empty values corresponding to `a_indices`. + * @param aShape 1-D. Shape of the input SparseTensor. + * @param bIndices counterpart to `a_indices` for the other operand. + * @param bValues counterpart to `a_values` for the other operand; must be of the same dtype. + * @param bShape counterpart to `a_shape` for the other operand; the two shapes must be equal. + * @return a new instance of SparseSparseMinimum + * @see org.tensorflow.op.sparse.SparseSparseMinimum */ - public SparseSegmentMeanWithNumSegments sparseSegmentMeanWithNumSegments( - Operand data, Operand indices, Operand segmentIds, Operand numSegments) { - return SparseSegmentMeanWithNumSegments.create(scope, data, indices, segmentIds, numSegments); + public SparseSparseMinimum sparseSparseMinimum(Operand aIndices, + Operand aValues, Operand aShape, Operand bIndices, Operand bValues, + Operand bShape) { + return SparseSparseMinimum.create(scope, aIndices, aValues, aShape, bIndices, bValues, bShape); } /** @@ -357,24 +361,6 @@ public SparseConcat sparseConcat(Iterable> indices, return SparseConcat.create(scope, indices, values, shapes, concatDim); } - /** - * Builds an {@link SparseSparseMinimum} operation - * - * @param aIndices 2-D. `N x R` matrix with the indices of non-empty values in a - * @param aValues 1-D. `N` non-empty values corresponding to `a_indices`. - * @param aShape 1-D. Shape of the input SparseTensor. - * @param bIndices counterpart to `a_indices` for the other operand. - * @param bValues counterpart to `a_values` for the other operand; must be of the same dtype. - * @param bShape counterpart to `a_shape` for the other operand; the two shapes must be equal. - * @return a new instance of SparseSparseMinimum - * @see org.tensorflow.op.sparse.SparseSparseMinimum - */ - public SparseSparseMinimum sparseSparseMinimum(Operand aIndices, - Operand aValues, Operand aShape, Operand bIndices, Operand bValues, - Operand bShape) { - return SparseSparseMinimum.create(scope, aIndices, aValues, aShape, bIndices, bValues, bShape); - } - /** * Builds an {@link SparseDenseCwiseAdd} operation * @@ -427,6 +413,20 @@ public SparseSegmentSqrtNGrad sparseSe return SparseSegmentSqrtNGrad.create(scope, grad, indices, segmentIds, outputDim0); } + /** + * Builds an {@link SparseConditionalAccumulator} operation + * + * @param dtype The type of the value being accumulated. + * @param shape The shape of the values. + * @param options carries optional attributes values + * @return a new instance of SparseConditionalAccumulator + * @see org.tensorflow.op.sparse.SparseConditionalAccumulator + */ + public SparseConditionalAccumulator sparseConditionalAccumulator(DataType dtype, + Shape shape, SparseConditionalAccumulator.Options... options) { + return SparseConditionalAccumulator.create(scope, dtype, shape, options); + } + /** * Builds an {@link SparseAdd} operation * @@ -509,24 +509,6 @@ public SparseSegmentSum sparseSegmentS return SparseSegmentSum.create(scope, data, indices, segmentIds); } - /** - * Builds an {@link SparseSparseMaximum} operation - * - * @param aIndices 2-D. `N x R` matrix with the indices of non-empty values in a - * @param aValues 1-D. `N` non-empty values corresponding to `a_indices`. - * @param aShape 1-D. Shape of the input SparseTensor. - * @param bIndices counterpart to `a_indices` for the other operand. - * @param bValues counterpart to `a_values` for the other operand; must be of the same dtype. - * @param bShape counterpart to `a_shape` for the other operand; the two shapes must be equal. - * @return a new instance of SparseSparseMaximum - * @see org.tensorflow.op.sparse.SparseSparseMaximum - */ - public SparseSparseMaximum sparseSparseMaximum(Operand aIndices, - Operand aValues, Operand aShape, Operand bIndices, Operand bValues, - Operand bShape) { - return SparseSparseMaximum.create(scope, aIndices, aValues, aShape, bIndices, bValues, bShape); - } - /** * Builds an {@link SparseReduceMax} operation * @@ -545,17 +527,21 @@ public SparseReduceMax sparseReduceMax(Operand in } /** - * Builds an {@link SparseReorder} operation + * Builds an {@link SparseSparseMaximum} operation * - * @param inputIndices 2-D. `N x R` matrix with the indices of non-empty values in a - * @param inputValues 1-D. `N` non-empty values corresponding to `input_indices`. - * @param inputShape 1-D. Shape of the input SparseTensor. - * @return a new instance of SparseReorder - * @see org.tensorflow.op.sparse.SparseReorder + * @param aIndices 2-D. `N x R` matrix with the indices of non-empty values in a + * @param aValues 1-D. `N` non-empty values corresponding to `a_indices`. + * @param aShape 1-D. Shape of the input SparseTensor. + * @param bIndices counterpart to `a_indices` for the other operand. + * @param bValues counterpart to `a_values` for the other operand; must be of the same dtype. + * @param bShape counterpart to `a_shape` for the other operand; the two shapes must be equal. + * @return a new instance of SparseSparseMaximum + * @see org.tensorflow.op.sparse.SparseSparseMaximum */ - public SparseReorder sparseReorder(Operand inputIndices, Operand inputValues, - Operand inputShape) { - return SparseReorder.create(scope, inputIndices, inputValues, inputShape); + public SparseSparseMaximum sparseSparseMaximum(Operand aIndices, + Operand aValues, Operand aShape, Operand bIndices, Operand bValues, + Operand bShape) { + return SparseSparseMaximum.create(scope, aIndices, aValues, aShape, bIndices, bValues, bShape); } /** @@ -573,6 +559,20 @@ public SparseDenseCwiseMul sparseDenseCwiseMul(Operand spIndices, return SparseDenseCwiseMul.create(scope, spIndices, spValues, spShape, dense); } + /** + * Builds an {@link SparseReorder} operation + * + * @param inputIndices 2-D. `N x R` matrix with the indices of non-empty values in a + * @param inputValues 1-D. `N` non-empty values corresponding to `input_indices`. + * @param inputShape 1-D. Shape of the input SparseTensor. + * @return a new instance of SparseReorder + * @see org.tensorflow.op.sparse.SparseReorder + */ + public SparseReorder sparseReorder(Operand inputIndices, Operand inputValues, + Operand inputShape) { + return SparseReorder.create(scope, inputIndices, inputValues, inputShape); + } + /** * Builds an {@link DenseToDenseSetOperation} operation * diff --git a/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/StringsOps.java b/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/StringsOps.java index 85592ddd204..58fce0ef005 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/StringsOps.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/StringsOps.java @@ -188,17 +188,17 @@ public UnicodeScript unicodeScript(Operand input) { } /** - * Builds an {@link ReduceJoin} operation + * Builds an {@link ToHashBucketStrong} operation * - * @param inputs The input to be joined. All reduced indices must have non-zero size. - * @param reductionIndices The dimensions to reduce over. Dimensions are reduced in the - * @param options carries optional attributes values - * @return a new instance of ReduceJoin - * @see org.tensorflow.op.strings.ReduceJoin + * @param input The strings to assign a hash bucket. + * @param numBuckets The number of buckets. + * @param key The key used to seed the hash function, passed as a list of two uint64 + * @return a new instance of ToHashBucketStrong + * @see org.tensorflow.op.strings.ToHashBucketStrong */ - public ReduceJoin reduceJoin(Operand inputs, Operand reductionIndices, - ReduceJoin.Options... options) { - return ReduceJoin.create(scope, inputs, reductionIndices, options); + public ToHashBucketStrong toHashBucketStrong(Operand input, Long numBuckets, + List key) { + return ToHashBucketStrong.create(scope, input, numBuckets, key); } /** @@ -215,17 +215,17 @@ public ToNumber toNumber(Operand stringTensor, } /** - * Builds an {@link ToHashBucketStrong} operation + * Builds an {@link ReduceJoin} operation * - * @param input The strings to assign a hash bucket. - * @param numBuckets The number of buckets. - * @param key The key used to seed the hash function, passed as a list of two uint64 - * @return a new instance of ToHashBucketStrong - * @see org.tensorflow.op.strings.ToHashBucketStrong + * @param inputs The input to be joined. All reduced indices must have non-zero size. + * @param reductionIndices The dimensions to reduce over. Dimensions are reduced in the + * @param options carries optional attributes values + * @return a new instance of ReduceJoin + * @see org.tensorflow.op.strings.ReduceJoin */ - public ToHashBucketStrong toHashBucketStrong(Operand input, Long numBuckets, - List key) { - return ToHashBucketStrong.create(scope, input, numBuckets, key); + public ReduceJoin reduceJoin(Operand inputs, Operand reductionIndices, + ReduceJoin.Options... options) { + return ReduceJoin.create(scope, inputs, reductionIndices, options); } /** diff --git a/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/SummaryOps.java b/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/SummaryOps.java index 3ec64b93047..77123ee3c9e 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/SummaryOps.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/SummaryOps.java @@ -77,6 +77,17 @@ public ScalarSummary scalarSummary(Operand tags, Op return ScalarSummary.create(scope, tags, values); } + /** + * Builds an {@link MergeSummary} operation + * + * @param inputs Can be of any shape. Each must contain serialized `Summary` protocol + * @return a new instance of MergeSummary + * @see org.tensorflow.op.summary.MergeSummary + */ + public MergeSummary mergeSummary(Iterable> inputs) { + return MergeSummary.create(scope, inputs); + } + /** * Builds an {@link TensorSummary} operation * @@ -90,15 +101,4 @@ public TensorSummary tensorSummary(Operand tag, Operand tensor, Operand serializedSummaryMetadata) { return TensorSummary.create(scope, tag, tensor, serializedSummaryMetadata); } - - /** - * Builds an {@link MergeSummary} operation - * - * @param inputs Can be of any shape. Each must contain serialized `Summary` protocol - * @return a new instance of MergeSummary - * @see org.tensorflow.op.summary.MergeSummary - */ - public MergeSummary mergeSummary(Iterable> inputs) { - return MergeSummary.create(scope, inputs); - } } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/TrainOps.java b/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/TrainOps.java index 0c93a6e698b..9e8a23f6a05 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/TrainOps.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/TrainOps.java @@ -3,7 +3,6 @@ import java.util.List; import org.tensorflow.DataType; import org.tensorflow.Operand; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.train.AccumulatorApplyGradient; import org.tensorflow.op.train.AccumulatorNumAccumulated; import org.tensorflow.op.train.AccumulatorSetGlobalStep; @@ -69,6 +68,7 @@ import org.tensorflow.types.TInt64; import org.tensorflow.types.TString; import org.tensorflow.types.family.TNumber; +import org.tensorflow.util.ndarray.Shape; /** * An API for building {@code train} operations as {@link Op Op}s @@ -82,6 +82,20 @@ public final class TrainOps { this.scope = scope; } + /** + * Builds an {@link ConditionalAccumulator} operation + * + * @param dtype The type of the value being accumulated. + * @param shape The shape of the values, can be [], in which case shape is unknown. + * @param options carries optional attributes values + * @return a new instance of ConditionalAccumulator + * @see org.tensorflow.op.train.ConditionalAccumulator + */ + public ConditionalAccumulator conditionalAccumulator(DataType dtype, Shape shape, + ConditionalAccumulator.Options... options) { + return ConditionalAccumulator.create(scope, dtype, shape, options); + } + /** * Builds an {@link SparseApplyAdagrad} operation * @@ -190,20 +204,6 @@ public SparseApplyMomentum sparseApplyMomentum(Operand return SparseApplyMomentum.create(scope, var, accum, lr, grad, indices, momentum, options); } - /** - * Builds an {@link AccumulatorApplyGradient} operation - * - * @param handle The handle to a accumulator. - * @param localStep The local_step value at which the gradient was computed. - * @param gradient A tensor of the gradient to be accumulated. - * @return a new instance of AccumulatorApplyGradient - * @see org.tensorflow.op.train.AccumulatorApplyGradient - */ - public AccumulatorApplyGradient accumulatorApplyGradient(Operand handle, - Operand localStep, Operand gradient) { - return AccumulatorApplyGradient.create(scope, handle, localStep, gradient); - } - /** * Builds an {@link ResourceSparseApplyFtrl} operation * @@ -229,26 +229,17 @@ public ResourceSparseApplyFtrl resourceSparseApplyFtrl(Op } /** - * Builds an {@link ApplyAdam} operation + * Builds an {@link AccumulatorApplyGradient} operation * - * @param var Should be from a Variable(). - * @param m Should be from a Variable(). - * @param v Should be from a Variable(). - * @param beta1Power Must be a scalar. - * @param beta2Power Must be a scalar. - * @param lr Scaling factor. Must be a scalar. - * @param beta1 Momentum factor. Must be a scalar. - * @param beta2 Momentum factor. Must be a scalar. - * @param epsilon Ridge term. Must be a scalar. - * @param grad The gradient. - * @param options carries optional attributes values - * @return a new instance of ApplyAdam - * @see org.tensorflow.op.train.ApplyAdam + * @param handle The handle to a accumulator. + * @param localStep The local_step value at which the gradient was computed. + * @param gradient A tensor of the gradient to be accumulated. + * @return a new instance of AccumulatorApplyGradient + * @see org.tensorflow.op.train.AccumulatorApplyGradient */ - public ApplyAdam applyAdam(Operand var, Operand m, Operand v, - Operand beta1Power, Operand beta2Power, Operand lr, Operand beta1, - Operand beta2, Operand epsilon, Operand grad, ApplyAdam.Options... options) { - return ApplyAdam.create(scope, var, m, v, beta1Power, beta2Power, lr, beta1, beta2, epsilon, grad, options); + public AccumulatorApplyGradient accumulatorApplyGradient(Operand handle, + Operand localStep, Operand gradient) { + return AccumulatorApplyGradient.create(scope, handle, localStep, gradient); } /** @@ -290,6 +281,29 @@ public ResourceApplyAddSign resourceApplyAddSign(Operand var, Operand return ResourceApplyAddSign.create(scope, var, m, lr, alpha, signDecay, beta, grad, options); } + /** + * Builds an {@link ApplyAdam} operation + * + * @param var Should be from a Variable(). + * @param m Should be from a Variable(). + * @param v Should be from a Variable(). + * @param beta1Power Must be a scalar. + * @param beta2Power Must be a scalar. + * @param lr Scaling factor. Must be a scalar. + * @param beta1 Momentum factor. Must be a scalar. + * @param beta2 Momentum factor. Must be a scalar. + * @param epsilon Ridge term. Must be a scalar. + * @param grad The gradient. + * @param options carries optional attributes values + * @return a new instance of ApplyAdam + * @see org.tensorflow.op.train.ApplyAdam + */ + public ApplyAdam applyAdam(Operand var, Operand m, Operand v, + Operand beta1Power, Operand beta2Power, Operand lr, Operand beta1, + Operand beta2, Operand epsilon, Operand grad, ApplyAdam.Options... options) { + return ApplyAdam.create(scope, var, m, v, beta1Power, beta2Power, lr, beta1, beta2, epsilon, grad, options); + } + /** * Builds an {@link SparseApplyCenteredRmsProp} operation * @@ -465,6 +479,21 @@ public ApplyAdadelta applyAdadelta(Operand var, Operand accum, return ApplyAdadelta.create(scope, var, accum, accumUpdate, lr, rho, epsilon, grad, options); } + /** + * Builds an {@link Save} operation + * + * @param prefix Must have a single element. The prefix of the V2 checkpoint to which we + * @param tensorNames shape {N}. The names of the tensors to be saved. + * @param shapeAndSlices shape {N}. The slice specs of the tensors to be saved. + * @param tensors `N` tensors to save. + * @return a new instance of Save + * @see org.tensorflow.op.train.Save + */ + public Save save(Operand prefix, Operand tensorNames, + Operand shapeAndSlices, Iterable> tensors) { + return Save.create(scope, prefix, tensorNames, shapeAndSlices, tensors); + } + /** * Builds an {@link ResourceSparseApplyMomentum} operation * @@ -484,21 +513,6 @@ public ResourceSparseApplyMomentum resourceSparseApplyMom return ResourceSparseApplyMomentum.create(scope, var, accum, lr, grad, indices, momentum, options); } - /** - * Builds an {@link Save} operation - * - * @param prefix Must have a single element. The prefix of the V2 checkpoint to which we - * @param tensorNames shape {N}. The names of the tensors to be saved. - * @param shapeAndSlices shape {N}. The slice specs of the tensors to be saved. - * @param tensors `N` tensors to save. - * @return a new instance of Save - * @see org.tensorflow.op.train.Save - */ - public Save save(Operand prefix, Operand tensorNames, - Operand shapeAndSlices, Iterable> tensors) { - return Save.create(scope, prefix, tensorNames, shapeAndSlices, tensors); - } - /** * Builds an {@link SaveSlices} operation * @@ -626,17 +640,6 @@ public ApplyFtrl applyFtrl(Operand var, Operand accum, Operand l return ApplyFtrl.create(scope, var, accum, linear, grad, lr, l1, l2, l2Shrinkage, lrPower, options); } - /** - * Builds an {@link AccumulatorNumAccumulated} operation - * - * @param handle The handle to an accumulator. - * @return a new instance of AccumulatorNumAccumulated - * @see org.tensorflow.op.train.AccumulatorNumAccumulated - */ - public AccumulatorNumAccumulated accumulatorNumAccumulated(Operand handle) { - return AccumulatorNumAccumulated.create(scope, handle); - } - /** * Builds an {@link MergeV2Checkpoints} operation * @@ -651,6 +654,17 @@ public MergeV2Checkpoints mergeV2Checkpoints(Operand checkpointPrefixes return MergeV2Checkpoints.create(scope, checkpointPrefixes, destinationPrefix, options); } + /** + * Builds an {@link AccumulatorNumAccumulated} operation + * + * @param handle The handle to an accumulator. + * @return a new instance of AccumulatorNumAccumulated + * @see org.tensorflow.op.train.AccumulatorNumAccumulated + */ + public AccumulatorNumAccumulated accumulatorNumAccumulated(Operand handle) { + return AccumulatorNumAccumulated.create(scope, handle); + } + /** * Builds an {@link ResourceApplyGradientDescent} operation * @@ -750,6 +764,24 @@ public ResourceApplyAdagradDa resourceApplyAdagradDa(Operand var, return ResourceApplyAdagradDa.create(scope, var, gradientAccumulator, gradientSquaredAccumulator, grad, lr, l1, l2, globalStep, options); } + /** + * Builds an {@link ResourceApplyProximalGradientDescent} operation + * + * @param var Should be from a Variable(). + * @param alpha Scaling factor. Must be a scalar. + * @param l1 L1 regularization. Must be a scalar. + * @param l2 L2 regularization. Must be a scalar. + * @param delta The change. + * @param options carries optional attributes values + * @return a new instance of ResourceApplyProximalGradientDescent + * @see org.tensorflow.op.train.ResourceApplyProximalGradientDescent + */ + public ResourceApplyProximalGradientDescent resourceApplyProximalGradientDescent( + Operand var, Operand alpha, Operand l1, Operand l2, Operand delta, + ResourceApplyProximalGradientDescent.Options... options) { + return ResourceApplyProximalGradientDescent.create(scope, var, alpha, l1, l2, delta, options); + } + /** * Builds an {@link ResourceApplyAdam} operation * @@ -773,24 +805,6 @@ public ResourceApplyAdam resourceApplyAdam(Operand var, Operand m, Ope return ResourceApplyAdam.create(scope, var, m, v, beta1Power, beta2Power, lr, beta1, beta2, epsilon, grad, options); } - /** - * Builds an {@link ResourceApplyProximalGradientDescent} operation - * - * @param var Should be from a Variable(). - * @param alpha Scaling factor. Must be a scalar. - * @param l1 L1 regularization. Must be a scalar. - * @param l2 L2 regularization. Must be a scalar. - * @param delta The change. - * @param options carries optional attributes values - * @return a new instance of ResourceApplyProximalGradientDescent - * @see org.tensorflow.op.train.ResourceApplyProximalGradientDescent - */ - public ResourceApplyProximalGradientDescent resourceApplyProximalGradientDescent( - Operand var, Operand alpha, Operand l1, Operand l2, Operand delta, - ResourceApplyProximalGradientDescent.Options... options) { - return ResourceApplyProximalGradientDescent.create(scope, var, alpha, l1, l2, delta, options); - } - /** * Builds an {@link NegTrain} operation * @@ -1071,20 +1085,6 @@ public SparseApplyFtrl sparseApplyFtrl(Operand var, return SparseApplyFtrl.create(scope, var, accum, linear, grad, indices, lr, l1, l2, l2Shrinkage, lrPower, options); } - /** - * Builds an {@link ConditionalAccumulator} operation - * - * @param dtype The type of the value being accumulated. - * @param shape The shape of the values, can be [], in which case shape is unknown. - * @param options carries optional attributes values - * @return a new instance of ConditionalAccumulator - * @see org.tensorflow.op.train.ConditionalAccumulator - */ - public ConditionalAccumulator conditionalAccumulator(DataType dtype, Shape shape, - ConditionalAccumulator.Options... options) { - return ConditionalAccumulator.create(scope, dtype, shape, options); - } - /** * Builds an {@link ResourceSparseApplyRmsProp} operation * diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/collective/AllReduce.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/collective/AllReduce.java index 365b37d0800..e77c3d4c479 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/collective/AllReduce.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/collective/AllReduce.java @@ -29,7 +29,7 @@ /** * Mutually reduces multiple tensors of identical type and shape. * - * @param data type for {@code data()} output + * @param data type for {@code output()} output */ public final class AllReduce extends PrimitiveOp implements Operand { @@ -103,20 +103,20 @@ public static Options waitFor(List waitFor) { /** */ - public Output data() { - return data; + public Output output() { + return output; } @Override public Output asOutput() { - return data; + return output; } - private Output data; + private Output output; private AllReduce(Operation operation) { super(operation); int outputIdx = 0; - data = operation.output(outputIdx++); + output = operation.output(outputIdx++); } } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/collective/BroadcastRecv.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/collective/BroadcastRecv.java index 6b33f28a62c..7984d904f84 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/collective/BroadcastRecv.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/collective/BroadcastRecv.java @@ -22,15 +22,15 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.types.family.TNumber; +import org.tensorflow.util.ndarray.Shape; /** * Receives a tensor value broadcast from another device. * - * @param data type for {@code data()} output + * @param data type for {@code output()} output */ public final class BroadcastRecv extends PrimitiveOp implements Operand { @@ -58,20 +58,20 @@ public static BroadcastRecv create(Scope scope, DataType< /** */ - public Output data() { - return data; + public Output output() { + return output; } @Override public Output asOutput() { - return data; + return output; } - private Output data; + private Output output; private BroadcastRecv(Operation operation) { super(operation); int outputIdx = 0; - data = operation.output(outputIdx++); + output = operation.output(outputIdx++); } } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/collective/BroadcastSend.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/collective/BroadcastSend.java index 6298f51c912..93144a9b281 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/collective/BroadcastSend.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/collective/BroadcastSend.java @@ -21,15 +21,15 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.types.family.TNumber; +import org.tensorflow.util.ndarray.Shape; /** * Broadcasts a tensor value to one or more other devices. * - * @param data type for {@code data()} output + * @param data type for {@code output()} output */ public final class BroadcastSend extends PrimitiveOp implements Operand { @@ -57,20 +57,20 @@ public static BroadcastSend create(Scope scope, Operand data() { - return data; + public Output output() { + return output; } @Override public Output asOutput() { - return data; + return output; } - private Output data; + private Output output; private BroadcastSend(Operation operation) { super(operation); int outputIdx = 0; - data = operation.output(outputIdx++); + output = operation.output(outputIdx++); } } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/AnonymousIteratorV2.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/AnonymousIteratorV2.java index dc4138e68a6..3a754bc06aa 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/AnonymousIteratorV2.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/AnonymousIteratorV2.java @@ -22,9 +22,9 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.util.ndarray.Shape; /** * A container for an iterator resource. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/AnonymousMultiDeviceIterator.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/AnonymousMultiDeviceIterator.java index c4b6656b38a..d5e4b92b14b 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/AnonymousMultiDeviceIterator.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/AnonymousMultiDeviceIterator.java @@ -22,9 +22,9 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.util.ndarray.Shape; /** * A container for a multi device iterator resource. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/AssertNextDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/AssertNextDataset.java index 221969ff071..f326b6743d9 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/AssertNextDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/AssertNextDataset.java @@ -23,10 +23,10 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.types.TString; +import org.tensorflow.util.ndarray.Shape; /** */ diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/AutoShardDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/AutoShardDataset.java index bc457c10460..660f19e827c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/AutoShardDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/AutoShardDataset.java @@ -23,10 +23,10 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.types.TInt64; +import org.tensorflow.util.ndarray.Shape; /** * Creates a dataset that shards the input dataset. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Barrier.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Barrier.java index e9ed8a64f5d..c72777c5db4 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Barrier.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Barrier.java @@ -23,11 +23,11 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; import org.tensorflow.types.TString; +import org.tensorflow.util.ndarray.Shape; /** * Defines a barrier that persists across different graph executions. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/CSVDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/CSVDataset.java index 79e4142422c..78b7c4d8fed 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/CSVDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/CSVDataset.java @@ -22,13 +22,13 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.Operands; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.types.TBool; import org.tensorflow.types.TInt64; import org.tensorflow.types.TString; +import org.tensorflow.util.ndarray.Shape; /** */ diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/CacheDatasetV2.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/CacheDatasetV2.java index c83d34315d2..e9c2b87ea46 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/CacheDatasetV2.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/CacheDatasetV2.java @@ -23,10 +23,10 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.types.TString; +import org.tensorflow.util.ndarray.Shape; /** */ diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ChooseFastestDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ChooseFastestDataset.java index c212ac8e639..d5df443b1f4 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ChooseFastestDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ChooseFastestDataset.java @@ -23,10 +23,10 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.Operands; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.util.ndarray.Shape; /** */ diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/CollectiveGather.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/CollectiveGather.java index b5e6c3456fa..8e63857b0e4 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/CollectiveGather.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/CollectiveGather.java @@ -21,15 +21,15 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.types.family.TNumber; +import org.tensorflow.util.ndarray.Shape; /** * Mutually accumulates multiple tensors of identical type and shape. * - * @param data type for {@code data()} output + * @param data type for {@code output()} output */ public final class CollectiveGather extends PrimitiveOp implements Operand { @@ -57,20 +57,20 @@ public static CollectiveGather create(Scope scope, Operan /** */ - public Output data() { - return data; + public Output output() { + return output; } @Override public Output asOutput() { - return data; + return output; } - private Output data; + private Output output; private CollectiveGather(Operation operation) { super(operation); int outputIdx = 0; - data = operation.output(outputIdx++); + output = operation.output(outputIdx++); } } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/DirectedInterleaveDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/DirectedInterleaveDataset.java index f783eaf98ba..625051fc06b 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/DirectedInterleaveDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/DirectedInterleaveDataset.java @@ -23,10 +23,10 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.Operands; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.util.ndarray.Shape; /** * A substitute for `InterleaveDataset` on a fixed list of `N` datasets. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/EnsureShape.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/EnsureShape.java index ac4ca4a10c4..5580b3eeabe 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/EnsureShape.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/EnsureShape.java @@ -21,10 +21,10 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.util.ndarray.Shape; /** * Ensures that the tensor's shape matches the expected shape. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalAutoShardDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalAutoShardDataset.java index 017a100b508..d2778789420 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalAutoShardDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalAutoShardDataset.java @@ -23,10 +23,10 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.types.TInt64; +import org.tensorflow.util.ndarray.Shape; /** * Creates a dataset that shards the input dataset. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalBytesProducedStatsDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalBytesProducedStatsDataset.java index e3fcb5fe6b4..cc2009ffafa 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalBytesProducedStatsDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalBytesProducedStatsDataset.java @@ -23,10 +23,10 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.types.TString; +import org.tensorflow.util.ndarray.Shape; /** * Records the bytes size of each element of `input_dataset` in a StatsAggregator. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalChooseFastestDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalChooseFastestDataset.java index b555b5cd974..50ee1633643 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalChooseFastestDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalChooseFastestDataset.java @@ -23,10 +23,10 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.Operands; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.util.ndarray.Shape; /** */ diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalDenseToSparseBatchDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalDenseToSparseBatchDataset.java index 6369c5f0a84..2848a4a8bae 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalDenseToSparseBatchDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalDenseToSparseBatchDataset.java @@ -23,10 +23,10 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.types.TInt64; +import org.tensorflow.util.ndarray.Shape; /** * Creates a dataset that batches input elements into a SparseTensor. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalLatencyStatsDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalLatencyStatsDataset.java index b21985da711..89c13ece774 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalLatencyStatsDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalLatencyStatsDataset.java @@ -23,10 +23,10 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.types.TString; +import org.tensorflow.util.ndarray.Shape; /** * Records the latency of producing `input_dataset` elements in a StatsAggregator. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalMaxIntraOpParallelismDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalMaxIntraOpParallelismDataset.java index cc234707f63..e1055d5937b 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalMaxIntraOpParallelismDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalMaxIntraOpParallelismDataset.java @@ -23,10 +23,10 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.types.TInt64; +import org.tensorflow.util.ndarray.Shape; /** * Creates a dataset that overrides the maximum intra-op parallelism. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalParseExampleDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalParseExampleDataset.java index cc5c676b182..cc154507794 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalParseExampleDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalParseExampleDataset.java @@ -23,11 +23,11 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.Operands; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.types.TInt64; +import org.tensorflow.util.ndarray.Shape; /** * Transforms `input_dataset` containing `Example` protos as vectors of DT_STRING into a dataset of `Tensor` or `SparseTensor` objects representing the parsed features. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalPrivateThreadPoolDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalPrivateThreadPoolDataset.java index d8138e1681b..ae6ba8398e4 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalPrivateThreadPoolDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalPrivateThreadPoolDataset.java @@ -23,10 +23,10 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.types.TInt64; +import org.tensorflow.util.ndarray.Shape; /** * Creates a dataset that uses a custom thread pool to compute `input_dataset`. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalRandomDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalRandomDataset.java index bd56ebaba02..ad93e141137 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalRandomDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalRandomDataset.java @@ -23,10 +23,10 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.types.TInt64; +import org.tensorflow.util.ndarray.Shape; /** * Creates a Dataset that returns pseudorandom numbers. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalRebatchDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalRebatchDataset.java index 2fa797baea6..c926bd69336 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalRebatchDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalRebatchDataset.java @@ -23,10 +23,10 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.types.TInt64; +import org.tensorflow.util.ndarray.Shape; /** * Creates a dataset that changes the batch size. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalSetStatsAggregatorDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalSetStatsAggregatorDataset.java index 276a7611a87..1e84abefdeb 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalSetStatsAggregatorDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalSetStatsAggregatorDataset.java @@ -23,10 +23,10 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.types.TString; +import org.tensorflow.util.ndarray.Shape; /** */ diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalSlidingWindowDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalSlidingWindowDataset.java index bb6a63ee9e3..608b1d8c870 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalSlidingWindowDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalSlidingWindowDataset.java @@ -23,10 +23,10 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.types.TInt64; +import org.tensorflow.util.ndarray.Shape; /** * Creates a dataset that passes a sliding window over `input_dataset`. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalSqlDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalSqlDataset.java index a314c68ec18..3b1aa37d32e 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalSqlDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalSqlDataset.java @@ -23,10 +23,10 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.types.TString; +import org.tensorflow.util.ndarray.Shape; /** * Creates a dataset that executes a SQL query and emits rows of the result set. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalUnbatchDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalUnbatchDataset.java index 6a9fd9b6e54..97980af6e55 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalUnbatchDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalUnbatchDataset.java @@ -23,9 +23,9 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.util.ndarray.Shape; /** * A dataset that splits the elements of its input into multiple elements. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/IgnoreErrorsDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/IgnoreErrorsDataset.java index fe640488aea..3584f7f2b9c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/IgnoreErrorsDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/IgnoreErrorsDataset.java @@ -23,9 +23,9 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.util.ndarray.Shape; /** * Creates a dataset that contains the elements of `input_dataset` ignoring errors. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ImmutableConst.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ImmutableConst.java index 2662b3793af..f19961102a9 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ImmutableConst.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ImmutableConst.java @@ -22,10 +22,10 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.util.ndarray.Shape; /** * Returns immutable tensor from memory region. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/InfeedDequeue.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/InfeedDequeue.java index ce69b3d64e7..aaad5cd42bc 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/InfeedDequeue.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/InfeedDequeue.java @@ -22,9 +22,9 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.util.ndarray.Shape; /** * A placeholder op for a value that will be fed into the computation. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/InfeedDequeueTuple.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/InfeedDequeueTuple.java index 5ecb91f5643..06ba847e108 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/InfeedDequeueTuple.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/InfeedDequeueTuple.java @@ -25,9 +25,9 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.util.ndarray.Shape; /** * Fetches multiple values from infeed as an XLA tuple. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/InfeedEnqueue.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/InfeedEnqueue.java index 10e38ce0f13..0f61d9850b6 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/InfeedEnqueue.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/InfeedEnqueue.java @@ -21,9 +21,9 @@ import org.tensorflow.Operand; import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.util.ndarray.Shape; /** * An op which feeds a single Tensor value into the computation. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/InfeedEnqueueTuple.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/InfeedEnqueueTuple.java index f97a09a501c..7176e3dfdb7 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/InfeedEnqueueTuple.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/InfeedEnqueueTuple.java @@ -21,10 +21,10 @@ import org.tensorflow.Operand; import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.Operands; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.util.ndarray.Shape; /** * Feeds multiple Tensor values into the computation as an XLA tuple. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LMDBDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LMDBDataset.java index b96d471e847..55fdfb7ce93 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LMDBDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LMDBDataset.java @@ -23,10 +23,10 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.types.TString; +import org.tensorflow.util.ndarray.Shape; /** */ diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MaxIntraOpParallelismDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MaxIntraOpParallelismDataset.java index d92127d9445..c561c474a34 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MaxIntraOpParallelismDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MaxIntraOpParallelismDataset.java @@ -23,10 +23,10 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.types.TInt64; +import org.tensorflow.util.ndarray.Shape; /** * Creates a dataset that overrides the maximum intra-op parallelism. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MutableDenseHashTable.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MutableDenseHashTable.java index eecb53c76f7..7baf40d7741 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MutableDenseHashTable.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MutableDenseHashTable.java @@ -22,10 +22,10 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.util.ndarray.Shape; /** * Creates an empty hash table that uses tensors as the backing store. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MutableHashTableOfTensors.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MutableHashTableOfTensors.java index 2e09f65fdd4..d7af88d4a42 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MutableHashTableOfTensors.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MutableHashTableOfTensors.java @@ -22,10 +22,10 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.util.ndarray.Shape; /** * Creates an empty hash table. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/NcclAllReduce.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/NcclAllReduce.java index 22968256120..f510be36f82 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/NcclAllReduce.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/NcclAllReduce.java @@ -41,7 +41,7 @@ * num_devices: The number of devices participating in this reduction. * shared_name: Identifier that shared between ops of the same reduction. * - * @param data type for {@code data()} output + * @param data type for {@code output()} output */ public final class NcclAllReduce extends PrimitiveOp implements Operand { @@ -67,20 +67,20 @@ public static NcclAllReduce create(Scope scope, Operand data() { - return data; + public Output output() { + return output; } @Override public Output asOutput() { - return data; + return output; } - private Output data; + private Output output; private NcclAllReduce(Operation operation) { super(operation); int outputIdx = 0; - data = operation.output(outputIdx++); + output = operation.output(outputIdx++); } } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/NcclBroadcast.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/NcclBroadcast.java index 6033852e0c1..b88702a4cf2 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/NcclBroadcast.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/NcclBroadcast.java @@ -21,10 +21,10 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.types.family.TNumber; +import org.tensorflow.util.ndarray.Shape; /** * Sends `input` to all devices that are connected to the output. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/NcclReduce.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/NcclReduce.java index 19bc62bd69c..c6d5ed6eda7 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/NcclReduce.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/NcclReduce.java @@ -38,7 +38,7 @@ * data: the value of the reduction across all `num_devices` devices. * reduction: the reduction operation to perform. * - * @param data type for {@code data()} output + * @param data type for {@code output()} output */ public final class NcclReduce extends PrimitiveOp implements Operand { @@ -60,20 +60,20 @@ public static NcclReduce create(Scope scope, Iterable data() { - return data; + public Output output() { + return output; } @Override public Output asOutput() { - return data; + return output; } - private Output data; + private Output output; private NcclReduce(Operation operation) { super(operation); int outputIdx = 0; - data = operation.output(outputIdx++); + output = operation.output(outputIdx++); } } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/NonSerializableDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/NonSerializableDataset.java index 6bdd651cf69..dcdc0eca42b 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/NonSerializableDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/NonSerializableDataset.java @@ -23,9 +23,9 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.util.ndarray.Shape; /** */ diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/OutfeedDequeue.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/OutfeedDequeue.java index 9917b7e37b1..b02dae53d7e 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/OutfeedDequeue.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/OutfeedDequeue.java @@ -22,9 +22,9 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.util.ndarray.Shape; /** * Retrieves a single tensor from the computation outfeed. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/OutfeedDequeueTuple.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/OutfeedDequeueTuple.java index 78a50267d70..f4360d2f76e 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/OutfeedDequeueTuple.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/OutfeedDequeueTuple.java @@ -25,9 +25,9 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.util.ndarray.Shape; /** * Retrieve multiple values from the computation outfeed. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ParallelConcat.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ParallelConcat.java index e9ef04b407c..ba9aec1644a 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ParallelConcat.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ParallelConcat.java @@ -21,11 +21,11 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.Operands; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.util.ndarray.Shape; /** * Concatenates a list of `N` tensors along the first dimension. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Placeholder.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Placeholder.java index 60c42462e6f..a45948f5d50 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Placeholder.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Placeholder.java @@ -22,10 +22,10 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.util.ndarray.Shape; /** * A placeholder op for a value that will be fed into the computation. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/PlaceholderWithDefault.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/PlaceholderWithDefault.java index 74a04f515b9..2431fbb8141 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/PlaceholderWithDefault.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/PlaceholderWithDefault.java @@ -21,10 +21,10 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.util.ndarray.Shape; /** * A placeholder op that passes through `input` when its output is not fed. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Prelinearize.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Prelinearize.java index 6b505081b77..ea18fe5d673 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Prelinearize.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Prelinearize.java @@ -22,9 +22,9 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.util.ndarray.Shape; /** * An op which linearizes one Tensor value to an opaque variant tensor. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/PrelinearizeTuple.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/PrelinearizeTuple.java index a127039b9f7..d8d566c8a1c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/PrelinearizeTuple.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/PrelinearizeTuple.java @@ -22,10 +22,10 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.Operands; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.util.ndarray.Shape; /** * An op which linearizes multiple Tensor values to an opaque variant tensor. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/PrivateThreadPoolDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/PrivateThreadPoolDataset.java index 915815dc5d6..d86343a5e67 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/PrivateThreadPoolDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/PrivateThreadPoolDataset.java @@ -23,10 +23,10 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.types.TInt64; +import org.tensorflow.util.ndarray.Shape; /** * Creates a dataset that uses a custom thread pool to compute `input_dataset`. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RebatchDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RebatchDataset.java index d728bd1913f..15456ac8c49 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RebatchDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RebatchDataset.java @@ -23,10 +23,10 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.types.TInt64; +import org.tensorflow.util.ndarray.Shape; /** * Creates a dataset that changes the batch size. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceConditionalAccumulator.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceConditionalAccumulator.java index 7bef7f1c040..3d393e79dfe 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceConditionalAccumulator.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceConditionalAccumulator.java @@ -22,9 +22,9 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.util.ndarray.Shape; /** * A conditional accumulator for aggregating gradients. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/SamplingDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/SamplingDataset.java index 0e22cb780a8..da1bece1f3e 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/SamplingDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/SamplingDataset.java @@ -23,11 +23,11 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.types.TFloat; import org.tensorflow.types.TInt64; +import org.tensorflow.util.ndarray.Shape; /** * Creates a dataset that contains `rate` elements from the `input_dataset`. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ShardDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ShardDataset.java index d8055110720..efa638738bd 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ShardDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ShardDataset.java @@ -23,10 +23,10 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.types.TInt64; +import org.tensorflow.util.ndarray.Shape; /** * Creates a `Dataset` that includes only 1/`num_shards` of this dataset. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ShuffleDatasetV2.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ShuffleDatasetV2.java index 375b72c1da8..5e5ac30309b 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ShuffleDatasetV2.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ShuffleDatasetV2.java @@ -23,10 +23,10 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.types.TInt64; +import org.tensorflow.util.ndarray.Shape; /** */ diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/SleepDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/SleepDataset.java index 870559adbcc..b5f59187ab0 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/SleepDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/SleepDataset.java @@ -23,10 +23,10 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.types.TInt64; +import org.tensorflow.util.ndarray.Shape; /** */ diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/SlidingWindowDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/SlidingWindowDataset.java index b816c50ee2d..63df8f29fb1 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/SlidingWindowDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/SlidingWindowDataset.java @@ -23,10 +23,10 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.types.TInt64; +import org.tensorflow.util.ndarray.Shape; /** * Creates a dataset that passes a sliding window over `input_dataset`. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/SnapshotDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/SnapshotDataset.java index 168e304493f..ed573b0b0f8 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/SnapshotDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/SnapshotDataset.java @@ -23,10 +23,10 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.types.TString; +import org.tensorflow.util.ndarray.Shape; /** * Creates a dataset that will write to / read from a snapshot. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TemporaryVariable.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TemporaryVariable.java index 862282d1554..49df5330f0f 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TemporaryVariable.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TemporaryVariable.java @@ -22,10 +22,10 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.util.ndarray.Shape; /** * Returns a tensor that may be mutated, but only persists within a single step. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArray.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArray.java index 4179e7707de..e81619e2946 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArray.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArray.java @@ -22,12 +22,12 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; import org.tensorflow.types.TFloat; import org.tensorflow.types.TInt32; +import org.tensorflow.util.ndarray.Shape; /** * An array of Tensors of given size. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArrayConcat.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArrayConcat.java index f2164e72042..78a05aeab6f 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArrayConcat.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArrayConcat.java @@ -22,12 +22,12 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; import org.tensorflow.types.TFloat; import org.tensorflow.types.TInt64; +import org.tensorflow.util.ndarray.Shape; /** * Concat the elements from the TensorArray into value `value`. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArrayGather.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArrayGather.java index 0d7620a1cb4..91c4e50dfd5 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArrayGather.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArrayGather.java @@ -22,12 +22,12 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; import org.tensorflow.types.TFloat; import org.tensorflow.types.TInt32; +import org.tensorflow.util.ndarray.Shape; /** * Gather specific elements from the TensorArray into output `value`. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArrayPack.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArrayPack.java index 24397abdb0a..cb1459a9b3b 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArrayPack.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArrayPack.java @@ -22,12 +22,12 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; import org.tensorflow.types.TFloat; import org.tensorflow.types.TString; +import org.tensorflow.util.ndarray.Shape; /** * @param data type for {@code value()} output diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListConcat.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListConcat.java index 6f0cd88602c..361afa8e1df 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListConcat.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListConcat.java @@ -22,11 +22,11 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; import org.tensorflow.types.TInt64; +import org.tensorflow.util.ndarray.Shape; /** * Concats all tensors in the list along the 0th dimension. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ThreadPoolDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ThreadPoolDataset.java index 743a66768e9..d1c2807a4af 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ThreadPoolDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ThreadPoolDataset.java @@ -23,9 +23,9 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.util.ndarray.Shape; /** * Creates a dataset that uses a custom thread pool to compute `input_dataset`. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/UniqueDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/UniqueDataset.java index 38a5add2c7b..e0b2dafa30a 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/UniqueDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/UniqueDataset.java @@ -23,9 +23,9 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.util.ndarray.Shape; /** * Creates a dataset that contains the unique elements of `input_dataset`. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/VarHandleOp.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/VarHandleOp.java index 82df6ed84ae..612e190a009 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/VarHandleOp.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/VarHandleOp.java @@ -22,10 +22,10 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.util.ndarray.Shape; /** * Creates a handle to a Variable resource. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Variable.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Variable.java index fd967f399be..06ef3e7c8bd 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Variable.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Variable.java @@ -22,10 +22,10 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.util.ndarray.Shape; /** * Holds state in the form of a tensor that persists across steps. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/AnonymousIterator.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/AnonymousIterator.java index 0a25926992d..2234bddccc4 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/AnonymousIterator.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/AnonymousIterator.java @@ -23,10 +23,10 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.util.ndarray.Shape; /** * A container for an iterator resource. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/BatchDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/BatchDataset.java index 479a2a55dc3..78b925b8f64 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/BatchDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/BatchDataset.java @@ -23,11 +23,11 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.types.TBool; import org.tensorflow.types.TInt64; +import org.tensorflow.util.ndarray.Shape; /** * Creates a dataset that batches `batch_size` elements from `input_dataset`. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/BytesProducedStatsDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/BytesProducedStatsDataset.java index 1ca99944e76..2d93235c55a 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/BytesProducedStatsDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/BytesProducedStatsDataset.java @@ -23,10 +23,10 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.types.TString; +import org.tensorflow.util.ndarray.Shape; /** * Records the bytes size of each element of `input_dataset` in a StatsAggregator. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/CacheDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/CacheDataset.java index f1260ce30fa..c18ded9941f 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/CacheDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/CacheDataset.java @@ -23,10 +23,10 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.types.TString; +import org.tensorflow.util.ndarray.Shape; /** * Creates a dataset that caches elements from `input_dataset`. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ConcatenateDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ConcatenateDataset.java index d37453d2294..950e2532696 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ConcatenateDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ConcatenateDataset.java @@ -23,9 +23,9 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.util.ndarray.Shape; /** * Creates a dataset that concatenates `input_dataset` with `another_dataset`. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/DatasetToSingleElement.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/DatasetToSingleElement.java index dcfb288f51a..d86028f4d15 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/DatasetToSingleElement.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/DatasetToSingleElement.java @@ -25,9 +25,9 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.util.ndarray.Shape; /** * Outputs the single element from the given dataset. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/DenseToSparseBatchDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/DenseToSparseBatchDataset.java index 2db55af3810..b9ab05b5613 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/DenseToSparseBatchDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/DenseToSparseBatchDataset.java @@ -23,10 +23,10 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.types.TInt64; +import org.tensorflow.util.ndarray.Shape; /** * Creates a dataset that batches input elements into a SparseTensor. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalAssertNextDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalAssertNextDataset.java index 3f57f25027b..e245bc28621 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalAssertNextDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalAssertNextDataset.java @@ -23,10 +23,10 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.types.TString; +import org.tensorflow.util.ndarray.Shape; /** */ diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalCsvDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalCsvDataset.java index 54934cadc20..88f2ee3304d 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalCsvDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalCsvDataset.java @@ -22,13 +22,13 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.Operands; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.types.TBool; import org.tensorflow.types.TInt64; import org.tensorflow.types.TString; +import org.tensorflow.util.ndarray.Shape; /** */ diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalDirectedInterleaveDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalDirectedInterleaveDataset.java index eb86ee659fd..9f762830975 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalDirectedInterleaveDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalDirectedInterleaveDataset.java @@ -23,10 +23,10 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.Operands; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.util.ndarray.Shape; /** * A substitute for `InterleaveDataset` on a fixed list of `N` datasets. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalIgnoreErrorsDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalIgnoreErrorsDataset.java index da4727840f6..0ec6cdedd96 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalIgnoreErrorsDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalIgnoreErrorsDataset.java @@ -23,9 +23,9 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.util.ndarray.Shape; /** * Creates a dataset that contains the elements of `input_dataset` ignoring errors. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalLmdbDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalLmdbDataset.java index b130658c074..910d10d5ae4 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalLmdbDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalLmdbDataset.java @@ -23,10 +23,10 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.types.TString; +import org.tensorflow.util.ndarray.Shape; /** */ diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalNonSerializableDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalNonSerializableDataset.java index 5f49a069940..032cd7ca718 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalNonSerializableDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalNonSerializableDataset.java @@ -23,9 +23,9 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.util.ndarray.Shape; /** */ diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalSleepDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalSleepDataset.java index 6460da0a1ee..0a141352251 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalSleepDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalSleepDataset.java @@ -23,10 +23,10 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.types.TInt64; +import org.tensorflow.util.ndarray.Shape; /** */ diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalThreadPoolDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalThreadPoolDataset.java index 375502193fe..efaede5c257 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalThreadPoolDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalThreadPoolDataset.java @@ -23,9 +23,9 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.util.ndarray.Shape; /** * Creates a dataset that uses a custom thread pool to compute `input_dataset`. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalUniqueDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalUniqueDataset.java index 1257ad94c90..48dc9bd0b74 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalUniqueDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalUniqueDataset.java @@ -23,9 +23,9 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.util.ndarray.Shape; /** * Creates a dataset that contains the unique elements of `input_dataset`. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/FilterByLastComponentDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/FilterByLastComponentDataset.java index 84d1cedc840..b0578a3c7bc 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/FilterByLastComponentDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/FilterByLastComponentDataset.java @@ -23,9 +23,9 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.util.ndarray.Shape; /** * Creates a dataset containing elements of first component of `input_dataset` having true in the last component. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/Iterator.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/Iterator.java index abed9295156..117c29028ab 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/Iterator.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/Iterator.java @@ -23,9 +23,9 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.util.ndarray.Shape; /** */ diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/IteratorFromStringHandle.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/IteratorFromStringHandle.java index 222146a3668..070ad0928b4 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/IteratorFromStringHandle.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/IteratorFromStringHandle.java @@ -23,10 +23,10 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.types.TString; +import org.tensorflow.util.ndarray.Shape; /** */ diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/IteratorGetNext.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/IteratorGetNext.java index 9c76b3877bb..62a575dd23c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/IteratorGetNext.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/IteratorGetNext.java @@ -25,10 +25,10 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.util.ndarray.Shape; /** * Gets the next output from the given iterator . diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/IteratorGetNextAsOptional.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/IteratorGetNextAsOptional.java index 5207cd7b9cd..5b0f5fdb49f 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/IteratorGetNextAsOptional.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/IteratorGetNextAsOptional.java @@ -23,10 +23,10 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.util.ndarray.Shape; /** * Gets the next output from the given iterator as an Optional variant. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/IteratorGetNextSync.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/IteratorGetNextSync.java index 1ca187fd43b..8df3803c4c2 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/IteratorGetNextSync.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/IteratorGetNextSync.java @@ -25,10 +25,10 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.util.ndarray.Shape; /** * Gets the next output from the given iterator. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/KafkaDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/KafkaDataset.java new file mode 100644 index 00000000000..760058283a2 --- /dev/null +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/KafkaDataset.java @@ -0,0 +1,90 @@ +/* Copyright 2018 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +=======================================================================*/ + +// This class has been generated, DO NOT EDIT! + +package org.tensorflow.op.data; + +import org.tensorflow.Operand; +import org.tensorflow.Operation; +import org.tensorflow.OperationBuilder; +import org.tensorflow.Output; +import org.tensorflow.op.PrimitiveOp; +import org.tensorflow.op.Scope; +import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.TBool; +import org.tensorflow.types.TInt64; +import org.tensorflow.types.TString; + +/** + * Creates a dataset that emits the messages of one or more Kafka topics. + */ +@Operator(group = "data") +public final class KafkaDataset extends PrimitiveOp implements Operand { + + /** + * Factory method to create a class wrapping a new KafkaDataset operation. + * + * @param scope current scope + * @param topics A `tf.string` tensor containing one or more subscriptions, + * in the format of [topic:partition:offset:length], + * by default length is -1 for unlimited. + * @param servers A list of bootstrap servers. + * @param group The consumer group id. + * @param eof If True, the kafka reader will stop on EOF. + * @param timeout The timeout value for the Kafka Consumer to wait + * (in millisecond). + * @param configGlobal A `tf.string` tensor containing global configuration + * properties in [Key=Value] format, + * eg. ["enable.auto.commit=false", "heartbeat.interval.ms=2000"], + * please refer to 'Global configuration properties' in librdkafka doc. + * @param configTopic A `tf.string` tensor containing topic configuration + * properties in [Key=Value] format, eg. ["auto.offset.reset=earliest"], + * please refer to 'Topic configuration properties' in librdkafka doc. + * @return a new instance of KafkaDataset + */ + public static KafkaDataset create(Scope scope, Operand topics, Operand servers, Operand group, Operand eof, Operand timeout, Operand configGlobal, Operand configTopic) { + OperationBuilder opBuilder = scope.env().opBuilder("KafkaDataset", scope.makeOpName("KafkaDataset")); + opBuilder.addInput(topics.asOutput()); + opBuilder.addInput(servers.asOutput()); + opBuilder.addInput(group.asOutput()); + opBuilder.addInput(eof.asOutput()); + opBuilder.addInput(timeout.asOutput()); + opBuilder.addInput(configGlobal.asOutput()); + opBuilder.addInput(configTopic.asOutput()); + opBuilder = scope.applyControlDependencies(opBuilder); + return new KafkaDataset(opBuilder.build()); + } + + /** + */ + public Output handle() { + return handle; + } + + @Override + @SuppressWarnings("unchecked") + public Output asOutput() { + return (Output) handle; + } + + private Output handle; + + private KafkaDataset(Operation operation) { + super(operation); + int outputIdx = 0; + handle = operation.output(outputIdx++); + } +} diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/LatencyStatsDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/LatencyStatsDataset.java index 2a940c9ee54..74c7e5398e2 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/LatencyStatsDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/LatencyStatsDataset.java @@ -23,10 +23,10 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.types.TString; +import org.tensorflow.util.ndarray.Shape; /** * Records the latency of producing `input_dataset` elements in a StatsAggregator. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ModelDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ModelDataset.java index ddb9efb7408..a801a71a736 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ModelDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ModelDataset.java @@ -23,9 +23,9 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.util.ndarray.Shape; /** * Identity transformation that models performance. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/MultiDeviceIterator.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/MultiDeviceIterator.java index 8e8882f98f0..4e4062bf88c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/MultiDeviceIterator.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/MultiDeviceIterator.java @@ -23,9 +23,9 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.util.ndarray.Shape; /** * Creates a MultiDeviceIterator resource. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/MultiDeviceIteratorFromStringHandle.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/MultiDeviceIteratorFromStringHandle.java index f16e81b4aab..19193432f08 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/MultiDeviceIteratorFromStringHandle.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/MultiDeviceIteratorFromStringHandle.java @@ -23,10 +23,10 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.types.TString; +import org.tensorflow.util.ndarray.Shape; /** * Generates a MultiDeviceIterator resource from its provided string handle. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/MultiDeviceIteratorGetNextFromShard.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/MultiDeviceIteratorGetNextFromShard.java index df65d1f249e..b82f9b53ed1 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/MultiDeviceIteratorGetNextFromShard.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/MultiDeviceIteratorGetNextFromShard.java @@ -25,11 +25,11 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.types.TInt32; import org.tensorflow.types.TInt64; +import org.tensorflow.util.ndarray.Shape; /** * Gets next element for the provided shard number. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/OptimizeDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/OptimizeDataset.java index d52f8304162..85ecc3ddc2d 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/OptimizeDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/OptimizeDataset.java @@ -23,10 +23,10 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.types.TString; +import org.tensorflow.util.ndarray.Shape; /** * Creates a dataset by applying optimizations to `input_dataset`. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/OptionalGetValue.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/OptionalGetValue.java index fea5a88875c..4b8d8fa54db 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/OptionalGetValue.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/OptionalGetValue.java @@ -25,10 +25,10 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.util.ndarray.Shape; /** * Returns the value stored in an Optional variant or raises an error if none exists. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/PaddedBatchDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/PaddedBatchDataset.java index f9dca01fd60..2d485265c0d 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/PaddedBatchDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/PaddedBatchDataset.java @@ -22,12 +22,12 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.Operands; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.types.TBool; import org.tensorflow.types.TInt64; +import org.tensorflow.util.ndarray.Shape; /** * Creates a dataset that batches and pads `batch_size` elements from the input. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ParseExampleDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ParseExampleDataset.java index 7272319c35d..5d5af626330 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ParseExampleDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ParseExampleDataset.java @@ -23,11 +23,11 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.Operands; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.types.TInt64; +import org.tensorflow.util.ndarray.Shape; /** * Transforms `input_dataset` containing `Example` protos as vectors of DT_STRING into a dataset of `Tensor` or `SparseTensor` objects representing the parsed features. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/PrefetchDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/PrefetchDataset.java index 4a58eabfb18..a0edae8b736 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/PrefetchDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/PrefetchDataset.java @@ -23,10 +23,10 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.types.TInt64; +import org.tensorflow.util.ndarray.Shape; /** * Creates a dataset that asynchronously prefetches elements from `input_dataset`. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/RandomDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/RandomDataset.java index 540906e012d..63f5a0b74e8 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/RandomDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/RandomDataset.java @@ -23,10 +23,10 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.types.TInt64; +import org.tensorflow.util.ndarray.Shape; /** * Creates a Dataset that returns pseudorandom numbers. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/RangeDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/RangeDataset.java index feb417604d7..b8faf8e0081 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/RangeDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/RangeDataset.java @@ -23,10 +23,10 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.types.TInt64; +import org.tensorflow.util.ndarray.Shape; /** * Creates a dataset with a range of values. Corresponds to python's xrange. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/RepeatDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/RepeatDataset.java index 907444ab7e2..2bee1fdc7b6 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/RepeatDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/RepeatDataset.java @@ -23,10 +23,10 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.types.TInt64; +import org.tensorflow.util.ndarray.Shape; /** * Creates a dataset that emits the outputs of `input_dataset` `count` times. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/SetStatsAggregatorDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/SetStatsAggregatorDataset.java index 13531d71b74..47f07a5c993 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/SetStatsAggregatorDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/SetStatsAggregatorDataset.java @@ -23,10 +23,10 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.types.TString; +import org.tensorflow.util.ndarray.Shape; /** */ diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ShuffleAndRepeatDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ShuffleAndRepeatDataset.java index 6541e0b3e8b..e448b75bb7b 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ShuffleAndRepeatDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ShuffleAndRepeatDataset.java @@ -23,10 +23,10 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.types.TInt64; +import org.tensorflow.util.ndarray.Shape; /** * Creates a dataset that shuffles and repeats elements from `input_dataset` diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ShuffleDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ShuffleDataset.java index 344cada9b03..e5505b9d375 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ShuffleDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ShuffleDataset.java @@ -23,10 +23,10 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.types.TInt64; +import org.tensorflow.util.ndarray.Shape; /** * Creates a dataset that shuffles elements from `input_dataset` pseudorandomly. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/SkipDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/SkipDataset.java index 3c41ef89369..78935b9571e 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/SkipDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/SkipDataset.java @@ -23,10 +23,10 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.types.TInt64; +import org.tensorflow.util.ndarray.Shape; /** * Creates a dataset that skips `count` elements from the `input_dataset`. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/SqlDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/SqlDataset.java index 78d445fbdc5..d9dcba1cfc5 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/SqlDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/SqlDataset.java @@ -23,10 +23,10 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.types.TString; +import org.tensorflow.util.ndarray.Shape; /** * Creates a dataset that executes a SQL query and emits rows of the result set. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/TakeDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/TakeDataset.java index 113dd76933a..ab0eb65ad12 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/TakeDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/TakeDataset.java @@ -23,10 +23,10 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.types.TInt64; +import org.tensorflow.util.ndarray.Shape; /** * Creates a dataset that contains `count` elements from the `input_dataset`. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/TensorDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/TensorDataset.java index b71b05ad0e0..3a8dd17f143 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/TensorDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/TensorDataset.java @@ -22,10 +22,10 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.Operands; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.util.ndarray.Shape; /** * Creates a dataset that emits `components` as a tuple of tensors once. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/TensorSliceDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/TensorSliceDataset.java index 0830c01cdc4..c9f941e3f17 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/TensorSliceDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/TensorSliceDataset.java @@ -22,10 +22,10 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.Operands; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.util.ndarray.Shape; /** * Creates a dataset that emits each dim-0 slice of `components` once. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/UnbatchDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/UnbatchDataset.java index 2cbf5d5f10f..455bfd49525 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/UnbatchDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/UnbatchDataset.java @@ -23,9 +23,9 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.util.ndarray.Shape; /** * A dataset that splits the elements of its input into multiple elements. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/WindowDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/WindowDataset.java index 76c9fda3faa..78d97840a15 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/WindowDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/WindowDataset.java @@ -23,11 +23,11 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.types.TBool; import org.tensorflow.types.TInt64; +import org.tensorflow.util.ndarray.Shape; /** * A dataset that creates window datasets from the input dataset. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ZipDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ZipDataset.java index 78cff7d4037..66aa0769eef 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ZipDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ZipDataset.java @@ -23,10 +23,10 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.Operands; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.util.ndarray.Shape; /** * Creates a dataset that zips together `input_datasets`. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/FifoQueue.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/FifoQueue.java index 05780aba4fa..5f437b0844c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/FifoQueue.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/FifoQueue.java @@ -23,10 +23,10 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.util.ndarray.Shape; /** * A queue that produces elements in first-in first-out order. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/PaddingFifoQueue.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/PaddingFifoQueue.java index a57d936acac..3b32788cd1e 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/PaddingFifoQueue.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/PaddingFifoQueue.java @@ -23,10 +23,10 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.util.ndarray.Shape; /** * A queue that produces elements in first-in first-out order. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ParseExample.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ParseExample.java index b1862b4fe0a..4067039626f 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ParseExample.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ParseExample.java @@ -24,13 +24,13 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.Operands; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; import org.tensorflow.types.TInt64; import org.tensorflow.types.TString; +import org.tensorflow.util.ndarray.Shape; /** * Transforms a vector of brain.Example protos (as strings) into typed tensors. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ParseSequenceExample.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ParseSequenceExample.java index 9683c8fd726..ef6e05e84a4 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ParseSequenceExample.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ParseSequenceExample.java @@ -24,13 +24,13 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.Operands; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; import org.tensorflow.types.TInt64; import org.tensorflow.types.TString; +import org.tensorflow.util.ndarray.Shape; /** * Transforms a vector of brain.SequenceExample protos (as strings) into typed tensors. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ParseSingleExample.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ParseSingleExample.java index 4a5c71785ea..4962fdfe715 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ParseSingleExample.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ParseSingleExample.java @@ -24,13 +24,13 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.Operands; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; import org.tensorflow.types.TInt64; import org.tensorflow.types.TString; +import org.tensorflow.util.ndarray.Shape; /** * Transforms a tf.Example proto (as a string) into typed tensors. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ParseSingleSequenceExample.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ParseSingleSequenceExample.java index 1732bc1aa20..19bf2e7301c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ParseSingleSequenceExample.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ParseSingleSequenceExample.java @@ -24,13 +24,13 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.Operands; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; import org.tensorflow.types.TInt64; import org.tensorflow.types.TString; +import org.tensorflow.util.ndarray.Shape; /** * Transforms a scalar brain.SequenceExample proto (as strings) into typed tensors. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/PriorityQueue.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/PriorityQueue.java index e137ef44bc5..d2f6c5ffeb2 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/PriorityQueue.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/PriorityQueue.java @@ -23,10 +23,10 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.util.ndarray.Shape; /** * A queue that produces elements sorted by the first component value. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/RandomShuffleQueue.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/RandomShuffleQueue.java index 1d0f93cfd1b..9f8935cdfd5 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/RandomShuffleQueue.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/RandomShuffleQueue.java @@ -23,10 +23,10 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.util.ndarray.Shape; /** * A queue that randomizes the order of elements. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/AccumulateN.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/AccumulateN.java index 19cd9a83d3a..250071c9aed 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/AccumulateN.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/AccumulateN.java @@ -21,11 +21,11 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.Operands; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.util.ndarray.Shape; /** * Returns the element-wise sum of a list of tensors. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseConditionalAccumulator.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseConditionalAccumulator.java index 240d8750ad7..df0530e1ef6 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseConditionalAccumulator.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseConditionalAccumulator.java @@ -22,11 +22,11 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; import org.tensorflow.types.TString; +import org.tensorflow.util.ndarray.Shape; /** * A conditional accumulator for aggregating sparse gradients. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ConditionalAccumulator.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ConditionalAccumulator.java index b48ebc3fd38..bb385369b6a 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ConditionalAccumulator.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ConditionalAccumulator.java @@ -22,11 +22,11 @@ import org.tensorflow.Operation; import org.tensorflow.OperationBuilder; import org.tensorflow.Output; -import org.tensorflow.nio.nd.Shape; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; import org.tensorflow.types.TString; +import org.tensorflow.util.ndarray.Shape; /** * A conditional accumulator for aggregating gradients. diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/AbstractOperation.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/AbstractOperation.java index 801c0249ebc..526803fcb18 100644 --- a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/AbstractOperation.java +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/AbstractOperation.java @@ -15,7 +15,7 @@ package org.tensorflow; -import org.tensorflow.nio.nd.Shape; +import org.tensorflow.util.ndarray.Shape; /** * Base class for {@link Operation} implementations. diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/DataType.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/DataType.java index e5c5d652ae7..a0aefc785e6 100644 --- a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/DataType.java +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/DataType.java @@ -16,7 +16,7 @@ package org.tensorflow; import org.tensorflow.internal.c_api.TF_Tensor; -import org.tensorflow.nio.nd.Shape; +import org.tensorflow.util.ndarray.Shape; /** Represents a type of elements in a {@link Tensor} */ public final class DataType { diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/EagerOperation.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/EagerOperation.java index 89c054f887b..10943562de2 100644 --- a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/EagerOperation.java +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/EagerOperation.java @@ -16,7 +16,7 @@ package org.tensorflow; import java.util.concurrent.atomic.AtomicReferenceArray; -import org.tensorflow.nio.nd.Shape; +import org.tensorflow.util.ndarray.Shape; /** * Implementation of an {@link Operation} executed eagerly. diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/EagerOperationBuilder.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/EagerOperationBuilder.java index 2f06acc8303..8d2e9faab3b 100644 --- a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/EagerOperationBuilder.java +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/EagerOperationBuilder.java @@ -17,7 +17,7 @@ import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; -import org.tensorflow.nio.nd.Shape; +import org.tensorflow.util.ndarray.Shape; /** * An {@link OperationBuilder} for building {@link Operation Operations} that are executed eagerly. diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/Graph.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/Graph.java index 3a175b17ecc..73e8e34e152 100644 --- a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/Graph.java +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/Graph.java @@ -247,14 +247,20 @@ public Output[] addGradients(Output y, Output[] x) { * *

Example usage (prior to Java 8): * - *

{@code WhileSubgraphBuilder bodyGraphBuilder = new WhileSubgraphBuilder() { @Override public - * void buildSubgraph(Graph bodyGraph, Output[] bodyInputs, Output[] bodyOutputs) { // build - * body subgraph } }; } - * - *

Example usage (after Java 8): - * - *

{@code WhileSubgraphBuilder bodyGraphBuilder = (bodyGraph, bodyInputs, bodyOutputs) -> { // - * build body subgraph };} + *

{@code
+   * WhileSubgraphBuilder bodyGraphBuilder = new WhileSubgraphBuilder() {
+   *   @Override
+   *   public void buildSubgraph(Graph bodyGraph, Output[] bodyInputs, Output[] bodyOutputs) { // build
+   *     body subgraph
+   *   }
+   * };
+   * }
+ * Example usage (after Java 8): + *
{@code
+   * WhileSubgraphBuilder bodyGraphBuilder = (bodyGraph, bodyInputs, bodyOutputs) -> { //
+   *   build body subgraph
+   * };
+   * }
*/ public interface WhileSubgraphBuilder { /** diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/GraphOperation.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/GraphOperation.java index d61dc221ded..1ea6f3ffa1b 100644 --- a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/GraphOperation.java +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/GraphOperation.java @@ -15,7 +15,7 @@ package org.tensorflow; -import org.tensorflow.nio.nd.Shape; +import org.tensorflow.util.ndarray.Shape; /** * Implementation for an {@link Operation} added as a node to a {@link Graph}. diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/GraphOperationBuilder.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/GraphOperationBuilder.java index 368a7ad2b23..515fc6faec2 100644 --- a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/GraphOperationBuilder.java +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/GraphOperationBuilder.java @@ -16,7 +16,7 @@ package org.tensorflow; import java.nio.charset.Charset; -import org.tensorflow.nio.nd.Shape; +import org.tensorflow.util.ndarray.Shape; /** An {@link OperationBuilder} for adding {@link GraphOperation}s to a {@link Graph}. */ public final class GraphOperationBuilder implements OperationBuilder { diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/Operand.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/Operand.java index d42e3c20678..f7b0ca47fd0 100644 --- a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/Operand.java +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/Operand.java @@ -53,7 +53,7 @@ public interface Operand { * * @throws IllegalStateException if this is an operand of a graph */ - default T tensorData() { + default T data() { return asOutput().tensor().data(); } } diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/OperationBuilder.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/OperationBuilder.java index 9c19ee9261f..1630c58c352 100644 --- a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/OperationBuilder.java +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/OperationBuilder.java @@ -15,7 +15,7 @@ package org.tensorflow; -import org.tensorflow.nio.nd.Shape; +import org.tensorflow.util.ndarray.Shape; /** * A builder for {@link Operation}s. diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/Output.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/Output.java index bcb3c7e00bc..3c27bf3faaa 100644 --- a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/Output.java +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/Output.java @@ -16,7 +16,7 @@ package org.tensorflow; import java.util.Objects; -import org.tensorflow.nio.nd.Shape; +import org.tensorflow.util.ndarray.Shape; /** * A symbolic handle to a tensor produced by an {@link Operation}. diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/Tensor.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/Tensor.java index 178db84a175..0b78d20db63 100644 --- a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/Tensor.java +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/Tensor.java @@ -27,7 +27,7 @@ import java.util.Arrays; import java.util.HashMap; import org.tensorflow.internal.c_api.TF_Tensor; -import org.tensorflow.nio.nd.Shape; +import org.tensorflow.util.ndarray.Shape; import org.tensorflow.types.TBool; import org.tensorflow.types.TDouble; import org.tensorflow.types.TFloat; diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/internal/buffer/RawBufferHelper.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/internal/buffer/RawBufferHelper.java index dbeec5bc26b..472f6d37129 100644 --- a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/internal/buffer/RawBufferHelper.java +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/internal/buffer/RawBufferHelper.java @@ -1,46 +1,54 @@ package org.tensorflow.internal.buffer; -import static org.tensorflow.internal.c_api.global.tensorflow.TF_TensorByteSize; -import static org.tensorflow.internal.c_api.global.tensorflow.TF_TensorData; - import java.lang.reflect.Field; -import org.tensorflow.internal.c_api.TF_Tensor; -import org.tensorflow.nio.buffer.ByteDataBuffer; -import org.tensorflow.nio.buffer.LongDataBuffer; -import org.tensorflow.nio.buffer.impl.raw.ByteRawDataBuffer; -import org.tensorflow.nio.buffer.impl.raw.LongRawDataBuffer; -import sun.misc.Unsafe; +import org.bytedeco.javacpp.Pointer; +import org.tensorflow.util.buffer.ByteDataBuffer; +import org.tensorflow.util.buffer.LongDataBuffer; +import org.tensorflow.util.buffer.impl.raw.ByteRawDataBuffer; +import org.tensorflow.util.buffer.impl.raw.LongRawDataBuffer; +import org.tensorflow.util.buffer.impl.raw.UnsafeReference; final class RawBufferHelper { interface Mapper { - T map(Unsafe unsafe, long address, long size, boolean readOnly); + T map(UnsafeReference unsafe, long address, long size, boolean readOnly); } - static T map(TF_Tensor nativeTensor, Mapper mapper) { - long address = TF_TensorData(nativeTensor).address(); - long byteSize = TF_TensorByteSize(nativeTensor); - return mapper.map(UNSAFE, address, byteSize, false); + static T map(Pointer tensorData, Mapper mapper) { + if (UNSAFE == null) { + throw new RuntimeException("No valid reference to an instance of 'sun.misc.Unsafe'"); + } + return mapper.map(UNSAFE, tensorData.address(), tensorData.capacity(), false); } - static StringTensorBuffer mapToStrings(TF_Tensor nativeTensor, long numElements) { - long address = TF_TensorData(nativeTensor).address(); - long byteSize = TF_TensorByteSize(nativeTensor); + static StringTensorBuffer mapToStrings(Pointer tensorData, long numElements) { + if (UNSAFE == null) { + throw new RuntimeException("No valid reference to an instance of 'sun.misc.Unsafe'"); + } long offsetByteSize = numElements * Long.BYTES; - LongDataBuffer offsets = LongRawDataBuffer.map(UNSAFE, address, numElements, false); - ByteDataBuffer data = ByteRawDataBuffer.map(UNSAFE, address + offsetByteSize, byteSize - offsetByteSize, false); + LongDataBuffer offsets = + LongRawDataBuffer.map(UNSAFE, tensorData.address(), numElements, false); + ByteDataBuffer data = + ByteRawDataBuffer.map(UNSAFE, tensorData.address() + offsetByteSize, tensorData.capacity() - offsetByteSize, false); return new StringTensorBuffer(offsets, data); } - static final Unsafe UNSAFE; + static boolean isUnsafeAvailable() { + return UNSAFE != null; + } + + private static final UnsafeReference UNSAFE; static { + UnsafeReference ref = null; try { - Field theUnsafe = Unsafe.class.getDeclaredField("theUnsafe"); + Class clazz = Class.forName("sun.misc.Unsafe"); + Field theUnsafe = clazz.getDeclaredField("theUnsafe"); theUnsafe.setAccessible(true); - UNSAFE = (Unsafe) theUnsafe.get(null); - } catch (NoSuchFieldException | IllegalAccessException e) { - throw new RuntimeException(e); + ref = UnsafeReference.from(theUnsafe.get(null)); + } catch (ClassNotFoundException | NoSuchFieldException | IllegalAccessException e) { + // Do nothing and leave unsafe reference as null } + UNSAFE = ref; } } diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/internal/buffer/StringTensorBuffer.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/internal/buffer/StringTensorBuffer.java index 00d2e1034dc..919812610e4 100644 --- a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/internal/buffer/StringTensorBuffer.java +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/internal/buffer/StringTensorBuffer.java @@ -4,15 +4,15 @@ import java.nio.ByteBuffer; import java.nio.LongBuffer; import java.nio.ReadOnlyBufferException; -import org.tensorflow.nio.buffer.ByteDataBuffer; -import org.tensorflow.nio.buffer.DataBuffer; -import org.tensorflow.nio.buffer.DataBuffers; -import org.tensorflow.nio.buffer.LongDataBuffer; -import org.tensorflow.nio.buffer.impl.AbstractDataBuffer; -import org.tensorflow.nio.buffer.impl.Validator; -import org.tensorflow.nio.buffer.impl.raw.ByteRawDataBuffer; -import org.tensorflow.nio.buffer.impl.raw.LongRawDataBuffer; -import org.tensorflow.nio.nd.NdArray; +import org.tensorflow.util.buffer.ByteDataBuffer; +import org.tensorflow.util.buffer.DataBuffer; +import org.tensorflow.util.buffer.DataBuffers; +import org.tensorflow.util.buffer.LongDataBuffer; +import org.tensorflow.util.buffer.impl.AbstractDataBuffer; +import org.tensorflow.util.buffer.impl.Validator; +import org.tensorflow.util.buffer.impl.raw.ByteRawDataBuffer; +import org.tensorflow.util.buffer.impl.raw.LongRawDataBuffer; +import org.tensorflow.util.ndarray.NdArray; public class StringTensorBuffer extends AbstractDataBuffer { @@ -22,16 +22,16 @@ public long size() { } @Override - public String get(long index) { + public String getObject(long index) { Validator.getArgs(this, index); - long offset = offsets.get(index); + long offset = offsets.getLong(index); // Read string length as a varint from the given offset byte b; int pos = 0; int length = 0; do { - b = data.get(offset++); + b = data.getByte(offset++); length |= (b & 0x7F) << pos++; } while ((b & 0x80) != 0); @@ -43,7 +43,7 @@ public String get(long index) { } @Override - public DataBuffer set(String value, long index) { + public DataBuffer setObject(String value, long index) { throw new ReadOnlyBufferException(); } @@ -80,7 +80,7 @@ public DataBuffer narrow(long size) { public void init(NdArray src) { DataWriter writer = new DataWriter(); - src.scalars().forEach(s -> writer.writeNext(s.getValue())); + src.scalars().forEach(s -> writer.writeNext(s.getObject())); } StringTensorBuffer(LongDataBuffer offsets, ByteDataBuffer data) { diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/internal/buffer/TensorBuffers.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/internal/buffer/TensorBuffers.java index 564500a5d02..9bc637cac03 100644 --- a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/internal/buffer/TensorBuffers.java +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/internal/buffer/TensorBuffers.java @@ -1,87 +1,87 @@ package org.tensorflow.internal.buffer; +import static org.tensorflow.internal.c_api.global.tensorflow.TF_TensorByteSize; +import static org.tensorflow.internal.c_api.global.tensorflow.TF_TensorData; + import java.nio.ByteBuffer; import java.nio.LongBuffer; +import org.bytedeco.javacpp.Pointer; import org.tensorflow.internal.c_api.TF_Tensor; -import org.tensorflow.nio.buffer.ByteDataBuffer; -import org.tensorflow.nio.buffer.DataBuffers; -import org.tensorflow.nio.buffer.DoubleDataBuffer; -import org.tensorflow.nio.buffer.FloatDataBuffer; -import org.tensorflow.nio.buffer.IntDataBuffer; -import org.tensorflow.nio.buffer.LongDataBuffer; -import org.tensorflow.nio.buffer.impl.raw.ByteRawDataBuffer; -import org.tensorflow.nio.buffer.impl.raw.DoubleRawDataBuffer; -import org.tensorflow.nio.buffer.impl.raw.FloatRawDataBuffer; -import org.tensorflow.nio.buffer.impl.raw.IntRawDataBuffer; -import org.tensorflow.nio.buffer.impl.raw.LongRawDataBuffer; +import org.tensorflow.util.buffer.ByteDataBuffer; +import org.tensorflow.util.buffer.DataBuffers; +import org.tensorflow.util.buffer.DoubleDataBuffer; +import org.tensorflow.util.buffer.FloatDataBuffer; +import org.tensorflow.util.buffer.IntDataBuffer; +import org.tensorflow.util.buffer.LongDataBuffer; +import org.tensorflow.util.buffer.impl.raw.ByteRawDataBuffer; +import org.tensorflow.util.buffer.impl.raw.DoubleRawDataBuffer; +import org.tensorflow.util.buffer.impl.raw.FloatRawDataBuffer; +import org.tensorflow.util.buffer.impl.raw.IntRawDataBuffer; +import org.tensorflow.util.buffer.impl.raw.LongRawDataBuffer; public final class TensorBuffers { public static ByteDataBuffer toBytes(TF_Tensor nativeTensor) { - if (unsafeAvailable) { - return RawBufferHelper.map(nativeTensor, ByteRawDataBuffer::map); + Pointer tensorData = tensorData(nativeTensor); + if (RawBufferHelper.isUnsafeAvailable()) { + return RawBufferHelper.map(tensorData, ByteRawDataBuffer::map); } - return DataBuffers.wrap(directBuffer(nativeTensor.address())); + return DataBuffers.wrap(tensorData.asByteBuffer()); } public static IntDataBuffer toInts(TF_Tensor nativeTensor) { - if (unsafeAvailable) { - return RawBufferHelper.map(nativeTensor, IntRawDataBuffer::map); + Pointer tensorData = tensorData(nativeTensor); + if (RawBufferHelper.isUnsafeAvailable()) { + return RawBufferHelper.map(tensorData, IntRawDataBuffer::map); } - return DataBuffers.wrap(directBuffer(nativeTensor.address()).asIntBuffer()); + return DataBuffers.wrap(tensorData.asByteBuffer().asIntBuffer()); } public static LongDataBuffer toLongs(TF_Tensor nativeTensor) { - if (unsafeAvailable) { - return RawBufferHelper.map(nativeTensor, LongRawDataBuffer::map); + Pointer tensorData = tensorData(nativeTensor); + if (RawBufferHelper.isUnsafeAvailable()) { + return RawBufferHelper.map(tensorData, LongRawDataBuffer::map); } - return DataBuffers.wrap(directBuffer(nativeTensor.address()).asLongBuffer()); + return DataBuffers.wrap(tensorData.asByteBuffer().asLongBuffer()); } public static FloatDataBuffer toFloats(TF_Tensor nativeTensor) { - if (unsafeAvailable) { - return RawBufferHelper.map(nativeTensor, FloatRawDataBuffer::map); + Pointer tensorData = tensorData(nativeTensor); + if (RawBufferHelper.isUnsafeAvailable()) { + return RawBufferHelper.map(tensorData, FloatRawDataBuffer::map); } - return DataBuffers.wrap(directBuffer(nativeTensor.address()).asFloatBuffer()); + return DataBuffers.wrap(tensorData.asByteBuffer().asFloatBuffer()); } public static DoubleDataBuffer toDoubles(TF_Tensor nativeTensor) { - if (unsafeAvailable) { - return RawBufferHelper.map(nativeTensor, DoubleRawDataBuffer::map); + Pointer tensorData = tensorData(nativeTensor); + if (RawBufferHelper.isUnsafeAvailable()) { + return RawBufferHelper.map(tensorData, DoubleRawDataBuffer::map); } - return DataBuffers.wrap(directBuffer(nativeTensor.address()).asDoubleBuffer()); + return DataBuffers.wrap(tensorData.asByteBuffer().asDoubleBuffer()); } public static StringTensorBuffer toStrings(TF_Tensor nativeTensor, long numElements) { - if (unsafeAvailable) { - return RawBufferHelper.mapToStrings(nativeTensor, numElements); + Pointer tensorData = tensorData(nativeTensor); + if (RawBufferHelper.isUnsafeAvailable()) { + return RawBufferHelper.mapToStrings(tensorData, numElements); } if (numElements > Integer.MAX_VALUE) { throw new IllegalArgumentException("Cannot map string tensor of " + numElements + " elements"); } - ByteBuffer bytes = directBuffer(nativeTensor.address()); + ByteBuffer dataBuffer = tensorData.asByteBuffer(); - LongBuffer offsetBuffer = bytes.asLongBuffer(); + LongBuffer offsetBuffer = dataBuffer.asLongBuffer(); offsetBuffer.limit((int)numElements); LongDataBuffer offsets = DataBuffers.wrap(offsetBuffer.slice()); - ByteBuffer dataBuffer = bytes.duplicate(); dataBuffer.position((int)numElements * Long.BYTES); ByteDataBuffer data = DataBuffers.wrap(dataBuffer.slice()); return new StringTensorBuffer(offsets, data); } - private static boolean unsafeAvailable; - - static { - try { - Class.forName("sun.misc.Unsafe"); - unsafeAvailable = true; - } catch (ClassNotFoundException e) { - unsafeAvailable = false; - } + private static Pointer tensorData(TF_Tensor nativeTensor) { + return TF_TensorData(nativeTensor).capacity(TF_TensorByteSize(nativeTensor)); } - - private static native ByteBuffer directBuffer(long handle); } diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/op/core/Constant.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/op/core/Constant.java index 973fe87e32f..88858c5b25b 100644 --- a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/op/core/Constant.java +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/op/core/Constant.java @@ -51,7 +51,7 @@ public final class Constant extends PrimitiveOp implements Operand { * @return an integer constant */ public static Constant create(Scope scope, int data) { - try (Tensor value = TInt32.scalar(data)) { + try (Tensor value = TInt32.scalarOf(data)) { return create(scope, value); } } @@ -64,7 +64,7 @@ public static Constant create(Scope scope, int data) { * new constant will match those of the array. */ public static Constant create(Scope scope, int[] data) { - try (Tensor value = TInt32.vector(data)) { + try (Tensor value = TInt32.vectorOf(data)) { return create(scope, value); } } diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TBool.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TBool.java index 758306c0b34..b1ccfe23351 100644 --- a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TBool.java +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TBool.java @@ -4,37 +4,37 @@ import org.tensorflow.Tensor; import org.tensorflow.internal.buffer.TensorBuffers; import org.tensorflow.internal.c_api.TF_Tensor; -import org.tensorflow.nio.buffer.BooleanDataBuffer; -import org.tensorflow.nio.buffer.ByteDataBuffer; -import org.tensorflow.nio.buffer.DataBuffers; -import org.tensorflow.nio.buffer.adapter.BooleanDataAdapter; -import org.tensorflow.nio.nd.BooleanNdArray; -import org.tensorflow.nio.nd.NdArray; -import org.tensorflow.nio.nd.Shape; -import org.tensorflow.nio.nd.impl.dense.BooleanDenseNdArray; +import org.tensorflow.util.buffer.BooleanDataBuffer; +import org.tensorflow.util.buffer.ByteDataBuffer; +import org.tensorflow.util.buffer.DataBuffers; +import org.tensorflow.util.buffer.adapter.BooleanDataAdapter; +import org.tensorflow.util.ndarray.BooleanNdArray; +import org.tensorflow.util.ndarray.NdArray; +import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.ndarray.impl.dense.BooleanDenseNdArray; import org.tensorflow.types.family.TType; public interface TBool extends BooleanNdArray, TType { DataType DTYPE = DataType.create("BOOL", 10, 1, TBoolImpl::mapTensor); - static Tensor scalar(boolean value) { - Tensor t = tensorOfShape(); + static Tensor scalarOf(boolean value) { + Tensor t = ofShape(); t.data().setBoolean(value); return t; } - static Tensor vector(boolean... values) { - Tensor t = tensorOfShape(values.length); + static Tensor vectorOf(boolean... values) { + Tensor t = ofShape(values.length); t.data().write(values); return t; } - static Tensor tensor(Shape shape) { + static Tensor ofShape(Shape shape) { return Tensor.allocate(DTYPE, shape); } - static Tensor tensorOfShape(long... dimensionSizes) { + static Tensor ofShape(long... dimensionSizes) { return Tensor.allocate(DTYPE, Shape.make(dimensionSizes)); } @@ -59,12 +59,12 @@ private TBoolImpl(BooleanDataBuffer buffer, Shape shape) { @Override public void writeBoolean(ByteDataBuffer buffer, boolean value, long index) { - buffer.set((byte)(value ? 1 : 0), index); + buffer.setByte((byte)(value ? 1 : 0), index); } @Override public boolean readBoolean(ByteDataBuffer buffer, long index) { - return buffer.get(index) > 0; + return buffer.getByte(index) > 0; } @Override diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TDouble.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TDouble.java index 6586de80504..aeb790427c0 100644 --- a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TDouble.java +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TDouble.java @@ -4,34 +4,34 @@ import org.tensorflow.Tensor; import org.tensorflow.internal.buffer.TensorBuffers; import org.tensorflow.internal.c_api.TF_Tensor; -import org.tensorflow.nio.buffer.DoubleDataBuffer; -import org.tensorflow.nio.nd.DoubleNdArray; -import org.tensorflow.nio.nd.NdArray; -import org.tensorflow.nio.nd.Shape; -import org.tensorflow.nio.nd.impl.dense.DoubleDenseNdArray; +import org.tensorflow.util.buffer.DoubleDataBuffer; +import org.tensorflow.util.ndarray.DoubleNdArray; +import org.tensorflow.util.ndarray.NdArray; +import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.ndarray.impl.dense.DoubleDenseNdArray; import org.tensorflow.types.family.TDecimal; public interface TDouble extends DoubleNdArray, TDecimal { DataType DTYPE = DataType.create("DOUBLE", 2, 8, TDoubleImpl::mapTensor); - static Tensor scalar(double value) { - Tensor t = tensorOfShape(); + static Tensor scalarOf(double value) { + Tensor t = ofShape(); t.data().setDouble(value); return t; } - static Tensor vector(double... values) { - Tensor t = tensorOfShape(values.length); + static Tensor vectorOf(double... values) { + Tensor t = ofShape(values.length); t.data().write(values); return t; } - static Tensor tensor(Shape shape) { + static Tensor ofShape(Shape shape) { return Tensor.allocate(DTYPE, shape); } - static Tensor tensorOfShape(long... dimensionSizes) { + static Tensor ofShape(long... dimensionSizes) { return Tensor.allocate(DTYPE, Shape.make(dimensionSizes)); } diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TFloat.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TFloat.java index fe7bdcc78a6..d11a02a92ac 100644 --- a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TFloat.java +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TFloat.java @@ -4,34 +4,34 @@ import org.tensorflow.Tensor; import org.tensorflow.internal.buffer.TensorBuffers; import org.tensorflow.internal.c_api.TF_Tensor; -import org.tensorflow.nio.buffer.FloatDataBuffer; -import org.tensorflow.nio.nd.FloatNdArray; -import org.tensorflow.nio.nd.NdArray; -import org.tensorflow.nio.nd.Shape; -import org.tensorflow.nio.nd.impl.dense.FloatDenseNdArray; +import org.tensorflow.util.buffer.FloatDataBuffer; +import org.tensorflow.util.ndarray.FloatNdArray; +import org.tensorflow.util.ndarray.NdArray; +import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.ndarray.impl.dense.FloatDenseNdArray; import org.tensorflow.types.family.TDecimal; public interface TFloat extends FloatNdArray, TDecimal { DataType DTYPE = DataType.create("FLOAT", 1, 4, TFloatImpl::mapTensor); - static Tensor scalar(float value) { - Tensor t = tensorOfShape(); + static Tensor scalarOf(float value) { + Tensor t = ofShape(); t.data().setFloat(value); return t; } - static Tensor vector(float... values) { - Tensor t = tensorOfShape(values.length); + static Tensor vectorOf(float... values) { + Tensor t = ofShape(values.length); t.data().write(values); return t; } - static Tensor tensor(Shape shape) { + static Tensor ofShape(Shape shape) { return Tensor.allocate(DTYPE, shape); } - static Tensor tensorOfShape(long... dimensionSizes) { + static Tensor ofShape(long... dimensionSizes) { return Tensor.allocate(DTYPE, Shape.make(dimensionSizes)); } diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TInt32.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TInt32.java index 104bb6598b5..d6826f9c4e0 100644 --- a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TInt32.java +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TInt32.java @@ -4,34 +4,34 @@ import org.tensorflow.Tensor; import org.tensorflow.internal.buffer.TensorBuffers; import org.tensorflow.internal.c_api.TF_Tensor; -import org.tensorflow.nio.buffer.IntDataBuffer; -import org.tensorflow.nio.nd.IntNdArray; -import org.tensorflow.nio.nd.NdArray; -import org.tensorflow.nio.nd.Shape; -import org.tensorflow.nio.nd.impl.dense.IntDenseNdArray; +import org.tensorflow.util.buffer.IntDataBuffer; +import org.tensorflow.util.ndarray.IntNdArray; +import org.tensorflow.util.ndarray.NdArray; +import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.ndarray.impl.dense.IntDenseNdArray; import org.tensorflow.types.family.TNumber; public interface TInt32 extends IntNdArray, TNumber { DataType DTYPE = DataType.create("INT32", 3, 4, TInt32Impl::mapTensor); - static Tensor scalar(int value) { - Tensor t = tensorOfShape(); + static Tensor scalarOf(int value) { + Tensor t = ofShape(); t.data().setInt(value); return t; } - static Tensor vector(int... values) { - Tensor t = tensorOfShape(values.length); + static Tensor vectorOf(int... values) { + Tensor t = ofShape(values.length); t.data().write(values); return t; } - static Tensor tensor(Shape shape) { + static Tensor ofShape(Shape shape) { return Tensor.allocate(DTYPE, shape); } - static Tensor tensorOfShape(long... dimensionSizes) { + static Tensor ofShape(long... dimensionSizes) { return Tensor.allocate(DTYPE, Shape.make(dimensionSizes)); } diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TInt64.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TInt64.java index 5196d11e93e..54f13c37c3f 100644 --- a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TInt64.java +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TInt64.java @@ -4,34 +4,34 @@ import org.tensorflow.Tensor; import org.tensorflow.internal.buffer.TensorBuffers; import org.tensorflow.internal.c_api.TF_Tensor; -import org.tensorflow.nio.buffer.LongDataBuffer; -import org.tensorflow.nio.nd.LongNdArray; -import org.tensorflow.nio.nd.NdArray; -import org.tensorflow.nio.nd.Shape; -import org.tensorflow.nio.nd.impl.dense.LongDenseNdArray; +import org.tensorflow.util.buffer.LongDataBuffer; +import org.tensorflow.util.ndarray.LongNdArray; +import org.tensorflow.util.ndarray.NdArray; +import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.ndarray.impl.dense.LongDenseNdArray; import org.tensorflow.types.family.TNumber; public interface TInt64 extends LongNdArray, TNumber { DataType DTYPE = DataType.create("INT64", 9, 8, TInt64Impl::mapTensor); - static Tensor scalar(long value) { - Tensor t = tensorOfShape(); + static Tensor scalarOf(long value) { + Tensor t = ofShape(); t.data().setLong(value); return t; } - static Tensor vector(long... values) { - Tensor t = tensorOfShape(values.length); + static Tensor vectorOf(long... values) { + Tensor t = ofShape(values.length); t.data().write(values); return t; } - static Tensor tensor(Shape shape) { + static Tensor ofShape(Shape shape) { return Tensor.allocate(DTYPE, shape); } - static Tensor tensorOfShape(long... dimensionSizes) { + static Tensor ofShape(long... dimensionSizes) { return Tensor.allocate(DTYPE, Shape.make(dimensionSizes)); } diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TString.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TString.java index e2cf58cd29b..8ed556ffd89 100644 --- a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TString.java +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TString.java @@ -7,22 +7,22 @@ import org.tensorflow.internal.buffer.StringTensorBuffer; import org.tensorflow.internal.buffer.TensorBuffers; import org.tensorflow.internal.c_api.TF_Tensor; -import org.tensorflow.nio.buffer.DataBuffer; -import org.tensorflow.nio.nd.NdArray; -import org.tensorflow.nio.nd.NdArrays; -import org.tensorflow.nio.nd.Shape; -import org.tensorflow.nio.nd.impl.dense.DenseNdArray; +import org.tensorflow.util.buffer.DataBuffer; +import org.tensorflow.util.ndarray.NdArray; +import org.tensorflow.util.ndarray.NdArrays; +import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.ndarray.impl.dense.DenseNdArray; import org.tensorflow.types.family.TType; public interface TString extends NdArray, TType { DataType DTYPE = DataType.create("STRING", 7, -1, TStringImpl::mapTensor); - static Tensor scalar(String value) { - return copyOf(NdArrays.of(String.class, Shape.scalar()).setValue(value)); + static Tensor scalarOf(String value) { + return copyOf(NdArrays.of(String.class, Shape.scalar()).setObject(value)); } - static Tensor vector(String... values) { + static Tensor vectorOf(String... values) { return copyOf(NdArrays.of(String.class, Shape.make(values.length)).write(values)); } @@ -38,7 +38,7 @@ static Tensor createTensor(NdArray src) { // First, compute the capacity of the tensor to create AtomicLong size = new AtomicLong(src.size() * 8); // add space to store 64-bits offsets src.scalars().forEach(s -> { - byte[] bytes = s.getValue().getBytes(Charsets.UTF_8); + byte[] bytes = s.getObject().getBytes(Charsets.UTF_8); size.addAndGet(bytes.length + varintLength(bytes.length)); // add space to store value + length }); diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TUInt8.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TUInt8.java index 6cce484a784..109c8a525e6 100644 --- a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TUInt8.java +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TUInt8.java @@ -4,34 +4,34 @@ import org.tensorflow.Tensor; import org.tensorflow.internal.buffer.TensorBuffers; import org.tensorflow.internal.c_api.TF_Tensor; -import org.tensorflow.nio.buffer.ByteDataBuffer; -import org.tensorflow.nio.nd.ByteNdArray; -import org.tensorflow.nio.nd.NdArray; -import org.tensorflow.nio.nd.Shape; -import org.tensorflow.nio.nd.impl.dense.ByteDenseNdArray; +import org.tensorflow.util.buffer.ByteDataBuffer; +import org.tensorflow.util.ndarray.ByteNdArray; +import org.tensorflow.util.ndarray.NdArray; +import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.ndarray.impl.dense.ByteDenseNdArray; import org.tensorflow.types.family.TNumber; public interface TUInt8 extends ByteNdArray, TNumber { DataType DTYPE = DataType.create("UINT8", 4, 1, TUInt8Impl::mapTensor); - static Tensor scalar(byte value) { - Tensor t = tensorOfShape(); + static Tensor scalarOf(byte value) { + Tensor t = ofShape(); t.data().setByte(value); return t; } - static Tensor vector(byte... values) { - Tensor t = tensorOfShape(values.length); + static Tensor vectorOf(byte... values) { + Tensor t = ofShape(values.length); t.data().write(values); return t; } - static Tensor tensor(Shape shape) { + static Tensor ofShape(Shape shape) { return Tensor.allocate(DTYPE, shape); } - static Tensor tensorOfShape(long... dimensionSizes) { + static Tensor ofShape(long... dimensionSizes) { return Tensor.allocate(DTYPE, Shape.make(dimensionSizes)); } diff --git a/tensorflow-core/tensorflow-core-api/src/main/native/tensor_buffers_jni.cc b/tensorflow-core/tensorflow-core-api/src/main/native/tensor_buffers_jni.cc deleted file mode 100644 index 8888cba93d2..00000000000 --- a/tensorflow-core/tensorflow-core-api/src/main/native/tensor_buffers_jni.cc +++ /dev/null @@ -1,42 +0,0 @@ -/* Copyright 2019 The TensorFlow Authors. All Rights Reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -==============================================================================*/ - -#include "src/main/native/tensor_buffers_jni.h" - -#include "tensorflow/c/c_api.h" -#include "src/main/native/exception_jni.h" - -namespace { - -TF_Tensor* requireHandle(JNIEnv* env, jlong handle) { - if (handle == 0) { - throwException(env, kNullPointerException, "close() was called on the Tensor"); - return nullptr; - } - return reinterpret_cast(handle); -} - -} // namespace - -JNIEXPORT jobject JNICALL Java_org_tensorflow_internal_buffer_TensorBuffers_directBuffer( - JNIEnv* env, jclass clazz, jlong handle) { - - TF_Tensor* t = requireHandle(env, handle); - if (t == nullptr) return nullptr; - void* data = TF_TensorData(t); - const size_t sz = TF_TensorByteSize(t); - - return env->NewDirectByteBuffer(data, static_cast(sz)); -} diff --git a/tensorflow-core/tensorflow-core-api/src/main/native/tensor_buffers_jni.h b/tensorflow-core/tensorflow-core-api/src/main/native/tensor_buffers_jni.h deleted file mode 100644 index a06897aaa4e..00000000000 --- a/tensorflow-core/tensorflow-core-api/src/main/native/tensor_buffers_jni.h +++ /dev/null @@ -1,36 +0,0 @@ -/* Copyright 2016 The TensorFlow Authors. All Rights Reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -==============================================================================*/ - -#ifndef TENSORFLOW_JAVA_SRC_MAIN_NATIVE_TENSOR_BUFFERS_JNI_H_ -#define TENSORFLOW_JAVA_SRC_MAIN_NATIVE_TENSOR_BUFFERS_JNI_H_ - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -/* - * Class: org_tensorflow_internal_buffer_TensorBuffers - * Method: directBuffer - * Signature: (J)Ljava/nio/ByteBuffer; - */ -JNIEXPORT jobject JNICALL Java_org_tensorflow_internal_buffer_TensorBuffers_directBuffer( - JNIEnv *, jclass, jlong); - -#ifdef __cplusplus -} // extern "C" -#endif // __cplusplus -#endif // TENSORFLOW_JAVA_SRC_MAIN_NATIVE_TENSOR_BUFFERS_JNI_H_ diff --git a/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/EagerOperationBuilderTest.java b/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/EagerOperationBuilderTest.java index fbdc19b6662..84750daef54 100644 --- a/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/EagerOperationBuilderTest.java +++ b/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/EagerOperationBuilderTest.java @@ -20,7 +20,7 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; -import org.tensorflow.nio.nd.Shape; +import org.tensorflow.util.ndarray.Shape; import org.tensorflow.types.TFloat; import org.tensorflow.types.TInt32; diff --git a/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/GraphOperationBuilderTest.java b/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/GraphOperationBuilderTest.java index da07ec5c599..14ff93127d2 100644 --- a/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/GraphOperationBuilderTest.java +++ b/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/GraphOperationBuilderTest.java @@ -23,7 +23,7 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; -import org.tensorflow.nio.nd.Shape; +import org.tensorflow.util.ndarray.Shape; import org.tensorflow.types.TBool; import org.tensorflow.types.TFloat; import org.tensorflow.types.TInt32; diff --git a/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/op/core/GeneratedOperationsTest.java b/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/op/core/GeneratedOperationsTest.java index 34859ce77e1..eea04e15032 100644 --- a/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/op/core/GeneratedOperationsTest.java +++ b/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/op/core/GeneratedOperationsTest.java @@ -25,7 +25,7 @@ import org.tensorflow.Operand; import org.tensorflow.Session; import org.tensorflow.Tensor; -import org.tensorflow.nio.nd.Shape; +import org.tensorflow.util.ndarray.Shape; import org.tensorflow.op.Ops; import org.tensorflow.types.TInt32; diff --git a/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/types/NumericTypesTestBase.java b/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/types/NumericTypesTestBase.java index 46221e7dcc3..0f76e78ccf1 100644 --- a/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/types/NumericTypesTestBase.java +++ b/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/types/NumericTypesTestBase.java @@ -5,15 +5,13 @@ import org.junit.Test; import org.tensorflow.EagerSession; import org.tensorflow.Tensor; -import org.tensorflow.nio.nd.FloatNdArray; -import org.tensorflow.nio.nd.IntNdArray; -import org.tensorflow.nio.nd.NdArray; -import org.tensorflow.nio.nd.NdArrays; -import org.tensorflow.nio.nd.Shape; -import org.tensorflow.nio.nd.index.Indices; +import org.tensorflow.util.ndarray.IntNdArray; +import org.tensorflow.util.ndarray.NdArray; +import org.tensorflow.util.ndarray.NdArrays; +import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.ndarray.index.Indices; import org.tensorflow.op.Ops; import org.tensorflow.op.core.Constant; -import org.tensorflow.op.math.Pow; import org.tensorflow.op.math.Sub; import org.tensorflow.types.family.TNumber; @@ -34,27 +32,27 @@ public void initializeTensorsWithZeros() { Ops tf = Ops.create(session); // Initialize tensor memory with zeros and take a snapshot - tensorData.scalars().forEach(scalar -> scalar.setValue(valueOf(0))); + tensorData.scalars().forEach(scalar -> scalar.setObject(valueOf(0))); Constant x = tf.constant(tensor); // Initialize the same tensor memory with ones and take a snapshot - tensorData.scalars().forEach(scalar -> scalar.setValue(valueOf(1))); + tensorData.scalars().forEach(scalar -> scalar.setObject(valueOf(1))); Constant y = tf.constant(tensor); // Subtract y from x and validate the result Sub sub = tf.math.sub(x, y); - sub.tensorData().scalars().forEach(scalar -> - assertEquals(valueOf(-1), scalar.getValue()) + sub.data().scalars().forEach(scalar -> + assertEquals(valueOf(-1), scalar.getObject()) ); } } @Test public void genericTest() { - IntNdArray heapData = NdArrays.vector(0, 1, 2, 3); + IntNdArray heapData = NdArrays.vectorOf(0, 1, 2, 3); // Creates a 2x2 matrix - try (Tensor tensor = TInt32.tensorOfShape(2, 2)) { + try (Tensor tensor = TInt32.ofShape(2, 2)) { IntNdArray tensorData = tensor.data(); // Copy first 2 values of the vector to the first row of the matrix @@ -81,7 +79,7 @@ public void genericTest() { // Compute the power of the tensor by itself Constant x = tf.constant(tensor); - IntNdArray result = tf.math.pow(x, x).tensorData(); + IntNdArray result = tf.math.pow(x, x).data(); // Validate result by computing the same operation in Java tensorData.scalars().forEachIndexed((coords, s) -> @@ -93,5 +91,5 @@ public void genericTest() { abstract Tensor allocateTensor(Shape shape); - abstract U valueOf(int value); + abstract U valueOf(Integer value); } diff --git a/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/types/TDoubleTest.java b/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/types/TDoubleTest.java new file mode 100644 index 00000000000..bc3882a31a6 --- /dev/null +++ b/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/types/TDoubleTest.java @@ -0,0 +1,17 @@ +package org.tensorflow.types; + +import org.tensorflow.Tensor; +import org.tensorflow.util.ndarray.Shape; + +public class TDoubleTest extends NumericTypesTestBase { + + @Override + Tensor allocateTensor(Shape shape) { + return TDouble.ofShape(shape); + } + + @Override + Double valueOf(Integer value) { + return value.doubleValue(); + } +} diff --git a/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/types/TFloatTest.java b/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/types/TFloatTest.java new file mode 100644 index 00000000000..9932b485999 --- /dev/null +++ b/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/types/TFloatTest.java @@ -0,0 +1,17 @@ +package org.tensorflow.types; + +import org.tensorflow.Tensor; +import org.tensorflow.util.ndarray.Shape; + +public class TFloatTest extends NumericTypesTestBase { + + @Override + Tensor allocateTensor(Shape shape) { + return TFloat.ofShape(shape); + } + + @Override + Float valueOf(Integer value) { + return value.floatValue(); + } +} diff --git a/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/types/TInt32Test.java b/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/types/TInt32Test.java index 4ec17b0fb5c..2529ed12242 100644 --- a/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/types/TInt32Test.java +++ b/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/types/TInt32Test.java @@ -1,19 +1,17 @@ package org.tensorflow.types; import org.tensorflow.Tensor; -import org.tensorflow.nio.nd.Shape; -import org.tensorflow.op.Ops; -import org.tensorflow.op.core.Constant; +import org.tensorflow.util.ndarray.Shape; public class TInt32Test extends NumericTypesTestBase { @Override Tensor allocateTensor(Shape shape) { - return TInt32.tensor(shape); + return TInt32.ofShape(shape); } @Override - Integer valueOf(int value) { + Integer valueOf(Integer value) { return value; } } diff --git a/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/types/TInt64Test.java b/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/types/TInt64Test.java new file mode 100644 index 00000000000..77d528bb635 --- /dev/null +++ b/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/types/TInt64Test.java @@ -0,0 +1,17 @@ +package org.tensorflow.types; + +import org.tensorflow.Tensor; +import org.tensorflow.util.ndarray.Shape; + +public class TInt64Test extends NumericTypesTestBase { + + @Override + Tensor allocateTensor(Shape shape) { + return TInt64.ofShape(shape); + } + + @Override + Long valueOf(Integer value) { + return value.longValue(); + } +} diff --git a/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/types/TUInt8Test.java b/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/types/TUInt8Test.java new file mode 100644 index 00000000000..5f8959c7b68 --- /dev/null +++ b/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/types/TUInt8Test.java @@ -0,0 +1,17 @@ +package org.tensorflow.types; + +import org.tensorflow.Tensor; +import org.tensorflow.util.ndarray.Shape; + +public class TUInt8Test extends NumericTypesTestBase { + + @Override + Tensor allocateTensor(Shape shape) { + return TUInt8.ofShape(shape); + } + + @Override + Byte valueOf(Integer value) { + return value.byteValue(); + } +} diff --git a/tensorflow-utils/nio-utils/README.md b/tensorflow-utils/README.md similarity index 61% rename from tensorflow-utils/nio-utils/README.md rename to tensorflow-utils/README.md index ca55bbd1443..d7598de9837 100644 --- a/tensorflow-utils/nio-utils/README.md +++ b/tensorflow-utils/README.md @@ -1,36 +1,18 @@ -# TensorFlow NIO Utility Library +# TensorFlow Utility Library ## Introduction -TensorFlow NIO utility library helps manipulating large N-dimensional data records in the JVM -runtime environment by providing an intuitive API on top of linear memory segments, such as standard -arrays, JDK NIO buffers or native memory. +TensorFlow Utils library contains various utility classes required by the TensorFlow Core API. -The need of additional utilities to handle those data structures became obvious when users observed -slow performances by using standard multidimensional arrays in Java, resulting from the -non-contiguous storage of the data and the multiple dereferences required to access the values. -Providing such data in a contiguous JDK NIO buffer can improve the performances but at the cost of -difficult manipulation of the data and still being limited by the use of 32-bits indices. - -TensorFlow NIO solves these problems by: - -* Supporting 64-bits indexation, theoretically allowing the storage and manipulation of data records -up to 8216 PB -* Providing an API (`NdArray`) for manipulating linear memory segments as multidimensional data -structures -* Serializing and deserializing data of any type (i.e. not only primitive types, as with the JDK NIO -utilities) - -It is important to note that the TensorFlow NIO library does not depend on any other TensorFlow -runtime libraries, thus can used easily by any other projects who wants to benefit from its -features. For example, an instance of `NdArray` could easily be passed from one library to another -for sharing data. +As opposed to other artifacts in this repository, this library does not depend on TensorFlow runtime +and can be imported by any other projects running on a standard JVM. For example, an instance of +`NdArray` could easily be passed from one library to another for sharing data. -To import TensorFlow NIO in your project, simply add the following dependency: +To import TensorFlow NdArray in your project, simply add the following dependency: ```xml org.tensorflow - nio-utils + tensorflow-utils 0.1.0-SNAPSHOT ``` @@ -39,17 +21,21 @@ To import TensorFlow NIO in your project, simply add the following dependency: Note: For convenience, the helper interface `StaticApi` is providing access to most of the important features of this library in a more readable fashion. It is suggested to import static helpers of -this interface in every class working with TensorFlow NIO as follow. +this interface in every class working with TensorFlow NdArray as follow. ```java -import static org.tensorflow.nio.StaticApi.*; +import static org.tensorflow.util.StaticApi.*; ``` -All examples of this README page are based on those imports. +All examples of this README page are based on this import statement. ### Data Buffers -In TensorFlow NIO library, data is stored in a `DataBuffer`, which maps a contiguous segment of -memory with 64-bits indexation and supports generic parametrization while still allowing direct -access to primitive types. +Instances of `DataBuffer` map contiguous segments of memory with 64-bits indexation and supports +generic parametrization while still allowing direct access to primitive types. Such memory segments +could be standard Java arrays, JDK NIO buffers or native memory. + +By supporting 64-bits indexation, they theoretically allow the storage and manipulation of data +records up to 8216 PB. In addition, it can serialize and deserialize data of any type (and not only +primitive types, as with the `java.util.nio`). ```java // Allocate a buffer of 4K int values @@ -73,8 +59,13 @@ assertEquals(2, bufferB.getInt(0)); ### ND Arrays -TensorFlow NIO provides an interface called `NdArray` for wrapping up a `DataBuffer` to expose -an API for traversing, reading or writing data in a multi-dimensional space. +TensorFlow NdArray provides an interface called `NdArray` for wrapping up a `DataBuffer` to expose +an API for traversing, reading or writing data to small or large multi-dimensional data structures +from the JVM. + +The need of additional utilities to handle those data structures became obvious when users observed +slow performances by using standard multidimensional arrays in Java, resulting from the +non-contiguous storage of the data and the multiple dereferences required to access the values. ```java // Allocating a 3D matrix of 2x3x2 @@ -115,14 +106,14 @@ assertEquals(3, slice.getInt(1, 0)); // (1, 1, 0) in the original matrix ## Integration with TensorFlow -Like previously stated, TensorFlow NIO is independent of any other TensorFlow runtime library, +Like previously stated, TensorFlow Utils is independent of any other TensorFlow runtime library, making it a good choice for manipulating multi-dimensional data structures from anywhere. But here is how it is actually used by the [TensorFlow Core API](https://github.com/tensorflow/java/tree/master/tensorflow-core/tensorflow-core-api) to map and manipulate tensor data. ```java // Allocate a tensor of 32-bits integer of the shape (2, 3, 2) -Tensor tensor = TInt32.tensorOfShape(2, 3, 2); +Tensor tensor = TInt32.ofShape(2, 3, 2); // Access tensor memory directly IntNdArray tensorData = tensor.data(); @@ -133,17 +124,17 @@ try (EagerSession session = EagerSession.create()) { Ops tf = Ops.create(session); // Initialize tensor memory with zeros and take a snapshot - tensorData.scalars().forEach(scalar -> scalar.setValue(valueOf(0))); + tensorData.scalars().forEach(scalar -> scalar.setInt(0)); Constant x = tf.constant(tensor); // Initialize the same tensor memory with ones and take a snapshot - tensorData.scalars().forEach(scalar -> scalar.setValue(valueOf(1))); + tensorData.scalars().forEach(scalar -> scalar.setInt(1)); Constant y = tf.constant(tensor); // Subtract y from x and validate the result Sub sub = tf.math.sub(x, y); - sub.tensorData().scalars().forEach(scalar -> - assertEquals(valueOf(-1), scalar.getValue()) + sub.data().scalars().forEach(scalar -> + assertEquals(-1, scalar.getInt()) ); } ``` \ No newline at end of file diff --git a/tensorflow-utils/nio-utils/pom.xml b/tensorflow-utils/nio-utils/pom.xml deleted file mode 100644 index f81e4904710..00000000000 --- a/tensorflow-utils/nio-utils/pom.xml +++ /dev/null @@ -1,70 +0,0 @@ - - - 4.0.0 - - - org.tensorflow - tensorflow-utils - 0.1.0-SNAPSHOT - - nio-utils - jar - - NIO Utility Library - Utility library for non-blocking I/O operations on large multidimensional data structures - - - - junit - junit - test - - - org.openjdk.jmh - jmh-core - test - - - org.openjdk.jmh - jmh-generator-annprocess - test - - - - - - - org.apache.maven.plugins - maven-surefire-plugin - 2.22.2 - - 1 - false - -Xmx2G -XX:MaxPermSize=256m - false - - **/*Test.java - - - - - - - diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/raw/UnsafeMemoryHandle.java b/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/raw/UnsafeMemoryHandle.java deleted file mode 100644 index 4bd0f49efb8..00000000000 --- a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/raw/UnsafeMemoryHandle.java +++ /dev/null @@ -1,138 +0,0 @@ -package org.tensorflow.nio.buffer.impl.raw; - -import sun.misc.Unsafe; - -public final class UnsafeMemoryHandle { - - static UnsafeMemoryHandle of(Unsafe unsafe, byte[] array) { - return of(unsafe, array, Unsafe.ARRAY_BYTE_BASE_OFFSET, array.length, Unsafe.ARRAY_BYTE_INDEX_SCALE); - } - - static UnsafeMemoryHandle of(Unsafe unsafe, boolean[] array) { - return of(unsafe, array, Unsafe.ARRAY_BOOLEAN_BASE_OFFSET, array.length, Unsafe.ARRAY_BOOLEAN_INDEX_SCALE); - } - - static UnsafeMemoryHandle of(Unsafe unsafe, short[] array) { - return of(unsafe, array, Unsafe.ARRAY_SHORT_BASE_OFFSET, array.length, Unsafe.ARRAY_SHORT_INDEX_SCALE); - } - - static UnsafeMemoryHandle of(Unsafe unsafe, int[] array) { - return of(unsafe, array, Unsafe.ARRAY_INT_BASE_OFFSET, array.length, Unsafe.ARRAY_INT_INDEX_SCALE); - } - - static UnsafeMemoryHandle of(Unsafe unsafe, float[] array) { - return of(unsafe, array, Unsafe.ARRAY_FLOAT_BASE_OFFSET, array.length, Unsafe.ARRAY_FLOAT_INDEX_SCALE); - } - - static UnsafeMemoryHandle of(Unsafe unsafe, double[] array) { - return of(unsafe, array, Unsafe.ARRAY_DOUBLE_BASE_OFFSET, array.length, Unsafe.ARRAY_DOUBLE_INDEX_SCALE); - } - - static UnsafeMemoryHandle of(Unsafe unsafe, long[] array) { - return of(unsafe, array, Unsafe.ARRAY_LONG_BASE_OFFSET, array.length, Unsafe.ARRAY_LONG_INDEX_SCALE); - } - - static UnsafeMemoryHandle of(Unsafe unsafe, Object array, long baseOffset, int length, long scale) { - return new UnsafeMemoryHandle(unsafe, array, baseOffset, length * scale, scale); - } - - static UnsafeMemoryHandle of(Unsafe unsafe, long address, long byteSize, long scale) { - return new UnsafeMemoryHandle(unsafe, null, address, byteSize, scale); - } - - final Unsafe unsafe; - - long size() { - return byteSize / scale; - } - - byte getByte(long index) { - return unsafe.getByte(object, align(index)); - } - - void setByte(byte value, long index) { - unsafe.putByte(object, align(index), value); - } - - boolean getBoolean(long index) { - return unsafe.getBoolean(object, align(index)); - } - - void setBoolean(boolean value, long index) { - unsafe.putBoolean(object, align(index), value); - } - - short getShort(long index) { - return unsafe.getShort(object, align(index)); - } - - void setShort(short value, long index) { - unsafe.putShort(object, align(index), value); - } - - int getInt(long index) { - return unsafe.getInt(object, align(index)); - } - - void setInt(int value, long index) { - unsafe.putInt(object, align(index), value); - } - - float getFloat(long index) { - return unsafe.getFloat(object, align(index)); - } - - void setFloat(float value, long index) { - unsafe.putFloat(object, align(index), value); - } - - double getDouble(long index) { - return unsafe.getDouble(object, align(index)); - } - - void setDouble(double value, long index) { - unsafe.putDouble(object, align(index), value); - } - - long getLong(long index) { - return unsafe.getLong(object, align(index)); - } - - void setLong(long value, long index) { - unsafe.putLong(object, align(index), value); - } - - void copyTo(UnsafeMemoryHandle memory, long length) { - unsafe.copyMemory(object, byteOffset, memory.object, memory.byteOffset, length * scale); - } - - UnsafeMemoryHandle offset(long index) { - long offset = scale(index); - return new UnsafeMemoryHandle(unsafe, object, this.byteOffset + offset, byteSize - offset, scale); - } - - UnsafeMemoryHandle narrow(long size) { - return new UnsafeMemoryHandle(unsafe, object, byteOffset, scale(size), scale); - } - - private final Object object; - private final long byteOffset; - private final long byteSize; - private final long scale; - - private UnsafeMemoryHandle(Unsafe unsafe, Object object, long byteOffset, long byteSize, long scale) { - this.unsafe = unsafe; - this.object = object; - this.byteOffset = byteOffset; - this.byteSize = byteSize; - this.scale = scale; - } - - private long align(long index) { - return byteOffset + index * scale; - } - - private long scale(long value) { - return value * scale; - } -} diff --git a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/virtual/LongVirtualDataBufferTest.java b/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/virtual/LongVirtualDataBufferTest.java deleted file mode 100644 index 81ec92bfbf1..00000000000 --- a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/virtual/LongVirtualDataBufferTest.java +++ /dev/null @@ -1,44 +0,0 @@ -package org.tensorflow.nio.buffer.impl.virtual; - -import org.tensorflow.nio.buffer.ByteDataBuffer; -import org.tensorflow.nio.buffer.DataBuffers; -import org.tensorflow.nio.buffer.LongDataBuffer; -import org.tensorflow.nio.buffer.LongDataBufferTestBase; -import org.tensorflow.nio.buffer.adapter.LongDataAdapter; -import org.tensorflow.nio.buffer.impl.jdk.ByteJdkDataBuffer; - -public class LongVirtualDataBufferTest extends LongDataBufferTestBase { - - @Override - protected LongDataBuffer allocate(long size) { - return DataBuffers.ofLongs(size, new TestLongAdapter()); - } - - @Override - protected long maxSize() { - return ByteJdkDataBuffer.MAX_SIZE / 3; - } - - private static class TestLongAdapter implements LongDataAdapter { - - @Override - public void writeLong(ByteDataBuffer buffer, long value, long index) { - buffer.set((byte)(((value >> 56) & 0x80) | ((value >> 16) & 0x7F)), index); - buffer.set((byte)((value >> 8) & 0xFF), index + 1); - buffer.set((byte)(value & 0xFF), index + 2); - } - - @Override - public long readLong(ByteDataBuffer buffer, long index) { - long msb = buffer.get(index); - long midb = buffer.get(index + 1); - long lsb = buffer.get(index + 2); - return ((msb & 0x80) << 56) | ((msb & 0x7F) << 16) | ((midb & 0xFF) << 8) | (lsb & 0xFF); - } - - @Override - public int sizeInBytes() { - return 3; - } - } -} diff --git a/tensorflow-utils/nio-utils/src/test/resources/1500x916.jpg b/tensorflow-utils/nio-utils/src/test/resources/1500x916.jpg deleted file mode 100644 index b01f404e3f722819dbcfd8341009b9aac96a5303..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 435586 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%0AIy91>d3)x>Sq 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

+l2;n3&Z1-+ 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�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 E2Pf2JfdBvi diff --git a/tensorflow-utils/pom.xml b/tensorflow-utils/pom.xml index 25f580fdde8..868a9a5245e 100644 --- a/tensorflow-utils/pom.xml +++ b/tensorflow-utils/pom.xml @@ -1,6 +1,22 @@ - + + 4.0.0 @@ -9,14 +25,49 @@ 0.1.0-SNAPSHOT tensorflow-utils - pom + jar - Tensorflow Utility Parent - Parent POM for TensorFlow utility artifacts + TensorFlow Utility Library + + Library of utilities that do not depend on the TensorFlow runtime and can be used by other + projects outside the TensorFlow organization. + - - nio-utils - + + + junit + junit + test + + + org.openjdk.jmh + jmh-core + test + + + org.openjdk.jmh + jmh-generator-annprocess + test + + - + + + + org.apache.maven.plugins + maven-surefire-plugin + 2.22.2 + + 1 + false + -Xmx2G -XX:MaxPermSize=256m + false + + **/*Test.java + + + + + + diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/StaticApi.java b/tensorflow-utils/src/main/java/org/tensorflow/util/StaticApi.java similarity index 87% rename from tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/StaticApi.java rename to tensorflow-utils/src/main/java/org/tensorflow/util/StaticApi.java index 29da1a0277d..6a6ec630fea 100644 --- a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/StaticApi.java +++ b/tensorflow-utils/src/main/java/org/tensorflow/util/StaticApi.java @@ -1,26 +1,27 @@ -package org.tensorflow.nio; - -import org.tensorflow.nio.buffer.BooleanDataBuffer; -import org.tensorflow.nio.buffer.ByteDataBuffer; -import org.tensorflow.nio.buffer.DataBuffer; -import org.tensorflow.nio.buffer.DataBuffers; -import org.tensorflow.nio.buffer.DoubleDataBuffer; -import org.tensorflow.nio.buffer.FloatDataBuffer; -import org.tensorflow.nio.buffer.IntDataBuffer; -import org.tensorflow.nio.buffer.LongDataBuffer; -import org.tensorflow.nio.buffer.ShortDataBuffer; -import org.tensorflow.nio.nd.BooleanNdArray; -import org.tensorflow.nio.nd.ByteNdArray; -import org.tensorflow.nio.nd.DoubleNdArray; -import org.tensorflow.nio.nd.FloatNdArray; -import org.tensorflow.nio.nd.IntNdArray; -import org.tensorflow.nio.nd.LongNdArray; -import org.tensorflow.nio.nd.NdArray; -import org.tensorflow.nio.nd.NdArrays; -import org.tensorflow.nio.nd.Shape; -import org.tensorflow.nio.nd.ShortNdArray; -import org.tensorflow.nio.nd.index.Index; -import org.tensorflow.nio.nd.index.Indices; +package org.tensorflow.util; + +import org.tensorflow.util.buffer.BooleanDataBuffer; +import org.tensorflow.util.buffer.ByteDataBuffer; +import org.tensorflow.util.buffer.DataBuffers; +import org.tensorflow.util.buffer.DoubleDataBuffer; +import org.tensorflow.util.buffer.FloatDataBuffer; +import org.tensorflow.util.buffer.LongDataBuffer; +import org.tensorflow.util.buffer.ShortDataBuffer; +import org.tensorflow.util.ndarray.ByteNdArray; +import org.tensorflow.util.ndarray.DoubleNdArray; +import org.tensorflow.util.buffer.DataBuffer; +import org.tensorflow.util.buffer.IntDataBuffer; +import org.tensorflow.util.ndarray.BooleanNdArray; +import org.tensorflow.util.ndarray.IllegalRankException; +import org.tensorflow.util.ndarray.FloatNdArray; +import org.tensorflow.util.ndarray.IntNdArray; +import org.tensorflow.util.ndarray.LongNdArray; +import org.tensorflow.util.ndarray.NdArray; +import org.tensorflow.util.ndarray.NdArrays; +import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.ndarray.ShortNdArray; +import org.tensorflow.util.ndarray.index.Index; +import org.tensorflow.util.ndarray.index.Indices; /** * Helper class for instantiating NIO utility objects. @@ -400,8 +401,8 @@ static BooleanNdArray ndArrayOf(BooleanDataBuffer buffer, Shape shape) { * @param value scalar value * @return new scalar */ - static NdArray scalarOf(T value) { - return NdArrays.scalarOf(value); + static NdArray scalarOfObject(T value) { + return NdArrays.scalarOfObject(value); } /** @@ -410,8 +411,8 @@ static NdArray scalarOf(T value) { * @param value scalar value * @return new byte scalar */ - static ByteNdArray scalar(byte value) { - return NdArrays.scalar(value); + static ByteNdArray scalarOf(byte value) { + return NdArrays.scalarOf(value); } /** @@ -420,8 +421,8 @@ static ByteNdArray scalar(byte value) { * @param value scalar value * @return new short scalar */ - static ShortNdArray scalar(short value) { - return NdArrays.scalar(value); + static ShortNdArray scalarOf(short value) { + return NdArrays.scalarOf(value); } /** @@ -430,8 +431,8 @@ static ShortNdArray scalar(short value) { * @param value scalar value * @return new int scalar */ - static IntNdArray scalar(int value) { - return NdArrays.scalar(value); + static IntNdArray scalarOf(int value) { + return NdArrays.scalarOf(value); } /** @@ -440,8 +441,8 @@ static IntNdArray scalar(int value) { * @param value scalar value * @return new long scalar */ - static LongNdArray scalar(long value) { - return NdArrays.scalar(value); + static LongNdArray scalarOf(long value) { + return NdArrays.scalarOf(value); } /** @@ -450,8 +451,8 @@ static LongNdArray scalar(long value) { * @param value scalar value * @return new float scalar */ - static FloatNdArray scalar(float value) { - return NdArrays.scalar(value); + static FloatNdArray scalarOf(float value) { + return NdArrays.scalarOf(value); } /** @@ -460,8 +461,8 @@ static FloatNdArray scalar(float value) { * @param value scalar value * @return new double scalar */ - static DoubleNdArray scalar(double value) { - return NdArrays.scalar(value); + static DoubleNdArray scalarOf(double value) { + return NdArrays.scalarOf(value); } /** @@ -470,8 +471,8 @@ static DoubleNdArray scalar(double value) { * @param value scalar value * @return new boolean scalar */ - static BooleanNdArray scalar(boolean value) { - return NdArrays.scalar(value); + static BooleanNdArray scalarOf(boolean value) { + return NdArrays.scalarOf(value); } /** @@ -481,8 +482,8 @@ static BooleanNdArray scalar(boolean value) { * @return new vector * @throws IllegalArgumentException if values is null */ - static NdArray vectorOf(T... values) { - return NdArrays.vectorOf(values); + static NdArray vectorOfObjects(T... values) { + return NdArrays.vectorOfObjects(values); } /** @@ -492,8 +493,8 @@ static NdArray vectorOf(T... values) { * @return new byte vector * @throws IllegalArgumentException if values is null */ - static ByteNdArray vector(byte... values) { - return NdArrays.vector(values); + static ByteNdArray vectorOf(byte... values) { + return NdArrays.vectorOf(values); } /** @@ -503,8 +504,8 @@ static ByteNdArray vector(byte... values) { * @return new short vector * @throws IllegalArgumentException if values is null */ - static ShortNdArray vector(short... values) { - return NdArrays.vector(values); + static ShortNdArray vectorOf(short... values) { + return NdArrays.vectorOf(values); } /** @@ -514,8 +515,8 @@ static ShortNdArray vector(short... values) { * @return new int vector * @throws IllegalArgumentException if values is null */ - static IntNdArray vector(int... values) { - return NdArrays.vector(values); + static IntNdArray vectorOf(int... values) { + return NdArrays.vectorOf(values); } /** @@ -525,8 +526,8 @@ static IntNdArray vector(int... values) { * @return new long vector * @throws IllegalArgumentException if values is null */ - static LongNdArray vector(long... values) { - return NdArrays.vector(values); + static LongNdArray vectorOf(long... values) { + return NdArrays.vectorOf(values); } /** @@ -536,8 +537,8 @@ static LongNdArray vector(long... values) { * @return new float vector * @throws IllegalArgumentException if values is null */ - static FloatNdArray vector(float... values) { - return NdArrays.vector(values); + static FloatNdArray vectorOf(float... values) { + return NdArrays.vectorOf(values); } /** @@ -547,8 +548,8 @@ static FloatNdArray vector(float... values) { * @return new double vector * @throws IllegalArgumentException if values is null */ - static DoubleNdArray vector(double... values) { - return NdArrays.vector(values); + static DoubleNdArray vectorOf(double... values) { + return NdArrays.vectorOf(values); } /** @@ -558,8 +559,8 @@ static DoubleNdArray vector(double... values) { * @return new boolean vector * @throws IllegalArgumentException if values is null */ - static BooleanNdArray vector(boolean... values) { - return NdArrays.vector(values); + static BooleanNdArray vectorOf(boolean... values) { + return NdArrays.vectorOf(values); } /** @@ -568,7 +569,7 @@ static BooleanNdArray vector(boolean... values) { * @param dimensionSize size of each dimension in the shape, {@link Shape#UNKNOWN_SIZE} if unknown * @see Shape#make(long...) */ - static Shape shape(long... dimensionSize) { + static Shape shapeOf(long... dimensionSize) { return Shape.make(dimensionSize); } @@ -588,7 +589,7 @@ static Index at(long coord) { * * @param coord scalar indicating the coordinate of the element on the indexed axis * @return index - * @throws org.tensorflow.nio.nd.IllegalRankException if {@code coord} is not a scalar (rank 0) + * @throws IllegalRankException if {@code coord} is not a scalar (rank 0) * @see Indices#at(NdArray) */ static Index at(NdArray coord) { @@ -621,7 +622,7 @@ static Index seq(long... coords) { * * @param coords vector of coordinates of the elements in the sequence * @return index - * @throws org.tensorflow.nio.nd.IllegalRankException if {@code coord} is not a vector (rank 1) + * @throws IllegalRankException if {@code coord} is not a vector (rank 1) * @see Indices#seq(NdArray) */ static Index seq(NdArray coords) { diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/BooleanDataBuffer.java b/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/BooleanDataBuffer.java similarity index 97% rename from tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/BooleanDataBuffer.java rename to tensorflow-utils/src/main/java/org/tensorflow/util/buffer/BooleanDataBuffer.java index d86839ab386..e410292584a 100644 --- a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/BooleanDataBuffer.java +++ b/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/BooleanDataBuffer.java @@ -14,7 +14,7 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.nio.buffer; +package org.tensorflow.util.buffer; import java.nio.BufferOverflowException; import java.nio.BufferUnderflowException; @@ -133,12 +133,12 @@ default BooleanDataBuffer write(boolean[] src) { BooleanDataBuffer write(boolean[] src, int offset, int length); @Override - default Boolean get(long index) { + default Boolean getObject(long index) { return getBoolean(index); } @Override - default BooleanDataBuffer set(Boolean value, long index) { + default BooleanDataBuffer setObject(Boolean value, long index) { return setBoolean(value, index); } diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/ByteDataBuffer.java b/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/ByteDataBuffer.java similarity index 97% rename from tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/ByteDataBuffer.java rename to tensorflow-utils/src/main/java/org/tensorflow/util/buffer/ByteDataBuffer.java index b7afa8b1f28..73a8ef3c269 100644 --- a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/ByteDataBuffer.java +++ b/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/ByteDataBuffer.java @@ -14,7 +14,7 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.nio.buffer; +package org.tensorflow.util.buffer; import java.nio.BufferOverflowException; import java.nio.BufferUnderflowException; @@ -133,12 +133,12 @@ default ByteDataBuffer write(byte[] src) { ByteDataBuffer write(byte[] src, int offset, int length); @Override - default Byte get(long index) { + default Byte getObject(long index) { return getByte(index); } @Override - default ByteDataBuffer set(Byte value, long index) { + default ByteDataBuffer setObject(Byte value, long index) { return setByte(value, index); } diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/DataBuffer.java b/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/DataBuffer.java similarity index 98% rename from tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/DataBuffer.java rename to tensorflow-utils/src/main/java/org/tensorflow/util/buffer/DataBuffer.java index 51e2afcf3b5..a05dd64990f 100644 --- a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/DataBuffer.java +++ b/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/DataBuffer.java @@ -15,7 +15,7 @@ ======================================================================= */ -package org.tensorflow.nio.buffer; +package org.tensorflow.util.buffer; import java.nio.ReadOnlyBufferException; @@ -68,7 +68,7 @@ public interface DataBuffer { * @return the value at the given index * @throws IndexOutOfBoundsException if index is negative or not smaller than the buffer size */ - T get(long index); + T getObject(long index); /** * Writes the given value into this buffer at the given index. @@ -84,7 +84,7 @@ public interface DataBuffer { * @throws IndexOutOfBoundsException if index is negative or not smaller than the buffer size * @throws ReadOnlyBufferException if this buffer is read-only */ - DataBuffer set(T value, long index); + DataBuffer setObject(T value, long index); /** * Copy data of this buffer in the given buffer. diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/DataBuffers.java b/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/DataBuffers.java similarity index 81% rename from tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/DataBuffers.java rename to tensorflow-utils/src/main/java/org/tensorflow/util/buffer/DataBuffers.java index 33752a27987..3f355c4c874 100644 --- a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/DataBuffers.java +++ b/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/DataBuffers.java @@ -14,7 +14,7 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.nio.buffer; +package org.tensorflow.util.buffer; import java.nio.ByteBuffer; import java.nio.DoubleBuffer; @@ -22,36 +22,37 @@ import java.nio.IntBuffer; import java.nio.LongBuffer; import java.nio.ShortBuffer; -import org.tensorflow.nio.buffer.adapter.BooleanDataAdapter; -import org.tensorflow.nio.buffer.adapter.DataAdapter; -import org.tensorflow.nio.buffer.adapter.DoubleDataAdapter; -import org.tensorflow.nio.buffer.adapter.FloatDataAdapter; -import org.tensorflow.nio.buffer.adapter.IntDataAdapter; -import org.tensorflow.nio.buffer.adapter.LongDataAdapter; -import org.tensorflow.nio.buffer.adapter.ShortDataAdapter; -import org.tensorflow.nio.buffer.impl.jdk.ByteJdkDataBuffer; -import org.tensorflow.nio.buffer.impl.jdk.DoubleJdkDataBuffer; -import org.tensorflow.nio.buffer.impl.jdk.FloatJdkDataBuffer; -import org.tensorflow.nio.buffer.impl.jdk.IntJdkDataBuffer; -import org.tensorflow.nio.buffer.impl.jdk.LongJdkDataBuffer; -import org.tensorflow.nio.buffer.impl.jdk.ShortJdkDataBuffer; -import org.tensorflow.nio.buffer.impl.misc.ArrayDataBuffer; -import org.tensorflow.nio.buffer.impl.misc.BitSetDataBuffer; -import org.tensorflow.nio.buffer.impl.misc.BooleanArrayDataBuffer; -import org.tensorflow.nio.buffer.impl.raw.BooleanRawDataBuffer; -import org.tensorflow.nio.buffer.impl.raw.ByteRawDataBuffer; -import org.tensorflow.nio.buffer.impl.raw.DoubleRawDataBuffer; -import org.tensorflow.nio.buffer.impl.raw.FloatRawDataBuffer; -import org.tensorflow.nio.buffer.impl.raw.IntRawDataBuffer; -import org.tensorflow.nio.buffer.impl.raw.LongRawDataBuffer; -import org.tensorflow.nio.buffer.impl.raw.ShortRawDataBuffer; -import org.tensorflow.nio.buffer.impl.virtual.BooleanVirtualDataBuffer; -import org.tensorflow.nio.buffer.impl.virtual.DoubleVirtualDataBuffer; -import org.tensorflow.nio.buffer.impl.virtual.FloatVirtualDataBuffer; -import org.tensorflow.nio.buffer.impl.virtual.IntVirtualDataBuffer; -import org.tensorflow.nio.buffer.impl.virtual.LongVirtualDataBuffer; -import org.tensorflow.nio.buffer.impl.virtual.ShortVirtualDataBuffer; -import org.tensorflow.nio.buffer.impl.virtual.VirtualDataBuffer; +import org.tensorflow.util.buffer.adapter.BooleanDataAdapter; +import org.tensorflow.util.buffer.adapter.DataAdapter; +import org.tensorflow.util.buffer.adapter.DoubleDataAdapter; +import org.tensorflow.util.buffer.adapter.FloatDataAdapter; +import org.tensorflow.util.buffer.adapter.IntDataAdapter; +import org.tensorflow.util.buffer.adapter.LongDataAdapter; +import org.tensorflow.util.buffer.adapter.ShortDataAdapter; +import org.tensorflow.util.buffer.impl.jdk.ByteJdkDataBuffer; +import org.tensorflow.util.buffer.impl.jdk.DoubleJdkDataBuffer; +import org.tensorflow.util.buffer.impl.jdk.FloatJdkDataBuffer; +import org.tensorflow.util.buffer.impl.jdk.IntJdkDataBuffer; +import org.tensorflow.util.buffer.impl.jdk.LongJdkDataBuffer; +import org.tensorflow.util.buffer.impl.jdk.ShortJdkDataBuffer; +import org.tensorflow.util.buffer.impl.misc.ArrayDataBuffer; +import org.tensorflow.util.buffer.impl.misc.BitSetDataBuffer; +import org.tensorflow.util.buffer.impl.misc.BooleanArrayDataBuffer; +import org.tensorflow.util.buffer.impl.raw.BooleanRawDataBuffer; +import org.tensorflow.util.buffer.impl.raw.ByteRawDataBuffer; +import org.tensorflow.util.buffer.impl.raw.DoubleRawDataBuffer; +import org.tensorflow.util.buffer.impl.raw.FloatRawDataBuffer; +import org.tensorflow.util.buffer.impl.raw.IntRawDataBuffer; +import org.tensorflow.util.buffer.impl.raw.LongRawDataBuffer; +import org.tensorflow.util.buffer.impl.raw.ShortRawDataBuffer; +import org.tensorflow.util.buffer.impl.raw.UnsafeReference; +import org.tensorflow.util.buffer.impl.virtual.BooleanVirtualDataBuffer; +import org.tensorflow.util.buffer.impl.virtual.DoubleVirtualDataBuffer; +import org.tensorflow.util.buffer.impl.virtual.FloatVirtualDataBuffer; +import org.tensorflow.util.buffer.impl.virtual.IntVirtualDataBuffer; +import org.tensorflow.util.buffer.impl.virtual.LongVirtualDataBuffer; +import org.tensorflow.util.buffer.impl.virtual.ShortVirtualDataBuffer; +import org.tensorflow.util.buffer.impl.virtual.VirtualDataBuffer; /** * Helper class for creating {@code DataBuffer} instances. @@ -65,7 +66,7 @@ public final class DataBuffers { * @return a new buffer */ public static ByteDataBuffer ofBytes(long size) { - return unsafeAvailable ? ByteRawDataBuffer.allocate(size) : ByteJdkDataBuffer.allocate(size); + return UnsafeReference.isAvailableInternally() ? ByteRawDataBuffer.allocate(size) : ByteJdkDataBuffer.allocate(size); } /** @@ -76,7 +77,7 @@ public static ByteDataBuffer ofBytes(long size) { * @return a new buffer */ public static ByteDataBuffer wrap(byte[] array, boolean readOnly) { - if (unsafeAvailable) { + if (UnsafeReference.isAvailableInternally()) { return ByteRawDataBuffer.wrap(array, readOnly); } ByteBuffer buf = ByteBuffer.wrap(array); @@ -100,7 +101,7 @@ public static ByteDataBuffer wrap(ByteBuffer buf) { * @return a new buffer */ public static LongDataBuffer ofLongs(long size) { - return unsafeAvailable ? LongRawDataBuffer.allocate(size) : LongJdkDataBuffer.allocate(size); + return UnsafeReference.isAvailableInternally() ? LongRawDataBuffer.allocate(size) : LongJdkDataBuffer.allocate(size); } /** @@ -139,7 +140,7 @@ public static LongDataBuffer toLongs(ByteDataBuffer buffer, LongDataAdapter adap * @return a new buffer */ public static LongDataBuffer wrap(long[] array, boolean readOnly) { - if (unsafeAvailable) { + if (UnsafeReference.isAvailableInternally()) { return LongRawDataBuffer.wrap(array, readOnly); } LongBuffer buf = LongBuffer.wrap(array); @@ -163,7 +164,7 @@ public static LongDataBuffer wrap(LongBuffer buf) { * @return a new buffer */ public static IntDataBuffer ofInts(long size) { - return unsafeAvailable ? IntRawDataBuffer.allocate(size) : IntJdkDataBuffer.allocate(size); + return UnsafeReference.isAvailableInternally() ? IntRawDataBuffer.allocate(size) : IntJdkDataBuffer.allocate(size); } /** @@ -202,7 +203,7 @@ public static IntDataBuffer toInts(ByteDataBuffer buffer, IntDataAdapter adapter * @return a new buffer */ public static IntDataBuffer wrap(int[] array, boolean readOnly) { - if (unsafeAvailable) { + if (UnsafeReference.isAvailableInternally()) { return IntRawDataBuffer.wrap(array, readOnly); } IntBuffer buf = IntBuffer.wrap(array); @@ -226,7 +227,7 @@ public static IntDataBuffer wrap(IntBuffer buf) { * @return a new buffer */ public static ShortDataBuffer ofShorts(long size) { - return unsafeAvailable ? ShortRawDataBuffer.allocate(size) : ShortJdkDataBuffer.allocate(size); + return UnsafeReference.isAvailableInternally() ? ShortRawDataBuffer.allocate(size) : ShortJdkDataBuffer.allocate(size); } /** @@ -264,7 +265,7 @@ public static ShortDataBuffer toShorts(ByteDataBuffer buffer, ShortDataAdapter a * @return a new buffer */ public static ShortDataBuffer wrap(short[] array, boolean readOnly) { - if (unsafeAvailable) { + if (UnsafeReference.isAvailableInternally()) { return ShortRawDataBuffer.wrap(array, readOnly); } ShortBuffer buf = ShortBuffer.wrap(array); @@ -288,7 +289,7 @@ public static ShortDataBuffer wrap(ShortBuffer buf) { * @return a new buffer */ public static DoubleDataBuffer ofDoubles(long size) { - return unsafeAvailable ? DoubleRawDataBuffer.allocate(size) : DoubleJdkDataBuffer.allocate(size); + return UnsafeReference.isAvailableInternally() ? DoubleRawDataBuffer.allocate(size) : DoubleJdkDataBuffer.allocate(size); } /** @@ -327,7 +328,7 @@ public static DoubleDataBuffer toDoubles(ByteDataBuffer buffer, DoubleDataAdapte * @return a new buffer */ public static DoubleDataBuffer wrap(double[] array, boolean readOnly) { - if (unsafeAvailable) { + if (UnsafeReference.isAvailableInternally()) { return DoubleRawDataBuffer.wrap(array, readOnly); } DoubleBuffer buf = DoubleBuffer.wrap(array); @@ -351,7 +352,7 @@ public static DoubleDataBuffer wrap(DoubleBuffer buf) { * @return a new buffer */ public static FloatDataBuffer ofFloats(long size) { - return unsafeAvailable ? FloatRawDataBuffer.allocate(size) : FloatJdkDataBuffer.allocate(size); + return UnsafeReference.isAvailableInternally() ? FloatRawDataBuffer.allocate(size) : FloatJdkDataBuffer.allocate(size); } /** @@ -389,7 +390,7 @@ public static FloatDataBuffer toFloats(ByteDataBuffer buffer, FloatDataAdapter a * @return a new buffer */ public static FloatDataBuffer wrap(float[] array, boolean readOnly) { - if (unsafeAvailable) { + if (UnsafeReference.isAvailableInternally()) { return FloatRawDataBuffer.wrap(array, readOnly); } FloatBuffer buf = FloatBuffer.wrap(array); @@ -413,7 +414,7 @@ public static FloatDataBuffer wrap(FloatBuffer buf) { * @return a new buffer */ public static BooleanDataBuffer ofBooleans(long size) { - return unsafeAvailable ? BooleanRawDataBuffer.allocate(size) : BitSetDataBuffer.allocate(size); + return UnsafeReference.isAvailableInternally() ? BooleanRawDataBuffer.allocate(size) : BitSetDataBuffer.allocate(size); } /** @@ -451,7 +452,7 @@ public static BooleanDataBuffer toBooleans(ByteDataBuffer buffer, BooleanDataAda * @return a new buffer */ public static BooleanDataBuffer wrap(boolean[] array, boolean readOnly) { - if (unsafeAvailable) { + if (UnsafeReference.isAvailableInternally()) { return BooleanRawDataBuffer.wrap(array, readOnly); } return BooleanArrayDataBuffer.wrap(array, readOnly); @@ -505,15 +506,4 @@ public static DataBuffer to(ByteDataBuffer buffer, DataAdapter adapter public static DataBuffer wrap(T[] array, boolean readOnly) { return ArrayDataBuffer.wrap(array, readOnly); } - - private static boolean unsafeAvailable; - - static { - try { - Class.forName("sun.misc.Unsafe"); - unsafeAvailable = true; - } catch (ClassNotFoundException e) { - unsafeAvailable = false; - } - } } diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/DoubleDataBuffer.java b/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/DoubleDataBuffer.java similarity index 97% rename from tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/DoubleDataBuffer.java rename to tensorflow-utils/src/main/java/org/tensorflow/util/buffer/DoubleDataBuffer.java index 132bdf25178..ec16b21ee42 100644 --- a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/DoubleDataBuffer.java +++ b/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/DoubleDataBuffer.java @@ -14,7 +14,7 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.nio.buffer; +package org.tensorflow.util.buffer; import java.nio.BufferOverflowException; import java.nio.BufferUnderflowException; @@ -133,12 +133,12 @@ default DoubleDataBuffer write(double[] src) { DoubleDataBuffer write(double[] src, int offset, int length); @Override - default Double get(long index) { + default Double getObject(long index) { return getDouble(index); } @Override - default DoubleDataBuffer set(Double value, long index) { + default DoubleDataBuffer setObject(Double value, long index) { return setDouble(value, index); } diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/FloatDataBuffer.java b/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/FloatDataBuffer.java similarity index 97% rename from tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/FloatDataBuffer.java rename to tensorflow-utils/src/main/java/org/tensorflow/util/buffer/FloatDataBuffer.java index 92ea2ca2848..458f277bd75 100644 --- a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/FloatDataBuffer.java +++ b/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/FloatDataBuffer.java @@ -14,7 +14,7 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.nio.buffer; +package org.tensorflow.util.buffer; import java.nio.BufferOverflowException; import java.nio.BufferUnderflowException; @@ -133,12 +133,12 @@ default FloatDataBuffer write(float[] src) { FloatDataBuffer write(float[] src, int offset, int length); @Override - default Float get(long index) { + default Float getObject(long index) { return getFloat(index); } @Override - default FloatDataBuffer set(Float value, long index) { + default FloatDataBuffer setObject(Float value, long index) { return setFloat(value, index); } diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/IntDataBuffer.java b/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/IntDataBuffer.java similarity index 97% rename from tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/IntDataBuffer.java rename to tensorflow-utils/src/main/java/org/tensorflow/util/buffer/IntDataBuffer.java index a6844610bc4..567d8144f6a 100644 --- a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/IntDataBuffer.java +++ b/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/IntDataBuffer.java @@ -14,7 +14,7 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.nio.buffer; +package org.tensorflow.util.buffer; import java.nio.BufferOverflowException; import java.nio.BufferUnderflowException; @@ -133,12 +133,12 @@ default IntDataBuffer write(int[] src) { IntDataBuffer write(int[] src, int offset, int length); @Override - default Integer get(long index) { + default Integer getObject(long index) { return getInt(index); } @Override - default IntDataBuffer set(Integer value, long index) { + default IntDataBuffer setObject(Integer value, long index) { return setInt(value, index); } diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/LongDataBuffer.java b/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/LongDataBuffer.java similarity index 97% rename from tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/LongDataBuffer.java rename to tensorflow-utils/src/main/java/org/tensorflow/util/buffer/LongDataBuffer.java index 06a56d13f51..5fbef726972 100644 --- a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/LongDataBuffer.java +++ b/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/LongDataBuffer.java @@ -14,7 +14,7 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.nio.buffer; +package org.tensorflow.util.buffer; import java.nio.BufferOverflowException; import java.nio.BufferUnderflowException; @@ -133,12 +133,12 @@ default LongDataBuffer write(long[] src) { LongDataBuffer write(long[] src, int offset, int length); @Override - default Long get(long index) { + default Long getObject(long index) { return getLong(index); } @Override - default LongDataBuffer set(Long value, long index) { + default LongDataBuffer setObject(Long value, long index) { return setLong(value, index); } diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/ShortDataBuffer.java b/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/ShortDataBuffer.java similarity index 97% rename from tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/ShortDataBuffer.java rename to tensorflow-utils/src/main/java/org/tensorflow/util/buffer/ShortDataBuffer.java index 5cbe88eed4f..247522af0c7 100644 --- a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/ShortDataBuffer.java +++ b/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/ShortDataBuffer.java @@ -14,7 +14,7 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.nio.buffer; +package org.tensorflow.util.buffer; import java.nio.BufferOverflowException; import java.nio.BufferUnderflowException; @@ -133,12 +133,12 @@ default ShortDataBuffer write(short[] src) { ShortDataBuffer write(short[] src, int offset, int length); @Override - default Short get(long index) { + default Short getObject(long index) { return getShort(index); } @Override - default ShortDataBuffer set(Short value, long index) { + default ShortDataBuffer setObject(Short value, long index) { return setShort(value, index); } diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/adapter/BooleanDataAdapter.java b/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/adapter/BooleanDataAdapter.java similarity index 90% rename from tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/adapter/BooleanDataAdapter.java rename to tensorflow-utils/src/main/java/org/tensorflow/util/buffer/adapter/BooleanDataAdapter.java index 0669689b499..9e0ab441f02 100644 --- a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/adapter/BooleanDataAdapter.java +++ b/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/adapter/BooleanDataAdapter.java @@ -1,6 +1,6 @@ -package org.tensorflow.nio.buffer.adapter; +package org.tensorflow.util.buffer.adapter; -import org.tensorflow.nio.buffer.ByteDataBuffer; +import org.tensorflow.util.buffer.ByteDataBuffer; /** * Converts a boolean to/from bytes diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/adapter/DataAdapter.java b/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/adapter/DataAdapter.java similarity index 89% rename from tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/adapter/DataAdapter.java rename to tensorflow-utils/src/main/java/org/tensorflow/util/buffer/adapter/DataAdapter.java index 6af12d78c57..0158f6303ba 100644 --- a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/adapter/DataAdapter.java +++ b/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/adapter/DataAdapter.java @@ -1,6 +1,6 @@ -package org.tensorflow.nio.buffer.adapter; +package org.tensorflow.util.buffer.adapter; -import org.tensorflow.nio.buffer.ByteDataBuffer; +import org.tensorflow.util.buffer.ByteDataBuffer; /** * Converts a value of a given type to/from bytes diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/adapter/DoubleDataAdapter.java b/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/adapter/DoubleDataAdapter.java similarity index 90% rename from tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/adapter/DoubleDataAdapter.java rename to tensorflow-utils/src/main/java/org/tensorflow/util/buffer/adapter/DoubleDataAdapter.java index b72068f1c01..815ce9aea04 100644 --- a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/adapter/DoubleDataAdapter.java +++ b/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/adapter/DoubleDataAdapter.java @@ -1,6 +1,6 @@ -package org.tensorflow.nio.buffer.adapter; +package org.tensorflow.util.buffer.adapter; -import org.tensorflow.nio.buffer.ByteDataBuffer; +import org.tensorflow.util.buffer.ByteDataBuffer; /** * Converts a double to/from bytes diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/adapter/FloatDataAdapter.java b/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/adapter/FloatDataAdapter.java similarity index 90% rename from tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/adapter/FloatDataAdapter.java rename to tensorflow-utils/src/main/java/org/tensorflow/util/buffer/adapter/FloatDataAdapter.java index 72f9c2cd66c..0107dc6caae 100644 --- a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/adapter/FloatDataAdapter.java +++ b/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/adapter/FloatDataAdapter.java @@ -1,6 +1,6 @@ -package org.tensorflow.nio.buffer.adapter; +package org.tensorflow.util.buffer.adapter; -import org.tensorflow.nio.buffer.ByteDataBuffer; +import org.tensorflow.util.buffer.ByteDataBuffer; /** * Converts a float to/from bytes diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/adapter/IntDataAdapter.java b/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/adapter/IntDataAdapter.java similarity index 90% rename from tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/adapter/IntDataAdapter.java rename to tensorflow-utils/src/main/java/org/tensorflow/util/buffer/adapter/IntDataAdapter.java index b25d58784c0..75ed8f3df56 100644 --- a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/adapter/IntDataAdapter.java +++ b/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/adapter/IntDataAdapter.java @@ -1,6 +1,6 @@ -package org.tensorflow.nio.buffer.adapter; +package org.tensorflow.util.buffer.adapter; -import org.tensorflow.nio.buffer.ByteDataBuffer; +import org.tensorflow.util.buffer.ByteDataBuffer; /** * Converts a int to/from bytes diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/adapter/LongDataAdapter.java b/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/adapter/LongDataAdapter.java similarity index 90% rename from tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/adapter/LongDataAdapter.java rename to tensorflow-utils/src/main/java/org/tensorflow/util/buffer/adapter/LongDataAdapter.java index 4d18571de35..ff9944da60d 100644 --- a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/adapter/LongDataAdapter.java +++ b/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/adapter/LongDataAdapter.java @@ -1,6 +1,6 @@ -package org.tensorflow.nio.buffer.adapter; +package org.tensorflow.util.buffer.adapter; -import org.tensorflow.nio.buffer.ByteDataBuffer; +import org.tensorflow.util.buffer.ByteDataBuffer; /** * Converts a long to/from bytes diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/adapter/ShortDataAdapter.java b/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/adapter/ShortDataAdapter.java similarity index 90% rename from tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/adapter/ShortDataAdapter.java rename to tensorflow-utils/src/main/java/org/tensorflow/util/buffer/adapter/ShortDataAdapter.java index a082cd4beb1..ca31242c1c8 100644 --- a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/adapter/ShortDataAdapter.java +++ b/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/adapter/ShortDataAdapter.java @@ -1,6 +1,6 @@ -package org.tensorflow.nio.buffer.adapter; +package org.tensorflow.util.buffer.adapter; -import org.tensorflow.nio.buffer.ByteDataBuffer; +import org.tensorflow.util.buffer.ByteDataBuffer; /** * Converts a short to/from bytes diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/AbstractDataBuffer.java b/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/AbstractDataBuffer.java similarity index 87% rename from tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/AbstractDataBuffer.java rename to tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/AbstractDataBuffer.java index 899a4247d72..e47bc721710 100644 --- a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/AbstractDataBuffer.java +++ b/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/AbstractDataBuffer.java @@ -14,15 +14,15 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.nio.buffer.impl; +package org.tensorflow.util.buffer.impl; -import org.tensorflow.nio.buffer.DataBuffer; +import org.tensorflow.util.buffer.DataBuffer; public abstract class AbstractDataBuffer implements DataBuffer { protected void slowCopyTo(DataBuffer dst, long size) { for (long idx = 0; idx < size; ++idx) { - dst.set(get(idx), idx); + dst.setObject(getObject(idx), idx); } } } diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/Validator.java b/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/Validator.java similarity index 97% rename from tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/Validator.java rename to tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/Validator.java index d68a7e6714e..808c822065e 100644 --- a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/Validator.java +++ b/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/Validator.java @@ -14,12 +14,12 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.nio.buffer.impl; +package org.tensorflow.util.buffer.impl; import java.nio.BufferOverflowException; import java.nio.BufferUnderflowException; import java.nio.ReadOnlyBufferException; -import org.tensorflow.nio.buffer.DataBuffer; +import org.tensorflow.util.buffer.DataBuffer; public class Validator { diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/jdk/AbstractJdkDataBuffer.java b/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/jdk/AbstractJdkDataBuffer.java similarity index 93% rename from tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/jdk/AbstractJdkDataBuffer.java rename to tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/jdk/AbstractJdkDataBuffer.java index 5bdfc2bd4c2..91bad920569 100644 --- a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/jdk/AbstractJdkDataBuffer.java +++ b/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/jdk/AbstractJdkDataBuffer.java @@ -15,10 +15,10 @@ ======================================================================= */ -package org.tensorflow.nio.buffer.impl.jdk; +package org.tensorflow.util.buffer.impl.jdk; import java.nio.Buffer; -import org.tensorflow.nio.buffer.impl.AbstractDataBuffer; +import org.tensorflow.util.buffer.impl.AbstractDataBuffer; /** * Base class for all JDK-based data buffers. diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/jdk/ByteJdkDataBuffer.java b/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/jdk/ByteJdkDataBuffer.java similarity index 94% rename from tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/jdk/ByteJdkDataBuffer.java rename to tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/jdk/ByteJdkDataBuffer.java index e66eb511e11..fe7522b7b1a 100644 --- a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/jdk/ByteJdkDataBuffer.java +++ b/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/jdk/ByteJdkDataBuffer.java @@ -15,12 +15,12 @@ ======================================================================= */ -package org.tensorflow.nio.buffer.impl.jdk; +package org.tensorflow.util.buffer.impl.jdk; import java.nio.ByteBuffer; -import org.tensorflow.nio.buffer.ByteDataBuffer; -import org.tensorflow.nio.buffer.DataBuffer; -import org.tensorflow.nio.buffer.impl.Validator; +import org.tensorflow.util.buffer.ByteDataBuffer; +import org.tensorflow.util.buffer.DataBuffer; +import org.tensorflow.util.buffer.impl.Validator; /** * A buffer of bytes using a JDK {@link ByteBuffer} for storage. diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/jdk/DoubleJdkDataBuffer.java b/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/jdk/DoubleJdkDataBuffer.java similarity index 94% rename from tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/jdk/DoubleJdkDataBuffer.java rename to tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/jdk/DoubleJdkDataBuffer.java index b98deb39ed1..611877febac 100644 --- a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/jdk/DoubleJdkDataBuffer.java +++ b/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/jdk/DoubleJdkDataBuffer.java @@ -15,12 +15,12 @@ ======================================================================= */ -package org.tensorflow.nio.buffer.impl.jdk; +package org.tensorflow.util.buffer.impl.jdk; import java.nio.DoubleBuffer; -import org.tensorflow.nio.buffer.DataBuffer; -import org.tensorflow.nio.buffer.DoubleDataBuffer; -import org.tensorflow.nio.buffer.impl.Validator; +import org.tensorflow.util.buffer.DataBuffer; +import org.tensorflow.util.buffer.DoubleDataBuffer; +import org.tensorflow.util.buffer.impl.Validator; /** * A buffer of bytes using a JDK {@link DoubleBuffer} for storage. diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/jdk/FloatJdkDataBuffer.java b/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/jdk/FloatJdkDataBuffer.java similarity index 94% rename from tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/jdk/FloatJdkDataBuffer.java rename to tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/jdk/FloatJdkDataBuffer.java index d39e74f2e76..571fb060b13 100644 --- a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/jdk/FloatJdkDataBuffer.java +++ b/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/jdk/FloatJdkDataBuffer.java @@ -15,12 +15,12 @@ ======================================================================= */ -package org.tensorflow.nio.buffer.impl.jdk; +package org.tensorflow.util.buffer.impl.jdk; import java.nio.FloatBuffer; -import org.tensorflow.nio.buffer.DataBuffer; -import org.tensorflow.nio.buffer.FloatDataBuffer; -import org.tensorflow.nio.buffer.impl.Validator; +import org.tensorflow.util.buffer.DataBuffer; +import org.tensorflow.util.buffer.FloatDataBuffer; +import org.tensorflow.util.buffer.impl.Validator; /** * A buffer of bytes using a JDK {@link FloatBuffer} for storage. diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/jdk/IntJdkDataBuffer.java b/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/jdk/IntJdkDataBuffer.java similarity index 94% rename from tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/jdk/IntJdkDataBuffer.java rename to tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/jdk/IntJdkDataBuffer.java index 06ae10c11c6..81237624b33 100644 --- a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/jdk/IntJdkDataBuffer.java +++ b/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/jdk/IntJdkDataBuffer.java @@ -15,12 +15,12 @@ ======================================================================= */ -package org.tensorflow.nio.buffer.impl.jdk; +package org.tensorflow.util.buffer.impl.jdk; import java.nio.IntBuffer; -import org.tensorflow.nio.buffer.DataBuffer; -import org.tensorflow.nio.buffer.IntDataBuffer; -import org.tensorflow.nio.buffer.impl.Validator; +import org.tensorflow.util.buffer.DataBuffer; +import org.tensorflow.util.buffer.IntDataBuffer; +import org.tensorflow.util.buffer.impl.Validator; /** * A buffer of bytes using a JDK {@link IntBuffer} for storage. diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/jdk/LongJdkDataBuffer.java b/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/jdk/LongJdkDataBuffer.java similarity index 94% rename from tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/jdk/LongJdkDataBuffer.java rename to tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/jdk/LongJdkDataBuffer.java index 05851cd28bf..3ea9daa1b04 100644 --- a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/jdk/LongJdkDataBuffer.java +++ b/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/jdk/LongJdkDataBuffer.java @@ -15,12 +15,12 @@ ======================================================================= */ -package org.tensorflow.nio.buffer.impl.jdk; +package org.tensorflow.util.buffer.impl.jdk; import java.nio.LongBuffer; -import org.tensorflow.nio.buffer.DataBuffer; -import org.tensorflow.nio.buffer.LongDataBuffer; -import org.tensorflow.nio.buffer.impl.Validator; +import org.tensorflow.util.buffer.DataBuffer; +import org.tensorflow.util.buffer.LongDataBuffer; +import org.tensorflow.util.buffer.impl.Validator; /** * A buffer of bytes using a JDK {@link LongBuffer} for storage. diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/jdk/ShortJdkDataBuffer.java b/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/jdk/ShortJdkDataBuffer.java similarity index 94% rename from tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/jdk/ShortJdkDataBuffer.java rename to tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/jdk/ShortJdkDataBuffer.java index 28b7bfd9b57..d4371f27804 100644 --- a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/jdk/ShortJdkDataBuffer.java +++ b/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/jdk/ShortJdkDataBuffer.java @@ -15,12 +15,12 @@ ======================================================================= */ -package org.tensorflow.nio.buffer.impl.jdk; +package org.tensorflow.util.buffer.impl.jdk; import java.nio.ShortBuffer; -import org.tensorflow.nio.buffer.DataBuffer; -import org.tensorflow.nio.buffer.ShortDataBuffer; -import org.tensorflow.nio.buffer.impl.Validator; +import org.tensorflow.util.buffer.DataBuffer; +import org.tensorflow.util.buffer.ShortDataBuffer; +import org.tensorflow.util.buffer.impl.Validator; /** * A buffer of bytes using a JDK {@link ShortBuffer} for storage. diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/misc/ArrayDataBuffer.java b/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/misc/ArrayDataBuffer.java similarity index 91% rename from tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/misc/ArrayDataBuffer.java rename to tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/misc/ArrayDataBuffer.java index 4d20f5903f6..8d53d55eee2 100644 --- a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/misc/ArrayDataBuffer.java +++ b/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/misc/ArrayDataBuffer.java @@ -14,12 +14,12 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.nio.buffer.impl.misc; +package org.tensorflow.util.buffer.impl.misc; import java.lang.reflect.Array; -import org.tensorflow.nio.buffer.DataBuffer; -import org.tensorflow.nio.buffer.impl.AbstractDataBuffer; -import org.tensorflow.nio.buffer.impl.Validator; +import org.tensorflow.util.buffer.impl.AbstractDataBuffer; +import org.tensorflow.util.buffer.impl.Validator; +import org.tensorflow.util.buffer.DataBuffer; public class ArrayDataBuffer extends AbstractDataBuffer { @@ -53,13 +53,13 @@ public boolean isReadOnly() { } @Override - public T get(long index) { + public T getObject(long index) { Validator.getArgs(this, index); return values[(int)index + offset]; } @Override - public DataBuffer set(T value, long index) { + public DataBuffer setObject(T value, long index) { Validator.setArgs(this, index); values[(int)index + offset] = value; return this; diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/misc/BitSetDataBuffer.java b/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/misc/BitSetDataBuffer.java similarity index 89% rename from tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/misc/BitSetDataBuffer.java rename to tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/misc/BitSetDataBuffer.java index a27bf13e86b..692d4f09bf3 100644 --- a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/misc/BitSetDataBuffer.java +++ b/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/misc/BitSetDataBuffer.java @@ -1,12 +1,12 @@ -package org.tensorflow.nio.buffer.impl.misc; +package org.tensorflow.util.buffer.impl.misc; import java.util.BitSet; -import org.tensorflow.nio.buffer.BooleanDataBuffer; -import org.tensorflow.nio.buffer.DataBuffer; -import org.tensorflow.nio.buffer.impl.AbstractDataBuffer; -import org.tensorflow.nio.buffer.impl.Validator; +import org.tensorflow.util.buffer.BooleanDataBuffer; +import org.tensorflow.util.buffer.DataBuffer; +import org.tensorflow.util.buffer.impl.AbstractDataBuffer; +import org.tensorflow.util.buffer.impl.Validator; -public class BitSetDataBuffer extends AbstractDataBuffer implements BooleanDataBuffer { +public class BitSetDataBuffer extends AbstractDataBuffer implements BooleanDataBuffer { public static long MAX_CAPACITY = Integer.MAX_VALUE - 2; diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/misc/BooleanArrayDataBuffer.java b/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/misc/BooleanArrayDataBuffer.java similarity index 90% rename from tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/misc/BooleanArrayDataBuffer.java rename to tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/misc/BooleanArrayDataBuffer.java index 626dad463f8..77612e6ef70 100644 --- a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/misc/BooleanArrayDataBuffer.java +++ b/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/misc/BooleanArrayDataBuffer.java @@ -14,14 +14,15 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.nio.buffer.impl.misc; +package org.tensorflow.util.buffer.impl.misc; -import org.tensorflow.nio.buffer.BooleanDataBuffer; -import org.tensorflow.nio.buffer.DataBuffer; -import org.tensorflow.nio.buffer.impl.AbstractDataBuffer; -import org.tensorflow.nio.buffer.impl.Validator; +import org.tensorflow.util.buffer.BooleanDataBuffer; +import org.tensorflow.util.buffer.DataBuffer; +import org.tensorflow.util.buffer.impl.AbstractDataBuffer; +import org.tensorflow.util.buffer.impl.Validator; -public class BooleanArrayDataBuffer extends AbstractDataBuffer implements BooleanDataBuffer { +public class BooleanArrayDataBuffer extends AbstractDataBuffer implements + BooleanDataBuffer { public static BooleanDataBuffer wrap(boolean[] array, boolean readOnly) { return new BooleanArrayDataBuffer(array, readOnly); diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/raw/AbstractRawDataBuffer.java b/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/raw/AbstractRawDataBuffer.java similarity index 73% rename from tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/raw/AbstractRawDataBuffer.java rename to tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/raw/AbstractRawDataBuffer.java index ad7e776f181..30898b7b917 100644 --- a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/raw/AbstractRawDataBuffer.java +++ b/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/raw/AbstractRawDataBuffer.java @@ -1,10 +1,8 @@ -package org.tensorflow.nio.buffer.impl.raw; +package org.tensorflow.util.buffer.impl.raw; -import java.lang.reflect.Field; -import org.tensorflow.nio.buffer.DataBuffer; -import org.tensorflow.nio.buffer.impl.AbstractDataBuffer; -import org.tensorflow.nio.buffer.impl.Validator; -import sun.misc.Unsafe; +import org.tensorflow.util.buffer.DataBuffer; +import org.tensorflow.util.buffer.impl.AbstractDataBuffer; +import org.tensorflow.util.buffer.impl.Validator; abstract class AbstractRawDataBuffer> extends AbstractDataBuffer { @@ -53,18 +51,6 @@ public B narrow(long size) { protected abstract B instantiate(UnsafeMemoryHandle region, boolean readOnly); - static final Unsafe UNSAFE; - - static { - try { - Field theUnsafe = Unsafe.class.getDeclaredField("theUnsafe"); - theUnsafe.setAccessible(true); - UNSAFE = (Unsafe) theUnsafe.get(null); - } catch (NoSuchFieldException | IllegalAccessException e) { - throw new RuntimeException(e); - } - } - final UnsafeMemoryHandle memory; AbstractRawDataBuffer(UnsafeMemoryHandle memory, boolean readOnly) { diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/raw/BooleanRawDataBuffer.java b/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/raw/BooleanRawDataBuffer.java similarity index 85% rename from tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/raw/BooleanRawDataBuffer.java rename to tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/raw/BooleanRawDataBuffer.java index dc822003fc2..b68db0a7bf3 100644 --- a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/raw/BooleanRawDataBuffer.java +++ b/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/raw/BooleanRawDataBuffer.java @@ -1,7 +1,7 @@ -package org.tensorflow.nio.buffer.impl.raw; +package org.tensorflow.util.buffer.impl.raw; -import org.tensorflow.nio.buffer.BooleanDataBuffer; -import org.tensorflow.nio.buffer.impl.Validator; +import org.tensorflow.util.buffer.BooleanDataBuffer; +import org.tensorflow.util.buffer.impl.Validator; import sun.misc.Unsafe; public final class BooleanRawDataBuffer extends AbstractRawDataBuffer @@ -13,10 +13,10 @@ public static BooleanDataBuffer allocate(long size) { } public static BooleanDataBuffer wrap(boolean[] array, boolean readOnly) { - return new BooleanRawDataBuffer(UnsafeMemoryHandle.of(UNSAFE, array), readOnly); + return new BooleanRawDataBuffer(UnsafeMemoryHandle.of(UnsafeReference.get(), array), readOnly); } - public static BooleanDataBuffer map(Unsafe unsafe, long address, long size, boolean readOnly) { + public static BooleanDataBuffer map(UnsafeReference unsafe, long address, long size, boolean readOnly) { Validator.createArgs(size, MAX_64BITS); return new BooleanRawDataBuffer(UnsafeMemoryHandle.of(unsafe, address, size, Byte.BYTES), readOnly); } diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/raw/ByteRawDataBuffer.java b/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/raw/ByteRawDataBuffer.java similarity index 85% rename from tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/raw/ByteRawDataBuffer.java rename to tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/raw/ByteRawDataBuffer.java index c84d6209cdf..2cd154bea2e 100644 --- a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/raw/ByteRawDataBuffer.java +++ b/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/raw/ByteRawDataBuffer.java @@ -1,7 +1,7 @@ -package org.tensorflow.nio.buffer.impl.raw; +package org.tensorflow.util.buffer.impl.raw; -import org.tensorflow.nio.buffer.ByteDataBuffer; -import org.tensorflow.nio.buffer.impl.Validator; +import org.tensorflow.util.buffer.ByteDataBuffer; +import org.tensorflow.util.buffer.impl.Validator; import sun.misc.Unsafe; public final class ByteRawDataBuffer extends AbstractRawDataBuffer @@ -13,10 +13,10 @@ public static ByteDataBuffer allocate(long size) { } public static ByteDataBuffer wrap(byte[] array, boolean readOnly) { - return new ByteRawDataBuffer(UnsafeMemoryHandle.of(UNSAFE, array), readOnly); + return new ByteRawDataBuffer(UnsafeMemoryHandle.of(UnsafeReference.get(), array), readOnly); } - public static ByteDataBuffer map(Unsafe unsafe, long address, long size, boolean readOnly) { + public static ByteDataBuffer map(UnsafeReference unsafe, long address, long size, boolean readOnly) { Validator.createArgs(size, MAX_64BITS); return new ByteRawDataBuffer(UnsafeMemoryHandle.of(unsafe, address, size, Byte.BYTES), readOnly); } diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/raw/DoubleRawDataBuffer.java b/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/raw/DoubleRawDataBuffer.java similarity index 85% rename from tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/raw/DoubleRawDataBuffer.java rename to tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/raw/DoubleRawDataBuffer.java index 3c5af30634a..ee158c0d9b8 100644 --- a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/raw/DoubleRawDataBuffer.java +++ b/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/raw/DoubleRawDataBuffer.java @@ -1,7 +1,7 @@ -package org.tensorflow.nio.buffer.impl.raw; +package org.tensorflow.util.buffer.impl.raw; -import org.tensorflow.nio.buffer.DoubleDataBuffer; -import org.tensorflow.nio.buffer.impl.Validator; +import org.tensorflow.util.buffer.DoubleDataBuffer; +import org.tensorflow.util.buffer.impl.Validator; import sun.misc.Unsafe; public final class DoubleRawDataBuffer extends AbstractRawDataBuffer @@ -13,10 +13,10 @@ public static DoubleDataBuffer allocate(long size) { } public static DoubleDataBuffer wrap(double[] array, boolean readOnly) { - return new DoubleRawDataBuffer(UnsafeMemoryHandle.of(UNSAFE, array), readOnly); + return new DoubleRawDataBuffer(UnsafeMemoryHandle.of(UnsafeReference.get(), array), readOnly); } - public static DoubleDataBuffer map(Unsafe unsafe, long address, long size, boolean readOnly) { + public static DoubleDataBuffer map(UnsafeReference unsafe, long address, long size, boolean readOnly) { Validator.createArgs(size, MAX_64BITS); return new DoubleRawDataBuffer(UnsafeMemoryHandle.of(unsafe, address, size, Double.BYTES), readOnly); } diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/raw/FloatRawDataBuffer.java b/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/raw/FloatRawDataBuffer.java similarity index 85% rename from tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/raw/FloatRawDataBuffer.java rename to tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/raw/FloatRawDataBuffer.java index 1b66d91d687..b8b26d692f3 100644 --- a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/raw/FloatRawDataBuffer.java +++ b/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/raw/FloatRawDataBuffer.java @@ -1,7 +1,7 @@ -package org.tensorflow.nio.buffer.impl.raw; +package org.tensorflow.util.buffer.impl.raw; -import org.tensorflow.nio.buffer.FloatDataBuffer; -import org.tensorflow.nio.buffer.impl.Validator; +import org.tensorflow.util.buffer.FloatDataBuffer; +import org.tensorflow.util.buffer.impl.Validator; import sun.misc.Unsafe; public final class FloatRawDataBuffer extends AbstractRawDataBuffer @@ -13,10 +13,10 @@ public static FloatDataBuffer allocate(long size) { } public static FloatDataBuffer wrap(float[] array, boolean readOnly) { - return new FloatRawDataBuffer(UnsafeMemoryHandle.of(UNSAFE, array), readOnly); + return new FloatRawDataBuffer(UnsafeMemoryHandle.of(UnsafeReference.get(), array), readOnly); } - public static FloatDataBuffer map(Unsafe unsafe, long address, long size, boolean readOnly) { + public static FloatDataBuffer map(UnsafeReference unsafe, long address, long size, boolean readOnly) { Validator.createArgs(size, MAX_64BITS); return new FloatRawDataBuffer(UnsafeMemoryHandle.of(unsafe, address, size, Float.BYTES), readOnly); } diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/raw/IntRawDataBuffer.java b/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/raw/IntRawDataBuffer.java similarity index 85% rename from tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/raw/IntRawDataBuffer.java rename to tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/raw/IntRawDataBuffer.java index efb489816ef..87ea879043e 100644 --- a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/raw/IntRawDataBuffer.java +++ b/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/raw/IntRawDataBuffer.java @@ -1,7 +1,7 @@ -package org.tensorflow.nio.buffer.impl.raw; +package org.tensorflow.util.buffer.impl.raw; -import org.tensorflow.nio.buffer.IntDataBuffer; -import org.tensorflow.nio.buffer.impl.Validator; +import org.tensorflow.util.buffer.IntDataBuffer; +import org.tensorflow.util.buffer.impl.Validator; import sun.misc.Unsafe; public final class IntRawDataBuffer extends AbstractRawDataBuffer @@ -13,10 +13,10 @@ public static IntDataBuffer allocate(long size) { } public static IntDataBuffer wrap(int[] array, boolean readOnly) { - return new IntRawDataBuffer(UnsafeMemoryHandle.of(UNSAFE, array), readOnly); + return new IntRawDataBuffer(UnsafeMemoryHandle.of(UnsafeReference.get(), array), readOnly); } - public static IntDataBuffer map(Unsafe unsafe, long address, long size, boolean readOnly) { + public static IntDataBuffer map(UnsafeReference unsafe, long address, long size, boolean readOnly) { Validator.createArgs(size, MAX_64BITS); return new IntRawDataBuffer(UnsafeMemoryHandle.of(unsafe, address, size, Integer.BYTES), readOnly); } diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/raw/LongRawDataBuffer.java b/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/raw/LongRawDataBuffer.java similarity index 85% rename from tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/raw/LongRawDataBuffer.java rename to tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/raw/LongRawDataBuffer.java index 7a43fb0c0d1..1ebd7f18181 100644 --- a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/raw/LongRawDataBuffer.java +++ b/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/raw/LongRawDataBuffer.java @@ -1,7 +1,7 @@ -package org.tensorflow.nio.buffer.impl.raw; +package org.tensorflow.util.buffer.impl.raw; -import org.tensorflow.nio.buffer.LongDataBuffer; -import org.tensorflow.nio.buffer.impl.Validator; +import org.tensorflow.util.buffer.LongDataBuffer; +import org.tensorflow.util.buffer.impl.Validator; import sun.misc.Unsafe; public final class LongRawDataBuffer extends AbstractRawDataBuffer @@ -13,10 +13,10 @@ public static LongDataBuffer allocate(long size) { } public static LongDataBuffer wrap(long[] array, boolean readOnly) { - return new LongRawDataBuffer(UnsafeMemoryHandle.of(UNSAFE, array), readOnly); + return new LongRawDataBuffer(UnsafeMemoryHandle.of(UnsafeReference.get(), array), readOnly); } - public static LongDataBuffer map(Unsafe unsafe, long address, long size, boolean readOnly) { + public static LongDataBuffer map(UnsafeReference unsafe, long address, long size, boolean readOnly) { Validator.createArgs(size, MAX_64BITS); return new LongRawDataBuffer(UnsafeMemoryHandle.of(unsafe, address, size, Long.BYTES), readOnly); } diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/raw/ShortRawDataBuffer.java b/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/raw/ShortRawDataBuffer.java similarity index 85% rename from tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/raw/ShortRawDataBuffer.java rename to tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/raw/ShortRawDataBuffer.java index 5cc6d93bc83..1c1c1436d95 100644 --- a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/raw/ShortRawDataBuffer.java +++ b/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/raw/ShortRawDataBuffer.java @@ -1,7 +1,7 @@ -package org.tensorflow.nio.buffer.impl.raw; +package org.tensorflow.util.buffer.impl.raw; -import org.tensorflow.nio.buffer.ShortDataBuffer; -import org.tensorflow.nio.buffer.impl.Validator; +import org.tensorflow.util.buffer.ShortDataBuffer; +import org.tensorflow.util.buffer.impl.Validator; import sun.misc.Unsafe; public final class ShortRawDataBuffer extends AbstractRawDataBuffer @@ -13,10 +13,10 @@ public static ShortDataBuffer allocate(long size) { } public static ShortDataBuffer wrap(short[] array, boolean readOnly) { - return new ShortRawDataBuffer(UnsafeMemoryHandle.of(UNSAFE, array), readOnly); + return new ShortRawDataBuffer(UnsafeMemoryHandle.of(UnsafeReference.get(), array), readOnly); } - public static ShortDataBuffer map(Unsafe unsafe, long address, long size, boolean readOnly) { + public static ShortDataBuffer map(UnsafeReference unsafe, long address, long size, boolean readOnly) { Validator.createArgs(size, MAX_64BITS); return new ShortRawDataBuffer(UnsafeMemoryHandle.of(unsafe, address, size, Short.BYTES), readOnly); } diff --git a/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/raw/UnsafeMemoryHandle.java b/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/raw/UnsafeMemoryHandle.java new file mode 100644 index 00000000000..9fbfbe0d45f --- /dev/null +++ b/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/raw/UnsafeMemoryHandle.java @@ -0,0 +1,138 @@ +package org.tensorflow.util.buffer.impl.raw; + +public final class UnsafeMemoryHandle { + + static UnsafeMemoryHandle of(UnsafeReference unsafe, byte[] array) { + return fromArray(unsafe, array, array.length); + } + + static UnsafeMemoryHandle of(UnsafeReference unsafe, boolean[] array) { + return fromArray(unsafe, array, array.length); + } + + static UnsafeMemoryHandle of(UnsafeReference unsafe, short[] array) { + return fromArray(unsafe, array, array.length); + } + + static UnsafeMemoryHandle of(UnsafeReference unsafe, int[] array) { + return fromArray(unsafe, array, array.length); + } + + static UnsafeMemoryHandle of(UnsafeReference unsafe, float[] array) { + return fromArray(unsafe, array, array.length); + } + + static UnsafeMemoryHandle of(UnsafeReference unsafe, double[] array) { + return fromArray(unsafe, array, array.length); + } + + static UnsafeMemoryHandle of(UnsafeReference unsafe, long[] array) { + return fromArray(unsafe, array, array.length); + } + + static UnsafeMemoryHandle of(UnsafeReference unsafe, long address, long byteSize, long scale) { + return new UnsafeMemoryHandle(unsafe, null, address, byteSize, scale); + } + + final UnsafeReference unsafe; + + long size() { + return byteSize / scale; + } + + byte getByte(long index) { + return unsafe.instance.getByte(object, align(index)); + } + + void setByte(byte value, long index) { + unsafe.instance.putByte(object, align(index), value); + } + + boolean getBoolean(long index) { + return unsafe.instance.getBoolean(object, align(index)); + } + + void setBoolean(boolean value, long index) { + unsafe.instance.putBoolean(object, align(index), value); + } + + short getShort(long index) { + return unsafe.instance.getShort(object, align(index)); + } + + void setShort(short value, long index) { + unsafe.instance.putShort(object, align(index), value); + } + + int getInt(long index) { + return unsafe.instance.getInt(object, align(index)); + } + + void setInt(int value, long index) { + unsafe.instance.putInt(object, align(index), value); + } + + float getFloat(long index) { + return unsafe.instance.getFloat(object, align(index)); + } + + void setFloat(float value, long index) { + unsafe.instance.putFloat(object, align(index), value); + } + + double getDouble(long index) { + return unsafe.instance.getDouble(object, align(index)); + } + + void setDouble(double value, long index) { + unsafe.instance.putDouble(object, align(index), value); + } + + long getLong(long index) { + return unsafe.instance.getLong(object, align(index)); + } + + void setLong(long value, long index) { + unsafe.instance.putLong(object, align(index), value); + } + + void copyTo(UnsafeMemoryHandle memory, long length) { + unsafe.instance.copyMemory(object, byteOffset, memory.object, memory.byteOffset, length * scale); + } + + UnsafeMemoryHandle offset(long index) { + long offset = scale(index); + return new UnsafeMemoryHandle(unsafe, object, this.byteOffset + offset, byteSize - offset, scale); + } + + UnsafeMemoryHandle narrow(long size) { + return new UnsafeMemoryHandle(unsafe, object, byteOffset, scale(size), scale); + } + + private static UnsafeMemoryHandle fromArray(UnsafeReference unsafe, Object array, int length) { + long byteOffset = unsafe.instance.arrayBaseOffset(array.getClass()); + long scale = unsafe.instance.arrayIndexScale(array.getClass()); + return new UnsafeMemoryHandle(unsafe, array, byteOffset, length * scale, scale); + } + + private final Object object; + private final long byteOffset; + private final long byteSize; + private final long scale; + + private UnsafeMemoryHandle(UnsafeReference unsafe, Object object, long byteOffset, long byteSize, long scale) { + this.unsafe = unsafe; + this.object = object; + this.byteOffset = byteOffset; + this.byteSize = byteSize; + this.scale = scale; + } + + private long align(long index) { + return byteOffset + index * scale; + } + + private long scale(long value) { + return value * scale; + } +} diff --git a/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/raw/UnsafeReference.java b/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/raw/UnsafeReference.java new file mode 100644 index 00000000000..3443c83b989 --- /dev/null +++ b/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/raw/UnsafeReference.java @@ -0,0 +1,87 @@ +package org.tensorflow.util.buffer.impl.raw; + +import java.lang.reflect.Field; +import sun.misc.Unsafe; + +/** + * Holds a valid reference to an instance of sun.misc.Unsafe. + */ +public final class UnsafeReference { + + /** + * Creates a reference to {@code unsafe} + * + * The reference can be created only if the instance exposes the methods required by + * this library, otherwise an exception is thrown + * + * @param unsafe instance of {@code Unsafe} + * @return a valid reference to {@code unsafe} + * @throws IllegalArgumentException if {@code unsafe} instance does not meet requirements for this library + */ + public static UnsafeReference from(Object unsafe) { + try { + // Validate that this Unsafe instance exposes all methods we need + Class clazz = unsafe.getClass(); + clazz.getDeclaredMethod("getByte", Object.class, long.class); + clazz.getDeclaredMethod("putByte", Object.class, long.class, byte.class); + clazz.getDeclaredMethod("getShort", Object.class, long.class); + clazz.getDeclaredMethod("putShort", Object.class, long.class, short.class); + clazz.getDeclaredMethod("getInt", Object.class, long.class); + clazz.getDeclaredMethod("putInt", Object.class, long.class, int.class); + clazz.getDeclaredMethod("getLong", Object.class, long.class); + clazz.getDeclaredMethod("putLong", Object.class, long.class, long.class); + clazz.getDeclaredMethod("getFloat", Object.class, long.class); + clazz.getDeclaredMethod("putFloat", Object.class, long.class, float.class); + clazz.getDeclaredMethod("getDouble", Object.class, long.class); + clazz.getDeclaredMethod("putDouble", Object.class, long.class, double.class); + clazz.getDeclaredMethod("getBoolean", Object.class, long.class); + clazz.getDeclaredMethod("putBoolean", Object.class, long.class, boolean.class); + clazz.getDeclaredMethod("copyMemory", Object.class, long.class, Object.class, long.class, long.class); + clazz.getDeclaredMethod("arrayBaseOffset", Class.class); + clazz.getDeclaredMethod("arrayIndexScale", Class.class); + return new UnsafeReference((Unsafe)unsafe); + + } catch (NoSuchMethodException | SecurityException | ClassCastException ex) { + throw new IllegalArgumentException(ex); + } + } + + /** + * @return true if a valid reference to {@code Unsafe} can be used for internal purposes + */ + public static boolean isAvailableInternally() { + return INTERNAL != null; + } + + final Unsafe instance; + + /** + * @return a valid reference to an {@code Unsafe} instance (do not expose publicly!) + */ + static UnsafeReference get() { + if (INTERNAL == null) { + throw new RuntimeException("No valid reference to an instance of 'sun.misc.Unsafe'"); + } + return INTERNAL; + } + + // Reference to Unsafe only for internal purposes + private static final UnsafeReference INTERNAL; + + static { + UnsafeReference internalRef = null; + try { + Class clazz = Class.forName("sun.misc.Unsafe"); + Field theUnsafe = clazz.getDeclaredField("theUnsafe"); + theUnsafe.setAccessible(true); + internalRef = from(theUnsafe.get(null)); + } catch (ClassNotFoundException | NoSuchFieldException | IllegalAccessException | IllegalArgumentException e) { + // Do nothing, internal reference will be left as null + } + INTERNAL = internalRef; + } + + private UnsafeReference(Unsafe instance) { + this.instance = instance; + } +} diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/virtual/AbstractVirtualDataBuffer.java b/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/virtual/AbstractVirtualDataBuffer.java similarity index 75% rename from tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/virtual/AbstractVirtualDataBuffer.java rename to tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/virtual/AbstractVirtualDataBuffer.java index f4b563301f6..e80e6c34a19 100644 --- a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/virtual/AbstractVirtualDataBuffer.java +++ b/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/virtual/AbstractVirtualDataBuffer.java @@ -1,10 +1,10 @@ -package org.tensorflow.nio.buffer.impl.virtual; +package org.tensorflow.util.buffer.impl.virtual; -import org.tensorflow.nio.buffer.ByteDataBuffer; -import org.tensorflow.nio.buffer.DataBuffer; -import org.tensorflow.nio.buffer.adapter.DataAdapter; -import org.tensorflow.nio.buffer.impl.AbstractDataBuffer; -import org.tensorflow.nio.buffer.impl.Validator; +import org.tensorflow.util.buffer.ByteDataBuffer; +import org.tensorflow.util.buffer.DataBuffer; +import org.tensorflow.util.buffer.adapter.DataAdapter; +import org.tensorflow.util.buffer.impl.AbstractDataBuffer; +import org.tensorflow.util.buffer.impl.Validator; @SuppressWarnings("unchecked") abstract class AbstractVirtualDataBuffer> extends AbstractDataBuffer { @@ -20,13 +20,13 @@ public boolean isReadOnly() { } @Override - public T get(long index) { + public T getObject(long index) { Validator.getArgs(this, index); return adapter.readValue(physicalBuffer, index * adapter.sizeInBytes()); } @Override - public B set(T value, long index) { + public B setObject(T value, long index) { Validator.setArgs(this, index); adapter.writeValue(physicalBuffer, value, index * adapter.sizeInBytes()); return (B)this; diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/virtual/BooleanVirtualDataBuffer.java b/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/virtual/BooleanVirtualDataBuffer.java similarity index 87% rename from tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/virtual/BooleanVirtualDataBuffer.java rename to tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/virtual/BooleanVirtualDataBuffer.java index b8d50f9cd79..a016a114f72 100644 --- a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/virtual/BooleanVirtualDataBuffer.java +++ b/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/virtual/BooleanVirtualDataBuffer.java @@ -1,9 +1,9 @@ -package org.tensorflow.nio.buffer.impl.virtual; +package org.tensorflow.util.buffer.impl.virtual; -import org.tensorflow.nio.buffer.BooleanDataBuffer; -import org.tensorflow.nio.buffer.ByteDataBuffer; -import org.tensorflow.nio.buffer.adapter.BooleanDataAdapter; -import org.tensorflow.nio.buffer.impl.Validator; +import org.tensorflow.util.buffer.adapter.BooleanDataAdapter; +import org.tensorflow.util.buffer.BooleanDataBuffer; +import org.tensorflow.util.buffer.ByteDataBuffer; +import org.tensorflow.util.buffer.impl.Validator; public class BooleanVirtualDataBuffer extends AbstractVirtualDataBuffer implements BooleanDataBuffer { diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/virtual/DoubleVirtualDataBuffer.java b/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/virtual/DoubleVirtualDataBuffer.java similarity index 87% rename from tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/virtual/DoubleVirtualDataBuffer.java rename to tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/virtual/DoubleVirtualDataBuffer.java index ab3a7b7c3da..a9901ed1817 100644 --- a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/virtual/DoubleVirtualDataBuffer.java +++ b/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/virtual/DoubleVirtualDataBuffer.java @@ -1,9 +1,9 @@ -package org.tensorflow.nio.buffer.impl.virtual; +package org.tensorflow.util.buffer.impl.virtual; -import org.tensorflow.nio.buffer.ByteDataBuffer; -import org.tensorflow.nio.buffer.DoubleDataBuffer; -import org.tensorflow.nio.buffer.adapter.DoubleDataAdapter; -import org.tensorflow.nio.buffer.impl.Validator; +import org.tensorflow.util.buffer.adapter.DoubleDataAdapter; +import org.tensorflow.util.buffer.ByteDataBuffer; +import org.tensorflow.util.buffer.DoubleDataBuffer; +import org.tensorflow.util.buffer.impl.Validator; public class DoubleVirtualDataBuffer extends AbstractVirtualDataBuffer implements DoubleDataBuffer { diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/virtual/FloatVirtualDataBuffer.java b/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/virtual/FloatVirtualDataBuffer.java similarity index 87% rename from tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/virtual/FloatVirtualDataBuffer.java rename to tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/virtual/FloatVirtualDataBuffer.java index 7785a006d42..6961b01a49f 100644 --- a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/virtual/FloatVirtualDataBuffer.java +++ b/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/virtual/FloatVirtualDataBuffer.java @@ -1,9 +1,9 @@ -package org.tensorflow.nio.buffer.impl.virtual; +package org.tensorflow.util.buffer.impl.virtual; -import org.tensorflow.nio.buffer.ByteDataBuffer; -import org.tensorflow.nio.buffer.FloatDataBuffer; -import org.tensorflow.nio.buffer.adapter.FloatDataAdapter; -import org.tensorflow.nio.buffer.impl.Validator; +import org.tensorflow.util.buffer.adapter.FloatDataAdapter; +import org.tensorflow.util.buffer.ByteDataBuffer; +import org.tensorflow.util.buffer.FloatDataBuffer; +import org.tensorflow.util.buffer.impl.Validator; public class FloatVirtualDataBuffer extends AbstractVirtualDataBuffer implements FloatDataBuffer { diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/virtual/IntVirtualDataBuffer.java b/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/virtual/IntVirtualDataBuffer.java similarity index 87% rename from tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/virtual/IntVirtualDataBuffer.java rename to tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/virtual/IntVirtualDataBuffer.java index 617a302bf03..82da85442ba 100644 --- a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/virtual/IntVirtualDataBuffer.java +++ b/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/virtual/IntVirtualDataBuffer.java @@ -1,9 +1,9 @@ -package org.tensorflow.nio.buffer.impl.virtual; +package org.tensorflow.util.buffer.impl.virtual; -import org.tensorflow.nio.buffer.ByteDataBuffer; -import org.tensorflow.nio.buffer.IntDataBuffer; -import org.tensorflow.nio.buffer.adapter.IntDataAdapter; -import org.tensorflow.nio.buffer.impl.Validator; +import org.tensorflow.util.buffer.adapter.IntDataAdapter; +import org.tensorflow.util.buffer.ByteDataBuffer; +import org.tensorflow.util.buffer.IntDataBuffer; +import org.tensorflow.util.buffer.impl.Validator; public class IntVirtualDataBuffer extends AbstractVirtualDataBuffer implements IntDataBuffer { diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/virtual/LongVirtualDataBuffer.java b/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/virtual/LongVirtualDataBuffer.java similarity index 87% rename from tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/virtual/LongVirtualDataBuffer.java rename to tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/virtual/LongVirtualDataBuffer.java index f5c69bbf0f3..4fdc9b03e90 100644 --- a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/virtual/LongVirtualDataBuffer.java +++ b/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/virtual/LongVirtualDataBuffer.java @@ -1,9 +1,9 @@ -package org.tensorflow.nio.buffer.impl.virtual; +package org.tensorflow.util.buffer.impl.virtual; -import org.tensorflow.nio.buffer.ByteDataBuffer; -import org.tensorflow.nio.buffer.LongDataBuffer; -import org.tensorflow.nio.buffer.adapter.LongDataAdapter; -import org.tensorflow.nio.buffer.impl.Validator; +import org.tensorflow.util.buffer.ByteDataBuffer; +import org.tensorflow.util.buffer.LongDataBuffer; +import org.tensorflow.util.buffer.adapter.LongDataAdapter; +import org.tensorflow.util.buffer.impl.Validator; public class LongVirtualDataBuffer extends AbstractVirtualDataBuffer implements LongDataBuffer { diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/virtual/ShortVirtualDataBuffer.java b/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/virtual/ShortVirtualDataBuffer.java similarity index 87% rename from tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/virtual/ShortVirtualDataBuffer.java rename to tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/virtual/ShortVirtualDataBuffer.java index e811325f192..1d252685ebb 100644 --- a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/virtual/ShortVirtualDataBuffer.java +++ b/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/virtual/ShortVirtualDataBuffer.java @@ -1,9 +1,9 @@ -package org.tensorflow.nio.buffer.impl.virtual; +package org.tensorflow.util.buffer.impl.virtual; -import org.tensorflow.nio.buffer.ByteDataBuffer; -import org.tensorflow.nio.buffer.ShortDataBuffer; -import org.tensorflow.nio.buffer.adapter.ShortDataAdapter; -import org.tensorflow.nio.buffer.impl.Validator; +import org.tensorflow.util.buffer.adapter.ShortDataAdapter; +import org.tensorflow.util.buffer.ByteDataBuffer; +import org.tensorflow.util.buffer.ShortDataBuffer; +import org.tensorflow.util.buffer.impl.Validator; public class ShortVirtualDataBuffer extends AbstractVirtualDataBuffer implements ShortDataBuffer { diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/virtual/VirtualDataBuffer.java b/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/virtual/VirtualDataBuffer.java similarity index 78% rename from tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/virtual/VirtualDataBuffer.java rename to tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/virtual/VirtualDataBuffer.java index e47d821f6a6..4fe7e6ea88b 100644 --- a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/buffer/impl/virtual/VirtualDataBuffer.java +++ b/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/virtual/VirtualDataBuffer.java @@ -1,8 +1,8 @@ -package org.tensorflow.nio.buffer.impl.virtual; +package org.tensorflow.util.buffer.impl.virtual; -import org.tensorflow.nio.buffer.ByteDataBuffer; -import org.tensorflow.nio.buffer.DataBuffer; -import org.tensorflow.nio.buffer.adapter.DataAdapter; +import org.tensorflow.util.buffer.ByteDataBuffer; +import org.tensorflow.util.buffer.DataBuffer; +import org.tensorflow.util.buffer.adapter.DataAdapter; @SuppressWarnings("unchecked") public class VirtualDataBuffer extends AbstractVirtualDataBuffer> { diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/BooleanNdArray.java b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/BooleanNdArray.java similarity index 93% rename from tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/BooleanNdArray.java rename to tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/BooleanNdArray.java index 02853422e82..16b5bb63c6c 100644 --- a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/BooleanNdArray.java +++ b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/BooleanNdArray.java @@ -14,11 +14,11 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.nio.nd; +package org.tensorflow.util.ndarray; -import org.tensorflow.nio.buffer.BooleanDataBuffer; -import org.tensorflow.nio.buffer.DataBuffer; -import org.tensorflow.nio.nd.index.Index; +import org.tensorflow.util.buffer.BooleanDataBuffer; +import org.tensorflow.util.buffer.DataBuffer; +import org.tensorflow.util.ndarray.index.Index; /** * An {@link NdArray} of booleans. @@ -137,7 +137,14 @@ default BooleanNdArray write(boolean[] src) { BooleanNdArray set(NdArray src, long... coordinates); @Override - BooleanNdArray setValue(Boolean value, long... coordinates); + default Boolean getObject(long... coordinates) { + return getBoolean(coordinates); + } + + @Override + default BooleanNdArray setObject(Boolean value, long... coordinates) { + return setBoolean(value, coordinates); + } @Override NdArraySequence elements(int dimensionIdx); diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/ByteNdArray.java b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/ByteNdArray.java similarity index 93% rename from tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/ByteNdArray.java rename to tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/ByteNdArray.java index 712b446b6b2..ccaace23551 100644 --- a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/ByteNdArray.java +++ b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/ByteNdArray.java @@ -14,11 +14,11 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.nio.nd; +package org.tensorflow.util.ndarray; -import org.tensorflow.nio.buffer.ByteDataBuffer; -import org.tensorflow.nio.buffer.DataBuffer; -import org.tensorflow.nio.nd.index.Index; +import org.tensorflow.util.buffer.ByteDataBuffer; +import org.tensorflow.util.buffer.DataBuffer; +import org.tensorflow.util.ndarray.index.Index; /** * An {@link NdArray} of bytes. @@ -137,7 +137,14 @@ default ByteNdArray write(byte[] src) { ByteNdArray set(NdArray src, long... coordinates); @Override - ByteNdArray setValue(Byte value, long... coordinates); + default Byte getObject(long... coordinates) { + return getByte(coordinates); + } + + @Override + default ByteNdArray setObject(Byte value, long... coordinates) { + return setByte(value, coordinates); + } @Override NdArraySequence elements(int dimensionIdx); diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/DoubleNdArray.java b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/DoubleNdArray.java similarity index 93% rename from tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/DoubleNdArray.java rename to tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/DoubleNdArray.java index bd4a6b42dde..67725794941 100644 --- a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/DoubleNdArray.java +++ b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/DoubleNdArray.java @@ -14,11 +14,11 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.nio.nd; +package org.tensorflow.util.ndarray; -import org.tensorflow.nio.buffer.DataBuffer; -import org.tensorflow.nio.buffer.DoubleDataBuffer; -import org.tensorflow.nio.nd.index.Index; +import org.tensorflow.util.buffer.DoubleDataBuffer; +import org.tensorflow.util.buffer.DataBuffer; +import org.tensorflow.util.ndarray.index.Index; /** * An {@link NdArray} of doubles. @@ -137,7 +137,14 @@ default DoubleNdArray write(double[] src) { DoubleNdArray set(NdArray src, long... coordinates); @Override - DoubleNdArray setValue(Double value, long... coordinates); + default Double getObject(long... coordinates) { + return getDouble(coordinates); + } + + @Override + default DoubleNdArray setObject(Double value, long... coordinates) { + return setDouble(value, coordinates); + } @Override NdArraySequence elements(int dimensionIdx); diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/FloatNdArray.java b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/FloatNdArray.java similarity index 93% rename from tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/FloatNdArray.java rename to tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/FloatNdArray.java index 51c714ea255..9c29bf5bfd0 100644 --- a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/FloatNdArray.java +++ b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/FloatNdArray.java @@ -14,11 +14,11 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.nio.nd; +package org.tensorflow.util.ndarray; -import org.tensorflow.nio.buffer.DataBuffer; -import org.tensorflow.nio.buffer.FloatDataBuffer; -import org.tensorflow.nio.nd.index.Index; +import org.tensorflow.util.buffer.FloatDataBuffer; +import org.tensorflow.util.buffer.DataBuffer; +import org.tensorflow.util.ndarray.index.Index; /** * An {@link NdArray} of floats. @@ -137,7 +137,14 @@ default FloatNdArray write(float[] src) { FloatNdArray set(NdArray src, long... coordinates); @Override - FloatNdArray setValue(Float value, long... indices); + default Float getObject(long... coordinates) { + return getFloat(coordinates); + } + + @Override + default FloatNdArray setObject(Float value, long... coordinates) { + return setFloat(value, coordinates); + } @Override NdArraySequence elements(int dimensionIdx); diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/IllegalRankException.java b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/IllegalRankException.java similarity index 95% rename from tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/IllegalRankException.java rename to tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/IllegalRankException.java index 1fb8d1228e7..21fc817e371 100644 --- a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/IllegalRankException.java +++ b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/IllegalRankException.java @@ -14,7 +14,7 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.nio.nd; +package org.tensorflow.util.ndarray; public class IllegalRankException extends IllegalArgumentException { diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/IntNdArray.java b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/IntNdArray.java similarity index 93% rename from tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/IntNdArray.java rename to tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/IntNdArray.java index f59bcacb0a8..f5b25ca13b3 100644 --- a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/IntNdArray.java +++ b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/IntNdArray.java @@ -14,11 +14,11 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.nio.nd; +package org.tensorflow.util.ndarray; -import org.tensorflow.nio.buffer.DataBuffer; -import org.tensorflow.nio.buffer.IntDataBuffer; -import org.tensorflow.nio.nd.index.Index; +import org.tensorflow.util.buffer.DataBuffer; +import org.tensorflow.util.buffer.IntDataBuffer; +import org.tensorflow.util.ndarray.index.Index; /** * An {@link NdArray} of integers. @@ -137,7 +137,14 @@ default IntNdArray write(int[] src) { IntNdArray set(NdArray src, long... coordinates); @Override - IntNdArray setValue(Integer value, long... coordinates); + default Integer getObject(long... coordinates) { + return getInt(coordinates); + } + + @Override + default IntNdArray setObject(Integer value, long... coordinates) { + return setInt(value, coordinates); + } @Override NdArraySequence elements(int dimensionIdx); diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/LongNdArray.java b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/LongNdArray.java similarity index 93% rename from tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/LongNdArray.java rename to tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/LongNdArray.java index 04e817bd40f..5ab03adb91f 100644 --- a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/LongNdArray.java +++ b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/LongNdArray.java @@ -14,11 +14,11 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.nio.nd; +package org.tensorflow.util.ndarray; -import org.tensorflow.nio.buffer.DataBuffer; -import org.tensorflow.nio.buffer.LongDataBuffer; -import org.tensorflow.nio.nd.index.Index; +import org.tensorflow.util.buffer.LongDataBuffer; +import org.tensorflow.util.buffer.DataBuffer; +import org.tensorflow.util.ndarray.index.Index; /** * An {@link NdArray} of longs. @@ -137,7 +137,14 @@ default LongNdArray write(long[] src) { LongNdArray set(NdArray src, long... coordinates); @Override - LongNdArray setValue(Long value, long... coordinates); + default Long getObject(long... coordinates) { + return getLong(coordinates); + } + + @Override + default LongNdArray setObject(Long value, long... coordinates) { + return setLong(value, coordinates); + } @Override NdArraySequence elements(int dimensionIdx); diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/NdArray.java b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/NdArray.java similarity index 96% rename from tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/NdArray.java rename to tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/NdArray.java index 448ae7f680c..fe2be61baae 100644 --- a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/NdArray.java +++ b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/NdArray.java @@ -14,12 +14,12 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.nio.nd; +package org.tensorflow.util.ndarray; import java.util.function.BiConsumer; import java.util.function.Consumer; -import org.tensorflow.nio.buffer.DataBuffer; -import org.tensorflow.nio.nd.index.Index; +import org.tensorflow.util.buffer.DataBuffer; +import org.tensorflow.util.ndarray.index.Index; /** * A data structure of N-dimensions. @@ -165,7 +165,7 @@ default long size() { * *

Elements of any of the dimensions of this array can be retrieved. For example, if the number * of coordinates is equal to the number of dimensions of this array, then a rank-0 (scalar) array - * is returned, which value can then be obtained by calling `array.getValue()`. + * is returned, which value can then be obtained by calling `array.getObject()`. * *

Any changes applied to the returned elements affect the data of this array as well, as there * is no copy involved. @@ -205,11 +205,11 @@ default long size() { * of dimensions of this array (i.e. its rank). For example: *

{@code
    *  FloatNdArray matrix = ndArrayOfFloats(shape(2, 2));  // matrix rank = 2
-   *  matrix.getValue(0, 1);  // succeeds, returns 0.0f
-   *  matrix.getValue(0);  // throws IllegalRankException
+   *  matrix.getObject(0, 1);  // succeeds, returns 0.0f
+   *  matrix.getObject(0);  // throws IllegalRankException
    *
    *  FloatNdArray scalar = matrix.get(0, 1);  // scalar rank = 0
-   *  scalar.getValue();  // succeeds, returns 0.0f
+   *  scalar.getObject();  // succeeds, returns 0.0f
    * }
* * Note: if this array stores values of a primitive type, prefer the usage of the specialized @@ -222,7 +222,7 @@ default long size() { * @throws IllegalRankException if number of coordinates is not sufficient to access a scalar * element */ - T getValue(long... coordinates); + T getObject(long... coordinates); /** * Assigns the value of the scalar found at the given coordinates. @@ -231,11 +231,11 @@ default long size() { * of dimensions of this array (i.e. its rank). For example: *
{@code
    *  FloatNdArray matrix = ndArrayOfFloats(shape(2, 2));  // matrix rank = 2
-   *  matrix.setValue(10.0f, 0, 1);  // succeeds
-   *  matrix.setValue(10.0f, 0);  // throws IllegalRankException
+   *  matrix.setObject(10.0f, 0, 1);  // succeeds
+   *  matrix.setObject(10.0f, 0);  // throws IllegalRankException
    *
    *  FloatNdArray scalar = matrix.get(0, 1);  // scalar rank = 0
-   *  scalar.setValue(10.0f);  // succeeds
+   *  scalar.setObject(10.0f);  // succeeds
    * }
* * Note: if this array stores values of a primitive type, prefer the usage of the specialized @@ -248,7 +248,7 @@ default long size() { * @throws IllegalRankException if number of coordinates is not sufficient to access a scalar * element */ - NdArray setValue(T value, long... coordinates); + NdArray setObject(T value, long... coordinates); /** * Copy the content of this array to the destination array. diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/NdArraySequence.java b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/NdArraySequence.java similarity index 95% rename from tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/NdArraySequence.java rename to tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/NdArraySequence.java index c5d06384b48..f2676c218e7 100644 --- a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/NdArraySequence.java +++ b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/NdArraySequence.java @@ -1,4 +1,4 @@ -package org.tensorflow.nio.nd; +package org.tensorflow.util.ndarray; import java.util.function.BiConsumer; import java.util.function.Consumer; diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/NdArrays.java b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/NdArrays.java similarity index 86% rename from tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/NdArrays.java rename to tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/NdArrays.java index 7e409af4fdf..ca4b3edd783 100644 --- a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/NdArrays.java +++ b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/NdArrays.java @@ -14,25 +14,25 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.nio.nd; - -import org.tensorflow.nio.buffer.BooleanDataBuffer; -import org.tensorflow.nio.buffer.ByteDataBuffer; -import org.tensorflow.nio.buffer.DataBuffer; -import org.tensorflow.nio.buffer.DataBuffers; -import org.tensorflow.nio.buffer.DoubleDataBuffer; -import org.tensorflow.nio.buffer.FloatDataBuffer; -import org.tensorflow.nio.buffer.IntDataBuffer; -import org.tensorflow.nio.buffer.LongDataBuffer; -import org.tensorflow.nio.buffer.ShortDataBuffer; -import org.tensorflow.nio.nd.impl.dense.BooleanDenseNdArray; -import org.tensorflow.nio.nd.impl.dense.ByteDenseNdArray; -import org.tensorflow.nio.nd.impl.dense.DenseNdArray; -import org.tensorflow.nio.nd.impl.dense.DoubleDenseNdArray; -import org.tensorflow.nio.nd.impl.dense.FloatDenseNdArray; -import org.tensorflow.nio.nd.impl.dense.IntDenseNdArray; -import org.tensorflow.nio.nd.impl.dense.LongDenseNdArray; -import org.tensorflow.nio.nd.impl.dense.ShortDenseNdArray; +package org.tensorflow.util.ndarray; + +import org.tensorflow.util.buffer.BooleanDataBuffer; +import org.tensorflow.util.buffer.ByteDataBuffer; +import org.tensorflow.util.buffer.DataBuffer; +import org.tensorflow.util.buffer.DataBuffers; +import org.tensorflow.util.buffer.DoubleDataBuffer; +import org.tensorflow.util.buffer.FloatDataBuffer; +import org.tensorflow.util.buffer.IntDataBuffer; +import org.tensorflow.util.buffer.LongDataBuffer; +import org.tensorflow.util.buffer.ShortDataBuffer; +import org.tensorflow.util.ndarray.impl.dense.BooleanDenseNdArray; +import org.tensorflow.util.ndarray.impl.dense.ByteDenseNdArray; +import org.tensorflow.util.ndarray.impl.dense.DenseNdArray; +import org.tensorflow.util.ndarray.impl.dense.DoubleDenseNdArray; +import org.tensorflow.util.ndarray.impl.dense.FloatDenseNdArray; +import org.tensorflow.util.ndarray.impl.dense.IntDenseNdArray; +import org.tensorflow.util.ndarray.impl.dense.LongDenseNdArray; +import org.tensorflow.util.ndarray.impl.dense.ShortDenseNdArray; /** * Helper class for instantiating {@link NdArray} objects. @@ -47,7 +47,7 @@ public final class NdArrays { * @param value scalar value * @return new byte scalar */ - public static ByteNdArray scalar(byte value) { + public static ByteNdArray scalarOf(byte value) { return ofBytes(Shape.scalar()).setByte(value); } @@ -58,7 +58,7 @@ public static ByteNdArray scalar(byte value) { * @return new byte vector * @throws IllegalArgumentException if values is null */ - public static ByteNdArray vector(byte... values) { + public static ByteNdArray vectorOf(byte... values) { if (values == null) { throw new IllegalArgumentException("Values cannot be null"); } @@ -102,7 +102,7 @@ public static ByteNdArray wrap(ByteDataBuffer buffer, Shape shape) { * @param value scalar value * @return new long scalar */ - public static LongNdArray scalar(long value) { + public static LongNdArray scalarOf(long value) { return ofLongs(Shape.scalar()).setLong(value); } @@ -113,7 +113,7 @@ public static LongNdArray scalar(long value) { * @return new long vector * @throws IllegalArgumentException if values is null */ - public static LongNdArray vector(long... values) { + public static LongNdArray vectorOf(long... values) { if (values == null) { throw new IllegalArgumentException(); } @@ -154,7 +154,7 @@ public static LongNdArray wrap(LongDataBuffer buffer, Shape shape) { * @param value scalar value * @return new long scalar */ - public static IntNdArray scalar(int value) { + public static IntNdArray scalarOf(int value) { return ofInts(Shape.scalar()).setInt(value); } @@ -165,7 +165,7 @@ public static IntNdArray scalar(int value) { * @return new int vector * @throws IllegalArgumentException if values is null */ - public static IntNdArray vector(int... values) { + public static IntNdArray vectorOf(int... values) { if (values == null) { throw new IllegalArgumentException(); } @@ -206,7 +206,7 @@ public static IntNdArray wrap(IntDataBuffer buffer, Shape shape) { * @param value scalar value * @return new short scalar */ - public static ShortNdArray scalar(short value) { + public static ShortNdArray scalarOf(short value) { return ofShorts(Shape.scalar()).setShort(value); } @@ -217,7 +217,7 @@ public static ShortNdArray scalar(short value) { * @return new short vector * @throws IllegalArgumentException if values is null */ - public static ShortNdArray vector(short... values) { + public static ShortNdArray vectorOf(short... values) { if (values == null) { throw new IllegalArgumentException(); } @@ -258,7 +258,7 @@ public static ShortNdArray wrap(ShortDataBuffer buffer, Shape shape) { * @param value scalar value * @return new float scalar */ - public static FloatNdArray scalar(float value) { + public static FloatNdArray scalarOf(float value) { return ofFloats(Shape.scalar()).setFloat(value); } @@ -269,7 +269,7 @@ public static FloatNdArray scalar(float value) { * @return new float vector * @throws IllegalArgumentException if values is null */ - public static FloatNdArray vector(float... values) { + public static FloatNdArray vectorOf(float... values) { if (values == null) { throw new IllegalArgumentException(); } @@ -310,7 +310,7 @@ public static FloatNdArray wrap(FloatDataBuffer buffer, Shape shape) { * @param value scalar value * @return new double scalar */ - public static DoubleNdArray scalar(double value) { + public static DoubleNdArray scalarOf(double value) { return ofDoubles(Shape.scalar()).setDouble(value); } @@ -321,7 +321,7 @@ public static DoubleNdArray scalar(double value) { * @return new double vector * @throws IllegalArgumentException if values is null */ - public static DoubleNdArray vector(double... values) { + public static DoubleNdArray vectorOf(double... values) { if (values == null) { throw new IllegalArgumentException(); } @@ -362,7 +362,7 @@ public static DoubleNdArray wrap(DoubleDataBuffer buffer, Shape shape) { * @param value scalar value * @return new boolean scalar */ - public static BooleanNdArray scalar(boolean value) { + public static BooleanNdArray scalarOf(boolean value) { return ofBooleans(Shape.scalar()).setBoolean(value); } @@ -373,7 +373,7 @@ public static BooleanNdArray scalar(boolean value) { * @return new boolean vector * @throws IllegalArgumentException if values is null */ - public static BooleanNdArray vector(boolean... values) { + public static BooleanNdArray vectorOf(boolean... values) { if (values == null) { throw new IllegalArgumentException(); } @@ -415,11 +415,11 @@ public static BooleanNdArray wrap(BooleanDataBuffer buffer, Shape shape) { * @return new scalar */ @SuppressWarnings("unchecked") - public static NdArray scalarOf(T value) { + public static NdArray scalarOfObject(T value) { if (value == null) { throw new IllegalArgumentException(); } - return of((Class)value.getClass(), Shape.scalar()).setValue(value); + return of((Class)value.getClass(), Shape.scalar()).setObject(value); } /** @@ -430,7 +430,7 @@ public static NdArray scalarOf(T value) { * @throws IllegalArgumentException if values is null */ @SuppressWarnings("unchecked") - public static NdArray vectorOf(T... values) { + public static NdArray vectorOfObjects(T... values) { if (values == null) { throw new IllegalArgumentException(); } diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/Shape.java b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/Shape.java similarity index 99% rename from tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/Shape.java rename to tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/Shape.java index 3782bb288c4..bf8c4c6bd86 100644 --- a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/Shape.java +++ b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/Shape.java @@ -15,7 +15,7 @@ ======================================================================= */ -package org.tensorflow.nio.nd; +package org.tensorflow.util.ndarray; import java.util.Arrays; diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/ShortNdArray.java b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/ShortNdArray.java similarity index 93% rename from tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/ShortNdArray.java rename to tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/ShortNdArray.java index 6bbd081483c..e6530130238 100644 --- a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/ShortNdArray.java +++ b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/ShortNdArray.java @@ -14,11 +14,11 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.nio.nd; +package org.tensorflow.util.ndarray; -import org.tensorflow.nio.buffer.DataBuffer; -import org.tensorflow.nio.buffer.ShortDataBuffer; -import org.tensorflow.nio.nd.index.Index; +import org.tensorflow.util.buffer.DataBuffer; +import org.tensorflow.util.buffer.ShortDataBuffer; +import org.tensorflow.util.ndarray.index.Index; /** * An {@link NdArray} of shorts. @@ -137,7 +137,14 @@ default ShortNdArray write(short[] src) { ShortNdArray set(NdArray src, long... coordinates); @Override - ShortNdArray setValue(Short value, long... indices); + default Short getObject(long... coordinates) { + return getShort(coordinates); + } + + @Override + default ShortNdArray setObject(Short value, long... coordinates) { + return setShort(value, coordinates); + } @Override NdArraySequence elements(int dimensionIdx); diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/AbstractNdArray.java b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/AbstractNdArray.java similarity index 82% rename from tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/AbstractNdArray.java rename to tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/AbstractNdArray.java index 97a6975ba18..c777276c2e0 100644 --- a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/AbstractNdArray.java +++ b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/AbstractNdArray.java @@ -14,14 +14,14 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.nio.nd.impl; +package org.tensorflow.util.ndarray.impl; -import org.tensorflow.nio.buffer.DataBuffers; -import org.tensorflow.nio.nd.NdArray; -import org.tensorflow.nio.nd.NdArraySequence; -import org.tensorflow.nio.nd.Shape; -import org.tensorflow.nio.nd.impl.dimension.DimensionalSpace; -import org.tensorflow.nio.nd.impl.sequence.ElementSequence; +import org.tensorflow.util.ndarray.NdArraySequence; +import org.tensorflow.util.ndarray.impl.sequence.ElementSequence; +import org.tensorflow.util.buffer.DataBuffers; +import org.tensorflow.util.ndarray.NdArray; +import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.ndarray.impl.dimension.DimensionalSpace; @SuppressWarnings("unchecked") public abstract class AbstractNdArray> implements NdArray { @@ -74,7 +74,7 @@ protected AbstractNdArray(DimensionalSpace dimensions) { } protected void slowCopyTo(NdArray array) { - scalars().forEachIndexed((coords, e) -> array.setValue(e.getValue(), coords)); + scalars().forEachIndexed((coords, e) -> array.setObject(e.getObject(), coords)); } private DimensionalSpace dimensions; diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/Validator.java b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/Validator.java similarity index 94% rename from tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/Validator.java rename to tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/Validator.java index 3a5fca6285f..88b60b36350 100644 --- a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/Validator.java +++ b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/Validator.java @@ -14,12 +14,12 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.nio.nd.impl; +package org.tensorflow.util.ndarray.impl; import java.nio.BufferOverflowException; import java.nio.BufferUnderflowException; -import org.tensorflow.nio.buffer.DataBuffer; -import org.tensorflow.nio.nd.NdArray; +import org.tensorflow.util.buffer.DataBuffer; +import org.tensorflow.util.ndarray.NdArray; public class Validator { diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dense/AbstractDenseNdArray.java b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dense/AbstractDenseNdArray.java similarity index 80% rename from tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dense/AbstractDenseNdArray.java rename to tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dense/AbstractDenseNdArray.java index 5342a406599..bdda631d553 100644 --- a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dense/AbstractDenseNdArray.java +++ b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dense/AbstractDenseNdArray.java @@ -14,16 +14,16 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.nio.nd.impl.dense; +package org.tensorflow.util.ndarray.impl.dense; import java.util.concurrent.atomic.AtomicLong; -import org.tensorflow.nio.buffer.DataBuffer; -import org.tensorflow.nio.nd.IllegalRankException; -import org.tensorflow.nio.nd.NdArray; -import org.tensorflow.nio.nd.impl.AbstractNdArray; -import org.tensorflow.nio.nd.impl.dimension.DimensionalSpace; -import org.tensorflow.nio.nd.impl.dimension.RelativeDimensionalSpace; -import org.tensorflow.nio.nd.index.Index; +import org.tensorflow.util.buffer.DataBuffer; +import org.tensorflow.util.ndarray.IllegalRankException; +import org.tensorflow.util.ndarray.NdArray; +import org.tensorflow.util.ndarray.impl.AbstractNdArray; +import org.tensorflow.util.ndarray.index.Index; +import org.tensorflow.util.ndarray.impl.dimension.DimensionalSpace; +import org.tensorflow.util.ndarray.impl.dimension.RelativeDimensionalSpace; @SuppressWarnings("unchecked") public abstract class AbstractDenseNdArray> extends AbstractNdArray { @@ -48,8 +48,8 @@ public U get(long... coords) { } @Override - public T getValue(long... coords) { - return buffer().get(positionOf(coords, true)); + public T getObject(long... coords) { + return buffer().getObject(positionOf(coords, true)); } @Override @@ -59,8 +59,8 @@ public U set(NdArray src, long... coordinates) { } @Override - public U setValue(T value, long... coords) { - buffer().set(value, positionOf(coords, true)); + public U setObject(T value, long... coords) { + buffer().setObject(value, positionOf(coords, true)); return (U)this; } @@ -104,7 +104,7 @@ protected void slowCopyTo(NdArray array) { if (array instanceof AbstractDenseNdArray) { AbstractDenseNdArray dst = (AbstractDenseNdArray)array; AtomicLong off = new AtomicLong(); - scalars().forEach(s -> dst.buffer().set(s.getValue(), off.getAndIncrement())); + scalars().forEach(s -> dst.buffer().setObject(s.getObject(), off.getAndIncrement())); } else { super.slowCopyTo(array); } diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dense/BooleanDenseNdArray.java b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dense/BooleanDenseNdArray.java similarity index 88% rename from tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dense/BooleanDenseNdArray.java rename to tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dense/BooleanDenseNdArray.java index 3d9a215c4de..3f5dc1bdc59 100644 --- a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dense/BooleanDenseNdArray.java +++ b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dense/BooleanDenseNdArray.java @@ -14,15 +14,15 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.nio.nd.impl.dense; - -import org.tensorflow.nio.buffer.BooleanDataBuffer; -import org.tensorflow.nio.buffer.DataBuffer; -import org.tensorflow.nio.buffer.DataBuffers; -import org.tensorflow.nio.nd.BooleanNdArray; -import org.tensorflow.nio.nd.NdArray; -import org.tensorflow.nio.nd.Shape; -import org.tensorflow.nio.nd.impl.dimension.DimensionalSpace; +package org.tensorflow.util.ndarray.impl.dense; + +import org.tensorflow.util.buffer.BooleanDataBuffer; +import org.tensorflow.util.buffer.DataBuffer; +import org.tensorflow.util.buffer.DataBuffers; +import org.tensorflow.util.ndarray.BooleanNdArray; +import org.tensorflow.util.ndarray.NdArray; +import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.ndarray.impl.dimension.DimensionalSpace; public class BooleanDenseNdArray extends AbstractDenseNdArray implements BooleanNdArray { diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dense/ByteDenseNdArray.java b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dense/ByteDenseNdArray.java similarity index 88% rename from tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dense/ByteDenseNdArray.java rename to tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dense/ByteDenseNdArray.java index d357240acce..fd5b42f95d1 100644 --- a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dense/ByteDenseNdArray.java +++ b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dense/ByteDenseNdArray.java @@ -14,15 +14,15 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.nio.nd.impl.dense; - -import org.tensorflow.nio.buffer.ByteDataBuffer; -import org.tensorflow.nio.buffer.DataBuffer; -import org.tensorflow.nio.buffer.DataBuffers; -import org.tensorflow.nio.nd.ByteNdArray; -import org.tensorflow.nio.nd.NdArray; -import org.tensorflow.nio.nd.Shape; -import org.tensorflow.nio.nd.impl.dimension.DimensionalSpace; +package org.tensorflow.util.ndarray.impl.dense; + +import org.tensorflow.util.buffer.ByteDataBuffer; +import org.tensorflow.util.buffer.DataBuffer; +import org.tensorflow.util.buffer.DataBuffers; +import org.tensorflow.util.ndarray.ByteNdArray; +import org.tensorflow.util.ndarray.NdArray; +import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.ndarray.impl.dimension.DimensionalSpace; public class ByteDenseNdArray extends AbstractDenseNdArray implements ByteNdArray { diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dense/DataTransfer.java b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dense/DataTransfer.java similarity index 86% rename from tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dense/DataTransfer.java rename to tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dense/DataTransfer.java index eda01d9209f..45bcdfcb774 100644 --- a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dense/DataTransfer.java +++ b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dense/DataTransfer.java @@ -1,15 +1,15 @@ -package org.tensorflow.nio.nd.impl.dense; +package org.tensorflow.util.ndarray.impl.dense; -import org.tensorflow.nio.buffer.BooleanDataBuffer; -import org.tensorflow.nio.buffer.ByteDataBuffer; -import org.tensorflow.nio.buffer.DataBuffer; -import org.tensorflow.nio.buffer.DoubleDataBuffer; -import org.tensorflow.nio.buffer.FloatDataBuffer; -import org.tensorflow.nio.buffer.IntDataBuffer; -import org.tensorflow.nio.buffer.LongDataBuffer; -import org.tensorflow.nio.buffer.ShortDataBuffer; -import org.tensorflow.nio.nd.impl.dimension.DimensionalSpace; -import org.tensorflow.nio.nd.impl.sequence.PositionIterator; +import org.tensorflow.util.buffer.BooleanDataBuffer; +import org.tensorflow.util.buffer.ByteDataBuffer; +import org.tensorflow.util.buffer.DataBuffer; +import org.tensorflow.util.buffer.DoubleDataBuffer; +import org.tensorflow.util.buffer.FloatDataBuffer; +import org.tensorflow.util.buffer.IntDataBuffer; +import org.tensorflow.util.buffer.LongDataBuffer; +import org.tensorflow.util.buffer.ShortDataBuffer; +import org.tensorflow.util.ndarray.impl.dimension.DimensionalSpace; +import org.tensorflow.util.ndarray.impl.sequence.PositionIterator; final class DataTransfer { @@ -19,7 +19,7 @@ interface OfValue> { } static > void ofValue(B srcBuf, long srcIdx, B dstBuf, long dstIdx) { - dstBuf.set(srcBuf.get(srcIdx), dstIdx); + dstBuf.setObject(srcBuf.getObject(srcIdx), dstIdx); } static void ofByte(ByteDataBuffer srcBuf, long srcIdx, ByteDataBuffer dstBuf, long dstIdx) { diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dense/DenseNdArray.java b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dense/DenseNdArray.java similarity index 87% rename from tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dense/DenseNdArray.java rename to tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dense/DenseNdArray.java index 53d1b56881b..e8b168e759a 100644 --- a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dense/DenseNdArray.java +++ b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dense/DenseNdArray.java @@ -14,12 +14,12 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.nio.nd.impl.dense; +package org.tensorflow.util.ndarray.impl.dense; -import org.tensorflow.nio.buffer.DataBuffer; -import org.tensorflow.nio.nd.NdArray; -import org.tensorflow.nio.nd.Shape; -import org.tensorflow.nio.nd.impl.dimension.DimensionalSpace; +import org.tensorflow.util.buffer.DataBuffer; +import org.tensorflow.util.ndarray.NdArray; +import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.ndarray.impl.dimension.DimensionalSpace; public class DenseNdArray extends AbstractDenseNdArray> { diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dense/DoubleDenseNdArray.java b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dense/DoubleDenseNdArray.java similarity index 88% rename from tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dense/DoubleDenseNdArray.java rename to tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dense/DoubleDenseNdArray.java index fde7320659e..b0d230c9ebb 100644 --- a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dense/DoubleDenseNdArray.java +++ b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dense/DoubleDenseNdArray.java @@ -14,15 +14,15 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.nio.nd.impl.dense; - -import org.tensorflow.nio.buffer.DataBuffer; -import org.tensorflow.nio.buffer.DataBuffers; -import org.tensorflow.nio.buffer.DoubleDataBuffer; -import org.tensorflow.nio.nd.DoubleNdArray; -import org.tensorflow.nio.nd.NdArray; -import org.tensorflow.nio.nd.Shape; -import org.tensorflow.nio.nd.impl.dimension.DimensionalSpace; +package org.tensorflow.util.ndarray.impl.dense; + +import org.tensorflow.util.buffer.DataBuffer; +import org.tensorflow.util.buffer.DataBuffers; +import org.tensorflow.util.buffer.DoubleDataBuffer; +import org.tensorflow.util.ndarray.DoubleNdArray; +import org.tensorflow.util.ndarray.NdArray; +import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.ndarray.impl.dimension.DimensionalSpace; public class DoubleDenseNdArray extends AbstractDenseNdArray implements DoubleNdArray { diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dense/FloatDenseNdArray.java b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dense/FloatDenseNdArray.java similarity index 88% rename from tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dense/FloatDenseNdArray.java rename to tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dense/FloatDenseNdArray.java index 2d190ca38ee..d793e607ec7 100644 --- a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dense/FloatDenseNdArray.java +++ b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dense/FloatDenseNdArray.java @@ -14,15 +14,15 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.nio.nd.impl.dense; - -import org.tensorflow.nio.buffer.DataBuffer; -import org.tensorflow.nio.buffer.DataBuffers; -import org.tensorflow.nio.buffer.FloatDataBuffer; -import org.tensorflow.nio.nd.FloatNdArray; -import org.tensorflow.nio.nd.NdArray; -import org.tensorflow.nio.nd.Shape; -import org.tensorflow.nio.nd.impl.dimension.DimensionalSpace; +package org.tensorflow.util.ndarray.impl.dense; + +import org.tensorflow.util.buffer.DataBuffer; +import org.tensorflow.util.buffer.DataBuffers; +import org.tensorflow.util.buffer.FloatDataBuffer; +import org.tensorflow.util.ndarray.FloatNdArray; +import org.tensorflow.util.ndarray.NdArray; +import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.ndarray.impl.dimension.DimensionalSpace; public class FloatDenseNdArray extends AbstractDenseNdArray implements FloatNdArray { diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dense/IntDenseNdArray.java b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dense/IntDenseNdArray.java similarity index 88% rename from tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dense/IntDenseNdArray.java rename to tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dense/IntDenseNdArray.java index 921f1e512f5..570a3744d0a 100644 --- a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dense/IntDenseNdArray.java +++ b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dense/IntDenseNdArray.java @@ -14,15 +14,15 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.nio.nd.impl.dense; - -import org.tensorflow.nio.buffer.DataBuffer; -import org.tensorflow.nio.buffer.DataBuffers; -import org.tensorflow.nio.buffer.IntDataBuffer; -import org.tensorflow.nio.nd.IntNdArray; -import org.tensorflow.nio.nd.NdArray; -import org.tensorflow.nio.nd.Shape; -import org.tensorflow.nio.nd.impl.dimension.DimensionalSpace; +package org.tensorflow.util.ndarray.impl.dense; + +import org.tensorflow.util.buffer.DataBuffer; +import org.tensorflow.util.buffer.DataBuffers; +import org.tensorflow.util.buffer.IntDataBuffer; +import org.tensorflow.util.ndarray.IntNdArray; +import org.tensorflow.util.ndarray.NdArray; +import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.ndarray.impl.dimension.DimensionalSpace; public class IntDenseNdArray extends AbstractDenseNdArray implements IntNdArray { diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dense/LongDenseNdArray.java b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dense/LongDenseNdArray.java similarity index 88% rename from tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dense/LongDenseNdArray.java rename to tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dense/LongDenseNdArray.java index c214efd120f..1f78e86b7a3 100644 --- a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dense/LongDenseNdArray.java +++ b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dense/LongDenseNdArray.java @@ -14,15 +14,15 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.nio.nd.impl.dense; - -import org.tensorflow.nio.buffer.DataBuffer; -import org.tensorflow.nio.buffer.DataBuffers; -import org.tensorflow.nio.buffer.LongDataBuffer; -import org.tensorflow.nio.nd.LongNdArray; -import org.tensorflow.nio.nd.NdArray; -import org.tensorflow.nio.nd.Shape; -import org.tensorflow.nio.nd.impl.dimension.DimensionalSpace; +package org.tensorflow.util.ndarray.impl.dense; + +import org.tensorflow.util.buffer.DataBuffer; +import org.tensorflow.util.buffer.DataBuffers; +import org.tensorflow.util.buffer.LongDataBuffer; +import org.tensorflow.util.ndarray.LongNdArray; +import org.tensorflow.util.ndarray.NdArray; +import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.ndarray.impl.dimension.DimensionalSpace; public class LongDenseNdArray extends AbstractDenseNdArray implements LongNdArray { diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dense/ShortDenseNdArray.java b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dense/ShortDenseNdArray.java similarity index 88% rename from tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dense/ShortDenseNdArray.java rename to tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dense/ShortDenseNdArray.java index 3725002a3cc..b93cddc437a 100644 --- a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dense/ShortDenseNdArray.java +++ b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dense/ShortDenseNdArray.java @@ -14,15 +14,15 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.nio.nd.impl.dense; - -import org.tensorflow.nio.buffer.DataBuffer; -import org.tensorflow.nio.buffer.DataBuffers; -import org.tensorflow.nio.buffer.ShortDataBuffer; -import org.tensorflow.nio.nd.NdArray; -import org.tensorflow.nio.nd.Shape; -import org.tensorflow.nio.nd.ShortNdArray; -import org.tensorflow.nio.nd.impl.dimension.DimensionalSpace; +package org.tensorflow.util.ndarray.impl.dense; + +import org.tensorflow.util.buffer.DataBuffer; +import org.tensorflow.util.buffer.DataBuffers; +import org.tensorflow.util.buffer.ShortDataBuffer; +import org.tensorflow.util.ndarray.NdArray; +import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.ndarray.impl.dimension.DimensionalSpace; +import org.tensorflow.util.ndarray.ShortNdArray; public class ShortDenseNdArray extends AbstractDenseNdArray implements ShortNdArray { diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dense/Validator.java b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dense/Validator.java similarity index 84% rename from tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dense/Validator.java rename to tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dense/Validator.java index 8fb3a1b6310..b44142b88ad 100644 --- a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dense/Validator.java +++ b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dense/Validator.java @@ -14,12 +14,12 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.nio.nd.impl.dense; +package org.tensorflow.util.ndarray.impl.dense; -import org.tensorflow.nio.buffer.DataBuffer; -import org.tensorflow.nio.nd.Shape; +import org.tensorflow.util.buffer.DataBuffer; +import org.tensorflow.util.ndarray.Shape; -final class Validator extends org.tensorflow.nio.nd.impl.Validator { +final class Validator extends org.tensorflow.util.ndarray.impl.Validator { static void denseShape(DataBuffer buffer, Shape shape) { if (shape == null) { diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dimension/AbstractDimension.java b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dimension/AbstractDimension.java similarity index 96% rename from tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dimension/AbstractDimension.java rename to tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dimension/AbstractDimension.java index c03f865308a..6d8d49d2506 100644 --- a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dimension/AbstractDimension.java +++ b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dimension/AbstractDimension.java @@ -14,7 +14,7 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.nio.nd.impl.dimension; +package org.tensorflow.util.ndarray.impl.dimension; abstract class AbstractDimension implements Dimension { diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dimension/Axis.java b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dimension/Axis.java similarity index 96% rename from tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dimension/Axis.java rename to tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dimension/Axis.java index 63f284e2578..554beb46d66 100644 --- a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dimension/Axis.java +++ b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dimension/Axis.java @@ -14,7 +14,7 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.nio.nd.impl.dimension; +package org.tensorflow.util.ndarray.impl.dimension; final class Axis extends AbstractDimension { diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dimension/Dimension.java b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dimension/Dimension.java similarity index 90% rename from tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dimension/Dimension.java rename to tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dimension/Dimension.java index 6d9215069e8..54e71618909 100644 --- a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dimension/Dimension.java +++ b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dimension/Dimension.java @@ -14,9 +14,9 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.nio.nd.impl.dimension; +package org.tensorflow.util.ndarray.impl.dimension; -import org.tensorflow.nio.nd.index.Index; +import org.tensorflow.util.ndarray.index.Index; public interface Dimension { diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dimension/DimensionalSpace.java b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dimension/DimensionalSpace.java similarity index 97% rename from tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dimension/DimensionalSpace.java rename to tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dimension/DimensionalSpace.java index 8d4b5934e0f..6b8e3faf7e5 100644 --- a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dimension/DimensionalSpace.java +++ b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dimension/DimensionalSpace.java @@ -15,11 +15,11 @@ ======================================================================= */ -package org.tensorflow.nio.nd.impl.dimension; +package org.tensorflow.util.ndarray.impl.dimension; import java.util.Arrays; -import org.tensorflow.nio.nd.Shape; -import org.tensorflow.nio.nd.index.Index; +import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.ndarray.index.Index; public class DimensionalSpace { diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dimension/IndexedDimension.java b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dimension/IndexedDimension.java similarity index 94% rename from tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dimension/IndexedDimension.java rename to tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dimension/IndexedDimension.java index 8f3124fbe52..7c06cba92ea 100644 --- a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dimension/IndexedDimension.java +++ b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dimension/IndexedDimension.java @@ -14,9 +14,9 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.nio.nd.impl.dimension; +package org.tensorflow.util.ndarray.impl.dimension; -import org.tensorflow.nio.nd.index.Index; +import org.tensorflow.util.ndarray.index.Index; final class IndexedDimension extends AbstractDimension { diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dimension/ReducedDimension.java b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dimension/ReducedDimension.java similarity index 96% rename from tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dimension/ReducedDimension.java rename to tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dimension/ReducedDimension.java index 90741b94a15..94902de01be 100644 --- a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dimension/ReducedDimension.java +++ b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dimension/ReducedDimension.java @@ -14,7 +14,7 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.nio.nd.impl.dimension; +package org.tensorflow.util.ndarray.impl.dimension; final class ReducedDimension extends AbstractDimension { diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dimension/RelativeDimensionalSpace.java b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dimension/RelativeDimensionalSpace.java similarity index 94% rename from tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dimension/RelativeDimensionalSpace.java rename to tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dimension/RelativeDimensionalSpace.java index f92c9f5f96f..9cf3d626ca1 100644 --- a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dimension/RelativeDimensionalSpace.java +++ b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dimension/RelativeDimensionalSpace.java @@ -15,7 +15,7 @@ ======================================================================= */ -package org.tensorflow.nio.nd.impl.dimension; +package org.tensorflow.util.ndarray.impl.dimension; public class RelativeDimensionalSpace extends DimensionalSpace { diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dimension/UnknownDimension.java b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dimension/UnknownDimension.java similarity index 93% rename from tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dimension/UnknownDimension.java rename to tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dimension/UnknownDimension.java index 3eaf689cee6..7dfc1d6f8b1 100644 --- a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/dimension/UnknownDimension.java +++ b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dimension/UnknownDimension.java @@ -14,9 +14,9 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.nio.nd.impl.dimension; +package org.tensorflow.util.ndarray.impl.dimension; -import org.tensorflow.nio.nd.Shape; +import org.tensorflow.util.ndarray.Shape; final class UnknownDimension extends AbstractDimension { diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/sequence/ElementSequence.java b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/sequence/ElementSequence.java similarity index 83% rename from tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/sequence/ElementSequence.java rename to tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/sequence/ElementSequence.java index 95125bf38c1..3dd3e60984d 100644 --- a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/sequence/ElementSequence.java +++ b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/sequence/ElementSequence.java @@ -1,11 +1,11 @@ -package org.tensorflow.nio.nd.impl.sequence; +package org.tensorflow.util.ndarray.impl.sequence; import java.util.function.BiConsumer; import java.util.function.Consumer; -import org.tensorflow.nio.nd.NdArray; -import org.tensorflow.nio.nd.NdArraySequence; -import org.tensorflow.nio.nd.impl.AbstractNdArray; -import org.tensorflow.nio.nd.impl.dimension.DimensionalSpace; +import org.tensorflow.util.ndarray.NdArray; +import org.tensorflow.util.ndarray.NdArraySequence; +import org.tensorflow.util.ndarray.impl.AbstractNdArray; +import org.tensorflow.util.ndarray.impl.dimension.DimensionalSpace; public class ElementSequence> implements NdArraySequence { diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/sequence/IndexedPositionIterator.java b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/sequence/IndexedPositionIterator.java similarity index 82% rename from tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/sequence/IndexedPositionIterator.java rename to tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/sequence/IndexedPositionIterator.java index 82a00ff392d..f4318538d34 100644 --- a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/sequence/IndexedPositionIterator.java +++ b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/sequence/IndexedPositionIterator.java @@ -1,4 +1,4 @@ -package org.tensorflow.nio.nd.impl.sequence; +package org.tensorflow.util.ndarray.impl.sequence; public interface IndexedPositionIterator extends PositionIterator { diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/sequence/IndexedSequentialPositionIterator.java b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/sequence/IndexedSequentialPositionIterator.java similarity index 83% rename from tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/sequence/IndexedSequentialPositionIterator.java rename to tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/sequence/IndexedSequentialPositionIterator.java index 0a123b4230d..90a2f0873f6 100644 --- a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/sequence/IndexedSequentialPositionIterator.java +++ b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/sequence/IndexedSequentialPositionIterator.java @@ -1,6 +1,6 @@ -package org.tensorflow.nio.nd.impl.sequence; +package org.tensorflow.util.ndarray.impl.sequence; -import org.tensorflow.nio.nd.impl.dimension.DimensionalSpace; +import org.tensorflow.util.ndarray.impl.dimension.DimensionalSpace; class IndexedSequentialPositionIterator extends SequentialPositionIterator implements IndexedPositionIterator { diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/sequence/NdPositionIterator.java b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/sequence/NdPositionIterator.java similarity index 89% rename from tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/sequence/NdPositionIterator.java rename to tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/sequence/NdPositionIterator.java index 3e030c65a45..85e857ef6e2 100644 --- a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/sequence/NdPositionIterator.java +++ b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/sequence/NdPositionIterator.java @@ -1,6 +1,6 @@ -package org.tensorflow.nio.nd.impl.sequence; +package org.tensorflow.util.ndarray.impl.sequence; -import org.tensorflow.nio.nd.impl.dimension.DimensionalSpace; +import org.tensorflow.util.ndarray.impl.dimension.DimensionalSpace; class NdPositionIterator implements IndexedPositionIterator { diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/sequence/PositionIterator.java b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/sequence/PositionIterator.java similarity index 86% rename from tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/sequence/PositionIterator.java rename to tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/sequence/PositionIterator.java index 4547aef1ef6..b9d7cc07ad4 100644 --- a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/sequence/PositionIterator.java +++ b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/sequence/PositionIterator.java @@ -1,7 +1,7 @@ -package org.tensorflow.nio.nd.impl.sequence; +package org.tensorflow.util.ndarray.impl.sequence; import java.util.PrimitiveIterator; -import org.tensorflow.nio.nd.impl.dimension.DimensionalSpace; +import org.tensorflow.util.ndarray.impl.dimension.DimensionalSpace; public interface PositionIterator extends PrimitiveIterator.OfLong { diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/sequence/SequentialPositionIterator.java b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/sequence/SequentialPositionIterator.java similarity index 85% rename from tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/sequence/SequentialPositionIterator.java rename to tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/sequence/SequentialPositionIterator.java index f3c3d8362fa..78428a1cb12 100644 --- a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/sequence/SequentialPositionIterator.java +++ b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/sequence/SequentialPositionIterator.java @@ -1,6 +1,6 @@ -package org.tensorflow.nio.nd.impl.sequence; +package org.tensorflow.util.ndarray.impl.sequence; -import org.tensorflow.nio.nd.impl.dimension.DimensionalSpace; +import org.tensorflow.util.ndarray.impl.dimension.DimensionalSpace; class SequentialPositionIterator implements PositionIterator { diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/sequence/SingleElementSequence.java b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/sequence/SingleElementSequence.java similarity index 70% rename from tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/sequence/SingleElementSequence.java rename to tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/sequence/SingleElementSequence.java index 619fd5a1ca9..df3729b51bb 100644 --- a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/impl/sequence/SingleElementSequence.java +++ b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/sequence/SingleElementSequence.java @@ -1,11 +1,11 @@ -package org.tensorflow.nio.nd.impl.sequence; +package org.tensorflow.util.ndarray.impl.sequence; import java.util.function.BiConsumer; import java.util.function.Consumer; -import org.tensorflow.nio.nd.IllegalRankException; -import org.tensorflow.nio.nd.NdArray; -import org.tensorflow.nio.nd.NdArraySequence; -import org.tensorflow.nio.nd.impl.AbstractNdArray; +import org.tensorflow.util.ndarray.IllegalRankException; +import org.tensorflow.util.ndarray.NdArray; +import org.tensorflow.util.ndarray.NdArraySequence; +import org.tensorflow.util.ndarray.impl.AbstractNdArray; class SingleElementSequence> implements NdArraySequence { diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/index/All.java b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/index/All.java similarity index 90% rename from tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/index/All.java rename to tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/index/All.java index 2dfc8933c57..06c5ea7df40 100644 --- a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/index/All.java +++ b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/index/All.java @@ -14,9 +14,9 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.nio.nd.index; +package org.tensorflow.util.ndarray.index; -import org.tensorflow.nio.nd.impl.dimension.Dimension; +import org.tensorflow.util.ndarray.impl.dimension.Dimension; class All implements Index { diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/index/At.java b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/index/At.java similarity index 91% rename from tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/index/At.java rename to tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/index/At.java index f30d4ca52b7..68cc6bf1f2a 100644 --- a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/index/At.java +++ b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/index/At.java @@ -14,9 +14,9 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.nio.nd.index; +package org.tensorflow.util.ndarray.index; -import org.tensorflow.nio.nd.impl.dimension.Dimension; +import org.tensorflow.util.ndarray.impl.dimension.Dimension; class At implements Index { diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/index/Even.java b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/index/Even.java similarity index 90% rename from tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/index/Even.java rename to tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/index/Even.java index 4564318d735..f1776a6bd78 100644 --- a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/index/Even.java +++ b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/index/Even.java @@ -14,9 +14,9 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.nio.nd.index; +package org.tensorflow.util.ndarray.index; -import org.tensorflow.nio.nd.impl.dimension.Dimension; +import org.tensorflow.util.ndarray.impl.dimension.Dimension; class Even implements Index { diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/index/Flip.java b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/index/Flip.java similarity index 90% rename from tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/index/Flip.java rename to tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/index/Flip.java index 876eeddb32e..274b0974b40 100644 --- a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/index/Flip.java +++ b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/index/Flip.java @@ -14,9 +14,9 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.nio.nd.index; +package org.tensorflow.util.ndarray.index; -import org.tensorflow.nio.nd.impl.dimension.Dimension; +import org.tensorflow.util.ndarray.impl.dimension.Dimension; class Flip implements Index { diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/index/From.java b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/index/From.java similarity index 90% rename from tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/index/From.java rename to tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/index/From.java index fb4038f5e77..24539364e48 100644 --- a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/index/From.java +++ b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/index/From.java @@ -14,9 +14,9 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.nio.nd.index; +package org.tensorflow.util.ndarray.index; -import org.tensorflow.nio.nd.impl.dimension.Dimension; +import org.tensorflow.util.ndarray.impl.dimension.Dimension; class From implements Index { diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/index/Index.java b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/index/Index.java similarity index 92% rename from tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/index/Index.java rename to tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/index/Index.java index af56f4d3c69..48be7debe14 100644 --- a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/index/Index.java +++ b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/index/Index.java @@ -14,15 +14,16 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.nio.nd.index; +package org.tensorflow.util.ndarray.index; -import org.tensorflow.nio.nd.impl.dimension.Dimension; +import org.tensorflow.util.ndarray.NdArray; +import org.tensorflow.util.ndarray.impl.dimension.Dimension; /** * An index used for slicing a view out of an N-dimensional array. * *

A slice, i.e. a reduced view, of an N-dimensional array is obtain by calling - * {@link org.tensorflow.nio.nd.NdArray#slice(Index...)}, given a list of indices + * {@link NdArray#slice(Index...)}, given a list of indices * that select which elements on a given dimension should be included/excluded * from that view. */ diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/index/Indices.java b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/index/Indices.java similarity index 95% rename from tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/index/Indices.java rename to tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/index/Indices.java index c485d2b9db0..2996af924e2 100644 --- a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/index/Indices.java +++ b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/index/Indices.java @@ -14,13 +14,13 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.nio.nd.index; +package org.tensorflow.util.ndarray.index; -import org.tensorflow.nio.buffer.DataBuffers; -import org.tensorflow.nio.nd.IllegalRankException; -import org.tensorflow.nio.nd.NdArray; -import org.tensorflow.nio.nd.NdArrays; -import org.tensorflow.nio.nd.Shape; +import org.tensorflow.util.buffer.DataBuffers; +import org.tensorflow.util.ndarray.IllegalRankException; +import org.tensorflow.util.ndarray.NdArray; +import org.tensorflow.util.ndarray.NdArrays; +import org.tensorflow.util.ndarray.Shape; /** * Helper class for instantiating {@link Index} objects. @@ -58,7 +58,7 @@ public static Index at(NdArray coord) { if (coord.rank() > 0) { throw new IllegalRankException("Only scalars are accepted as a value index"); } - return new At(coord.getValue().longValue()); + return new At(coord.getObject().longValue()); } /** diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/index/Odd.java b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/index/Odd.java similarity index 90% rename from tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/index/Odd.java rename to tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/index/Odd.java index 929efad74d5..046d355fb73 100644 --- a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/index/Odd.java +++ b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/index/Odd.java @@ -14,9 +14,9 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.nio.nd.index; +package org.tensorflow.util.ndarray.index; -import org.tensorflow.nio.nd.impl.dimension.Dimension; +import org.tensorflow.util.ndarray.impl.dimension.Dimension; class Odd implements Index { diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/index/Range.java b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/index/Range.java similarity index 90% rename from tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/index/Range.java rename to tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/index/Range.java index f356d4ebdd3..72438e0f4bb 100644 --- a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/index/Range.java +++ b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/index/Range.java @@ -14,9 +14,9 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.nio.nd.index; +package org.tensorflow.util.ndarray.index; -import org.tensorflow.nio.nd.impl.dimension.Dimension; +import org.tensorflow.util.ndarray.impl.dimension.Dimension; class Range implements Index { diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/index/Sequence.java b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/index/Sequence.java similarity index 83% rename from tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/index/Sequence.java rename to tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/index/Sequence.java index fa24003b433..e862173c310 100644 --- a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/index/Sequence.java +++ b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/index/Sequence.java @@ -14,10 +14,10 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.nio.nd.index; +package org.tensorflow.util.ndarray.index; -import org.tensorflow.nio.nd.NdArray; -import org.tensorflow.nio.nd.impl.dimension.Dimension; +import org.tensorflow.util.ndarray.impl.dimension.Dimension; +import org.tensorflow.util.ndarray.NdArray; class Sequence implements Index { @@ -28,7 +28,7 @@ public long numElements(Dimension dim) { @Override public long mapCoordinate(long coordinate, Dimension dim) { - return coords.getValue(coordinate).longValue(); + return coords.getObject(coordinate).longValue(); } Sequence(NdArray coords) { diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/index/Step.java b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/index/Step.java similarity index 91% rename from tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/index/Step.java rename to tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/index/Step.java index 3447cd6cf56..cb3f65cae10 100644 --- a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/index/Step.java +++ b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/index/Step.java @@ -14,9 +14,9 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.nio.nd.index; +package org.tensorflow.util.ndarray.index; -import org.tensorflow.nio.nd.impl.dimension.Dimension; +import org.tensorflow.util.ndarray.impl.dimension.Dimension; class Step implements Index { diff --git a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/index/To.java b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/index/To.java similarity index 90% rename from tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/index/To.java rename to tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/index/To.java index 783143a1c02..a7ca91c6d31 100644 --- a/tensorflow-utils/nio-utils/src/main/java/org/tensorflow/nio/nd/index/To.java +++ b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/index/To.java @@ -14,9 +14,9 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.nio.nd.index; +package org.tensorflow.util.ndarray.index; -import org.tensorflow.nio.nd.impl.dimension.Dimension; +import org.tensorflow.util.ndarray.impl.dimension.Dimension; class To implements Index { diff --git a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/benchmark/NdArrayBenchmark.java b/tensorflow-utils/src/test/java/org/tensorflow/util/benchmark/NdArrayBenchmark.java similarity index 87% rename from tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/benchmark/NdArrayBenchmark.java rename to tensorflow-utils/src/test/java/org/tensorflow/util/benchmark/NdArrayBenchmark.java index 93fcb8ebb62..54734d967db 100644 --- a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/benchmark/NdArrayBenchmark.java +++ b/tensorflow-utils/src/test/java/org/tensorflow/util/benchmark/NdArrayBenchmark.java @@ -14,10 +14,10 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.nio.benchmark; +package org.tensorflow.util.benchmark; -import static org.tensorflow.nio.nd.index.Indices.all; -import static org.tensorflow.nio.nd.index.Indices.at; +import static org.tensorflow.util.ndarray.index.Indices.all; +import static org.tensorflow.util.ndarray.index.Indices.at; import java.awt.image.BufferedImage; import java.awt.image.Raster; @@ -33,19 +33,19 @@ import org.openjdk.jmh.annotations.State; import org.openjdk.jmh.annotations.Warmup; import org.openjdk.jmh.runner.RunnerException; -import org.tensorflow.nio.nd.FloatNdArray; -import org.tensorflow.nio.nd.NdArrays; -import org.tensorflow.nio.nd.Shape; +import org.tensorflow.util.ndarray.FloatNdArray; +import org.tensorflow.util.ndarray.NdArrays; +import org.tensorflow.util.ndarray.Shape; @Fork(value = 1, jvmArgs = {"-Xms4G", "-Xmx4G"}) @BenchmarkMode(Mode.AverageTime) -@Warmup(iterations = 0) //3) +@Warmup(iterations = 3) @Measurement(iterations = 5) @State(Scope.Benchmark) public class NdArrayBenchmark { - static final String TEST_IMAGE = "1500x916.jpg"; - static final int BATCH_SIZE = 100; + static final String TEST_IMAGE = "castle.jpg"; + static final int BATCH_SIZE = 60; private FloatNdArray pixels; private FloatNdArray channels; @@ -74,13 +74,13 @@ public void setUp() throws IOException { } @Benchmark - @Measurement(batchSize = 1500 * 916) + @Measurement(batchSize = 2049 * 1537) public void getElementAtIndex() { pixels.get(0); } @Benchmark - @Measurement(batchSize = 1500 * 916) + @Measurement(batchSize = 2049 * 1537) public void slicing() { batches.slice(at(0), all(), at(0)); } @@ -104,7 +104,7 @@ public void writeAllBatchChannels() { } @Benchmark - @Measurement(batchSize = 1500 * 916) + @Measurement(batchSize = 2049 * 1537) public void writeOnePixelBySlicing() { batches.slice(at(0), all(), at(0)).set(pixels.get(0)); } @@ -119,7 +119,7 @@ public void writeAllPixelsBySlicing() { } @Benchmark - @Measurement(batchSize = 1500 * 916) + @Measurement(batchSize = 2049 * 1537) public void writeOnePixelsByIndex() { batches .setFloat(pixels.getFloat(0, 0), 0, 0, 0) diff --git a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/BooleanDataBufferTestBase.java b/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/BooleanDataBufferTestBase.java similarity index 86% rename from tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/BooleanDataBufferTestBase.java rename to tensorflow-utils/src/test/java/org/tensorflow/util/buffer/BooleanDataBufferTestBase.java index 50b78a37a8f..697699ee139 100644 --- a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/BooleanDataBufferTestBase.java +++ b/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/BooleanDataBufferTestBase.java @@ -14,7 +14,7 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.nio.buffer; +package org.tensorflow.util.buffer; import static junit.framework.TestCase.assertTrue; import static org.junit.Assert.assertArrayEquals; @@ -40,20 +40,20 @@ public void writeAndReadFromArray() { boolean[] values = new boolean[]{true, false, false, true, false}; buffer.write(values); - assertTrue(buffer.get(0)); - assertFalse(buffer.get(1)); + assertTrue(buffer.getObject(0)); + assertFalse(buffer.getObject(1)); buffer.offset(5).write(values); - assertTrue(buffer.get(5)); + assertTrue(buffer.getObject(5)); boolean[] read = new boolean[5]; buffer.read(read); assertArrayEquals(values, read); buffer.write(values, 2, 3); - assertFalse(buffer.get(0)); - assertTrue(buffer.get(1)); - assertFalse(buffer.get(2)); + assertFalse(buffer.getObject(0)); + assertTrue(buffer.getObject(1)); + assertFalse(buffer.getObject(2)); Arrays.fill(read, false); buffer.read(read, 1, 2); diff --git a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/ByteDataBufferTestBase.java b/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/ByteDataBufferTestBase.java similarity index 98% rename from tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/ByteDataBufferTestBase.java rename to tensorflow-utils/src/test/java/org/tensorflow/util/buffer/ByteDataBufferTestBase.java index 7dca25be32f..119868799c1 100644 --- a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/ByteDataBufferTestBase.java +++ b/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/ByteDataBufferTestBase.java @@ -14,7 +14,7 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.nio.buffer; +package org.tensorflow.util.buffer; import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertEquals; diff --git a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/DataBufferTestBase.java b/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/DataBufferTestBase.java similarity index 84% rename from tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/DataBufferTestBase.java rename to tensorflow-utils/src/test/java/org/tensorflow/util/buffer/DataBufferTestBase.java index 3f0f172302b..1b77cba24bb 100644 --- a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/DataBufferTestBase.java +++ b/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/DataBufferTestBase.java @@ -14,7 +14,7 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.nio.buffer; +package org.tensorflow.util.buffer; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; @@ -64,18 +64,18 @@ public void bufferSize() { @Test public void offsetAndNarrow() { DataBuffer buffer = allocate(10L); - buffer.set(valueOf(100L), 6); + buffer.setObject(valueOf(100L), 6); assertEquals(10L, buffer.size()); - assertEquals(valueOf(100L), buffer.get(6)); + assertEquals(valueOf(100L), buffer.getObject(6)); DataBuffer subBuffer = buffer.offset(3L); assertEquals(7L, subBuffer.size()); - assertEquals(valueOf(100L), subBuffer.get(3)); + assertEquals(valueOf(100L), subBuffer.getObject(3)); subBuffer = subBuffer.narrow(2L); assertEquals(2L, subBuffer.size()); try { - subBuffer.get(3); + subBuffer.getObject(3); fail(); } catch (IndexOutOfBoundsException e) { //as expected @@ -110,28 +110,28 @@ public void offsetAndNarrow() { public void putAndGet() { DataBuffer buffer = allocate(10L); - buffer.set(valueOf(5L), 5L); - assertEquals(valueOf(5L), buffer.get(5L)); + buffer.setObject(valueOf(5L), 5L); + assertEquals(valueOf(5L), buffer.getObject(5L)); try { - buffer.set(valueOf(10L), 10L); + buffer.setObject(valueOf(10L), 10L); fail(); } catch (IndexOutOfBoundsException e) { // as expected } try { - buffer.get(10L); + buffer.getObject(10L); fail(); } catch (IndexOutOfBoundsException e) { // as expected } try { - buffer.set(valueOf(-1L), -1L); + buffer.setObject(valueOf(-1L), -1L); fail(); } catch (IndexOutOfBoundsException e) { // as expected } try { - buffer.get(-1L); + buffer.getObject(-1L); fail(); } catch (IndexOutOfBoundsException e) { // as expected @@ -141,10 +141,10 @@ public void putAndGet() { @Test public void copyToBuffer() { DataBuffer srcBuffer = allocate(25L); - srcBuffer.set(valueOf(5L), 5L); - srcBuffer.set(valueOf(10L), 10L); - srcBuffer.set(valueOf(15L), 15L); - srcBuffer.set(valueOf(20L), 20L); + srcBuffer.setObject(valueOf(5L), 5L); + srcBuffer.setObject(valueOf(10L), 10L); + srcBuffer.setObject(valueOf(15L), 15L); + srcBuffer.setObject(valueOf(20L), 20L); try { srcBuffer.copyTo(srcBuffer, srcBuffer.size()); fail(); @@ -153,7 +153,7 @@ public void copyToBuffer() { } DataBuffer dstBuffer = allocate(30L); srcBuffer.copyTo(dstBuffer, srcBuffer.size()); - assertEquals(valueOf(5L), dstBuffer.get(5L)); + assertEquals(valueOf(5L), dstBuffer.getObject(5L)); try { srcBuffer.copyTo(dstBuffer, dstBuffer.size()); fail(); diff --git a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/DoubleDataBufferTestBase.java b/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/DoubleDataBufferTestBase.java similarity index 98% rename from tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/DoubleDataBufferTestBase.java rename to tensorflow-utils/src/test/java/org/tensorflow/util/buffer/DoubleDataBufferTestBase.java index ee06f3ae7ff..6391542c9dc 100644 --- a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/DoubleDataBufferTestBase.java +++ b/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/DoubleDataBufferTestBase.java @@ -14,7 +14,7 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.nio.buffer; +package org.tensorflow.util.buffer; import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertEquals; diff --git a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/FloatDataBufferTestBase.java b/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/FloatDataBufferTestBase.java similarity index 98% rename from tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/FloatDataBufferTestBase.java rename to tensorflow-utils/src/test/java/org/tensorflow/util/buffer/FloatDataBufferTestBase.java index 2ab1e761e69..fba9fdf00ad 100644 --- a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/FloatDataBufferTestBase.java +++ b/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/FloatDataBufferTestBase.java @@ -14,7 +14,7 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.nio.buffer; +package org.tensorflow.util.buffer; import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertEquals; diff --git a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/IntDataBufferTestBase.java b/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/IntDataBufferTestBase.java similarity index 98% rename from tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/IntDataBufferTestBase.java rename to tensorflow-utils/src/test/java/org/tensorflow/util/buffer/IntDataBufferTestBase.java index 8556612650e..42899ab1317 100644 --- a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/IntDataBufferTestBase.java +++ b/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/IntDataBufferTestBase.java @@ -14,7 +14,7 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.nio.buffer; +package org.tensorflow.util.buffer; import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertEquals; diff --git a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/LongDataBufferTestBase.java b/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/LongDataBufferTestBase.java similarity index 98% rename from tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/LongDataBufferTestBase.java rename to tensorflow-utils/src/test/java/org/tensorflow/util/buffer/LongDataBufferTestBase.java index cb812cfc48b..b4498b6196e 100644 --- a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/LongDataBufferTestBase.java +++ b/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/LongDataBufferTestBase.java @@ -14,7 +14,7 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.nio.buffer; +package org.tensorflow.util.buffer; import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertEquals; diff --git a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/ShortDataBufferTestBase.java b/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/ShortDataBufferTestBase.java similarity index 98% rename from tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/ShortDataBufferTestBase.java rename to tensorflow-utils/src/test/java/org/tensorflow/util/buffer/ShortDataBufferTestBase.java index a39f8f6a96b..0eb73f8b2e1 100644 --- a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/ShortDataBufferTestBase.java +++ b/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/ShortDataBufferTestBase.java @@ -14,7 +14,7 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.nio.buffer; +package org.tensorflow.util.buffer; import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertEquals; diff --git a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/jdk/ByteJdkDataBufferTest.java b/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/jdk/ByteJdkDataBufferTest.java similarity index 86% rename from tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/jdk/ByteJdkDataBufferTest.java rename to tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/jdk/ByteJdkDataBufferTest.java index 258b89c0b5e..25accbc63a3 100644 --- a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/jdk/ByteJdkDataBufferTest.java +++ b/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/jdk/ByteJdkDataBufferTest.java @@ -14,10 +14,10 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.nio.buffer.impl.jdk; +package org.tensorflow.util.buffer.impl.jdk; -import org.tensorflow.nio.buffer.ByteDataBuffer; -import org.tensorflow.nio.buffer.ByteDataBufferTestBase; +import org.tensorflow.util.buffer.ByteDataBuffer; +import org.tensorflow.util.buffer.ByteDataBufferTestBase; public class ByteJdkDataBufferTest extends ByteDataBufferTestBase { diff --git a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/jdk/DoubleJdkDataBufferTest.java b/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/jdk/DoubleJdkDataBufferTest.java similarity index 85% rename from tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/jdk/DoubleJdkDataBufferTest.java rename to tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/jdk/DoubleJdkDataBufferTest.java index 3db5f1475ed..99f8ccf075e 100644 --- a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/jdk/DoubleJdkDataBufferTest.java +++ b/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/jdk/DoubleJdkDataBufferTest.java @@ -14,10 +14,10 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.nio.buffer.impl.jdk; +package org.tensorflow.util.buffer.impl.jdk; -import org.tensorflow.nio.buffer.DoubleDataBuffer; -import org.tensorflow.nio.buffer.DoubleDataBufferTestBase; +import org.tensorflow.util.buffer.DoubleDataBuffer; +import org.tensorflow.util.buffer.DoubleDataBufferTestBase; public class DoubleJdkDataBufferTest extends DoubleDataBufferTestBase { diff --git a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/jdk/FloatJdkDataBufferTest.java b/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/jdk/FloatJdkDataBufferTest.java similarity index 85% rename from tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/jdk/FloatJdkDataBufferTest.java rename to tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/jdk/FloatJdkDataBufferTest.java index c8d442626fe..3c71abfb008 100644 --- a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/jdk/FloatJdkDataBufferTest.java +++ b/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/jdk/FloatJdkDataBufferTest.java @@ -14,10 +14,10 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.nio.buffer.impl.jdk; +package org.tensorflow.util.buffer.impl.jdk; -import org.tensorflow.nio.buffer.FloatDataBuffer; -import org.tensorflow.nio.buffer.FloatDataBufferTestBase; +import org.tensorflow.util.buffer.FloatDataBuffer; +import org.tensorflow.util.buffer.FloatDataBufferTestBase; public class FloatJdkDataBufferTest extends FloatDataBufferTestBase { diff --git a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/jdk/IntJdkDataBufferTest.java b/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/jdk/IntJdkDataBufferTest.java similarity index 86% rename from tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/jdk/IntJdkDataBufferTest.java rename to tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/jdk/IntJdkDataBufferTest.java index 8f676091c59..b6e9ce6898e 100644 --- a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/jdk/IntJdkDataBufferTest.java +++ b/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/jdk/IntJdkDataBufferTest.java @@ -14,10 +14,10 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.nio.buffer.impl.jdk; +package org.tensorflow.util.buffer.impl.jdk; -import org.tensorflow.nio.buffer.IntDataBuffer; -import org.tensorflow.nio.buffer.IntDataBufferTestBase; +import org.tensorflow.util.buffer.IntDataBuffer; +import org.tensorflow.util.buffer.IntDataBufferTestBase; public class IntJdkDataBufferTest extends IntDataBufferTestBase { diff --git a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/jdk/LongJdkDataBufferTest.java b/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/jdk/LongJdkDataBufferTest.java similarity index 86% rename from tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/jdk/LongJdkDataBufferTest.java rename to tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/jdk/LongJdkDataBufferTest.java index cc2a3902eaf..ee6cabf8f69 100644 --- a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/jdk/LongJdkDataBufferTest.java +++ b/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/jdk/LongJdkDataBufferTest.java @@ -14,10 +14,10 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.nio.buffer.impl.jdk; +package org.tensorflow.util.buffer.impl.jdk; -import org.tensorflow.nio.buffer.LongDataBuffer; -import org.tensorflow.nio.buffer.LongDataBufferTestBase; +import org.tensorflow.util.buffer.LongDataBuffer; +import org.tensorflow.util.buffer.LongDataBufferTestBase; public class LongJdkDataBufferTest extends LongDataBufferTestBase { diff --git a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/jdk/ShortJdkDataBufferTest.java b/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/jdk/ShortJdkDataBufferTest.java similarity index 85% rename from tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/jdk/ShortJdkDataBufferTest.java rename to tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/jdk/ShortJdkDataBufferTest.java index 9a648abe8e4..bfded1dac87 100644 --- a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/jdk/ShortJdkDataBufferTest.java +++ b/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/jdk/ShortJdkDataBufferTest.java @@ -14,10 +14,10 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.nio.buffer.impl.jdk; +package org.tensorflow.util.buffer.impl.jdk; -import org.tensorflow.nio.buffer.ShortDataBuffer; -import org.tensorflow.nio.buffer.ShortDataBufferTestBase; +import org.tensorflow.util.buffer.ShortDataBuffer; +import org.tensorflow.util.buffer.ShortDataBufferTestBase; public class ShortJdkDataBufferTest extends ShortDataBufferTestBase { diff --git a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/misc/ArrayDataBufferTest.java b/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/misc/ArrayDataBufferTest.java similarity index 88% rename from tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/misc/ArrayDataBufferTest.java rename to tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/misc/ArrayDataBufferTest.java index a72b0b5f578..df20a9545e8 100644 --- a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/misc/ArrayDataBufferTest.java +++ b/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/misc/ArrayDataBufferTest.java @@ -14,11 +14,11 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.nio.buffer.impl.misc; +package org.tensorflow.util.buffer.impl.misc; import java.math.BigDecimal; -import org.tensorflow.nio.buffer.DataBuffer; -import org.tensorflow.nio.buffer.DataBufferTestBase; +import org.tensorflow.util.buffer.DataBuffer; +import org.tensorflow.util.buffer.DataBufferTestBase; public class ArrayDataBufferTest extends DataBufferTestBase { diff --git a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/misc/BitSetDataBufferTest.java b/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/misc/BitSetDataBufferTest.java similarity index 86% rename from tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/misc/BitSetDataBufferTest.java rename to tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/misc/BitSetDataBufferTest.java index 843f82d6fd3..4dd11497bc7 100644 --- a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/misc/BitSetDataBufferTest.java +++ b/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/misc/BitSetDataBufferTest.java @@ -14,10 +14,10 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.nio.buffer.impl.misc; +package org.tensorflow.util.buffer.impl.misc; -import org.tensorflow.nio.buffer.BooleanDataBuffer; -import org.tensorflow.nio.buffer.BooleanDataBufferTestBase; +import org.tensorflow.util.buffer.BooleanDataBuffer; +import org.tensorflow.util.buffer.BooleanDataBufferTestBase; public class BitSetDataBufferTest extends BooleanDataBufferTestBase { diff --git a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/misc/StringArrayDataBufferTest.java b/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/misc/StringArrayDataBufferTest.java similarity index 87% rename from tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/misc/StringArrayDataBufferTest.java rename to tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/misc/StringArrayDataBufferTest.java index ae3f67324a7..404bf4d834a 100644 --- a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/misc/StringArrayDataBufferTest.java +++ b/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/misc/StringArrayDataBufferTest.java @@ -14,10 +14,10 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.nio.buffer.impl.misc; +package org.tensorflow.util.buffer.impl.misc; -import org.tensorflow.nio.buffer.DataBuffer; -import org.tensorflow.nio.buffer.DataBufferTestBase; +import org.tensorflow.util.buffer.DataBuffer; +import org.tensorflow.util.buffer.DataBufferTestBase; public class StringArrayDataBufferTest extends DataBufferTestBase { diff --git a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/raw/BooleanRawDataBufferTest.java b/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/raw/BooleanRawDataBufferTest.java similarity index 85% rename from tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/raw/BooleanRawDataBufferTest.java rename to tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/raw/BooleanRawDataBufferTest.java index b5219ca778a..4ee78c03c70 100644 --- a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/raw/BooleanRawDataBufferTest.java +++ b/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/raw/BooleanRawDataBufferTest.java @@ -14,10 +14,10 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.nio.buffer.impl.raw; +package org.tensorflow.util.buffer.impl.raw; -import org.tensorflow.nio.buffer.DoubleDataBuffer; -import org.tensorflow.nio.buffer.DoubleDataBufferTestBase; +import org.tensorflow.util.buffer.DoubleDataBuffer; +import org.tensorflow.util.buffer.DoubleDataBufferTestBase; public class BooleanRawDataBufferTest extends DoubleDataBufferTestBase { diff --git a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/raw/ByteRawDataBufferTest.java b/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/raw/ByteRawDataBufferTest.java similarity index 86% rename from tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/raw/ByteRawDataBufferTest.java rename to tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/raw/ByteRawDataBufferTest.java index 13afa989f87..fa219af3254 100644 --- a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/raw/ByteRawDataBufferTest.java +++ b/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/raw/ByteRawDataBufferTest.java @@ -14,10 +14,10 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.nio.buffer.impl.raw; +package org.tensorflow.util.buffer.impl.raw; -import org.tensorflow.nio.buffer.ByteDataBuffer; -import org.tensorflow.nio.buffer.ByteDataBufferTestBase; +import org.tensorflow.util.buffer.ByteDataBuffer; +import org.tensorflow.util.buffer.ByteDataBufferTestBase; public class ByteRawDataBufferTest extends ByteDataBufferTestBase { diff --git a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/raw/DoubleRawDataBufferTest.java b/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/raw/DoubleRawDataBufferTest.java similarity index 85% rename from tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/raw/DoubleRawDataBufferTest.java rename to tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/raw/DoubleRawDataBufferTest.java index 9ff7830d569..6b7134bfabc 100644 --- a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/raw/DoubleRawDataBufferTest.java +++ b/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/raw/DoubleRawDataBufferTest.java @@ -14,10 +14,10 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.nio.buffer.impl.raw; +package org.tensorflow.util.buffer.impl.raw; -import org.tensorflow.nio.buffer.DoubleDataBuffer; -import org.tensorflow.nio.buffer.DoubleDataBufferTestBase; +import org.tensorflow.util.buffer.DoubleDataBuffer; +import org.tensorflow.util.buffer.DoubleDataBufferTestBase; public class DoubleRawDataBufferTest extends DoubleDataBufferTestBase { diff --git a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/raw/FloatRawDataBufferTest.java b/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/raw/FloatRawDataBufferTest.java similarity index 85% rename from tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/raw/FloatRawDataBufferTest.java rename to tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/raw/FloatRawDataBufferTest.java index 2a7365f0382..262feb14263 100644 --- a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/raw/FloatRawDataBufferTest.java +++ b/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/raw/FloatRawDataBufferTest.java @@ -14,10 +14,10 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.nio.buffer.impl.raw; +package org.tensorflow.util.buffer.impl.raw; -import org.tensorflow.nio.buffer.FloatDataBuffer; -import org.tensorflow.nio.buffer.FloatDataBufferTestBase; +import org.tensorflow.util.buffer.FloatDataBuffer; +import org.tensorflow.util.buffer.FloatDataBufferTestBase; public class FloatRawDataBufferTest extends FloatDataBufferTestBase { diff --git a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/raw/IntRawDataBufferTest.java b/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/raw/IntRawDataBufferTest.java similarity index 86% rename from tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/raw/IntRawDataBufferTest.java rename to tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/raw/IntRawDataBufferTest.java index 0b2c26bfcf1..7ad18e6cb5d 100644 --- a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/raw/IntRawDataBufferTest.java +++ b/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/raw/IntRawDataBufferTest.java @@ -14,10 +14,10 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.nio.buffer.impl.raw; +package org.tensorflow.util.buffer.impl.raw; -import org.tensorflow.nio.buffer.IntDataBuffer; -import org.tensorflow.nio.buffer.IntDataBufferTestBase; +import org.tensorflow.util.buffer.IntDataBuffer; +import org.tensorflow.util.buffer.IntDataBufferTestBase; public class IntRawDataBufferTest extends IntDataBufferTestBase { diff --git a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/raw/LongRawDataBufferTest.java b/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/raw/LongRawDataBufferTest.java similarity index 86% rename from tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/raw/LongRawDataBufferTest.java rename to tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/raw/LongRawDataBufferTest.java index 600886c232c..40ad6c8678c 100644 --- a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/raw/LongRawDataBufferTest.java +++ b/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/raw/LongRawDataBufferTest.java @@ -14,10 +14,10 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.nio.buffer.impl.raw; +package org.tensorflow.util.buffer.impl.raw; -import org.tensorflow.nio.buffer.LongDataBuffer; -import org.tensorflow.nio.buffer.LongDataBufferTestBase; +import org.tensorflow.util.buffer.LongDataBuffer; +import org.tensorflow.util.buffer.LongDataBufferTestBase; public class LongRawDataBufferTest extends LongDataBufferTestBase { diff --git a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/raw/ShortRawDataBufferTest.java b/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/raw/ShortRawDataBufferTest.java similarity index 85% rename from tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/raw/ShortRawDataBufferTest.java rename to tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/raw/ShortRawDataBufferTest.java index 529fd498fe0..154e15ea569 100644 --- a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/raw/ShortRawDataBufferTest.java +++ b/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/raw/ShortRawDataBufferTest.java @@ -14,10 +14,10 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.nio.buffer.impl.raw; +package org.tensorflow.util.buffer.impl.raw; -import org.tensorflow.nio.buffer.ShortDataBuffer; -import org.tensorflow.nio.buffer.ShortDataBufferTestBase; +import org.tensorflow.util.buffer.ShortDataBufferTestBase; +import org.tensorflow.util.buffer.ShortDataBuffer; public class ShortRawDataBufferTest extends ShortDataBufferTestBase { diff --git a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/virtual/BigIntegerVirtualDataBufferTest.java b/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/virtual/BigIntegerVirtualDataBufferTest.java similarity index 56% rename from tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/virtual/BigIntegerVirtualDataBufferTest.java rename to tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/virtual/BigIntegerVirtualDataBufferTest.java index d578b1957a8..e60650b5923 100644 --- a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/virtual/BigIntegerVirtualDataBufferTest.java +++ b/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/virtual/BigIntegerVirtualDataBufferTest.java @@ -1,12 +1,12 @@ -package org.tensorflow.nio.buffer.impl.virtual; +package org.tensorflow.util.buffer.impl.virtual; import java.math.BigInteger; -import org.tensorflow.nio.buffer.ByteDataBuffer; -import org.tensorflow.nio.buffer.DataBuffer; -import org.tensorflow.nio.buffer.DataBufferTestBase; -import org.tensorflow.nio.buffer.DataBuffers; -import org.tensorflow.nio.buffer.adapter.DataAdapter; -import org.tensorflow.nio.buffer.impl.jdk.ByteJdkDataBuffer; +import org.tensorflow.util.buffer.ByteDataBuffer; +import org.tensorflow.util.buffer.DataBuffer; +import org.tensorflow.util.buffer.DataBuffers; +import org.tensorflow.util.buffer.adapter.DataAdapter; +import org.tensorflow.util.buffer.impl.jdk.ByteJdkDataBuffer; +import org.tensorflow.util.buffer.DataBufferTestBase; public class BigIntegerVirtualDataBufferTest extends DataBufferTestBase { @@ -30,16 +30,16 @@ private static class TestBigIntegerAdapter implements DataAdapter { @Override public void writeValue(ByteDataBuffer buffer, BigInteger value, long index) { byte[] bytes = value.toByteArray(); - buffer.set(bytes.length > 2 ? bytes[2] : 0, index); - buffer.set(bytes.length > 1 ? bytes[1] : 0, index + 1); - buffer.set(bytes[0], index + 2); + buffer.setObject(bytes.length > 2 ? bytes[2] : 0, index); + buffer.setObject(bytes.length > 1 ? bytes[1] : 0, index + 1); + buffer.setObject(bytes[0], index + 2); } @Override public BigInteger readValue(ByteDataBuffer buffer, long index) { - byte byte2 = buffer.get(index); - byte byte1 = buffer.get(index + 1); - byte byte0 = buffer.get(index + 2); + byte byte2 = buffer.getObject(index); + byte byte1 = buffer.getObject(index + 1); + byte byte0 = buffer.getObject(index + 2); return new BigInteger(new byte[] { byte2, byte1, byte0 }); } diff --git a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/virtual/BooleanVirtualDataBufferTest.java b/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/virtual/BooleanVirtualDataBufferTest.java similarity index 57% rename from tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/virtual/BooleanVirtualDataBufferTest.java rename to tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/virtual/BooleanVirtualDataBufferTest.java index d5be582dca8..18c0575349d 100644 --- a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/virtual/BooleanVirtualDataBufferTest.java +++ b/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/virtual/BooleanVirtualDataBufferTest.java @@ -1,11 +1,11 @@ -package org.tensorflow.nio.buffer.impl.virtual; +package org.tensorflow.util.buffer.impl.virtual; -import org.tensorflow.nio.buffer.BooleanDataBuffer; -import org.tensorflow.nio.buffer.BooleanDataBufferTestBase; -import org.tensorflow.nio.buffer.ByteDataBuffer; -import org.tensorflow.nio.buffer.DataBuffers; -import org.tensorflow.nio.buffer.adapter.BooleanDataAdapter; -import org.tensorflow.nio.buffer.impl.jdk.ByteJdkDataBuffer; +import org.tensorflow.util.buffer.BooleanDataBuffer; +import org.tensorflow.util.buffer.ByteDataBuffer; +import org.tensorflow.util.buffer.DataBuffers; +import org.tensorflow.util.buffer.adapter.BooleanDataAdapter; +import org.tensorflow.util.buffer.impl.jdk.ByteJdkDataBuffer; +import org.tensorflow.util.buffer.BooleanDataBufferTestBase; public class BooleanVirtualDataBufferTest extends BooleanDataBufferTestBase { @@ -23,12 +23,12 @@ private static class TestBooleanAdapter implements BooleanDataAdapter { @Override public void writeBoolean(ByteDataBuffer buffer, boolean value, long index) { - buffer.set((byte)(value ? 1 : 0), index); + buffer.setObject((byte)(value ? 1 : 0), index); } @Override public boolean readBoolean(ByteDataBuffer buffer, long index) { - return buffer.get(index) > 0; + return buffer.getObject(index) > 0; } @Override diff --git a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/virtual/DoubleVirtualDataBufferTest.java b/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/virtual/DoubleVirtualDataBufferTest.java similarity index 52% rename from tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/virtual/DoubleVirtualDataBufferTest.java rename to tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/virtual/DoubleVirtualDataBufferTest.java index 79cc093cefe..5dc8706ea3a 100644 --- a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/virtual/DoubleVirtualDataBufferTest.java +++ b/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/virtual/DoubleVirtualDataBufferTest.java @@ -1,11 +1,11 @@ -package org.tensorflow.nio.buffer.impl.virtual; +package org.tensorflow.util.buffer.impl.virtual; -import org.tensorflow.nio.buffer.ByteDataBuffer; -import org.tensorflow.nio.buffer.DataBuffers; -import org.tensorflow.nio.buffer.DoubleDataBuffer; -import org.tensorflow.nio.buffer.DoubleDataBufferTestBase; -import org.tensorflow.nio.buffer.adapter.DoubleDataAdapter; -import org.tensorflow.nio.buffer.impl.jdk.ByteJdkDataBuffer; +import org.tensorflow.util.buffer.ByteDataBuffer; +import org.tensorflow.util.buffer.DataBuffers; +import org.tensorflow.util.buffer.DoubleDataBuffer; +import org.tensorflow.util.buffer.adapter.DoubleDataAdapter; +import org.tensorflow.util.buffer.impl.jdk.ByteJdkDataBuffer; +import org.tensorflow.util.buffer.DoubleDataBufferTestBase; public class DoubleVirtualDataBufferTest extends DoubleDataBufferTestBase { @@ -24,16 +24,16 @@ private static class TestDoubleAdapter implements DoubleDataAdapter { @Override public void writeDouble(ByteDataBuffer buffer, double value, long index) { long bits = Double.doubleToLongBits(value); - buffer.set((byte)((bits >> 56) & 0xFF), index); - buffer.set((byte)((bits >> 48) & 0xFF), index + 1); - buffer.set((byte)((bits >> 40) & 0xFF), index + 2); + buffer.setObject((byte)((bits >> 56) & 0xFF), index); + buffer.setObject((byte)((bits >> 48) & 0xFF), index + 1); + buffer.setObject((byte)((bits >> 40) & 0xFF), index + 2); } @Override public double readDouble(ByteDataBuffer buffer, long index) { - long byte7 = buffer.get(index); - long byte6 = buffer.get(index + 1); - long byte5 = buffer.get(index + 2); + long byte7 = buffer.getObject(index); + long byte6 = buffer.getObject(index + 1); + long byte5 = buffer.getObject(index + 2); return Double.longBitsToDouble(((byte7 & 0xFF) << 56) | ((byte6 & 0xFF) << 48) | ((byte5 & 0xFF) << 40)); } diff --git a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/virtual/FloatVirtualDataBufferTest.java b/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/virtual/FloatVirtualDataBufferTest.java similarity index 55% rename from tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/virtual/FloatVirtualDataBufferTest.java rename to tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/virtual/FloatVirtualDataBufferTest.java index 097bd62cd0e..ac19b3db51f 100644 --- a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/virtual/FloatVirtualDataBufferTest.java +++ b/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/virtual/FloatVirtualDataBufferTest.java @@ -1,11 +1,11 @@ -package org.tensorflow.nio.buffer.impl.virtual; +package org.tensorflow.util.buffer.impl.virtual; -import org.tensorflow.nio.buffer.ByteDataBuffer; -import org.tensorflow.nio.buffer.DataBuffers; -import org.tensorflow.nio.buffer.FloatDataBuffer; -import org.tensorflow.nio.buffer.FloatDataBufferTestBase; -import org.tensorflow.nio.buffer.adapter.FloatDataAdapter; -import org.tensorflow.nio.buffer.impl.jdk.ByteJdkDataBuffer; +import org.tensorflow.util.buffer.ByteDataBuffer; +import org.tensorflow.util.buffer.DataBuffers; +import org.tensorflow.util.buffer.FloatDataBuffer; +import org.tensorflow.util.buffer.adapter.FloatDataAdapter; +import org.tensorflow.util.buffer.impl.jdk.ByteJdkDataBuffer; +import org.tensorflow.util.buffer.FloatDataBufferTestBase; public class FloatVirtualDataBufferTest extends FloatDataBufferTestBase { @@ -19,14 +19,14 @@ private static class TestFloat16Adapter implements FloatDataAdapter { @Override public void writeFloat(ByteDataBuffer buffer, float value, long index) { int bits = Float.floatToIntBits(value); - buffer.set((byte)((bits >> 24) & 0xFF), index); - buffer.set((byte)((bits >> 16) & 0xFF), index + 1); + buffer.setObject((byte)((bits >> 24) & 0xFF), index); + buffer.setObject((byte)((bits >> 16) & 0xFF), index + 1); } @Override public float readFloat(ByteDataBuffer buffer, long index) { - int byte3 = buffer.get(index); - int byte2 = buffer.get(index + 1); + int byte3 = buffer.getObject(index); + int byte2 = buffer.getObject(index + 1); return Float.intBitsToFloat(((byte3 & 0xFF) << 24) | ((byte2 & 0xFF) << 16)); } diff --git a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/virtual/IntVirtualDataBufferTest.java b/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/virtual/IntVirtualDataBufferTest.java similarity index 52% rename from tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/virtual/IntVirtualDataBufferTest.java rename to tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/virtual/IntVirtualDataBufferTest.java index 1753963d581..a23748726c9 100644 --- a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/virtual/IntVirtualDataBufferTest.java +++ b/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/virtual/IntVirtualDataBufferTest.java @@ -1,11 +1,11 @@ -package org.tensorflow.nio.buffer.impl.virtual; +package org.tensorflow.util.buffer.impl.virtual; -import org.tensorflow.nio.buffer.ByteDataBuffer; -import org.tensorflow.nio.buffer.DataBuffers; -import org.tensorflow.nio.buffer.IntDataBuffer; -import org.tensorflow.nio.buffer.IntDataBufferTestBase; -import org.tensorflow.nio.buffer.adapter.IntDataAdapter; -import org.tensorflow.nio.buffer.impl.jdk.ByteJdkDataBuffer; +import org.tensorflow.util.buffer.ByteDataBuffer; +import org.tensorflow.util.buffer.DataBuffers; +import org.tensorflow.util.buffer.IntDataBuffer; +import org.tensorflow.util.buffer.adapter.IntDataAdapter; +import org.tensorflow.util.buffer.impl.jdk.ByteJdkDataBuffer; +import org.tensorflow.util.buffer.IntDataBufferTestBase; public class IntVirtualDataBufferTest extends IntDataBufferTestBase { @@ -23,14 +23,14 @@ private static class TestIntAdapter implements IntDataAdapter { @Override public void writeInt(ByteDataBuffer buffer, int value, long index) { - buffer.set((byte)(((value & 0x80000000) >> 24) | ((value & 0x7F) >> 7)), index); - buffer.set((byte)(value), index + 1); + buffer.setObject((byte)(((value & 0x80000000) >> 24) | ((value & 0x7F) >> 7)), index); + buffer.setObject((byte)(value), index + 1); } @Override public int readInt(ByteDataBuffer buffer, long index) { - int msb = buffer.get(index); - int lsb = buffer.get(index + 1); + int msb = buffer.getObject(index); + int lsb = buffer.getObject(index + 1); return ((msb & 0x80) << 24) | ((msb & 0x7F) << 7) | lsb; } diff --git a/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/virtual/LongVirtualDataBufferTest.java b/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/virtual/LongVirtualDataBufferTest.java new file mode 100644 index 00000000000..8302acc265b --- /dev/null +++ b/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/virtual/LongVirtualDataBufferTest.java @@ -0,0 +1,44 @@ +package org.tensorflow.util.buffer.impl.virtual; + +import org.tensorflow.util.buffer.ByteDataBuffer; +import org.tensorflow.util.buffer.DataBuffers; +import org.tensorflow.util.buffer.LongDataBuffer; +import org.tensorflow.util.buffer.adapter.LongDataAdapter; +import org.tensorflow.util.buffer.impl.jdk.ByteJdkDataBuffer; +import org.tensorflow.util.buffer.LongDataBufferTestBase; + +public class LongVirtualDataBufferTest extends LongDataBufferTestBase { + + @Override + protected LongDataBuffer allocate(long size) { + return DataBuffers.ofLongs(size, new TestLongAdapter()); + } + + @Override + protected long maxSize() { + return ByteJdkDataBuffer.MAX_SIZE / 3; + } + + private static class TestLongAdapter implements LongDataAdapter { + + @Override + public void writeLong(ByteDataBuffer buffer, long value, long index) { + buffer.setObject((byte)(((value >> 56) & 0x80) | ((value >> 16) & 0x7F)), index); + buffer.setObject((byte)((value >> 8) & 0xFF), index + 1); + buffer.setObject((byte)(value & 0xFF), index + 2); + } + + @Override + public long readLong(ByteDataBuffer buffer, long index) { + long msb = buffer.getObject(index); + long midb = buffer.getObject(index + 1); + long lsb = buffer.getObject(index + 2); + return ((msb & 0x80) << 56) | ((msb & 0x7F) << 16) | ((midb & 0xFF) << 8) | (lsb & 0xFF); + } + + @Override + public int sizeInBytes() { + return 3; + } + } +} diff --git a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/virtual/ShortVirtualDataBufferTest.java b/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/virtual/ShortVirtualDataBufferTest.java similarity index 56% rename from tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/virtual/ShortVirtualDataBufferTest.java rename to tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/virtual/ShortVirtualDataBufferTest.java index dcebda30ada..631ffdcdf0c 100644 --- a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/buffer/impl/virtual/ShortVirtualDataBufferTest.java +++ b/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/virtual/ShortVirtualDataBufferTest.java @@ -1,11 +1,11 @@ -package org.tensorflow.nio.buffer.impl.virtual; +package org.tensorflow.util.buffer.impl.virtual; -import org.tensorflow.nio.buffer.ByteDataBuffer; -import org.tensorflow.nio.buffer.DataBuffers; -import org.tensorflow.nio.buffer.ShortDataBuffer; -import org.tensorflow.nio.buffer.ShortDataBufferTestBase; -import org.tensorflow.nio.buffer.adapter.ShortDataAdapter; -import org.tensorflow.nio.buffer.impl.jdk.ByteJdkDataBuffer; +import org.tensorflow.util.buffer.ShortDataBufferTestBase; +import org.tensorflow.util.buffer.adapter.ShortDataAdapter; +import org.tensorflow.util.buffer.ByteDataBuffer; +import org.tensorflow.util.buffer.DataBuffers; +import org.tensorflow.util.buffer.ShortDataBuffer; +import org.tensorflow.util.buffer.impl.jdk.ByteJdkDataBuffer; public class ShortVirtualDataBufferTest extends ShortDataBufferTestBase { @@ -18,12 +18,12 @@ private static class TestShort8Adapter implements ShortDataAdapter { @Override public void writeShort(ByteDataBuffer buffer, short value, long index) { - buffer.set((byte)(((value & 0x8000) >> 8) | (value & 0x7F)), index); + buffer.setObject((byte)(((value & 0x8000) >> 8) | (value & 0x7F)), index); } @Override public short readShort(ByteDataBuffer buffer, long index) { - int b = buffer.get(index); + int b = buffer.getObject(index); return (short)(((b & 0x80) << 8) | (b & 0x7F)); } diff --git a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/BooleanNdArrayTestBase.java b/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/BooleanNdArrayTestBase.java similarity index 96% rename from tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/BooleanNdArrayTestBase.java rename to tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/BooleanNdArrayTestBase.java index 0191730a699..bed57c09601 100644 --- a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/BooleanNdArrayTestBase.java +++ b/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/BooleanNdArrayTestBase.java @@ -14,12 +14,12 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.nio.nd; +package org.tensorflow.util.ndarray; import static junit.framework.TestCase.assertTrue; import static org.junit.Assert.assertFalse; import static org.junit.Assert.fail; -import static org.tensorflow.nio.nd.NdArrays.vector; +import static org.tensorflow.util.ndarray.NdArrays.vectorOf; import java.nio.BufferOverflowException; import java.nio.BufferUnderflowException; @@ -49,7 +49,7 @@ public void iteratePrimitiveElements() { assertTrue(matrix3d.getBoolean(0, 1, 2)); matrix3d.elements(1).forEach(vector -> { - vector.set(vector(true, false, true, false, true)); + vector.set(vectorOf(true, false, true, false, true)); }); assertTrue(matrix3d.getBoolean(0, 0, 0)); diff --git a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/ByteNdArrayTestBase.java b/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/ByteNdArrayTestBase.java similarity index 95% rename from tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/ByteNdArrayTestBase.java rename to tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/ByteNdArrayTestBase.java index e44122d5dcd..9c756bfd945 100644 --- a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/ByteNdArrayTestBase.java +++ b/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/ByteNdArrayTestBase.java @@ -14,11 +14,11 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.nio.nd; +package org.tensorflow.util.ndarray; import static org.junit.Assert.assertEquals; import static org.junit.Assert.fail; -import static org.tensorflow.nio.nd.NdArrays.vector; +import static org.tensorflow.util.ndarray.NdArrays.vectorOf; import java.nio.BufferOverflowException; import java.nio.BufferUnderflowException; @@ -48,7 +48,7 @@ public void iteratePrimitiveElements() { assertEquals(2, matrix3d.getByte(0, 1, 2)); matrix3d.elements(1).forEach(vector -> { - vector.set(vector((byte)5, (byte)6, (byte)7, (byte)8, (byte)9)); + vector.set(NdArrays.vectorOf((byte)5, (byte)6, (byte)7, (byte)8, (byte)9)); }); assertEquals(5, matrix3d.getByte(0, 0, 0)); diff --git a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/DoubleNdArrayTestBase.java b/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/DoubleNdArrayTestBase.java similarity index 96% rename from tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/DoubleNdArrayTestBase.java rename to tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/DoubleNdArrayTestBase.java index 2a43c25e1dd..f7d9e556712 100644 --- a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/DoubleNdArrayTestBase.java +++ b/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/DoubleNdArrayTestBase.java @@ -14,11 +14,11 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.nio.nd; +package org.tensorflow.util.ndarray; import static org.junit.Assert.assertEquals; import static org.junit.Assert.fail; -import static org.tensorflow.nio.nd.NdArrays.vector; +import static org.tensorflow.util.ndarray.NdArrays.vectorOf; import java.nio.BufferOverflowException; import java.nio.BufferUnderflowException; @@ -48,7 +48,7 @@ public void iteratePrimitiveElements() { assertEquals(2.0, matrix3d.getDouble(0, 1, 2), 0.0); matrix3d.elements(1).forEach(vector -> { - vector.set(vector(5.0, 6.0, 7.0, 8.0, 9.0)); + vector.set(NdArrays.vectorOf(5.0, 6.0, 7.0, 8.0, 9.0)); }); assertEquals(5, matrix3d.getDouble(0, 0, 0), 0.0); diff --git a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/FloatNdArrayTestBase.java b/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/FloatNdArrayTestBase.java similarity index 96% rename from tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/FloatNdArrayTestBase.java rename to tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/FloatNdArrayTestBase.java index 1de2b459851..fcc5fd5b3cb 100644 --- a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/FloatNdArrayTestBase.java +++ b/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/FloatNdArrayTestBase.java @@ -14,11 +14,11 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.nio.nd; +package org.tensorflow.util.ndarray; import static org.junit.Assert.assertEquals; import static org.junit.Assert.fail; -import static org.tensorflow.nio.nd.NdArrays.vector; +import static org.tensorflow.util.ndarray.NdArrays.vectorOf; import java.nio.BufferOverflowException; import java.nio.BufferUnderflowException; @@ -48,7 +48,7 @@ public void iteratePrimitiveElements() { assertEquals(2.0f, matrix3d.getFloat(0, 1, 2), 0.0f); matrix3d.elements(1).forEach(vector -> { - vector.set(vector(5.0f, 6.0f, 7.0f, 8.0f, 9.0f)); + vector.set(NdArrays.vectorOf(5.0f, 6.0f, 7.0f, 8.0f, 9.0f)); }); assertEquals(5, matrix3d.getFloat(0, 0, 0), 0.0f); diff --git a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/IntNdArrayTestBase.java b/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/IntNdArrayTestBase.java similarity index 96% rename from tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/IntNdArrayTestBase.java rename to tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/IntNdArrayTestBase.java index 416d2557824..547e0b2505c 100644 --- a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/IntNdArrayTestBase.java +++ b/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/IntNdArrayTestBase.java @@ -14,11 +14,11 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.nio.nd; +package org.tensorflow.util.ndarray; import static org.junit.Assert.assertEquals; import static org.junit.Assert.fail; -import static org.tensorflow.nio.nd.NdArrays.vector; +import static org.tensorflow.util.ndarray.NdArrays.vectorOf; import java.nio.BufferOverflowException; import java.nio.BufferUnderflowException; @@ -48,7 +48,7 @@ public void iteratePrimitiveElements() { assertEquals(2, matrix3d.getInt(0, 1, 2)); matrix3d.elements(1).forEach(vector -> { - vector.set(vector(5, 6, 7, 8, 9)); + vector.set(NdArrays.vectorOf(5, 6, 7, 8, 9)); }); assertEquals(5, matrix3d.getInt(0, 0, 0)); diff --git a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/LongNdArrayTestBase.java b/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/LongNdArrayTestBase.java similarity index 98% rename from tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/LongNdArrayTestBase.java rename to tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/LongNdArrayTestBase.java index 0c53c1ac81e..d2841d5dce0 100644 --- a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/LongNdArrayTestBase.java +++ b/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/LongNdArrayTestBase.java @@ -14,7 +14,7 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.nio.nd; +package org.tensorflow.util.ndarray; import static org.junit.Assert.assertEquals; import static org.junit.Assert.fail; diff --git a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/NdArrayTestBase.java b/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/NdArrayTestBase.java similarity index 57% rename from tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/NdArrayTestBase.java rename to tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/NdArrayTestBase.java index af8ce4cc8a4..f275053e74a 100644 --- a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/NdArrayTestBase.java +++ b/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/NdArrayTestBase.java @@ -14,28 +14,28 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.nio.nd; +package org.tensorflow.util.ndarray; import static org.junit.Assert.assertEquals; import static org.junit.Assert.fail; -import static org.tensorflow.nio.nd.NdArrays.scalar; -import static org.tensorflow.nio.nd.NdArrays.vectorOf; -import static org.tensorflow.nio.nd.index.Indices.all; -import static org.tensorflow.nio.nd.index.Indices.at; -import static org.tensorflow.nio.nd.index.Indices.even; -import static org.tensorflow.nio.nd.index.Indices.flip; -import static org.tensorflow.nio.nd.index.Indices.from; -import static org.tensorflow.nio.nd.index.Indices.odd; -import static org.tensorflow.nio.nd.index.Indices.range; -import static org.tensorflow.nio.nd.index.Indices.seq; -import static org.tensorflow.nio.nd.index.Indices.to; +import static org.tensorflow.util.ndarray.NdArrays.scalarOf; +import static org.tensorflow.util.ndarray.NdArrays.vectorOfObjects; +import static org.tensorflow.util.ndarray.index.Indices.all; +import static org.tensorflow.util.ndarray.index.Indices.at; +import static org.tensorflow.util.ndarray.index.Indices.even; +import static org.tensorflow.util.ndarray.index.Indices.flip; +import static org.tensorflow.util.ndarray.index.Indices.from; +import static org.tensorflow.util.ndarray.index.Indices.odd; +import static org.tensorflow.util.ndarray.index.Indices.range; +import static org.tensorflow.util.ndarray.index.Indices.seq; +import static org.tensorflow.util.ndarray.index.Indices.to; import java.nio.BufferOverflowException; import java.nio.BufferUnderflowException; import java.util.concurrent.atomic.AtomicLong; import java.util.stream.LongStream; import org.junit.Test; -import org.tensorflow.nio.buffer.DataBuffer; +import org.tensorflow.util.buffer.DataBuffer; public abstract class NdArrayTestBase { @@ -66,47 +66,47 @@ public void shapeAndSizes() { @Test public void setAndGetValues() { NdArray matrix = allocate(Shape.make(5, 4)); - assertEquals(zeroOrNull(), matrix.getValue(3, 3)); + assertEquals(zeroOrNull(), matrix.getObject(3, 3)); - matrix.setValue(valueOf(10L), 3, 3); - assertEquals(valueOf(10L), matrix.getValue(3, 3)); + matrix.setObject(valueOf(10L), 3, 3); + assertEquals(valueOf(10L), matrix.getObject(3, 3)); try { - matrix.setValue(valueOf(10L), 3, 4); + matrix.setObject(valueOf(10L), 3, 4); fail(); } catch (IndexOutOfBoundsException e) { // as expected } try { - matrix.setValue(valueOf(10L), -1, 3); + matrix.setObject(valueOf(10L), -1, 3); fail(); } catch (IndexOutOfBoundsException e) { // as expected } try { - matrix.getValue(3); + matrix.getObject(3); fail(); } catch (IllegalRankException e) { // as expected } try { - matrix.setValue(valueOf(10L), 3); + matrix.setObject(valueOf(10L), 3); fail(); } catch (IllegalRankException e) { // as expected } NdArray matrix2 = allocate(Shape.make(3, 2)) - .set(vectorOf(valueOf(1L), valueOf(2L)), 0) - .set(vectorOf(valueOf(3L), valueOf(4L)), 1) - .setValue(valueOf(5L), 2, 0) - .setValue(valueOf(6L), 2, 1); - - assertEquals(valueOf(1L), matrix2.getValue(0, 0)); - assertEquals(valueOf(2L), matrix2.getValue(0, 1)); - assertEquals(valueOf(3L), matrix2.getValue(1, 0)); - assertEquals(valueOf(4L), matrix2.getValue(1, 1)); - assertEquals(valueOf(5L), matrix2.getValue(2, 0)); - assertEquals(valueOf(6L), matrix2.getValue(2, 1)); + .set(vectorOfObjects(valueOf(1L), valueOf(2L)), 0) + .set(vectorOfObjects(valueOf(3L), valueOf(4L)), 1) + .setObject(valueOf(5L), 2, 0) + .setObject(valueOf(6L), 2, 1); + + assertEquals(valueOf(1L), matrix2.getObject(0, 0)); + assertEquals(valueOf(2L), matrix2.getObject(0, 1)); + assertEquals(valueOf(3L), matrix2.getObject(1, 0)); + assertEquals(valueOf(4L), matrix2.getObject(1, 1)); + assertEquals(valueOf(5L), matrix2.getObject(2, 0)); + assertEquals(valueOf(6L), matrix2.getObject(2, 1)); } @Test @@ -114,22 +114,22 @@ public void iterateElements() { NdArray matrix3d = allocate(Shape.make(5, 4, 5)); matrix3d.scalars().forEachIndexed((coords, scalar) -> { - scalar.setValue(valueOf(coords[2])); + scalar.setObject(valueOf(coords[2])); }); - assertEquals(valueOf(0L), matrix3d.getValue(0, 0, 0)); - assertEquals(valueOf(1L), matrix3d.getValue(0, 0, 1)); - assertEquals(valueOf(4L), matrix3d.getValue(0, 0, 4)); - assertEquals(valueOf(2L), matrix3d.getValue(0, 1, 2)); + assertEquals(valueOf(0L), matrix3d.getObject(0, 0, 0)); + assertEquals(valueOf(1L), matrix3d.getObject(0, 0, 1)); + assertEquals(valueOf(4L), matrix3d.getObject(0, 0, 4)); + assertEquals(valueOf(2L), matrix3d.getObject(0, 1, 2)); matrix3d.elements(1).forEach(vector -> { - vector.set(vectorOf(valueOf(5L), valueOf(6L), valueOf(7L), valueOf(8L), valueOf(9L))); + vector.set(vectorOfObjects(valueOf(5L), valueOf(6L), valueOf(7L), valueOf(8L), valueOf(9L))); }); - assertEquals(valueOf(5L), matrix3d.getValue(0, 0, 0)); - assertEquals(valueOf(6L), matrix3d.getValue(0, 0, 1)); - assertEquals(valueOf(9L), matrix3d.getValue(0, 0, 4)); - assertEquals(valueOf(7L), matrix3d.getValue(0, 1, 2)); + assertEquals(valueOf(5L), matrix3d.getObject(0, 0, 0)); + assertEquals(valueOf(6L), matrix3d.getObject(0, 0, 1)); + assertEquals(valueOf(9L), matrix3d.getObject(0, 0, 4)); + assertEquals(valueOf(7L), matrix3d.getObject(0, 1, 2)); AtomicLong value = new AtomicLong(); matrix3d.elements(0).forEach(matrix -> { @@ -143,7 +143,7 @@ public void iterateElements() { vector.scalars().forEach(scalar -> { assertEquals(0L, scalar.shape().numDimensions()) ; - scalar.setValue(valueOf(value.getAndIncrement())); + scalar.setObject(valueOf(value.getAndIncrement())); try { scalar.elements(0); fail(); @@ -153,12 +153,12 @@ public void iterateElements() { }); }); }); - assertEquals(valueOf(0L), matrix3d.getValue(0, 0, 0)); - assertEquals(valueOf(5L), matrix3d.getValue(0, 1, 0)); - assertEquals(valueOf(9L), matrix3d.getValue(0, 1, 4)); - assertEquals(valueOf(20L), matrix3d.getValue(1, 0, 0)); - assertEquals(valueOf(25L), matrix3d.getValue(1, 1, 0)); - assertEquals(valueOf(99L), matrix3d.getValue(4, 3, 4)); + assertEquals(valueOf(0L), matrix3d.getObject(0, 0, 0)); + assertEquals(valueOf(5L), matrix3d.getObject(0, 1, 0)); + assertEquals(valueOf(9L), matrix3d.getObject(0, 1, 4)); + assertEquals(valueOf(20L), matrix3d.getObject(1, 0, 0)); + assertEquals(valueOf(25L), matrix3d.getObject(1, 1, 0)); + assertEquals(valueOf(99L), matrix3d.getObject(4, 3, 4)); } @Test @@ -166,112 +166,112 @@ public void slices() { NdArray matrix3d = allocate(Shape.make(5, 4, 5)); T val100 = valueOf(100L); - matrix3d.setValue(val100, 1, 0, 0); + matrix3d.setObject(val100, 1, 0, 0); T val101 = valueOf(101L); - matrix3d.setValue(val101, 1, 0, 1); + matrix3d.setObject(val101, 1, 0, 1); // Vector (1,0,*) NdArray vector10X = matrix3d.get(1, 0); assertEquals(Shape.make(5), vector10X.shape()); - assertEquals(val100, vector10X.getValue(0)); - assertEquals(val101, vector10X.getValue(1)); + assertEquals(val100, vector10X.getObject(0)); + assertEquals(val101, vector10X.getObject(1)); T val102 = valueOf(102L); - vector10X.setValue(val102, 2); - assertEquals(val102, vector10X.getValue(2)); - assertEquals(val102, matrix3d.getValue(1, 0, 2)); + vector10X.setObject(val102, 2); + assertEquals(val102, vector10X.getObject(2)); + assertEquals(val102, matrix3d.getObject(1, 0, 2)); // Vector (*,0,0) NdArray vectorX00 = matrix3d.slice(all(), at(0), at(0)); assertEquals(Shape.make(5), vectorX00.shape()); - assertEquals(val100, vectorX00.getValue(1)); + assertEquals(val100, vectorX00.getObject(1)); T val200 = valueOf(200L); - vectorX00.setValue(val200, 2); - assertEquals(val200, vectorX00.getValue(2)); - assertEquals(val200, matrix3d.getValue(2, 0, 0)); + vectorX00.setObject(val200, 2); + assertEquals(val200, vectorX00.getObject(2)); + assertEquals(val200, matrix3d.getObject(2, 0, 0)); // Vector (1,0,[2,0]) NdArray vector10_20 = matrix3d.slice(at(1), at(0), seq(2, 0)); assertEquals(vector10_20.shape(), Shape.make(2)); - assertEquals(val102, vector10_20.getValue(0)); - assertEquals(val100, vector10_20.getValue(1)); + assertEquals(val102, vector10_20.getObject(0)); + assertEquals(val100, vector10_20.getObject(1)); // Vector (1,0,[even]) NdArray vector10_even = matrix3d.slice(at(1), at(0), even()); assertEquals(vector10_even.shape(), Shape.make(3)); - assertEquals(val100, vector10_even.getValue(0)); - assertEquals(val102, vector10_even.getValue(1)); + assertEquals(val100, vector10_even.getObject(0)); + assertEquals(val102, vector10_even.getObject(1)); // Vector ([odd]) from vector (1,0,[even]) NdArray vector10_even_odd = vector10_even.slice(odd()); assertEquals(vector10_even_odd.shape(), Shape.make(1)); - assertEquals(val102, vector10_even_odd.getValue(0)); + assertEquals(val102, vector10_even_odd.getObject(0)); // Vector (1,0,[flip]) NdArray vector10_flip = matrix3d.slice(at(1), at(0), flip()); assertEquals(vector10_flip.shape(), Shape.make(5)); - assertEquals(val100, vector10_flip.getValue(4)); - assertEquals(val101, vector10_flip.getValue(3)); + assertEquals(val100, vector10_flip.getObject(4)); + assertEquals(val101, vector10_flip.getObject(3)); // Vector (1,0,[from 1]) from vector (1,0,*) NdArray vector10_1toX = vector10X.slice(from(1)); assertEquals(vector10_1toX.shape(), Shape.make(4)); - assertEquals(val101, vector10_1toX.getValue(0)); - assertEquals(val102, vector10_1toX.getValue(1)); + assertEquals(val101, vector10_1toX.getObject(0)); + assertEquals(val102, vector10_1toX.getObject(1)); // Vector (1,0,[to 1]) from vector (1,0,*) NdArray vector10_Xto1 = vector10X.slice(to(2)); assertEquals(vector10_Xto1.shape(), Shape.make(2)); - assertEquals(val100, vector10_Xto1.getValue(0)); - assertEquals(val101, vector10_Xto1.getValue(1)); + assertEquals(val100, vector10_Xto1.getObject(0)); + assertEquals(val101, vector10_Xto1.getObject(1)); // Vector (1,0,[1 to 3]) NdArray vector10_1to3 = matrix3d.slice(at(1), at(0), range(1, 3)); assertEquals(vector10_1to3.shape(), Shape.make(2)); - assertEquals(val101, vector10_1to3.getValue(0)); - assertEquals(val102, vector10_1to3.getValue(1)); + assertEquals(val101, vector10_1to3.getObject(0)); + assertEquals(val102, vector10_1to3.getObject(1)); // Scalar (1,0,0) from vector (1,0,*) NdArray scalar100 = vector10X.get(0); assertEquals(Shape.make(), scalar100.shape()); - assertEquals(val100, scalar100.getValue()); + assertEquals(val100, scalar100.getObject()); // Slice scalar (1,0,z) - LongNdArray z = scalar(2L); + LongNdArray z = NdArrays.scalarOf(2L); NdArray scalar102 = matrix3d.slice(at(1), at(0), at(z)); assertEquals(scalar102.shape(), Shape.make()); - assertEquals(val102, scalar102.getValue()); + assertEquals(val102, scalar102.getObject()); // Slicing the 3D matrix so we only keep the first element of the second dimension NdArray matrix_X0Z = matrix3d.slice(all(), at(0)); assertEquals(2, matrix_X0Z.rank()); assertEquals(Shape.make(5, 5), matrix_X0Z.shape()); - assertEquals(val100, matrix_X0Z.getValue(1, 0)); - assertEquals(val101, matrix_X0Z.getValue(1, 1)); - assertEquals(val200, matrix_X0Z.getValue(2, 0)); + assertEquals(val100, matrix_X0Z.getObject(1, 0)); + assertEquals(val101, matrix_X0Z.getObject(1, 1)); + assertEquals(val200, matrix_X0Z.getObject(2, 0)); } @Test public void writeAndReadWithBuffers() { DataBuffer buffer = allocateBuffer(15L); for (long val = 0L; val < buffer.size(); ++val) { - buffer.set(valueOf(val), val); + buffer.setObject(valueOf(val), val); } NdArray matrix = allocate(Shape.make(3, 5)); matrix.write(buffer); - assertEquals(valueOf(0L), matrix.getValue(0, 0)); - assertEquals(valueOf(4L), matrix.getValue(0, 4)); - assertEquals(valueOf(5L), matrix.getValue(1, 0)); - assertEquals(valueOf(10L), matrix.getValue(2, 0)); - assertEquals(valueOf(14L), matrix.getValue(2, 4)); + assertEquals(valueOf(0L), matrix.getObject(0, 0)); + assertEquals(valueOf(4L), matrix.getObject(0, 4)); + assertEquals(valueOf(5L), matrix.getObject(1, 0)); + assertEquals(valueOf(10L), matrix.getObject(2, 0)); + assertEquals(valueOf(14L), matrix.getObject(2, 4)); - matrix.setValue(valueOf(100L), 1, 0); + matrix.setObject(valueOf(100L), 1, 0); matrix.read(buffer); - assertEquals(valueOf(0L), buffer.get(0)); - assertEquals(valueOf(4L), buffer.get(4)); - assertEquals(valueOf(100L), buffer.get(5)); - assertEquals(valueOf(10L), buffer.get(10)); - assertEquals(valueOf(14L), buffer.get(14)); + assertEquals(valueOf(0L), buffer.getObject(0)); + assertEquals(valueOf(4L), buffer.getObject(4)); + assertEquals(valueOf(100L), buffer.getObject(5)); + assertEquals(valueOf(10L), buffer.getObject(10)); + assertEquals(valueOf(14L), buffer.getObject(14)); } @Test @@ -279,15 +279,15 @@ public void ndArrayCopies() { NdArray matrixA = allocate(Shape.make(3, 5)); AtomicLong value = new AtomicLong(); - matrixA.scalars().forEach(e -> e.setValue(valueOf(value.getAndIncrement()))); + matrixA.scalars().forEach(e -> e.setObject(valueOf(value.getAndIncrement()))); - NdArray matrixB = allocate(Shape.make(3, 5)).setValue(valueOf(100L), 1, 0); + NdArray matrixB = allocate(Shape.make(3, 5)).setObject(valueOf(100L), 1, 0); matrixA.copyTo(matrixB); - assertEquals(valueOf(0L), matrixB.getValue(0, 0)); - assertEquals(valueOf(4L), matrixB.getValue(0, 4)); - assertEquals(valueOf(5L), matrixB.getValue(1, 0)); - assertEquals(valueOf(10L), matrixB.getValue(2, 0)); - assertEquals(valueOf(14L), matrixB.getValue(2, 4)); + assertEquals(valueOf(0L), matrixB.getObject(0, 0)); + assertEquals(valueOf(4L), matrixB.getObject(0, 4)); + assertEquals(valueOf(5L), matrixB.getObject(1, 0)); + assertEquals(valueOf(10L), matrixB.getObject(2, 0)); + assertEquals(valueOf(14L), matrixB.getObject(2, 4)); NdArray matrixC = allocate(Shape.make(3, 4)); try { @@ -305,18 +305,18 @@ public void writeAndReadWithArrays() { NdArray matrix = allocate(Shape.make(3, 4)); matrix.write(values); - assertEquals(valueOf(0L), matrix.getValue(0, 0)); - assertEquals(valueOf(3L), matrix.getValue(0, 3)); - assertEquals(valueOf(4L), matrix.getValue(1, 0)); - assertEquals(valueOf(11L), matrix.getValue(2, 3)); + assertEquals(valueOf(0L), matrix.getObject(0, 0)); + assertEquals(valueOf(3L), matrix.getObject(0, 3)); + assertEquals(valueOf(4L), matrix.getObject(1, 0)); + assertEquals(valueOf(11L), matrix.getObject(2, 3)); matrix.write(values, 4); - assertEquals(valueOf(4L), matrix.getValue(0, 0)); - assertEquals(valueOf(7L), matrix.getValue(0, 3)); - assertEquals(valueOf(8L), matrix.getValue(1, 0)); - assertEquals(valueOf(15L), matrix.getValue(2, 3)); + assertEquals(valueOf(4L), matrix.getObject(0, 0)); + assertEquals(valueOf(7L), matrix.getObject(0, 3)); + assertEquals(valueOf(8L), matrix.getObject(1, 0)); + assertEquals(valueOf(15L), matrix.getObject(2, 3)); - matrix.setValue(valueOf(100L), 1, 0); + matrix.setObject(valueOf(100L), 1, 0); matrix.read(values, 2); assertEquals(valueOf(4L), values[2]); assertEquals(valueOf(7L), values[5]); diff --git a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/ShapeTest.java b/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/ShapeTest.java similarity index 98% rename from tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/ShapeTest.java rename to tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/ShapeTest.java index 10c442e540f..d84ddf042c2 100644 --- a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/ShapeTest.java +++ b/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/ShapeTest.java @@ -14,7 +14,7 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.nio.nd; +package org.tensorflow.util.ndarray; import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertEquals; diff --git a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/ShortNdArrayTestBase.java b/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/ShortNdArrayTestBase.java similarity index 95% rename from tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/ShortNdArrayTestBase.java rename to tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/ShortNdArrayTestBase.java index c2318282b44..ea0982b0363 100644 --- a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/ShortNdArrayTestBase.java +++ b/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/ShortNdArrayTestBase.java @@ -14,11 +14,11 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.nio.nd; +package org.tensorflow.util.ndarray; import static org.junit.Assert.assertEquals; import static org.junit.Assert.fail; -import static org.tensorflow.nio.nd.NdArrays.vector; +import static org.tensorflow.util.ndarray.NdArrays.vectorOf; import java.nio.BufferOverflowException; import java.nio.BufferUnderflowException; @@ -48,7 +48,7 @@ public void iteratePrimitiveElements() { assertEquals(2, matrix3d.getShort(0, 1, 2)); matrix3d.elements(1).forEach(vector -> { - vector.set(vector((short)5, (short)6, (short)7, (short)8, (short)9)); + vector.set(NdArrays.vectorOf((short)5, (short)6, (short)7, (short)8, (short)9)); }); assertEquals(5, matrix3d.getShort(0, 0, 0)); diff --git a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/impl/dense/BooleanDenseNdArrayTest.java b/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/impl/dense/BooleanDenseNdArrayTest.java similarity index 74% rename from tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/impl/dense/BooleanDenseNdArrayTest.java rename to tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/impl/dense/BooleanDenseNdArrayTest.java index b2d0d579f7d..d1e07e75e65 100644 --- a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/impl/dense/BooleanDenseNdArrayTest.java +++ b/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/impl/dense/BooleanDenseNdArrayTest.java @@ -14,14 +14,14 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.nio.nd.impl.dense; +package org.tensorflow.util.ndarray.impl.dense; -import org.tensorflow.nio.buffer.DataBuffer; -import org.tensorflow.nio.buffer.DataBuffers; -import org.tensorflow.nio.nd.BooleanNdArray; -import org.tensorflow.nio.nd.BooleanNdArrayTestBase; -import org.tensorflow.nio.nd.NdArrays; -import org.tensorflow.nio.nd.Shape; +import org.tensorflow.util.ndarray.BooleanNdArrayTestBase; +import org.tensorflow.util.buffer.DataBuffer; +import org.tensorflow.util.buffer.DataBuffers; +import org.tensorflow.util.ndarray.BooleanNdArray; +import org.tensorflow.util.ndarray.NdArrays; +import org.tensorflow.util.ndarray.Shape; public class BooleanDenseNdArrayTest extends BooleanNdArrayTestBase { diff --git a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/impl/dense/ByteDenseNdArrayTest.java b/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/impl/dense/ByteDenseNdArrayTest.java similarity index 74% rename from tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/impl/dense/ByteDenseNdArrayTest.java rename to tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/impl/dense/ByteDenseNdArrayTest.java index 72eac334472..03b04458cf9 100644 --- a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/impl/dense/ByteDenseNdArrayTest.java +++ b/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/impl/dense/ByteDenseNdArrayTest.java @@ -14,14 +14,14 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.nio.nd.impl.dense; +package org.tensorflow.util.ndarray.impl.dense; -import org.tensorflow.nio.buffer.DataBuffer; -import org.tensorflow.nio.buffer.DataBuffers; -import org.tensorflow.nio.nd.ByteNdArray; -import org.tensorflow.nio.nd.ByteNdArrayTestBase; -import org.tensorflow.nio.nd.NdArrays; -import org.tensorflow.nio.nd.Shape; +import org.tensorflow.util.ndarray.ByteNdArrayTestBase; +import org.tensorflow.util.buffer.DataBuffer; +import org.tensorflow.util.buffer.DataBuffers; +import org.tensorflow.util.ndarray.ByteNdArray; +import org.tensorflow.util.ndarray.NdArrays; +import org.tensorflow.util.ndarray.Shape; public class ByteDenseNdArrayTest extends ByteNdArrayTestBase { diff --git a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/impl/dense/DoubleDenseNdArrayTest.java b/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/impl/dense/DoubleDenseNdArrayTest.java similarity index 74% rename from tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/impl/dense/DoubleDenseNdArrayTest.java rename to tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/impl/dense/DoubleDenseNdArrayTest.java index 7928ae61c3c..e9189c8f7a2 100644 --- a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/impl/dense/DoubleDenseNdArrayTest.java +++ b/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/impl/dense/DoubleDenseNdArrayTest.java @@ -14,14 +14,14 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.nio.nd.impl.dense; +package org.tensorflow.util.ndarray.impl.dense; -import org.tensorflow.nio.buffer.DataBuffer; -import org.tensorflow.nio.buffer.DataBuffers; -import org.tensorflow.nio.nd.DoubleNdArray; -import org.tensorflow.nio.nd.DoubleNdArrayTestBase; -import org.tensorflow.nio.nd.NdArrays; -import org.tensorflow.nio.nd.Shape; +import org.tensorflow.util.ndarray.DoubleNdArrayTestBase; +import org.tensorflow.util.buffer.DataBuffer; +import org.tensorflow.util.buffer.DataBuffers; +import org.tensorflow.util.ndarray.DoubleNdArray; +import org.tensorflow.util.ndarray.NdArrays; +import org.tensorflow.util.ndarray.Shape; public class DoubleDenseNdArrayTest extends DoubleNdArrayTestBase { diff --git a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/impl/dense/FloatDenseNdArrayTest.java b/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/impl/dense/FloatDenseNdArrayTest.java similarity index 74% rename from tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/impl/dense/FloatDenseNdArrayTest.java rename to tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/impl/dense/FloatDenseNdArrayTest.java index 636fe2301ab..ef9db717123 100644 --- a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/impl/dense/FloatDenseNdArrayTest.java +++ b/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/impl/dense/FloatDenseNdArrayTest.java @@ -14,14 +14,14 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.nio.nd.impl.dense; +package org.tensorflow.util.ndarray.impl.dense; -import org.tensorflow.nio.buffer.DataBuffer; -import org.tensorflow.nio.buffer.DataBuffers; -import org.tensorflow.nio.nd.FloatNdArray; -import org.tensorflow.nio.nd.FloatNdArrayTestBase; -import org.tensorflow.nio.nd.NdArrays; -import org.tensorflow.nio.nd.Shape; +import org.tensorflow.util.ndarray.FloatNdArrayTestBase; +import org.tensorflow.util.buffer.DataBuffer; +import org.tensorflow.util.buffer.DataBuffers; +import org.tensorflow.util.ndarray.FloatNdArray; +import org.tensorflow.util.ndarray.NdArrays; +import org.tensorflow.util.ndarray.Shape; public class FloatDenseNdArrayTest extends FloatNdArrayTestBase { diff --git a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/impl/dense/IntDenseNdArrayTest.java b/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/impl/dense/IntDenseNdArrayTest.java similarity index 74% rename from tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/impl/dense/IntDenseNdArrayTest.java rename to tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/impl/dense/IntDenseNdArrayTest.java index 879b6431dec..c67907979fe 100644 --- a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/impl/dense/IntDenseNdArrayTest.java +++ b/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/impl/dense/IntDenseNdArrayTest.java @@ -14,14 +14,14 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.nio.nd.impl.dense; +package org.tensorflow.util.ndarray.impl.dense; -import org.tensorflow.nio.buffer.DataBuffer; -import org.tensorflow.nio.buffer.DataBuffers; -import org.tensorflow.nio.nd.IntNdArray; -import org.tensorflow.nio.nd.IntNdArrayTestBase; -import org.tensorflow.nio.nd.NdArrays; -import org.tensorflow.nio.nd.Shape; +import org.tensorflow.util.ndarray.IntNdArrayTestBase; +import org.tensorflow.util.buffer.DataBuffer; +import org.tensorflow.util.buffer.DataBuffers; +import org.tensorflow.util.ndarray.IntNdArray; +import org.tensorflow.util.ndarray.NdArrays; +import org.tensorflow.util.ndarray.Shape; public class IntDenseNdArrayTest extends IntNdArrayTestBase { diff --git a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/impl/dense/LongDenseNdArrayTest.java b/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/impl/dense/LongDenseNdArrayTest.java similarity index 74% rename from tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/impl/dense/LongDenseNdArrayTest.java rename to tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/impl/dense/LongDenseNdArrayTest.java index d3ed51db9eb..5eee4fafbaa 100644 --- a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/impl/dense/LongDenseNdArrayTest.java +++ b/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/impl/dense/LongDenseNdArrayTest.java @@ -14,14 +14,14 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.nio.nd.impl.dense; +package org.tensorflow.util.ndarray.impl.dense; -import org.tensorflow.nio.buffer.DataBuffer; -import org.tensorflow.nio.buffer.DataBuffers; -import org.tensorflow.nio.nd.LongNdArray; -import org.tensorflow.nio.nd.LongNdArrayTestBase; -import org.tensorflow.nio.nd.NdArrays; -import org.tensorflow.nio.nd.Shape; +import org.tensorflow.util.buffer.DataBuffer; +import org.tensorflow.util.buffer.DataBuffers; +import org.tensorflow.util.ndarray.LongNdArray; +import org.tensorflow.util.ndarray.LongNdArrayTestBase; +import org.tensorflow.util.ndarray.NdArrays; +import org.tensorflow.util.ndarray.Shape; public class LongDenseNdArrayTest extends LongNdArrayTestBase { diff --git a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/impl/dense/ShortDenseNdArrayTest.java b/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/impl/dense/ShortDenseNdArrayTest.java similarity index 74% rename from tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/impl/dense/ShortDenseNdArrayTest.java rename to tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/impl/dense/ShortDenseNdArrayTest.java index 83e430210a8..a019fa7c59e 100644 --- a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/impl/dense/ShortDenseNdArrayTest.java +++ b/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/impl/dense/ShortDenseNdArrayTest.java @@ -14,14 +14,14 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.nio.nd.impl.dense; +package org.tensorflow.util.ndarray.impl.dense; -import org.tensorflow.nio.buffer.DataBuffer; -import org.tensorflow.nio.buffer.DataBuffers; -import org.tensorflow.nio.nd.ShortNdArray; -import org.tensorflow.nio.nd.ShortNdArrayTestBase; -import org.tensorflow.nio.nd.NdArrays; -import org.tensorflow.nio.nd.Shape; +import org.tensorflow.util.buffer.DataBuffer; +import org.tensorflow.util.buffer.DataBuffers; +import org.tensorflow.util.ndarray.NdArrays; +import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.ndarray.ShortNdArray; +import org.tensorflow.util.ndarray.ShortNdArrayTestBase; public class ShortDenseNdArrayTest extends ShortNdArrayTestBase { diff --git a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/impl/dense/StringDenseNdArrayTest.java b/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/impl/dense/StringDenseNdArrayTest.java similarity index 77% rename from tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/impl/dense/StringDenseNdArrayTest.java rename to tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/impl/dense/StringDenseNdArrayTest.java index d095c2f4d6e..e441c1fe3d5 100644 --- a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/impl/dense/StringDenseNdArrayTest.java +++ b/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/impl/dense/StringDenseNdArrayTest.java @@ -14,14 +14,14 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.nio.nd.impl.dense; - -import org.tensorflow.nio.buffer.DataBuffer; -import org.tensorflow.nio.buffer.DataBuffers; -import org.tensorflow.nio.nd.NdArray; -import org.tensorflow.nio.nd.NdArrayTestBase; -import org.tensorflow.nio.nd.NdArrays; -import org.tensorflow.nio.nd.Shape; +package org.tensorflow.util.ndarray.impl.dense; + +import org.tensorflow.util.buffer.DataBuffer; +import org.tensorflow.util.buffer.DataBuffers; +import org.tensorflow.util.ndarray.NdArray; +import org.tensorflow.util.ndarray.NdArrayTestBase; +import org.tensorflow.util.ndarray.NdArrays; +import org.tensorflow.util.ndarray.Shape; public class StringDenseNdArrayTest extends NdArrayTestBase { diff --git a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/impl/sequence/ElementSequenceTest.java b/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/impl/sequence/ElementSequenceTest.java similarity index 88% rename from tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/impl/sequence/ElementSequenceTest.java rename to tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/impl/sequence/ElementSequenceTest.java index 89547713485..b52be3181cb 100644 --- a/tensorflow-utils/nio-utils/src/test/java/org/tensorflow/nio/nd/impl/sequence/ElementSequenceTest.java +++ b/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/impl/sequence/ElementSequenceTest.java @@ -1,4 +1,4 @@ -package org.tensorflow.nio.nd.impl.sequence; +package org.tensorflow.util.ndarray.impl.sequence; import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertEquals; @@ -7,11 +7,11 @@ import java.util.Arrays; import java.util.List; import org.junit.Test; -import org.tensorflow.nio.nd.IntNdArray; -import org.tensorflow.nio.nd.NdArraySequence; -import org.tensorflow.nio.nd.NdArrays; -import org.tensorflow.nio.nd.Shape; -import org.tensorflow.nio.nd.impl.AbstractNdArray; +import org.tensorflow.util.ndarray.IntNdArray; +import org.tensorflow.util.ndarray.NdArraySequence; +import org.tensorflow.util.ndarray.NdArrays; +import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.ndarray.impl.AbstractNdArray; public class ElementSequenceTest { diff --git a/tensorflow-utils/src/test/resources/COPYRIGHT.txt b/tensorflow-utils/src/test/resources/COPYRIGHT.txt new file mode 100644 index 00000000000..5e7bd50bb48 --- /dev/null +++ b/tensorflow-utils/src/test/resources/COPYRIGHT.txt @@ -0,0 +1 @@ +All images in this folder and its subfolders are free of any copyright. \ No newline at end of file diff --git a/tensorflow-utils/src/test/resources/castle.jpg b/tensorflow-utils/src/test/resources/castle.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c5b07b4bc2a47a14c91184211a08fda45a2d79d9 GIT binary patch literal 436164 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%0D*hK^mNe+a-^+ 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

9xXu2LpQ4sa5`7w#gVi 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%0A=!>Nz zW#jj#xaw?tT?CfQq_lIazGxWAw)w!S&2QaX$9pO%3d(JK#60j+c9JCzq{3jhF#0H$M~|)7S-2 zplk;{%|JZ1Dt<6ANHZ?FNM$)6zrV#TF^hB4{IwcJocH#r?6~GHI#Dc1I*BrToR|>zckYscl|$D(l$BBt!iM1Ednla zzAESzNVAe?2a+$|gErzXR~VqSDEo6jUERroJxZ#_xFUln_=;&T0SS)ED1>gMZ>mN; zs;NgE1?Zpq)C55@FAPR2G-7p2=XTHu%O6p!V7l5hiFnH$vs8meQ@wy7K*0{`8`QNm zwO4*1V;dy7c_lc?>=b>gQE{skmAYFbk+6|K{vjs}4QY&4z9g0)1acSlMjDh>bzJT3 z;gQQ9she;nR1zkE0sfRy#Y_kam05RJ z5maqK z*2#s{{ZEjv06ky5OATgTS~6*8&RArFPy+G}2NXpPea=0NZX&f|pPzcTCLwI+IX?6k z+Yqm*fx#I2eAKZ=bDjqNoi)C2Sts_NXlcV5u1d=M@D{ZU*@pPXdaZWDYQD2WkHRWAjB58|q#6AZ%(1 zB9}`NeX&GA6qe+WcP4`N^c)kAcr+27EH0(occR5G5=c16s@8~_K>UCY85A@-rkn$V z@+z}a^8WzrDx&`YFK=&ZfO$}#xT31g-)bV*2FKj-QmUN}PUEqesr zUf`{&O14pu(iUTjKDuVsqBG_fB{du%sII5- zg}0dbo%DWzL7C8PAa6JLX{Iq`Thz3|^AF=lpt2LkfbG>Hl^jo`o zm{^!DgEY}Mx#t4B{d{-k`#lJCguTReq@73}SqBI`zV*I))^9k_wy=iTSTmp`dY)Da zaaz`1H{wqb#ck9Udr6hVW7KkV6P?9!>a`hX@h#eCmPIp(HZjMLquX(slGU+c{6y*QqS#Pf#D{Ps9DKvG%)B`{H&@4IK~0^KQ%eJSBv$3!`qu{(QMMHtDR8H zbD)oJy-y^?=cPSI!^Y7603Pj%o=O9^-m&`ICNi3eti{*#kWEV0KTobAbV^t$YU<{BHPPti^21W>WE($O;Cn>n(NozJC}M zeA%-kM{^Xs16pC7)O<}Vu9)!vU_`AM`t!{&1ot}85#370Jpn~AL%S~efh*2whKjS0 zH>fFYz#eE+E~51uf}Qb-x{Iy)Q(S_Og)9cIQPNFkL0%rPS!FQEA&Jw|f;l6#G;8(F zk`_oHT%Ap+iT0_g%IfwD3t@0WZaymeER6dup7Y33GBO6EnwsC>c~p*eIU^KqT|#wW z7j4_IrjoQe7lf{EpDP&=r`0QZRQ;+m*Kb0!c-Apxc^blT{3ahnqu)OC$33kMn=yGL zi_ldU_+@u2D9D+h3JV`d8=TgnJoChwnq(~=lq!6a{NFW3=Z9sANR}rNiIn3>8?g7O ztATu3V!my?tZa&9I;IRpgvTG&nzNRD{{Tl3Po*akp+H$iFb}n6*Ipw(s@#MDLG>Mn zu&lauaTx3jh)R;jPD?Ss9~Gw!NqP!2D9HGboE3BFKLVf@=cC+3xs2>GT0TW)w;G-v z>e`sw&w?0fLgNfRDh`s%r3iu^H4wP@54WxR|hXhqbkTk|SpzLF}D1k!d zbKKD#UCpve1MI+#dmoykpT6kW&Yb@BD(jW%7BZtND9S0spmr4%2eZ!mka%iJj9;j2rx0IYbhq4GN&BX z7#=0)=)qbADI>T{aEIosMSW+kIF1fd<`7|*_U}^HPC3>;hq`iHJkn2cU{yJ32iGAy zjMjB~k=Q{zcJV4fZ0j7Y<$iKenHZh3O>=3dg5WWu*d^r%?U@MH$w*5w%GVFpmm^zOOm??z;JrRBpGFWuyCO=>q{ z77!`9fNh4jj5?m0AOugx{ptavifD)MKm&@!v|5G+wFr~ zkSn*Wl`Ymp8mW&9c9l$$a{i>(yp8Q7Y#5{ItaUO-5 zRvfWB3ddExW1jGzhc51%+}gTCZRKAr??W-_ix_wG$J zdDM6Iw$WbM`QfzOM$x$6%w4wqt3$2u$5W2xONk=RfMY?ZV}Vp`^;p9}A~y~KeY3V` zj9(92Nd%2yI}+#v+P-pSQ``2StEu>ZUrKQ4VYf|8 z&SYTVHwo}7D(vN7^r9(fGeJw+^HRl(&ZlLn5(&TB0>Y3z=6#@yzp5=%bhRn){~ zR0>tKVC{q%HFU#Ucrwy;^vxi1u^RsX+LNOZf5O?u(OnF7S4>v@*~S-C==V0dQs&&U zgOMz2s1f%R)W(dS6h?vW?QSxWrlyKb*Khpx}-5cQhRrguQmb+bm0*vF5W?(4-#~g<7`R_@KO7k7^0|6#*8IpD}UoK~IX{ z%(lS)06+WH0vmDuF+atZ`%_SNMT-j;zckTJy}mB)4ta`3Khlt}58?H;EgbQx=2Q3H ztw|j|ij6LfXp0pnCKiFhQ5GuDITc0FuJuLCv=uZ|6&UI&mWGI>p!TAn<ybi7`UhmR75-E{7^!Bn!tWE~}xCP^3aMFQNV=+1xCCY5cs74pp~6e)R`k6Dz1_*0zgi2`_vc0z>E?12C}GW z8TK8hEx;oUkA|SBNnN=ejX+2t*G>Q~g4*85B&*vz5+2w>1=BQtDzDgwG>f5U93G!6)8{7=3@mPkbQr zP@|@x@Ug-%9sdA&#p$Uv!1cba)67byjf7$`zZ+K`x^$Bshu~krryyQl#&jx~Bei~5 zjlnh3iLQNDLcfT%Rz7M*HEQ+41WV}$f)BNCah%ti*jh={uOypCl@rOXW{e#uJ~PRw zn%3jj`c&~-#~ND}OK@`|NVs4#xi!`@QSmz_^j!TjA3S zTgNN3qGpunSmHTsf3;6_^>~MhJWSVeA#;?CNP9t<_>0Y|`aJ z3<4ATZ&{NT-EH)*3w3U#E3ERB3xgxb`hd^cwI;Fn>g_)WZK7c$lF4ur21wWdjq$Z^ zaL&8?UX5uKfBAcBbPT%{jApkvO%~(KjAKZ39+m)QNUMgq4zJWDyV*lW96G%BC!c}$ ztA>v7-GThE5hs!*)LKG4XYE%+nc+7L%#7_*_Cv5M{a+B*+XW|0J@g_H!B~u9l zINy5h*E+{FOwhd12(RF_NaanY5#@OOUdE?9NVd4&6n+;ckk?l8K!z3cgpW#02XDPj z`PJvFaJL>3>I(!{O>AB{gJa6|vSZwQ*D2#}`5f$-^E|djjmIeJREm~j%d1Vl!6u_r z_L7Ax8-wjiu#!#4Ui)P6T1F0 zl^R|il~vBIurddFlxxQt+)hdQQ*ut)zV**lxoy#6k@B-D%%d@t^q@6m7(OAjV%~ZF z4cu7PpZs7raaA>;;D~=eEb`nIW>iq8I0H2mmEyaIjn9<=kdcolwsWl3Ykay1ye$o# zsz|ahzI-xolEnUyJ*%e^;~jPN!Q8WIVBm=q`jqkwO6kb{qtYabTVp8==At@<{UDwy zF1@Bj#B1d!WK>-$oE@m;T+dawONh*Fs0coS#}1!0M01JDl`_^U}4MB0MNa*U@cLBXzex^v4*pj_Gq zmV4xRN!l~JW8~D0SR=%JPTZJexAMegPo^=3U-`aj)#u{7FAWKk&3PllgE0*5KJ<}} zy3u1K5CkNJcRm&opD0wbT9N2!;l)UGTd^*Qt-t)C#}%l>ay?hC zWs}k)k~YXEoYv7?eQHaYQW+#g-^>JzD8}^-Wp&=NZtfa!5k(qem4~S^205j4@%4ke zBCT;WR@hx0X_1aMz}$meo9*a6C+a~=ctY^o$gOZtY@ehL?^|%hu6#<2M0QGUW|4Mb zv~g#-KNUq?FT)aBMIe^s0WMy7B2VIE_RUpuy)UB?Y}YE}eoEnvKUAtWIi@MRad2m} zwV%t=mUdH|t*g^$8&+G**IK5bklDcN81` z2lHc=<|k!&TSu2GHdKWez@{4M`j1U%5roo(QZ%qpfJe14HH$ZZ?2PC?Lk*p zw=sz(15|IMOoNsG0FU;dzE% z)~D3J19dM4+(2!f+?$guM(0W=@gf6rs8>nLm%F?0zh2V=Ufn4eUnD#lv< zGoaqwomVKf@gL$OWbeNFic!@?(IZ?Fmtl-Ea6ZC@yzB8B!S6lwv%(MlYY@m(eI$4O znXK5<>DXOaMFK(7&;hM9D;_X6C+}L3n?v}n^53S}w2lCOEX8Vr>SK!5vyN}@bHdA^ zx|HKwj?A{Y_ba~b_cT|j%P9ey*b-_CMp&b^GRT0b%#wO?cdmU!m1j+eX%a+8S070j ztopU=)2+r$ilNYNP}sPj=cJ5n&-&11vY4AuOqB$c_Z3t< zuT$yM5Ow}uP;gcK7@|6uEiO=IDHcWN4nt<3(2K5V{{T7{MaQjz>rd%TN1J&1ki(~VOfC*wpRnSN*af8hV zqIh4S7_CB{8E+OCj{en9b*wr@qB-Cm)c{Qy z$=^9SpdR6UEPaO*R!W1NyYg!^N?d`)H|Dd9pd=&c7$=iP;)$0z9FxhdMy)Q9;sXKl z=Rq_%#+K!NMQ=8IXIsnB; zNgoETm=fc{OhZX;B1pQhs1L90S4;_E)vqjFN<7gtXF3TwKG@=}raS(J_{PCP-bdyV z`17Oml?URriH}6-9wfB81j91q9W0W19+-_bjE>bXL~T%Gc!u)= zB_&ZOpEsE0GKs(fqTmPd6j86J7IF0|jw_c{V~pz8T`)&9$rPej$keJr#839AD%UF4 zwz0;NAWUJI(~yiTOGk3lZ*~3A=rYzp4C-+mkLzyMle9;pv=I=2OXCAXYin1*&(LBKfo`K=%rd`4R8-^fCTxQ=|2Ta~ZfU%MxNWQ{T308s0KIPuC61;!meY)8(o3t!C0eJ{h!` z=3gowIzptPjqrW{0BYws+TFh%zZ&(Yv?hDlAOTxi$b(XW?nQbz`5Y_GEc$hfw~20U zipQVgTrm32Cm;2!-?gar4zG1(1)#RJWnqD*$@MqiKQ-1*j9aXK3w0^MXf7?KC5Q05 z;h|i69Mr;B8Pl(BV7e@-J5+B6dSgqxNtGbjvOoP%% zJ&t&;ceh!?kLrJjx~*^j9RIR$^EbGEF2x@Y)@S(#yLoj6?Tmp)Jf;CH0e zZT|rFry^*9xM?F}rfF3OjZd{}(Vu5y(Yj|&vY$b>CQvp3e9-v)K=!McyRB}!;uz;K zC|Oc4;QB_FbHSfl zipP}YC-FhG4#;O1&Rnwn(=)mZ1Oo-_s0?4>!JF8SzJz>&hWM)yA z%Q*bJr08#vOdStIzl^AYKSRX2S{CGg)}~9On zb7L39UJ;L`q;lI%E)@D_MjDxR-L~zTmye4&aF=jonUn$!zzv0RwbB7;LCtfnu@-|n z@&5I=#a#}=6u(HmI13H-$=l|xvYOZo5_Te`s;xrjQ6&f-miMJhc0L>G7Q)}vk3GvP zF&z6>I@5O2C}WH%h)BnB;|8uJt~bVZ#Y!+QgRl&8K=#dU5;D9u*Iw1%LHg9IuVYfe zE9q9kONi0jBD|S-59t}sYGYdKy2YuvoGqW5D1azyqH?SApNiaJk>fuPi%B7rNYaVM zr;&!)6`rGf^ynv*mF=7=w4PGN6}?IW4r()NtLgnNdr(;zO3l2M`NDhperP=F#y4nP zq)_q6uMZTPX{!;-L|NSwkOMeU-Gx!;{Wj_wMmDoTw-&@}TcClSBaTf68PpTbnTe3R zXzU{`zS*qxTjm;bk`Nl^>T9n`fHvC(sLvjpYzWi|9`#vvzu}%*#VqUOTFyW$r%_M( zR-=_i#JwU2;);7#EgLb7%H?R1%*3pDY4aDbfE)obs?0@M&q0(%wq){c&SoM0A-Z6$j>`hpeF0tV_t^j2% z4Dp=9I-ghA){)Lb;`yO#tlBfQY8F-fDtOf22Blc#FZvWW`lho)f^8+GwFgX0f8qA5 zYoPDLpBJU4pJ{l-6lLQQXVAm+{8p^~(>2B2UOmLKTuJpv?BDjIr!yU=fg@YHYnvv( zl^4#of7ZSBKH10htlFMlaa4ACEu(2j*3-Jk+?}?n;H#*tzEq5)#~O_+3CEZy)M|Jt zLktF402a=~yq)7CZ|_BCTnVq`d%Yl8#>D}Vv?d4o)U_k2u;|NiYzs{0H(fETew9I* z&b3>X)`=RdXaWGBVRp~W6GbFDb^vlt!m2T3>Oy%#IeUHF*#`qxR7Jep9AK#1_wu&dGPAM{xTLHy-ORF>z*y@G1(xI8$|Dq zDi!)9_bffA#g8WO0gCx9{kiC*I$pQ z^%hIVg@jTot+s{VO73?50D99g%ylPUCLq67TVB;=X=j9B)qQ3NBnyNj0rQ&AU3{w} z=&q?_=K?dPMQu<^-ZP){G>mJ_{8iKSN+$(ky2wl0UOem^>mJ~WnAfwn==L9&iRW-) zY2)&sMcCT`up{q8{jOH$#ExxlEbbJ&%u=dbvVvKNJQ~Kj-yg?A(L5~$v_j(PbzI5= zO_Q>d`T(uS=Uji{PgjwAt5qIC$P2V7=_Pv>KR(pz;>H@m`AZKpp%Yz`9k^k_4qNx_ zT-E6R0Ee9wck2CFS;E*d>4 zbEV;Yc~?j_e_+%abJ!$_<+ue1%Hy}%sOH`W>9d)EX>6rXlMmMk?0#rAZ?2<~-&!~$ zTt|ON=8Ah|^QQAiK3peEKF)iZsaQTP>Qh-vmsYW<3XS*HcijHjs5g3zxDAF-V3gtU^+er>s0rzF`pvA^X7bLKKTODW{46>FdKnGw4e)NO9@O`p78<@O2zy>y@J*&$GMSF(+dDJ4?E7ZPb+T=u6CJ9d_yCtDkf*)C9v ziO~(6vJH6+z|U^mS8C>~@W-PDxRdjOPd?q+Xf0*PMAhomgIQOsNOH$M^cfeOdI+R= zq$OD+^9Fc-f%8x_*6%zK&Z<&a{{W8~H#~9uD?^m(y>8y-Kh3o37vL$j8g=wfjoN}oh%EEE1PR2fDy*^P$ZVU`_&meL#FV{ zyA8=S9&6)|58;K%F4Ao(fwG@}-jGq!dZds>f;W)}+~K_~_Z6&7bygpUvW=&OWnbo8 zBYnN8>YC>s(Jn4sp>H5DESdiRO4NuI#Gz$ZjbuV}ysSOD=ClNB8)-^_8WW5&at#2_ z(I$^FsaIIrk-lo`D7Wfz!d$CK8#k+BMN18JmLG_c0Rl{s$_djWk4u4Ayso;N4-;BU zuHI*qQS_C5YdF@n#907>7!i|11puC3{{W4yJ}f~$ z(zFcdaqSQyN2{I!0rJLxc{=lB>P795y$}uOSHkZjzE0pAVuKp<#A=}WSb^Qz zs^hBZ{S{`4DRtw_K;R5wn1Jr@MZBgt0|GEsME3Wf+_dVXfORa3*yq($8y(^|KA*io zX^Z+$R>?tGN(fCJ)depe0Q*!>mrLl7ah0I6rbmcCsHSM@#8&ZVwNy~n!yHpUca}Lu zVnTqqIi`+jW9~cFfa%i7lUoc9#+r%Ug2#=9)l>Pnt*n%w4Kbs3MBlRiblRqlAVeypC zx-KGFSKk<6^Gh0ml4#xcW22oXmH498tdaR(8AiKz^x;pcJol)~XG}~*ksn-V)f?2t zolUP_oJ6UwQZfKlxZB!{*wsB&+GxD98p7j9SsUp-^^_~G5BWAEEv$Sx!pM8rgtd&#ejlxT=oc2T1^E-Z=po1qf}u>R}x3 zQRvK?^cN{7*2Lh)-nm{{WZd7|MdigISj!xKV;Z%7^@_4NZo6k`Di|WY%F5t{MGceA zTiT@MYmMuj0vmNyjr{A7bxc?2)9fpw6`#?1$+xggNKEX4R3Q(V|e2O5hzs37XAqn{zSTso0za_N{UOcJ%;z zo$F}Pmro1Fa4G?qdWr4rRRUZuu{h@ySxOhcKK}GEa>bwbqMc4L?OCe6OKuAHtj@Bee`kdQ|c*QZs|WCjqMIf}`j+dO#>JPQy^8>JlS2hi?>T$^>Jx z0%}g7jQe|e8bJ<{vNLH4;~1@`G-c^B!dYFE7|*PZ589%q4V<#3V^N@;K500nq1(gF zsYKHa90M56DWa~Y(c^_w$16xl!31$lR$h~^!O5W3h75uv1QFZ41nlO9En1^l0pnL9 zg1`K;WTZ@|xz5xEL((I{u_sp}910+Qq2c)m^AXFoc8?s2x}m>6asL3`{{a60%C3)Z z>99SmrQN9u=i41nlDXESe2;wBqa3YM;m;TTT0b&OxROE|5wTP6L{ru}Nsx=^ijpMr zn?d!c9jc^hb=!!qV}@H-D|6{bE(l+-`KRhPx=&md-}!se1mQvRlXaWeed@xzr|~u^ zWW4j<0}yDxgmnYv0o>MmYnb70x~y!ArZtVg(#)sp{i}|;5AdgiXT6oQu49Qj$q7GK z!1<{rroCIjJ`auv%+bnHX9gTigC_TiIi2(o()|H9g13u3G3m=kaF8>M1mhzLEPeC#sgb+Qby4&fVIE9TM;VNQ z#x1ph?tSZ|<<8dq*IS0#*t~^JsZy%RyCKI1=QXSI=_c2f_!jcwOUE(D!y(xWtE>Ue z54P3h_x9=6sgd5w!CpJb0dS9|U;*7iC!vfjk0N8SU(r_v&Aqxtijk-Y2HJR_%Io>WI5@=V{Rm{@ zg#ap0kX?UR_Nc8Tx?6i;B&6w8Bzu})pGTH;?;k}fmbHdscc_@%GQLjyoO4_{@_T%B zoZ}nA{v49x?O&+0&>Mt#qnWTg)9s$$YIDUp?bzRSXv!Wb z>&tvp;#=usw~R!Ig!1G16W!ARt3l!>1YJei;0=c@=A>>wgd^pW9R0# z%r%M9VJ6}PJQ+|C@tT+7$GG^K#?mO8R7^57B0_NPaZw&uchiloGC|gw)qTDzHPf08 zrWSTA!x$T8u-fa+aCqi}I!OT|8Q9S)(=Qf9=_-B156r591HzII9+1t|rK8LNSip(!CSxb)SbfLK~ZjpFUhx%pJhW=OY96 zu62(sbln@nxRAS&>|>JQ5w}S7dWBb%1~&2Sp-1X!l#aGpt?b}mF_tKhX-&Sbf%92cE}k@qW3vlcYn=tazPTCarsMBMhT`NU% z9h6hd>=cQK13~UdHKtsDh=Y)}(jiG>V$yJPp82aOj(WxhS(i@itQcqFujuKz*IGAM zVp#wnd1;_=f!KZOVp4vJuDHBgp1M0a%F)yn&jJ!K-^vASkuHHOaYjLH68XzBqplfr z?~mSvZ`@p5T3TFn2KA1h9wv+r@^Ub)54I|5Fgyj}sXCMExsl%5(@bGl{b!v&Z+fZt z^$w*Q8>=)jBru4jSk-W=u-t!2elP3Fde>36f?1=tg&$1CQe(b%+yPj4>--hd zF73&D-{zip}t$t5B09R-Ep%V*NS>eUiBy~KoR+H zGrh|FOsBW~DMrst>OYiavbb3Zhye}CjH8a(`%sQ6#xuta`H}_=of61b)Tq_VsP%Dv zJs#5Cr4d|CLpvg}M!)5!&)&MnpRd;w;$I6tQtL>WD+G4YdGdPzNx=CvI)tuIuFm(} zMmSU`jyZ*l5vK~Oahm6@nepxO>4q`}0z)1L>?^Z}_Rr|nifux=h7y*M)c48F55TO^ zSg)5e17#s9f&EPxJ-*clqo(y#NX(GGonjcSq6m@#4*c>dtB!(b(pXNCvPCN3GM!36 zsyNQC8h&1DNzR*y6&?p3lPZ(9-{zt-&yJ+Fw}#DP3v#6*d7m0EPdNA9r?Yd0_07ho zic*5&&OhKwjn$m;`0fR7SY!^I)_qurB+`>b=0mLIB>w<_pT5F~?rm<8;av#w0Kh;$ zzvRJ5p*ymCk8wf8_^+-k5KU(}ad?_djM3*Zf_6FWwt1lQ*e>OB2TYJEq_=A{;SZk+! z)Ox8~X0+CAXV7Cu8)^f%`K>dKAv^;dFZi@P_mNlHrTVT~gHrM|NrI$L}D=4tO+ z3@yO^8VqUE`vYAzF^w*#;@dUqc2|iZD=a1%!h@6?jQ;>rSnI6(YI5x@{7Y*zjG@XL z<$TXhs>kvz;5T3CNpU@-Y`Gw`tn0p4*!*UNAnF7~FpgN^Sd%vwE%YECqOy=j|cnEX)6LU2rG}PKAH^k))2|%L=295{U|Cbf0dQ9 z=1YP6v5bFuD41dh02v^A?r1DEPzz{x(8zK)e$|^AluAX9`_z!NWl*I0err81AkA`> z(N|Zvbo{wPg?W`FKL)oM9W+!x(!-I8s^|KzO$>~TGL6XgsINZivD(Bm$Elkn7Cn!( zZZTZc?#=KAVOnKhp6kIoahj?oF1+PhHy8|kMR=kOlc+}VENHkPhNi~#G+A|SspX_n zGZ*@^^w2%Rv~ns<63W4Hp+@8y4B7f!yJrRBeOc0YUy28B4crY&6D+FhskEK;sH&{G z#l^g#)ucnDrU^Kv4ep!xjc}2-n32tg8D~0Q9@wdiE4}GnFtdAvjI%;oAt*ABN82@v z8fo>z9FK0%$sCH)C{m0LXrbC4{{R}?H?@+2J@%k`S^TJ#_S95_4cwX|nv+$$rQNdb zz_A_4qB@AoN*+%6?Y&e{i>rw#6Azbc@}GHhh|j(ti041ANYpq)vgF4fK&kYD3il#-IrIS~4~{QT~z- z#|EI0kK&@JkvOQKE~E6wPq!5W>|*{H{?$V?bwmtw5HW2;4S8-I8BYXnii*OArmEb4 z2`Qs>BaOMHh+o1`GhpBxQ$P^LBy9i?$9*leT}8*E91wZ3$VNOD~0;aUx zw7FM8Tel$8OiIG;aQfk9K) zs@oGpQ4|*tyQEGW1C94apr+z@CLm7&sa4QfJ5xXs_&mP$@}z)*NIsH2D^sRyXW3m| zT00n|o;D){M*AApj`ybiFS`E#2Ko;+GZq^_(CzYbS)(#v6WQF#%257Y$k391nHSD$ zHZG}u3qZQs8|b2xwqr>c1Y!60se_K{mdg_z5*NBZ;L$7=23+Tm<$XwPLH6Y-&4#PWc=fBB>mJM&#p@ z+KLuCMs+9Y1B~~rN+Ke4!gn|uRYCnnqL?EL(yK8b1z&0a)tF-d6G2#*u{yRnz!gMg ziT5Y>pszs16HHfdbGHOl2SFkOxY!M;MH=$?8)s$DYAWdqpvWiZJXE5jl%G*29>$=# zTnuLz&fR0jB|S{rWsZQ8k_Pi+`JW0C;af!?a2cNUxwb;jGH z)kLg%qeQ?lCNBQ~@YJzgEx%cXmuCQhk*cwIX-s`qJz9$}ApPm;0F$dD-5K$b8e%+* z5^JX{u`i~1rDE)TMU($s(BYV(K>RA|U?&>W=3%>v=@Q%BjyARqLdX zH$?G)>Cox4x{2CA49g^0&~c5cI@W3(H}NprNYeRhJkOlTD`W%kD*LVBlh*$L5-)D0 zSwpmJnFu2qRcjZraKf5vnaj&0n%wTqA>FC1db$pk;HhM2MbxcqCS6fGC@J=>da&ES z@QU=L^DkkwyArTSK$wOd^NO-1biN(&A(*0DbnAGCTty)sl>PC&cITHqt0Tr=>zwMnJ#ikt;SRn;Uz5IuM4iu>6o=Gg)HWyDy*yWsxaa=>5xRJSB#Sc{ zq>vblM^sY|`5xlBcR$sRZdR}1m88*XGOmc-Kq%{`L;nB}u0B2_`rnhUj;qBpc0UE_#IItyFH7zD_Y1y=t6g#6MDhU=;=xct4snFA)6^sY;ca79nS#`u4x z+;rQOnc`J~=0;G8+Ptt%MQ7JOwCZ}qCiYPTOhhT_na96jTh*hn=h6U(o*m z#7o;{NETL5%Q`So*mwI^r>i+~lU&z|JaQ$uk_$K%bNO);R}A<_$rvqbT3x7M+Cjn24QE|F6kqjF>|08x8z^3DQ|q5o19dL3 zB=M?9*$8q8=B=2-x;woGd5xSBKfXu5R=_*dFHV)LJcfB6# zrrF&WBS4u5^Iz7APc;pB*&+_3FOuX&(>In>=?tXtRbHLbW)~Mm-r-|Nrv^~-9q~L zoZH*HXjki#W>M}l!J<6pt_fD)q`LJgfV#K+>ovGHrb(6Gk;W?(xkN!>CCtJo)68ZE z2o4FPEoIMS(Mu$33NjorH|ecnYkL0vD8DVQEQp$jR@4~#Vzna_3V5VsBh{zkw9c-w z@r%PJ@gmfNWh?q>;&0Y;*C_8JMtvme1KTx=9-eQ;_eZ$$x@E~2K77co4?7x`Irnwn z_+P9bxAQI-Mpyt{zKj8YDml4ig4%nj^hj5yi52All{0&R_cT{Ya~dHR6QWz%K^a?H zX26nB*y4jXp!GXwQSW7UmgU1nkf=D*$R5=cFG#-~PUM@yrC}MjvR#$Q{{ZaXpzIf> z#bXTDhA5UmnF?{CeUyCCt~}$f`10c9X>Bn=NBJqkea&Z7Z-u-yY-9ZIP?-`8<|s8_ zz7Hq9J}QmaKM-voo_2~C@??ou2%$1Y*~hgEdHk16ERst6$mERvk=Rz09ju`z^A6!b zBv(#Sj_EK7W-^Beu^%{--{4V(M_THSbvbu3NPd;uf!I}KS4OgsyDKiAGzful#%MZ^ z8F+3kn-pOWm?vE<9QxJAEIunWxzeu+bccSM)L55~(ypb`3gJeq4E?G|x2+lC9~Hgd zO}C8-M<1p+;|DT1QL+0{#DTvIEfKH8k0eO8>R2p{6{II&jQ;f@UESA$VQaar^c=F6 zjTdD`$JO_)jO&T&3I71%>vxtl^JJbWBOKT z?*9M{E!Nwn8KxpA{R$bKMrfo>#QTQ?HKWLJ(%9cah&srEFrsRwuq z!_ZqvaW7B-ZY_u~!y^K`XHXr@Bwnkb>i#;GT*YY%`Gs=wFx8}eyH>1XToCrFXVV&K z;*M-Dn()YU63y5*KQ$!9-FaV6@m<6Y^2FLClQ=Jz&^rK6wM$(m4?^hPJ8P>+nd48+ zT0^MFNYgHM2OsT8S-j((xQb?jPvxaD+@CsTE53R3jzFt~>mIYx?xL0mj4TSIYK*_B z2pAxW)MBoR5WZt5^*Xkr-0ihWj~x6xu`+c<$T)?jne*6#xA(46eRb=vk5ut1=H168 zM?_KYlU=Xlg#BpcV@*!M5fB%4;dZ9{T-x(4r{Yw->b9zye=h@-SAV7U-HmgdeRaHK z8E?{D+RbeY<$pIc%@~jch5rEIU%o4BK);7Dx%|bbo@ghDiSquWI5;B*=Al}CJLuQ5 z+s82$`t4brrVLU>Uu;tRhaYQ$u(f;Zm?CE-=U^H`$QaIlpsrl~uSZ`a+T%owi#X7E zQNk68A0O-9y$>sk@zTp5<=_gh=D15~NBM)Q^lyRvH_a8H)%+zVRO)h1 z6OYNTg_`5s1ptNlsbbEXo<6sWr}Weo%8-!WRC|9B@;5p6?^&aa@V8Hj{?Y#cGji)Z zM5Vhk9In~H_Y{??>McA;1rA9}XyIFbB8w}|=PTg!CnQVVtZ zV;pbo^I5fIdBxY}Ep8U<>5fUHGq0EQq0VuN#=5%hqt#oeG;eYc0Uz*@JNuf?wM=LA z{+y3&N+O9NI-@JG$9hT^O}$y8OdU_8YChDw>r#)i>sJdf5J*N-%8~x91KOO+6R8;< zE9>ccBI&k>_!D`TQsHK) zPCsgzG@2|Lq47gY6$q~2og@x$ah@wZHOr8P$2Q8%9oAu$TS#72zH6R0RdvrA*v$h( zB`Y8*@s-AMH?7FcPSeIy0KRN%A{7N)eJzjotAlFS#8$H42PnkjLyQ`Li>S6WDCD}o zhog}RR2sn8fxA_STs)l_fH_=y8s4zZo2R$89qUV=QqwP|7|!{iCRl=uF6V+pFbXDQ z#u$utH55&ciCP&$kgUL97T**HS#>B~rg>A%c|A+pL7lX%wJ{E?RPcAsDhXKl`bi`RmbuQr0!}C|m+<=5Ner?pvoX|Fn_-^R21DUX zSOH~$0PaZGe_9FM+lb)}3Py#TD>=gHr3a0%XeX{c3v{!|ET0JwER*Y(hTSXdGkr6xDMVeKV+7&*a5$mjO@% z9K$+AG;G`T888VRUNNaucFOf+r@Ef^8|7er%scBP*XpNyupDOT()v| z{irJc02R?GpFqf5eW{>Mq2uH$p(D`bgReQ-sHr-#GOOy&PMjWdOhs2b_5kn&Agrm< zdkk`FfMB@89eBnLmgcItW+hqn%9bS6Dx3`Fh^TF!nxJXl7_Dl-RzxV*-0f0}p5*PP z0QV-6E{y2$hS!`DJwR4^8XZnCGO5@w*}$wyu|>q1f}(J%i3sggb)nK`T_O{+F5}t0 zYNZd>9hXQefLms64NU|K*pve2x70h;O94sZ*G%YA25Z+K3Zm;(E%cl>`qZ@sLkL}^@31S{vsBleIF$w? ztY>xaQ3FJ}au^Wa)lqZmQMkrN*{GlG)qmZxEU3tpv!4KMJcg5uO+fF#R-20i?*l z@3j+JVs=H+PFF`2mTMTkqD^TMmEAxff;gh0jt(==da5=i;}y<^x?CbDd#-zSaO zW{If3sFHo^Ad47CZDbNL={TzusSKJ)W47B9N-^$c)h2rboK!U>e45fKmQ#=h2%wV6 z%6%tEJk<=nM27V$l6@e7y#;`-cgWv;stI05!9ocODfI!I;*G{no%gENzK82R4YQVX zkV`CXRfMdqldIgL8LhMrRNrO>aF@RS=hXQ zLYF7_kgUKlaqYi)Uy)_n<&=UMm<>nNa524k?fUPZ0s;vGINq-}Yc=TJBJmBPbm;9P zoAYzBrk5DgZU-YZ*RHZB9D7l}hZa`%I=?s!{#qX-%*Ddzo@wE_dHMB@&gR-HRWYC~ zZuuui*9XWo?96y|=5Y9aSG%~oh=+pNyx%_Xz7sB_=BabwZs=9K`GUi59^K*?gwh`TwGs^yi+^eNMMlpF$DqRAdSZ7 zKGo;yREui zLIc}^52sq6?_0!`lj8d$1+V5}as(k<#K$Ur1!tv?8u4d|#oXxeMq*J4Mq&++NZ(f9 zdinkJuWuax0IRm?e~fPhyikiJ%xDpq$+Kg=D_nPsb>n7ur|}NX?$SkQPv+)i8*U*0 z``1g}#wQpu+TPJEk~xeC(A+ctmV_O2K8+5quKMs$H>S7)3M%uxCx6f_l|h-I1s zZX)v}D}u}I?rJSU*P+|b8HQ4ACrp(tFtZ-RH3$mJqBP)@5yr6svPiA^?7I5j>4)q9=&HgHw9;mtFAXi%w%>T`%y*o-mK6} zlK>?nZ88#bMOW9ZeCwGdWH9-JHP0t=P=^QrV-g=3tRdhfvYB%tdpp{x!OX zh+;rIkfa?f+K^=k_N>zzo)YS|@}#XcUg}mmBAr;qH~6V3VB2{T-r8$>tfRWh*3!2R zo(8Xa(mbxp!gmhwM(?DPAYIL87hNxhB?rjEsH%lESc5{uG>QO5L+L~BS?RuGSEO3IuxrxNjUk{6<@IKw zbm@)AjxvHXCESY1Yh@Z^$pn2=MxTZ}BrTB1BtTp~?KR72^8OT7Yfe|j4zD`H9n_Mh zbxg~bg%7YF6)E@=Ri(T#M6sKTi4>ug#+8U3<24ucgj59qi6I8rIRc8^=$;RfdwFi< zNkl?6Yh_K0nC^Zne8Sf|1cb+*>MKk7(eTfPr0NdQ!oe62WoO+Gd(~&AP23Fx(^{7Y z%aq3QN5RK&O3T|iF|vxuCyw0`HHZ*h0e3$6`872PKA##}$#HfNJg3bB;4%U9sQIlU zp6k=aHH6nv!tzYRL|OVR@OcKJujqa&>DNgVR}xAJMyf5@3fr;9F}F2f^M1c&`Fp8R zVUiS)wcEum?i8KBV_B_7rAhctYbCTMIV6JT$qe!zQZXYtkNQ>SGiZOq-l=(QDYdy0 zPj1ff#VY1Pgl(Mr8q!xC;$F1!y!QA4C~l>Ag8H;%Pf#R})-zg)FcUO&) zNYkq%eeqfxzli$f%-FDSn6d^vFlR)V;f+jJUE$u0mo~{95qWB1VAo8!lV8E@y$x01 zZw<$A*I%5~H1_g&O035O4YdyDi0bdHQq>YTRUubxQ?nd4fypHARB?VM@d92QLTHlC zGvvh^pIe^pNBUH&9(Q!8K?}e>gYG@+HQSmK%p(j70<5L9oMZz-sjsHGca`NsaT{mN zfg8_rg5w|Bw&T~vT($`-JoZi!RBSen@}(oO6h@av>T5VVXqGdH;XJAT0Hs88{uSt7 zm%Zu|V`prq?sXsasUp_5P>0Q$-YgQT-fRBcR++~M_>beo)i+LwNI=US%-zZ7NUZhv z>&HJ_Rh8UU&*o{=qB0OR<3BaapVxl>03DsLik|pEGcdvBv!a$4u(%otmoL8mSW4U)2cnfT3iX0u48yzVwx;AosR4(b@d|@uLSUU-fUsn&zv2CkbS<@+H~{YT+fes{2pz* zaXeB<8S{MAZAl5>e)X-?$0)sY2<2UJ=yvlit`K5bPhh98rlTLi_tHahZf*8-1(jdv zVeD%+rlfTKBk_V{QhDJw@MQa3@B43J8nq@U)gYgpnu zL)Im^U>->vAuKhVjGtjpX!IGvTRuokwnKiSNHPtx&7UvRf=QK!HBvec4_czDYySW} zeN4~JJ}VW{E$a>Wn1pdCBtA>F+J4oQPoP@5p%W<%r%D6uQChMlHEp(r2Rv~|mBI8Z zwy4yV#EdrQ726rn{YR{RUN(XOs#%VLN7l5#tKrU-`B=y#8KmB3?mywIb=I{H)}oli zUM7?zXZW65A5MGyt1&3g0r<-5HkuYMKDdE{TWS%J{?)s2iO#xvKOM-odS-|+JVRKI z>QXz@=c?CSH~NQ;tYeATJ4q&=LYqYLejxWLX($5idZ!5D*%o+EE4s(zC)zo?g zpH7fBn>?lF#xx=R6l2&51E?c3x)I;`RJZo2)mH@mGQ1f&kg3kaYlphIIpPc%vxh8L zkG}PFT`x}Y^pHUuZyLEp(xkVozV)wT1t;Q~Hp11FfXOW56!twzOI6Hxi}E+^sa4WUV^a)jqPcs&1Vk02^MZsKVs`?ytee8!Iml^R z<;+NQqH-Vp)hOGCsmE^OR*%gf`eV+TgF;`#yQu*QZwjdTn*@~NHBtv%hIQqS+dn+&Uh^*LAfCdk}T^cd;^f(H4BPTtnqHk6gD0p5U1-l-6|4RE;(0-zsC<80Gc4vf{@vbEC0#0l+!0_RkszEgIUcyEYlI4z70%fQm8L6cVL>09*kl7fp7jSjJVh(N{$4eSmpXUf?^go1>+7mUy)ya7hu!Ij z-n^a&!fKW<83QTKb5H{xQ$Ro(2s|;O!D$#^Nzy^@wMAZfgIP!Un^IAgf-oC~&%H4f zLDimTGcheJgH)~Bt|GxFnVmTpI3l1d&FBD}U}FNJqa4a`pl)&rB8n2yFDg+cqJ}f6 zO7}Gv9l7!R5k!AA9J=Hm!!a&Z{{ZP#9Cu&wWH(nav?(e^u=#9cT`ipFZ;H5p6615F zh|j%1U8Tcm#&UC<&{J|rZ0A1p6&94$7ef5xV(!$L&BIjHOEV z?kF+=BP5Npim6qW;)W}dJx6{AVOotyWp>60!0qm8g3$=TWg|Vvp^JJeVq(7F;MO`# z5fd;n@3Nlti49Q&@rj!w((!^u5|XKpi$Nt)yYs4kRnvB?)qjH3hLH+8O zGAWDfPujC!cy44vtJQ#Um8J;8Gc=6E6dRzPL!k~kRv05P>N2&`9};+TqA0BuXp zv7+gm=XN}BD*CgeBnO}AK^Yh}0005WqNun#kAbynRTCY)My%itMQJL(J0$ag!0ae3 zk@fZfjw%SK7~J6Y9`qEXWl7G&&`KEqIL^n4m|{0)Kex461T9k`v&XekMQSWfk>)nBlhB|r}-gN*Q0fx#J0>|me59@XPW1F*0G<`x>%lAu5Dwvfz~PJRrL&O`x@UoVqTk{iSSy-c??#m z8Z0oBnPN;0S;)>i;GA7nL5^QR zjPA}o#d`go8OxaQJWSS!Z_~AyCS7+WS0n@P?V8V5el;djbRPm)*_f^iHN&6`>fjjj z@%F59#EzYJ^BW(E9w9K<1&x3=9+lJCd)E577@w@4!svqAy0Vb6k{ejvhA~|DpIh(o zx6y1BWw?z|WJFyOz~?W5coo&j(A(Zg6{EM7>z07zGza+)y?MNkM~;N)5WI7w zW#LUk25FC>LGPNJex1D%7^NY2FIGgq5!dNN0}_*0;@kd4IYAetRb9tUySy?!Y3 zc`IV#Vfj0aBsY{9$Q+N#@?)(a86}?E&Ep{!u9Cw)-|_Bxl4s`w?W+T?d(Nq8U7oJG`mqG znqmt2oSi#VYPJ~3c_^|;1Hf5~5-{~IzWmlI%Gv1M8G3w;Y|=*0ILt2FAOnzoYQ?p< zoqwm=!pRiKOnRG2jO%ax>rt0IZPt2V4RJc_x{wyo>RmzX2WqVAi17zhmg-?N!4&Aw zs~6IutQGij;y5lASp%{m)Ixn(?O5u!CbWEAZ$0BJ*^O2a=~OEh_Zi7NsUy@&9hdXEDs_H%=npbEQv`AG-22XEuMAvoUp9=KXvGeX3ivq#@WdvUU z4r-t~yAGQ)OAWLVM{>+UODmA0=YD?GD7(RvnC_&uxIS#Ee5fv5<|x1$fu1T3=E5J# znU$AZs;?w+AEo>06;b2nOTMpqMhTFeCj-#}jjNUCTAv*UM)1wD^%q6d(b_|qB@K;I zW1RdR)w#|Z%JFl{9O^DcnOZL~WZMoqRk72WN2 zodce<#~gd-?^eXuSJ58Q%Ecs5B1KgbJ~ckB2tU0fOI$Br>0h0i zTdPRGjv$QW4FSmH8l`(s+Ke{Kuu=M$(Hy}tUfljqr?2o#nv+)A0NAl7+JmO+o&}D^13%_Vl^?_m zKrVfjqfa@($RrJ0d4A-}l4nUd2iSM;x7T#K$D_N(Bp*~vb3Sm)``&Fmw z$gVFMMrmX@c?owvdX0W32SK@>+FP_k`FKdw$C)?Z1HLNAYtj54Zf3F4#!&4Oc}ip< z9exFL8Bp9x;acPUUHf_`kvaD3-zJc*2&J9UiaK+!0cj>f8SS3EjbJFJ+AR za-6aKX`TyvW}^+hnc`cEi(6YrVAfzDYuuw?<4<& zEPlIceqBn*krtu9i{_QxW{bKj~DCGCrhbyN2TB z+4RpJnp=GVTYx>jD-Au{s`dW>HWqtR8l#aPojD1lA7S>b#w>BYf5bMnkQ+-W!^p@? z_c0wr{{X@dY|$L2LA|qr7}bNzB-bIYQBbi&2Vke?y(sTIMfi%QCxYJIbe>f5lg#wA zVC}~_#}pi&LFpGZS4$Pmt77&Nu(LSHIL|-pQyS41SG`-J?&=oWc3`MTkyQQ1(rQs< zk5s&#F?Rz6^3+2hiw10Gk}7I6?5rc|mr9za^5c(P(3V2Y&(gns^|*^Vhl1<}RDvdn zg{X^LC}X8b;4${vhKu}A@T^~xTdQc6H?$gAA^}m5o^kO~#<=O^D<0X%-FK`z>(zWA zI$m_CZ6qwOXj(;Z+ky21_8e8_xpg(xbc1bUX$X>NqE{OA$k_8q?kifxFS+UKa76a9 zs!pTPDsGZ|H@K^&AE4iPuOw2aitSD$i16TkrTC~&iPhtZd#66Rkcgs)9k%!V>8m)e z2I{gjlU%%;$kVen*xxlRc9Fl}-k6izK=&Wytf6$DqC@O!Db;qqA-GjZMwK~TyU19Yeyz<-mYyc+<`GncP=S@x3lNpwtDZ7R*%ZZ!FAg+R-k`FZf zKLA?ZW($}yFvnV{tLmQ2`&;lMSlLMDTP||Kr=h8>zJ}JId2Br+zwcU;85eX}QDH#2 zorVGD6ts~EESf14D;-Jo0k%iAWu~pv=_)ek0F9J=OGr7smmonZF=D7mMeUz+TEs$m zK{*GJQxtp_q`|623aZ|f2i5nW)#<`H)fN)jR`us<&7>LDEmknDfSCtl+*VpiUNI0k z$Ysj~`jFEXRe?IFlk<9``bJlJdZx49>gmzE$I53)fw64&tLkVE6A^1H8a6Ee)(0o= zU1UawhI(XpH!?Uk41EenAqUURW3R$A*yL}MUr7GC0P+N z-r4^3WW~2x{T@Hd$>u=|yXj;rA=8TKSf3e_T+cMlKq0}>S}&!3Gf5*>x^E8jlNMdf zWVZUw@0v0@rg(wuq_`;|Do(#7jH4R5zO4@rc-f`6mRpGQM(V0GZW9$f((>-0yM|nO zQX^+@GwQ8Q*}Q}C9L6h2nDSRj=iKd1x=eYp+80dc8&?R^C60{e83%mU!gn&g4F#!W$=XJ+zCI3xobU>?SemurEWODTc;1kQi~zRBb($ zb{XGrO#rWutf%cz1q!J<_B&MvgbV7(Rqn@%C|kax5^iKeo(i1PMn6*NznXZ&EHz^+ z&A^}`EvCaliWsQ%FyPc#S%yYJPLdsdrK(nxolRvimDvCWMLgz+*@i_UA(wsuIH(AL z3l28UGfEysz#}V@+fb+>Wd;t_=YOI~x(>0iy1BQ~WK@A)0T&vWiVC{7h6HZ1#Ln%cWk=KqtElErQ;@Mzs&~U` zUBz4*eK*6DmX3z+!`AYkjx_SfIS-tXSk;bt_rsIHfb7H_(Up#p zD5ZSNfmAb?u&hw;_p5`W=~wVNJ1ZywLWDauYEebi{{WN%s(@JTedsN_M+!9HuFPA# zK~1&pBwfK7^?XrQ^()2D`v#EgioaLhm}?*WGV)|e8c+b;BW_pkTEw+3x77hLppBK# z0MCz25eV3xPJU`A+g_q0*y+cRlvVBVr^w=i0R_MRx0Q()m*939Z zEsv!zEM0=-w1xdfvIy}HNror`Mp(EbSpOdMT!lVsN89s(UD9XTTXa>?>Nz*Op9d zS3Q9g6vfnA>10MHU`EEO8G?_gTOjT!sCH<`^fnK()M(<=`-~mQrYbT3NC0uLHE>Sg zvB2N~jl0!}RkT1T!32|%C@)1)2dQ(xUiC~4*2RHvc0;)DP*(FEIUe*>LhYye8lj_y zoSFzW)j}#)8RXPm8*dmWQ-XKT%|+0{)R{D#>^)R!_wgBEA;43ewxb9(c*YG>sfY)@ z{l!g9TElOODw}>s-)hh{{Z~Q3%ZzL*AbWUDk^M;apsAZYam5i4DIfHzi_2WzIhyBs8P$9( z4VBWsZcL*Isz5y|Pc^&AE31pby*J5`&CI57KZJ4q)Wmfb{eBtk#kJ!ITt=cDBT#$| zo9|ji$4G`-t5s=S1_Zyj}9L@g# zSPhF_o~+VHe6w)i=uGlO6@q#k)>6d{^pneO`EYH?C^5}scaL*!5;)ZnBVaT{6n|Er z<9t(eZSSC4RFY?fJl2REXoja>C&lLLC&S$;?fmYdp)zG};K;h(LV3s9xk*|B z$T89ZK4~UwzmbhXL;Sey&2D^S+gvM0b3MvUc9X{&&FB)T^3Z32n#bDHvGIS4+RoxD zSYt*;iC$OE3ykAPt=_RD)LX@g1;9&)riKYo83T>u$mbo!B}{bb(c-!h zIQ9m&tb_4ajje1{D8#dA+Bm?_p4l~yy2htE;W`goyz}JhBlR6qC^(FOF<71JcZ_qr zU#uCfB%O+xBz;6E*+*em?zQ8M{{REW4aCOQc*6;a{wNud4mQWdUmg0MSoKbu1We!I z^5ng~H00pO2YU72$CbqRl?->SX=8Np#^_$)E8zj|4Ri8WP9~eBc*ZMek`=cPBvLV! zK)Hp+dC08uR`SsC$BNw&-7UqseqtjmlEvy|9BKH?XTK&j#~RQ4JMfR4Fu0Z_k_65* zpQ*j^-m~ML&3P}V?xEpiw(4J-xQ-UIo<<%}8%40j-?etWEOF<_uCu}xDvxjo1$AqL zG1Z_GupZUEJ~P{u{7!jnv2$$ft1veAP=TsE5y=(5Ey&M~ZFy|+iQNyDsIkY7PWrxU z=k?atzn*>vyOeK$a0hD4Znt~`YaF*Qyrm3YV90OL@@sL+y7nI)S;sSkeF%mZMRvf! z?0;(CRmw+`bT1moZEGY9hD|K%3ukmb_07@C&(vj-LnNnDvCA>VK5~0Le;<(jtjq zl$@)lxur;}sQ9gAE}``KL(I31G}L4x-1erJzp7l`-gNUQjyr!W3H28`-%j~oYQL#o zUE;2=Zsv;Vyp?8+Vk;i(H0_qA3CCd)pkY2sE=ce8pev)^>6Dct%SF|t{*p(ysctNe z%GaSu)hwE9fjD>aKpGI^wKr1yaTjr1*~+%pIEXj#03npK}ibq^L?G%0S*N{MxT zU@>89cwA2Kji&-s(N6}epR*E`^;Ezt_j?q#@>^Dc^ovQKTl ztwG0rEcJNqZ&%4Wk{E(&924Ar)u#E3ewA+O(TI*7LIVBH*sM2RgVVe$(z_-e+o{67 zahSfOmmR-gPCA#Cn@5!(i?;hMqxKI>8{&1dDjjNimS9}C9o z`_z@IF~@Zdo_{fM8^jgW$Ymd+;;!M0*cqcGMsvVle~Opr_3r_76tIlJeQqtJmlDG< zU1nf?{%Jlj)3vCzee%-7#f~4Wd#GW|KQ(H5I9A;DoXR^Bqs})40n= zY`Wb+?0eMJ#TGsQmhM+rQQrMkGtGJJ)oIzI^bDXiy`;%yR$j)+Sx{{Zs=QKxNj z9EFzV5=({NFQsK4KO&;Ie;fELU4wUKfJ_E%twtAC2h=`lQdeEzyM~viTbBn~DUI{a z#-T%a&LR0(#&A{>Czsj2Xh)U!d!P%3jpxc)`JrW#R-F8OzG%Ajce=EKF>KOAEsA0g z7&7VO6hIR7n+TOwIZmioF)D+&=T3fWa+>hF>%%OCS_uhwpei4ImoK6%fmhqXSS25UFvIChPdG_Ri?(-6vk~6 z;U5IY)ovx2DT2l~$CQoyM?cCvzD*I>&n#Bc4xQ3sg=b-z<-n6i{Kww3jh=_$Xzh=i zCMUZjnJ!y=d@?n2X5ytvs@{?XEvB)8kEx znRTW=PkhlUZeFsTNedV9WQyC%oS**yTlb8au7zJ?zT@JmHNQL`ASepMD~>7vrRowH75t+9T7*Ksr{=Sb zH0Hi-Yby*k0AW#JUZ4nJBAgO(Q{t?E2K2~CAc+?z;QLmQQ>jy^h5#LgD>jYppJgi} zHhtmO|)8~lmLr1 z<}?2Fq}4EL^HpviPndN^hhdXN!QLah7O57%yFQ?&*iu2rG;ceZrENu@Di42;wQEPB zzlWg-9H9!hQ1U7rjdQfYy&BpEj^;>}Nb;N1%j#XYs9=7D*F~c0k^~?O2~cU2{Cw3J z&pelsNLMgM?VU&b!|_BLZ)fGMgdhRm8=4xkP8TdoW3?5Vbp~ckkc#P@KWd8Bz!(Ez zjBQ-&qG%4p5(wa~)eK$K{7;Ak7ZMVM@)-J@V|vtL#sYYcP%4BXahDsK(;$EhN!5{_ zO$N=a^gspNX&CsXrWo9>uLn6hR91S{hn7zAv`gIPvx>M2sd z;DMT}9Dj)~PoE2><}kVTuAHrOy%{{fW|)mEew=+kd(n_)?lfr%E3&hC6b*o=tCOmF zH2F-YIVHHEhP9ZxHb*;cQKk<JrX4>s`_!Qb!q-u$mD!k7=~qG zoIH4Nr@dH}m(nhA9-aVWq<0mjTK0WFt7{ZSa~kOQv)hQUbQpdq4og3cTvQL_I4H^mjW zy+IZgc~HZva0vR(#X(EY<`Ci?L5G&id8%s?*QJz^+{Q#Y%BjxPqyXALCBLCAI&9Lj zVH`xcD$7bh*3EO~#|%@jLUF6Ied+NV@c3d)$DIot{{Wa<6_rf*Vo<;vkh^3uwouen zmv-|&L7&W(ap`ErL7=5>A$)nBVD6E&RDJ7F1YUK8g&Em3hEj>A^i)=VOYsvexrrm( zl2y-a)%-zLeOQ7uDaiVq?NG-wZeje)+VP>=W*_TaCHR=?`fEiP3YY+mUSa)J&aO3~ zf7OwIdsGL=(MX=RToLq>xTrXuuO@~G$<>r3Y{Inw()5uaEC5HwK~qas7rj`N`t^ARLss60d4Q)ILj56SzL<3h$1=SuIS%DcR zWnsvo;_i>rL`$eD-or zpL)ErXlpC-n8*$9A^NLgcO6~@*egjP+#hNpnXh%JMi~vw0ELtd3IQXQJ*t7FP6Y(S zL@P3o0bCq&T2OI$YmGxW8O~~$8Vn74@=hpJ?a3r<$2F8Zry!r43JahdG-Rux3=h3l zgWVY=n6!u1+md_MqAj+Ruhsfa2&rMMFub?vVY1dNN}?MzKu9E#cF(u9D^h9_oZt>K zxT0B$?q|?|<9y&$!*!YGv$1o@tw@*Rt9kI}9mWl6#&mQx#lc`QJ%weg2dS1#4V>~m z)pO>cq>zU!HaMusrX`M}pOZydEaLzGN4_W`lVlCH8&tzrK0w@W+Np?_*c0!Hpa`~d zes-+_mQPkm+vmMRGuta2h!jx}#xtNDkG&Kz!V(zav#_EEy1pdoAgCN;y-<;`1_wRO z1+glf@HKnUL_}Fh#>c*RGyzHo%P7i|f(L4%(wN5iC;L=bX_Srg@jwDO)HArw^`K*E zcN^hqAefgO#ycF=M49uD4*ks$K~e}HWR57YTQ*Ke-l)a7LBl8{;A~F9f~g{G@N?}!ZNfZippZ435#Fk#l9A~< zj>fZKx(Iy63JAd5)F{iDl`;nxpJ|JY8MolNcV9 zUG-GG5j$Rh7-mz2-$)$RecHu;;Lv}?{b~G^$Gr91c!66!ooN(o$1%(@ss|@(_0NwZ zGWyH^04F89&_(%!GKRV5Ui%PvrTVcxh2hw3%!zjrynrmQ&5~Ch)f#m^Cb6=*wLv1Q z1;If8{v!76Tahcstgj~M_ibx5(xtTdWPRCicx?NQ_0Oq|Pp)so_w!!e4RU#eFp4K9 z(nkQ-HltSW!P&=6JGfQnVkkL42SK=rX@UAG%x`&Onx{bYE%!_9Ljbc`pE z=0D7GG=rQGOU{zu^Jbk-B6!D<6n>dh?hkw#!q2ZbzVR*1u$sadkL3%nQhu^N4{X*g z#^)}3s79exgKA^-0&+!iw_PO0*Mz!F#n2I!mOEVk02r?g@IGs=i=A`wb@9~xBv>W2 zm9$a9AcbYXI2z>Jl53}vhd&=*S)Yf!c-vm63l^Di9;r6d`}VFrKi7XJO*>GP{atVUNtj3H(_nUs`>#D}8j&Jm5polCnP*u_XUPIa z1o|}hA8(2dlf>RLw|jVGw^$kTkPvAx4hTDMNey$B--sPbc$(4_g^`iapD%P=ZZlW$ zD4vnvd8V;%;#*tmVidj!n2yD}Q$}}$uHv@1YfIRaFl`1yzm$LIXaZQm%{l|AL%xO` z#&$I?)t4T>_;GrVW~r488$PuM1Pt>}#J^l0k5Ws)J-~=87L2R;gUjUO0-Y~EE0MOz z38Z9#3WMIcNbT3-X6vb4^$DP{^ne^_glvjyqn14fsrAL_RwfBdYkB3cw$QoPowJ{c zMU!4FI^<_^Ny*PS=8l-zwCPud6u62fF`?G7p&49vsE*gA^_ebhq`sPES*^~5bo92| z0zPw7@iSaMSn6`zOm3tg%J>dIz}sO{^{Fwd;l8&OqnXOIl9A{OvX6sT@jqGJd#kn8 z%$EQN%z;#*o-y91>gFi${p3*IK`p|WBaOpIfMl?%QRx0N@$HrD1}LMD$gHwODFe_( z;8m5I13~z!DT#Gkqc|F61+b0tj8deZb-`XtXO>ynLV1!FD4PY(wPMGsk0ksNYbij$ z0U%}5{8C#VYRtA*ez={_gL+NXwDX1PQ^^c5#e|L@Ky&O!uJf;tpWlzxh+9h=+vvm= z&2Q7<8fKM223#EFk8IS|F}>pMsrgs8TL|Dt0uu?1b-5>PyXKnIf;=nWDdv=2-;AmC zh+OKHL)%xiLDfZ-xH4d@WO*$S+d=F=_NX@9aBz9-D6V6ub*Q>@x|#JyBOf;1PGv*x z2em{2)ISg)+FNL)^FiNM0CDVSGGOt|!Pdjdf->5?u)BlzrZpHoA@NI0`B~YImSS}u zNe8ts2HjDN1|hPl><`i?GwmF^12X>a9v7jX#BP;y0Sg1IF>qYhu5#J<$~Tjkq%U>ZP)?79`#wlxBe7UdF5VD zad2e;mO=bHw;WJiec=?cytg3$hCMR0vLCDixS~3%i&TE6Zs>^7c_u(W%AAgBLbH5V z_FXgD?IhC4lOw+BzS-|m)yB2g;=GtTV2p3JSh1|?`mp+s z;x+uKgk*_H%NWKTzB5xy1us>S+Gws~cFc%BGOP5C+56Sg8khY_ON0=~JkrM|94Xu$ z`K+cnd&?({)F3+ppo65fTpd4!Od`>zn5u-4nZY~ccEvHLKW%neS!I_fvXa`dzB>wF zB^oIRFoA^JoNj1<{6lsp(5Z;$Iwr!E0qPF3T=%COhfl9AFQc);@I$ zZE9y!MrKVd>R$f#I3)d2 zH)`CB)JkbG1G&%DL{&AZ^7Sw~ovK>06`jVMA>a8;O)y+U#!e1(9Q;)2(~dPMCC)W_ z~rry z&GoltxFS)8jY6K>ccXHKluy(oFO0`+5Colo6|KmSq6C$|8xU}{n_H3UwuCY#IB3G0 z*F0g%Mc3ZVr?-G4pt~+g>dt;@jHu$AIvKEIB;XUYbw<11{{Rvr8v0{Wj(?lxrmhQ1 z)h9cR@x3Kx^1l1gpn?tllSy1hqW%tL;Ss1Cq6nnEQWMhULRYreW{HB$8710UO9ua}} zqJh8g`n+oPml$0+%X+i_07^(Xi@W>VQWjOhpQXb3ALJVA=`Z4Hhw%%sO=<}T(~qjB zsjaI|5K6}mCUjm@52m@`BImEBpqOxnatPj}ist&7w602Loq^{S*O95wI>W^i#U=pG zRGsNo$4?(piDOe6MIa06)NnzpBPv_pI|YaUA4-j=tCn|6XpE45P#K~CewQ<5NEatL zeewHIHL=pVef!7%0GO1+5aK`mN2yI4Zv;!LE9L>mo9ZY72Z*G7ho5Cxu_}W_tvnq%OQyw-%<4B(?&;EOJ^t| zl(t(f9AK_$iyx)7gP<~yG7ucpQJpoW2sP@*=?zdu>IIp`v4Ow?V^$T*c$226aF+5r zFES@O4R4fl>3s0zN7xg^bj?cW`e#ACoPBYOuCL-Y2KA1zET@;j7XxC}`S@d5_Ex>G zLzt$Sf~zR>yk}4%mZqwfPaqH(na2v-e)yd&`K=+= za@ho&6P$Lf3LiNbCz^v=%1nG_h$dU5$vWZtPq;zE~fovZF3X zsF8vW;EpN*CbBM6>tF`t1A$Z#dmuX;oGy?K;-Kc*!Y%zf?s6)%6X_j3J!P0NVm%`} zEmYRtKec5Q-b}g~xMdp?P-4$|s+rZP&(aSStYwoW*0H($s>qseI}6VJ#a58CkwGMk zu{(TFPD_F_kG5zkw>Z>KJ?e{_jQfqMjQdMa(r9TI2iY)iGg>vj(t2ER$)0{1yM$CE2nknv6%k=OF$UgKyvZ>LUB^A@t3JK)#MS*T4%(y@OBvzn+e#bvG zL9KLl2Y@g!S+Go8?fdtv*1UJ>%Z1aVjt)1hYrlNVRn+9jRREnkwgz!p<>&kZ4=31- zt7d6*%UyDj{{RkgRTrq6i@+7#^0z6d_W+k~b6#5a(*5Z!=^9N%;1lpPP<7uxf@|l+KbH zQ9Czk5gYZ=SA67ViJ^>s)COByE;8B388tLgqo2OiYAs0uAo&NyqiYQg>pL(HD< zKqoqXN}q~>tRgeBC}6BNA2h>4^$TW4Q0291!3|Uq8;xa1%8ufqm8N{dr-8Z7)dOD2 z9m{Ng(vk%OZO+}rQADwvk~bd|6v=K$A3xfl&}bJ50053i?^H=`Sx$8f9r7p*hp6C> zFqc(URaU8r%!*QnBxGk+J5(JfM!PaI3=9#Gn&;C|r5=rXG?S6A_O5GIe}WI?YN++` z(xpkGxO17L$?`|ifQ~K`?znDbx9G|=|3dP)apPv=bb`&N9FcyWCb!xCIY zEx=*~B|t&-K6l9bS3V}T_FoG4ZU;hPja_7eL(Mnw9Z4APU85Fb&r!j(M0k=!KxgtrQ*2f|h-4uVdSy{%s{Vo{o zWDYawC&~@M_!Ja)W2gu%AJ0BnjhL#o?Tlnqh#$dTAC1hnudh_j+EkxTGf{8DU-(1w z_l8M}BoJX^LEn7R%}HGsQ;Fg7_OC0{)tkkWO$>I^Vn|~+LVwHy z?^~TQcyFH{Ttxs0EOIDii7n(G#R@y*RrhDmO^=V{l5r&F#XPFU#k8m-%kTWHvk_&PLUl8qmLa{@fdLjnl)_^mnWR`B5l{PHSPA8!a{-(%Xdt=@Gcwm?q5QS57fu1cgNp~Db&MjQ7VRcA!ojZ6Vx zqur}DbZxXN9o#AADMxh%UIq;rcK#~6vbD6H+1NCUHCqV(0L(e>k=l@Qeh%=YcPlox zcy1Oj_VKvVl6;VP6;NM@`ke79+K5)%`Cv%Oqc<4+K#tWqSsEQRUAi2KLooA6gB!B8 zdr}p`N7F6}J<&#J<2asN>L_^My;KupI{BF(l^|-M?;*KFYgnw5lI{e|z^Xob6YWH5 zej#5ijiT6$G`B}vvkyuP=l=j|&rNe4XKQ&BD*AyhqfA)iHJKafcSeRd6Z2-_qPmT> z!o2G~)ufX_b?*>O)Fu}fML|^w9BMGADz`o()UAYT9vnWj)I#!~6$$mZW7cPA652UD zxX8f^vv1C8I#>g#*?9*-6Xmc3x^i5K1~3BS|4*L|N2wDgy0%d3S26vJ`y- zOl>I1G{MVU_>m=dd6ik&$@2-tTooRq!&ZO*#ztt=fbK5deISFd`d7cr8pFfWT%So) z+w}^#&7!2Ud;zU^!_*?%TM-d0t2r0|R9p+xi(@2%pQRU(T8V+;1TUzK_#Nn>riXFg zJXKSa#@NO?8iW_pZY7RYc$_1y=)h#HMr&^W0IgifG*YzgUNQ>10i4xgsn&c|adV;O zWF|E#6-E)W&+kkWczecD!nz_WsAMZYsE@UCvm4E2b*{Z}JdO5FD80b_yKY2u>jyKgT8SUCgzY6`!@ z*B+2UlaZQe*tnJ?jgf#1(G^m7YJ;1w>Lpr%I4O^>58qx&2+Fl}RzROnPr$4F$U^tg6^xbN>Kp zuMa~%#E5e1oWG|X!K;kuo}~;c3Pu9F@0Mpn>(4ct8s@SsE(0>FfIvH|aZ#)F(@WB1 zm4Ak)a5L!JNUJ(?vCi6Cwz96@s{{?rYSJ|PQIQ-`0fIeWIIK4u^L-<2{{X#d7u!fl z8P3OwomXxe4~EXgn;w-MlUV2Kc@USQTsQF!6%=}u?OiqJ#0Hi|Qb{3L0LNigG`FQ) zyV`_y3luMd{LXpBX2lT=liY4)R6uhaYEZAb_R&8rsH>Odt7ojR{kell;|@mun^%YC1qZ zqx;d*emis2Ww=c?_=*6!8b$`6@PgvHMqXn)iRNStDS*7)=JR0m%Em3|N7fhA zx{eroR-M13?D}LF8OiQc9jg|(R+XeNiIqUe<&>P(Qr49Ha!A~)K~aB{(O^{S@+%1j z*l@%F=`>2|C+ZI>`GW@|AXZ4viZ=>bhRk!3#RCZaX{0d(5ZI!NxVE&49WDr$R#l1L znjwHz^$pr{%a$#ptTJ}X(O+UUJr z{^>MB6miEM6Z1N9RF9fWpXh+N?l*KK?o9E)#JX7$TX2N;^l!wNO6X&{Ws+ zrT{E4#(AiXbnA@4Ln+h-8P5ia3i@}E)nhq5wD$R=D{>Bp3L$48NJp+#`di@BQOZx@ z`+1~&a%fO}EWCY%be#h%qzk1L^#wW=>pc#VD6`1@&2t3729inOdW|&45#n1(t|d1R zrphouIMhBXeA)esMO%p;DB3rTb&UFct?OSE=nW>FxyS<*jTT5SzZ{TiD=y{{TuN zo~5i}OLtKuUZLFW*iZ{3^IR%PJNb@ImB_}53*&hc)06h7p!$X5D~y%{8NlyMOG$d> zvJmVC2AEET#~2`-+$1ax`U+>f03;SQi(JK~mhE_p2i| zszqE7at<~%rc{7NF}UwRVlJj1)}n~epy%7LqJfr7oP6X}fOup&k9?i$Sk^Q|-_oEC z=`)kxIT)&qbn0583os0&KwNC#j`am3gccUEpLVTE%Q|TZTo6IV z2qP3h(A#QKLBLeWs4&4_H9d@gAGK;Vel+*k=XO6 z)ALFXyaAV1aCv?cIJY`pVNcR zYGJCzNg8%Jpw}Zx?}FIm)K)a5i*k4Ntwbna9OTti!IwD-LH9HkJA$RXA(U-Z0xX$2 zpL2`~B51?yQmWLD)KXRW$)JNi-|InOD~*BUy+KPuoPGBdQ8|4l+;%mkR?!wYITQ(( za4>Lt)UXs{P<bBSB7_HmQm825OIb0MRWBb!}XU5f) z{mrY3W--jF0k?O`kSf3riLNeuiEiVXIA*qQIAm$_0Oe^%k@bG9b=EFKu2rRAsF5bf zgW|YbYjR`MyglGci0vINt_&b9p%t(i+iv97PB~)NN8v9BmA3O1>U4H2z^i&!;EL?c zy5M>@OiB8r%XbspvzGOv5HdClf2Cr@+--Q`>iPzXC~f?>+X6o*WU_^+KC}nU`baf@v@J1_I%#KFm!g4{X;zna@shOi+^Py6Iy;!1p zmz>c=_KYoAMnOKGIdRGDpS>@_M;mS9nJw=B05Nh_<(?B5bij4T0ON|~txjA`#mSN6 zkc}osEV6{EZkEXyjc`21=U3XZsX5xar+C`(6iAX~D1ePFfwhlg?@xN^ z=_@Ai`OMEIUD)aj$2xuo#ZPNj(lds~7#PkgTE&w9-zJ zSqSu#%?5SN#(#&#`lE2{19aIN)u%Yq3{Rs&VWZD=F~oI=2oB*8rKRTp1$cn$m!7bRq566wYUeXAC?BSXZ# z9k#Y_CS1oGmNvHlwC69915X;vW@Q-$s0ecU*X zqkxL4ZGW%of0bgQAer1^k!TE z(^pF;oCsDMX*<_D8kbt#M$}Hsda!80RVg7jVk+i2 z#&lB+ zILm2K??u(uQ2A)1^*1~l z>OHn1nX5X%&=8C!)CfOHj%vw=U1s-XwI68EZAZG=0xCfe5jb4w`5;&M>XONtrQJRZZ zbeLl|OlAOrg|xQ8Pqk*%)|^r@6(|8N#X_H=vrs+th3vBVUT&rl>LCtMihSJ1Yy+xQsk_1Z^S{y4FEGBKF=%3}v&GU_%TF4C!nNK;V^S^9TeTs=?3Q zukhJH1UB1ONXqV)c#8rneM(tyJN(qJP8*dBB$0xJ+%9Ti)o70pS~kkkIXs0;g=-wc zT=T!p8k`HDvjwPxErGH>n)SJ5O~dQ zM0FhxrNty+!^^E#EsvxhVOgU4yCw<@Wy@!CsMb{0-8Lo!i5#|lVOzaiMrVpG;e}HQ zOow-4>f7eG6<>!f*KKKnMpsbSj>eX+v!VQ=w%QXTx~?lIrtWCrjNwtAI4r+d_^5`9 zr^n=eVr48z)tuu4+Jhcjq*gjZeqUBdBRXiUzMp!oGK#`HdQ0u9vJAVO!z^*CG8N9} z>7dK%P+nwcnPY{H2vLUv-lz)a!}{VSB$eC|q_NIw;DU8lhC$|yDd|>EY7LH|)E7vS zEtj$Pq5`+^1o9E&#!j7`iuzih&AIU0j%2uWA+-|g`f=}DoqtP$dS6?3P(u?0j1t9t z>3*Z4vyr4w`N$`bcCK|mdDkZCAE=CEhBXrwbaai-tD==V9QOI3!ncS=H1_M0gQ_xl#b|58aVZ0lje{D_ zE-vbwM3fM#4>k0M$FZ#7KIS!8;*D|)V;-(e1||ISgBV25t0hP3_^YAh>gv}fHc=5& z1eQDJ+JN(OsdmZjk;O#-7kZ5*ywyP6XGD=`4XRA#6n=`|F`HSC+OPmHEADF4m15b; z%Es(FGL4Nz3q8c3lCjBwvld(hG)0LkfvuYv?L;eSKx~%)XE{Bnsr62-ny`(KKTz*X zOF_+)zbh3=+9Q@G3lE7dR2l9%BlwE1!$mLHU)x%cF)_mB??xdbZ#-=W^ zSyv;Ev8sYv+hg2;nxI6K(*w8QUlQD^XM_#z)R;PNLx(XZi}2 z&!uxo>H>l8h}#@xE`OH%6>8@w+Ix52Q7wP>spG7 z9^=}mGpAhWT&M-Jj2>$k-?K?#Sulj?bH1Q>rDYDPSIN;Ue-T>&hjH&njA4LA4spR1 zLCUJbD%o!8d90;Z86c2;{{U);jE5%x&=Y8-SS*2~ErA;_!tdUwAH*?B19=X?!2y;* z-mF%9YqtE^V`E5&!47c8eDg}E zT|h&SHy-_{gJMYIRmMz&<%#_@D#R`>HEq5HOjQcm$sLB(q*M)2AoK~2q5$A?^Hfa7 zov4Tf!NH~}!QcDVRd<<>-)bFs&9P)%Q7r#KkSY6nPF zcjx`6G%YQN{vpGSI8*IFJg!I2dMJG)_s7KrgEa-W2OxY30hEsQMbXIF!umnjv7nXB zvZgzp>?jy~aYYHFmmA>cV^npQ{v=maNg-B|R416&!R=hAAMz3Z0Pv#zv{!%P#DX{) zC3bKMn|QEu^ZQq-#~E0?F4ji=J&a5YE2>0a7U3~KI$W1HuC>8wi%^y+$bR;FL(A zOolfka+y!?rRQz!zer3e*IBh(w3)Ns7v#CXSi@kLz~!BdXMy%0g1cPA7lz?T4P&iDg6^HRNj zFQ~}aA(W6m;i($($X54DtdKF0gH`0gbKRtCj!EEFn5@2&14%16P*7(%svhhHm|y?^ z+lLWcxjL11#yB;Y z)n#4`l^dP+HPN5NjG*CFOCA7G>Z2Fyt>`@x-V(2PKz3cDZUFxPtyBlrdW11eD%uwH zX~7$+`{IBupW+!})sBI ztJ}HnS*^-CewreQWY?Ew#s>nWY6FeQ=e4CH6e;u&N|y-#W9{Z$ia47OvZ|!u{$XQ*3?!`K-D`S{;o|Yt=gv#e`YNCm^2H zrZon9O3T9T0r{pHta5%RY4Uc!8O||8qvU|c>A-myU?T5VSyc~9pHWwjMv?byS32vz6O&W3y9@ww0pIqcP$M>e1q5*4PCY%3de^f!lD?ep`&Mlgy}M&pK^)?$ zty^GSN&}^rzhhQZ9Tc#}2qBAmtu4ZHs6!~jX*g1Tl6R{vmz-qF={awqj{=RzBK1@x zWp@W`_p2PbY09sqLXZ>zkhNH4UrG<5a?C~#dI>{hQaqezxIEB?g5c-xwPwcJ3drG< z=NfnW)rn$=ZkeJ~z}b#l^%~Dja}M6?}{djX>FXtlF@z*u08^w*rUbW6X)-z+DbDApXCa zjri-FyNgLa$BM6B{BQKR!&PO7pYEwEjkeL{MPl#7h1*o7<(F;n8mhqS6_m{`42(~b=lEf{T1ZtAyh^TIk~Ews?rU)X^bU?BR=K!g97+j{ll2kt zT0~<R7(3vkT%#>V|>7UD&&?( z$Qay*HKV?9tJ9@sd5_ZZkh!d}r@snaA4=-_WmC9nC>uyTiM-?huHmEm)WshvWR}1g z^&D-AxPWdt)KU5dxpTIN_p2fRx3RgIn?fuj1cK*$e0qrXQX;olU$n-##_U@UDbjrkJ={lN&VksG;SmqlpJp<{i)m-x^!hoVP$OCE#UR$gA zZ5hBrgCFT4phhK#`Z7avlbldjeI~Db0iT+qSENF%5N*I9nwkMnWJBlM!nk9k5tctD zfS4r&0LqvL2sG>{qvVX0*nmBhVuLE{sT4+6*f*nkuyU80Q~ackT=U%4gx%%0(rvuO z5-z9nevh^)U!z;3_^l#Uj_xLiWa4yOt5$tYbSc#Bp8_f3B#h*?oK(d^Iq=yhR`?os zpvUTcKuK^DNyK9fpVVrgtJ_HA36NAM^o81hXu5o3BThjaw>3dYX%>K*NL=!#)%|EP z?3+c@kd@djQJ;3j0rxHlWgBO>ptq&2j3CDRlkZS-9y^{`t`cNA8%~BPur<@iB^g&8 zURfes$)APVt>o8J()t8aK!u&d6P;`IeXEy4bNneZs+lEXH!RKSHIaF>jf#Q~r;Huw zIXnJ@(>(LUtWZc5f!;;=tx6s)og`Q*bfrlEs0Si~({U!Uqyho@*XcDqTGTEkEOa9P zPQ{M`wK-NOYJ_ZxGup-yDUAe>`tjwpwc zG6J%k5!`p6EtzB*{{UVvu`mq7X4AeRi)4F>zu*&6l2CEU*EU6@ZO~Pykq1(6E(WepDY<#v{H<`Y~ z9atXJTv-Gw8tNk?jtxWt@?hlW2a3}*QPq-8>PFS1S&hB`-im-f(t;OqYE8ebSO|b= zMb0ygv012TPC(K==895A1~7RW=BTVMG!+HLYKb6Rfw`c2m@&TJVN^mPwGlEXDm03+ zCjC2Zb|#ccbB(sob5jIO!N4aO0~8U|dEaxjRcS|NG3#ahs-G%`pIp1oS zAYxK74nFh@z~iwW6bK_Q#@X$YK{)MLZMJHfgtm?jaCYt~i=rfjo78czuf#j~ zEe*#=c%zXuq_%T8^~4zPKYZ2dqnGL)7r3(!#W0Ii&{mA8$pHJ-KUC3!{#hj_#uQy+T{)J_N&!N7#uaVmS;HhrtQnbrQ6cO=99EJ>pM$(x4XcrIWHFewZ0jV_b&Kn*PM`RT zDy*^TMp<s18WGcF0!|N&k0NL$N(=o#Mlf>d%bJO-B zD~(=v0rAKB*Dm_UZxnNuw(>~gIMLmS0}-iz^sapJ>DO;jzVL_T(g3qHoR4pbP`XrSq73i(FeKCV8ZYg3~D^#1??Ty-EOL>5pK+Zop}_xn@y+;cD0 zulgm+TgL5$aUn**Nk0Dodd0r0p3Hw9b@;l4%H2l?knIwz>zwOh-lw*&6BuaTpSNm` zwOTf!dwuAOV?WcjXeRBC_NxsijIakIJ@Zo!1-A`Bi^W_!OgYpywNkLj1|2rLvdhv{$S`KSiGouzGZGdrDw9^VvI7U2=p z$Xie9)AdxNqv^eF+F-Ww#uhOD0K;Lvz5CFNyUTTs=499+9DseR80)_PbRMbX-3ydW zVkRY2{XW#`i1m95^y*-$sY1WRVtGUED?F9Qb^eU<+(?qi98$u$GL!!R-6Ie49T<3byVyo3=o6TGQ?!iMcqU}KizAbuD8eV9;5r#qnlLqB#taD3o_xstw_zF zEn9q{J9C~Y;U4g9-Aaneq zwM}XVo;HnwxWQ!%wK2I>N}32|Z&q?gwQC&Gxf#O&+a`?Kt3Uugey-I)9WpGjY=BP7 znhhSDzD>Y01_nP-2BIT3RFY|BbjBn)PIuaY)+JG}I=h;JLd7P@X$ln{oO4A|uo%Y2 zeoGGZN~%fq4JURdZ<--Br$^NFgM7c&CYlE+NusMg&mGFimJNG=Sf_FvD&PHiQFk{?n&5tQ!y%5{WvyH znV^A?4P4fJuqDAdL3|KSDmrm>I262j+Yz>KYU@40Q`{3C5E6MHRgP4;bZZ_78l-Md z^88kjE7?eAUw%F+QZwPQW+w-Y$vvwrR+Wn6AA^Q9P$kr$G10K^Shb|#l(@joLD`2j zV%q3zqk=LV706HG>fPAYVAD?=vB*>qfa+ZP(*}Fa(iJK_T5zMaW~uG^R>JT2`bgTPYZ{hUC)mhPiu-aK}>mM1M|sYTQaP!sAw=4wAzRy~*~aAgfCyM%Lpm&KtF1 zptt=z8-yt97?bKb#*L}6};Y2tK zv0e3i)l67yU(Al(vKaj+PRc##3X0XDk%mSGq#!#rO0ira;*iRWzGQoa2U6qOvtq{8 z-P>JT>rgj2C^=F&6_-wHKcd_**AT#VY$v6NHv0z-=;mzSUW-pvtEh-%!YJ=BZI!Nu2G+y+AGO_yl8YZ(4}YALK{@ zU>xkr^$O4e-u3i_BPB*R??V^Ib)4#48)h{JH`W!_;bHzHZ{{Yri)S^cI~gtDL6(gefB-GK8f!Sq znjt6XSkqQWQG#lwApZcDwbO8@#g(w?r*{U62e(s(<~?u*0SRdp_8|LKY*1D=9&iMx z0I>jlstrFiV+D>CP-K(E0Crtw+Eph|MlFm!!2Hoi$!1EDG_c0S4xvG@(robxsr^bx z{{V)fIeweh1DAq-Oo;3dxW||)SgmL+6oBeU-x=*$Ak}@3_n}zcD^>ileK;k8f=@MK zu(}sZSWrsDNi4tR#6L)_T8#_aXK4~PeCzcU1Lz*rHxP8z_VOXOk+ua(MXW&Fow>~f46eg4fN|Zn6rWLvebVl38Pe&%Dw^X9 zxjw?TE)0&D(;6pKo-zZUNj>XVtw(9m1{Jr;tLatlE00RrEs>~m?O9b)&ms+B3jhl? zJ5XkHo~n%-d2)#7d7QLe#ZZexxeh^n^HgEpbuz?87fOS`?^}qqU?c(t#;%yU3nQJy zK(8h88F3lUb|-2guBFsS^4>F~=M3G&Od0d_*;!sPK?n68s+gJrFHrV1aW#3jE3+PV z=V}FcV8dh~#*o?n0BW#Mxe5n-;IFk+Q#+He9CM0dDKWM<+rPb3R);4X8VNw)A6NCD zA*E0b7<^L@$mEU16Ebt%-R`&6;JJ^`I@NY83UH8>}98rL9=i4~=l2&T!%8xy?+$O{rc+;Q_$ zL=$%)jXPk20N_9$zeQK>j#ibV}=E}(YU914`el0ps?kC8-JSYT@X z>WgQyQh}qB)OKWVY5<4cidg2cBE^zHNQQ&iVcgiRpjiQLtRVVr3Id(}e|R5Xdk z27U2G4##oM+zO~Z9-Az?oFK>6#(i^U~%qh2!uYZjyM%nIOV_!K`ZawXdP`xQWp%QXXH^Cp-4Y!v}nY3 z&uYddC_-O5`j?NI)Qbsb-v?vuL2HmcccQFmSKseJP;tHv)D5V1{C3^Z5);o_WO6H<2kHut<@p8oJt}HG3tzP z#<702K0PgZ)xS;Y@!i`(A-K67P>GbBW4O;A_0oKE{c>&M5pE+_ zy#qwPj1PQ*ITS#b5;>3uEX4A}?rSyC+gx?)R)sD6w24tb4<0q0yVS-(^q&zun`^hj zb~?U>{i@?Nsp1~4^V@4-YL4equM;1ELB$CfurR6sz#@u7ayhCjxru@T8y@RLz^=`< za85a+q~SqqYiZttW>7Gyw9sSC%3grNy>dRXD-7Z%UNo~ z*5zJxFP#hZW4&0GDe8Cn<{?1GW;}sQaofe?(DN?ieC@fUtL5=$)!i+EGb3Pv2~vAj zVM*_RI7l%@*0CNqXg}+ttF|9 zo_@g76tj`Hzcrwm*z&-URW+)L6<1(=vr)>`9d^-7LO?(vhLrwlS5F;dTgXVzqd6dL zQPauz*R$!b8Et3Q1_}E_f9+e-TM!iz?s@?YC;w zV*OVe9nShm=Cjpm8hH4u#+KR4v65KeVwz$6sqR>L7V}8Cz$&K=T_khSq1G^CkhE+Y zOT^!#(5TzpY19Y+hQL1*!&(n^zm$D{JdR1Km+H8q zz{nXVmaO92gD!ezVKT&Z?Ux_QJJmH%L72>7x`p)vuqWD;C2Kv*VFM^3@rH>0n!-n z;xG_}aUx;;*0RuPt-xl9v8ZvUd{&bH+uk&6Q#mBzSKgvn)#=?fN#t!rM}_qh^$*&K ziN|FRmdHaH3t-50(~6du7HDIJOL?Lski<;Ahs|mUNqBX$09dikJ*i@AGVR%(Jxh$X zHB%Qw+MN?_Sa!p=6>)uq zTUqJfa&eGz%|z6J8jc2#K`oky0(;XU7}h+l0f2Lfu;)U|A$Vr_9C;6dk6x zRJy)YWch8yFcQ~5rv1pNe3OyxSO^RGe(t=7Ft|(1j;#>;+avb$F6dht!fL;n!kE zwH7(zmR~B^sBferf7R3{faKC4L)^nyl4N?tA-H#6ZdHX@QKT zh{-40G{EUOQ|V$cwFFx49FPg`-l&X>cE)$^C?}}URPz9L=i-95kb7o=EgnH2RYFNv zZQt5}l#t^jR8p4(alTJ++JXy^xHvyG1boIA{=$O8BeC0K-22d80q%Fj1SB5x62^DQ z`%zSqSKNFG2Z#a=t$?biMsh|wnj&`_9AbizIR}i2s}~~?xHwb3Dl~s1R_Bj;nwAQ+ zfRIQ2ndH-2<_BwKQ-st;X{}hBuu=xY-xOtC?4iK)>1F*(%T}~qZEW%{U`KY_G-pW( zAF;(^w4y>8vELMfU!~ZU)#hXd8B#mZG}jRbeMABq={TsYxT0n!7$oj%NUX0p`w?1X z(L@&`ed-CX+X9NSR|h#G>G-N7E*P8*jyY}UE0AY9?>tKNWXfJ-hn$;Dg;-P){33mm^E z;*kKe`g4O?21nBzfN}sMInMMgbnlT=YZQj$S~vhjgT6nP!8Pu{KxIaL_Q zE&QUOstwMk;BY7oOklS-=CM;0mIUXDMJeSN09J)*MMyav$oo|l%WyJ7jgJfm6hk+p zXFi7RDT<+>Bh-f@oQkNHe9wj)=e6q<55w4)HwTjNf#H%8-cPhAI6$y z@A13hKMlhe^Dd5P(`e}h z_>xQceAe_tgG?|E5PSXV)RP&VDsZd`P})YphH1=Rt3~E>lcW{++O*95XSDp0f$?0k zUB4ojU};WONg2T_+O;DVr{!oa6ow#o?^|b8SlzlS5%0J?stV1~8E|k(;BA^NDMuuq za(JxRE=I=3Z1CUhRv|Nxae+a2kxs|@cA%87=b5K!vc1n#vebi#8q9!;b9Bo1jiy@Q(4%i%Kn$3!@E=JcT&i4U6m}II?ARVB)1Eilta-hD zp^Zc+?s1yZ_3|}(i}^96S<4Zft2Lf})@(7CU=JPZ5z_o>U0elSBW}X9$QapxEHH8J zOYwQmM;|$An9Wfl`l_$26+c ziHv|a&!}o7?rRo`y0oAoqAP1=-H&nYS5*iCy#=>%%H%k}9Awm^JE$K}@3swCs}x~I27UI;X(*`M1Re*;#b%LjQR?7EK~M_} z1IRUbio%WfI66mvdUYG(h+Lh(+uZS4k-JsC1_o4@vT@IGj=;)pGq&Ct6s8+_5y^{u!RM8J~T z$ioIX{pwL!h493)r=-+(o(&FIHXGUpC5JD`dzA9+XY$V8XyV>@RSd#t?4H^@&1L< ze?4}oDUhS;lIB%DrQ7PM&1=7n9=qXbI%`JmR_@8$(K>Da0Mg$z)z5XGC4_e~Ml98p zG!~c>od%zzW?kBqEuG#szyso@V{)&1t!MxRbFs}>gX3M5RBWTadPvXcPw^&iZCfOIj)h`#jXjNSR#w^|M`Qtf z#v{}?Ux8JcZl!WT5acl*QRf+{Yh3aaYyj;>uw1NyIOAOE3|X5yP>KU(g6StG0RI5J zMuJ`ftQR}#-~P3z#YXW;bGYnkz*VeFgIVVv3(nmEkgSuiU zxt2D_^A&=hnn!pcL#k;&#Prbf}E z3}DtRMJ6|gMuV)m($FsMzcn$rS}CqTe5hUBc~Cg2#b=~fIn?k;>N->%j%uJ8I=cx> zOpb>-NjsIRpEPJ+^wShAi6bi9=sTJU?XF73F#K!|YE?|%i4?0~k;4j#Gon~YDPt3a zc$ZqS8U3nMsq~K$$pMjFJmTcBQL$4~)g3oTxMmrcjYrj_aFw4?ZNE^8SCLiMOnVs{ zWN)=B7F=}94OvD~HDy?0ka9kMojg&y0IcOgjsW+qwS%v1k~zG!e@Pi!{*&!enCK#~ z(245611!gi%Pv>M-6vjeAOk?cOB${={%Wz;j+y=&zC~v;k1)yf<;_5 zgU{NmD7kz}#e#(~<7e0P13<1ip8;@2GRNMS2mI!|jlk@*!KrOFn1W$Wt%zZfih|2| z651<*6nSz+LnCf8iej+(H(9xc+CiaK92H#hN%pIWTm3rITnJ+(IPsQFS&wsAu!_yZ zaOz|L=VjkHH6&;pz8;X_)y7{hAU~qFjOYt!7h4jgqyq)Ls*MA5eeyW2$_pM^?L{}0=7*T`Y+-A2TYi9oG zB!(tkB})u~IHI0jfg5GqwlE5+n#~il>SalVQ2GY?y9%DBv!v@s%#u+PGe$J4C?zS1 z&gpa99-y}dBOrM6vHC)7&2Rcfmx%g}+5*u$ObcmPkZOOuNHF5){(c1C!*VrAA>93_ z50|9L2G+@{B0WrfPHCuaoqHN(N)sSrNh9g|QBmq{kCKYSk-m|=409JU9l<9xxWx|4 zb{VZA=po4?IjAK(dUnXB28T%*Ip=x?nL#+leX&4TI#gf}zj}g_ydRzFYT$`L1JVXa z@4Yn{u>z!mGD)kV&nWJA_@JCo4e~ebKt_U8jyKIf*7m5%;fYoQQhOhYph*cB&w2m7mZR5#_0Fn1@o?NMT=cP1tqk5Zq1id7W|)JPj?9qTO= zh4uvCdk*weUAys$GiX-&m)(tORA|Z5)jeg#KT7wh?7Gjo>IWl8!ts$>lTuaop{6=h zbKIUQHKq4fDHaJOr1;{Zwqv|sENX5BMrtD#eyC(Pz&JjU+Ng2VdGr8C!73`CeTi{Mlsl6@kJ<6o=qq>(V7T2(%MM`j&VUC-2BiD0x%BI zjY_BZhuWwsqFXG|6h31Dx`0op)J45md0)Wtd5Wdng>lFbGhzCL2+%jDo?negi)WUalskprYdqqdjpf&n2M#3 z7$gxzNT3+TcNxtAaYEVzgexl@BOH&t5q!``qjkt(jky(8D2~NYYYN2<%wKh>pm|}9 z7!}U_f!eNzQvqygaQ^_!nhA(kI4^1Da!iSi*yPX+=?#X-2lWaImK$Ndw?70` zMTY7%158;xiJ+}|oQuF!Jm*b8O#M<>F{#PN9~2Uhl?j$4u+(yRqO6uB(l!{!ZfF3* z4DpYe(7GGKHrV`Ph$H+!fAGijs6BJX--(v@w(DtZj>b~0ER3aaM)(4?d)7Tu@TY>T zrv_P~o<<6|AAE+_ zuRl@WnxSt7Fe4mblSY@vZyo{E#j%`JR$|~WE$>ijwiJ7kG6e=~vyx7x*nKr{TN&FU zgHTV)QV!==VcLRL!P6%gKO%y}zikOe`=`4GM)ZT_@hWF=j~7uhzT6+-hyP0eBz0TZ|$`S375FujpD<=*o^zp z65C$j-!fq6D~{NW&up3}@beS>)4@4sB>`G!Ei6Di8Ue zrmS)5{byL@IL~8R{W`xIBU`cC{{U*wQI8$^BG?7XAGKlV=p>-ICvZDe)_H`8!B6t% zbMs2=<63a4Naq!oqpM=5csA>npvTTCt39!KcrDLplpl`RYITmyPDEyMr9?k0LkAJP$#EEuc>k} zbCLAW94-*!4W7(D-liJJk}SwT+!IV{RghjfGe;VRCt^s>D$wTC53RDteI)T&#PyS=B2AL z2wSy@@T4$5P&?G9SA8-p`RVCgYG}tFwK=I-GTcizD+;qHI4%aly16v19yn1@D0vCM zVap$ymbD&KC-m1ZW~^r4N&H97SnA4-_^y(HXA0Qg7#J(wu8L!jjk|-f z_^c}TRblEswLvfn3=KdX$ZlvDu6XC#gImJgQcG*3L5&v#1|(-e_a8LRh!3n@vrROT zw2r~bgDYxq2LiC|Bd75E?_p;=l0p>TC`FP_tp*Qon(NHR9%;Cj?!9lrG`8QNQR-`twVt6C=7SH`u*I3)L}IT|*%0b`Mo z2c#A(+~&4(&ej|cxpTQ=o%_~Z?8v;!rFYzuoK~EK%2Ucl$k+PRR#y!irFR>GD4;JJ zQk)M`okaH)ymO-?0HA3{ryc4jsOJ&Nj-bc_Zi1i^dv=kSoF;b&Dk<%*{P_%%}4Zx`6AtpVU9=MinntGBE(KJ;C>? z1GMUJ#_b%17DC5aku$5~G#PT0Ea5<8)J|9F0*y4G>UOB3_+nPZ;0lP$hoH?Ww6UWq z7Gg8niq+`Ti&$CM=1Ch!LHe=Yn1JJd{N}A9KQ#*l>^^8VnmJC#03S(Z_Mq2;rAMGg zfWx^Jk;nBrB(#~*Ii`I>Az8gEnypC7>EXo6{lUm@YOP~#+C+JzjzjhOR#yEcvt797 zTD?Q8Po*s-jYv`mnGPCd9`uu3JDEf!?4{aB;yyr&%MohW?YT6}NaLhb^Sq=V<}&FE z!i?@KSan@o_wc~w0$~*Z3m@t@qYNjNCy;sU>k|5v2K)Tcp?6nNk);rg#vBc?SreMx zD7>aw2+7O*(F*PpIRph;9n~NO=2E zanM_I<(G6g1L_^cH5XsrMGSgD#H0MQ139QUJFc^Jb0R>&BN+v-IUe6>x}CfO1B1_)pOBUFXjfECzrD-@J(+~w=5BZrAP#f zkx&VI0wXymNFJgG6d16@B;!@S`gd;CVkn9MGx=iN4JTBNrnZd+we$o|446^aRI1yW zLlTcMvw#AqIVa+=Ms(0L?9K_cQo2hWwV#@*qo-M2K_bJfnB+Mv7|NfTXd!Hp;&)Fn zNQ6M^9hlQbX(Bc{4lr?^^oy+sZqb3x#~9ze88=E2E8&U8tc~ckZOxRjPb)_n5OxkR zy$BA%K^T`Lh6>uzhT@o&$UMGgr2uoCRnkUjTE`gAm`>aQ-mOLPL}Dv0l45g!)s|#@_X$OkID|G{EG8??F?5-kwkCrievsRE=XK@F}J=m-u6B20W2jYw$Pao_4@F z{{U(=`qsI!Na6~gP~FMzS>LXnzZh(zJPqrn{CVv9d1EAC3J64mZGt{%F7mg*86Oo* zIMTch{2HQK+#gc~Q@+${2YavL0v9Ss0G>q_j+%INA1(0Ts1eO)6HLlT2Y|i(>MT%w zTYH)URwP57NF17$pbNRR9(L_k0a>xe{jpmeECFrd$iR6AsDHI$)r?klY`Hvbrjc}1 z6PXp1i~zaCFa(K$HmZ#{Zp2TPP{`|orm85CEk9y%v=%Z)rAQfk?^e{!Xk6IE8my5_ z#iSp_kFwW0U3uY!bq-hr+>?P?<$LE7x74yLDZx>s)|`XMoo?;R9MuI&Wg&#f2H4I! z;)tuE>On5BLP;4JHE4%Lz5KkT!75iF8``3azVTd>I4+3gc2>sqQCj$dQbQdIt(B z2MfO9nk*3vZ~f>a<&N1N^+c3ohBX9y)8BF28Y<*=ap^!uwF0)i5tdd~P4Gp$kM{Ms+4SGL_M`bt_V?xiV1w=v{ zQq6(CxTUR5b!<_we=a!G5xX;X9`u!O13ZYo`0M>Ctooa$NM2};3GJ}&RX-m?cy1?- zKP{qI6vSAW91?csy2#^h*O_=y-q!1@$R;JzTbS4rxg1wH{{Yip)41`}iE9ax2vtge z-gCFC{4ICC9H-jgZoG2w+sG}+N4UwHFwUHeY-^S2(>1{xf^Z4Q?V9Cox=)B)5BqfMF^6JDea$MAvN0t`+cbeq3WW=tx4&<-R7M>48w$->x))H}_n^6^Y#s6r zz#0J&6qB6i+JNbBK=fg8$)F>nz@_x+#C);N4GIR~Rb^nLl*tNBR$0uukUi+4BZQnN z8oOh}zizU4vvBu-LtkN1tzpY`W_lJ54TqK{wNZkk^%6%r9imzi> z3=H#Il`z*X000fSr?Gid)1bx%=jsi`YB56GD}o5Y zT;yV^4GpPs1`aqiDG_+c131scOlwuH{BONQO6GP0PM&+>w8EIJ*zUvy`8(A_WV!dA^n zQBpU~dx6Dc)!*4vmpR6odY;Q+y2@$Ce3Mege+THff6F_4t1;>FW;3B-kc1Ma>aMu? zeb(eMM}nXQQ@973y5hghSx`g~bAzeR)lF6}OOz~)8+t~f2^BDFT014u`A5tpHutGn zYTm~tbuy9P6d8AO24EC!2dIjw8d)*6*fl^>U8*nu??7rU<>Vm&87w>1SQT$_8_QD~ zkE%oUwMM9TZJu&OL;wL|&UZ9HFK#1@XX+;y98+4bjLa}d$OB;9R->3_ke1fi!59nv z^(&`6EwXSMI2_>SxmRr1)`k%8x%7dO1#h3PKU*2sf*hRyh6jIYSWcJp`^{d0a;>p7 zpImEJ!857yt%sSFEqcd^;09pyaeL(vh(L~M}iF1u3VTy>mr`n@FXVxPNkQbIU zVjrnT<%E?93#-uItt(ivgbF0d)u@w`pQ!xQ$4_RrhPCkJA`6l#1? zY@yBoz#QkAH*Tf3sCLdMhk$?r;GObGsfs3l(~jdNvlUco0Vf$a(nWM}s#fWg7_bOz z<5wwCsHEwWB6bRJOR39L*5pDs_t}ZxlUTL6&ZX5C%XsCCZg8#zT}#dh>-K9TK65x( zBhmu@06jTko2NnfgvK-~uH=5B@mgVLOt4L4%5e;T<})4XtkZRixbC$jq)Qx74SK-C zxvDENp|(2kUrsQ?)tWUU7T+wvUmykLX;rNnk8MBSn18iUy#74EN~B`DcIC&ucG8vj#7#aa1ISM&k-e)JYl&9wM=&7 zy!}g~U6^Od0m(wCp42>?wqdd<7O0t|kdn-wq-5^ zXM2=GAs@jGlofQw!9*H8M`Tg{wH2jzW~%!luGwsHP&n$c$r}jrs25AP+XIR!`&PCn zs*H`LaKVP)(^DB;QqZihwtXRh1oMgw>7oVjt)G1-YLpQq>kLLo3x!YR?t2PII9t1e zE@p42vD@OVHx|I-Vrn{K)j(M1ZG0M))5lk{v0qWikJ69v?N&MYV{fHh>5n82Ud4&p zwff`u#skOKqRP$zz&Od|3e*+Eb+gEGmOh`g zN(+ME0i<)C{i`%=MIgX97!?G}ig(X`2WkwiscA5{H;bj?K$_5>RyZ|A$Cs`#K0$zt zhR*_~2v~LdJcvZNW4L0cNA;}US5{ng8MpG@Cm{VD$IT>7WSC@TEXPYZ%Mn@z+O%PW zdYH+KoX}{S;R?Krp@J?#AJ%=U4s)a}-NVYLs}h{ZR4Gj7ur;WQE$$|Tzb_HK2NJMQxS-4EF0w^%+Z|IjO%;uIVp)!lRu69VV6xkzyAkFqMgY!F6dG@0 z@gq!5!AMej(1AQL*5Hmg75u?2y+n+#Z?#I&zY+s6j!R*$QsPBEgGkMCl62|Nu=4WS zcU3vsy6XWgqhj0zAYiPNv~;#@EQz8pm{Eq-IQbQYQGIanr)t0i&@vAH5n(up0rB+|&_m@HfeziHxZs zyKDt$RN=o!$f_k7EwCp()hN_~RyF!VvFGBks~~Z8>pKoVr4>~3lGxmzVOB5eqUiQ2 ziK`x>a%(oabIKh-^2~qX#YUJy*e3ZWy=qrJxjJ0uY#+UC%EYtDBxB-$X1PD4ANh|J zQo(SLptAtY*i^OCjzLe7a(D0csViMfHM?rb94_S6-2VVWi=469dFQVOEwem1R0EPxD#_B>ReyUUX)8Q2QSm~o7L^`J9KRj@ca z8mNY{r#yp1Xfufr4{hqInXZqdaz@n!ml|*x7>4e>s^JW`2OIwYTE*qsb%71$h7G>k zsRK3Bo>=Rx7S}IwL0J5~BX-6CtBz_O6;cB}wmd3&jRohaF&Y3Upl`2g4B2j7$QrZT zBZ_FXEtGNzKRi}-OcZB;J8e{2k?*B>JW&V!RpbF#RZ5I(cWMf*ED9-S+aAYy5tOa5 zJcIL^sxsEypRfa*(Uc~*D8wMn*eq#8P!qY&+}3qab<}Xby)?pP!4yRCp8Qo+au1rQ zxHdqdBA5q#&*@q!D!QZ!NC5Yu(eTV8$WgF8`_Td3Ck>32JAp+LGALC5gSJTSwUq?O zF_X@4Dxyywa5RE{m~%x!OHtU6MyuLvZpvF8~v*-FSH@SRs?$*Dz=LU7&{uGQ5-h=0z1@I zx^a`5DiS_%_vVOFXCv76ppaen{nt-ck9nKHGwGh+7+JW7>mga)F5c7?yh?9}_saKVNjBap6 zM?)=24vsvbI6H4!<&Kdy_&TsgX+Y;EBfqr(vN0PB@5rJFh5!>i^SJk*A}QY*NC0E^ ztXSVBmQ_KGIVbv3Emp0a@qya3%Krd4fGfZ}?NpOg!6{ZHP8)(nX4Nqp{{X#ms!?Y+ zT#|Oct08Ezj0dZc{i@=?1<8FXc{`tKG|^N5d=5#XgSl--1A)a@ods--n{4r0$0VYZ z=j}j9VZPYzXo$1pu_A_)QsnKV5x!_Db2P+(zMkV@RS;kRAe@kQ-l&2w$iUy;r6WQy zmKmtfXw<7V`()r$py-qll^(2MliHB1wKzvzwFl0stckR`lhUd+6R;JQgw1T~ePc)` ze~KE4+vI`{MtKxex{ct-3I-Vc+E7e+q4f%c$Q z{W=g-GL3n_Vt%Rt`kW}PLvXwEMPklgTm;HRoNC6#s@AMF5w4J|#DSK^!n139s=DYj7v;TJhkhicxi(zmmS2)yDHhQ_1DE1l_ME2u;gc>)kroT(cM%hABgM<5+L zXJSuk)VR-+mSw^nc*t$}UJY;c#=%pfE&wVHF{O8+8aUqvLm0vO*lgcwixUvWi|8b= z`k3!jO4B*t_O4wix}J1^2n3!DNmf9y+_?lf1TUmk*8@!ZU~xJ*a=pQ-0J~BIb13uxsUaPW8;d%G z$*5^MmqpsptzxR`W6B}0 zG&a~g)kPD=a0;ox-zJL`X(0VAQyn0M1+!756UU8S;B!QyE&haT=WkVEg}30iSBz{9 z>)y2%Dr8}a5CCz8PkOkt@sUdm`Jmnh; zf=>B8sMOe*%I)f71 zZ=LFk6$EkW125m=rCBunKI6;>1S=`dpL&VcDz7HIw~72gqsfd7WNq#Ds~$Ttv-(#|F3i$6GC9a6-l`AQa&=&oI#^?4Pyu;sp~R^sfOpa= zI!GqfBz%^WN&%lSx6j2~X4O{xVni(nE1~x?d(>E~toku5d=&w-{{XEb&x_~l3oV*O zr!wjplRdLlmX()Ph7?p$B$+B%zn9{ei1?$c3D?Snm_!#cDg9=Edl({;0O-L=jS?$y zL6-`aV3`=zjYEu9T{q*Q>UQ75R8{q3Dn}>gjPc*C3Xy4oSlHo;WCAy<7rwo#FQzoF z{20M)Lnj=l?nP;u=%2)pM)Ab4$g#w_T(_j=rXYACmht40CJ7px1ue(TW{afgFfQI~ zjM&|V%bJ*O0=wz{Qj@8(*_7>8MAeD|G%UfuB+$fGrkbUYSNvwGpsI0kRY_k0BYKuC&59Qlx zKtP>T9PZy06kmw%g~5){t1gxWm~IB#RShJ5Ok|>;ENsLMK4>}iw2_z~Tp1fyPQVX( z+O%Pet9eO`k))Bn2fbp{S8;I~5gRE-U9kd{?q za(*f(ZnNSi(2r}C3!gbp1XBTB6{5MfVInIAZBD#msCYzH>dOZXeOu&I6ise0aLgF* zmE~%xiELew|x+aU=bs!V?szfan;V9x6^VS!iN z?p12YC)4`6DxF1yoN6^t7h9END#LStG=Yuk4I6Dx#g@P%WZ>lI+Jg(INLlreMn@;T zSZIGVfyUKQQJCi)s^E9ipL|pmxH^W%7~+Cx*v=>=Yc3n(h931OG{_Sy2dMG!Q9|P& zmLn&6)DTIrk-_a%7ey!oVY%dr%~+E&4%?muMuHf~JA=DjQa#jErwt822uyOl!Ud z*aaL6Q~|T(?cC9+aI#K79~ES0tEfnu6hW~$YT6lWM?7P4DOd7N1+JV75Kc3-XB7vNj@78L8H%$mNEkUj)p2Z3sau5#=m`g$ zZYarErZ97{Iie{iTM`uEPUfh&G?oLmaw=A#Eu+3w6p@{Y;*u7LX;u-82Yv|bD{KU~ zxt2kVT37iKY71cMvBUs|AZFmdG!{Vsl4X+Z!ztw#(~1doyI5juMS!Pu-!*^$ZK$Ww z-0?^&ErXo>u~!i>cKGxL1b(Ab6qc=lB=aE;vqVp*3JISlLo6|8AFR*-WRgrMViX@% zDq4$XglF3ojTOnb`1q)?AfZ%ak~yl@DCVkR$jRG(wN$2-6Ydw^HKZuz#>=@ssL)bL z)swmIYO3-9-1g$2xXF$%LF9L!uGZ%aNZcKOG@)dYeaWecl+m03cE1 zsoRRGCTk$7ubhLvDkWB@KWZTEo?`X+qx75+L7I>e9;1!P$Gucn3~Q5;Mn=SKL3$*i zNe-nmj4|GtA?E5J=@|!dv_yo6*#&^#Dh*XyykPP>j`UG*M4=0xYzob5nyoGT(dod( zNy(_*gZ!}f6dJb|u}d~%jKZZrc+~Cpu93=xWkVu{W(r&>EOJn1aw@T2i`9osduY-t zh>$>}Dyn}TZ@xLMn8S#=@g2vaBF7cRBz%TAi4OO6i{pu;9g|ogutgB8aKpM1=I0V%JmO6>f+1MJatLgDZ?%rW4r*K6B z-o%m1rZQa$=Pl3Lh*7>y%-?DXWF+TuFlvPh_x+6)9wpRGWw}?Xm%@RT_7ug|ox7C; za@=CK9O>?+asuN3@0twzvIaEnN7P3Z6eYYSMkH^icA^T@S8R9AC@Y@mvkZ+m*lF)s zt;Nwqg-LRA`czaXl(cV2C_=FGpRY%KY(TIvohy>RUaIKv z(LF9k1zSSu2hyi-Xo92bPLjAPx+FMwzd%0}3hq-Ji7J4nj4#vns>lyCM{pdBE1kjO zl#NL(m9kTA_^hIcr2vq`?YJ~m-e@>%qdBH&KE1|rbIW{D zTA|F!Fcu_Dl}8_XDn4d_aB^{ged{%-9x2EVfvL#I6oqJ5!8nNsP!*V$AFubNWli1Q ziIqwR3x*-MHJ?=pe|hFeTqsa@QQDR|@mDjppXDCIlTt>g283^ha^Bsmr1;`0*9rk3 z1_wDKH8m6R9!4fMCp(bb8lJ>k4X&Z3wIS|SniJbBOstH=aN4UjEDzM>^^6ckob60% zD@5Ee&Yu3pwT%>ut3Fu3135kGON07CDIt^$pGz;jHOr`RYi=bX?jk23si*>5O@igMqB@D2ny9Dq0`x<{VT0_PEsxFqZV{{ULjP%_3O1jtEXxK%s~i-K+X zn?1U~LXoR?{X-q7i&89(a0e%~HK-kB#(keW@2zO>>6Qx$a9=lTb-Ar&dVSla6YMJ-lRxe5_-ACzqg)_<j z$4e?#TmJwOL9Bto4{yBzxAJNTB0!oKP6yP(-m}uhKx+XtX<{-n?^u!3*`L%V*Nl%^ z`dNp1->K{#+3;{q0pQe8vB*(_1A?bH619P8xJoaN4>xi8}bB!k_ilOb@l}n9-ZJLd8aSotzc0B(8)}w!@!9S;ruwp2a z;L@6a+jI2+M)WKa7+r|NXXz(=d{uGjsRZHoI3FvvK58*wdy%6)tyw!ab6Kr($W(~A z14(n7h4-r(>8B;BkZ6<$kQ{_ly=lRj)NF)q0vx8CkBW}GuIbp*AaVq3nn^rSD>e&# zEsj(jkMjzu(UFw1s$o@erF)vwE3C*sP6L+NgMOOI;@hdwS3nBBW;LDy)K5`yEEC{G zkYh|10|4z&e*@ZG+^T+KPPo(?ro^dGe_%|g*6l}KZi z;8kYKE9C{_f+iTz>NHg%FsxHyr;|Y$<HJHD>LywU*4 z+zQl-hfBF;B?OETUCMT=fNQI~AhMafnr^95A$UotKe2_72L+t z7LrgA!sv`+Y<$$jW4}O<9IKbxBoFkfiWV-dJ-ZNANc$dX>;C|zwt9P{iqdK)d^0yW zqct_RIRBP;`HviC`{(71Myc zVzYw=eyq?!3WYBt?thl7il)xmc}SLIc}o2WH_$$DTGVL^667?13>}qr3sUqW)u)Bx zbX_Yd5O~3A$Sk(F&>ewA^!w0i^eaf4R8Ja}VT@v~mCN`-CiCv%Wdb;z(>dVej8*>t zh%#F+tU~8bb5K=1vvQ4}aYax%fJmJVU7uxIsLi|S#xS#b#DmmS?TQTx?xzSyTUjq6 zYGq!>*wsfo0_rS#oZ^VJijBw{a40Rey31$FQ;z4g6l7QMr}@C?ZVK`y1+f}4~INEzFMNDNq%Dja%<$u%m#l3Zk*cBCj(VgU3&3%^hMn$j&;z&r9gnhO!V zsscoxx$J2hgDw<)SseX-X$*bpQ~>8c^{B0$nQ`bK?rSxvL-h;HoCAaLNej>h8}GU9 zd)A{S7zAgJY6;F&j>;5{;;0?wI}M2THABSt&!lbbRTUee7~p9YRz>llKBd^uie$KK zZTr*%o&NxOsIbUDB8q!-GGJ~#1x3WAfT71e;MHYV$92H(iY_ej#(#!?Y7ofTI!MoA zD&u^at#D2^9OjGBpq-TRbpHS;;*Kk&l=cBfxT}Vm-9s=Dhb%s#IHE6tNRnss0m84+ zyX4aqT>V-{`c8z-0IH|%_^XMjqu_0~&w2*ak&-sgCW0!Ua6fvY5*_M?2akG+iRb;O4CuWu+(_uIs8w|+ zZXe=;5=KL+1o<$K_D6p9;<7MXqYI@q8XRkkYla6#z??CQj6e~7X^qo{Ug0V&3YM$ z5d{Qb)kSkDBmAVt^LMI>0DO%nzo=Ewp*;CzkAMfL)LBrDP#+3*;}snx75QOCnqDig zg3|9zv2ukqvcD)#VO#6<#(in{D(cEPWtQeRNZlPG;>J%R65bs>1sJ|yv!6RHbq z7_CTP#!`!~Z){e2^6JkPIsUQYtDCh{pF=EXA(cX!%&lHnt#0kOQb6u1>SEZz18@jE zk2R)oOT_4PZb9G;>IQOttvvDw;(&7J+AW~wvdIKl7jL3H^b5ENp9F#-r-&oo5kU`fuz@3mD9fT`I_4`Ejjd{F0h zA$#flRWW5)FA_2eA=RGr4|jI&mt_b!^idg7%2~6Q$NWZ$n3n+Kzr6t+Iz26t4*bwG zuG)@$_Mk4t$UAOIjQX3}qN|w#Ir7`g3fnUdYGUg`Tf2d#X%DE3CVr4U1yro&$zsj9 zCnmFFryXJ170#wOZUXl-!>*3E3!D%^u70WPjFTed@_P#D%wo{4=1ddm0PHH&m2B4o zAwVPnwMMlAzT&1O=@V*LY(UQyV>XA9*^}x&(zcOhy8;Ntd*YzJHW>$j-h$AhKOL(U zx6D@XZU{L2@kvgh%$V7TC)`%p7YPfw1-AV(6*a*-ss$eOR7K{;87zC67#W!Rk~8l? zXt>e{(hhme5IwtKu`9kZ1q3H=PNB|fqfe(yt^kpkFK`WIq%PqZ!UrSYn$9(&AiG#o zD4?@*p7g?fWKTOuF1I;2!1iB?t^O6z*nRh)u0yF+2kw39i>@0^6m}H|ygsGK`heV2 zYe(Hj8rze@Fb8h+TM8 zCJeQZC|@)UImp|3)MQSe`ihT8+zvB91oLF^jku{}Qm?g4GT@I_I5lEcv)q->$LSPh z&x^?=b|psbjE=&ri>qTQTimbo6^@-eb5fE__9PBS;8tT@^tLn{jq2LwcZ?8fE;Mb3 zPyyIudYWPvHw(E&%MZ|_da|YjjYBraITZBo64Ux+pDp;6^R*FFH>P8;DJ+s=hV*4dh^GJO_FQ+@!Y;JU+NMZw=FMRD% zM*8dG$RIOo0EB`+sm~|ieAh<>Ep8VKgp77>^)F3GuguO!939m2R(&tUy%}RSA}7=m zKy;PmTCOMRiP__k;nk3=LC1P5TPo=Qp8MjXTBRjA^(gfB2lY{lQG0+G=*U($Aolp8 zG@(+UBH$7?X5{=*(HI$jh+7#003P*3EyAK@hp3#Yf4vq1xjMIF#{U2nQ}K1OVSK{7 z0hqz>P=T#o=4O%Dk`En)ODh~@hDn0k4Xn!tn2r! zAPcAlPK@Kedsb_5p&W#bJ;}yvFzK%)x{Rt4KvATft4u&;%6f?_gRvDFwO3NU*N^7F zUAxs~sV%7TB9&Ev#)*OCA9~GLYaki){1dC%qkhbp3YKsVcQsvky3*)@Jc$bi)~*7u zJ5;V+{2S9?DoaVFixIIIz^krx3+OZ%G5%ZbzXpwSS=!0Mj>HO;=$4Sc%da=UapzS)C5(OcECm(vYd`%y5CQdtNU~8MAaYZ1}a-U3c z0BW;WbvyARhTIdzJJsbRXUJPo?s49?V{tnhRc|m!tIN@;Ks*}C)gkeWoB{Oaw8Ks- zbn?v1NoF`vL9*Fx#_Y%;FgwH>@uT?`jqRjN&ZN~jutnAWw&xt%k*70;IP ztigQA{{V>@_W1atCYKtUxz6;0mz%e4^+tPnk+!(Q5O-{EQpTrE%PyjmCB0`$1SURn$N3J%$00~Rnzo6XZX{iWL;xa%42DS-HDTs?M_^CI0i6c^7H>{5k4~zc z3$Jk+v$m6|y$Ri^$QiF@RTzuQ$-vaLLGbj51aipQ-cmALoG3LFpMMC7NH&OyIjXPE-swK$yJ7$OnsPwg$NYXMrI+tdmf$;ij zo=Dxb7?(n0iVnA@pi(<}xiu)^?=G1-jnc#eB&;)|gWn>wjbrAB!#WfM;YsAs33(Yv z^}a!Ekw+~>RnV=NIFZMzI}X57qi3jF{$LeiG=N!%=AiTWu20kHz$69(n%^l@q3(IA zg5a}uUo%56B(4WPdV+SUx{8H;VC1buO5~09z#OTd4&vRBLv5suOM_GjX3iVrRYyy2 z)bycHONIkT&NNnN!;vOdG6J~Hc0ARAt*7;d(lUQxR6OuGZ=r#Iq#xDxpqwb`N=gc{ z{VUv5Q9dB(j}pT+Q$*k>17Z#;z^wXO$0SB{CLl8}m%g0wOGej;It*-MbR!O!T|9pE zjaCf3Gs+&O8o!iwtL&J2YX@*7Ac%59I{iY5yQkU-VwXz0Xp8T5O-#uj((1=WW>Y^FcR>7bZ`uvZobv1?LuE7%f%13&6UJ+L5R?q65wC`B)J2fl?ao`id(jn=K_ds))DzooC@Hv&Lu%Ac zc*hh~F57KHKsGybL4TMqKhlEI`(lE%s3E4Rnl=H(c&Z-YdWr0KsG_}u;? z&A$@KaF+(sXn|fe4f8^VmQW4=B%Qz&rYeIYqh~lIQ4o^p^Q%!l`Jk9+WcrVk+-e(xK!hP1 z8iQx)Z+a@b)B~LA{?r!>T&Aq&;-cbqcDnW;f$!~EwQ)Bq7%HbdvsOf))yUve6)f*T zYXP8Roc5~8v*|x>O%YH{hG-bXPaUYM(ld?DKGjgzUN=8_ig4~WUA=<=cYDb=e1jsW+lt6peSZGfdsb^uVq9n#CnWJz5rs0t zCzH>$0TP#uie%vap~0ddtL^uws}&98r2J6V{qA}sy=I9R$a9pZYv(^g>;DEXJQ7% zr0pyNJ@HVWjnRW7o&MF*bb6jZ<&5NDG08QyYBPbAz{oxMqG+if5Xc7Pkanp>Ffc$K zObm}oo=r%!){!;C>5L5WLu>%0tAej=8Wi<1jGhHaQm=!<=R!*Ep-$m_#b{?~63HNj zBd8oIq4bZMBAG5(G6@C2(!)6dioVtsnS^%WfsDy1`c|`PCa<}-ScjFdaCdI)Sl3>D zJHHQjaUz2yR!JpYQfu5Nz^yp-(>JPkPB4Z@oW|hglay-BYntZKM}E~E72QpN_t;Ya z-8y3%ogfxrg2(jLk)D?-oa$A}1HM01RwZr?GQcnnV{PH?DmN$BJJhfk5HJYhwDf*M zKz1$I3{`Wr3w6|S*ibd>o8Wd88ED(Vhy<>67Hun&kO#d)7_sS44wJVdy-j2fQq&X6 zEBI0NZXWQOd>@-%Hnm2k}!RAAgFvK#*rvqNIVdFK}xO=&Os?Wf3aqPf$$06YK?Ll<;iwG{UVD*^lp~Z$XDq=Gb5hDj8j}*YX;Q_SdrNpTx|RE zRhLQOzL7Pga(@v+xg-!Xw_{S>N(MO$lC+W?QW2*nvsai8tL2pA=|VLM%y!0~O|bJk zw^F`X#;r}HFU4uksH?^BDbpght$)M9?t>K_JU0Yc+KK$ATM6aIlECLzwH*AHdSl&; zF^z!}BVh>rLbT2`qWr5B8DQi9!28hv+(CvQ00wX~-l*2;cI<(8CvvEHA2pj0@K42MD?%x%28odYUmaxO-t>`MVp)kr6zmjRJ=suGR zM+}q0BI^aCmNw=ilT>-oPttb-;7@?C4tCFRP!nlk8J^%=%8FP3RgOP;gBrs5p`DRW zn4yXzc40xMB=fUriDd`~C2`5716A&nHj7txI}b6mg{+J>GTTY4Mdit)k~5t~gH{g{ z+j(L~X&z#vG&)F7eW*GA01v`U(-w46Riun+#xvMfk+0Oc;c;yoT1!T7+M8xSG*+1M zNe?uU88Na3%17`jP=vOsaBiVfjN>%}-``uMw5*fF< zUvCzd8p?y&4?lXS(fpxQnf&XBT^HrL>94O&yooSl|liZd7kX1=1 z-mFHCON5yGwpUS-rGfOC&~FXc$Y-7i=4j(wJL8t^RTy`V{CU$kD*8ilnko#$jOQS2 ziU`D|j+7Za{wgjt`dmqGsLi3ApHFhN1`WhRQvt)aN5yP9!=z(5`Jh(uhjE?;^tS=` zw*f%!*j6XiXWTi|q<7~PwpTvHciS`;{Y$@YDxek{`ub9hK_xg1Nzj!5w`iq*w)Z}mB~?u0oNGbssz2lGO`RI-I9Q%>MlXh zzFP6=s42aTl~tLw5_TM#VfdOx!8IL*HwT&@s$se(bp&?J6;z6IzxSZ27;92^2YQ2P z?bZEAMlpiF%~2T&+9ca;`1Y+UUC3n(+|(3lApPl3o=gHZ-<;G9Zy?CR7&A z0p6qlPjRc#g9C!z^|0$|#c->~aZAz}S^hyA9jT~xB!iMkG!%Mpa(Bkm7F)u^g~rXe z&1XfIwz>`mHXGussuZ^sP>cW^=Rax-6{r$(x%*U8%yEs!+NvnH>_>h@6n{#H$lpk8 z52xOMsHD=wfuXajuTm522cwtf;Os$89 zk@pnVxws0~q)#E!pvFI%U4<`A`wZ!wa!Wl{^TrA>*~f33_pAEnt!|ZJZ7Fv+kdweT z#YAGs(;5LI{+(n1I}X)QAemYsGyx$#m+mSHX6rH-LzCWc!KV7(quO^b;QGm8%ExE_F~_Kox(tW%+J&@+xM(;buroX9;4A#%2@2;D>JTujJ~x$&0VKXKU_CW>B}h~ zu~G)Wd)F?yb?2HBt1H6(Tkdg{Zp2mQr%|4xzIUy;ndB!K$uvZhpKpo?O&X8;)fDPH z`*A^J{07N6=Aw#Qwg4yt2Wri3GzL~ZBXh~Ai>!@V&itCzGep}S#1Df|R5mT2eW(bw z#;g&Xjm>G5cPaqZP0)OIaA}Xzl38Ef&KGYX1VZQ#=Mae&v#xsg3k^A{m3*G{$@rb05QSaYND-ZgbrWaZUtu5L|XH&n`)%#YWUfx{hri{sNBHmiVoQ|VI!V+$dS-w0LRM*u&rxX zf`-}2)5dpVdsVTG5i5YcQecewo4GVWcJSmb*^N#l`Jj(bi35fi8psHP{Y?Q2Yz9jZ zSPpZ=E2k{0yRBrRZ~V-7q-Uyl*UKw_02}W{VmCum91o~u0Yyn70|z{ED>c3v_ICba z>wJI@rnz37)kz`(#N!}kecG(7QVlw zj@=9F0?HSRdsbE?E~1hAlNpStz|P;jPsd3C%;wdORLBU(3%RXNu6;~W@R@Oppd(oK zs+s}pE<kRs`g4;cAf_ce8jvc~D>CsdDw^r{Y99ji5D8yn@AlnTIazH1fM2A8K!@wBn&C{7Az)_%gN zYZFsCd08v!>`1D%{Af<17z81Vj1H`w^povX$q3|S0}Q~BH6QkYRVWe%9h79 zsErFN;9aATE;NF(6~PDQqAR_-i3ue6j2AJ4IT`t&)A01UQ#8$oaiv$V9~BH;)C!<3 z;eZEb$25bLU}e=Zs}~2;q-O%C>iSlRB3EokKt5u(=|0sF$aLf_EV@Y%t1-#@)}poT z?F;u{g!-8C_7zh@-9;11>h2LEKq6tk_4lQ3p7EDuE=f`k!6Rc_>#Vxl38^%fokJK^PLs6rni^!+N;7$Ld{2&y!L{suzv0F;v#=uZL#3iDqenp*leOd{%E*%4uL? zEPX`KKCF%5S9q0KGw9Md*w!pU;0Wl0ADdWywA0 zR`twLgmm(w8A5UtW}xLQx?0Z?#To{>c?pGq#(+7^Sw}q=M`UuRUSE|c%EYS6wy{9hxPi;e^0%C&;6%)O1e#acPrY8LAzaAWZCKVa8ysX;JZOJG>-La^ z)LA41nKcZop8~a&2K4Th%_NrsMi4s|SdVH#G6AbR)Tr9nAzkF1X2Ilfa-7I9L*P$IVk3y*lPN zk;x#I7}Jd6rB-x`IbDZ4)kFkEvxD1$Xo_PjGybNiF4;BXAN^EKDNtu5>^_y|icqmT z42AAa!iEtZV_*i;bm^zp|u(-LrT+M3d+VackAwYL73Am@rAB~E== z$>h;iG=zFieZ@f?YqjC)fBb6puW^=TWQdIyb$+j>PPKg`Ao zk{4{1=CFy~fWR{E?t7X*I@<$`><@g^)GLc<*92}ezG`T{^O@N|0CDkA0!sM=@D$-&0)HXG(Rd+CyZ9I(ZX(}O_p+3|WL`FewI|D&vkgFX#k76hUM3NWWvYy9` z)%dZp;K&qr&P#jNRDVs^8?Ue5>^wqbQr84yJg*|9fUd11D{fiB%B~2AY*|h=G>u5+Pfjsg$8iMZoc{ou8jtep za;7bQxg*8pOQ%cV>jTwQnz9%oF#20E2FUwRW=Pp)IL1#E5j1i7hQMqGdV(cJ_#bKq z&+zxoNyY_TL&p07+NCPuM?xz-AT+v)DLxn6FiimmTdOX(n-<8CWG^4~U#>yj6Z3C71G;-?GLb49Xp zIU8cS#|kCJP?f+Va!phN9_N1aLXmZGxfEPBoC+8tq_EedkE^kw!BfMgL$(JXRI#Ws z#{M&q_!#<0?^#L*sapkaP6#`ID@2Ozk-Lxw%@JXiG;OlXdmpBVO{tDa3I}1e0Cy1$ zS;5b9R8CQX0`ZRZ5e)Cm5JEO~??n|12Y$yK)e(v?&4cgF172MIfsBo@?L|e91=dEx z+r0%6BC*PCw&JP;jm~?54k{>sa&)lVQ3-)lkLg87Mo8Pg6%a_1Knskwe9%VWC+4Crj%|p=F;#$Sh3B7aiW;^Ub#bxwpnYl>2F~2#g1d{r z$I^rWwrDFrr?DsJiX|Nh&IhGO1mc=Ox7KmQ$Rm+v1$DD1*?uUXB#^N^iK-wQO90*X zsfLvIjKt#sc*S49IcFXA_7tI!GJBd+MTYk6Q4;O@)D_Jy9s5-ktRRzv+tZ4wi%iRu z!kxD?Sp@XB@(PihbDG8JdE{jB1yhZ?3e2v&z!2;SJf8KY)Vz4)^Hw?ZHrC;h3V^uJ zaaroK2Xxs$^syjzVcL+P=WQ&^Twwtr9c=v=U2@YU7f#}MABr&yNvKi?L-}8pt+EctAg0zeT792BM=@! zj1---+M`<6wCQt89%3pmn#nwUvstR=g}bvIGQ4Dx7^@r_OO0buXF3)#Nz?k9c50Or z%!3*4Kopk%cf}$sv$c7Fe32OC+lr!Apd%c}PWS^P~7N>bVJ z$a9S+7|GiwwN+@tWRQUAI>^L&kPbd7vwnt>SC=G!2-!s%%xYQLVm#?N##yU2r5@ce zGz~WhWO2MFVwIgjwCZSxQbY@<($1sO{{S=@-B>w6s|0fsaB*6T%}|gmu?A)aPBJQL)pq~=u`i67}w#<}QCh3}adCjwN?uaQ~&bn0l>U<{?OHyIVJ zaK+a5v4~4-%ubM_kwgx3oE-M`13{Z8%8(98J7Tp0g4n#UM#t-Ln|)NPE-LX?M2gbu z%8EvimDIt9`F|B7Q|L&Jpf#N+yq|j0N=@>!6^vs8&=hS%qPlgXWJv5u&IDtMtklFN z86BLAmcR?zu-vNe*lJZf>%nXuDIsWk+s#s}aW1VOE|nRrV-~b-Q&MAtfw8Cw=~0$a z?e)gmN|CS?8LaiYBIVh3Ru}sj^O&qIVEwL%dB+vBwO3-#-avPagx-IU0<$B z+-Q-cU^0ZcU%hJ&Wi~74Tyj7ea%h&7>kWHu1MUZUjYmt==YU&@8zgDd7Crr{u*>}D zn@5=*kQYc8#=6oixV*Q}WBi&1I|%{$erjT|=W>G?-FHBErXcC%y}5`9W{b+kbS^Wu zy)e<1mlqL4vA36{w$l*x5%OwPWhK+4#E_!}Sxy|E(^OBULm82wj1Wr_WGB)$b%(EdI0(}!d6i-60@C3!*-6Li+ZJlGzt(a`DailJxV@noo}Cvy9=#gj^mok zw4w#VqlpOA2E|8u)H*ucmdI@52S9FCx?|2h8|@K*BT`Uo#;R)_C6u|BBUs;2+J>)+ z&U=rDfki_N>{f1vSKz zxEN^RBMY|Xl3}Es9tcTw1=w$;yVW&~)VhK(Az}cYR4DXSikC@`O9FA07*_6;q)FjL zl1S%II!6BhB&p*(RKbZ7O%2|yQ{7U2a3%} z8-GSgUHy*qP?DA{lDiseE9y4!HMECGX#rpUftsl2?mARz5u=!bSY=yb{c4S9dO>XO zge&z8>42fp;uh=?3rMFZ-OWS^(z;k<=19a7`f9W`bLE0b!mkW!A>68>Iv`SaC*FfO zx@@w_UN%)Y;P7goOP-vqx}PTUEbLG4<@gkoGdQ@3aJn8jSI<+o-jr(fXreb3#auLT zrhnzzim<}yeMifdTX{h-w4P)#_Q~y7>S)~YA4Y|(+2tyj7*{8QQ=f|-ec_I|9iW{h zS8*$PSvfy7+poCNxnEwVRb`C6+2m)nW=3k6IySGUfC&R`MQ?FkABLoH6!xXHG*Sje zKGlkhZnhpvkd2*6pq%y}As;Rs{71N*IngqL(EuK3X z(pA=sbd2wVQi;w98w``h0F47E^#VTiWmT5{0NRxoGgJ%;_iR;4oR<3r)v@E=st8E} zE-~tF?NZYWvIQXEAA?zLL@p;X9s+^bZAGEH{3%heCv)7^-1P(>(xS!6r<@atnz9;3 z!2_}9G}Xn{ZUcjy0C%k=J>CPBU50s~734Q3=QKrfDI1a)1F-K!5b}m!NWtz0H4y|t zIoodZ1I;FOUJk_35=QdacNoFV1YdSKcsvRVBbctlY-=Jeh$MmA15&%IXVZ~Khe<(V3`%r*!TGdbT%*1XsIX@M3E2UPq zb=NAZX#sFHHJU)OO&QBZ6>vQO&}LoBCBan-mq1@(zAD9wdK}uEWR18VG_Z7+atSp0 zNoCow$*yX~n$2~S9DodEk-nkvT8hDy^%I|cg=kLL?smw=NUD_bFed|19>mrwrz`BQ zS`t7556Y2{X(`;n9b=`sMzgV2NB&*3A8Ol>ew$|uk-n#Nl?GP_X85aW;+WC5I5_N2 zdWnJs?phv|KV2c=Gx{dMPq9}^ta>Q-Ez|#YHubk)@JTc(a#XFM6 zI|Gi?73)6qQ3!x!<9~XVyM8I0jz_-rEN*stIdnK92YwraNfWyUbs5#PvP6*(a&&jC zSm!H7;_p;RjB&ZF$&S#h^~0%^eYnZTV^xG^RYv0gay{upG!9hlo+~Pw zw;R<|RQiEGv7!u>jD(EjxN0@!G40NEmWM zY$(dY*v?LUs-S!yFnbzW3%QIFoZx|s3eL6a6_kI|6xH<=0x0A#Kh5n|Qu4BCGqRn# zn$rdj(E+w|-ii|S#-QLG{=86VO(L{Fd{h~W8BAwmR93ksKRnSB(p;WK2WlwA!72#O z2lb*aOm^CXJ!SPaa!+b0oEAHsstF<%5Lz8s&+IA!7H>`tGuRH*RL2SdJA6>U zmlFo{a93a|7;Vn#Gn%NjI0^6f%|$fDRE!*+`0Yv^vNyrO?^6*a)N%rn4|?!8CK~h=KB=vs0C*Sf5DA8<9wK*NWa3fV1b#?~}z^#%mrW)=u~Xf$ve%FmQrc z&=VNJK9)PyrDE27>pJB^w0gH-K9;J3Ec%NqDu{80+>Z4ta-(&ZC7r!0HXXA?tkWrD zw&#kjb$SsP8)eDKKGjfiUXvR$C}K9r=kHZON(KV~&d27Udp0q+)G!ZYKvmtt@trH% z9q22b&@4*(muDFV^ok(KF4vNB0N7MCB17hrCJ&SjHyoOV2x;>llBhr@APS-uxQv#O z3o48SKK}Gmb-B#3heFDr{{WVMSIrs}_cBKeB^k6h#LgrYXGl0t$+|^;sUR<~W06<9c z7$Nkrqj5^aP=kO;+ymOG>0QoP07=GkipnPi-UtVST8M?jg}DP6+v2F96Myuo3$%+< zV4Mz3OkF=xO)fF?k+my27B$NS&N6wd#fuu$qi>BI>g;P{OQl*Yh4%;*H2^!&5r)i` z)Z0d> zv#tr}2M1t#Rm8nCdIhjml4Br485%)24r@|5+5@RbzG0Pea@v};hNB!FX14zT(<_ni zYM|KdHK4)Ls5Un%}RRQ#tEVztX8Gp@u-rp@9P=jB!w{zXbGe;v0!cXHtBkew7~o0D4rhlj1I-v)#!s z1R%m>^4RZM<~11?ucs>PP2`IV3nYJoz&o*jOXo5 zaj|8!>`&)Bz-K?gKr%`9pyw}{laMA%}XBFDDlI z4Xl&4aoV!hw0iu}Jj)tw8WF7*>CbxGm05WD#usG+)1K5L8heKN6b2{%08`qki|Mw< z)Cz}eV^Q3Sf~b0Wi3oi|OL~B)t$X|N0)jNLai%2{!HETnd2&iuAx>tOmeSpwvJAn&Nupy+j5r)vGl~J zxUAypFX45F0|cIH9oParLYUV*GP;NeKsZuxahklv>!bzKV3bhA?X9?4>gK+6W94%(lUE#>Yv&xP#5l)nAZ0%llOU z-2P>uNbW7fVm1dP?%%agSDQRwK7!E?=(Prnax2?B#077p4DJmG=V9r^7&D#QeXCJg zDQLOZje+KxGNj7fBPh;TX!$fpQ7lOyk)(z_Y%t8=8k#tsjp5lPns3XwNaF;vgMi)i z{MPiutvZPSmQ$)GJD;T1XzVV0LRQeWOGzYn&OV&>6@llX-H8q)!Bxlv?^@Ga{t_kp z!ImIll;@9%okLpo{{Wbbvw$5Lw(|{SSp8!k<`|>&D{7> zR&)7zndHZ*U(&7dn&~KUe+-eNZ6A|y6KI%!ITcZ(Z`DkL%4CcT5QiI&nu9h^46}{y zWso7%%OiSm@$*wi&haZoV~R+VL5TT#3~C=W)1SW-MVQPXws8Ke4#(P`h}DCpw5Tx~ zY9s4jD;J<2hGP%ZCW%?U%56vAPc^CdGVVH(z09(nH$@}9HlkKoY?JRnDUKK9(L{8t zDmS_0)@W!>ShH}vPz`k{CjgVE)fTx3nC^C~{93iy{MjoB%Vu0}01%#avZahdM~( z6cXvGzF=qEF5!DI_CFM=oy?k8k^l}#!tg07A#E`k&M};ynzUUd*zBP9-k56JE~d*a zwM8sOoOZ$5sjT9r+T+$Y3>+uldbM@Z&DU^OL~0H)*{)b?D*AP2)~k$+HvQ_wWHR8I z+Tg1nLDWV;7{wW;x^>842p#G#Jz|ihj&g9j=A?~YwXS;KnGu1&D0?1r?^3 z%Bri&DD|37zN0kS$GA;Ox!Hipt%qo)h=Ku;Txx`pt06bAvpw<)#RDr~G3?mi}7-{=ZL-HT-3Mwr1hf6`vFjL!pMRZ{!5jslo zjMc^ZDknTQ2W+0z6ii4_g8fQ(BYajXuRSAw0M(@9=Ciofnw;G)3JgbZGC`})Z1v*C zb<~Q>!PdJz)!X&wvlLmQ6M&?S^_vxa#l8sCLV|ejNG2LEKmfOFwFQY0a&(fU42*a9 zpr+k*hCAw0gPN7DXVGE389eb(=(i(0=j~c~x)Xtc-)-oJSpGi7h>1ACsHQQN;-hd> z79n?IlTlUN&Nv%YiE2@WjddN#;cIcunkIM2$QbNu1nr<_QnAm{C@q%tR1Bs;8Orfg zQFQ2V#1II;pc>sjefAU@Xv#tKfJng|=!hz!gOkrDpr%4ja1J{)O=?9xP+j?IYT_H5 zk=*Vnq8?ivhI3UcTOGL=ByZm|WYS54j(!%XV60AX6nl3x7OZQXi6^);MNvw19@SN2 z9gaEeP*P_&!Nz^X0=83=?LcbUk~z{n%@GHg6Y0r0-I}9PAIfISV?M%ym~9C@tm8Z4 zs43vV^p(@d-iUuVZ=9ciD5~-X>IVJIK=NL(8<26p#Z4p(ZV$T;^sMVxXN0yi?tQCD znL==_+mI?Br%QDVGFSn)#Q{>zPZ`H-)-j;bvCassFEwKzJki$-%aMl8pL%PRiX>ks z<8r5UG-a#P?mVzq0CF*t+MkR1u6N|;8n-n4U&Fd8f!G`!RK{&@M8^djuhFs2RMo_D zZ818~<&Fph_7$W;!GlGNaK|l7HB8qzIutWx<4S_W(KTV=RZ{ec20m{##919 z9FtTEFO;#!BPR?%^eqHrwbVe>-wRMaJiNy~Ngw5r+KPA|P+~@=A41Uw8Lk;hv}lS~ z97^RBPUl9T+ng@1dc}(?baaSDOBOGWQC7yE ziiv1@$RdSFjJn9fW2<~nk&6Y@y0A9_Mvn&z9>tAnO={F8nOy2cWkd8UbBa_};-nR4 zaq(0dev`r4suhxgG2M=m)CLP&WeMLIRvge(G+|JZePi^RwE|nPIA&JC+bdQ?wQo^{ zf`X@1WMnY?KL)2wb5z+Ru0V_G2RT1a?@~3>XF^QmOvEz%OBwW1#uucKMUsJm!B9Wm zx!AF1PP7F}o$`Csja09uSd&_?Spy9?tsKVphOL=Cabhr~s6R$qGr>9^TYy z1y{z^T1qEfV7_z@s18jMh`dDAl?749rB5P^T5%ZwcPci=6hQWJm1ai3SpnI*9>$F& zWdlbhmjwBqm8{nFp*$KTSW5*B%bpgqjNY+RGsx=-l+g(|W5XZ4X`Njar>aH4I!M4g zP{loRRgHpxq=f{I-)gWz&qBjIk?LYXff?aGMNxX(0}xO~N;x@q`CXna*wv%_NgBE)q+ABT3OK9FHC?&{jX?TykUgtN7^zo~=j&Q3f0$-PjY}v1`Hl}G z+O7<_7hj_X%U{>ss-&YVpw+P8d)7L*^zqK3$-lPs&vo9+i1kTzN6Ga4HPSrYL)djF z}=C(Pt9$9qg8!#ibDh_+8-Tq@juEH=_ z=B^6*Bnu?CU`heV+j_V*ZmeO{9%9libe&DbOk@T1;>I&-jD!qo)v%@z{U4$ugEQ-y z$k|8Jn$7DPXvNVPvK!F7fabIOfctAfY7D3gX&$xxL{jvak4)+!LS+c3GEqSKi1#%r zwSt|Gy+NJgO=1x0NO+twmHMi{B>p9ycy&Fhu2)LRN%bBxS`m-L^L||+7T^LjyrbzN zg1dW&T2it%ml{S`WaClx`_K<0vZCvhdUKS|IPFH{R-IgEZSotB_-I~5+$<{!F(=Fn z3DS4R#S_(6QR=TSF-EMhFkNip4%qggc`+`^A%qxXQL0uOGgh^gP}u9lS^gMs&c~Mc ztlEysJ5HRjql{IkD%yGF zlgySt25^xBg~dgJ<`FR{QCOXeFwQ>IP|pmV_dnZj7l%Wv+EiM57mZOX8hghcL2NBz z#;C1kjaG@+qoh%rh*5jBl-j#SRPjYoYPUrd)#u57@Oj-oeD3?4^FG%#zjQTl%ygX3(@R8wPyYZjWG`vO!pmS=LZ{_5xp|^<$c8(hm<->Go@y)L8QqiTIWvR zI+>zix-5yJCu%#kR|)OlBh~|d$e7=DR=BK7%mgoDC8$$h(7z?&m!fA|*Us z?zxt`de!Q#G%Q(W;j)Y^{(i2eBojTSbrt2T;ck4A)dojWJ+E~)@&q&fDFIb@dUz-b z?`|OOf`}PK1aRRN|3-pp%aDnj8BZ5)ean=SIun5LGN!4kvTUMIHWmuE0~+LzSZ=Ap z842ovn$Xo^6h3uq>3WwO|GqtIe~I^Q4`5!6Lz-(g6(YFgB)3-tb)Bl~(Zo;eMr@w4l0Ji-;M1Dd)JZfVRs|5EQ>MQnd zCWHq?WOHz54>DZG5C|FZdn+{g&{-zsM95)zh#BnQ5G7rKpdHSD(`L|8O$3a z*Jmmq{-fb$k&n(K*px8bfPI_ZtV;E-|A#ByeStO;9Td>uyM0Y3H?wqx~qZ2KZ zAu)W27(m+A1Lk(MfnC6OEb4x@UsR?#3gvYhaFlhZ>jd$7mlwl-!1t3;th?i{CJF72 zaIzl-tmkxsa83-uhMG%m7xlEcxcHnn83a;mjaN^Ii*v??M{(CiPh6B8dLxS7Jv?}7 zl2I%M@OJIltKL}grfuXH)9wl0M|LRKzOvGX3DZ9OA3*v+^!uCOQ>U&`M==#L zCvJGcXIiH*Q7#}H0hSRG0xFwxvAy8BNn_C-9lc5di0)lfq7W@(?NOc(&V#pcg(+LV z2|GfK|IXl<(;*RVo-t{Fhm9<~;lBw968DH0h7kyM6%;V?>GL)tvtxishgWKs;e^Kd$LCl>7!HKRMW?*G=pg04CC;O^7Y&`=HJX$MD z-DcW3fiv#QB*=PI1NniO)F4juGNpZ8P ziZ|yr^Yl+w!sN;8zRVODh&Gm;PFJ&A&;Z%jMarwBT3op!n=5`EX?^VS?fPUYcjF_T zYA&#v(N$Zw5eTI?${I3rI}=shxM{IB9@66?32C$>(_t|LuqVH#Qt-!%lC+$!&CjA2 z_8$&$MDZ^$%Is}6aT1oFJUOtwSGsh&b9b$M`pxX6oq}r18VM(%s_^xNp)=+;h-1IG zo7kIKUtH}DcSsMpkx6H~MnY@me&OD;!iZdi7h~?U6W@tV^)k8>U9=TPo$5zAmbI|5 z*z(3&D!<TbC&I;C~-hd_8IEdIhT9#oiGvW|7>udwAN;4i0v!1iCSw! zzCRKn0NKN+PuAarJ~DGB=7pB<5y%gAWY$Uu_h~8fBG{=2=^qNeIcqM(*S~Zzm#U^0 zFz=J!^1MJ{U8;&yO5(K@x6@Ij2H^$yfD%eYC|8aybGbzvVDyG`JF@uv_Jxfl)X_b3 z1v^s{rs{3MzXtR{29|qoKptcjS?1oOkLHx8 zuSUBwXJqKw%PStZgI<{p?>^eIK6*m$@_Fj{w??(nBm14MMS=ElZu&hgT12j(mTgot zHd~S~$IZ>zn&9f_XNPE~OQB^YHyGd@?x>r63%t*tz#b#<6s5EH&<6KPm+STm)E?%* z;FZQ~=4^Zu&pxG3h9mV8nNYyfi%KViOUUf-cQT6h4UC)BP@Cf3FVYZ1S|k z$Lp`sz|QT5@_&#U@wEPyM-t?S@`HZj zCPerlJxdud`q)Q42T^c_30KDIwlIkpzTk4+6>KQma~Jj=btOGQ`a~r5*p)DGWOn}1 z>52Fxm=qTUxTgHoZ`N6!r7kD{X&GL&{IL34zP_379t1o2n2pReZS;SDd!xe9i-Ec( zP$)cs-QD1#R!~+XL0^Atp_-Tx`6)X;-)kU^r3sKVt@^$8h;_+wA=f7A3 zx&TEle-ZW9_nO$!Qt2b(IJQ6Y3H|r=FI}jZEa(q~wVQuZCw<=w4$|KcIksK)UO5KT zGQ}NtSGq`c>z=6^c0SpmdI6Nnqg@D1+M6<0SDgiuhT+yQnqwj>3BL z!fe-9Vn_=$AFNC-m=xCOCVtATm52;!H}VXt52kmZsC&*FBiRM<=Kn`P-Z>n%v1FEJ zv@dI}cZx0)@&qthFa_JND4Vgi21d|O71_63wHSjdTpgx@f=t5*1-Q=w6-*U*z`Y|< z5$re=d|QYVNobF<%sat7%9IGJO?>GZ#3YG``)zHaf`v(^;&(p`X?C%{02O4IQAzE` z?6Z$!w_;t$EYuZV=e! z1mTzfYn&3MtIt)Gexpy-mSVq!e-CBEAllj4YJj1pWsU_4%(NI{W~)kvFFsl0K91SP zHg4@mh_SN$8=K`_K&{S}abj=XMY%08Nn4CFVT}8kvCdWTX35NcDh(n)OMg<^A!AN# zZ$kbZl^OgKQ}t$To&V5NVNPKs+h_S}L@aUFp7~=ZOYPm@^EUTyCnGNc{rSBXxc3!Z zju05nbLB6#qiC)PWUul9+1cl0>C?N)AfkhNP6T5LJN+JUk8sO?Jiexl*M_@ZCd58e z(2ZVyzMYgD@v)yUGTFI5#0ctI0LBvj_4>&x+RNFCS?Bj%y_2)@qKB`t< zYn~^SFycJ2)QoCbS6+1!dZP2$fh)^s8TPl)G2dTie>bBa6|!r5zQyg@Mtj=izfvSj z|384?UY)$fF4V$QrX6M5y|^b=F#SHhd_f$VowWbZ0P=BioaV*{Lsd(MaC9Ws=VJVb z*)Nt&#lI_h%#Qcbny4}0{T`s-uQJa-GeK~?zNq4?f(_)XLkS|5y-aKI`I34uNfGk! z0BP79pYdI;z@yv2#<^0PMBo<*qL2eM}ODCz^Mop8g1RMKUz{b{HeIWHZ zewk5lbdz56(N7&43BuB!6DvgZiXgt})^YHWu41Tq#qL^3NI>iwQ9}3oI_R~uAuEJ@ zK<&$h1>M_k#xI=Iw$YzxZTp7hKFG643t>x%vW(YgI-wk8#=F-GcPi|Jw^YCDJpaqA zyanPM#L;h)tNugDwmKw0kiH(+IHUXHd&0j}547xj0bl-z5OBXardaMc{ah=V-DCXJ zTN1^BHg}vC%@3|g-Syov(Zsl|GU@`S|6#(WD8+jpZW1KXavxkYK0LT63040LYX9-m z9(Sy9StU5{k+`3wp_0{AHq@9){l`6hC1My?hbC!^f=x?E(862yJ#s0!dHc_y01Wy(*a^OY!9D~ z^%4aq-hk0UPmDxkb#-p!rDeFnj&#pKJY934%+&He%-Oqf#a;3;+S)i)BR-^wBL~ZD zQKK1%@*@H$oDlN@rPC^y=NjrpjwU?tnXZB=v@c4$7IlvPoKzxe1c9 zKWN&5PKBf^WERw{ToLtUWo3$27ebObekriqk5-$0`A3uqg%;{7PDfdnD+uzhLu`kd zysut&%=Mmu_8I?Gfz1H4*t_M>F{lck&v zd6;?;DwxFh{Q?g1`sQI^6=~*CW5~I=-Co(}NAkegr?@s`t0%2(kPbrYO)%~mT(?%@ zsBjLpKt9~v`et{zgL@x;JUvNu(|3dbzH3rc6jgy!y*27%x=;H)lkx0M&)${aXCPN2 z*Mdb;qov@O#EWFbi;*D{E>#OFC3;(~NIXG85M}@=I?dLTXP>O5?{n7<*5L`}D;M9_ zqETV60rg<$zLKhmmY2&vW>taTl80E%>ed*F3!%9|g&3Rr~v^$;2e8 zpaE=W|M9&~FWD)Rb~kIy?-eC?!u|tHRZPW^v+7i>e0}BF+B3iOu=0s*1wa=Uibof^zU>C=HDvi) z{4rqFYO&E|!Y9p5n4B?N`R2fwqKlz4sM@HJcBkAV;&9f=rNBkgM(rF;@P9kmSg@KF z!TD_SvOXx6PC)1EP%WFpTblK&vCT~4ZP};ZNoKUusu5k78iOzm`W^}wCD6O2rEI|G zb-p-uQT?}+A(6-b6K0-ZK{s5F!3n(q3!HF^kY`T~c%%hu)xA!DnFeX#_iB$;Ux}vu zrm8Ip2|DNSpsCh(Kih=Rg6WkWJS$ z69`v-rpF;Ix6gBqbiAf~ZR6`MQDhALb;L}`<>75GqoPPwpjxH>62c@IXl~!#310s8 zA8lG|6=@~f)jUAId%@r=w$xl%;g$0L0QBuPo7jT(Z|2bG-xC`ab)8H~zy9rhYRm0G z1&BV?0qp_RYy~df$u8)`#T@Jy^K&r7A$@n*<@%MJFAr||#X@*w2z@=HX5vY@HdU-F&K+DR$5+>}ahC>KhtnH!WwvYN6R7X07 zV!>H$25+QguuV}18!HS2yZZ~^??X-` zUW(@I)Ae2AyJypa&u|%$2{z^ln4mEBm9>Q9oPhoGj5zWT`(_m z4)`!}iWs;X@)fMF(k#1{gPkr=ubryE15|JZ@l&>)Q(u8(7&WFL@F|7UiZq=dgB=j8 zdLY~VNP7SnnSyB&S}^<6*7?=u>|eoSKKR&*8Cx6I?d2hwe?s`c{a^E8b@niya}M|D zVJEGkCKAVfapk;59^5RhrmDkj{Xkso^+9KSskeKdpQ66r;_h;jV9Q^*&uNnuQ-Xxt z94+uoi_-&Wyl3&BF+sfbgOZLOV;gNo$R4uM8d;0kBtX-PA|wZMUjQ^9iszl zdvq5+=w*-mDSoY&mHu519FxYGR~+R(u9i(0Y?b^+bc(=F$jozHh$meyG}Vt7eXW@- zND?r`Z7+)R!aS3^o3hPoF`iynkc1J z&V4JtpGt$K3Q;F(I2O#%`)Xm1zkk>&tsn?&>o2R6pG20IUhj~2WUc!jRXNu#NtWJ3 zRUU6{HRuV_WHzYa-TwJg`wktE)(VrezMRnMkMR`mJg!D3z5Bp8#k1jyoHW0cmQKR) z%~a+-uskpykWPS>XBO9Cc>bMz>$3Hpr8On`5~hNdKxLGbKSGW+AcNy^>0w6} ziPqmEB2JEMhtFS2*bT&%MKokRPuRtlX#?Zql;5C|WP!SO-S5guThtCW?8F(pl9Ta0 zRIdb_w)c_j;P|GBj~VTo<@c8-$=jFCa8_k9hb7micDA1apRWh$a(ap*A=+}>zKjfx zh6%9MEj|*$mh#4v@7E`oK_@K$*tJcxnAVG)W#ZcKg!7?j{poJ!i}Jjnlz^6{qv2;8 zAfYQO!@AO=z7k^~Jts;C1-QrcVUDP?n_SA}7Q|rKT=h~oo9b+^jY4ZCzOjF%v80At zh@0Dkke{tTOd{;QFjbExvQYfS3*O%4lV7m!@1ww_e>t%{6Dc(7EE5{5P_a-H1EM#>lRPrr5w><^%;-*XU2@y{ssnOQ76Y12DJF!U?UMHUYw{pg= ztsTLSoT2?tE*4|Aw)C)TVqe)iM^>0Vl%qDz-Q;u$x3yejw!>g|iC1vTFicAhUTFuL zi|=wqP$wS25wT|4c*k}d;{N~)5SA?Ir=youXzs|ycTtO(yJ|aVTeY1A2J-QDdlY|( zVF#I=l0`q5To4$9WN)qtcb26M?J~@1$jBivZ8X{waG~PS79$Us)OGN%M(-t`qb!>a*I)q7R(!feJPi z|DKdCoX5Hc$;#FC@CX|K;5lO#WecTBEm<91n{Alo_Ei|RFoT=68(q;Uu|*mQTFp}o z&WcSWOq~uv0w9OW@wD=9{fVK{@@Vs%?UlEs!YN1rwN&@mfyCt&r?SX^#GO=^WvWkH)TV)0*%Ag766{NRm;GWb zlYj#ui^AO)$W3D-zUzLskAq2%KGk-KGH)%mLovM@~%Z1@Xmq^3E%1HL7WK7N=QAR zSGBF@=O3}Dc&-&bBTwzHcFLwHyKYq{XV*GZoH;-e8{)z?v92;XEYRUC031=rD&k0w z+5Th~LNjN&Ji@zhyCuWYiy^H;p7JijCM9=I6z7bkPxHf=aO_Sh&`*e$wEZT&~O zE=pMMzji|&Xy+o=2$1@Qfv>LtC9C1`)9WQu9 zIS1aSRNTu1sO}9OOGO`O#hv0xoE`9Z~(jVtH`Tu3D7U7#;Bz>X=n~sLG{KgaO z4|t1r6fSAXp{fTEfk(@_Asd9}EDZM+Tuk&kw&YhXWxek?@_gpnX`SBxR~^N=_e)5o z@#?g{Hc`nT;qURYHklgTFTJtZKt^5Kw}g#ce(o(IHU(T@_NrH|=%=xd-XMfopFeM! zakv(g7k;OZ{Nz9pRAv8);uZ^=zd2P2_-S++^`u4fv-{IvaV0?Lu3viT8wSo2Kw?w3HJIf}o_*v0B%F08WZAsM0T`$_$5fH^f0N{?`!+2N5LhfHxynP@F|u86>PT?`yNYbIM=vUi{T^a)Ue9c1mP_nm;F$L>UKkGp z(vP(1^2{3zZn}Tk(a?KKGJ*8kAJg8t4Ymuq#k1T|cIUL# zQGXVup)5%1)kz9-@hfj1Qu~WDY#1TN)J4$Xp-AlLueV+d@!9#8azl~=y#h zphngy>I$21zz`xPgQzIB&aLWyeSdOtu4M-*GIU8^MQ5ciN_gmh?eF`QfWdjx2Y>o} zhm#ftLoN#6d#d^q?hg0nG735!4XKFm?U?T%N9X2`|2~l_aoUz>s`&!*PD*--XHUXV z`}$JtCY-}D23eydM2sDh zwZEc3B4q0qwV3bTC1go&w&YQ|ER(Kz zb{*?fbrQpG9ck~}H>Z~w$h!`&wZx7$Dv6%TCyfe1{N*f^9yj_OwX?TAr$S~D6gUXG zihNJzsnVeI`eTYG2<&b{TipJ*hIKy#7qVM-`))PUM7Q^?f9Ecr?H8L`Uzn?OVDM&R<+eS3 zE{7`PhHz?7AQ$6Wv~G|&ex};_e*m_;HzoeBT-~+axL}g5GB?mGFKke?puuE<6bFr4 z;ROT-+k_b`s^BM%_pphwc5zw#&KhL#mg~!emJ?)Q2KJ~v7T11A-S*hlNBiSx*#KA^ zFeOz|ePmH`T*5xg#iv6s;OW?DLN9;#DDP$Zc5+awODP0r?%MC_SC+5XTDwt@?5s_@ zz&-Wv!`FQa0?g{6+ z>_gWj{@eDC-6h!}ze)a1wTS4JCm)6kxBk4c?~G`bl8?s#+XPPo>JM|q+@n#Vu8M5L z3#NGw+vm&EUqfnmrgTnvJSrla0|wKU(kXqo@IaQpYJF0DQp?(Fl(VDX48X5{UsRB=x_*S z2ZdBIsSg+ zR@Nbj@US4za%go!8TBRicogEDCH9EUfPO>=oz*w(4mPRnGL8R*wC>2XZC%G zWN)lN``OLW0P}@V;I0PSNIhz-Ad6?0GEw(4a9-DzZI59DMVq>PVvqRU{`J>WV2+Nh z$7cdW4dW{Y*8drAM`Q?UbH+Jc)e2aThUvMHJWp#?3De}GCl72%7Oe-uBZ`^^r+ z(*fK}wPe11#ws&?wrFwZsD)LZ%PrW1_32|j;jJ$Dg?V|ijJLn#=izf3F^<2hu*r;2 zz;%v^&*}&1FI;3N>E~{YQ@sQJ=cUx8x6`OkrJ@$>V;N;>{*;U5kY4zLLwPA2!WpjK zaXrQW--NEE@VX6;_s&6#xI+_T<_I<z9oTbme>=SAsfhy+ax z&*;V*qPqtnK!Mn(0`aDBa=5yq@dbcXBi=P!)^!7K_=cgT8Zv(tso`!fA^!7}J}naE z;0~+as-Qw7D`~2>m>8z=_W`zlcY-V#{V}yK-;rl_C4~cuktsI)f`<*`I2m^ zgXMS!KybUv7)atC%+~0Jf-iPq=MJ731m)*jYvAl+)aP5Z4h(&g3jvr8Zpja5w>W3v zHhzKUB+=Sg>BLvYs*AfqAD*D@iG=n2dn64$fYy{#Y>>`5ZF3P?4vj<63350yZeVNB z4_wJj?l(>$vcj=2s`7M&8ixd(OWyh)3N?b^c549=rp0Lo{^EWGo`Ex{H0}Rl9;1dr z63_{3K_kxPIo5Y7pJt2wDzc;L|FnuOOL}ZD;{vx{hRO4ev{=2clcL>q)q93&aLK&g zY4L2cECqw)SOKD@YHz2nj)x>>{7Eyo^WsB`n{(xt+yKtj=CrhshCX0A%C%)ZT=@t? zblZGlpS48#YSd@5n0Z0E6p-T-Z)e4g(U1G$uQ3srSll)vQ{<8q^JGPPKx`JwTQ^M; zFl>6OZ0JKiXR8~}1-^5E$c!nAW9rc;Nd}F@KvzJNg1Vv-x8SSR&z+XC5x;tJ%>ln| z<97YxRPpi>DH)71nX*QKI<4Ft*`|ZQqKnv%=y}~=n_e)+(tH&ChlduKgV~IC64t8u zS>mjG0L*%U2%v+Z)h&hoFTG&FgDTF%`%80eQ`$4bdK`6j4X1T{NX0aE`e)2>4j-0t zaKR^~;J2i{Y^#n&gxuIgz2eJLHX}j)kH8lJ5%pvZ=39OpQFjaN1bF= z8~bDOeMnPwX-C$u2X@3P_gChy#}5E`$})#2$(QdVgu=YT!!%sz`s-yUTiZ|BQ*OZq zWQ&p0;1Yay8Kn*XW$JgAzguf%u9pI^$BHxgbuly#MF?@&JJdj7o*{a^-G)5cHv$)0oQ?W8|^Adb>+#c)ms)~2~}>N#=ST*!42TQm`x3Ta~#=ri-*5SFr-h ziH45gJ5czhsV$j@crVvwjYY9vCZU0w+HF4%s zfEcy)Crw8;?qV!@wF9dtC)`}HKp#iF5Q9$-I&W)oX%t0~m)sMY&(L|v_36$79vx>) zoT{WHn_q3u#HHJwXpbi-DvN?E4;1z zZ8$EbeQdGMo!?Jn;mH~Azo@4>=!qo4avAdAeYLj0+Kdys;l!@(>n8{%R@V6IUq0qs zpnh{>3B==l;{YFPT4XnE02#gMEl7TaL#Xds*9XHFKyGXWdb2eE*sbuA!vaP`FO+q= zUu)Q_0J(8|PtaM#!nRUeR0Pkh?{{{62ILXN)6;m82Ni;uxwaTd7XWuqI4p!t_ zPQ>iDPXGN?14c{3aOn$=;W47sD75!EAH-1tc^PYBnC}|Y+ZQylU)QGgwkc7<^sR&# z5g-1i0{p!JzA_2r^0pAS9hN&eLE5Qu2)u*{hwf}Xy!*&fpbxyX`kV0TdqWGIyiv81 zfi?A7Egdq%PE{vHyhlgNXLan`D4o_deUO?rf7NP)MKg;2eQgvP-@T6%EmOf<89-*7 zBDOXd%l#WiZzr&^>Y`*)yIpx$eZKbM77G!6IhnAKA3l(k@Cb_RofGL7xu?+PT2P^_UYMwy$rG6Bz6H}9-^e(GE>j~p}bd<*8E|YbA#*YN3oKc{sa!%r2(o_h;MuqR z3@Hxht7$sP(!Kf~`B1m;)#SO@d=1;b4`|W0y34a{eM$#th-%s$#EshbeU{=_21EZ= zVT=&#EzV!k;1S-wI(IjV4^tJJwStkkLU6_P9j7#EneafV zwit%(`)4VP8oa~+4x&=YyF5P4G*zCXBu%05h0AuhQ)D z`ytC<{=+_h`j5(qM%D9b<-cf61|$VfPa52Pfr7&2@Ky<$oBM~Cc)lDi2YXAR=mnXP zNT%lY>8S-if<30ig5fxYO9iI!R4D|ZaaW@@Gq{bCHYkkC18w;bpEz1ln(=Qz=Wp3V zWhRv1OJ^pl zmG;S04R%X^{Vck1my2 zmEkO0IE1GDvgryEJuck5qj|KJrW@35`tQtJf}Z;t;i2n7qSQXzPyHXj|J+=q%~k%+ z$|PqH87c6->q6$AuPGG}k3kFUp~s4SjeWxkD0w6YPwU742t z%e^xs5;iQBq--wKS<=43<<0*vz^hc0t2jr)#rC;RN%mmmIV0Gs-ffsjDbR5V(ykef zjVLR5zttq~9y-WL!!ar(_?&S4tnIE1d!fdKYOPpiRvf=u6xz9Ea^(i)>XOLPIUMVq zB%sozc#<~6LbH3cbczU=e=#~g(nSI*IeJFU)jhMO?j^p~B27Jl8y#;5DDV8qDhN5B z3L;kxTxQ*V@0@*Xk!rbnS-2gaX3Rc$-paJj)fqz=o zVA!9`DL9YeZ#VMPhAP&=C;YpBOQ(7UXUlRUC-ApJ5AL%Aw${oavT@Go5sEc+b=hAt zI!>(U<%+J04(z8=r3_2SOwA(ez7Em`JOnIChU^v@{cV;h62%;0v)_487j|8U)FHb{ zqhCG>qYe`}5szXnw_XQ5Qel{2l`M9sPnQ9e} ztt)X%)Ug#FUB`;l>)sp~lz!7o;IQto9`=>da3~+rto9i!l^DYr?^Tl!Wuom}%ef3xj9r@DCd@6r> z`4vxXYVmOfHC2<7h{CN+2Clm#u!H4^iN>q;%`bV;v-~bas-I6R+C(a!h$$Xfo_~Ow zKObGtzearg#j8K~($d|Wo08`zj7_R7M@&_cv};@yZ|46D-Y=@ihOm*Y`4S}k5V=;> z9X$SF3iKr;PJzwJN_GPS7!hTYHu;jrtjPb{+HZeE{3maEHzvDDeZa)jEC_{eEAibE zFkQKRb53FM2{uf}JJMM4YUkFvJfbmMt!O%YCJ=$OxiD^!KLo7uip87s16}}H{2hN+ z=qmhnbHnvMGbboSMx_~51H=Y^ZMvS5%N0R#)lkv3q&h4>AWRvcD*ktYD%NB({XW(t z@V)bMY9+bls^kHW!+>`+|FL1kInPOm@|ed)Oep++E$Jdh2~?(0=tLP0ZGmka2ls#W zv<lHI$_9dGf1KYx+cLL78&|EOgX0i{)(VqC{kTQ$yqVGiD5Z3_{$Z#XqmD zAbqCxv(`d3O!k+9{#ow8r=?0qi!iVOGPQ(g6yHT%D%M;L{ml7w(>YwST~ zn5!aHN-E=Q)>SWRkpiYtWt&2YXhZ$^U2Z{!72+${sF9WFrw(O9>GG(}$bzqNIq)XI zZ(I51)xOS&{dilPvCLcLHw!NI?-b{Yz@`rJSxR~}{K907Kws;eXT`4~L}48O8f}5@t9F1Wew?mMv5k z$15i_i~cO`BBgjh-jFvwv&V$jlftjM*C${3$>2!Rab?Ww#L@Z=!1%bwpWAlAlTc>r=XKqo+f+t)q3FU0$(&CJw9+q_RS7~7UY`5lu@ zbIvO>Wi}tcGr+91omJFdy?LBBNYgBpmq%u9=SF>%fzI7&a8#sgH~2{Mv_&#M@ksml zu5rFOYvf4hhDTKQl&UjTjs?FJWWqG;nVi?!FGwXtW+$KVB(g=lsfO~0w7~p

eQu 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�#xGDS3a~ON|BEVnc%DxEReie|3kB($kbmtB9zadU&u>4N zL_>l^%Xbf51bl}TWi@EzLIM63R_vC^tSs(#;`aW?Ra$X2)TT1X4=G@6iFdGjYK1QU z$8yn39`{mmx>vvyN@4Lqdev|B-ZzFX@*wp>wDkrzNG^0jRZnb#W#!iyCW8PInil$y zwV2Q{{+~>JH-6A#y%^E==?O z=WJi7&?HzXHbpF+?x(g+LFkDTq>r&v?flbh+6L)eQjDhg%`wdXi}nxY#YN!^;$d;G zZ7pR++u&A`HQRc#VQG7@ChC?xc{hq%WDE1emvsL*2-(>)ARh-&$!e^0VwZMr{+u_znf(%QAlc6)gM7;4n+p zhRA%T2*PY+1~Y2ecCL374l$h-U2jClDDlU$po=}@H=AG_I>7hqKdqurGr1kGO`bjS% zaj9?kDS`BLxnPt~tcSp~1Mt1aPtS6fHi6u+*oT0t(klD5SL$^>)WohB3v(v=8h4{f-%J1buLgEJHEV^V&^r5q^QW50`}Z`nJM-QWrv7GwgAf4Jnd5 zqb4AHst0z*k%|AL$p(02eXIE+Ij4|(!y=a)61*=*o>OD0S-Yb?Kw^M9HSKX2Ao}*m zu2s}7mq!^5aBAoknkgS$FjKdk%aNnjuGld?6_BR&eq$z1Xl$HPc31$-)z%|ef4jr|7aM!TgypEW1@ zN@J)P$VUH%xoUcknY=QLt^pls#`)@S5MWieUye(|!J;@LPs~zAeVa*-9+t;imL-%q zYr}cNd6r7+XBf##6EM31PfJ69@Mg$&tN>t`H+q-Lm|XP{SuMM<~b^l$? zL^$-VCJN0sC6n@)^2b*%;ZjqG0L8DW@*ObAiKm16c&nJ0P2H%ztdbI#V?toxi2$uWUT8m!Ejs{B&7goj2`A zS?#i2t2}XGX5oxQbGtMJq&u*X=Mp#nxR zi}RDyWC2DA9U)}ty>F)eW(pHtFCU#Cbe3=6gVRFaw*#8%^oAXQ?j@=+YIcscU-JgxAJWrEZ5&`g`}f23|vr-^-x&BH_sLH zJ{;6_LViq6IJBdg%|6*on|I-3-F(*WMR8s?|GYJa=93e_Yj!6rtWlHKOlB-iRQ!1!QP<+U z&bJR5^T;p6h_OP}DWL>%N?06Uic@cb(cRbaL}rroY8M5~b<@|ZFAuVuD8EZeTjL#k zekW87c=?YO*yvX4C<`wlGGAZpth!&cr6S^3*93lQgQk~PJ>x3Ikve|LPkCfvR|_9!a_qF0k_ce&5`W1vUFyoszi_LNVA*?aVr3A6_4No0Q}-Ks`@W{{ zo0MBE(hqBmsOCTFtF;diV}|z|PAB3TzMlyYUD@9%?)+$AFG9}pF?wcZ=9y6NEwSV+(sH8*xI|QE+Zw!i)k%94hC>N=_6xEQs@`2@6;Xvp zBFPic;z?9&0s+iX(;D7}?E|uIGJS-zw1LR{uTP(=HUqjG9$8=Gyodw};5z{nRoNd-{s969 zWYH!$J^^~`^BTD;KCJ6;OYs#L#1l>T2Z;u%M;h-M(MPN6hzNQh zC4?o1mf*x%m=i--^X%J@jyHmx0oO+8P<6S<^RBNwzqT{Vr(k)H40lW@R*MJH4!D%` zs-AAKQ(hoB5_C;8hVKsdSmxP`spa`99~LN{XB3KMbh}Lw@t4cj*QD#P^(jtXpvsie z%}FWeSSJnBOb4}H^o5U)Q7eX45R3iENUuv=ysxVi)5y;|7;%cgL)#aS{z*bsQjW6z z3|$Bx(B^Q1)v0sf2j`h-T-u=qBV~^X2mz`S+f3lnB$jfs*ce9jAZ+m#NB!wJI_j!A zQ^A?-!jEFFGS%}dIbCU`$iEzMK~KBZmb+RQX4X;V0*yrLM+AT(1<5?-Lj;_9VexD8 z4Pp>)ygwuvHpK(7p-I%&pKIc=;Kox6PzOPR|JI;lFNFih)bz-fs>f~;ufkR&#ZXx8ANKO-Bf1|ILH+j<`$?RZQmlp!>RUMh-NQX> z^^vc0LxmOC&QXJDSsNx}pI^*pS0(=Rw*R!hfAB)@{IDT;EN$NAuK}xuZaq=M=7r)d zcnRgt>;UCWPPEK4$(@!ImHQmL&1F&=Q!&WV@U^fyM=gWJ3HHLvFAFJnzUyG1yZ^ha z^oevyz|%S=lwD{B2qFILJ8lBOk;BV{Dg>#_WE(4dsXtCwt@74iwoBx?vGnzRg3E^Ia4T;m(4VSGW>0x z0tM&v6pp5Qco@VL9YaZYV*1QXCX3TOWTOy{z;a(3n--lHbsU?00KG@Dk|{w!uN~e; z?bo_HT>t{tdIUpyAEb;nnGX~VK1mnc5sgpHUjBiz)@Ox%P+XQ{fJD`*tUITc&7M&| zNq_^QH@uyC-xF{v->+}Pt@^fl(N&!s& zHnvg^%AVpjxgUu~EX_Wo!#!jhMvD0lSkz|~8L|n0W(U-}$}LT;(Bh|}XweQSh;Y8{ z;yg2`058+7gKs8Ok+mhAAru74_?y@as0ww&o0gqI#vxIspGmoa1>OcW`YO&TsmzKi zc+=YY*MAWMrs%Lqq>F9Ya63}U;)V1xBx38S6WZz_JU~w%Ktw{@$Thn#Km^AYJoFI< zf3C^7)1#F!c+yGSDA$GEEJ;VUC@$BzM8O!&C}Pfm22ZEOf|~L2S>%s>3g!x!Ukq6l zFIE^>%B!X!y%P8c42$SyV^#Pn-&~>Zu~w6~UCC9Q1;tAaZoOmc_U^I4Ldw(Bli*>M#0O*}y43=rky??To?=%0H-}m#A?!hPe^y{-i9w+oT)RRs&w3b^KD0wY*}@TV7lmBC zL-Dr10lyyNYAj$>Tjhe-jck;tQi$&%Bv&=v#{x#n$`N>su+Ra2kYx@XT0TC6vc^ts zC_6Gk#!5SG=p(2%*^Y-kV&CY9+<%csi4`O$(@1$Dunp1#mJ$^z2L3CQ^b(6Jlyt5k z9QQWAHX-Xx+wW#t#7!!*3xEGR^aq!AD9#s<{1)!T=5{?1e#KQE{0;dvXWV6$F2ndq ziH*mgqA*!9C*XYvs>0;ktlR=;UE*-w%Kw*GX>0wlCN0L|&ChjMpBMTcA!S@jTMo*@ z0xBrqQ79v8Yti&9A%h~m3l7R#!)!O~h)fKRZj+RFYM|&Od60BJ#@Z6Jmed#|{EA&+ zv_JSC;pMSF<1nx^gSaS}gQq~ERq4fuxU3K0U;8t%TjfeBO0V?NUv(D*v1j1)3xAsmHk@y{=dyPcm@J=Q1w7+fu(; z*_XM!ue?X1Vs73&S?gb|85f5}?J*jcZ@r8x+Eo&JtVZIJyh#`*BKa-?FH@J$BwWxXBZRMtRWy&@PadAT@FP+_lChZ|N-z}A zG;-uszUQ!rpLR&HF8|lF3XqR5r3AO$@%WdAKAOJ zQ4Q8ss{4(d6(@2d38(dI{c|;YEA&2iox2$|pY-TDPJ3m5i5ctskI!M2Bj#EQso ztS6VXJ=au^7V@e4XX60IWW=<-KQbp|cGZ5EGbYz5nB#{K#Q~43m~i6-qkv~4eZhuB z@u$BqC+O^OR;wW|u_7$0Wx1&qY}u~jgg@NG@W%pNG6k|8M|Xj`S%bfPGqud95hiiN zk$ABZ6F9ar@bHs#Y++O|^a){4spn_E;V!m&GXnyT^v5cI11g*#+8>NU&29SpXV|Y_ zVTGE@G>D5__Fdo-IrRBIyLpK&=lw6c93Sz`qLy55-ag;@?qg$qq}zVuy^QpSWdZ-r)y zMfu?F$sJJbnC)DL-n6%|0Opl#dn^fiRsi{qvIT?odjmO=!)93oeE=|XQhA0Ua%)TX zqP%tWXY*#!S==DhcYaQi!-rf(o4heHAz>8<^Y-Pyq!21hEaX*uOM^*w>ImSc#>9a# zyZopj_cMc%@13)>P%*k<2|FRV6eoLzgm7bm#^OHb1OEpKfS+IMYHir4tEEj6y13`1 zbKh;yFVCyvzR9LlBD8E51KkL(A@t92rA3&e2kNd*x;r2_Kau8YP<&Bx~ z13rta^y0K-OtxK^am(xeV4s>EtndYXdh3H4V8lhkF^q2wKcJdK9$wg1WlCWg6+bXl25i-HgBe>!f9TB`$m;T zj1cI{%jM^sPM_iP%*QBku$;bon1DZ+5denrY9LR5Fk(9af)Ya(MX3WXCLZ4zuW;ZL4?%`M7@wjQk zVg~|ZtrwXxvRVY@xVkKjcM5*TnMRK!9}b8)2g#Q1h~=&$Xo2Ahju31eJK5yd{{Z`k z(2BXnzfFK?>LP>RYlp_ft0rzao4jt5dYmxL4SpOi3#edCc=QH^sq@nrs!k=93wb?? zVr*Vk-QRaMiX#M9Z%_JL^E5fsd+^_*8Us>T~-*>TL5J3unk>wv$DwSr<(u-+^h5NDo9zG zB1(Nx<1ksaQtulGwq8+~ypz*Y0Xt@d*8oyZn~p6KNRma#BxpPXE{SnF?gUc)a(z8) z5T;7f`|pB<%8@IDFgYJ;NyysIgEWyM#0er|j^y{u-!2E@^e4#`aNN>5@)J;a%IK}uVVY>aV1`TY%Cs8%WUZYM z+%zmlLe)GRjZ5+vQQ(P)d)^I*gu&c5RJ#UY-tu8rrLOh~$4haU()2D%$qg^#5at2T z+DR+WJgB&$z<)1k(otm>SEWvglfPvVy)F#E^^N%O(zic86-fkEUh8w=aCr$7)cU1O zS{rwAlwIkO*u+}Z-0HfTUt>bHI?rqyM@+98S@+ELvt@5YJ|>R-A&mO!ANOd)w=!v# zS&j1ha5+;KBap5jR!Nt-JJ-S1d%bY&?NUh6pNW>LODR^UwYqUH zTHv$f3{jDoMjaBv~)b@6j`R} zXLo3*e^JY64WOG((m#=;?-8c~;CaePT&BBDc zDjc4$!Y1dN?@ySt*+mZNJ-&|G(ZfiJoJc}$YHaeA|F$ucpQZxEp}`x-!OTZU zIuGOy$60Bl<$X?q7~43bdnSu&C=xLr#`U1ux*zG3nL7HUz}@qUg`k{N-|CW~@4XiT zBBU=DB&|c`DuJEg@$VsADaTL){N4VblkBqOk^cVe@}iaO+?{qqK#?aC9CP~aN9UMX zs5F`5Cy#a*?y#h$_W}e<^|iV1*p&lCLUEEh!(CXM2OL6PpFILJv|We}{M$;-S;k8J z?Vo5%%DW;va>>ec0~BCluzy4xFomV_lzSVECI-un?&$3p!LrZ);^7gWN4F{sh+IZ^ z%CTZq5HqI$s>c@W$vNk!|50=nZcX-YA0CYE8r{u6rAEg_k8*>JR_T~@3W(A%8U%SJ z;3yd*q)SPqrH3LQARq{Whyp4I@4Me$u=_Z6-`}{d>vNtwfG-(GuqQt+EYv7yMPlYA zqE}29@SDP>7|hn+N`Y;6wM$Za-n^N~VA(k&+c(tQ&2@6vMC6?^wT~%WChe#x-z#UE z>81xe2N^> zhg3UC?&|nYHTd6-A$g}}Bzir5wz1oe&1V>=@fE2vhclLDg&2eUiQ*Cuv#(DFAKEEp z-c#HhcjmjkjdiCe7XsH(?QHJ#!3@<$>5dTWi{IOoMB|rNcMI5zmp*$G^OpqMpDv9S zfv40i66l8lmuy}HR0r#P9AJOAbh< z*R+Pq%rUJSXMC5LXgM=>8x%gm$7Y(JtC&4v$5?Y0&J_A2OLgJUJ7`WfzLL=S-{5>6 zMSyWjzhC@B;Ep7p2-2GV*p^D_Kv@qm8B&^jNbU`7880@rhL;}tCCZc7+}cWyYga09 zzZ=p<0fUFKvV{#d0St_fDjyK}o!6*6H?JNI(%)ja{Q z-(PJU1NFC^!ovLZ%EtEg@@@MkDT&{gYq;;6!YiP^n5p}V$l^!tc#5pRC}Jf;Kq{GX zO(j8fe40I8S$R@E=+TKmc#S;&F_fGaQmoa9CqjyB#U@;bxhyW->UBb4a9Bz z_GM6*D83^ja+iFmb}6b3s;)9ZtGik`xQE=d9z+`#j;_)Km?q?qsD+E@p$=X{zgM|H z)0l+tZ9d^*0=}wa@DropPg#cU{g!C(XEUwlH)uMVPk;$NUJVe$?veZLYYB=&*+c~n zKd)?VJF7r0_z_x2|C+uuI;V>`syk(-sCNogZ@$fBKKj5%a;G}3AA{Kzy(f+TY4qmP zlO+|_h$V52g;v%AwaQvXqc6}r&aC~dv@M?Volb)tiqa%w^Wks&@e>$Dg@&0Yq-~ z(S2ElZ|_YW(3TIkPsraiDF=+LW8nf7hg>JQODNMxU<4Ig=-|90TR?d!Sis)H zvC&+~LcBPX?n*Yg(kWwriV`3YWY2ZpRQoWg|Nj6Y5Y{(m>G8$N@yT8vUnw=bubq2( z(=cg6fE2!a@iKb$i88{TA7alhFz_1lU2cEg^ zzv2DQabH#5Q@%3^ZEV&%6^Of4_sk{z$$be6%?%70d2yR)r*L^ePQ%=nU2oQO@z8;A zajtomit%aVT*bA$?#KYjqmGQ6Y;_Llcd>QCDg@!Mcw=^s_)TEKbHY4#K(=V2c0SCu z@~B#*bndSBB!&t@OMM$d1g%j5*2>8^EDz0z5w7H+=rx}X>MjWhrJRq_>D+QZP4Hvz zX|90dUpF_eERGE1tp@{+Ex}!()mi?r^AJdSehYbA$k3W~+Pn7`GcLcTPFhW3ab^iz z`%*%esG$F0d<8c^(8X(G0I^Z^@;piV3zVrOJz3(8%egk<#+XPSN(rN4qp7oG=!(#q zgsmQuleOk;_D7CRM0eevRv2ZcwrK@NTUv}1!uq}?#!onk(4vMM)sMMhM{O58f`M?N z8#*{l$a93{ALM(bM7G?Awk&at8n`&ZW47i>E>7*E%!K4}kJkD6GDB()w ze|hm)>A`frHxc3uYT7_@0Zk7>oYs8>gh{)wK8{I98==bc{FStl$U1O_&*Ur*L%r~T z-Fx=So_ZW65|b#&raQC>F;X<9PJ9^n7{j>PJ-VkMBNfXpn;Mdb?9{K${yJZyu^G0W zE@BbOkAIt;z*KvEmTUKgTzi)+#}7fju*OXPk?R+eq?b06(0cM+78`i+;N!Mb-l0+t zp;!6HU6G)$U+qb$GBAP)3V+THSCC^M{zv(hqcC@E9>@9ebkwEcDWwl%L2a_$QgE33 zV}+2CGfuuQ@MXJNuy7D!RXe-=yWf)1$|Ipq&MV*YtA6A zOd?ye4*hW>LiX^3GRNB{B<(kdq}QZ=j?Y>8yaXvS(7~=~dOFylwBVh!g|L-_*q63| zu|C9$Jkf>Mzafr3Q*xK&(C*A0w#f5+DV@?GwU@O(nDKnbK&{*OP!05PvG+r2jj_5E zqj}^M9yBz;yPp2Qb0NZ&{g<%`y!8Q}ZVCg!IaS7%8hK^K=X6qerNAF=32Zqwo3rCx z-NW^+IhcghUo4SYWDPOb!g1OMca7z5B>OqYvh?N*az0;s5AJ=GIlrC9)!m&d;XY|F z&(|-}?Cf5-u=y%<`Hf#?k1#&aTiUU79OYpfhFvdWv^qJAuDrQuUOkF0^~-~6v*=+M zzDqMClc^DnKa28OU6=TMe?C#DOR@Uz62-4}R|Myxnj^tPVY~M4eUJqx!kJaO5qd;3k=)DtU7X|qMK1efbGAZ+3o;JcMw z#gPjSqwwRPC8X0rxT&#( zI4X`>@MLe&we)j;+dE+1l>)=s6<9f6x;La$#ROCo1ivcTGd4=LkwkUVf7E)gEsr=MF~U=W0|3h3>F!V zNa0=MQ1+$q8(b#lAFmU*jGEq3+V@%6{U5;kK%9m~C6R~saEbbpVf|DjNSc9I-3)$x zeQE+ULZ=JFM-!`V+9D=twPTiZ%}HEb)R8i1)ioGg?-G4)iFio2wq43_Q+W6P0If&= zNS;)o#c^c(tohS}scdE&9}B?t-`gM+{yyKHrf0Bm3Ur)kWL25x%35cKOeibFp2~_n zDgY`wi@7Njzy_=djV8sS-Zz_Z`T>;kL>8fkYiHbD2QnpRq}YNAAdtq0QOGnrJ^ z=<4be{vnzQ)8o$(cKRN_-tkT8jp|*0FRFWYi`MdO8gNe?Pi*hjWgrX^I@oHLWQOW) z7JF#TR>OlC2AdX4R*BhZ>rEUjH8%)#f=V`ee*De0uc+zJ!6v4Ce({!*wflfeY~tIZ zZYpxC!uIfyDHRGi5nQRv2jPgqNQ=JY<2UpA+o=3U(r(^pa@~z8FPIr)7qi3Mm`rGtd_<_70e_W$1%s7hMG+$i&+o*{(Z2QO(`CeBz8ntG~@fQ>4l#}O+5wa2IGwBeE8Wtqtrn7^aR))TN z=SYe2vE)sk?p9~U`0FQrR}n?lYzu%pA$BG2QB+mR-BTb5V90O0S0PLkSS+yf3#vNQ z*1h~gHnW@qpb$*+hl>lYBCIRX^4(X;A74uL>ts{yCD=Ip4DC&AKm?t!|X=C71%8(uWPCBX!r;sAUrp7D@0EZi7MS3CIJ$XoBZp+HB094gw1REWGusfx(-Bo~;f;d{ zp=MOu2~gEM_KEQ$$ByVPD6A<4x1au2pnFhcy>iP4Y4f4$5(!U5<#&xh=hp=NWiiWN zfLf`0u9%x;hbOhLi9pl>mlCO#Hf!^J35SU(7n%aL+Q-p^K0*Uqj!gW#GYH&zyCuC( zXH^+A)ip&Zv;SwY62r*P$WD$t=&<7&CWq}olxxF2I~)-xO0Omi(0)4aF! z-=}R2yh|uOF4qHZYk9gpkT~?qs0D^us;=aMLT>1g1$Wq5jB;_W7!YOH`H*{({`A1Y`pawq(0A;eWJ~(6=eBizsZ&6=^iIZK)+}Qak^pgp2%} zD;eaJREW*~Qw}mAhvC)dSBq@1@1Dvi7om}@FQthzSSlHc70KD9Aued!9WI&o3rw5Z zf`v|bgRNEs*Fg9(niTZM+ALuAgQ7yOW1M!8OrLvGhV?5W7gj$DdtXzm)4pXb3S2PywcUWp5#HA z1o(`WdFRfYR4Ca1KwOi+5!g7=B0U zm0)C}O1g`YJEdjPz$u|6?2Z^xI#QP?%h=TPGX~+W#(MHat&*CkC<6wSxqU`H{tE6nJl9dgXC1432)51=&BCJ5~`|DWABYOFiT4 zpKydk_VpVO+07&hmXOrRMKf;`3j0slqm^I9rGE#B}C^}bej=Yf~8rbNiTM4v;eW^9`G zC|ox+7JZ)sxR|?dfGx{Z^;L?mLN=P-Ojhv-_@M!@0haqKt>u}@bntsmt69^0A|`!K zGvE2W^BafOr5V%#59L6(8!LDx!V>5kK~KQx)QX{~s#Dw5q$SY};Y<>q+LFXq+bJj=!uNP>L(u022r`0SCo?;Y0y-S8E3!9)hefW^x z8Td_WRzYxF8)8@u&s67XeOXpt-4qG-(Ve0DuF>z=!5OmA;@!+ozQ&B3Csu!-52 zBCqgrz5$1E`5?);;fJGi|M|}L$07)K&P;HoWv@R;R+((9vvEWlLUvU;LqlPny$PN+HfDRjdQ0F3D`vXU ztVK+daiat7^jf}LT!0q1)lqjq-&RhyQD|ks{Wl9fv>~u0{$or8GZK;NN4^4yuLfek z{Dl9-`Dv3MAHjlfz3~#i@tttCt4sb&B9tPDvow;XNxJ^Yp8mt7EHttOWaT7%X!@O+ zSv5Dij?V}o&85U4%U1b$GO9A)Wpl21MZb}gk&7kASjqY&E}_j5a<^el0m%WtspdIh zy&K2(me8uM*`4C;yG-*D5^}#Qs(kdk3tq9|*|bTZJy%u_BfaGBnbdQg4d7h9s(wLHLcFUk2Rsu)>7qB?*w0&a@^@%t@I%k7KYt?vbk)qlz8PRo!nP zlcc~={rnSD~WY8kB?Ajl%)uU!F==jbm?B0UPaCznroQiIJb}bBOXJ?FTU!vR(6sj zTg8ZCiy&vF^f5%ztAwJZ%nS(gau{yv!N9~{8FJYnpeWq6vr-w|O=#BEkP&24Cx~{f zD5?SnR5OhFu06m|{v5dezLTfq%evqyeM~O{_h+PPJ-1BgVD3uN-K}v+`LgO82aG+S zf;J!DMF~oSH-#&NsbT}|fa@oq`{SzY&V1JNc67JjKY$<~=G3=dW#E~~vt%r}HOeVb zyd-5jX_3b)R6D>Vzu?RT?XDw+{PK_Td<1y>gZ6 zB1YZ+;)^V6x2bRP-N5RLBKv)=^u1e+;omiBsUNSm%TUkOnm}juPK^_SBVRD=<%eYj z9YY1#c>?$VKAJ>TH!WqAAM_1GJ1TnAxI@;SS;PCPC?brh#Gkk1yZW>u^7AXBV)w>u z29*PyIlr?uZmJMJT6+S;2(mPUzenF%UFe{7wD^nlNgZ&n4<)czXuc;(vx5`W&fIZ% zN$Qz-9z#ps>n#r)=t*DoDt^cjzjCjyQb9vRerlXupA|92d^TaxJTh`$!}#yppz=Ft z?E{)*&xjdDzRJ!ie?YPe`;_t}%cF*7tCPtwReu_sv+3_K-R5}x!^|~6%G_sBW?D)( zj(O3ogT3IL*%7XB%Pun1`U__~L`9gIV<|uUKiWo8`jFV|Uudu9z$e3E(W*!L=B=Uv zaxS^IY{tZs(ge8gVdjLl>nao=LD^FO2Y9wcm{2y+H`9mMva-(-0DuiE3h}e$M9M_H zQWja+vS;>n88RU-orD(4%Y0a9gHOcrzhAJ5y-Mjkz>Twc-b(kzB5j|Lm4s@sj7^S6 zF7&;(B+8_MNMIiY;`En%Vg1zNYy2Y|@TSnCC(G>pn#6>3?V$W+gmfwJ;JSz^@K#v! z7M6ZbcN%Cam=&D<&iaxezWuAcrLwq&;2zGOVl3!DUOw94A}I_N9{FBL%*2?fq4!DW z<*O zC4E*p1m6qHe<=cZmhPP6Dd7=vhO^+uWNLK~AA)DTk^5R2Kj?lGO0#Kv9MH(Jw%3^fb!eV z0SShN8D_u@0TjgTp=&}Z);;#7XCA=p^!$b`&+?s*U;vB&VkRKwaHK3B&7D}(+_>s- zb}k=Lgik`pM}wGoRPELXf~aJX?UM|ice4BygTs*a$(wtRgD~`xQmcFv86RVDH6}rX zTUwEWm4@X}d)*M#;T$y<2qlkQm@~w)xF8x=3gF#UwA2xh0!jHYMTv?_Wln6}^xDC0zve)!T`xX4Y(NyIb5Y}mikj&QBp&y1$q%Qb-I zw9*!M`Y=ZGcAqrr>_S6nD7QM?=}L(5o`C7j7wgR=Z^yBu{6vij!l(LS&*y!1Y_S0+ zoxTcc)t(#_LMi4g0}BtWq+Ux?p{LYp@_r70XyqSE=zRH@sj2tkZzI&^4mSne_L;C1 z%8|PHk#$JR-BZN}`|l3~;ItAEapa*RoXRc#cDL<8n_%}Vh?lLgCdnj`j!)um3On}! zM#Dvd zS=l41PH1Edw@+8VRGiebA6h}o!pH8JZx-kpUE{E;t>2I>(>0XYfXosCp!|U z0M*||8GxAc9GXnX!Aj&vLQ)@@Iec4)$oOA4)1E}n3&!u>Pp6m@14=)eg!YK+qd8j3 zjk7;8R@k=OX@TVtW*mzw*b8gJK zbq408_IgLw{#*R{O6p4%zy@~84QJj^{gHR(;}#)EeYYg@#ywltLv5VM?AF+w=S*Td<^@L;O(l~oNO`BJtV%a5(AoHZgQ z4v7weT1tNt*M_aDv*3N=0bm~@0`9>jG)GCs{jLyd&t0PEPC!m9iP~6tSspiy*e(ZG z&MIu@A0r&Ne(!OCT1$OaadZa)f_u8eL=PaXKZ$8u5X)#|8B8I(M16Z`Rp~6a7T?k0#&8Hd&cd`seu+?AWTN<5||PP zdH=l;WiF*V=`-(^f9FoqsR0D)*542?JH7%ZtY}rf-3GBC(Haw@pNQhibBFX=aDg0* zQ}6lRXY*SH8pBP)5Ya3B_c;+ecVfP4-mFn-D_Lr<2#nmV3T=}L=#<>URW#0=!dmW> z<~PBTI{!>7IrW);^g{MaqL%76whAQvi<QOV#oP+uAMNV3z-MnA3k)DagS0Ucw`$G2^4bFF)`Y?M%tekmKuj+0k&*YX=ab}g z?lJwz0SKt-{^ENMuO|&z8h4>DDla=|^cB@uBJW{}+|zF@(Y#SGp+B#7sx%(G$m9rx z)o0c5XvZtF;1$8ltKXzx|M*JuXu2m(`O#jdO^v#xjgqj4BH5Kx#BN*kg5=G;ZjW6T zMcPotO`EVxv?{W0ahJ7w{bk)DSP!4aYQa5olyeqxgYi~|mnJVotlW`3d%nWEcMgRG zVb3vDHj{6^D(qz6ec~Q90+l)<8t>b{k8yK!$4Jvve_6@QROZotNU8`%uLUXQQuR}! z6f=2sDy? z2NMn0C(G}~b$g5L^yOOLg+leM%p8P&E=l|M%DE~!Fdx*=2lw(Jt(RAIiIuNPcmsoD zw-O^;0T!HOa7felnh5$D^F6Is*eBl4QmGQMU;QR5^lbEpb#CFchJTI!tetCsYnYJj zrzmyX1Mkltzc4l&_C_LPDLmzqRx$~*d5^Xsh${cRWxFbnp_(2k@q7LvZp+J9<2!wg zkYJ~QeEN=o#c1$tS7RU4C)4`&#lJcAMJ_@DG$S5 zSAjxbDV5p+VSwYpX^J@$T%71moDswp zs6C~Td$_)NVSESrTiv*%XM*&RTpz(7((Dq&#M}LIA|)}%6Ld)Q0h2m^*zt=DSHGqV zO^v^hVAAVf_%9g~r%9-}?6_4_d5NL@46E)#e z&Yn_fx*>8#n1t1o@Ii!cmW_fdrbGdP-wyi-wyW!=!f?_;tpGVty=&jE7Y#*xoIgtgJk1 zl@232M~6tJC~X_`2+TBK{Jfq}Kf~C+yN!jX z_uw=C2iQmPgi-l7inBawjz#kxjO}Yv#-9AHWZu7{=O?+ypxWRd8&XELKOnnqL7g=R zGG)s2o~xK$(D*9k5;a}NsKaXEYbdS_XSxZT_yO-B!v*XQ1kfi@mn5C~iz&I_?GG@7 zu`zJ-8-G{86IU;>2VNSJ=I}nw(Vy%CtA$o)|KX(m(k;hZ| z8v^Y&&mKX8gw1~{twON-(n8*2qU1KoVtMh6$$z<+8Lik6WtYe1-P8LvQ~8%s^%81C zdyuU)93M#)c8TJ?b%}s_44mW3VatzW#OZXuR^KCMa77@9R+T;~$+19LKKN=kmqFx4 z7Qz%c>t<-rsBB`Qgf6p7vmX0BVi{Cugt!hN3FX2qdql&IMFFFqDwq%0N z>g&=OjW-K%n3x(t>aansg%MUU+QnmZ(ZSzCy%0+@k=m<@uv-PE{$J9bLly*yvsHe) zl5LhX@IDdX{|Hl&?1``!^O$xRgTJl5ik~@iSu`fGXounGX#UhE`d>c$&GmN4b;SaNn-E?mWcU>Zb;qm3t zVBl+Ja(~y@Z2VOq>kvV{STWc>2rK^0k&Uu}1%5%0`#G^(cInecwHbGMsK^4xr$q@PjuGy$kSa zmK>TxqsDG2~BDnjSF1QzQW$riuieVv^kq&}Z=9t*^0g&^$F39eML z+bnR_IKn;=X!Kx;8W%2vJr4&rulKGD7uK_6Uk)wvP=uO5&zkh#J+# zrt7U8$Y-(ff}Ex$7GlOS#SqL772I&muV^a|4xe+<@_(mS>O+=VBm_3#gfghgp*wb| zPLmY+`%qZF#@=r{ah6$hVpV%i`1~6o&qNyq8V%{*#rCg#6J?9i&L>ajsX0^Got8m! zuE;T?mvB4Y|FQehBmD#(#?@O#q=YL+NtW*HCi(@BS5pGS34AOL_hqO~Y=)NKRB&2? zL1t5WnpfW>q>mQiZ}6{zwZ9L9q*%Q^@mf zykZ`K#SAI(EeV^=FjEID?D)rgpbe{yq5W6W8V4)=F=jU!ul=e7ro{tn-s56#+qaz% zSfeXlt^FXa2EvR#vBTKf?fhi6SPWIyx|fuEaz9$N@RV@mcw1^B`Mzt?eey(OI+eO`tm{P6S)l;pN^n6cm5 zgGUywv^dGrr!t*j%qT{(nf+!#oy@|g+!6C;tMo{3@aKrYu=O`fanv3NR&MOHInLM+~?}PbPRqax8 z4SRZA-Uw*bE!_5BdP^O3|I1H%F>JGK=|dDcc)F~uth2&?I%uEC5w7hgRFBNd78Q8x z)SXar;My}>*dvs3Z}^oyYxr=k;Dlf$PjIG0@OIV*y*l8`FyjQf%LK1GeZaU(*AX1> zbO-F|$}P$Lr*U)KSVr45w*1Waaf!=AGVTK8;Z4tai*NE}pI06A8Q;4cWfO8g3k0p) zY??~=ZbpzRFtCP8l3XlIXfSV`xg6KX(bjbH>oxBLxB&Y;)#Vn}GySXnJ60~wKU9=G z+Yd>jHFp;G4neg~cNdfQ$#b_8hxpNrU@S#~7_n{h6k?vakB9|I|aQ z01my$`vVM~5bsJfjx5jxB+j#E zK(FeTv0Z0g9p!M1={vJ_Wf9-bBOKnOFOLoAvtf6J3|+sSEg7#(eUDfp zB=lPSK3Aw@*8JWdY<*hpbqCEooBbo9ajjNfdI)=Bm@zUUc-QJAq5lmRy7QgGPugIo zCmN}?;4+ID;5iq!d7zJx94@v&;oBW|U=~!7Jxm}{Jm1V2&ZG2IcXm@2 zw#r12oAAPfdP*?)3kqTH-&>Y2S$LWR4O`jn-)_e9TXm_%i}yyY9;4aq6yi=sP%iVH zu18jZ&=<<;(vz%)J|GK_9 zo*<`A3zW!L@J}dHx6Z4tauQVk`04+4@IOg@b*Of13GqCzX2{RQ7_|#*ir8Ur_cL0d zca^Ya)5JmYfwq@M^n3N?R;FmN%gOHsdpI3`wi_op1Om(2Va2A(&kj%~KDgdiWwO@X zN=V9GX`dml9mZjzV=W*L2rs8Zo}Rq*{UToG6PP104Y@YQLoZl(xga`=HL8+VLDdqDgxR?721- zP%sQlF%?!|>VW_pXXRWG_~q?_f_1;DR-_zep{cDHAQbj3la*8yd5F1S&Hg z9Wq-W>jgp|*ZA0SkMWzYc!kEZT0HKMu-VkkydhHO;Ny?J7XU45$z4xR$fVs($QX;M z9LcqRI8QxHxtXddG=>?!W8fXh|4b4KPPGFBboJSx{w7JRu49*5d8ZCew|Vg|zR)m^ zjy<=T^Kr4rqecj3J5hzliKD%T5K#^Db)-D``v!ahDLU9mYAX#*!E>SGOJ5=3 z)~#x9wfOP_G>yR`&QX9&8UUHa;~kM&+K#Y}TA`&2Z9{n~sVd1Q zvn25Shx1ojf6{-vTej`gt+$au&lzts!gw9>JFXjD;tno)Uhg$dO7`TBF@>t!(Pz_< zBj>F?oH9oE3T}~o$$k!GT|)Z#A8*as`sa^v;9`F={H6S{b?H^MACQ{d(=y4P8-4E2 zgg{F69HETz5w?<_QumeveN`2-s0uFD{wlFp#F-v~eZOi2rB)32j9Ut6jlbW3Kwul; ze+&}2d?YEEjcGxd9)7Bx-@)lF+HaxbA)nGzZRKoJS9KDjL9~WJ3m?p)n>r=zQZ~*Z zinb&zES#q}7@$r}D)?qEE66Y}jjSM5JdOT96A9TPtq%*@Fe=gL{e9rB+Jt%BQN^Bdf@?{ms_UKx-)x8X(wp)4#IS)5QDt`~B@x#! z=eKj6bM4jfimzMrmLzYO@9sm{O)5}=o}qi|^`g&3w}az|soqy#drLJ$%MVmKn9)IE zg@_HEtVK2>ZXDbvPjt+!5a!9&dBi)u*-~#8#}4_Pe#%+!K;AL%pEu~v0CL7D>t?F= z#Lv-fH(ZC}9CWsnV56?!d-Erkhk`@Sn3BL1zeN1S@$4MOMAedWx2B5xW`IrTxL1Wfjp*Fl*xRf!up*` zk`-5GcU6!9kN!K-oUH?2i^M0YhcTRC)hNKa0xTH&<&9fePQ<@?yOsFNg8D-8Z9Mt) zYzuW7fg>a<2x-D8HM#7i{2ieVVPiietFVUT zIdU2}b~8?fj^&LI0XuT|{vAw{wq-Qj1V2)Aa@D@!;=8g=}tC1mGPAwf@XH3Q=YAx1jQ%Tyj4E2)Ae z>9^xrmDV#^3aSDKb>}+B9#rcl`I~AXo1ImgHJ2Zv^x1Efuc9rip%MVrK8RwmC@ndq zWf+Z%)Q;kEdFzC{oR6S;VJf70J2T zeFrtx>eKQXQ60?LCT&e^$x{1dNcQtYxx@an2ha_nSE$7$PYu!Y-}QB=EHs}E?6&y+ zR#q+m$h1Zm_ciH2GD#@p+58;FWnMSW*gwqjp4Y_C_>4BLJC@%^z|}*5390%=JMwR3 z{ZrRivO?_zvU!wZH0szXbV;O4`{<+(BzAM1WP}Sk#apS*3L;Pi#{*p4qW21a$YMPc z`f@0iNt{{CL&wnFM5Jk19}!bn!!{B*0;K!O@ypnWQ=0`NM)!N{5s8~V>P?p76^h4# z#bnK+1Mp1@S>?}9V>EUQ^ToLKegXoIvk4m%P5O&{{AQ)wl7%_G(?+$wtEh6b#K|pQogcBte~RhfiHX$>YWAtZ{^dsS!pGS$8tlD=M5mS!q`wV*LUTrqknmKhBkC_cdPkdL zEQWr?QPaK$Dm(JlIvFF{`(=u0QL3q+t9swA@t9Y|K2 zqA}^`3|6Y-lSbe+1RVvoHu+SSanLA9S#M!#gL0iHgC5}+j(b0m{!%eo({?U-@s+%JbY=?w{Awr1<~zNW#vnfSRfP&?Dboe)$g!mk z$sNmCUHEU9C~MDPvb+&y1pofinq|||J>D&Jt*q}C%<{unLTTh!46*ue7TuX^pfS5? z@%oaixW;ogE1P0U&7gf-Lo43{8pGq>oiNy3`2PW@+7yC9z{8TCJZ_^(enTP{34h$g z@~SNt5|v+$-1ZPqyUPOZ@9}_|I52MkMVa?)XV9gsFYMY za;C_5Umbkic3>M(Iw0G#kFAV9u(f+C{LidxFka1hd%y0^MhYk(pxi*}m*)nQHe{t| zerDrLaUnI|n)f0vEEmJPIzTsmBKiJv@rvz!3hMRt@yQ)2^BwOldO4^7IK00ik+s9$ z=PuzFi!6sUSTvb7t2CCZjlVF{>tmnLaTS)Cr{v&wk5@WyX=s-JPV+LVYtL` zS1OLbW5C;*__fykwzt*Q3_U}?q=kv)qmZT;iCu+vKiiXe=!aRcv(0UFr?N+Zs&I+k zUh+*iQSZzY65HnLBl^pvnmx#0C=|YY+=m)0VCq4xt`~3Z)<81-bOIcH2hF1*e=>nw zZ}XE?x9+tHU+El+X7p`B--zKa z`^aQ3VkUrfr^Uq)$H#dJAvNsx0T;Qa1ch!2v%hP0A@smlCTo^H71iD26!96FEvxg=*P?oCW^?bm0&xJw-BB$9Vq$7uT ze>b!@n-aFS{n5q&Pb7eUlA6~E;xi-F0byz>v~hQ?WwRNZ>X@P(5=66HnF^tRo`>1Z zbeq3mOrF_}t4Y^Od2vO9aIPYz|K6~i+M9+4)cpLM!^!V+L+;|>1=TmT$mT&+3!>En zp!ODaaKCd(;Uw+-+<~yK?ZJpX!?%Y4A%W#iPL-Zx1@o*3;g59}S$dfdFIpAp_~A8~ zb}qv+Uz&qi_IC5`vpoM&IUQ^;mfbd0KFCl+72&4-M6l~Ag-fztfo=k!$*pld{=GHD zI3Kan=hb9loSCAD8I2ec85P2qc zWXnbPFl`|zY}pQ;QJiIV|JZ$Krky4Br#=&1Z*-s|W0nWE$GAY0e%XRwA5`=@nOm`J zrwXeD8|XcpfdEf&EuWQ0K(~?87dQ&t%}bKQBUS8a&S3N^VmX$bz2o{pG4}k_nN9BFh|o7xP}(zU5X`o7A*+ zz|`>Y$I{_?5FOC%%9=E^@KQ`(n!Sp(Co zp%MZ38P=YE_^iItcwT3Xctbxwi)cz2LE=gz6W8$Di2w@%)3h5oAlZt|2nxfN=$W&) zd$sU9Oz3uQ2_6J^364{^WC!*d-ckY&8i?JCq)YG=Kv9{4e1hWNlYdS+Cb7$ZF+uC{ z?#uEMs&6?}Og~E3h@6xDjS;ExO3CCU2gNc)lFvW+%4f;iseiDD2`FIxvk$o!hsT%F8&>6ixoahGo4!_mqH2>}qK)tIgy zOwLA%FS!5llg!wq(1T2T{m$mtJpgh^IoWVCauFjeS0*^n(nr38tjz438~+Ygo41jLHpX)1t}A^el>{wvou5`GR?NZ1 z{P!2zpFk0Zhp5W5aIj|h3q!46fDr8E_fK7i-Pbz@LH6XWmVfXe0%`HtF#)|!`;1wX z6-8z5v^xQXa1BzhIJ~W!(mm|1hft~`cfG=g`XAw?pMA*CbT7g1n&3XUQ61=@1vh4+ zXU0W}hdukYUyDwOqUCSXl9ahS=Dy$DdMN!cf2Q?{+})sCG7NRUv<`i!Vad#HWv5wy zs!&GIJ~*po!mQgomF}9lk=cn(2%BzYAYHrOD$#eI1332ad&uId55)UeqpEvy> zX=>hg^ZD$TYhbCsV|WmI(oKIf8fNu*@oQG)V{3uP`SGX88m(~0t&Hdm3@*Vm^8yop zAVz#o&O8Iy6fUNacv#=gVk7nNY_%W<6>unu@S060jv26Co7fXt{A^ZaEXm?Q(K6iY zctp5-+kPmQN>mm$Up|f*w>1*`?9S&tjZzu4`=l2iW#= z4|y1H&&=Ts^SRAma8bu3n0tf}zSt1`de559akZT-DIV}JY`H9D(Bex4v8|y+18Nke zWh>|QGH(+qfgCYkdK1<>srCSxdyFGQpnL9Hp5UO;(2todp02FwNfU2de96%HL|6Ov zj}1IDhU!bCOOhaM#*Mwlb5+rVYqD61{89>3Fa2LeYyvYCVuFCp(pzz;XBfy*p%?z{ zVK*=|`a_fE%7I>VJ~)1*J@s?$-zK`H7ZPj8Dnqr#)X{f^S^@0_%`a7fzzl1eknD2J zeI$>+f08@ZM%o?-%k-f9|K~gU-S_1ESnpjH)wMaf!Tf^@q!{+tSG7N?kSTT9^mzI zB6kvt2T&r~7sdX$3mBLXXgDLsL>p+$styxzf&Brw-?U~nE6Xxrp$%J7Y4k9Rf01lN z8;CI1Dp}4^C6`GF&pZUSa1(!TA#KEhbDZL6>5K*R*qoM~E+m*r{t&At`9=S+|-%@?RJCv2wJ#!YH`T{YP zHow-+yAPzNoJ+m8DVa%BJ1w|+XXziVO*s~5OwINAXaX|IEq6jv43zciyIFL(WN}B7 zIb(IslKU=h%6n87v6a9S@O2#C<38vp%DN;`GHD*H;=A=G4<`2Xuw%Zu{)^hHnwAU& z`lkJcXw-e*j|Qqu_7acV4e5VVTD}j2+cv6FDy(753w?wT%8Y6~9%9l>(agj=-5J zV+q1=WL#F=tW%}&nYi5$nDrF!kDlVCoOtmy(J=Q3vL6(C-Nx}hdLK| z*u69&AnGyy5XXJ`6S@{#DgOa4RGN|b>z#DEtlX>HRa2jnLduW1FZqulA{-DA7aVP1 zukL%r7H?MkHk4qYRJR^ykJt)**f%uHM?y=HY)zhE!D?iNHD)G%d`NyP=xB(DtrLoHuziO1L63^`tLPH1*>U?OZMS~^T2)DRmJm1K(%B?9neigr^|`cy4K-C5EpC)= zm0ro=^V7%ndw@kU3vY{$qwlyqUQVz%{|px ze&ZFC?&8p{M&@?1R7HXMrt6&X$?q zGu~sJC8~%|} z>DDZ9SXU+8kL#FJ!6`Gw2Fae=0<-N9alxZY>Gb`rz9EZi{kZB0eRfg#32KzCe#S<| zfoH-^+ioCzkP-s-3TM81uiTJ+Tr@XpVcfiR&1rxUg5;y796W`#Xb!W{*Q91b zD&Tl-)9BKAa)e21E^cN7xseDFP$O^-SwL^EkTF}S6ntkO4YbYKmQj1)&@+t&yy%l~ z@-;k`cZcf~`%ZK7&b_*Ylt|&@G-JT6nrJUf@Tw2Y0lGi=X?QTs254?AI6aA%^wb6PrFvhI53D}C@TE4!Ii)y8_J zYmKM}Ezc2>mDQgx_-dKZ9`GQ=>ff8cCHkx%%4JkMB=4Q1$q9Up$&v?I*5=+4s)+fm zY?x=Y={cknvwFbh{VcW%=uh+uDqsImm zbrcp_MATNyEBj<6eUAXhDrlP0^o`d<_*FrP@vd#dFt46yoN`Tw@=%*p+xMgzvNu^MuorVl>nbtcOGLLTpUNYMpo6q+P|#L z%x_tg2^DKna)k|os%CwepVk!F?0~h9RaP?3MrMQojO{nz6oFcabjrAiz}0<7X!R2X zTQ!E;5B4tz9LH}gHKh19b0R-|?E6X0I=&q7tJPRZNP;?RAM%}}Ou=UZmKK8GXh;iL z+dRW(IllaJHkrvL_yNBE?5gYyt3ytZqG9PPHoMYSe4{F@j&MW<+`QDy&l7Ksw7HvF zYCPUYHug4|@~D7aDYPgf*q?%q`c4}g?%`>Ay1hL^ zYTg3%*^hC+GLmAC_lR(SaQ2K*QOCfcRfEOQ<_Ci$Tj|BuW&Jo=??femI~o%C3Llrb z3*bNChCDf}EJ<7kwd2uu z&e`^oy#h=k-N2bC-YE5BG;pdIKuEXDk-h26=&r^ybC}c4A^! zHe3SpDY=bOH3(`UU$@xaxczLR>DT*l=zET8i$_$xljOB`!(J&LqRZ(wBN{}Vqc{G< zp67Tc-XKloKO3S_JYd6os)O0@Jz&x1i z$U_7223LnzSkTd|E1)bX5uc9k7g>Kj@+Ne+KE7`afyf;dPmrRqFz(~cH#6~Sff@n! zQG!o-+$2oTVW;(fT4itqmex`n7s2~Z6MNwR51VCcrC@nZR0X4Iz+ubo1P;@47xVijebON?UXfCBI)V^8z`!=pKSNm4=Sjb*W z+~+C;VICx-v`)?YBRjf&=Epw9xYt>tB_spZVif?5LD@CzuYG#8Ba^}VTN-5QQ2J|R zM0whr_%1guuq+AWZ>o4d7e;_GA_cr>H<5yX0J35R#1ql!ld<7;sK>BtKqE4vļ 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 literal 0 HcmV?d00001 From 401c8a495be863214fa23fb68fd1884b529be77a Mon Sep 17 00:00:00 2001 From: Karl Lessard Date: Sat, 7 Dec 2019 21:05:01 -0500 Subject: [PATCH 4/8] Move Shape to upper level --- .../src/bazel/op_generator/op_specs.cc | 2 +- .../org/tensorflow/op/DataOps.java | 100 ++++----- .../annotations/org/tensorflow/op/IoOps.java | 106 +++++----- .../org/tensorflow/op/MathOps.java | 26 +-- .../annotations/org/tensorflow/op/Ops.java | 196 +++++++++--------- .../org/tensorflow/op/SparseOps.java | 30 +-- .../org/tensorflow/op/TrainOps.java | 30 +-- .../op/collective/BroadcastRecv.java | 2 +- .../op/collective/BroadcastSend.java | 2 +- .../op/core/AnonymousIteratorV2.java | 2 +- .../op/core/AnonymousMultiDeviceIterator.java | 2 +- .../tensorflow/op/core/AssertNextDataset.java | 2 +- .../tensorflow/op/core/AutoShardDataset.java | 2 +- .../java/org/tensorflow/op/core/Barrier.java | 2 +- .../org/tensorflow/op/core/CSVDataset.java | 2 +- .../tensorflow/op/core/CacheDatasetV2.java | 2 +- .../op/core/ChooseFastestDataset.java | 2 +- .../tensorflow/op/core/CollectiveGather.java | 2 +- .../op/core/DirectedInterleaveDataset.java | 2 +- .../org/tensorflow/op/core/EnsureShape.java | 2 +- .../op/core/ExperimentalAutoShardDataset.java | 2 +- ...ExperimentalBytesProducedStatsDataset.java | 2 +- .../ExperimentalChooseFastestDataset.java | 2 +- ...ExperimentalDenseToSparseBatchDataset.java | 2 +- .../core/ExperimentalLatencyStatsDataset.java | 2 +- ...erimentalMaxIntraOpParallelismDataset.java | 2 +- .../core/ExperimentalParseExampleDataset.java | 2 +- .../ExperimentalPrivateThreadPoolDataset.java | 2 +- .../op/core/ExperimentalRandomDataset.java | 2 +- .../op/core/ExperimentalRebatchDataset.java | 2 +- ...ExperimentalSetStatsAggregatorDataset.java | 2 +- .../ExperimentalSlidingWindowDataset.java | 2 +- .../op/core/ExperimentalSqlDataset.java | 2 +- .../op/core/ExperimentalUnbatchDataset.java | 2 +- .../op/core/IgnoreErrorsDataset.java | 2 +- .../tensorflow/op/core/ImmutableConst.java | 2 +- .../org/tensorflow/op/core/InfeedDequeue.java | 2 +- .../op/core/InfeedDequeueTuple.java | 2 +- .../org/tensorflow/op/core/InfeedEnqueue.java | 2 +- .../op/core/InfeedEnqueueTuple.java | 2 +- .../org/tensorflow/op/core/LMDBDataset.java | 2 +- .../op/core/MaxIntraOpParallelismDataset.java | 2 +- .../op/core/MutableDenseHashTable.java | 2 +- .../op/core/MutableHashTableOfTensors.java | 2 +- .../org/tensorflow/op/core/NcclBroadcast.java | 2 +- .../op/core/NonSerializableDataset.java | 2 +- .../tensorflow/op/core/OutfeedDequeue.java | 2 +- .../op/core/OutfeedDequeueTuple.java | 2 +- .../tensorflow/op/core/ParallelConcat.java | 2 +- .../org/tensorflow/op/core/Placeholder.java | 2 +- .../op/core/PlaceholderWithDefault.java | 2 +- .../org/tensorflow/op/core/Prelinearize.java | 2 +- .../tensorflow/op/core/PrelinearizeTuple.java | 2 +- .../op/core/PrivateThreadPoolDataset.java | 2 +- .../tensorflow/op/core/RebatchDataset.java | 2 +- .../core/ResourceConditionalAccumulator.java | 2 +- .../tensorflow/op/core/SamplingDataset.java | 2 +- .../org/tensorflow/op/core/ShardDataset.java | 2 +- .../tensorflow/op/core/ShuffleDatasetV2.java | 2 +- .../org/tensorflow/op/core/SleepDataset.java | 2 +- .../op/core/SlidingWindowDataset.java | 2 +- .../tensorflow/op/core/SnapshotDataset.java | 2 +- .../tensorflow/op/core/TemporaryVariable.java | 2 +- .../org/tensorflow/op/core/TensorArray.java | 2 +- .../tensorflow/op/core/TensorArrayConcat.java | 2 +- .../tensorflow/op/core/TensorArrayGather.java | 2 +- .../tensorflow/op/core/TensorArrayPack.java | 2 +- .../tensorflow/op/core/TensorListConcat.java | 2 +- .../tensorflow/op/core/ThreadPoolDataset.java | 2 +- .../org/tensorflow/op/core/UniqueDataset.java | 2 +- .../org/tensorflow/op/core/VarHandleOp.java | 2 +- .../java/org/tensorflow/op/core/Variable.java | 2 +- .../tensorflow/op/data/AnonymousIterator.java | 2 +- .../org/tensorflow/op/data/BatchDataset.java | 2 +- .../op/data/BytesProducedStatsDataset.java | 2 +- .../org/tensorflow/op/data/CacheDataset.java | 2 +- .../op/data/ConcatenateDataset.java | 2 +- .../op/data/DatasetToSingleElement.java | 2 +- .../op/data/DenseToSparseBatchDataset.java | 2 +- .../data/ExperimentalAssertNextDataset.java | 2 +- .../op/data/ExperimentalCsvDataset.java | 2 +- ...ExperimentalDirectedInterleaveDataset.java | 2 +- .../data/ExperimentalIgnoreErrorsDataset.java | 2 +- .../op/data/ExperimentalLmdbDataset.java | 2 +- .../ExperimentalNonSerializableDataset.java | 2 +- .../op/data/ExperimentalSleepDataset.java | 2 +- .../data/ExperimentalThreadPoolDataset.java | 2 +- .../op/data/ExperimentalUniqueDataset.java | 2 +- .../op/data/FilterByLastComponentDataset.java | 2 +- .../java/org/tensorflow/op/data/Iterator.java | 2 +- .../op/data/IteratorFromStringHandle.java | 2 +- .../tensorflow/op/data/IteratorGetNext.java | 2 +- .../op/data/IteratorGetNextAsOptional.java | 2 +- .../op/data/IteratorGetNextSync.java | 2 +- .../op/data/LatencyStatsDataset.java | 2 +- .../org/tensorflow/op/data/ModelDataset.java | 2 +- .../op/data/MultiDeviceIterator.java | 2 +- .../MultiDeviceIteratorFromStringHandle.java | 2 +- .../MultiDeviceIteratorGetNextFromShard.java | 2 +- .../tensorflow/op/data/OptimizeDataset.java | 2 +- .../tensorflow/op/data/OptionalGetValue.java | 2 +- .../op/data/PaddedBatchDataset.java | 2 +- .../op/data/ParseExampleDataset.java | 2 +- .../tensorflow/op/data/PrefetchDataset.java | 2 +- .../org/tensorflow/op/data/RandomDataset.java | 2 +- .../org/tensorflow/op/data/RangeDataset.java | 2 +- .../org/tensorflow/op/data/RepeatDataset.java | 2 +- .../op/data/SetStatsAggregatorDataset.java | 2 +- .../op/data/ShuffleAndRepeatDataset.java | 2 +- .../tensorflow/op/data/ShuffleDataset.java | 2 +- .../org/tensorflow/op/data/SkipDataset.java | 2 +- .../org/tensorflow/op/data/SqlDataset.java | 2 +- .../org/tensorflow/op/data/TakeDataset.java | 2 +- .../org/tensorflow/op/data/TensorDataset.java | 2 +- .../op/data/TensorSliceDataset.java | 2 +- .../tensorflow/op/data/UnbatchDataset.java | 2 +- .../org/tensorflow/op/data/WindowDataset.java | 2 +- .../org/tensorflow/op/data/ZipDataset.java | 2 +- .../java/org/tensorflow/op/io/FifoQueue.java | 2 +- .../tensorflow/op/io/PaddingFifoQueue.java | 2 +- .../org/tensorflow/op/io/ParseExample.java | 2 +- .../op/io/ParseSequenceExample.java | 2 +- .../tensorflow/op/io/ParseSingleExample.java | 2 +- .../op/io/ParseSingleSequenceExample.java | 2 +- .../org/tensorflow/op/io/PriorityQueue.java | 2 +- .../tensorflow/op/io/RandomShuffleQueue.java | 2 +- .../org/tensorflow/op/math/AccumulateN.java | 2 +- .../sparse/SparseConditionalAccumulator.java | 2 +- .../op/train/ConditionalAccumulator.java | 2 +- .../org/tensorflow/AbstractOperation.java | 2 +- .../main/java/org/tensorflow/DataType.java | 2 +- .../java/org/tensorflow/EagerOperation.java | 2 +- .../org/tensorflow/EagerOperationBuilder.java | 2 +- .../java/org/tensorflow/GraphOperation.java | 2 +- .../org/tensorflow/GraphOperationBuilder.java | 2 +- .../java/org/tensorflow/OperationBuilder.java | 2 +- .../src/main/java/org/tensorflow/Output.java | 2 +- .../src/main/java/org/tensorflow/Tensor.java | 2 +- .../main/java/org/tensorflow/types/TBool.java | 2 +- .../java/org/tensorflow/types/TDouble.java | 2 +- .../java/org/tensorflow/types/TFloat.java | 2 +- .../java/org/tensorflow/types/TInt32.java | 2 +- .../java/org/tensorflow/types/TInt64.java | 2 +- .../java/org/tensorflow/types/TString.java | 2 +- .../java/org/tensorflow/types/TUInt8.java | 2 +- .../tensorflow/EagerOperationBuilderTest.java | 2 +- .../tensorflow/GraphOperationBuilderTest.java | 2 +- .../op/core/GeneratedOperationsTest.java | 2 +- .../types/NumericTypesTestBase.java | 2 +- .../org/tensorflow/types/TDoubleTest.java | 2 +- .../java/org/tensorflow/types/TFloatTest.java | 2 +- .../java/org/tensorflow/types/TInt32Test.java | 2 +- .../java/org/tensorflow/types/TInt64Test.java | 2 +- .../java/org/tensorflow/types/TUInt8Test.java | 2 +- .../tensorflow/util/{ndarray => }/Shape.java | 3 +- .../java/org/tensorflow/util/StaticApi.java | 1 - .../org/tensorflow/util/ndarray/NdArray.java | 1 + .../org/tensorflow/util/ndarray/NdArrays.java | 1 + .../util/ndarray/impl/AbstractNdArray.java | 2 +- .../impl/dense/BooleanDenseNdArray.java | 2 +- .../ndarray/impl/dense/ByteDenseNdArray.java | 2 +- .../util/ndarray/impl/dense/DenseNdArray.java | 2 +- .../impl/dense/DoubleDenseNdArray.java | 2 +- .../ndarray/impl/dense/FloatDenseNdArray.java | 2 +- .../ndarray/impl/dense/IntDenseNdArray.java | 2 +- .../ndarray/impl/dense/LongDenseNdArray.java | 2 +- .../ndarray/impl/dense/ShortDenseNdArray.java | 2 +- .../util/ndarray/impl/dense/Validator.java | 2 +- .../impl/dimension/DimensionalSpace.java | 2 +- .../impl/dimension/UnknownDimension.java | 2 +- .../util/ndarray/index/Indices.java | 2 +- .../util/{ndarray => }/ShapeTest.java | 3 +- .../util/benchmark/NdArrayBenchmark.java | 2 +- .../util/ndarray/BooleanNdArrayTestBase.java | 1 + .../util/ndarray/ByteNdArrayTestBase.java | 1 + .../util/ndarray/DoubleNdArrayTestBase.java | 1 + .../util/ndarray/FloatNdArrayTestBase.java | 1 + .../util/ndarray/IntNdArrayTestBase.java | 1 + .../util/ndarray/LongNdArrayTestBase.java | 1 + .../util/ndarray/NdArrayTestBase.java | 1 + .../util/ndarray/ShortNdArrayTestBase.java | 1 + .../impl/dense/BooleanDenseNdArrayTest.java | 2 +- .../impl/dense/ByteDenseNdArrayTest.java | 2 +- .../impl/dense/DoubleDenseNdArrayTest.java | 2 +- .../impl/dense/FloatDenseNdArrayTest.java | 2 +- .../impl/dense/IntDenseNdArrayTest.java | 2 +- .../impl/dense/LongDenseNdArrayTest.java | 2 +- .../impl/dense/ShortDenseNdArrayTest.java | 2 +- .../impl/dense/StringDenseNdArrayTest.java | 2 +- .../impl/sequence/ElementSequenceTest.java | 2 +- 190 files changed, 429 insertions(+), 418 deletions(-) rename tensorflow-utils/src/main/java/org/tensorflow/util/{ndarray => }/Shape.java (97%) rename tensorflow-utils/src/test/java/org/tensorflow/util/{ndarray => }/ShapeTest.java (97%) diff --git a/tensorflow-core/tensorflow-core-api/src/bazel/op_generator/op_specs.cc b/tensorflow-core/tensorflow-core-api/src/bazel/op_generator/op_specs.cc index 2a2d5e84c82..7a6239ee7ea 100644 --- a/tensorflow-core/tensorflow-core-api/src/bazel/op_generator/op_specs.cc +++ b/tensorflow-core/tensorflow-core-api/src/bazel/op_generator/op_specs.cc @@ -148,7 +148,7 @@ std::pair TypeResolver::TypesOf(const OpDef_AttrDef& attr_def, types = MakeTypePair(Type::Class("Boolean"), Type::Boolean()); } else if (attr_type == "shape") { - types = MakeTypePair(Type::Class("Shape", "org.tensorflow.util.ndarray")); + types = MakeTypePair(Type::Class("Shape", "org.tensorflow.util")); } else if (attr_type == "tensor") { types = MakeTypePair(Type::Class("Tensor", "org.tensorflow") diff --git a/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/DataOps.java b/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/DataOps.java index b1b7dc1eb5a..ea6bfc9d19a 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/DataOps.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/DataOps.java @@ -19,7 +19,7 @@ import org.tensorflow.types.TBool; import org.tensorflow.types.TInt64; import org.tensorflow.types.TString; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** * An API for building {@code data} operations as {@link Op Op}s @@ -34,17 +34,30 @@ public final class DataOps { } /** - * Builds an {@link OptionalGetValue} operation + * Builds an {@link IteratorGetNext} operation * - * @param optional + * @param iterator * @param outputTypes * @param outputShapes - * @return a new instance of OptionalGetValue - * @see org.tensorflow.op.data.OptionalGetValue + * @return a new instance of IteratorGetNext + * @see org.tensorflow.op.data.IteratorGetNext */ - public OptionalGetValue optionalGetValue(Operand optional, List> outputTypes, + public IteratorGetNext iteratorGetNext(Operand iterator, List> outputTypes, List outputShapes) { - return OptionalGetValue.create(scope, optional, outputTypes, outputShapes); + return IteratorGetNext.create(scope, iterator, outputTypes, outputShapes); + } + + /** + * Builds an {@link AnonymousIterator} operation + * + * @param outputTypes + * @param outputShapes + * @return a new instance of AnonymousIterator + * @see org.tensorflow.op.data.AnonymousIterator + */ + public AnonymousIterator anonymousIterator(List> outputTypes, + List outputShapes) { + return AnonymousIterator.create(scope, outputTypes, outputShapes); } /** @@ -78,6 +91,16 @@ public DeserializeIterator deserializeIterator(Operand resourceHandle, Operan return DeserializeIterator.create(scope, resourceHandle, serialized); } + /** + * Builds an {@link OptionalNone} operation + * + * @return a new instance of OptionalNone + * @see org.tensorflow.op.data.OptionalNone + */ + public OptionalNone optionalNone() { + return OptionalNone.create(scope); + } + /** * Builds an {@link IteratorGetNextAsOptional} operation * @@ -92,16 +115,6 @@ public IteratorGetNextAsOptional iteratorGetNextAsOptional(Operand iterator, return IteratorGetNextAsOptional.create(scope, iterator, outputTypes, outputShapes); } - /** - * Builds an {@link OptionalNone} operation - * - * @return a new instance of OptionalNone - * @see org.tensorflow.op.data.OptionalNone - */ - public OptionalNone optionalNone() { - return OptionalNone.create(scope); - } - /** * Builds an {@link OptionalFromValue} operation * @@ -113,6 +126,20 @@ public OptionalFromValue optionalFromValue(Iterable> components) { return OptionalFromValue.create(scope, components); } + /** + * Builds an {@link IteratorGetNextSync} operation + * + * @param iterator + * @param outputTypes + * @param outputShapes + * @return a new instance of IteratorGetNextSync + * @see org.tensorflow.op.data.IteratorGetNextSync + */ + public IteratorGetNextSync iteratorGetNextSync(Operand iterator, List> outputTypes, + List outputShapes) { + return IteratorGetNextSync.create(scope, iterator, outputTypes, outputShapes); + } + /** * Builds an {@link IteratorToStringHandle} operation * @@ -124,19 +151,6 @@ public IteratorToStringHandle iteratorToStringHandle(Operand resourceHandle) return IteratorToStringHandle.create(scope, resourceHandle); } - /** - * Builds an {@link AnonymousIterator} operation - * - * @param outputTypes - * @param outputShapes - * @return a new instance of AnonymousIterator - * @see org.tensorflow.op.data.AnonymousIterator - */ - public AnonymousIterator anonymousIterator(List> outputTypes, - List outputShapes) { - return AnonymousIterator.create(scope, outputTypes, outputShapes); - } - /** * Builds an {@link OptionalHasValue} operation * @@ -148,20 +162,6 @@ public OptionalHasValue optionalHasValue(Operand optional) { return OptionalHasValue.create(scope, optional); } - /** - * Builds an {@link IteratorGetNextSync} operation - * - * @param iterator - * @param outputTypes - * @param outputShapes - * @return a new instance of IteratorGetNextSync - * @see org.tensorflow.op.data.IteratorGetNextSync - */ - public IteratorGetNextSync iteratorGetNextSync(Operand iterator, List> outputTypes, - List outputShapes) { - return IteratorGetNextSync.create(scope, iterator, outputTypes, outputShapes); - } - /** * Builds an {@link SerializeIterator} operation * @@ -186,16 +186,16 @@ public MakeIterator makeIterator(Operand dataset, Operand iterator) { } /** - * Builds an {@link IteratorGetNext} operation + * Builds an {@link OptionalGetValue} operation * - * @param iterator + * @param optional * @param outputTypes * @param outputShapes - * @return a new instance of IteratorGetNext - * @see org.tensorflow.op.data.IteratorGetNext + * @return a new instance of OptionalGetValue + * @see org.tensorflow.op.data.OptionalGetValue */ - public IteratorGetNext iteratorGetNext(Operand iterator, List> outputTypes, + public OptionalGetValue optionalGetValue(Operand optional, List> outputTypes, List outputShapes) { - return IteratorGetNext.create(scope, iterator, outputTypes, outputShapes); + return OptionalGetValue.create(scope, optional, outputTypes, outputShapes); } } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/IoOps.java b/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/IoOps.java index 645f739131b..e598d654d69 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/IoOps.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/IoOps.java @@ -51,7 +51,7 @@ import org.tensorflow.types.TInt32; import org.tensorflow.types.TInt64; import org.tensorflow.types.TString; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** * An API for building {@code io} operations as {@link Op Op}s @@ -65,6 +65,20 @@ public final class IoOps { this.scope = scope; } + /** + * Builds an {@link PriorityQueue} operation + * + * @param componentTypes The type of each component in a value. + * @param shapes The shape of each component in a value. The length of this attr must + * @param options carries optional attributes values + * @return a new instance of PriorityQueue + * @see org.tensorflow.op.io.PriorityQueue + */ + public PriorityQueue priorityQueue(List> componentTypes, List shapes, + PriorityQueue.Options... options) { + return PriorityQueue.create(scope, componentTypes, shapes, options); + } + /** * Builds an {@link QueueEnqueueMany} operation * @@ -155,25 +169,6 @@ public DecodeRaw decodeRaw(Operand bytes, DataType outType, return DecodeRaw.create(scope, bytes, outType, options); } - /** - * Builds an {@link ParseExample} operation - * - * @param serialized A vector containing a batch of binary serialized Example protos. - * @param names A vector containing the names of the serialized protos. - * @param sparseKeys A list of Nsparse string Tensors (scalars). - * @param denseKeys A list of Ndense string Tensors (scalars). - * @param denseDefaults A list of Ndense Tensors (some may be empty). - * @param sparseTypes A list of Nsparse types; the data types of data in each Feature - * @param denseShapes A list of Ndense shapes; the shapes of data in each Feature - * @return a new instance of ParseExample - * @see org.tensorflow.op.io.ParseExample - */ - public ParseExample parseExample(Operand serialized, Operand names, - Iterable> sparseKeys, Iterable> denseKeys, - Iterable> denseDefaults, List> sparseTypes, List denseShapes) { - return ParseExample.create(scope, serialized, names, sparseKeys, denseKeys, denseDefaults, sparseTypes, denseShapes); - } - /** * Builds an {@link DecodeBase64} operation * @@ -207,6 +202,25 @@ public WholeFileReader wholeFileReader(WholeFileReader.Options... options) { return WholeFileReader.create(scope, options); } + /** + * Builds an {@link ParseSingleExample} operation + * + * @param serialized A vector containing a batch of binary serialized Example protos. + * @param denseDefaults A list of Tensors (some may be empty), whose length matches + * @param numSparse The number of sparse features to be parsed from the example. This + * @param sparseKeys A list of `num_sparse` strings. + * @param denseKeys The keys expected in the Examples' features associated with dense + * @param sparseTypes A list of `num_sparse` types; the data types of data in each + * @param denseShapes The shapes of data in each Feature given in dense_keys. + * @return a new instance of ParseSingleExample + * @see org.tensorflow.op.io.ParseSingleExample + */ + public ParseSingleExample parseSingleExample(Operand serialized, + Iterable> denseDefaults, Long numSparse, List sparseKeys, + List denseKeys, List> sparseTypes, List denseShapes) { + return ParseSingleExample.create(scope, serialized, denseDefaults, numSparse, sparseKeys, denseKeys, sparseTypes, denseShapes); + } + /** * Builds an {@link SerializeManySparse} operation * @@ -409,25 +423,6 @@ public EncodeBase64 encodeBase64(Operand input, EncodeBase64.Options... return EncodeBase64.create(scope, input, options); } - /** - * Builds an {@link ParseSingleExample} operation - * - * @param serialized A vector containing a batch of binary serialized Example protos. - * @param denseDefaults A list of Tensors (some may be empty), whose length matches - * @param numSparse The number of sparse features to be parsed from the example. This - * @param sparseKeys A list of `num_sparse` strings. - * @param denseKeys The keys expected in the Examples' features associated with dense - * @param sparseTypes A list of `num_sparse` types; the data types of data in each - * @param denseShapes The shapes of data in each Feature given in dense_keys. - * @return a new instance of ParseSingleExample - * @see org.tensorflow.op.io.ParseSingleExample - */ - public ParseSingleExample parseSingleExample(Operand serialized, - Iterable> denseDefaults, Long numSparse, List sparseKeys, - List denseKeys, List> sparseTypes, List denseShapes) { - return ParseSingleExample.create(scope, serialized, denseDefaults, numSparse, sparseKeys, denseKeys, sparseTypes, denseShapes); - } - /** * Builds an {@link SerializeSparse} operation * @@ -494,6 +489,25 @@ public ReaderNumWorkUnitsCompleted readerNumWorkUnitsCompleted(Operand reader return ReaderNumWorkUnitsCompleted.create(scope, readerHandle); } + /** + * Builds an {@link ParseExample} operation + * + * @param serialized A vector containing a batch of binary serialized Example protos. + * @param names A vector containing the names of the serialized protos. + * @param sparseKeys A list of Nsparse string Tensors (scalars). + * @param denseKeys A list of Ndense string Tensors (scalars). + * @param denseDefaults A list of Ndense Tensors (some may be empty). + * @param sparseTypes A list of Nsparse types; the data types of data in each Feature + * @param denseShapes A list of Ndense shapes; the shapes of data in each Feature + * @return a new instance of ParseExample + * @see org.tensorflow.op.io.ParseExample + */ + public ParseExample parseExample(Operand serialized, Operand names, + Iterable> sparseKeys, Iterable> denseKeys, + Iterable> denseDefaults, List> sparseTypes, List denseShapes) { + return ParseExample.create(scope, serialized, names, sparseKeys, denseKeys, denseDefaults, sparseTypes, denseShapes); + } + /** * Builds an {@link ReaderRead} operation * @@ -545,20 +559,6 @@ public SerializeTensor serializeTensor(Operand tensor) { return SerializeTensor.create(scope, tensor); } - /** - * Builds an {@link PriorityQueue} operation - * - * @param componentTypes The type of each component in a value. - * @param shapes The shape of each component in a value. The length of this attr must - * @param options carries optional attributes values - * @return a new instance of PriorityQueue - * @see org.tensorflow.op.io.PriorityQueue - */ - public PriorityQueue priorityQueue(List> componentTypes, List shapes, - PriorityQueue.Options... options) { - return PriorityQueue.create(scope, componentTypes, shapes, options); - } - /** * Builds an {@link QueueIsClosed} operation * diff --git a/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/MathOps.java b/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/MathOps.java index 6acd3d4a99a..39b04137bca 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/MathOps.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/MathOps.java @@ -107,7 +107,7 @@ import org.tensorflow.types.TInt32; import org.tensorflow.types.TInt64; import org.tensorflow.types.family.TNumber; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** * An API for building {@code math} operations as {@link Op Op}s @@ -558,18 +558,6 @@ public RealDiv realDiv(Operand x, Operand y) { return RealDiv.create(scope, x, y); } - /** - * Builds an {@link AccumulateN} operation - * - * @param inputs A list of `Tensor` objects, each with same shape and type. - * @param shape Shape of elements of `inputs`. - * @return a new instance of AccumulateN - * @see org.tensorflow.op.math.AccumulateN - */ - public AccumulateN accumulateN(Iterable> inputs, Shape shape) { - return AccumulateN.create(scope, inputs, shape); - } - /** * Builds an {@link Digamma} operation * @@ -1307,6 +1295,18 @@ public Real real(Operand input, DataType Tout) { return Real.create(scope, input, Tout); } + /** + * Builds an {@link AccumulateN} operation + * + * @param inputs A list of `Tensor` objects, each with same shape and type. + * @param shape Shape of elements of `inputs`. + * @return a new instance of AccumulateN + * @see org.tensorflow.op.math.AccumulateN + */ + public AccumulateN accumulateN(Iterable> inputs, Shape shape) { + return AccumulateN.create(scope, inputs, shape); + } + /** * Builds an {@link QuantizedAdd} operation * diff --git a/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/Ops.java b/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/Ops.java index f95d175ddce..6c69fc405d1 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/Ops.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/Ops.java @@ -184,6 +184,7 @@ import org.tensorflow.op.core.SelectV2; import org.tensorflow.op.core.SetDiff1d; import org.tensorflow.op.core.SetSize; +import org.tensorflow.op.core.Shape; import org.tensorflow.op.core.ShapeN; import org.tensorflow.op.core.Size; import org.tensorflow.op.core.Skipgram; @@ -275,7 +276,6 @@ import org.tensorflow.types.TString; import org.tensorflow.types.family.TNumber; import org.tensorflow.types.family.TType; -import org.tensorflow.util.ndarray.Shape; /** * An API for building operations as {@link Op Op}s @@ -456,20 +456,6 @@ public ResourceScatterAdd resourceScatterAdd(Operand r return ResourceScatterAdd.create(scope, resource, indices, updates); } - /** - * Builds an {@link ImmutableConst} operation - * - * @param dtype Type of the returned tensor. - * @param shape Shape of the returned tensor. - * @param memoryRegionName Name of readonly memory region used by the tensor, see - * @return a new instance of ImmutableConst - * @see org.tensorflow.op.core.ImmutableConst - */ - public ImmutableConst immutableConst(DataType dtype, Shape shape, - String memoryRegionName) { - return ImmutableConst.create(scope, dtype, shape, memoryRegionName); - } - /** * Builds an {@link TensorArraySize} operation * @@ -563,8 +549,8 @@ public TensorListPushBackBatch tensorListPushBackBatch(Operand inputHandl * @return a new instance of Shape * @see org.tensorflow.op.core.Shape */ - public org.tensorflow.op.core.Shape shape(Operand input) { - return org.tensorflow.op.core.Shape.create(scope, input); + public Shape shape(Operand input) { + return Shape.create(scope, input); } /** @@ -664,6 +650,20 @@ public TensorArrayPack tensorArrayPack(Operand handle, Operand ImmutableConst immutableConst(DataType dtype, org.tensorflow.util.Shape shape, + String memoryRegionName) { + return ImmutableConst.create(scope, dtype, shape, memoryRegionName); + } + /** * Builds an {@link LinSpace} operation * @@ -909,9 +909,8 @@ public NonMaxSuppressionV5 nonMaxSuppressionV5(Operand * @return a new instance of Shape * @see org.tensorflow.op.core.Shape */ - public org.tensorflow.op.core.Shape shape(Operand input, - DataType outType) { - return org.tensorflow.op.core.Shape.create(scope, input, outType); + public Shape shape(Operand input, DataType outType) { + return Shape.create(scope, input, outType); } /** @@ -942,18 +941,6 @@ public OrderedMapSize orderedMapSize(List> dtypes, return OrderedMapSize.create(scope, dtypes, options); } - /** - * Builds an {@link ParallelConcat} operation - * - * @param values Tensors to be concatenated. All must have size 1 in the first dimension - * @param shape the final shape of the result; should be equal to the shapes of any input - * @return a new instance of ParallelConcat - * @see org.tensorflow.op.core.ParallelConcat - */ - public ParallelConcat parallelConcat(Iterable> values, Shape shape) { - return ParallelConcat.create(scope, values, shape); - } - /** * Builds an {@link Constant} operation * @@ -1291,6 +1278,19 @@ public Placeholder placeholder(DataType dtype, Placeholder.Options... return Placeholder.create(scope, dtype, options); } + /** + * Builds an {@link ParallelConcat} operation + * + * @param values Tensors to be concatenated. All must have size 1 in the first dimension + * @param shape the final shape of the result; should be equal to the shapes of any input + * @return a new instance of ParallelConcat + * @see org.tensorflow.op.core.ParallelConcat + */ + public ParallelConcat parallelConcat(Iterable> values, + org.tensorflow.util.Shape shape) { + return ParallelConcat.create(scope, values, shape); + } + /** * Builds an {@link Fingerprint} operation * @@ -1577,6 +1577,18 @@ public HashTable hashTable(DataType keyDtype, DataType valueDtype, return HashTable.create(scope, keyDtype, valueDtype, options); } + /** + * Builds an {@link EnsureShape} operation + * + * @param input A tensor, whose shape is to be validated. + * @param shape The expected (possibly partially specified) shape of the input tensor. + * @return a new instance of EnsureShape + * @see org.tensorflow.op.core.EnsureShape + */ + public EnsureShape ensureShape(Operand input, org.tensorflow.util.Shape shape) { + return EnsureShape.create(scope, input, shape); + } + /** * Builds an {@link Constant} operation * @@ -1751,20 +1763,6 @@ public Stack stack(Iterable> values, Stack.Options... options) return Stack.create(scope, values, options); } - /** - * Builds an {@link TemporaryVariable} operation - * - * @param shape The shape of the variable tensor. - * @param dtype The type of elements in the variable tensor. - * @param options carries optional attributes values - * @return a new instance of TemporaryVariable - * @see org.tensorflow.op.core.TemporaryVariable - */ - public TemporaryVariable temporaryVariable(Shape shape, DataType dtype, - TemporaryVariable.Options... options) { - return TemporaryVariable.create(scope, shape, dtype, options); - } - /** * Builds an {@link VariableShape} operation * @@ -1800,6 +1798,19 @@ public TensorScatterAdd tensorScatterAdd(Operand te return TensorScatterAdd.create(scope, tensor, indices, updates); } + /** + * Builds an {@link PlaceholderWithDefault} operation + * + * @param input The default value to produce when `output` is not fed. + * @param shape The (possibly partial) shape of the tensor. + * @return a new instance of PlaceholderWithDefault + * @see org.tensorflow.op.core.PlaceholderWithDefault + */ + public PlaceholderWithDefault placeholderWithDefault(Operand input, + org.tensorflow.util.Shape shape) { + return PlaceholderWithDefault.create(scope, input, shape); + } + /** * Builds an {@link Constant} operation * @@ -1929,18 +1940,6 @@ public Bucketize bucketize(Operand input, List bou return Bucketize.create(scope, input, boundaries); } - /** - * Builds an {@link EnsureShape} operation - * - * @param input A tensor, whose shape is to be validated. - * @param shape The expected (possibly partially specified) shape of the input tensor. - * @return a new instance of EnsureShape - * @see org.tensorflow.op.core.EnsureShape - */ - public EnsureShape ensureShape(Operand input, Shape shape) { - return EnsureShape.create(scope, input, shape); - } - /** * Builds an {@link CountUpTo} operation * @@ -2301,19 +2300,6 @@ public Skipgram skipgram(String filename, Long batchSize, Skipgram.Options... op return Skipgram.create(scope, filename, batchSize, options); } - /** - * Builds an {@link Variable} operation - * - * @param shape The shape of the variable tensor. - * @param dtype The type of elements in the variable tensor. - * @param options carries optional attributes values - * @return a new instance of Variable - * @see org.tensorflow.op.core.Variable - */ - public Variable variable(Shape shape, DataType dtype, Variable.Options... options) { - return Variable.create(scope, shape, dtype, options); - } - /** * Builds an {@link TensorArrayClose} operation * @@ -2337,6 +2323,20 @@ public Tile tile(Operand input, Operand multiple return Tile.create(scope, input, multiples); } + /** + * Builds an {@link TemporaryVariable} operation + * + * @param shape The shape of the variable tensor. + * @param dtype The type of elements in the variable tensor. + * @param options carries optional attributes values + * @return a new instance of TemporaryVariable + * @see org.tensorflow.op.core.TemporaryVariable + */ + public TemporaryVariable temporaryVariable(org.tensorflow.util.Shape shape, + DataType dtype, TemporaryVariable.Options... options) { + return TemporaryVariable.create(scope, shape, dtype, options); + } + /** * Builds an {@link TensorListPopBack} operation * @@ -3121,6 +3121,20 @@ public MutableHashTable mutableHashTable(DataType keyDtype, DataType VarHandleOp varHandleOp(DataType dtype, org.tensorflow.util.Shape shape, + VarHandleOp.Options... options) { + return VarHandleOp.create(scope, dtype, shape, options); + } + /** * Builds an {@link TensorArrayConcat} operation * @@ -3854,20 +3868,6 @@ public Constant constant(double data) { return Constant.create(scope, data); } - /** - * Builds an {@link VarHandleOp} operation - * - * @param dtype the type of this variable. Must agree with the dtypes - * @param shape The (possibly partially specified) shape of this variable. - * @param options carries optional attributes values - * @return a new instance of VarHandleOp - * @see org.tensorflow.op.core.VarHandleOp - */ - public VarHandleOp varHandleOp(DataType dtype, Shape shape, - VarHandleOp.Options... options) { - return VarHandleOp.create(scope, dtype, shape, options); - } - /** * Builds an {@link ResourceApplyAdamWithAmsgrad} operation * @@ -3935,6 +3935,20 @@ public MapUnstageNoKey mapUnstageNoKey(Operand indices, List return MapUnstageNoKey.create(scope, indices, dtypes, options); } + /** + * Builds an {@link Variable} operation + * + * @param shape The shape of the variable tensor. + * @param dtype The type of elements in the variable tensor. + * @param options carries optional attributes values + * @return a new instance of Variable + * @see org.tensorflow.op.core.Variable + */ + public Variable variable(org.tensorflow.util.Shape shape, DataType dtype, + Variable.Options... options) { + return Variable.create(scope, shape, dtype, options); + } + /** * Builds an {@link ExtractVolumePatches} operation * @@ -4094,18 +4108,6 @@ public EmptyTensorList emptyTensorList(Operand element return EmptyTensorList.create(scope, elementShape, maxNumElements, elementDtype); } - /** - * Builds an {@link PlaceholderWithDefault} operation - * - * @param input The default value to produce when `output` is not fed. - * @param shape The (possibly partial) shape of the tensor. - * @return a new instance of PlaceholderWithDefault - * @see org.tensorflow.op.core.PlaceholderWithDefault - */ - public PlaceholderWithDefault placeholderWithDefault(Operand input, Shape shape) { - return PlaceholderWithDefault.create(scope, input, shape); - } - /** * Builds an {@link DeleteSessionTensor} operation * diff --git a/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/SparseOps.java b/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/SparseOps.java index a0e064b78d2..6498bd6261a 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/SparseOps.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/SparseOps.java @@ -49,7 +49,7 @@ import org.tensorflow.types.TInt64; import org.tensorflow.types.TString; import org.tensorflow.types.family.TNumber; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** * An API for building {@code sparse} operations as {@link Op Op}s @@ -94,6 +94,20 @@ public AddManySparseToTensorsMap addManySparseToTensorsMap(Operand s return AddManySparseToTensorsMap.create(scope, sparseIndices, sparseValues, sparseShape, options); } + /** + * Builds an {@link SparseConditionalAccumulator} operation + * + * @param dtype The type of the value being accumulated. + * @param shape The shape of the values. + * @param options carries optional attributes values + * @return a new instance of SparseConditionalAccumulator + * @see org.tensorflow.op.sparse.SparseConditionalAccumulator + */ + public SparseConditionalAccumulator sparseConditionalAccumulator(DataType dtype, + Shape shape, SparseConditionalAccumulator.Options... options) { + return SparseConditionalAccumulator.create(scope, dtype, shape, options); + } + /** * Builds an {@link SparseAddGrad} operation * @@ -413,20 +427,6 @@ public SparseSegmentSqrtNGrad sparseSe return SparseSegmentSqrtNGrad.create(scope, grad, indices, segmentIds, outputDim0); } - /** - * Builds an {@link SparseConditionalAccumulator} operation - * - * @param dtype The type of the value being accumulated. - * @param shape The shape of the values. - * @param options carries optional attributes values - * @return a new instance of SparseConditionalAccumulator - * @see org.tensorflow.op.sparse.SparseConditionalAccumulator - */ - public SparseConditionalAccumulator sparseConditionalAccumulator(DataType dtype, - Shape shape, SparseConditionalAccumulator.Options... options) { - return SparseConditionalAccumulator.create(scope, dtype, shape, options); - } - /** * Builds an {@link SparseAdd} operation * diff --git a/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/TrainOps.java b/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/TrainOps.java index 9e8a23f6a05..e15251b82fe 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/TrainOps.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/TrainOps.java @@ -68,7 +68,7 @@ import org.tensorflow.types.TInt64; import org.tensorflow.types.TString; import org.tensorflow.types.family.TNumber; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** * An API for building {@code train} operations as {@link Op Op}s @@ -82,20 +82,6 @@ public final class TrainOps { this.scope = scope; } - /** - * Builds an {@link ConditionalAccumulator} operation - * - * @param dtype The type of the value being accumulated. - * @param shape The shape of the values, can be [], in which case shape is unknown. - * @param options carries optional attributes values - * @return a new instance of ConditionalAccumulator - * @see org.tensorflow.op.train.ConditionalAccumulator - */ - public ConditionalAccumulator conditionalAccumulator(DataType dtype, Shape shape, - ConditionalAccumulator.Options... options) { - return ConditionalAccumulator.create(scope, dtype, shape, options); - } - /** * Builds an {@link SparseApplyAdagrad} operation * @@ -572,6 +558,20 @@ public SparseApplyAdadelta sparseApplyAdadelta(Operand return SparseApplyAdadelta.create(scope, var, accum, accumUpdate, lr, rho, epsilon, grad, indices, options); } + /** + * Builds an {@link ConditionalAccumulator} operation + * + * @param dtype The type of the value being accumulated. + * @param shape The shape of the values, can be [], in which case shape is unknown. + * @param options carries optional attributes values + * @return a new instance of ConditionalAccumulator + * @see org.tensorflow.op.train.ConditionalAccumulator + */ + public ConditionalAccumulator conditionalAccumulator(DataType dtype, Shape shape, + ConditionalAccumulator.Options... options) { + return ConditionalAccumulator.create(scope, dtype, shape, options); + } + /** * Builds an {@link Restore} operation * diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/collective/BroadcastRecv.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/collective/BroadcastRecv.java index 7984d904f84..dcbb9a2db69 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/collective/BroadcastRecv.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/collective/BroadcastRecv.java @@ -25,7 +25,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.types.family.TNumber; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** * Receives a tensor value broadcast from another device. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/collective/BroadcastSend.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/collective/BroadcastSend.java index 93144a9b281..56edb5985f1 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/collective/BroadcastSend.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/collective/BroadcastSend.java @@ -24,7 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.types.family.TNumber; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** * Broadcasts a tensor value to one or more other devices. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/AnonymousIteratorV2.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/AnonymousIteratorV2.java index 3a754bc06aa..e521200a736 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/AnonymousIteratorV2.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/AnonymousIteratorV2.java @@ -24,7 +24,7 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** * A container for an iterator resource. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/AnonymousMultiDeviceIterator.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/AnonymousMultiDeviceIterator.java index d5e4b92b14b..48a5dbe8943 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/AnonymousMultiDeviceIterator.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/AnonymousMultiDeviceIterator.java @@ -24,7 +24,7 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** * A container for a multi device iterator resource. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/AssertNextDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/AssertNextDataset.java index f326b6743d9..1c303a7b399 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/AssertNextDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/AssertNextDataset.java @@ -26,7 +26,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.types.TString; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** */ diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/AutoShardDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/AutoShardDataset.java index 660f19e827c..7345c9945b9 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/AutoShardDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/AutoShardDataset.java @@ -26,7 +26,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.types.TInt64; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** * Creates a dataset that shards the input dataset. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Barrier.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Barrier.java index c72777c5db4..13f92017db8 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Barrier.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Barrier.java @@ -27,7 +27,7 @@ import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; import org.tensorflow.types.TString; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** * Defines a barrier that persists across different graph executions. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/CSVDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/CSVDataset.java index 78b7c4d8fed..3bee87aeab2 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/CSVDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/CSVDataset.java @@ -28,7 +28,7 @@ import org.tensorflow.types.TBool; import org.tensorflow.types.TInt64; import org.tensorflow.types.TString; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** */ diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/CacheDatasetV2.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/CacheDatasetV2.java index e9c2b87ea46..d88b1b9e703 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/CacheDatasetV2.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/CacheDatasetV2.java @@ -26,7 +26,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.types.TString; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** */ diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ChooseFastestDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ChooseFastestDataset.java index d5df443b1f4..16cbbab0ac2 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ChooseFastestDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ChooseFastestDataset.java @@ -26,7 +26,7 @@ import org.tensorflow.op.Operands; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** */ diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/CollectiveGather.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/CollectiveGather.java index 8e63857b0e4..6b32ed90546 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/CollectiveGather.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/CollectiveGather.java @@ -24,7 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.types.family.TNumber; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** * Mutually accumulates multiple tensors of identical type and shape. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/DirectedInterleaveDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/DirectedInterleaveDataset.java index 625051fc06b..aef6855eee0 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/DirectedInterleaveDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/DirectedInterleaveDataset.java @@ -26,7 +26,7 @@ import org.tensorflow.op.Operands; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** * A substitute for `InterleaveDataset` on a fixed list of `N` datasets. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/EnsureShape.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/EnsureShape.java index 5580b3eeabe..8b5f14638d1 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/EnsureShape.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/EnsureShape.java @@ -24,7 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** * Ensures that the tensor's shape matches the expected shape. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalAutoShardDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalAutoShardDataset.java index d2778789420..31bd467d837 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalAutoShardDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalAutoShardDataset.java @@ -26,7 +26,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.types.TInt64; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** * Creates a dataset that shards the input dataset. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalBytesProducedStatsDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalBytesProducedStatsDataset.java index cc2009ffafa..9ca561294e7 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalBytesProducedStatsDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalBytesProducedStatsDataset.java @@ -26,7 +26,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.types.TString; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** * Records the bytes size of each element of `input_dataset` in a StatsAggregator. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalChooseFastestDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalChooseFastestDataset.java index 50ee1633643..5e05e0ee01d 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalChooseFastestDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalChooseFastestDataset.java @@ -26,7 +26,7 @@ import org.tensorflow.op.Operands; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** */ diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalDenseToSparseBatchDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalDenseToSparseBatchDataset.java index 2848a4a8bae..08a17505764 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalDenseToSparseBatchDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalDenseToSparseBatchDataset.java @@ -26,7 +26,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.types.TInt64; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** * Creates a dataset that batches input elements into a SparseTensor. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalLatencyStatsDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalLatencyStatsDataset.java index 89c13ece774..e2ad04fdc3a 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalLatencyStatsDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalLatencyStatsDataset.java @@ -26,7 +26,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.types.TString; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** * Records the latency of producing `input_dataset` elements in a StatsAggregator. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalMaxIntraOpParallelismDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalMaxIntraOpParallelismDataset.java index e1055d5937b..ee3d52c2c71 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalMaxIntraOpParallelismDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalMaxIntraOpParallelismDataset.java @@ -26,7 +26,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.types.TInt64; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** * Creates a dataset that overrides the maximum intra-op parallelism. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalParseExampleDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalParseExampleDataset.java index cc154507794..3fa0419ccd8 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalParseExampleDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalParseExampleDataset.java @@ -27,7 +27,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.types.TInt64; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** * Transforms `input_dataset` containing `Example` protos as vectors of DT_STRING into a dataset of `Tensor` or `SparseTensor` objects representing the parsed features. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalPrivateThreadPoolDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalPrivateThreadPoolDataset.java index ae6ba8398e4..f4252d87acf 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalPrivateThreadPoolDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalPrivateThreadPoolDataset.java @@ -26,7 +26,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.types.TInt64; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** * Creates a dataset that uses a custom thread pool to compute `input_dataset`. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalRandomDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalRandomDataset.java index ad93e141137..e0a5a5e437b 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalRandomDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalRandomDataset.java @@ -26,7 +26,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.types.TInt64; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** * Creates a Dataset that returns pseudorandom numbers. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalRebatchDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalRebatchDataset.java index c926bd69336..465c401e4b9 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalRebatchDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalRebatchDataset.java @@ -26,7 +26,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.types.TInt64; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** * Creates a dataset that changes the batch size. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalSetStatsAggregatorDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalSetStatsAggregatorDataset.java index 1e84abefdeb..645e62f635a 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalSetStatsAggregatorDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalSetStatsAggregatorDataset.java @@ -26,7 +26,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.types.TString; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** */ diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalSlidingWindowDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalSlidingWindowDataset.java index 608b1d8c870..a616c38d7b0 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalSlidingWindowDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalSlidingWindowDataset.java @@ -26,7 +26,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.types.TInt64; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** * Creates a dataset that passes a sliding window over `input_dataset`. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalSqlDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalSqlDataset.java index 3b1aa37d32e..43940b9bab1 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalSqlDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalSqlDataset.java @@ -26,7 +26,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.types.TString; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** * Creates a dataset that executes a SQL query and emits rows of the result set. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalUnbatchDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalUnbatchDataset.java index 97980af6e55..f1fff68c5dd 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalUnbatchDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalUnbatchDataset.java @@ -25,7 +25,7 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** * A dataset that splits the elements of its input into multiple elements. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/IgnoreErrorsDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/IgnoreErrorsDataset.java index 3584f7f2b9c..6df6000e011 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/IgnoreErrorsDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/IgnoreErrorsDataset.java @@ -25,7 +25,7 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** * Creates a dataset that contains the elements of `input_dataset` ignoring errors. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ImmutableConst.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ImmutableConst.java index f19961102a9..9e5b7cb9262 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ImmutableConst.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ImmutableConst.java @@ -25,7 +25,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** * Returns immutable tensor from memory region. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/InfeedDequeue.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/InfeedDequeue.java index aaad5cd42bc..e5000921438 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/InfeedDequeue.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/InfeedDequeue.java @@ -24,7 +24,7 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** * A placeholder op for a value that will be fed into the computation. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/InfeedDequeueTuple.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/InfeedDequeueTuple.java index 06ba847e108..4476e40a2a2 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/InfeedDequeueTuple.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/InfeedDequeueTuple.java @@ -27,7 +27,7 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** * Fetches multiple values from infeed as an XLA tuple. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/InfeedEnqueue.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/InfeedEnqueue.java index 0f61d9850b6..16d4e9f4fe8 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/InfeedEnqueue.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/InfeedEnqueue.java @@ -23,7 +23,7 @@ import org.tensorflow.OperationBuilder; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** * An op which feeds a single Tensor value into the computation. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/InfeedEnqueueTuple.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/InfeedEnqueueTuple.java index 7176e3dfdb7..d13389bc52a 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/InfeedEnqueueTuple.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/InfeedEnqueueTuple.java @@ -24,7 +24,7 @@ import org.tensorflow.op.Operands; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** * Feeds multiple Tensor values into the computation as an XLA tuple. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LMDBDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LMDBDataset.java index 55fdfb7ce93..14a43a69bbf 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LMDBDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LMDBDataset.java @@ -26,7 +26,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.types.TString; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** */ diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MaxIntraOpParallelismDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MaxIntraOpParallelismDataset.java index c561c474a34..82c939cfa57 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MaxIntraOpParallelismDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MaxIntraOpParallelismDataset.java @@ -26,7 +26,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.types.TInt64; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** * Creates a dataset that overrides the maximum intra-op parallelism. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MutableDenseHashTable.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MutableDenseHashTable.java index 7baf40d7741..a621ca456f8 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MutableDenseHashTable.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MutableDenseHashTable.java @@ -25,7 +25,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** * Creates an empty hash table that uses tensors as the backing store. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MutableHashTableOfTensors.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MutableHashTableOfTensors.java index d7af88d4a42..b2cbde9cb92 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MutableHashTableOfTensors.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MutableHashTableOfTensors.java @@ -25,7 +25,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** * Creates an empty hash table. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/NcclBroadcast.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/NcclBroadcast.java index b88702a4cf2..9ee8dd33ec5 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/NcclBroadcast.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/NcclBroadcast.java @@ -24,7 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.types.family.TNumber; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** * Sends `input` to all devices that are connected to the output. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/NonSerializableDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/NonSerializableDataset.java index dcdc0eca42b..706298584cf 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/NonSerializableDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/NonSerializableDataset.java @@ -25,7 +25,7 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** */ diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/OutfeedDequeue.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/OutfeedDequeue.java index b02dae53d7e..5d51a36b9f0 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/OutfeedDequeue.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/OutfeedDequeue.java @@ -24,7 +24,7 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** * Retrieves a single tensor from the computation outfeed. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/OutfeedDequeueTuple.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/OutfeedDequeueTuple.java index f4360d2f76e..1e623d607a1 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/OutfeedDequeueTuple.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/OutfeedDequeueTuple.java @@ -27,7 +27,7 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** * Retrieve multiple values from the computation outfeed. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ParallelConcat.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ParallelConcat.java index ba9aec1644a..ba098d941c8 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ParallelConcat.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ParallelConcat.java @@ -25,7 +25,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** * Concatenates a list of `N` tensors along the first dimension. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Placeholder.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Placeholder.java index a45948f5d50..be81c9bcea9 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Placeholder.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Placeholder.java @@ -25,7 +25,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** * A placeholder op for a value that will be fed into the computation. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/PlaceholderWithDefault.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/PlaceholderWithDefault.java index 2431fbb8141..80a61a6dd1b 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/PlaceholderWithDefault.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/PlaceholderWithDefault.java @@ -24,7 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** * A placeholder op that passes through `input` when its output is not fed. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Prelinearize.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Prelinearize.java index ea18fe5d673..782aeeb83ad 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Prelinearize.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Prelinearize.java @@ -24,7 +24,7 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** * An op which linearizes one Tensor value to an opaque variant tensor. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/PrelinearizeTuple.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/PrelinearizeTuple.java index d8d566c8a1c..2ce43568a6a 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/PrelinearizeTuple.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/PrelinearizeTuple.java @@ -25,7 +25,7 @@ import org.tensorflow.op.Operands; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** * An op which linearizes multiple Tensor values to an opaque variant tensor. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/PrivateThreadPoolDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/PrivateThreadPoolDataset.java index d86343a5e67..60090d8aa74 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/PrivateThreadPoolDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/PrivateThreadPoolDataset.java @@ -26,7 +26,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.types.TInt64; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** * Creates a dataset that uses a custom thread pool to compute `input_dataset`. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RebatchDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RebatchDataset.java index 15456ac8c49..a380455efc5 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RebatchDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RebatchDataset.java @@ -26,7 +26,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.types.TInt64; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** * Creates a dataset that changes the batch size. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceConditionalAccumulator.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceConditionalAccumulator.java index 3d393e79dfe..e77df4e24cc 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceConditionalAccumulator.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceConditionalAccumulator.java @@ -24,7 +24,7 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** * A conditional accumulator for aggregating gradients. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/SamplingDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/SamplingDataset.java index da1bece1f3e..81c2cef1870 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/SamplingDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/SamplingDataset.java @@ -27,7 +27,7 @@ import org.tensorflow.op.Scope; import org.tensorflow.types.TFloat; import org.tensorflow.types.TInt64; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** * Creates a dataset that contains `rate` elements from the `input_dataset`. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ShardDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ShardDataset.java index efa638738bd..ff28e9fdb57 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ShardDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ShardDataset.java @@ -26,7 +26,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.types.TInt64; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** * Creates a `Dataset` that includes only 1/`num_shards` of this dataset. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ShuffleDatasetV2.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ShuffleDatasetV2.java index 5e5ac30309b..d0f47069ac6 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ShuffleDatasetV2.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ShuffleDatasetV2.java @@ -26,7 +26,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.types.TInt64; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** */ diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/SleepDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/SleepDataset.java index b5f59187ab0..15b20b1b642 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/SleepDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/SleepDataset.java @@ -26,7 +26,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.types.TInt64; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** */ diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/SlidingWindowDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/SlidingWindowDataset.java index 63df8f29fb1..ff26fbe8074 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/SlidingWindowDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/SlidingWindowDataset.java @@ -26,7 +26,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.types.TInt64; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** * Creates a dataset that passes a sliding window over `input_dataset`. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/SnapshotDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/SnapshotDataset.java index ed573b0b0f8..f95b46714e4 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/SnapshotDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/SnapshotDataset.java @@ -26,7 +26,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.types.TString; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** * Creates a dataset that will write to / read from a snapshot. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TemporaryVariable.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TemporaryVariable.java index 49df5330f0f..dc396de1dc4 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TemporaryVariable.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TemporaryVariable.java @@ -25,7 +25,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** * Returns a tensor that may be mutated, but only persists within a single step. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArray.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArray.java index e81619e2946..fd2c9d23942 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArray.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArray.java @@ -27,7 +27,7 @@ import org.tensorflow.op.annotation.Operator; import org.tensorflow.types.TFloat; import org.tensorflow.types.TInt32; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** * An array of Tensors of given size. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArrayConcat.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArrayConcat.java index 78a05aeab6f..16ff2321b6e 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArrayConcat.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArrayConcat.java @@ -27,7 +27,7 @@ import org.tensorflow.op.annotation.Operator; import org.tensorflow.types.TFloat; import org.tensorflow.types.TInt64; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** * Concat the elements from the TensorArray into value `value`. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArrayGather.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArrayGather.java index 91c4e50dfd5..b0234e86829 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArrayGather.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArrayGather.java @@ -27,7 +27,7 @@ import org.tensorflow.op.annotation.Operator; import org.tensorflow.types.TFloat; import org.tensorflow.types.TInt32; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** * Gather specific elements from the TensorArray into output `value`. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArrayPack.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArrayPack.java index cb1459a9b3b..9204d28ee1d 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArrayPack.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArrayPack.java @@ -27,7 +27,7 @@ import org.tensorflow.op.annotation.Operator; import org.tensorflow.types.TFloat; import org.tensorflow.types.TString; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** * @param data type for {@code value()} output diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListConcat.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListConcat.java index 361afa8e1df..67d3f87b54a 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListConcat.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListConcat.java @@ -26,7 +26,7 @@ import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; import org.tensorflow.types.TInt64; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** * Concats all tensors in the list along the 0th dimension. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ThreadPoolDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ThreadPoolDataset.java index d1c2807a4af..e6ab633293b 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ThreadPoolDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ThreadPoolDataset.java @@ -25,7 +25,7 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** * Creates a dataset that uses a custom thread pool to compute `input_dataset`. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/UniqueDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/UniqueDataset.java index e0b2dafa30a..7dcd9246c2f 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/UniqueDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/UniqueDataset.java @@ -25,7 +25,7 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** * Creates a dataset that contains the unique elements of `input_dataset`. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/VarHandleOp.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/VarHandleOp.java index 612e190a009..711b7e16f65 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/VarHandleOp.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/VarHandleOp.java @@ -25,7 +25,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** * Creates a handle to a Variable resource. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Variable.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Variable.java index 06ef3e7c8bd..93c1294500a 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Variable.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Variable.java @@ -25,7 +25,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** * Holds state in the form of a tensor that persists across steps. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/AnonymousIterator.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/AnonymousIterator.java index 2234bddccc4..4ad10d4531e 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/AnonymousIterator.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/AnonymousIterator.java @@ -26,7 +26,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** * A container for an iterator resource. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/BatchDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/BatchDataset.java index 78b925b8f64..816e1ec9deb 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/BatchDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/BatchDataset.java @@ -27,7 +27,7 @@ import org.tensorflow.op.Scope; import org.tensorflow.types.TBool; import org.tensorflow.types.TInt64; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** * Creates a dataset that batches `batch_size` elements from `input_dataset`. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/BytesProducedStatsDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/BytesProducedStatsDataset.java index 2d93235c55a..90b29b2e806 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/BytesProducedStatsDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/BytesProducedStatsDataset.java @@ -26,7 +26,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.types.TString; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** * Records the bytes size of each element of `input_dataset` in a StatsAggregator. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/CacheDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/CacheDataset.java index c18ded9941f..d16e3b9a69a 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/CacheDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/CacheDataset.java @@ -26,7 +26,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.types.TString; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** * Creates a dataset that caches elements from `input_dataset`. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ConcatenateDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ConcatenateDataset.java index 950e2532696..8f54f8ef70f 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ConcatenateDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ConcatenateDataset.java @@ -25,7 +25,7 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** * Creates a dataset that concatenates `input_dataset` with `another_dataset`. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/DatasetToSingleElement.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/DatasetToSingleElement.java index d86028f4d15..33cf42b1c7e 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/DatasetToSingleElement.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/DatasetToSingleElement.java @@ -27,7 +27,7 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** * Outputs the single element from the given dataset. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/DenseToSparseBatchDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/DenseToSparseBatchDataset.java index b9ab05b5613..221734344c8 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/DenseToSparseBatchDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/DenseToSparseBatchDataset.java @@ -26,7 +26,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.types.TInt64; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** * Creates a dataset that batches input elements into a SparseTensor. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalAssertNextDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalAssertNextDataset.java index e245bc28621..996cf70481e 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalAssertNextDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalAssertNextDataset.java @@ -26,7 +26,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.types.TString; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** */ diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalCsvDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalCsvDataset.java index 88f2ee3304d..c3f4c8b91d6 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalCsvDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalCsvDataset.java @@ -28,7 +28,7 @@ import org.tensorflow.types.TBool; import org.tensorflow.types.TInt64; import org.tensorflow.types.TString; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** */ diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalDirectedInterleaveDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalDirectedInterleaveDataset.java index 9f762830975..f098fdb12ba 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalDirectedInterleaveDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalDirectedInterleaveDataset.java @@ -26,7 +26,7 @@ import org.tensorflow.op.Operands; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** * A substitute for `InterleaveDataset` on a fixed list of `N` datasets. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalIgnoreErrorsDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalIgnoreErrorsDataset.java index 0ec6cdedd96..a93a95ed047 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalIgnoreErrorsDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalIgnoreErrorsDataset.java @@ -25,7 +25,7 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** * Creates a dataset that contains the elements of `input_dataset` ignoring errors. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalLmdbDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalLmdbDataset.java index 910d10d5ae4..5c7f6d458f8 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalLmdbDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalLmdbDataset.java @@ -26,7 +26,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.types.TString; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** */ diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalNonSerializableDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalNonSerializableDataset.java index 032cd7ca718..777df64b330 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalNonSerializableDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalNonSerializableDataset.java @@ -25,7 +25,7 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** */ diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalSleepDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalSleepDataset.java index 0a141352251..0748201d51d 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalSleepDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalSleepDataset.java @@ -26,7 +26,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.types.TInt64; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** */ diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalThreadPoolDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalThreadPoolDataset.java index efaede5c257..6c7da5c2a7e 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalThreadPoolDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalThreadPoolDataset.java @@ -25,7 +25,7 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** * Creates a dataset that uses a custom thread pool to compute `input_dataset`. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalUniqueDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalUniqueDataset.java index 48dc9bd0b74..1c345e2631c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalUniqueDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalUniqueDataset.java @@ -25,7 +25,7 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** * Creates a dataset that contains the unique elements of `input_dataset`. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/FilterByLastComponentDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/FilterByLastComponentDataset.java index b0578a3c7bc..c2768716342 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/FilterByLastComponentDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/FilterByLastComponentDataset.java @@ -25,7 +25,7 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** * Creates a dataset containing elements of first component of `input_dataset` having true in the last component. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/Iterator.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/Iterator.java index 117c29028ab..905fbe6c8aa 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/Iterator.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/Iterator.java @@ -25,7 +25,7 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** */ diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/IteratorFromStringHandle.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/IteratorFromStringHandle.java index 070ad0928b4..61b27017999 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/IteratorFromStringHandle.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/IteratorFromStringHandle.java @@ -26,7 +26,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.types.TString; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** */ diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/IteratorGetNext.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/IteratorGetNext.java index 62a575dd23c..9299e80ff53 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/IteratorGetNext.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/IteratorGetNext.java @@ -28,7 +28,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** * Gets the next output from the given iterator . diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/IteratorGetNextAsOptional.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/IteratorGetNextAsOptional.java index 5b0f5fdb49f..0092cbc83a2 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/IteratorGetNextAsOptional.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/IteratorGetNextAsOptional.java @@ -26,7 +26,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** * Gets the next output from the given iterator as an Optional variant. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/IteratorGetNextSync.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/IteratorGetNextSync.java index 8df3803c4c2..d79a0a1da44 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/IteratorGetNextSync.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/IteratorGetNextSync.java @@ -28,7 +28,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** * Gets the next output from the given iterator. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/LatencyStatsDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/LatencyStatsDataset.java index 74c7e5398e2..194803d2929 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/LatencyStatsDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/LatencyStatsDataset.java @@ -26,7 +26,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.types.TString; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** * Records the latency of producing `input_dataset` elements in a StatsAggregator. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ModelDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ModelDataset.java index a801a71a736..b6c537e69e6 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ModelDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ModelDataset.java @@ -25,7 +25,7 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** * Identity transformation that models performance. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/MultiDeviceIterator.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/MultiDeviceIterator.java index 4e4062bf88c..248602716ba 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/MultiDeviceIterator.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/MultiDeviceIterator.java @@ -25,7 +25,7 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** * Creates a MultiDeviceIterator resource. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/MultiDeviceIteratorFromStringHandle.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/MultiDeviceIteratorFromStringHandle.java index 19193432f08..e879183bb41 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/MultiDeviceIteratorFromStringHandle.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/MultiDeviceIteratorFromStringHandle.java @@ -26,7 +26,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.types.TString; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** * Generates a MultiDeviceIterator resource from its provided string handle. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/MultiDeviceIteratorGetNextFromShard.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/MultiDeviceIteratorGetNextFromShard.java index b82f9b53ed1..ba3dfea3c97 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/MultiDeviceIteratorGetNextFromShard.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/MultiDeviceIteratorGetNextFromShard.java @@ -29,7 +29,7 @@ import org.tensorflow.op.Scope; import org.tensorflow.types.TInt32; import org.tensorflow.types.TInt64; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** * Gets next element for the provided shard number. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/OptimizeDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/OptimizeDataset.java index 85ecc3ddc2d..712948c8617 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/OptimizeDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/OptimizeDataset.java @@ -26,7 +26,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.types.TString; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** * Creates a dataset by applying optimizations to `input_dataset`. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/OptionalGetValue.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/OptionalGetValue.java index 4b8d8fa54db..4eabb10ea5c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/OptionalGetValue.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/OptionalGetValue.java @@ -28,7 +28,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** * Returns the value stored in an Optional variant or raises an error if none exists. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/PaddedBatchDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/PaddedBatchDataset.java index 2d485265c0d..fd0983d885e 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/PaddedBatchDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/PaddedBatchDataset.java @@ -27,7 +27,7 @@ import org.tensorflow.op.Scope; import org.tensorflow.types.TBool; import org.tensorflow.types.TInt64; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** * Creates a dataset that batches and pads `batch_size` elements from the input. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ParseExampleDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ParseExampleDataset.java index 5d5af626330..66fdf4e3698 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ParseExampleDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ParseExampleDataset.java @@ -27,7 +27,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.types.TInt64; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** * Transforms `input_dataset` containing `Example` protos as vectors of DT_STRING into a dataset of `Tensor` or `SparseTensor` objects representing the parsed features. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/PrefetchDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/PrefetchDataset.java index a0edae8b736..b287fef5742 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/PrefetchDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/PrefetchDataset.java @@ -26,7 +26,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.types.TInt64; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** * Creates a dataset that asynchronously prefetches elements from `input_dataset`. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/RandomDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/RandomDataset.java index 63f5a0b74e8..1a729542cb8 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/RandomDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/RandomDataset.java @@ -26,7 +26,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.types.TInt64; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** * Creates a Dataset that returns pseudorandom numbers. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/RangeDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/RangeDataset.java index b8faf8e0081..b56444e780e 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/RangeDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/RangeDataset.java @@ -26,7 +26,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.types.TInt64; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** * Creates a dataset with a range of values. Corresponds to python's xrange. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/RepeatDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/RepeatDataset.java index 2bee1fdc7b6..08d46244ff0 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/RepeatDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/RepeatDataset.java @@ -26,7 +26,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.types.TInt64; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** * Creates a dataset that emits the outputs of `input_dataset` `count` times. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/SetStatsAggregatorDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/SetStatsAggregatorDataset.java index 47f07a5c993..2c1a36baa60 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/SetStatsAggregatorDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/SetStatsAggregatorDataset.java @@ -26,7 +26,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.types.TString; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** */ diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ShuffleAndRepeatDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ShuffleAndRepeatDataset.java index e448b75bb7b..c22c3f3f2b5 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ShuffleAndRepeatDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ShuffleAndRepeatDataset.java @@ -26,7 +26,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.types.TInt64; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** * Creates a dataset that shuffles and repeats elements from `input_dataset` diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ShuffleDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ShuffleDataset.java index e5505b9d375..68dfe51615e 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ShuffleDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ShuffleDataset.java @@ -26,7 +26,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.types.TInt64; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** * Creates a dataset that shuffles elements from `input_dataset` pseudorandomly. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/SkipDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/SkipDataset.java index 78935b9571e..f24988f8326 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/SkipDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/SkipDataset.java @@ -26,7 +26,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.types.TInt64; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** * Creates a dataset that skips `count` elements from the `input_dataset`. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/SqlDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/SqlDataset.java index d9dcba1cfc5..07078fa4c2e 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/SqlDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/SqlDataset.java @@ -26,7 +26,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.types.TString; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** * Creates a dataset that executes a SQL query and emits rows of the result set. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/TakeDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/TakeDataset.java index ab0eb65ad12..7b2cd078690 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/TakeDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/TakeDataset.java @@ -26,7 +26,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.types.TInt64; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** * Creates a dataset that contains `count` elements from the `input_dataset`. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/TensorDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/TensorDataset.java index 3a8dd17f143..862731cfe50 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/TensorDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/TensorDataset.java @@ -25,7 +25,7 @@ import org.tensorflow.op.Operands; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** * Creates a dataset that emits `components` as a tuple of tensors once. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/TensorSliceDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/TensorSliceDataset.java index c9f941e3f17..5c193addc0c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/TensorSliceDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/TensorSliceDataset.java @@ -25,7 +25,7 @@ import org.tensorflow.op.Operands; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** * Creates a dataset that emits each dim-0 slice of `components` once. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/UnbatchDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/UnbatchDataset.java index 455bfd49525..5618961abcc 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/UnbatchDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/UnbatchDataset.java @@ -25,7 +25,7 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** * A dataset that splits the elements of its input into multiple elements. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/WindowDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/WindowDataset.java index 78d97840a15..2180da993f0 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/WindowDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/WindowDataset.java @@ -27,7 +27,7 @@ import org.tensorflow.op.Scope; import org.tensorflow.types.TBool; import org.tensorflow.types.TInt64; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** * A dataset that creates window datasets from the input dataset. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ZipDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ZipDataset.java index 66aa0769eef..6e8b003c540 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ZipDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ZipDataset.java @@ -26,7 +26,7 @@ import org.tensorflow.op.Operands; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** * Creates a dataset that zips together `input_datasets`. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/FifoQueue.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/FifoQueue.java index 5f437b0844c..e5b432776c3 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/FifoQueue.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/FifoQueue.java @@ -26,7 +26,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** * A queue that produces elements in first-in first-out order. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/PaddingFifoQueue.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/PaddingFifoQueue.java index 3b32788cd1e..4c7be6599ae 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/PaddingFifoQueue.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/PaddingFifoQueue.java @@ -26,7 +26,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** * A queue that produces elements in first-in first-out order. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ParseExample.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ParseExample.java index 4067039626f..ab1be51b8e1 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ParseExample.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ParseExample.java @@ -30,7 +30,7 @@ import org.tensorflow.op.annotation.Operator; import org.tensorflow.types.TInt64; import org.tensorflow.types.TString; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** * Transforms a vector of brain.Example protos (as strings) into typed tensors. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ParseSequenceExample.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ParseSequenceExample.java index ef6e05e84a4..807142d8f8d 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ParseSequenceExample.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ParseSequenceExample.java @@ -30,7 +30,7 @@ import org.tensorflow.op.annotation.Operator; import org.tensorflow.types.TInt64; import org.tensorflow.types.TString; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** * Transforms a vector of brain.SequenceExample protos (as strings) into typed tensors. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ParseSingleExample.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ParseSingleExample.java index 4962fdfe715..57863920e6d 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ParseSingleExample.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ParseSingleExample.java @@ -30,7 +30,7 @@ import org.tensorflow.op.annotation.Operator; import org.tensorflow.types.TInt64; import org.tensorflow.types.TString; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** * Transforms a tf.Example proto (as a string) into typed tensors. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ParseSingleSequenceExample.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ParseSingleSequenceExample.java index 19bf2e7301c..9e9ce3d9fac 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ParseSingleSequenceExample.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ParseSingleSequenceExample.java @@ -30,7 +30,7 @@ import org.tensorflow.op.annotation.Operator; import org.tensorflow.types.TInt64; import org.tensorflow.types.TString; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** * Transforms a scalar brain.SequenceExample proto (as strings) into typed tensors. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/PriorityQueue.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/PriorityQueue.java index d2f6c5ffeb2..c681a506b7d 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/PriorityQueue.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/PriorityQueue.java @@ -26,7 +26,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** * A queue that produces elements sorted by the first component value. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/RandomShuffleQueue.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/RandomShuffleQueue.java index 9f8935cdfd5..fd301e499d1 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/RandomShuffleQueue.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/RandomShuffleQueue.java @@ -26,7 +26,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** * A queue that randomizes the order of elements. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/AccumulateN.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/AccumulateN.java index 250071c9aed..96c84f7e997 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/AccumulateN.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/AccumulateN.java @@ -25,7 +25,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** * Returns the element-wise sum of a list of tensors. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseConditionalAccumulator.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseConditionalAccumulator.java index df0530e1ef6..2700581b906 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseConditionalAccumulator.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseConditionalAccumulator.java @@ -26,7 +26,7 @@ import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; import org.tensorflow.types.TString; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** * A conditional accumulator for aggregating sparse gradients. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ConditionalAccumulator.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ConditionalAccumulator.java index bb385369b6a..c8c2f845380 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ConditionalAccumulator.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ConditionalAccumulator.java @@ -26,7 +26,7 @@ import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; import org.tensorflow.types.TString; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** * A conditional accumulator for aggregating gradients. diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/AbstractOperation.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/AbstractOperation.java index 526803fcb18..4569e22ddcc 100644 --- a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/AbstractOperation.java +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/AbstractOperation.java @@ -15,7 +15,7 @@ package org.tensorflow; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** * Base class for {@link Operation} implementations. diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/DataType.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/DataType.java index a0aefc785e6..7947096a4c0 100644 --- a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/DataType.java +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/DataType.java @@ -16,7 +16,7 @@ package org.tensorflow; import org.tensorflow.internal.c_api.TF_Tensor; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** Represents a type of elements in a {@link Tensor} */ public final class DataType { diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/EagerOperation.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/EagerOperation.java index 10943562de2..29ef3da1afa 100644 --- a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/EagerOperation.java +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/EagerOperation.java @@ -16,7 +16,7 @@ package org.tensorflow; import java.util.concurrent.atomic.AtomicReferenceArray; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** * Implementation of an {@link Operation} executed eagerly. diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/EagerOperationBuilder.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/EagerOperationBuilder.java index 8d2e9faab3b..d8cd3612dad 100644 --- a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/EagerOperationBuilder.java +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/EagerOperationBuilder.java @@ -17,7 +17,7 @@ import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** * An {@link OperationBuilder} for building {@link Operation Operations} that are executed eagerly. diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/GraphOperation.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/GraphOperation.java index 1ea6f3ffa1b..13131566952 100644 --- a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/GraphOperation.java +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/GraphOperation.java @@ -15,7 +15,7 @@ package org.tensorflow; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** * Implementation for an {@link Operation} added as a node to a {@link Graph}. diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/GraphOperationBuilder.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/GraphOperationBuilder.java index 515fc6faec2..de1c4065d18 100644 --- a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/GraphOperationBuilder.java +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/GraphOperationBuilder.java @@ -16,7 +16,7 @@ package org.tensorflow; import java.nio.charset.Charset; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** An {@link OperationBuilder} for adding {@link GraphOperation}s to a {@link Graph}. */ public final class GraphOperationBuilder implements OperationBuilder { diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/OperationBuilder.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/OperationBuilder.java index 1630c58c352..266e734f378 100644 --- a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/OperationBuilder.java +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/OperationBuilder.java @@ -15,7 +15,7 @@ package org.tensorflow; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** * A builder for {@link Operation}s. diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/Output.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/Output.java index 3c27bf3faaa..2303053c553 100644 --- a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/Output.java +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/Output.java @@ -16,7 +16,7 @@ package org.tensorflow; import java.util.Objects; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** * A symbolic handle to a tensor produced by an {@link Operation}. diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/Tensor.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/Tensor.java index 0b78d20db63..f0cbcf51568 100644 --- a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/Tensor.java +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/Tensor.java @@ -27,7 +27,7 @@ import java.util.Arrays; import java.util.HashMap; import org.tensorflow.internal.c_api.TF_Tensor; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; import org.tensorflow.types.TBool; import org.tensorflow.types.TDouble; import org.tensorflow.types.TFloat; diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TBool.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TBool.java index b1ccfe23351..dabf9cf3f57 100644 --- a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TBool.java +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TBool.java @@ -10,7 +10,7 @@ import org.tensorflow.util.buffer.adapter.BooleanDataAdapter; import org.tensorflow.util.ndarray.BooleanNdArray; import org.tensorflow.util.ndarray.NdArray; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; import org.tensorflow.util.ndarray.impl.dense.BooleanDenseNdArray; import org.tensorflow.types.family.TType; diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TDouble.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TDouble.java index aeb790427c0..87eba65535d 100644 --- a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TDouble.java +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TDouble.java @@ -7,7 +7,7 @@ import org.tensorflow.util.buffer.DoubleDataBuffer; import org.tensorflow.util.ndarray.DoubleNdArray; import org.tensorflow.util.ndarray.NdArray; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; import org.tensorflow.util.ndarray.impl.dense.DoubleDenseNdArray; import org.tensorflow.types.family.TDecimal; diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TFloat.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TFloat.java index d11a02a92ac..12c5e7172ab 100644 --- a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TFloat.java +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TFloat.java @@ -7,7 +7,7 @@ import org.tensorflow.util.buffer.FloatDataBuffer; import org.tensorflow.util.ndarray.FloatNdArray; import org.tensorflow.util.ndarray.NdArray; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; import org.tensorflow.util.ndarray.impl.dense.FloatDenseNdArray; import org.tensorflow.types.family.TDecimal; diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TInt32.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TInt32.java index d6826f9c4e0..16e08f39181 100644 --- a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TInt32.java +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TInt32.java @@ -7,7 +7,7 @@ import org.tensorflow.util.buffer.IntDataBuffer; import org.tensorflow.util.ndarray.IntNdArray; import org.tensorflow.util.ndarray.NdArray; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; import org.tensorflow.util.ndarray.impl.dense.IntDenseNdArray; import org.tensorflow.types.family.TNumber; diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TInt64.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TInt64.java index 54f13c37c3f..7eb6e118df8 100644 --- a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TInt64.java +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TInt64.java @@ -7,7 +7,7 @@ import org.tensorflow.util.buffer.LongDataBuffer; import org.tensorflow.util.ndarray.LongNdArray; import org.tensorflow.util.ndarray.NdArray; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; import org.tensorflow.util.ndarray.impl.dense.LongDenseNdArray; import org.tensorflow.types.family.TNumber; diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TString.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TString.java index 8ed556ffd89..f24227ab32d 100644 --- a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TString.java +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TString.java @@ -10,7 +10,7 @@ import org.tensorflow.util.buffer.DataBuffer; import org.tensorflow.util.ndarray.NdArray; import org.tensorflow.util.ndarray.NdArrays; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; import org.tensorflow.util.ndarray.impl.dense.DenseNdArray; import org.tensorflow.types.family.TType; diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TUInt8.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TUInt8.java index 109c8a525e6..e8913fd461f 100644 --- a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TUInt8.java +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TUInt8.java @@ -7,7 +7,7 @@ import org.tensorflow.util.buffer.ByteDataBuffer; import org.tensorflow.util.ndarray.ByteNdArray; import org.tensorflow.util.ndarray.NdArray; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; import org.tensorflow.util.ndarray.impl.dense.ByteDenseNdArray; import org.tensorflow.types.family.TNumber; diff --git a/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/EagerOperationBuilderTest.java b/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/EagerOperationBuilderTest.java index 84750daef54..11a01ff2bd9 100644 --- a/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/EagerOperationBuilderTest.java +++ b/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/EagerOperationBuilderTest.java @@ -20,7 +20,7 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; import org.tensorflow.types.TFloat; import org.tensorflow.types.TInt32; diff --git a/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/GraphOperationBuilderTest.java b/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/GraphOperationBuilderTest.java index 14ff93127d2..a066f3770c9 100644 --- a/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/GraphOperationBuilderTest.java +++ b/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/GraphOperationBuilderTest.java @@ -23,7 +23,7 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; import org.tensorflow.types.TBool; import org.tensorflow.types.TFloat; import org.tensorflow.types.TInt32; diff --git a/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/op/core/GeneratedOperationsTest.java b/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/op/core/GeneratedOperationsTest.java index eea04e15032..ac80f3b6f7f 100644 --- a/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/op/core/GeneratedOperationsTest.java +++ b/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/op/core/GeneratedOperationsTest.java @@ -25,7 +25,7 @@ import org.tensorflow.Operand; import org.tensorflow.Session; import org.tensorflow.Tensor; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; import org.tensorflow.op.Ops; import org.tensorflow.types.TInt32; diff --git a/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/types/NumericTypesTestBase.java b/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/types/NumericTypesTestBase.java index 0f76e78ccf1..a1930d1a217 100644 --- a/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/types/NumericTypesTestBase.java +++ b/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/types/NumericTypesTestBase.java @@ -8,7 +8,7 @@ import org.tensorflow.util.ndarray.IntNdArray; import org.tensorflow.util.ndarray.NdArray; import org.tensorflow.util.ndarray.NdArrays; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; import org.tensorflow.util.ndarray.index.Indices; import org.tensorflow.op.Ops; import org.tensorflow.op.core.Constant; diff --git a/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/types/TDoubleTest.java b/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/types/TDoubleTest.java index bc3882a31a6..ebb7ca3a325 100644 --- a/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/types/TDoubleTest.java +++ b/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/types/TDoubleTest.java @@ -1,7 +1,7 @@ package org.tensorflow.types; import org.tensorflow.Tensor; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; public class TDoubleTest extends NumericTypesTestBase { diff --git a/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/types/TFloatTest.java b/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/types/TFloatTest.java index 9932b485999..69f44795749 100644 --- a/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/types/TFloatTest.java +++ b/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/types/TFloatTest.java @@ -1,7 +1,7 @@ package org.tensorflow.types; import org.tensorflow.Tensor; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; public class TFloatTest extends NumericTypesTestBase { diff --git a/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/types/TInt32Test.java b/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/types/TInt32Test.java index 2529ed12242..b4c06737123 100644 --- a/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/types/TInt32Test.java +++ b/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/types/TInt32Test.java @@ -1,7 +1,7 @@ package org.tensorflow.types; import org.tensorflow.Tensor; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; public class TInt32Test extends NumericTypesTestBase { diff --git a/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/types/TInt64Test.java b/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/types/TInt64Test.java index 77d528bb635..b19348b7893 100644 --- a/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/types/TInt64Test.java +++ b/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/types/TInt64Test.java @@ -1,7 +1,7 @@ package org.tensorflow.types; import org.tensorflow.Tensor; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; public class TInt64Test extends NumericTypesTestBase { diff --git a/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/types/TUInt8Test.java b/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/types/TUInt8Test.java index 5f8959c7b68..e2b4822f59d 100644 --- a/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/types/TUInt8Test.java +++ b/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/types/TUInt8Test.java @@ -1,7 +1,7 @@ package org.tensorflow.types; import org.tensorflow.Tensor; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; public class TUInt8Test extends NumericTypesTestBase { diff --git a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/Shape.java b/tensorflow-utils/src/main/java/org/tensorflow/util/Shape.java similarity index 97% rename from tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/Shape.java rename to tensorflow-utils/src/main/java/org/tensorflow/util/Shape.java index bf8c4c6bd86..e0c5d3f09ba 100644 --- a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/Shape.java +++ b/tensorflow-utils/src/main/java/org/tensorflow/util/Shape.java @@ -15,11 +15,10 @@ ======================================================================= */ -package org.tensorflow.util.ndarray; +package org.tensorflow.util; import java.util.Arrays; -/** The possibly partially known shape of a tensor produced by an operation. */ public final class Shape { public static long UNKNOWN_SIZE = -1L; diff --git a/tensorflow-utils/src/main/java/org/tensorflow/util/StaticApi.java b/tensorflow-utils/src/main/java/org/tensorflow/util/StaticApi.java index 6a6ec630fea..5710ee4b278 100644 --- a/tensorflow-utils/src/main/java/org/tensorflow/util/StaticApi.java +++ b/tensorflow-utils/src/main/java/org/tensorflow/util/StaticApi.java @@ -18,7 +18,6 @@ import org.tensorflow.util.ndarray.LongNdArray; import org.tensorflow.util.ndarray.NdArray; import org.tensorflow.util.ndarray.NdArrays; -import org.tensorflow.util.ndarray.Shape; import org.tensorflow.util.ndarray.ShortNdArray; import org.tensorflow.util.ndarray.index.Index; import org.tensorflow.util.ndarray.index.Indices; diff --git a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/NdArray.java b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/NdArray.java index fe2be61baae..947a02fe097 100644 --- a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/NdArray.java +++ b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/NdArray.java @@ -18,6 +18,7 @@ import java.util.function.BiConsumer; import java.util.function.Consumer; +import org.tensorflow.util.Shape; import org.tensorflow.util.buffer.DataBuffer; import org.tensorflow.util.ndarray.index.Index; diff --git a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/NdArrays.java b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/NdArrays.java index ca4b3edd783..862a0d8b88c 100644 --- a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/NdArrays.java +++ b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/NdArrays.java @@ -16,6 +16,7 @@ */ package org.tensorflow.util.ndarray; +import org.tensorflow.util.Shape; import org.tensorflow.util.buffer.BooleanDataBuffer; import org.tensorflow.util.buffer.ByteDataBuffer; import org.tensorflow.util.buffer.DataBuffer; diff --git a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/AbstractNdArray.java b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/AbstractNdArray.java index c777276c2e0..6b7918ce99d 100644 --- a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/AbstractNdArray.java +++ b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/AbstractNdArray.java @@ -20,7 +20,7 @@ import org.tensorflow.util.ndarray.impl.sequence.ElementSequence; import org.tensorflow.util.buffer.DataBuffers; import org.tensorflow.util.ndarray.NdArray; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; import org.tensorflow.util.ndarray.impl.dimension.DimensionalSpace; @SuppressWarnings("unchecked") diff --git a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dense/BooleanDenseNdArray.java b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dense/BooleanDenseNdArray.java index 3f5dc1bdc59..98e3911ebbd 100644 --- a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dense/BooleanDenseNdArray.java +++ b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dense/BooleanDenseNdArray.java @@ -21,7 +21,7 @@ import org.tensorflow.util.buffer.DataBuffers; import org.tensorflow.util.ndarray.BooleanNdArray; import org.tensorflow.util.ndarray.NdArray; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; import org.tensorflow.util.ndarray.impl.dimension.DimensionalSpace; public class BooleanDenseNdArray extends AbstractDenseNdArray diff --git a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dense/ByteDenseNdArray.java b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dense/ByteDenseNdArray.java index fd5b42f95d1..fb00553a7ac 100644 --- a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dense/ByteDenseNdArray.java +++ b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dense/ByteDenseNdArray.java @@ -21,7 +21,7 @@ import org.tensorflow.util.buffer.DataBuffers; import org.tensorflow.util.ndarray.ByteNdArray; import org.tensorflow.util.ndarray.NdArray; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; import org.tensorflow.util.ndarray.impl.dimension.DimensionalSpace; public class ByteDenseNdArray extends AbstractDenseNdArray diff --git a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dense/DenseNdArray.java b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dense/DenseNdArray.java index e8b168e759a..3616f9fafeb 100644 --- a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dense/DenseNdArray.java +++ b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dense/DenseNdArray.java @@ -18,7 +18,7 @@ import org.tensorflow.util.buffer.DataBuffer; import org.tensorflow.util.ndarray.NdArray; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; import org.tensorflow.util.ndarray.impl.dimension.DimensionalSpace; public class DenseNdArray extends AbstractDenseNdArray> { diff --git a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dense/DoubleDenseNdArray.java b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dense/DoubleDenseNdArray.java index b0d230c9ebb..02a3f25c85a 100644 --- a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dense/DoubleDenseNdArray.java +++ b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dense/DoubleDenseNdArray.java @@ -21,7 +21,7 @@ import org.tensorflow.util.buffer.DoubleDataBuffer; import org.tensorflow.util.ndarray.DoubleNdArray; import org.tensorflow.util.ndarray.NdArray; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; import org.tensorflow.util.ndarray.impl.dimension.DimensionalSpace; public class DoubleDenseNdArray extends AbstractDenseNdArray diff --git a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dense/FloatDenseNdArray.java b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dense/FloatDenseNdArray.java index d793e607ec7..72aa2460391 100644 --- a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dense/FloatDenseNdArray.java +++ b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dense/FloatDenseNdArray.java @@ -21,7 +21,7 @@ import org.tensorflow.util.buffer.FloatDataBuffer; import org.tensorflow.util.ndarray.FloatNdArray; import org.tensorflow.util.ndarray.NdArray; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; import org.tensorflow.util.ndarray.impl.dimension.DimensionalSpace; public class FloatDenseNdArray extends AbstractDenseNdArray diff --git a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dense/IntDenseNdArray.java b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dense/IntDenseNdArray.java index 570a3744d0a..bfedfaf071d 100644 --- a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dense/IntDenseNdArray.java +++ b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dense/IntDenseNdArray.java @@ -21,7 +21,7 @@ import org.tensorflow.util.buffer.IntDataBuffer; import org.tensorflow.util.ndarray.IntNdArray; import org.tensorflow.util.ndarray.NdArray; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; import org.tensorflow.util.ndarray.impl.dimension.DimensionalSpace; public class IntDenseNdArray extends AbstractDenseNdArray diff --git a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dense/LongDenseNdArray.java b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dense/LongDenseNdArray.java index 1f78e86b7a3..bdbdcead4d5 100644 --- a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dense/LongDenseNdArray.java +++ b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dense/LongDenseNdArray.java @@ -21,7 +21,7 @@ import org.tensorflow.util.buffer.LongDataBuffer; import org.tensorflow.util.ndarray.LongNdArray; import org.tensorflow.util.ndarray.NdArray; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; import org.tensorflow.util.ndarray.impl.dimension.DimensionalSpace; public class LongDenseNdArray extends AbstractDenseNdArray diff --git a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dense/ShortDenseNdArray.java b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dense/ShortDenseNdArray.java index b93cddc437a..ec3af6a0819 100644 --- a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dense/ShortDenseNdArray.java +++ b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dense/ShortDenseNdArray.java @@ -20,7 +20,7 @@ import org.tensorflow.util.buffer.DataBuffers; import org.tensorflow.util.buffer.ShortDataBuffer; import org.tensorflow.util.ndarray.NdArray; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; import org.tensorflow.util.ndarray.impl.dimension.DimensionalSpace; import org.tensorflow.util.ndarray.ShortNdArray; diff --git a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dense/Validator.java b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dense/Validator.java index b44142b88ad..41074ef7508 100644 --- a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dense/Validator.java +++ b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dense/Validator.java @@ -17,7 +17,7 @@ package org.tensorflow.util.ndarray.impl.dense; import org.tensorflow.util.buffer.DataBuffer; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; final class Validator extends org.tensorflow.util.ndarray.impl.Validator { diff --git a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dimension/DimensionalSpace.java b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dimension/DimensionalSpace.java index 6b8e3faf7e5..09010832fcf 100644 --- a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dimension/DimensionalSpace.java +++ b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dimension/DimensionalSpace.java @@ -18,7 +18,7 @@ package org.tensorflow.util.ndarray.impl.dimension; import java.util.Arrays; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; import org.tensorflow.util.ndarray.index.Index; public class DimensionalSpace { diff --git a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dimension/UnknownDimension.java b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dimension/UnknownDimension.java index 7dfc1d6f8b1..af8102cd9c7 100644 --- a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dimension/UnknownDimension.java +++ b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dimension/UnknownDimension.java @@ -16,7 +16,7 @@ */ package org.tensorflow.util.ndarray.impl.dimension; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; final class UnknownDimension extends AbstractDimension { diff --git a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/index/Indices.java b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/index/Indices.java index 2996af924e2..e7fe5b5ecf0 100644 --- a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/index/Indices.java +++ b/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/index/Indices.java @@ -20,7 +20,7 @@ import org.tensorflow.util.ndarray.IllegalRankException; import org.tensorflow.util.ndarray.NdArray; import org.tensorflow.util.ndarray.NdArrays; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; /** * Helper class for instantiating {@link Index} objects. diff --git a/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/ShapeTest.java b/tensorflow-utils/src/test/java/org/tensorflow/util/ShapeTest.java similarity index 97% rename from tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/ShapeTest.java rename to tensorflow-utils/src/test/java/org/tensorflow/util/ShapeTest.java index d84ddf042c2..be80e4cc9e7 100644 --- a/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/ShapeTest.java +++ b/tensorflow-utils/src/test/java/org/tensorflow/util/ShapeTest.java @@ -14,7 +14,7 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.util.ndarray; +package org.tensorflow.util; import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertEquals; @@ -22,6 +22,7 @@ import static org.junit.Assert.fail; import org.junit.Test; +import org.tensorflow.util.Shape; public class ShapeTest { diff --git a/tensorflow-utils/src/test/java/org/tensorflow/util/benchmark/NdArrayBenchmark.java b/tensorflow-utils/src/test/java/org/tensorflow/util/benchmark/NdArrayBenchmark.java index 54734d967db..12e5b66c2c5 100644 --- a/tensorflow-utils/src/test/java/org/tensorflow/util/benchmark/NdArrayBenchmark.java +++ b/tensorflow-utils/src/test/java/org/tensorflow/util/benchmark/NdArrayBenchmark.java @@ -35,7 +35,7 @@ import org.openjdk.jmh.runner.RunnerException; import org.tensorflow.util.ndarray.FloatNdArray; import org.tensorflow.util.ndarray.NdArrays; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; @Fork(value = 1, jvmArgs = {"-Xms4G", "-Xmx4G"}) @BenchmarkMode(Mode.AverageTime) diff --git a/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/BooleanNdArrayTestBase.java b/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/BooleanNdArrayTestBase.java index bed57c09601..963b7679cd2 100644 --- a/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/BooleanNdArrayTestBase.java +++ b/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/BooleanNdArrayTestBase.java @@ -24,6 +24,7 @@ import java.nio.BufferOverflowException; import java.nio.BufferUnderflowException; import org.junit.Test; +import org.tensorflow.util.Shape; public abstract class BooleanNdArrayTestBase extends NdArrayTestBase { diff --git a/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/ByteNdArrayTestBase.java b/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/ByteNdArrayTestBase.java index 9c756bfd945..46802c75cf5 100644 --- a/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/ByteNdArrayTestBase.java +++ b/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/ByteNdArrayTestBase.java @@ -23,6 +23,7 @@ import java.nio.BufferOverflowException; import java.nio.BufferUnderflowException; import org.junit.Test; +import org.tensorflow.util.Shape; public abstract class ByteNdArrayTestBase extends NdArrayTestBase { diff --git a/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/DoubleNdArrayTestBase.java b/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/DoubleNdArrayTestBase.java index f7d9e556712..812facdf2e0 100644 --- a/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/DoubleNdArrayTestBase.java +++ b/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/DoubleNdArrayTestBase.java @@ -23,6 +23,7 @@ import java.nio.BufferOverflowException; import java.nio.BufferUnderflowException; import org.junit.Test; +import org.tensorflow.util.Shape; public abstract class DoubleNdArrayTestBase extends NdArrayTestBase { diff --git a/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/FloatNdArrayTestBase.java b/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/FloatNdArrayTestBase.java index fcc5fd5b3cb..22d7537f8be 100644 --- a/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/FloatNdArrayTestBase.java +++ b/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/FloatNdArrayTestBase.java @@ -23,6 +23,7 @@ import java.nio.BufferOverflowException; import java.nio.BufferUnderflowException; import org.junit.Test; +import org.tensorflow.util.Shape; public abstract class FloatNdArrayTestBase extends NdArrayTestBase { diff --git a/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/IntNdArrayTestBase.java b/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/IntNdArrayTestBase.java index 547e0b2505c..95b05d31b19 100644 --- a/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/IntNdArrayTestBase.java +++ b/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/IntNdArrayTestBase.java @@ -23,6 +23,7 @@ import java.nio.BufferOverflowException; import java.nio.BufferUnderflowException; import org.junit.Test; +import org.tensorflow.util.Shape; public abstract class IntNdArrayTestBase extends NdArrayTestBase { diff --git a/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/LongNdArrayTestBase.java b/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/LongNdArrayTestBase.java index d2841d5dce0..0bf8801553d 100644 --- a/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/LongNdArrayTestBase.java +++ b/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/LongNdArrayTestBase.java @@ -22,6 +22,7 @@ import java.nio.BufferOverflowException; import java.nio.BufferUnderflowException; import org.junit.Test; +import org.tensorflow.util.Shape; public abstract class LongNdArrayTestBase extends NdArrayTestBase { diff --git a/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/NdArrayTestBase.java b/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/NdArrayTestBase.java index f275053e74a..89baf6cbb4b 100644 --- a/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/NdArrayTestBase.java +++ b/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/NdArrayTestBase.java @@ -35,6 +35,7 @@ import java.util.concurrent.atomic.AtomicLong; import java.util.stream.LongStream; import org.junit.Test; +import org.tensorflow.util.Shape; import org.tensorflow.util.buffer.DataBuffer; public abstract class NdArrayTestBase { diff --git a/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/ShortNdArrayTestBase.java b/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/ShortNdArrayTestBase.java index ea0982b0363..43ad42dfcb1 100644 --- a/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/ShortNdArrayTestBase.java +++ b/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/ShortNdArrayTestBase.java @@ -23,6 +23,7 @@ import java.nio.BufferOverflowException; import java.nio.BufferUnderflowException; import org.junit.Test; +import org.tensorflow.util.Shape; public abstract class ShortNdArrayTestBase extends NdArrayTestBase { diff --git a/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/impl/dense/BooleanDenseNdArrayTest.java b/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/impl/dense/BooleanDenseNdArrayTest.java index d1e07e75e65..3ef5f06db25 100644 --- a/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/impl/dense/BooleanDenseNdArrayTest.java +++ b/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/impl/dense/BooleanDenseNdArrayTest.java @@ -21,7 +21,7 @@ import org.tensorflow.util.buffer.DataBuffers; import org.tensorflow.util.ndarray.BooleanNdArray; import org.tensorflow.util.ndarray.NdArrays; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; public class BooleanDenseNdArrayTest extends BooleanNdArrayTestBase { diff --git a/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/impl/dense/ByteDenseNdArrayTest.java b/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/impl/dense/ByteDenseNdArrayTest.java index 03b04458cf9..ebb5d009930 100644 --- a/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/impl/dense/ByteDenseNdArrayTest.java +++ b/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/impl/dense/ByteDenseNdArrayTest.java @@ -21,7 +21,7 @@ import org.tensorflow.util.buffer.DataBuffers; import org.tensorflow.util.ndarray.ByteNdArray; import org.tensorflow.util.ndarray.NdArrays; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; public class ByteDenseNdArrayTest extends ByteNdArrayTestBase { diff --git a/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/impl/dense/DoubleDenseNdArrayTest.java b/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/impl/dense/DoubleDenseNdArrayTest.java index e9189c8f7a2..1270e53d5e7 100644 --- a/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/impl/dense/DoubleDenseNdArrayTest.java +++ b/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/impl/dense/DoubleDenseNdArrayTest.java @@ -21,7 +21,7 @@ import org.tensorflow.util.buffer.DataBuffers; import org.tensorflow.util.ndarray.DoubleNdArray; import org.tensorflow.util.ndarray.NdArrays; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; public class DoubleDenseNdArrayTest extends DoubleNdArrayTestBase { diff --git a/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/impl/dense/FloatDenseNdArrayTest.java b/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/impl/dense/FloatDenseNdArrayTest.java index ef9db717123..14a40f6e1b2 100644 --- a/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/impl/dense/FloatDenseNdArrayTest.java +++ b/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/impl/dense/FloatDenseNdArrayTest.java @@ -21,7 +21,7 @@ import org.tensorflow.util.buffer.DataBuffers; import org.tensorflow.util.ndarray.FloatNdArray; import org.tensorflow.util.ndarray.NdArrays; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; public class FloatDenseNdArrayTest extends FloatNdArrayTestBase { diff --git a/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/impl/dense/IntDenseNdArrayTest.java b/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/impl/dense/IntDenseNdArrayTest.java index c67907979fe..60379f0adee 100644 --- a/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/impl/dense/IntDenseNdArrayTest.java +++ b/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/impl/dense/IntDenseNdArrayTest.java @@ -21,7 +21,7 @@ import org.tensorflow.util.buffer.DataBuffers; import org.tensorflow.util.ndarray.IntNdArray; import org.tensorflow.util.ndarray.NdArrays; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; public class IntDenseNdArrayTest extends IntNdArrayTestBase { diff --git a/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/impl/dense/LongDenseNdArrayTest.java b/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/impl/dense/LongDenseNdArrayTest.java index 5eee4fafbaa..3e4c2c74f14 100644 --- a/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/impl/dense/LongDenseNdArrayTest.java +++ b/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/impl/dense/LongDenseNdArrayTest.java @@ -21,7 +21,7 @@ import org.tensorflow.util.ndarray.LongNdArray; import org.tensorflow.util.ndarray.LongNdArrayTestBase; import org.tensorflow.util.ndarray.NdArrays; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; public class LongDenseNdArrayTest extends LongNdArrayTestBase { diff --git a/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/impl/dense/ShortDenseNdArrayTest.java b/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/impl/dense/ShortDenseNdArrayTest.java index a019fa7c59e..49ae7f5306d 100644 --- a/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/impl/dense/ShortDenseNdArrayTest.java +++ b/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/impl/dense/ShortDenseNdArrayTest.java @@ -19,7 +19,7 @@ import org.tensorflow.util.buffer.DataBuffer; import org.tensorflow.util.buffer.DataBuffers; import org.tensorflow.util.ndarray.NdArrays; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; import org.tensorflow.util.ndarray.ShortNdArray; import org.tensorflow.util.ndarray.ShortNdArrayTestBase; diff --git a/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/impl/dense/StringDenseNdArrayTest.java b/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/impl/dense/StringDenseNdArrayTest.java index e441c1fe3d5..08b169a7ab5 100644 --- a/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/impl/dense/StringDenseNdArrayTest.java +++ b/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/impl/dense/StringDenseNdArrayTest.java @@ -21,7 +21,7 @@ import org.tensorflow.util.ndarray.NdArray; import org.tensorflow.util.ndarray.NdArrayTestBase; import org.tensorflow.util.ndarray.NdArrays; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; public class StringDenseNdArrayTest extends NdArrayTestBase { diff --git a/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/impl/sequence/ElementSequenceTest.java b/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/impl/sequence/ElementSequenceTest.java index b52be3181cb..d748dfa4b7b 100644 --- a/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/impl/sequence/ElementSequenceTest.java +++ b/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/impl/sequence/ElementSequenceTest.java @@ -10,7 +10,7 @@ import org.tensorflow.util.ndarray.IntNdArray; import org.tensorflow.util.ndarray.NdArraySequence; import org.tensorflow.util.ndarray.NdArrays; -import org.tensorflow.util.ndarray.Shape; +import org.tensorflow.util.Shape; import org.tensorflow.util.ndarray.impl.AbstractNdArray; public class ElementSequenceTest { From 0828ca6d27dcc854c18f74453acb76c5ab3a36cc Mon Sep 17 00:00:00 2001 From: Karl Lessard Date: Mon, 9 Dec 2019 10:13:10 -0500 Subject: [PATCH 5/8] Rename utils to tools --- pom.xml | 2 +- tensorflow-core/tensorflow-core-api/pom.xml | 2 +- .../src/bazel/op_generator/op_specs.cc | 2 +- .../org/tensorflow/op/DataOps.java | 96 ++++----- .../annotations/org/tensorflow/op/IoOps.java | 106 +++++----- .../org/tensorflow/op/MathOps.java | 26 +-- .../annotations/org/tensorflow/op/Ops.java | 188 +++++++++--------- .../org/tensorflow/op/SparseOps.java | 30 +-- .../org/tensorflow/op/TrainOps.java | 30 +-- .../op/collective/BroadcastRecv.java | 2 +- .../op/collective/BroadcastSend.java | 2 +- .../op/core/AnonymousIteratorV2.java | 2 +- .../op/core/AnonymousMultiDeviceIterator.java | 2 +- .../tensorflow/op/core/AssertNextDataset.java | 2 +- .../tensorflow/op/core/AutoShardDataset.java | 2 +- .../java/org/tensorflow/op/core/Barrier.java | 2 +- .../org/tensorflow/op/core/CSVDataset.java | 2 +- .../tensorflow/op/core/CacheDatasetV2.java | 2 +- .../op/core/ChooseFastestDataset.java | 2 +- .../tensorflow/op/core/CollectiveGather.java | 2 +- .../op/core/DirectedInterleaveDataset.java | 2 +- .../org/tensorflow/op/core/EnsureShape.java | 2 +- .../op/core/ExperimentalAutoShardDataset.java | 2 +- ...ExperimentalBytesProducedStatsDataset.java | 2 +- .../ExperimentalChooseFastestDataset.java | 2 +- ...ExperimentalDenseToSparseBatchDataset.java | 2 +- .../core/ExperimentalLatencyStatsDataset.java | 2 +- ...erimentalMaxIntraOpParallelismDataset.java | 2 +- .../core/ExperimentalParseExampleDataset.java | 2 +- .../ExperimentalPrivateThreadPoolDataset.java | 2 +- .../op/core/ExperimentalRandomDataset.java | 2 +- .../op/core/ExperimentalRebatchDataset.java | 2 +- ...ExperimentalSetStatsAggregatorDataset.java | 2 +- .../ExperimentalSlidingWindowDataset.java | 2 +- .../op/core/ExperimentalSqlDataset.java | 2 +- .../op/core/ExperimentalUnbatchDataset.java | 2 +- .../op/core/IgnoreErrorsDataset.java | 2 +- .../tensorflow/op/core/ImmutableConst.java | 2 +- .../org/tensorflow/op/core/InfeedDequeue.java | 2 +- .../op/core/InfeedDequeueTuple.java | 2 +- .../org/tensorflow/op/core/InfeedEnqueue.java | 2 +- .../op/core/InfeedEnqueueTuple.java | 2 +- .../org/tensorflow/op/core/LMDBDataset.java | 2 +- .../op/core/MaxIntraOpParallelismDataset.java | 2 +- .../op/core/MutableDenseHashTable.java | 2 +- .../op/core/MutableHashTableOfTensors.java | 2 +- .../org/tensorflow/op/core/NcclBroadcast.java | 2 +- .../op/core/NonSerializableDataset.java | 2 +- .../tensorflow/op/core/OutfeedDequeue.java | 2 +- .../op/core/OutfeedDequeueTuple.java | 2 +- .../tensorflow/op/core/ParallelConcat.java | 2 +- .../org/tensorflow/op/core/Placeholder.java | 2 +- .../op/core/PlaceholderWithDefault.java | 2 +- .../org/tensorflow/op/core/Prelinearize.java | 2 +- .../tensorflow/op/core/PrelinearizeTuple.java | 2 +- .../op/core/PrivateThreadPoolDataset.java | 2 +- .../tensorflow/op/core/RebatchDataset.java | 2 +- .../core/ResourceConditionalAccumulator.java | 2 +- .../tensorflow/op/core/SamplingDataset.java | 2 +- .../org/tensorflow/op/core/ShardDataset.java | 2 +- .../tensorflow/op/core/ShuffleDatasetV2.java | 2 +- .../org/tensorflow/op/core/SleepDataset.java | 2 +- .../op/core/SlidingWindowDataset.java | 2 +- .../tensorflow/op/core/SnapshotDataset.java | 2 +- .../tensorflow/op/core/TemporaryVariable.java | 2 +- .../org/tensorflow/op/core/TensorArray.java | 2 +- .../tensorflow/op/core/TensorArrayConcat.java | 2 +- .../tensorflow/op/core/TensorArrayGather.java | 2 +- .../tensorflow/op/core/TensorArrayPack.java | 2 +- .../tensorflow/op/core/TensorListConcat.java | 2 +- .../tensorflow/op/core/ThreadPoolDataset.java | 2 +- .../org/tensorflow/op/core/UniqueDataset.java | 2 +- .../org/tensorflow/op/core/VarHandleOp.java | 2 +- .../java/org/tensorflow/op/core/Variable.java | 2 +- .../tensorflow/op/data/AnonymousIterator.java | 2 +- .../org/tensorflow/op/data/BatchDataset.java | 2 +- .../op/data/BytesProducedStatsDataset.java | 2 +- .../org/tensorflow/op/data/CacheDataset.java | 2 +- .../op/data/ConcatenateDataset.java | 2 +- .../op/data/DatasetToSingleElement.java | 2 +- .../op/data/DenseToSparseBatchDataset.java | 2 +- .../data/ExperimentalAssertNextDataset.java | 2 +- .../op/data/ExperimentalCsvDataset.java | 2 +- ...ExperimentalDirectedInterleaveDataset.java | 2 +- .../data/ExperimentalIgnoreErrorsDataset.java | 2 +- .../op/data/ExperimentalLmdbDataset.java | 2 +- .../ExperimentalNonSerializableDataset.java | 2 +- .../op/data/ExperimentalSleepDataset.java | 2 +- .../data/ExperimentalThreadPoolDataset.java | 2 +- .../op/data/ExperimentalUniqueDataset.java | 2 +- .../op/data/FilterByLastComponentDataset.java | 2 +- .../java/org/tensorflow/op/data/Iterator.java | 2 +- .../op/data/IteratorFromStringHandle.java | 2 +- .../tensorflow/op/data/IteratorGetNext.java | 2 +- .../op/data/IteratorGetNextAsOptional.java | 2 +- .../op/data/IteratorGetNextSync.java | 2 +- .../op/data/LatencyStatsDataset.java | 2 +- .../org/tensorflow/op/data/ModelDataset.java | 2 +- .../op/data/MultiDeviceIterator.java | 2 +- .../MultiDeviceIteratorFromStringHandle.java | 2 +- .../MultiDeviceIteratorGetNextFromShard.java | 2 +- .../tensorflow/op/data/OptimizeDataset.java | 2 +- .../tensorflow/op/data/OptionalGetValue.java | 2 +- .../op/data/PaddedBatchDataset.java | 2 +- .../op/data/ParseExampleDataset.java | 2 +- .../tensorflow/op/data/PrefetchDataset.java | 2 +- .../org/tensorflow/op/data/RandomDataset.java | 2 +- .../org/tensorflow/op/data/RangeDataset.java | 2 +- .../org/tensorflow/op/data/RepeatDataset.java | 2 +- .../op/data/SetStatsAggregatorDataset.java | 2 +- .../op/data/ShuffleAndRepeatDataset.java | 2 +- .../tensorflow/op/data/ShuffleDataset.java | 2 +- .../org/tensorflow/op/data/SkipDataset.java | 2 +- .../org/tensorflow/op/data/SqlDataset.java | 2 +- .../org/tensorflow/op/data/TakeDataset.java | 2 +- .../org/tensorflow/op/data/TensorDataset.java | 2 +- .../op/data/TensorSliceDataset.java | 2 +- .../tensorflow/op/data/UnbatchDataset.java | 2 +- .../org/tensorflow/op/data/WindowDataset.java | 2 +- .../org/tensorflow/op/data/ZipDataset.java | 2 +- .../java/org/tensorflow/op/io/FifoQueue.java | 2 +- .../tensorflow/op/io/PaddingFifoQueue.java | 2 +- .../org/tensorflow/op/io/ParseExample.java | 2 +- .../op/io/ParseSequenceExample.java | 2 +- .../tensorflow/op/io/ParseSingleExample.java | 2 +- .../op/io/ParseSingleSequenceExample.java | 2 +- .../org/tensorflow/op/io/PriorityQueue.java | 2 +- .../tensorflow/op/io/RandomShuffleQueue.java | 2 +- .../org/tensorflow/op/math/AccumulateN.java | 2 +- .../sparse/SparseConditionalAccumulator.java | 2 +- .../op/train/ConditionalAccumulator.java | 2 +- .../org/tensorflow/AbstractOperation.java | 2 +- .../main/java/org/tensorflow/DataType.java | 2 +- .../java/org/tensorflow/EagerOperation.java | 2 +- .../org/tensorflow/EagerOperationBuilder.java | 2 +- .../java/org/tensorflow/GraphOperation.java | 2 +- .../org/tensorflow/GraphOperationBuilder.java | 2 +- .../java/org/tensorflow/OperationBuilder.java | 2 +- .../src/main/java/org/tensorflow/Output.java | 2 +- .../src/main/java/org/tensorflow/Tensor.java | 2 +- .../internal/buffer/RawBufferHelper.java | 10 +- .../internal/buffer/StringTensorBuffer.java | 17 +- .../internal/buffer/TensorBuffers.java | 22 +- .../main/java/org/tensorflow/types/TBool.java | 16 +- .../java/org/tensorflow/types/TDouble.java | 10 +- .../java/org/tensorflow/types/TFloat.java | 10 +- .../java/org/tensorflow/types/TInt32.java | 10 +- .../java/org/tensorflow/types/TInt64.java | 10 +- .../java/org/tensorflow/types/TString.java | 10 +- .../java/org/tensorflow/types/TUInt8.java | 10 +- .../tensorflow/EagerOperationBuilderTest.java | 2 +- .../tensorflow/GraphOperationBuilderTest.java | 2 +- .../op/core/GeneratedOperationsTest.java | 2 +- .../types/NumericTypesTestBase.java | 10 +- .../org/tensorflow/types/TDoubleTest.java | 2 +- .../java/org/tensorflow/types/TFloatTest.java | 2 +- .../java/org/tensorflow/types/TInt32Test.java | 2 +- .../java/org/tensorflow/types/TInt64Test.java | 2 +- .../java/org/tensorflow/types/TUInt8Test.java | 2 +- .../README.md | 60 +++--- .../pom.xml | 2 +- .../java/org/tensorflow/tools}/Shape.java | 2 +- .../java/org/tensorflow/tools}/StaticApi.java | 46 ++--- .../tools}/buffer/BooleanDataBuffer.java | 2 +- .../tools}/buffer/ByteDataBuffer.java | 2 +- .../tensorflow/tools}/buffer/DataBuffer.java | 2 +- .../tensorflow/tools}/buffer/DataBuffers.java | 79 ++++---- .../tools}/buffer/DoubleDataBuffer.java | 2 +- .../tools}/buffer/FloatDataBuffer.java | 2 +- .../tools}/buffer/IntDataBuffer.java | 2 +- .../tools}/buffer/LongDataBuffer.java | 2 +- .../tools}/buffer/ShortDataBuffer.java | 2 +- .../buffer/adapter/BooleanDataAdapter.java | 4 +- .../tools}/buffer/adapter/DataAdapter.java | 4 +- .../buffer/adapter/DoubleDataAdapter.java | 4 +- .../buffer/adapter/FloatDataAdapter.java | 4 +- .../tools}/buffer/adapter/IntDataAdapter.java | 4 +- .../buffer/adapter/LongDataAdapter.java | 4 +- .../buffer/adapter/ShortDataAdapter.java | 4 +- .../buffer/impl/AbstractDataBuffer.java | 4 +- .../tools}/buffer/impl/Validator.java | 4 +- .../impl/jdk/AbstractJdkDataBuffer.java | 4 +- .../buffer/impl/jdk/ByteJdkDataBuffer.java | 8 +- .../buffer/impl/jdk/DoubleJdkDataBuffer.java | 8 +- .../buffer/impl/jdk/FloatJdkDataBuffer.java | 8 +- .../buffer/impl/jdk/IntJdkDataBuffer.java | 8 +- .../buffer/impl/jdk/LongJdkDataBuffer.java | 8 +- .../buffer/impl/jdk/ShortJdkDataBuffer.java | 8 +- .../buffer/impl/misc/ArrayDataBuffer.java | 8 +- .../buffer/impl/misc/BitSetDataBuffer.java | 10 +- .../impl/misc/BooleanArrayDataBuffer.java | 10 +- .../impl/raw/AbstractRawDataBuffer.java | 8 +- .../buffer/impl/raw/BooleanRawDataBuffer.java | 7 +- .../buffer/impl/raw/ByteRawDataBuffer.java | 7 +- .../buffer/impl/raw/DoubleRawDataBuffer.java | 7 +- .../buffer/impl/raw/FloatRawDataBuffer.java | 7 +- .../buffer/impl/raw/IntRawDataBuffer.java | 7 +- .../buffer/impl/raw/LongRawDataBuffer.java | 7 +- .../buffer/impl/raw/ShortRawDataBuffer.java | 7 +- .../buffer/impl/raw/UnsafeMemoryHandle.java | 2 +- .../buffer/impl/raw/UnsafeReference.java | 2 +- .../virtual/AbstractVirtualDataBuffer.java | 12 +- .../virtual/BooleanVirtualDataBuffer.java | 10 +- .../impl/virtual/DoubleVirtualDataBuffer.java | 10 +- .../impl/virtual/FloatVirtualDataBuffer.java | 10 +- .../impl/virtual/IntVirtualDataBuffer.java | 10 +- .../impl/virtual/LongVirtualDataBuffer.java | 10 +- .../impl/virtual/ShortVirtualDataBuffer.java | 10 +- .../impl/virtual/VirtualDataBuffer.java | 8 +- .../tools}/ndarray/BooleanNdArray.java | 8 +- .../tools}/ndarray/ByteNdArray.java | 8 +- .../tools}/ndarray/DoubleNdArray.java | 8 +- .../tools}/ndarray/FloatNdArray.java | 8 +- .../tools}/ndarray/IllegalRankException.java | 2 +- .../tensorflow/tools}/ndarray/IntNdArray.java | 8 +- .../tools}/ndarray/LongNdArray.java | 8 +- .../tensorflow/tools}/ndarray/NdArray.java | 8 +- .../tools}/ndarray/NdArraySequence.java | 2 +- .../tensorflow/tools}/ndarray/NdArrays.java | 40 ++-- .../tools}/ndarray/ShortNdArray.java | 8 +- .../tools}/ndarray/impl/AbstractNdArray.java | 16 +- .../tools}/ndarray/impl/Validator.java | 6 +- .../impl/dense/AbstractDenseNdArray.java | 16 +- .../impl/dense/BooleanDenseNdArray.java | 18 +- .../ndarray/impl/dense/ByteDenseNdArray.java | 18 +- .../ndarray/impl/dense/DataTransfer.java | 22 +- .../ndarray/impl/dense/DenseNdArray.java | 10 +- .../impl/dense/DoubleDenseNdArray.java | 18 +- .../ndarray/impl/dense/FloatDenseNdArray.java | 18 +- .../ndarray/impl/dense/IntDenseNdArray.java | 18 +- .../ndarray/impl/dense/LongDenseNdArray.java | 18 +- .../ndarray/impl/dense/ShortDenseNdArray.java | 18 +- .../tools}/ndarray/impl/dense/Validator.java | 8 +- .../impl/dimension/AbstractDimension.java | 2 +- .../tools}/ndarray/impl/dimension/Axis.java | 2 +- .../ndarray/impl/dimension/Dimension.java | 4 +- .../impl/dimension/DimensionalSpace.java | 6 +- .../impl/dimension/IndexedDimension.java | 4 +- .../impl/dimension/ReducedDimension.java | 2 +- .../dimension/RelativeDimensionalSpace.java | 2 +- .../impl/dimension/UnknownDimension.java | 4 +- .../impl/sequence/ElementSequence.java | 10 +- .../sequence/IndexedPositionIterator.java | 2 +- .../IndexedSequentialPositionIterator.java | 4 +- .../impl/sequence/NdPositionIterator.java | 4 +- .../impl/sequence/PositionIterator.java | 4 +- .../sequence/SequentialPositionIterator.java | 4 +- .../impl/sequence/SingleElementSequence.java | 10 +- .../tensorflow/tools}/ndarray/index/All.java | 4 +- .../tensorflow/tools}/ndarray/index/At.java | 4 +- .../tensorflow/tools}/ndarray/index/Even.java | 4 +- .../tensorflow/tools}/ndarray/index/Flip.java | 4 +- .../tensorflow/tools}/ndarray/index/From.java | 4 +- .../tools}/ndarray/index/Index.java | 6 +- .../tools}/ndarray/index/Indices.java | 12 +- .../tensorflow/tools}/ndarray/index/Odd.java | 4 +- .../tools}/ndarray/index/Range.java | 4 +- .../tools}/ndarray/index/Sequence.java | 6 +- .../tensorflow/tools}/ndarray/index/Step.java | 4 +- .../tensorflow/tools}/ndarray/index/To.java | 4 +- .../java/org/tensorflow/tools}/ShapeTest.java | 4 +- .../tools}/benchmark/NdArrayBenchmark.java | 12 +- .../buffer/BooleanDataBufferTestBase.java | 2 +- .../tools}/buffer/ByteDataBufferTestBase.java | 2 +- .../tools}/buffer/DataBufferTestBase.java | 3 +- .../buffer/DoubleDataBufferTestBase.java | 2 +- .../buffer/FloatDataBufferTestBase.java | 2 +- .../tools}/buffer/IntDataBufferTestBase.java | 2 +- .../tools}/buffer/LongDataBufferTestBase.java | 2 +- .../buffer/ShortDataBufferTestBase.java | 2 +- .../impl/jdk/ByteJdkDataBufferTest.java | 6 +- .../impl/jdk/DoubleJdkDataBufferTest.java | 6 +- .../impl/jdk/FloatJdkDataBufferTest.java | 6 +- .../buffer/impl/jdk/IntJdkDataBufferTest.java | 6 +- .../impl/jdk/LongJdkDataBufferTest.java | 6 +- .../impl/jdk/ShortJdkDataBufferTest.java | 6 +- .../buffer/impl/misc/ArrayDataBufferTest.java | 6 +- .../impl/misc/BitSetDataBufferTest.java | 6 +- .../impl/misc/StringArrayDataBufferTest.java | 6 +- .../impl/raw/BooleanRawDataBufferTest.java | 6 +- .../impl/raw/ByteRawDataBufferTest.java | 6 +- .../impl/raw/DoubleRawDataBufferTest.java | 6 +- .../impl/raw/FloatRawDataBufferTest.java | 6 +- .../buffer/impl/raw/IntRawDataBufferTest.java | 6 +- .../impl/raw/LongRawDataBufferTest.java | 6 +- .../impl/raw/ShortRawDataBufferTest.java | 6 +- .../BigIntegerVirtualDataBufferTest.java | 14 +- .../virtual/BooleanVirtualDataBufferTest.java | 16 +- .../virtual/DoubleVirtualDataBufferTest.java | 16 +- .../virtual/FloatVirtualDataBufferTest.java | 16 +- .../virtual/IntVirtualDataBufferTest.java | 16 +- .../virtual/LongVirtualDataBufferTest.java | 16 +- .../virtual/ShortVirtualDataBufferTest.java | 16 +- .../ndarray/BooleanNdArrayTestBase.java | 6 +- .../tools}/ndarray/ByteNdArrayTestBase.java | 6 +- .../tools}/ndarray/DoubleNdArrayTestBase.java | 6 +- .../tools}/ndarray/FloatNdArrayTestBase.java | 6 +- .../tools}/ndarray/IntNdArrayTestBase.java | 6 +- .../tools}/ndarray/LongNdArrayTestBase.java | 4 +- .../tools}/ndarray/NdArrayTestBase.java | 32 +-- .../tools}/ndarray/ShortNdArrayTestBase.java | 6 +- .../impl/dense/BooleanDenseNdArrayTest.java | 14 +- .../impl/dense/ByteDenseNdArrayTest.java | 14 +- .../impl/dense/DoubleDenseNdArrayTest.java | 14 +- .../impl/dense/FloatDenseNdArrayTest.java | 14 +- .../impl/dense/IntDenseNdArrayTest.java | 14 +- .../impl/dense/LongDenseNdArrayTest.java | 14 +- .../impl/dense/ShortDenseNdArrayTest.java | 14 +- .../impl/dense/StringDenseNdArrayTest.java | 16 +- .../impl/sequence/ElementSequenceTest.java | 16 +- .../src/test/resources/COPYRIGHT.txt | 0 .../src/test/resources/castle.jpg | Bin 312 files changed, 1114 insertions(+), 1120 deletions(-) rename {tensorflow-utils => tensorflow-tools}/README.md (62%) rename {tensorflow-utils => tensorflow-tools}/pom.xml (98%) rename {tensorflow-utils/src/main/java/org/tensorflow/util => tensorflow-tools/src/main/java/org/tensorflow/tools}/Shape.java (99%) rename {tensorflow-utils/src/main/java/org/tensorflow/util => tensorflow-tools/src/main/java/org/tensorflow/tools}/StaticApi.java (94%) rename {tensorflow-utils/src/main/java/org/tensorflow/util => tensorflow-tools/src/main/java/org/tensorflow/tools}/buffer/BooleanDataBuffer.java (99%) rename {tensorflow-utils/src/main/java/org/tensorflow/util => tensorflow-tools/src/main/java/org/tensorflow/tools}/buffer/ByteDataBuffer.java (99%) rename {tensorflow-utils/src/main/java/org/tensorflow/util => tensorflow-tools/src/main/java/org/tensorflow/tools}/buffer/DataBuffer.java (99%) rename {tensorflow-utils/src/main/java/org/tensorflow/util => tensorflow-tools/src/main/java/org/tensorflow/tools}/buffer/DataBuffers.java (86%) rename {tensorflow-utils/src/main/java/org/tensorflow/util => tensorflow-tools/src/main/java/org/tensorflow/tools}/buffer/DoubleDataBuffer.java (99%) rename {tensorflow-utils/src/main/java/org/tensorflow/util => tensorflow-tools/src/main/java/org/tensorflow/tools}/buffer/FloatDataBuffer.java (99%) rename {tensorflow-utils/src/main/java/org/tensorflow/util => tensorflow-tools/src/main/java/org/tensorflow/tools}/buffer/IntDataBuffer.java (99%) rename {tensorflow-utils/src/main/java/org/tensorflow/util => tensorflow-tools/src/main/java/org/tensorflow/tools}/buffer/LongDataBuffer.java (99%) rename {tensorflow-utils/src/main/java/org/tensorflow/util => tensorflow-tools/src/main/java/org/tensorflow/tools}/buffer/ShortDataBuffer.java (99%) rename {tensorflow-utils/src/main/java/org/tensorflow/util => tensorflow-tools/src/main/java/org/tensorflow/tools}/buffer/adapter/BooleanDataAdapter.java (90%) rename {tensorflow-utils/src/main/java/org/tensorflow/util => tensorflow-tools/src/main/java/org/tensorflow/tools}/buffer/adapter/DataAdapter.java (89%) rename {tensorflow-utils/src/main/java/org/tensorflow/util => tensorflow-tools/src/main/java/org/tensorflow/tools}/buffer/adapter/DoubleDataAdapter.java (90%) rename {tensorflow-utils/src/main/java/org/tensorflow/util => tensorflow-tools/src/main/java/org/tensorflow/tools}/buffer/adapter/FloatDataAdapter.java (90%) rename {tensorflow-utils/src/main/java/org/tensorflow/util => tensorflow-tools/src/main/java/org/tensorflow/tools}/buffer/adapter/IntDataAdapter.java (90%) rename {tensorflow-utils/src/main/java/org/tensorflow/util => tensorflow-tools/src/main/java/org/tensorflow/tools}/buffer/adapter/LongDataAdapter.java (90%) rename {tensorflow-utils/src/main/java/org/tensorflow/util => tensorflow-tools/src/main/java/org/tensorflow/tools}/buffer/adapter/ShortDataAdapter.java (90%) rename {tensorflow-utils/src/main/java/org/tensorflow/util => tensorflow-tools/src/main/java/org/tensorflow/tools}/buffer/impl/AbstractDataBuffer.java (91%) rename {tensorflow-utils/src/main/java/org/tensorflow/util => tensorflow-tools/src/main/java/org/tensorflow/tools}/buffer/impl/Validator.java (97%) rename {tensorflow-utils/src/main/java/org/tensorflow/util => tensorflow-tools/src/main/java/org/tensorflow/tools}/buffer/impl/jdk/AbstractJdkDataBuffer.java (92%) rename {tensorflow-utils/src/main/java/org/tensorflow/util => tensorflow-tools/src/main/java/org/tensorflow/tools}/buffer/impl/jdk/ByteJdkDataBuffer.java (94%) rename {tensorflow-utils/src/main/java/org/tensorflow/util => tensorflow-tools/src/main/java/org/tensorflow/tools}/buffer/impl/jdk/DoubleJdkDataBuffer.java (94%) rename {tensorflow-utils/src/main/java/org/tensorflow/util => tensorflow-tools/src/main/java/org/tensorflow/tools}/buffer/impl/jdk/FloatJdkDataBuffer.java (94%) rename {tensorflow-utils/src/main/java/org/tensorflow/util => tensorflow-tools/src/main/java/org/tensorflow/tools}/buffer/impl/jdk/IntJdkDataBuffer.java (94%) rename {tensorflow-utils/src/main/java/org/tensorflow/util => tensorflow-tools/src/main/java/org/tensorflow/tools}/buffer/impl/jdk/LongJdkDataBuffer.java (94%) rename {tensorflow-utils/src/main/java/org/tensorflow/util => tensorflow-tools/src/main/java/org/tensorflow/tools}/buffer/impl/jdk/ShortJdkDataBuffer.java (94%) rename {tensorflow-utils/src/main/java/org/tensorflow/util => tensorflow-tools/src/main/java/org/tensorflow/tools}/buffer/impl/misc/ArrayDataBuffer.java (93%) rename {tensorflow-utils/src/main/java/org/tensorflow/util => tensorflow-tools/src/main/java/org/tensorflow/tools}/buffer/impl/misc/BitSetDataBuffer.java (90%) rename {tensorflow-utils/src/main/java/org/tensorflow/util => tensorflow-tools/src/main/java/org/tensorflow/tools}/buffer/impl/misc/BooleanArrayDataBuffer.java (91%) rename {tensorflow-utils/src/main/java/org/tensorflow/util => tensorflow-tools/src/main/java/org/tensorflow/tools}/buffer/impl/raw/AbstractRawDataBuffer.java (88%) rename {tensorflow-utils/src/main/java/org/tensorflow/util => tensorflow-tools/src/main/java/org/tensorflow/tools}/buffer/impl/raw/BooleanRawDataBuffer.java (92%) rename {tensorflow-utils/src/main/java/org/tensorflow/util => tensorflow-tools/src/main/java/org/tensorflow/tools}/buffer/impl/raw/ByteRawDataBuffer.java (92%) rename {tensorflow-utils/src/main/java/org/tensorflow/util => tensorflow-tools/src/main/java/org/tensorflow/tools}/buffer/impl/raw/DoubleRawDataBuffer.java (92%) rename {tensorflow-utils/src/main/java/org/tensorflow/util => tensorflow-tools/src/main/java/org/tensorflow/tools}/buffer/impl/raw/FloatRawDataBuffer.java (92%) rename {tensorflow-utils/src/main/java/org/tensorflow/util => tensorflow-tools/src/main/java/org/tensorflow/tools}/buffer/impl/raw/IntRawDataBuffer.java (92%) rename {tensorflow-utils/src/main/java/org/tensorflow/util => tensorflow-tools/src/main/java/org/tensorflow/tools}/buffer/impl/raw/LongRawDataBuffer.java (92%) rename {tensorflow-utils/src/main/java/org/tensorflow/util => tensorflow-tools/src/main/java/org/tensorflow/tools}/buffer/impl/raw/ShortRawDataBuffer.java (92%) rename {tensorflow-utils/src/main/java/org/tensorflow/util => tensorflow-tools/src/main/java/org/tensorflow/tools}/buffer/impl/raw/UnsafeMemoryHandle.java (98%) rename {tensorflow-utils/src/main/java/org/tensorflow/util => tensorflow-tools/src/main/java/org/tensorflow/tools}/buffer/impl/raw/UnsafeReference.java (98%) rename {tensorflow-utils/src/main/java/org/tensorflow/util => tensorflow-tools/src/main/java/org/tensorflow/tools}/buffer/impl/virtual/AbstractVirtualDataBuffer.java (79%) rename {tensorflow-utils/src/main/java/org/tensorflow/util => tensorflow-tools/src/main/java/org/tensorflow/tools}/buffer/impl/virtual/BooleanVirtualDataBuffer.java (87%) rename {tensorflow-utils/src/main/java/org/tensorflow/util => tensorflow-tools/src/main/java/org/tensorflow/tools}/buffer/impl/virtual/DoubleVirtualDataBuffer.java (87%) rename {tensorflow-utils/src/main/java/org/tensorflow/util => tensorflow-tools/src/main/java/org/tensorflow/tools}/buffer/impl/virtual/FloatVirtualDataBuffer.java (87%) rename {tensorflow-utils/src/main/java/org/tensorflow/util => tensorflow-tools/src/main/java/org/tensorflow/tools}/buffer/impl/virtual/IntVirtualDataBuffer.java (87%) rename {tensorflow-utils/src/main/java/org/tensorflow/util => tensorflow-tools/src/main/java/org/tensorflow/tools}/buffer/impl/virtual/LongVirtualDataBuffer.java (87%) rename {tensorflow-utils/src/main/java/org/tensorflow/util => tensorflow-tools/src/main/java/org/tensorflow/tools}/buffer/impl/virtual/ShortVirtualDataBuffer.java (87%) rename {tensorflow-utils/src/main/java/org/tensorflow/util => tensorflow-tools/src/main/java/org/tensorflow/tools}/buffer/impl/virtual/VirtualDataBuffer.java (78%) rename {tensorflow-utils/src/main/java/org/tensorflow/util => tensorflow-tools/src/main/java/org/tensorflow/tools}/ndarray/BooleanNdArray.java (97%) rename {tensorflow-utils/src/main/java/org/tensorflow/util => tensorflow-tools/src/main/java/org/tensorflow/tools}/ndarray/ByteNdArray.java (97%) rename {tensorflow-utils/src/main/java/org/tensorflow/util => tensorflow-tools/src/main/java/org/tensorflow/tools}/ndarray/DoubleNdArray.java (97%) rename {tensorflow-utils/src/main/java/org/tensorflow/util => tensorflow-tools/src/main/java/org/tensorflow/tools}/ndarray/FloatNdArray.java (97%) rename {tensorflow-utils/src/main/java/org/tensorflow/util => tensorflow-tools/src/main/java/org/tensorflow/tools}/ndarray/IllegalRankException.java (95%) rename {tensorflow-utils/src/main/java/org/tensorflow/util => tensorflow-tools/src/main/java/org/tensorflow/tools}/ndarray/IntNdArray.java (97%) rename {tensorflow-utils/src/main/java/org/tensorflow/util => tensorflow-tools/src/main/java/org/tensorflow/tools}/ndarray/LongNdArray.java (97%) rename {tensorflow-utils/src/main/java/org/tensorflow/util => tensorflow-tools/src/main/java/org/tensorflow/tools}/ndarray/NdArray.java (98%) rename {tensorflow-utils/src/main/java/org/tensorflow/util => tensorflow-tools/src/main/java/org/tensorflow/tools}/ndarray/NdArraySequence.java (95%) rename {tensorflow-utils/src/main/java/org/tensorflow/util => tensorflow-tools/src/main/java/org/tensorflow/tools}/ndarray/NdArrays.java (92%) rename {tensorflow-utils/src/main/java/org/tensorflow/util => tensorflow-tools/src/main/java/org/tensorflow/tools}/ndarray/ShortNdArray.java (97%) rename {tensorflow-utils/src/main/java/org/tensorflow/util => tensorflow-tools/src/main/java/org/tensorflow/tools}/ndarray/impl/AbstractNdArray.java (86%) rename {tensorflow-utils/src/main/java/org/tensorflow/util => tensorflow-tools/src/main/java/org/tensorflow/tools}/ndarray/impl/Validator.java (94%) rename {tensorflow-utils/src/main/java/org/tensorflow/util => tensorflow-tools/src/main/java/org/tensorflow/tools}/ndarray/impl/dense/AbstractDenseNdArray.java (87%) rename {tensorflow-utils/src/main/java/org/tensorflow/util => tensorflow-tools/src/main/java/org/tensorflow/tools}/ndarray/impl/dense/BooleanDenseNdArray.java (88%) rename {tensorflow-utils/src/main/java/org/tensorflow/util => tensorflow-tools/src/main/java/org/tensorflow/tools}/ndarray/impl/dense/ByteDenseNdArray.java (88%) rename {tensorflow-utils/src/main/java/org/tensorflow/util => tensorflow-tools/src/main/java/org/tensorflow/tools}/ndarray/impl/dense/DataTransfer.java (87%) rename {tensorflow-utils/src/main/java/org/tensorflow/util => tensorflow-tools/src/main/java/org/tensorflow/tools}/ndarray/impl/dense/DenseNdArray.java (88%) rename {tensorflow-utils/src/main/java/org/tensorflow/util => tensorflow-tools/src/main/java/org/tensorflow/tools}/ndarray/impl/dense/DoubleDenseNdArray.java (88%) rename {tensorflow-utils/src/main/java/org/tensorflow/util => tensorflow-tools/src/main/java/org/tensorflow/tools}/ndarray/impl/dense/FloatDenseNdArray.java (88%) rename {tensorflow-utils/src/main/java/org/tensorflow/util => tensorflow-tools/src/main/java/org/tensorflow/tools}/ndarray/impl/dense/IntDenseNdArray.java (88%) rename {tensorflow-utils/src/main/java/org/tensorflow/util => tensorflow-tools/src/main/java/org/tensorflow/tools}/ndarray/impl/dense/LongDenseNdArray.java (88%) rename {tensorflow-utils/src/main/java/org/tensorflow/util => tensorflow-tools/src/main/java/org/tensorflow/tools}/ndarray/impl/dense/ShortDenseNdArray.java (88%) rename {tensorflow-utils/src/main/java/org/tensorflow/util => tensorflow-tools/src/main/java/org/tensorflow/tools}/ndarray/impl/dense/Validator.java (84%) rename {tensorflow-utils/src/main/java/org/tensorflow/util => tensorflow-tools/src/main/java/org/tensorflow/tools}/ndarray/impl/dimension/AbstractDimension.java (95%) rename {tensorflow-utils/src/main/java/org/tensorflow/util => tensorflow-tools/src/main/java/org/tensorflow/tools}/ndarray/impl/dimension/Axis.java (96%) rename {tensorflow-utils/src/main/java/org/tensorflow/util => tensorflow-tools/src/main/java/org/tensorflow/tools}/ndarray/impl/dimension/Dimension.java (90%) rename {tensorflow-utils/src/main/java/org/tensorflow/util => tensorflow-tools/src/main/java/org/tensorflow/tools}/ndarray/impl/dimension/DimensionalSpace.java (97%) rename {tensorflow-utils/src/main/java/org/tensorflow/util => tensorflow-tools/src/main/java/org/tensorflow/tools}/ndarray/impl/dimension/IndexedDimension.java (94%) rename {tensorflow-utils/src/main/java/org/tensorflow/util => tensorflow-tools/src/main/java/org/tensorflow/tools}/ndarray/impl/dimension/ReducedDimension.java (96%) rename {tensorflow-utils/src/main/java/org/tensorflow/util => tensorflow-tools/src/main/java/org/tensorflow/tools}/ndarray/impl/dimension/RelativeDimensionalSpace.java (94%) rename {tensorflow-utils/src/main/java/org/tensorflow/util => tensorflow-tools/src/main/java/org/tensorflow/tools}/ndarray/impl/dimension/UnknownDimension.java (93%) rename {tensorflow-utils/src/main/java/org/tensorflow/util => tensorflow-tools/src/main/java/org/tensorflow/tools}/ndarray/impl/sequence/ElementSequence.java (83%) rename {tensorflow-utils/src/main/java/org/tensorflow/util => tensorflow-tools/src/main/java/org/tensorflow/tools}/ndarray/impl/sequence/IndexedPositionIterator.java (81%) rename {tensorflow-utils/src/main/java/org/tensorflow/util => tensorflow-tools/src/main/java/org/tensorflow/tools}/ndarray/impl/sequence/IndexedSequentialPositionIterator.java (83%) rename {tensorflow-utils/src/main/java/org/tensorflow/util => tensorflow-tools/src/main/java/org/tensorflow/tools}/ndarray/impl/sequence/NdPositionIterator.java (89%) rename {tensorflow-utils/src/main/java/org/tensorflow/util => tensorflow-tools/src/main/java/org/tensorflow/tools}/ndarray/impl/sequence/PositionIterator.java (86%) rename {tensorflow-utils/src/main/java/org/tensorflow/util => tensorflow-tools/src/main/java/org/tensorflow/tools}/ndarray/impl/sequence/SequentialPositionIterator.java (84%) rename {tensorflow-utils/src/main/java/org/tensorflow/util => tensorflow-tools/src/main/java/org/tensorflow/tools}/ndarray/impl/sequence/SingleElementSequence.java (69%) rename {tensorflow-utils/src/main/java/org/tensorflow/util => tensorflow-tools/src/main/java/org/tensorflow/tools}/ndarray/index/All.java (90%) rename {tensorflow-utils/src/main/java/org/tensorflow/util => tensorflow-tools/src/main/java/org/tensorflow/tools}/ndarray/index/At.java (91%) rename {tensorflow-utils/src/main/java/org/tensorflow/util => tensorflow-tools/src/main/java/org/tensorflow/tools}/ndarray/index/Even.java (90%) rename {tensorflow-utils/src/main/java/org/tensorflow/util => tensorflow-tools/src/main/java/org/tensorflow/tools}/ndarray/index/Flip.java (90%) rename {tensorflow-utils/src/main/java/org/tensorflow/util => tensorflow-tools/src/main/java/org/tensorflow/tools}/ndarray/index/From.java (90%) rename {tensorflow-utils/src/main/java/org/tensorflow/util => tensorflow-tools/src/main/java/org/tensorflow/tools}/ndarray/index/Index.java (94%) rename {tensorflow-utils/src/main/java/org/tensorflow/util => tensorflow-tools/src/main/java/org/tensorflow/tools}/ndarray/index/Indices.java (96%) rename {tensorflow-utils/src/main/java/org/tensorflow/util => tensorflow-tools/src/main/java/org/tensorflow/tools}/ndarray/index/Odd.java (90%) rename {tensorflow-utils/src/main/java/org/tensorflow/util => tensorflow-tools/src/main/java/org/tensorflow/tools}/ndarray/index/Range.java (90%) rename {tensorflow-utils/src/main/java/org/tensorflow/util => tensorflow-tools/src/main/java/org/tensorflow/tools}/ndarray/index/Sequence.java (87%) rename {tensorflow-utils/src/main/java/org/tensorflow/util => tensorflow-tools/src/main/java/org/tensorflow/tools}/ndarray/index/Step.java (90%) rename {tensorflow-utils/src/main/java/org/tensorflow/util => tensorflow-tools/src/main/java/org/tensorflow/tools}/ndarray/index/To.java (89%) rename {tensorflow-utils/src/test/java/org/tensorflow/util => tensorflow-tools/src/test/java/org/tensorflow/tools}/ShapeTest.java (97%) rename {tensorflow-utils/src/test/java/org/tensorflow/util => tensorflow-tools/src/test/java/org/tensorflow/tools}/benchmark/NdArrayBenchmark.java (93%) rename {tensorflow-utils/src/test/java/org/tensorflow/util => tensorflow-tools/src/test/java/org/tensorflow/tools}/buffer/BooleanDataBufferTestBase.java (98%) rename {tensorflow-utils/src/test/java/org/tensorflow/util => tensorflow-tools/src/test/java/org/tensorflow/tools}/buffer/ByteDataBufferTestBase.java (98%) rename {tensorflow-utils/src/test/java/org/tensorflow/util => tensorflow-tools/src/test/java/org/tensorflow/tools}/buffer/DataBufferTestBase.java (98%) rename {tensorflow-utils/src/test/java/org/tensorflow/util => tensorflow-tools/src/test/java/org/tensorflow/tools}/buffer/DoubleDataBufferTestBase.java (98%) rename {tensorflow-utils/src/test/java/org/tensorflow/util => tensorflow-tools/src/test/java/org/tensorflow/tools}/buffer/FloatDataBufferTestBase.java (98%) rename {tensorflow-utils/src/test/java/org/tensorflow/util => tensorflow-tools/src/test/java/org/tensorflow/tools}/buffer/IntDataBufferTestBase.java (98%) rename {tensorflow-utils/src/test/java/org/tensorflow/util => tensorflow-tools/src/test/java/org/tensorflow/tools}/buffer/LongDataBufferTestBase.java (98%) rename {tensorflow-utils/src/test/java/org/tensorflow/util => tensorflow-tools/src/test/java/org/tensorflow/tools}/buffer/ShortDataBufferTestBase.java (98%) rename {tensorflow-utils/src/test/java/org/tensorflow/util => tensorflow-tools/src/test/java/org/tensorflow/tools}/buffer/impl/jdk/ByteJdkDataBufferTest.java (85%) rename {tensorflow-utils/src/test/java/org/tensorflow/util => tensorflow-tools/src/test/java/org/tensorflow/tools}/buffer/impl/jdk/DoubleJdkDataBufferTest.java (85%) rename {tensorflow-utils/src/test/java/org/tensorflow/util => tensorflow-tools/src/test/java/org/tensorflow/tools}/buffer/impl/jdk/FloatJdkDataBufferTest.java (85%) rename {tensorflow-utils/src/test/java/org/tensorflow/util => tensorflow-tools/src/test/java/org/tensorflow/tools}/buffer/impl/jdk/IntJdkDataBufferTest.java (85%) rename {tensorflow-utils/src/test/java/org/tensorflow/util => tensorflow-tools/src/test/java/org/tensorflow/tools}/buffer/impl/jdk/LongJdkDataBufferTest.java (85%) rename {tensorflow-utils/src/test/java/org/tensorflow/util => tensorflow-tools/src/test/java/org/tensorflow/tools}/buffer/impl/jdk/ShortJdkDataBufferTest.java (85%) rename {tensorflow-utils/src/test/java/org/tensorflow/util => tensorflow-tools/src/test/java/org/tensorflow/tools}/buffer/impl/misc/ArrayDataBufferTest.java (88%) rename {tensorflow-utils/src/test/java/org/tensorflow/util => tensorflow-tools/src/test/java/org/tensorflow/tools}/buffer/impl/misc/BitSetDataBufferTest.java (86%) rename {tensorflow-utils/src/test/java/org/tensorflow/util => tensorflow-tools/src/test/java/org/tensorflow/tools}/buffer/impl/misc/StringArrayDataBufferTest.java (87%) rename {tensorflow-utils/src/test/java/org/tensorflow/util => tensorflow-tools/src/test/java/org/tensorflow/tools}/buffer/impl/raw/BooleanRawDataBufferTest.java (85%) rename {tensorflow-utils/src/test/java/org/tensorflow/util => tensorflow-tools/src/test/java/org/tensorflow/tools}/buffer/impl/raw/ByteRawDataBufferTest.java (85%) rename {tensorflow-utils/src/test/java/org/tensorflow/util => tensorflow-tools/src/test/java/org/tensorflow/tools}/buffer/impl/raw/DoubleRawDataBufferTest.java (85%) rename {tensorflow-utils/src/test/java/org/tensorflow/util => tensorflow-tools/src/test/java/org/tensorflow/tools}/buffer/impl/raw/FloatRawDataBufferTest.java (85%) rename {tensorflow-utils/src/test/java/org/tensorflow/util => tensorflow-tools/src/test/java/org/tensorflow/tools}/buffer/impl/raw/IntRawDataBufferTest.java (85%) rename {tensorflow-utils/src/test/java/org/tensorflow/util => tensorflow-tools/src/test/java/org/tensorflow/tools}/buffer/impl/raw/LongRawDataBufferTest.java (85%) rename {tensorflow-utils/src/test/java/org/tensorflow/util => tensorflow-tools/src/test/java/org/tensorflow/tools}/buffer/impl/raw/ShortRawDataBufferTest.java (85%) rename {tensorflow-utils/src/test/java/org/tensorflow/util => tensorflow-tools/src/test/java/org/tensorflow/tools}/buffer/impl/virtual/BigIntegerVirtualDataBufferTest.java (76%) rename {tensorflow-utils/src/test/java/org/tensorflow/util => tensorflow-tools/src/test/java/org/tensorflow/tools}/buffer/impl/virtual/BooleanVirtualDataBufferTest.java (65%) rename {tensorflow-utils/src/test/java/org/tensorflow/util => tensorflow-tools/src/test/java/org/tensorflow/tools}/buffer/impl/virtual/DoubleVirtualDataBufferTest.java (74%) rename {tensorflow-utils/src/test/java/org/tensorflow/util => tensorflow-tools/src/test/java/org/tensorflow/tools}/buffer/impl/virtual/FloatVirtualDataBufferTest.java (71%) rename {tensorflow-utils/src/test/java/org/tensorflow/util => tensorflow-tools/src/test/java/org/tensorflow/tools}/buffer/impl/virtual/IntVirtualDataBufferTest.java (70%) rename {tensorflow-utils/src/test/java/org/tensorflow/util => tensorflow-tools/src/test/java/org/tensorflow/tools}/buffer/impl/virtual/LongVirtualDataBufferTest.java (73%) rename {tensorflow-utils/src/test/java/org/tensorflow/util => tensorflow-tools/src/test/java/org/tensorflow/tools}/buffer/impl/virtual/ShortVirtualDataBufferTest.java (66%) rename {tensorflow-utils/src/test/java/org/tensorflow/util => tensorflow-tools/src/test/java/org/tensorflow/tools}/ndarray/BooleanNdArrayTestBase.java (96%) rename {tensorflow-utils/src/test/java/org/tensorflow/util => tensorflow-tools/src/test/java/org/tensorflow/tools}/ndarray/ByteNdArrayTestBase.java (97%) rename {tensorflow-utils/src/test/java/org/tensorflow/util => tensorflow-tools/src/test/java/org/tensorflow/tools}/ndarray/DoubleNdArrayTestBase.java (97%) rename {tensorflow-utils/src/test/java/org/tensorflow/util => tensorflow-tools/src/test/java/org/tensorflow/tools}/ndarray/FloatNdArrayTestBase.java (97%) rename {tensorflow-utils/src/test/java/org/tensorflow/util => tensorflow-tools/src/test/java/org/tensorflow/tools}/ndarray/IntNdArrayTestBase.java (96%) rename {tensorflow-utils/src/test/java/org/tensorflow/util => tensorflow-tools/src/test/java/org/tensorflow/tools}/ndarray/LongNdArrayTestBase.java (98%) rename {tensorflow-utils/src/test/java/org/tensorflow/util => tensorflow-tools/src/test/java/org/tensorflow/tools}/ndarray/NdArrayTestBase.java (92%) rename {tensorflow-utils/src/test/java/org/tensorflow/util => tensorflow-tools/src/test/java/org/tensorflow/tools}/ndarray/ShortNdArrayTestBase.java (97%) rename {tensorflow-utils/src/test/java/org/tensorflow/util => tensorflow-tools/src/test/java/org/tensorflow/tools}/ndarray/impl/dense/BooleanDenseNdArrayTest.java (74%) rename {tensorflow-utils/src/test/java/org/tensorflow/util => tensorflow-tools/src/test/java/org/tensorflow/tools}/ndarray/impl/dense/ByteDenseNdArrayTest.java (74%) rename {tensorflow-utils/src/test/java/org/tensorflow/util => tensorflow-tools/src/test/java/org/tensorflow/tools}/ndarray/impl/dense/DoubleDenseNdArrayTest.java (74%) rename {tensorflow-utils/src/test/java/org/tensorflow/util => tensorflow-tools/src/test/java/org/tensorflow/tools}/ndarray/impl/dense/FloatDenseNdArrayTest.java (74%) rename {tensorflow-utils/src/test/java/org/tensorflow/util => tensorflow-tools/src/test/java/org/tensorflow/tools}/ndarray/impl/dense/IntDenseNdArrayTest.java (74%) rename {tensorflow-utils/src/test/java/org/tensorflow/util => tensorflow-tools/src/test/java/org/tensorflow/tools}/ndarray/impl/dense/LongDenseNdArrayTest.java (74%) rename {tensorflow-utils/src/test/java/org/tensorflow/util => tensorflow-tools/src/test/java/org/tensorflow/tools}/ndarray/impl/dense/ShortDenseNdArrayTest.java (74%) rename {tensorflow-utils/src/test/java/org/tensorflow/util => tensorflow-tools/src/test/java/org/tensorflow/tools}/ndarray/impl/dense/StringDenseNdArrayTest.java (77%) rename {tensorflow-utils/src/test/java/org/tensorflow/util => tensorflow-tools/src/test/java/org/tensorflow/tools}/ndarray/impl/sequence/ElementSequenceTest.java (81%) rename {tensorflow-utils => tensorflow-tools}/src/test/resources/COPYRIGHT.txt (100%) rename {tensorflow-utils => tensorflow-tools}/src/test/resources/castle.jpg (100%) diff --git a/pom.xml b/pom.xml index 5f17425a3c0..e26bb73311a 100644 --- a/pom.xml +++ b/pom.xml @@ -29,7 +29,7 @@ - tensorflow-utils + tensorflow-tools tensorflow-core diff --git a/tensorflow-core/tensorflow-core-api/pom.xml b/tensorflow-core/tensorflow-core-api/pom.xml index 2ec4f163427..d5c82ff9179 100644 --- a/tensorflow-core/tensorflow-core-api/pom.xml +++ b/tensorflow-core/tensorflow-core-api/pom.xml @@ -28,7 +28,7 @@ org.tensorflow - tensorflow-utils + tensorflow-tools ${project.version} diff --git a/tensorflow-core/tensorflow-core-api/src/bazel/op_generator/op_specs.cc b/tensorflow-core/tensorflow-core-api/src/bazel/op_generator/op_specs.cc index 7a6239ee7ea..31a46578237 100644 --- a/tensorflow-core/tensorflow-core-api/src/bazel/op_generator/op_specs.cc +++ b/tensorflow-core/tensorflow-core-api/src/bazel/op_generator/op_specs.cc @@ -148,7 +148,7 @@ std::pair TypeResolver::TypesOf(const OpDef_AttrDef& attr_def, types = MakeTypePair(Type::Class("Boolean"), Type::Boolean()); } else if (attr_type == "shape") { - types = MakeTypePair(Type::Class("Shape", "org.tensorflow.util")); + types = MakeTypePair(Type::Class("Shape", "org.tensorflow.tools")); } else if (attr_type == "tensor") { types = MakeTypePair(Type::Class("Tensor", "org.tensorflow") diff --git a/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/DataOps.java b/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/DataOps.java index ea6bfc9d19a..79893582201 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/DataOps.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/DataOps.java @@ -16,10 +16,10 @@ import org.tensorflow.op.data.OptionalHasValue; import org.tensorflow.op.data.OptionalNone; import org.tensorflow.op.data.SerializeIterator; +import org.tensorflow.tools.Shape; import org.tensorflow.types.TBool; import org.tensorflow.types.TInt64; import org.tensorflow.types.TString; -import org.tensorflow.util.Shape; /** * An API for building {@code data} operations as {@link Op Op}s @@ -33,33 +33,6 @@ public final class DataOps { this.scope = scope; } - /** - * Builds an {@link IteratorGetNext} operation - * - * @param iterator - * @param outputTypes - * @param outputShapes - * @return a new instance of IteratorGetNext - * @see org.tensorflow.op.data.IteratorGetNext - */ - public IteratorGetNext iteratorGetNext(Operand iterator, List> outputTypes, - List outputShapes) { - return IteratorGetNext.create(scope, iterator, outputTypes, outputShapes); - } - - /** - * Builds an {@link AnonymousIterator} operation - * - * @param outputTypes - * @param outputShapes - * @return a new instance of AnonymousIterator - * @see org.tensorflow.op.data.AnonymousIterator - */ - public AnonymousIterator anonymousIterator(List> outputTypes, - List outputShapes) { - return AnonymousIterator.create(scope, outputTypes, outputShapes); - } - /** * Builds an {@link KafkaDataset} operation * @@ -101,20 +74,6 @@ public OptionalNone optionalNone() { return OptionalNone.create(scope); } - /** - * Builds an {@link IteratorGetNextAsOptional} operation - * - * @param iterator - * @param outputTypes - * @param outputShapes - * @return a new instance of IteratorGetNextAsOptional - * @see org.tensorflow.op.data.IteratorGetNextAsOptional - */ - public IteratorGetNextAsOptional iteratorGetNextAsOptional(Operand iterator, - List> outputTypes, List outputShapes) { - return IteratorGetNextAsOptional.create(scope, iterator, outputTypes, outputShapes); - } - /** * Builds an {@link OptionalFromValue} operation * @@ -127,17 +86,17 @@ public OptionalFromValue optionalFromValue(Iterable> components) { } /** - * Builds an {@link IteratorGetNextSync} operation + * Builds an {@link IteratorGetNextAsOptional} operation * * @param iterator * @param outputTypes * @param outputShapes - * @return a new instance of IteratorGetNextSync - * @see org.tensorflow.op.data.IteratorGetNextSync + * @return a new instance of IteratorGetNextAsOptional + * @see org.tensorflow.op.data.IteratorGetNextAsOptional */ - public IteratorGetNextSync iteratorGetNextSync(Operand iterator, List> outputTypes, - List outputShapes) { - return IteratorGetNextSync.create(scope, iterator, outputTypes, outputShapes); + public IteratorGetNextAsOptional iteratorGetNextAsOptional(Operand iterator, + List> outputTypes, List outputShapes) { + return IteratorGetNextAsOptional.create(scope, iterator, outputTypes, outputShapes); } /** @@ -198,4 +157,45 @@ public OptionalGetValue optionalGetValue(Operand optional, List> List outputShapes) { return OptionalGetValue.create(scope, optional, outputTypes, outputShapes); } + + /** + * Builds an {@link IteratorGetNext} operation + * + * @param iterator + * @param outputTypes + * @param outputShapes + * @return a new instance of IteratorGetNext + * @see org.tensorflow.op.data.IteratorGetNext + */ + public IteratorGetNext iteratorGetNext(Operand iterator, List> outputTypes, + List outputShapes) { + return IteratorGetNext.create(scope, iterator, outputTypes, outputShapes); + } + + /** + * Builds an {@link AnonymousIterator} operation + * + * @param outputTypes + * @param outputShapes + * @return a new instance of AnonymousIterator + * @see org.tensorflow.op.data.AnonymousIterator + */ + public AnonymousIterator anonymousIterator(List> outputTypes, + List outputShapes) { + return AnonymousIterator.create(scope, outputTypes, outputShapes); + } + + /** + * Builds an {@link IteratorGetNextSync} operation + * + * @param iterator + * @param outputTypes + * @param outputShapes + * @return a new instance of IteratorGetNextSync + * @see org.tensorflow.op.data.IteratorGetNextSync + */ + public IteratorGetNextSync iteratorGetNextSync(Operand iterator, List> outputTypes, + List outputShapes) { + return IteratorGetNextSync.create(scope, iterator, outputTypes, outputShapes); + } } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/IoOps.java b/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/IoOps.java index e598d654d69..6f6cfa371f4 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/IoOps.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/IoOps.java @@ -48,10 +48,10 @@ import org.tensorflow.op.io.TfRecordReader; import org.tensorflow.op.io.WholeFileReader; import org.tensorflow.op.io.WriteFile; +import org.tensorflow.tools.Shape; import org.tensorflow.types.TInt32; import org.tensorflow.types.TInt64; import org.tensorflow.types.TString; -import org.tensorflow.util.Shape; /** * An API for building {@code io} operations as {@link Op Op}s @@ -65,20 +65,6 @@ public final class IoOps { this.scope = scope; } - /** - * Builds an {@link PriorityQueue} operation - * - * @param componentTypes The type of each component in a value. - * @param shapes The shape of each component in a value. The length of this attr must - * @param options carries optional attributes values - * @return a new instance of PriorityQueue - * @see org.tensorflow.op.io.PriorityQueue - */ - public PriorityQueue priorityQueue(List> componentTypes, List shapes, - PriorityQueue.Options... options) { - return PriorityQueue.create(scope, componentTypes, shapes, options); - } - /** * Builds an {@link QueueEnqueueMany} operation * @@ -191,6 +177,25 @@ public MatchingFiles matchingFiles(Operand pattern) { return MatchingFiles.create(scope, pattern); } + /** + * Builds an {@link ParseExample} operation + * + * @param serialized A vector containing a batch of binary serialized Example protos. + * @param names A vector containing the names of the serialized protos. + * @param sparseKeys A list of Nsparse string Tensors (scalars). + * @param denseKeys A list of Ndense string Tensors (scalars). + * @param denseDefaults A list of Ndense Tensors (some may be empty). + * @param sparseTypes A list of Nsparse types; the data types of data in each Feature + * @param denseShapes A list of Ndense shapes; the shapes of data in each Feature + * @return a new instance of ParseExample + * @see org.tensorflow.op.io.ParseExample + */ + public ParseExample parseExample(Operand serialized, Operand names, + Iterable> sparseKeys, Iterable> denseKeys, + Iterable> denseDefaults, List> sparseTypes, List denseShapes) { + return ParseExample.create(scope, serialized, names, sparseKeys, denseKeys, denseDefaults, sparseTypes, denseShapes); + } + /** * Builds an {@link WholeFileReader} operation * @@ -202,25 +207,6 @@ public WholeFileReader wholeFileReader(WholeFileReader.Options... options) { return WholeFileReader.create(scope, options); } - /** - * Builds an {@link ParseSingleExample} operation - * - * @param serialized A vector containing a batch of binary serialized Example protos. - * @param denseDefaults A list of Tensors (some may be empty), whose length matches - * @param numSparse The number of sparse features to be parsed from the example. This - * @param sparseKeys A list of `num_sparse` strings. - * @param denseKeys The keys expected in the Examples' features associated with dense - * @param sparseTypes A list of `num_sparse` types; the data types of data in each - * @param denseShapes The shapes of data in each Feature given in dense_keys. - * @return a new instance of ParseSingleExample - * @see org.tensorflow.op.io.ParseSingleExample - */ - public ParseSingleExample parseSingleExample(Operand serialized, - Iterable> denseDefaults, Long numSparse, List sparseKeys, - List denseKeys, List> sparseTypes, List denseShapes) { - return ParseSingleExample.create(scope, serialized, denseDefaults, numSparse, sparseKeys, denseKeys, sparseTypes, denseShapes); - } - /** * Builds an {@link SerializeManySparse} operation * @@ -283,6 +269,20 @@ public ReaderSerializeState readerSerializeState(Operand readerHandle) { return ReaderSerializeState.create(scope, readerHandle); } + /** + * Builds an {@link PriorityQueue} operation + * + * @param componentTypes The type of each component in a value. + * @param shapes The shape of each component in a value. The length of this attr must + * @param options carries optional attributes values + * @return a new instance of PriorityQueue + * @see org.tensorflow.op.io.PriorityQueue + */ + public PriorityQueue priorityQueue(List> componentTypes, List shapes, + PriorityQueue.Options... options) { + return PriorityQueue.create(scope, componentTypes, shapes, options); + } + /** * Builds an {@link QueueClose} operation * @@ -411,6 +411,25 @@ public DecodeJsonExample decodeJsonExample(Operand jsonExamples) { return DecodeJsonExample.create(scope, jsonExamples); } + /** + * Builds an {@link ParseSingleExample} operation + * + * @param serialized A vector containing a batch of binary serialized Example protos. + * @param denseDefaults A list of Tensors (some may be empty), whose length matches + * @param numSparse The number of sparse features to be parsed from the example. This + * @param sparseKeys A list of `num_sparse` strings. + * @param denseKeys The keys expected in the Examples' features associated with dense + * @param sparseTypes A list of `num_sparse` types; the data types of data in each + * @param denseShapes The shapes of data in each Feature given in dense_keys. + * @return a new instance of ParseSingleExample + * @see org.tensorflow.op.io.ParseSingleExample + */ + public ParseSingleExample parseSingleExample(Operand serialized, + Iterable> denseDefaults, Long numSparse, List sparseKeys, + List denseKeys, List> sparseTypes, List denseShapes) { + return ParseSingleExample.create(scope, serialized, denseDefaults, numSparse, sparseKeys, denseKeys, sparseTypes, denseShapes); + } + /** * Builds an {@link EncodeBase64} operation * @@ -489,25 +508,6 @@ public ReaderNumWorkUnitsCompleted readerNumWorkUnitsCompleted(Operand reader return ReaderNumWorkUnitsCompleted.create(scope, readerHandle); } - /** - * Builds an {@link ParseExample} operation - * - * @param serialized A vector containing a batch of binary serialized Example protos. - * @param names A vector containing the names of the serialized protos. - * @param sparseKeys A list of Nsparse string Tensors (scalars). - * @param denseKeys A list of Ndense string Tensors (scalars). - * @param denseDefaults A list of Ndense Tensors (some may be empty). - * @param sparseTypes A list of Nsparse types; the data types of data in each Feature - * @param denseShapes A list of Ndense shapes; the shapes of data in each Feature - * @return a new instance of ParseExample - * @see org.tensorflow.op.io.ParseExample - */ - public ParseExample parseExample(Operand serialized, Operand names, - Iterable> sparseKeys, Iterable> denseKeys, - Iterable> denseDefaults, List> sparseTypes, List denseShapes) { - return ParseExample.create(scope, serialized, names, sparseKeys, denseKeys, denseDefaults, sparseTypes, denseShapes); - } - /** * Builds an {@link ReaderRead} operation * diff --git a/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/MathOps.java b/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/MathOps.java index 39b04137bca..8c5b771d865 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/MathOps.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/MathOps.java @@ -102,12 +102,12 @@ import org.tensorflow.op.math.Xdivy; import org.tensorflow.op.math.Xlogy; import org.tensorflow.op.math.Zeta; +import org.tensorflow.tools.Shape; import org.tensorflow.types.TBool; import org.tensorflow.types.TFloat; import org.tensorflow.types.TInt32; import org.tensorflow.types.TInt64; import org.tensorflow.types.family.TNumber; -import org.tensorflow.util.Shape; /** * An API for building {@code math} operations as {@link Op Op}s @@ -726,6 +726,18 @@ public Cumprod cumprod(Operand x, Operand axis, return Cumprod.create(scope, x, axis, options); } + /** + * Builds an {@link AccumulateN} operation + * + * @param inputs A list of `Tensor` objects, each with same shape and type. + * @param shape Shape of elements of `inputs`. + * @return a new instance of AccumulateN + * @see org.tensorflow.op.math.AccumulateN + */ + public AccumulateN accumulateN(Iterable> inputs, Shape shape) { + return AccumulateN.create(scope, inputs, shape); + } + /** * Builds an {@link Expm1} operation * @@ -1295,18 +1307,6 @@ public Real real(Operand input, DataType Tout) { return Real.create(scope, input, Tout); } - /** - * Builds an {@link AccumulateN} operation - * - * @param inputs A list of `Tensor` objects, each with same shape and type. - * @param shape Shape of elements of `inputs`. - * @return a new instance of AccumulateN - * @see org.tensorflow.op.math.AccumulateN - */ - public AccumulateN accumulateN(Iterable> inputs, Shape shape) { - return AccumulateN.create(scope, inputs, shape); - } - /** * Builds an {@link QuantizedAdd} operation * diff --git a/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/Ops.java b/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/Ops.java index 6c69fc405d1..7d663121535 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/Ops.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/Ops.java @@ -635,6 +635,20 @@ public ResourceStridedSliceAssign resourceStridedSliceAss return ResourceStridedSliceAssign.create(scope, ref, begin, end, strides, value, options); } + /** + * Builds an {@link VarHandleOp} operation + * + * @param dtype the type of this variable. Must agree with the dtypes + * @param shape The (possibly partially specified) shape of this variable. + * @param options carries optional attributes values + * @return a new instance of VarHandleOp + * @see org.tensorflow.op.core.VarHandleOp + */ + public VarHandleOp varHandleOp(DataType dtype, org.tensorflow.tools.Shape shape, + VarHandleOp.Options... options) { + return VarHandleOp.create(scope, dtype, shape, options); + } + /** * Builds an {@link TensorArrayPack} operation * @@ -650,20 +664,6 @@ public TensorArrayPack tensorArrayPack(Operand handle, Operand ImmutableConst immutableConst(DataType dtype, org.tensorflow.util.Shape shape, - String memoryRegionName) { - return ImmutableConst.create(scope, dtype, shape, memoryRegionName); - } - /** * Builds an {@link LinSpace} operation * @@ -1203,6 +1203,19 @@ public Constant constant(boolean[][] data) { return Constant.create(scope, data); } + /** + * Builds an {@link PlaceholderWithDefault} operation + * + * @param input The default value to produce when `output` is not fed. + * @param shape The (possibly partial) shape of the tensor. + * @return a new instance of PlaceholderWithDefault + * @see org.tensorflow.op.core.PlaceholderWithDefault + */ + public PlaceholderWithDefault placeholderWithDefault(Operand input, + org.tensorflow.tools.Shape shape) { + return PlaceholderWithDefault.create(scope, input, shape); + } + /** * Builds an {@link Reverse} operation * @@ -1243,6 +1256,20 @@ public Min min(Operand input, Operand axis, return Min.create(scope, input, axis, options); } + /** + * Builds an {@link Variable} operation + * + * @param shape The shape of the variable tensor. + * @param dtype The type of elements in the variable tensor. + * @param options carries optional attributes values + * @return a new instance of Variable + * @see org.tensorflow.op.core.Variable + */ + public Variable variable(org.tensorflow.tools.Shape shape, DataType dtype, + Variable.Options... options) { + return Variable.create(scope, shape, dtype, options); + } + /** * Builds an {@link OnesLike} operation * @@ -1278,19 +1305,6 @@ public Placeholder placeholder(DataType dtype, Placeholder.Options... return Placeholder.create(scope, dtype, options); } - /** - * Builds an {@link ParallelConcat} operation - * - * @param values Tensors to be concatenated. All must have size 1 in the first dimension - * @param shape the final shape of the result; should be equal to the shapes of any input - * @return a new instance of ParallelConcat - * @see org.tensorflow.op.core.ParallelConcat - */ - public ParallelConcat parallelConcat(Iterable> values, - org.tensorflow.util.Shape shape) { - return ParallelConcat.create(scope, values, shape); - } - /** * Builds an {@link Fingerprint} operation * @@ -1577,18 +1591,6 @@ public HashTable hashTable(DataType keyDtype, DataType valueDtype, return HashTable.create(scope, keyDtype, valueDtype, options); } - /** - * Builds an {@link EnsureShape} operation - * - * @param input A tensor, whose shape is to be validated. - * @param shape The expected (possibly partially specified) shape of the input tensor. - * @return a new instance of EnsureShape - * @see org.tensorflow.op.core.EnsureShape - */ - public EnsureShape ensureShape(Operand input, org.tensorflow.util.Shape shape) { - return EnsureShape.create(scope, input, shape); - } - /** * Builds an {@link Constant} operation * @@ -1738,6 +1740,19 @@ public Einsum einsum(Iterable> inputs, String equation) { return Einsum.create(scope, inputs, equation); } + /** + * Builds an {@link ParallelConcat} operation + * + * @param values Tensors to be concatenated. All must have size 1 in the first dimension + * @param shape the final shape of the result; should be equal to the shapes of any input + * @return a new instance of ParallelConcat + * @see org.tensorflow.op.core.ParallelConcat + */ + public ParallelConcat parallelConcat(Iterable> values, + org.tensorflow.tools.Shape shape) { + return ParallelConcat.create(scope, values, shape); + } + /** * Builds an {@link DynamicStitch} operation * @@ -1798,19 +1813,6 @@ public TensorScatterAdd tensorScatterAdd(Operand te return TensorScatterAdd.create(scope, tensor, indices, updates); } - /** - * Builds an {@link PlaceholderWithDefault} operation - * - * @param input The default value to produce when `output` is not fed. - * @param shape The (possibly partial) shape of the tensor. - * @return a new instance of PlaceholderWithDefault - * @see org.tensorflow.op.core.PlaceholderWithDefault - */ - public PlaceholderWithDefault placeholderWithDefault(Operand input, - org.tensorflow.util.Shape shape) { - return PlaceholderWithDefault.create(scope, input, shape); - } - /** * Builds an {@link Constant} operation * @@ -2323,20 +2325,6 @@ public Tile tile(Operand input, Operand multiple return Tile.create(scope, input, multiples); } - /** - * Builds an {@link TemporaryVariable} operation - * - * @param shape The shape of the variable tensor. - * @param dtype The type of elements in the variable tensor. - * @param options carries optional attributes values - * @return a new instance of TemporaryVariable - * @see org.tensorflow.op.core.TemporaryVariable - */ - public TemporaryVariable temporaryVariable(org.tensorflow.util.Shape shape, - DataType dtype, TemporaryVariable.Options... options) { - return TemporaryVariable.create(scope, shape, dtype, options); - } - /** * Builds an {@link TensorListPopBack} operation * @@ -2562,6 +2550,18 @@ public Split split(Operand axis, Operand value, Long numSplit) return Split.create(scope, axis, value, numSplit); } + /** + * Builds an {@link EnsureShape} operation + * + * @param input A tensor, whose shape is to be validated. + * @param shape The expected (possibly partially specified) shape of the input tensor. + * @return a new instance of EnsureShape + * @see org.tensorflow.op.core.EnsureShape + */ + public EnsureShape ensureShape(Operand input, org.tensorflow.tools.Shape shape) { + return EnsureShape.create(scope, input, shape); + } + /** * Builds an {@link RemoteFusedGraphExecute} operation * @@ -3121,20 +3121,6 @@ public MutableHashTable mutableHashTable(DataType keyDtype, DataType VarHandleOp varHandleOp(DataType dtype, org.tensorflow.util.Shape shape, - VarHandleOp.Options... options) { - return VarHandleOp.create(scope, dtype, shape, options); - } - /** * Builds an {@link TensorArrayConcat} operation * @@ -3794,6 +3780,20 @@ public IdentityN identityN(Iterable> input) { return IdentityN.create(scope, input); } + /** + * Builds an {@link TemporaryVariable} operation + * + * @param shape The shape of the variable tensor. + * @param dtype The type of elements in the variable tensor. + * @param options carries optional attributes values + * @return a new instance of TemporaryVariable + * @see org.tensorflow.op.core.TemporaryVariable + */ + public TemporaryVariable temporaryVariable(org.tensorflow.tools.Shape shape, + DataType dtype, TemporaryVariable.Options... options) { + return TemporaryVariable.create(scope, shape, dtype, options); + } + /** * Builds an {@link InplaceSub} operation * @@ -3868,6 +3868,20 @@ public Constant constant(double data) { return Constant.create(scope, data); } + /** + * Builds an {@link ImmutableConst} operation + * + * @param dtype Type of the returned tensor. + * @param shape Shape of the returned tensor. + * @param memoryRegionName Name of readonly memory region used by the tensor, see + * @return a new instance of ImmutableConst + * @see org.tensorflow.op.core.ImmutableConst + */ + public ImmutableConst immutableConst(DataType dtype, org.tensorflow.tools.Shape shape, + String memoryRegionName) { + return ImmutableConst.create(scope, dtype, shape, memoryRegionName); + } + /** * Builds an {@link ResourceApplyAdamWithAmsgrad} operation * @@ -3935,20 +3949,6 @@ public MapUnstageNoKey mapUnstageNoKey(Operand indices, List return MapUnstageNoKey.create(scope, indices, dtypes, options); } - /** - * Builds an {@link Variable} operation - * - * @param shape The shape of the variable tensor. - * @param dtype The type of elements in the variable tensor. - * @param options carries optional attributes values - * @return a new instance of Variable - * @see org.tensorflow.op.core.Variable - */ - public Variable variable(org.tensorflow.util.Shape shape, DataType dtype, - Variable.Options... options) { - return Variable.create(scope, shape, dtype, options); - } - /** * Builds an {@link ExtractVolumePatches} operation * diff --git a/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/SparseOps.java b/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/SparseOps.java index 6498bd6261a..bf334ec3519 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/SparseOps.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/SparseOps.java @@ -45,11 +45,11 @@ import org.tensorflow.op.sparse.SparseToDense; import org.tensorflow.op.sparse.SparseToSparseSetOperation; import org.tensorflow.op.sparse.TakeManySparseFromTensorsMap; +import org.tensorflow.tools.Shape; import org.tensorflow.types.TInt32; import org.tensorflow.types.TInt64; import org.tensorflow.types.TString; import org.tensorflow.types.family.TNumber; -import org.tensorflow.util.Shape; /** * An API for building {@code sparse} operations as {@link Op Op}s @@ -94,20 +94,6 @@ public AddManySparseToTensorsMap addManySparseToTensorsMap(Operand s return AddManySparseToTensorsMap.create(scope, sparseIndices, sparseValues, sparseShape, options); } - /** - * Builds an {@link SparseConditionalAccumulator} operation - * - * @param dtype The type of the value being accumulated. - * @param shape The shape of the values. - * @param options carries optional attributes values - * @return a new instance of SparseConditionalAccumulator - * @see org.tensorflow.op.sparse.SparseConditionalAccumulator - */ - public SparseConditionalAccumulator sparseConditionalAccumulator(DataType dtype, - Shape shape, SparseConditionalAccumulator.Options... options) { - return SparseConditionalAccumulator.create(scope, dtype, shape, options); - } - /** * Builds an {@link SparseAddGrad} operation * @@ -346,6 +332,20 @@ public SparseSparseMinimum sparseSparseMinimum(Operand aIndices, return SparseSparseMinimum.create(scope, aIndices, aValues, aShape, bIndices, bValues, bShape); } + /** + * Builds an {@link SparseConditionalAccumulator} operation + * + * @param dtype The type of the value being accumulated. + * @param shape The shape of the values. + * @param options carries optional attributes values + * @return a new instance of SparseConditionalAccumulator + * @see org.tensorflow.op.sparse.SparseConditionalAccumulator + */ + public SparseConditionalAccumulator sparseConditionalAccumulator(DataType dtype, + Shape shape, SparseConditionalAccumulator.Options... options) { + return SparseConditionalAccumulator.create(scope, dtype, shape, options); + } + /** * Builds an {@link SparseReshape} operation * diff --git a/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/TrainOps.java b/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/TrainOps.java index e15251b82fe..63af6d22205 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/TrainOps.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/TrainOps.java @@ -63,12 +63,12 @@ import org.tensorflow.op.train.SparseApplyProximalGradientDescent; import org.tensorflow.op.train.SparseApplyRmsProp; import org.tensorflow.op.train.TileGrad; +import org.tensorflow.tools.Shape; import org.tensorflow.types.TFloat; import org.tensorflow.types.TInt32; import org.tensorflow.types.TInt64; import org.tensorflow.types.TString; import org.tensorflow.types.family.TNumber; -import org.tensorflow.util.Shape; /** * An API for building {@code train} operations as {@link Op Op}s @@ -100,6 +100,20 @@ public SparseApplyAdagrad sparseApplyAdagrad(Operand ConditionalAccumulator conditionalAccumulator(DataType dtype, Shape shape, + ConditionalAccumulator.Options... options) { + return ConditionalAccumulator.create(scope, dtype, shape, options); + } + /** * Builds an {@link ApplyMomentum} operation * @@ -558,20 +572,6 @@ public SparseApplyAdadelta sparseApplyAdadelta(Operand return SparseApplyAdadelta.create(scope, var, accum, accumUpdate, lr, rho, epsilon, grad, indices, options); } - /** - * Builds an {@link ConditionalAccumulator} operation - * - * @param dtype The type of the value being accumulated. - * @param shape The shape of the values, can be [], in which case shape is unknown. - * @param options carries optional attributes values - * @return a new instance of ConditionalAccumulator - * @see org.tensorflow.op.train.ConditionalAccumulator - */ - public ConditionalAccumulator conditionalAccumulator(DataType dtype, Shape shape, - ConditionalAccumulator.Options... options) { - return ConditionalAccumulator.create(scope, dtype, shape, options); - } - /** * Builds an {@link Restore} operation * diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/collective/BroadcastRecv.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/collective/BroadcastRecv.java index dcbb9a2db69..7e99304ed53 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/collective/BroadcastRecv.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/collective/BroadcastRecv.java @@ -24,8 +24,8 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.tools.Shape; import org.tensorflow.types.family.TNumber; -import org.tensorflow.util.Shape; /** * Receives a tensor value broadcast from another device. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/collective/BroadcastSend.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/collective/BroadcastSend.java index 56edb5985f1..72dcda170ef 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/collective/BroadcastSend.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/collective/BroadcastSend.java @@ -23,8 +23,8 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.tools.Shape; import org.tensorflow.types.family.TNumber; -import org.tensorflow.util.Shape; /** * Broadcasts a tensor value to one or more other devices. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/AnonymousIteratorV2.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/AnonymousIteratorV2.java index e521200a736..860ff7ec002 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/AnonymousIteratorV2.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/AnonymousIteratorV2.java @@ -24,7 +24,7 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; -import org.tensorflow.util.Shape; +import org.tensorflow.tools.Shape; /** * A container for an iterator resource. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/AnonymousMultiDeviceIterator.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/AnonymousMultiDeviceIterator.java index 48a5dbe8943..aa5f1df880d 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/AnonymousMultiDeviceIterator.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/AnonymousMultiDeviceIterator.java @@ -24,7 +24,7 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; -import org.tensorflow.util.Shape; +import org.tensorflow.tools.Shape; /** * A container for a multi device iterator resource. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/AssertNextDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/AssertNextDataset.java index 1c303a7b399..3d989be5c55 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/AssertNextDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/AssertNextDataset.java @@ -25,8 +25,8 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.tools.Shape; import org.tensorflow.types.TString; -import org.tensorflow.util.Shape; /** */ diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/AutoShardDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/AutoShardDataset.java index 7345c9945b9..e158058ddf8 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/AutoShardDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/AutoShardDataset.java @@ -25,8 +25,8 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.tools.Shape; import org.tensorflow.types.TInt64; -import org.tensorflow.util.Shape; /** * Creates a dataset that shards the input dataset. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Barrier.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Barrier.java index 13f92017db8..853f22d2e50 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Barrier.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Barrier.java @@ -26,8 +26,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.tools.Shape; import org.tensorflow.types.TString; -import org.tensorflow.util.Shape; /** * Defines a barrier that persists across different graph executions. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/CSVDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/CSVDataset.java index 3bee87aeab2..bd55616a575 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/CSVDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/CSVDataset.java @@ -25,10 +25,10 @@ import org.tensorflow.op.Operands; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.tools.Shape; import org.tensorflow.types.TBool; import org.tensorflow.types.TInt64; import org.tensorflow.types.TString; -import org.tensorflow.util.Shape; /** */ diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/CacheDatasetV2.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/CacheDatasetV2.java index d88b1b9e703..e36e9778aa3 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/CacheDatasetV2.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/CacheDatasetV2.java @@ -25,8 +25,8 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.tools.Shape; import org.tensorflow.types.TString; -import org.tensorflow.util.Shape; /** */ diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ChooseFastestDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ChooseFastestDataset.java index 16cbbab0ac2..5b52d479f7a 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ChooseFastestDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ChooseFastestDataset.java @@ -26,7 +26,7 @@ import org.tensorflow.op.Operands; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; -import org.tensorflow.util.Shape; +import org.tensorflow.tools.Shape; /** */ diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/CollectiveGather.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/CollectiveGather.java index 6b32ed90546..6000b16a48f 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/CollectiveGather.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/CollectiveGather.java @@ -23,8 +23,8 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.tools.Shape; import org.tensorflow.types.family.TNumber; -import org.tensorflow.util.Shape; /** * Mutually accumulates multiple tensors of identical type and shape. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/DirectedInterleaveDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/DirectedInterleaveDataset.java index aef6855eee0..4210f213e4d 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/DirectedInterleaveDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/DirectedInterleaveDataset.java @@ -26,7 +26,7 @@ import org.tensorflow.op.Operands; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; -import org.tensorflow.util.Shape; +import org.tensorflow.tools.Shape; /** * A substitute for `InterleaveDataset` on a fixed list of `N` datasets. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/EnsureShape.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/EnsureShape.java index 8b5f14638d1..135655a6286 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/EnsureShape.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/EnsureShape.java @@ -24,7 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; -import org.tensorflow.util.Shape; +import org.tensorflow.tools.Shape; /** * Ensures that the tensor's shape matches the expected shape. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalAutoShardDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalAutoShardDataset.java index 31bd467d837..ff490a73298 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalAutoShardDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalAutoShardDataset.java @@ -25,8 +25,8 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.tools.Shape; import org.tensorflow.types.TInt64; -import org.tensorflow.util.Shape; /** * Creates a dataset that shards the input dataset. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalBytesProducedStatsDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalBytesProducedStatsDataset.java index 9ca561294e7..2d867aeb2ab 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalBytesProducedStatsDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalBytesProducedStatsDataset.java @@ -25,8 +25,8 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.tools.Shape; import org.tensorflow.types.TString; -import org.tensorflow.util.Shape; /** * Records the bytes size of each element of `input_dataset` in a StatsAggregator. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalChooseFastestDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalChooseFastestDataset.java index 5e05e0ee01d..7bf2f621773 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalChooseFastestDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalChooseFastestDataset.java @@ -26,7 +26,7 @@ import org.tensorflow.op.Operands; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; -import org.tensorflow.util.Shape; +import org.tensorflow.tools.Shape; /** */ diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalDenseToSparseBatchDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalDenseToSparseBatchDataset.java index 08a17505764..a0eafa3d135 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalDenseToSparseBatchDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalDenseToSparseBatchDataset.java @@ -25,8 +25,8 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.tools.Shape; import org.tensorflow.types.TInt64; -import org.tensorflow.util.Shape; /** * Creates a dataset that batches input elements into a SparseTensor. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalLatencyStatsDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalLatencyStatsDataset.java index e2ad04fdc3a..e610c6c04ea 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalLatencyStatsDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalLatencyStatsDataset.java @@ -25,8 +25,8 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.tools.Shape; import org.tensorflow.types.TString; -import org.tensorflow.util.Shape; /** * Records the latency of producing `input_dataset` elements in a StatsAggregator. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalMaxIntraOpParallelismDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalMaxIntraOpParallelismDataset.java index ee3d52c2c71..93593fa41fe 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalMaxIntraOpParallelismDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalMaxIntraOpParallelismDataset.java @@ -25,8 +25,8 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.tools.Shape; import org.tensorflow.types.TInt64; -import org.tensorflow.util.Shape; /** * Creates a dataset that overrides the maximum intra-op parallelism. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalParseExampleDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalParseExampleDataset.java index 3fa0419ccd8..50ffdb91fbb 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalParseExampleDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalParseExampleDataset.java @@ -26,8 +26,8 @@ import org.tensorflow.op.Operands; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.tools.Shape; import org.tensorflow.types.TInt64; -import org.tensorflow.util.Shape; /** * Transforms `input_dataset` containing `Example` protos as vectors of DT_STRING into a dataset of `Tensor` or `SparseTensor` objects representing the parsed features. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalPrivateThreadPoolDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalPrivateThreadPoolDataset.java index f4252d87acf..1a93bdcd469 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalPrivateThreadPoolDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalPrivateThreadPoolDataset.java @@ -25,8 +25,8 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.tools.Shape; import org.tensorflow.types.TInt64; -import org.tensorflow.util.Shape; /** * Creates a dataset that uses a custom thread pool to compute `input_dataset`. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalRandomDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalRandomDataset.java index e0a5a5e437b..f4bea88733f 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalRandomDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalRandomDataset.java @@ -25,8 +25,8 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.tools.Shape; import org.tensorflow.types.TInt64; -import org.tensorflow.util.Shape; /** * Creates a Dataset that returns pseudorandom numbers. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalRebatchDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalRebatchDataset.java index 465c401e4b9..3e55b85183a 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalRebatchDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalRebatchDataset.java @@ -25,8 +25,8 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.tools.Shape; import org.tensorflow.types.TInt64; -import org.tensorflow.util.Shape; /** * Creates a dataset that changes the batch size. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalSetStatsAggregatorDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalSetStatsAggregatorDataset.java index 645e62f635a..999a88c1cba 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalSetStatsAggregatorDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalSetStatsAggregatorDataset.java @@ -25,8 +25,8 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.tools.Shape; import org.tensorflow.types.TString; -import org.tensorflow.util.Shape; /** */ diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalSlidingWindowDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalSlidingWindowDataset.java index a616c38d7b0..2ebabd1091d 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalSlidingWindowDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalSlidingWindowDataset.java @@ -25,8 +25,8 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.tools.Shape; import org.tensorflow.types.TInt64; -import org.tensorflow.util.Shape; /** * Creates a dataset that passes a sliding window over `input_dataset`. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalSqlDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalSqlDataset.java index 43940b9bab1..de735b49947 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalSqlDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalSqlDataset.java @@ -25,8 +25,8 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.tools.Shape; import org.tensorflow.types.TString; -import org.tensorflow.util.Shape; /** * Creates a dataset that executes a SQL query and emits rows of the result set. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalUnbatchDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalUnbatchDataset.java index f1fff68c5dd..5fdd1a42c39 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalUnbatchDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExperimentalUnbatchDataset.java @@ -25,7 +25,7 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; -import org.tensorflow.util.Shape; +import org.tensorflow.tools.Shape; /** * A dataset that splits the elements of its input into multiple elements. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/IgnoreErrorsDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/IgnoreErrorsDataset.java index 6df6000e011..02fbf4cf69b 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/IgnoreErrorsDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/IgnoreErrorsDataset.java @@ -25,7 +25,7 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; -import org.tensorflow.util.Shape; +import org.tensorflow.tools.Shape; /** * Creates a dataset that contains the elements of `input_dataset` ignoring errors. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ImmutableConst.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ImmutableConst.java index 9e5b7cb9262..d41f7fd38be 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ImmutableConst.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ImmutableConst.java @@ -25,7 +25,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; -import org.tensorflow.util.Shape; +import org.tensorflow.tools.Shape; /** * Returns immutable tensor from memory region. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/InfeedDequeue.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/InfeedDequeue.java index e5000921438..abb3b021a79 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/InfeedDequeue.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/InfeedDequeue.java @@ -24,7 +24,7 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; -import org.tensorflow.util.Shape; +import org.tensorflow.tools.Shape; /** * A placeholder op for a value that will be fed into the computation. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/InfeedDequeueTuple.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/InfeedDequeueTuple.java index 4476e40a2a2..2947e67a645 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/InfeedDequeueTuple.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/InfeedDequeueTuple.java @@ -27,7 +27,7 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; -import org.tensorflow.util.Shape; +import org.tensorflow.tools.Shape; /** * Fetches multiple values from infeed as an XLA tuple. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/InfeedEnqueue.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/InfeedEnqueue.java index 16d4e9f4fe8..bf1665cc35a 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/InfeedEnqueue.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/InfeedEnqueue.java @@ -23,7 +23,7 @@ import org.tensorflow.OperationBuilder; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; -import org.tensorflow.util.Shape; +import org.tensorflow.tools.Shape; /** * An op which feeds a single Tensor value into the computation. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/InfeedEnqueueTuple.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/InfeedEnqueueTuple.java index d13389bc52a..5580c60433b 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/InfeedEnqueueTuple.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/InfeedEnqueueTuple.java @@ -24,7 +24,7 @@ import org.tensorflow.op.Operands; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; -import org.tensorflow.util.Shape; +import org.tensorflow.tools.Shape; /** * Feeds multiple Tensor values into the computation as an XLA tuple. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LMDBDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LMDBDataset.java index 14a43a69bbf..65be9ccce20 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LMDBDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LMDBDataset.java @@ -25,8 +25,8 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.tools.Shape; import org.tensorflow.types.TString; -import org.tensorflow.util.Shape; /** */ diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MaxIntraOpParallelismDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MaxIntraOpParallelismDataset.java index 82c939cfa57..b454153dc6d 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MaxIntraOpParallelismDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MaxIntraOpParallelismDataset.java @@ -25,8 +25,8 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.tools.Shape; import org.tensorflow.types.TInt64; -import org.tensorflow.util.Shape; /** * Creates a dataset that overrides the maximum intra-op parallelism. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MutableDenseHashTable.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MutableDenseHashTable.java index a621ca456f8..d5e8b2ab6cb 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MutableDenseHashTable.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MutableDenseHashTable.java @@ -25,7 +25,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; -import org.tensorflow.util.Shape; +import org.tensorflow.tools.Shape; /** * Creates an empty hash table that uses tensors as the backing store. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MutableHashTableOfTensors.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MutableHashTableOfTensors.java index b2cbde9cb92..9d83597dea4 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MutableHashTableOfTensors.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MutableHashTableOfTensors.java @@ -25,7 +25,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; -import org.tensorflow.util.Shape; +import org.tensorflow.tools.Shape; /** * Creates an empty hash table. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/NcclBroadcast.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/NcclBroadcast.java index 9ee8dd33ec5..81439f8d6de 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/NcclBroadcast.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/NcclBroadcast.java @@ -23,8 +23,8 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.tools.Shape; import org.tensorflow.types.family.TNumber; -import org.tensorflow.util.Shape; /** * Sends `input` to all devices that are connected to the output. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/NonSerializableDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/NonSerializableDataset.java index 706298584cf..8d05fabfd11 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/NonSerializableDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/NonSerializableDataset.java @@ -25,7 +25,7 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; -import org.tensorflow.util.Shape; +import org.tensorflow.tools.Shape; /** */ diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/OutfeedDequeue.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/OutfeedDequeue.java index 5d51a36b9f0..ba4f5264655 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/OutfeedDequeue.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/OutfeedDequeue.java @@ -24,7 +24,7 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; -import org.tensorflow.util.Shape; +import org.tensorflow.tools.Shape; /** * Retrieves a single tensor from the computation outfeed. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/OutfeedDequeueTuple.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/OutfeedDequeueTuple.java index 1e623d607a1..d904c90a9e7 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/OutfeedDequeueTuple.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/OutfeedDequeueTuple.java @@ -27,7 +27,7 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; -import org.tensorflow.util.Shape; +import org.tensorflow.tools.Shape; /** * Retrieve multiple values from the computation outfeed. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ParallelConcat.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ParallelConcat.java index ba098d941c8..b85bd3bcfac 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ParallelConcat.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ParallelConcat.java @@ -25,7 +25,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; -import org.tensorflow.util.Shape; +import org.tensorflow.tools.Shape; /** * Concatenates a list of `N` tensors along the first dimension. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Placeholder.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Placeholder.java index be81c9bcea9..ff3eb45d098 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Placeholder.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Placeholder.java @@ -25,7 +25,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; -import org.tensorflow.util.Shape; +import org.tensorflow.tools.Shape; /** * A placeholder op for a value that will be fed into the computation. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/PlaceholderWithDefault.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/PlaceholderWithDefault.java index 80a61a6dd1b..de37b2d4046 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/PlaceholderWithDefault.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/PlaceholderWithDefault.java @@ -24,7 +24,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; -import org.tensorflow.util.Shape; +import org.tensorflow.tools.Shape; /** * A placeholder op that passes through `input` when its output is not fed. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Prelinearize.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Prelinearize.java index 782aeeb83ad..64ddafc7802 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Prelinearize.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Prelinearize.java @@ -24,7 +24,7 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; -import org.tensorflow.util.Shape; +import org.tensorflow.tools.Shape; /** * An op which linearizes one Tensor value to an opaque variant tensor. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/PrelinearizeTuple.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/PrelinearizeTuple.java index 2ce43568a6a..2e98ead74c0 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/PrelinearizeTuple.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/PrelinearizeTuple.java @@ -25,7 +25,7 @@ import org.tensorflow.op.Operands; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; -import org.tensorflow.util.Shape; +import org.tensorflow.tools.Shape; /** * An op which linearizes multiple Tensor values to an opaque variant tensor. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/PrivateThreadPoolDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/PrivateThreadPoolDataset.java index 60090d8aa74..35f5f3dd19f 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/PrivateThreadPoolDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/PrivateThreadPoolDataset.java @@ -25,8 +25,8 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.tools.Shape; import org.tensorflow.types.TInt64; -import org.tensorflow.util.Shape; /** * Creates a dataset that uses a custom thread pool to compute `input_dataset`. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RebatchDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RebatchDataset.java index a380455efc5..932db3d2dc0 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RebatchDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RebatchDataset.java @@ -25,8 +25,8 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.tools.Shape; import org.tensorflow.types.TInt64; -import org.tensorflow.util.Shape; /** * Creates a dataset that changes the batch size. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceConditionalAccumulator.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceConditionalAccumulator.java index e77df4e24cc..3a3f670c355 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceConditionalAccumulator.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceConditionalAccumulator.java @@ -24,7 +24,7 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; -import org.tensorflow.util.Shape; +import org.tensorflow.tools.Shape; /** * A conditional accumulator for aggregating gradients. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/SamplingDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/SamplingDataset.java index 81c2cef1870..9633b73ef2f 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/SamplingDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/SamplingDataset.java @@ -25,9 +25,9 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.tools.Shape; import org.tensorflow.types.TFloat; import org.tensorflow.types.TInt64; -import org.tensorflow.util.Shape; /** * Creates a dataset that contains `rate` elements from the `input_dataset`. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ShardDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ShardDataset.java index ff28e9fdb57..0c2fb54645f 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ShardDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ShardDataset.java @@ -25,8 +25,8 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.tools.Shape; import org.tensorflow.types.TInt64; -import org.tensorflow.util.Shape; /** * Creates a `Dataset` that includes only 1/`num_shards` of this dataset. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ShuffleDatasetV2.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ShuffleDatasetV2.java index d0f47069ac6..ef2f7e10dc9 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ShuffleDatasetV2.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ShuffleDatasetV2.java @@ -25,8 +25,8 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.tools.Shape; import org.tensorflow.types.TInt64; -import org.tensorflow.util.Shape; /** */ diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/SleepDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/SleepDataset.java index 15b20b1b642..fe20f5a4538 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/SleepDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/SleepDataset.java @@ -25,8 +25,8 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.tools.Shape; import org.tensorflow.types.TInt64; -import org.tensorflow.util.Shape; /** */ diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/SlidingWindowDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/SlidingWindowDataset.java index ff26fbe8074..8dbfef4985b 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/SlidingWindowDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/SlidingWindowDataset.java @@ -25,8 +25,8 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.tools.Shape; import org.tensorflow.types.TInt64; -import org.tensorflow.util.Shape; /** * Creates a dataset that passes a sliding window over `input_dataset`. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/SnapshotDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/SnapshotDataset.java index f95b46714e4..a0a78c25c1b 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/SnapshotDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/SnapshotDataset.java @@ -25,8 +25,8 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.tools.Shape; import org.tensorflow.types.TString; -import org.tensorflow.util.Shape; /** * Creates a dataset that will write to / read from a snapshot. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TemporaryVariable.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TemporaryVariable.java index dc396de1dc4..2e21c12f409 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TemporaryVariable.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TemporaryVariable.java @@ -25,7 +25,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; -import org.tensorflow.util.Shape; +import org.tensorflow.tools.Shape; /** * Returns a tensor that may be mutated, but only persists within a single step. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArray.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArray.java index fd2c9d23942..fe57ab3ace6 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArray.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArray.java @@ -25,9 +25,9 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.tools.Shape; import org.tensorflow.types.TFloat; import org.tensorflow.types.TInt32; -import org.tensorflow.util.Shape; /** * An array of Tensors of given size. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArrayConcat.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArrayConcat.java index 16ff2321b6e..196283a34b1 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArrayConcat.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArrayConcat.java @@ -25,9 +25,9 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.tools.Shape; import org.tensorflow.types.TFloat; import org.tensorflow.types.TInt64; -import org.tensorflow.util.Shape; /** * Concat the elements from the TensorArray into value `value`. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArrayGather.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArrayGather.java index b0234e86829..ae97f185078 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArrayGather.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArrayGather.java @@ -25,9 +25,9 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.tools.Shape; import org.tensorflow.types.TFloat; import org.tensorflow.types.TInt32; -import org.tensorflow.util.Shape; /** * Gather specific elements from the TensorArray into output `value`. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArrayPack.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArrayPack.java index 9204d28ee1d..3c466d4aae9 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArrayPack.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArrayPack.java @@ -25,9 +25,9 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.tools.Shape; import org.tensorflow.types.TFloat; import org.tensorflow.types.TString; -import org.tensorflow.util.Shape; /** * @param data type for {@code value()} output diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListConcat.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListConcat.java index 67d3f87b54a..68e0f17aefb 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListConcat.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListConcat.java @@ -25,8 +25,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.tools.Shape; import org.tensorflow.types.TInt64; -import org.tensorflow.util.Shape; /** * Concats all tensors in the list along the 0th dimension. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ThreadPoolDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ThreadPoolDataset.java index e6ab633293b..bdf2c4fd59e 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ThreadPoolDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ThreadPoolDataset.java @@ -25,7 +25,7 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; -import org.tensorflow.util.Shape; +import org.tensorflow.tools.Shape; /** * Creates a dataset that uses a custom thread pool to compute `input_dataset`. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/UniqueDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/UniqueDataset.java index 7dcd9246c2f..bde42312c80 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/UniqueDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/UniqueDataset.java @@ -25,7 +25,7 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; -import org.tensorflow.util.Shape; +import org.tensorflow.tools.Shape; /** * Creates a dataset that contains the unique elements of `input_dataset`. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/VarHandleOp.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/VarHandleOp.java index 711b7e16f65..0259dfb40ed 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/VarHandleOp.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/VarHandleOp.java @@ -25,7 +25,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; -import org.tensorflow.util.Shape; +import org.tensorflow.tools.Shape; /** * Creates a handle to a Variable resource. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Variable.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Variable.java index 93c1294500a..4091dbd86d0 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Variable.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Variable.java @@ -25,7 +25,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; -import org.tensorflow.util.Shape; +import org.tensorflow.tools.Shape; /** * Holds state in the form of a tensor that persists across steps. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/AnonymousIterator.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/AnonymousIterator.java index 4ad10d4531e..7cfa337acc1 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/AnonymousIterator.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/AnonymousIterator.java @@ -26,7 +26,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; -import org.tensorflow.util.Shape; +import org.tensorflow.tools.Shape; /** * A container for an iterator resource. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/BatchDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/BatchDataset.java index 816e1ec9deb..3e9af3cad98 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/BatchDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/BatchDataset.java @@ -25,9 +25,9 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.tools.Shape; import org.tensorflow.types.TBool; import org.tensorflow.types.TInt64; -import org.tensorflow.util.Shape; /** * Creates a dataset that batches `batch_size` elements from `input_dataset`. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/BytesProducedStatsDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/BytesProducedStatsDataset.java index 90b29b2e806..92658ff989a 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/BytesProducedStatsDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/BytesProducedStatsDataset.java @@ -25,8 +25,8 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.tools.Shape; import org.tensorflow.types.TString; -import org.tensorflow.util.Shape; /** * Records the bytes size of each element of `input_dataset` in a StatsAggregator. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/CacheDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/CacheDataset.java index d16e3b9a69a..a2a6b9159fd 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/CacheDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/CacheDataset.java @@ -25,8 +25,8 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.tools.Shape; import org.tensorflow.types.TString; -import org.tensorflow.util.Shape; /** * Creates a dataset that caches elements from `input_dataset`. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ConcatenateDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ConcatenateDataset.java index 8f54f8ef70f..7dc6b70c6a5 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ConcatenateDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ConcatenateDataset.java @@ -25,7 +25,7 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; -import org.tensorflow.util.Shape; +import org.tensorflow.tools.Shape; /** * Creates a dataset that concatenates `input_dataset` with `another_dataset`. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/DatasetToSingleElement.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/DatasetToSingleElement.java index 33cf42b1c7e..8613b13fa14 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/DatasetToSingleElement.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/DatasetToSingleElement.java @@ -27,7 +27,7 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; -import org.tensorflow.util.Shape; +import org.tensorflow.tools.Shape; /** * Outputs the single element from the given dataset. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/DenseToSparseBatchDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/DenseToSparseBatchDataset.java index 221734344c8..6476652a4b1 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/DenseToSparseBatchDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/DenseToSparseBatchDataset.java @@ -25,8 +25,8 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.tools.Shape; import org.tensorflow.types.TInt64; -import org.tensorflow.util.Shape; /** * Creates a dataset that batches input elements into a SparseTensor. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalAssertNextDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalAssertNextDataset.java index 996cf70481e..22870c2413a 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalAssertNextDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalAssertNextDataset.java @@ -25,8 +25,8 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.tools.Shape; import org.tensorflow.types.TString; -import org.tensorflow.util.Shape; /** */ diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalCsvDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalCsvDataset.java index c3f4c8b91d6..79da6fc659e 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalCsvDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalCsvDataset.java @@ -25,10 +25,10 @@ import org.tensorflow.op.Operands; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.tools.Shape; import org.tensorflow.types.TBool; import org.tensorflow.types.TInt64; import org.tensorflow.types.TString; -import org.tensorflow.util.Shape; /** */ diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalDirectedInterleaveDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalDirectedInterleaveDataset.java index f098fdb12ba..ba305cb6a6e 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalDirectedInterleaveDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalDirectedInterleaveDataset.java @@ -26,7 +26,7 @@ import org.tensorflow.op.Operands; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; -import org.tensorflow.util.Shape; +import org.tensorflow.tools.Shape; /** * A substitute for `InterleaveDataset` on a fixed list of `N` datasets. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalIgnoreErrorsDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalIgnoreErrorsDataset.java index a93a95ed047..7794fe34c2d 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalIgnoreErrorsDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalIgnoreErrorsDataset.java @@ -25,7 +25,7 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; -import org.tensorflow.util.Shape; +import org.tensorflow.tools.Shape; /** * Creates a dataset that contains the elements of `input_dataset` ignoring errors. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalLmdbDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalLmdbDataset.java index 5c7f6d458f8..0d0ef4626ea 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalLmdbDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalLmdbDataset.java @@ -25,8 +25,8 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.tools.Shape; import org.tensorflow.types.TString; -import org.tensorflow.util.Shape; /** */ diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalNonSerializableDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalNonSerializableDataset.java index 777df64b330..43aeb055fa5 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalNonSerializableDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalNonSerializableDataset.java @@ -25,7 +25,7 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; -import org.tensorflow.util.Shape; +import org.tensorflow.tools.Shape; /** */ diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalSleepDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalSleepDataset.java index 0748201d51d..db1f67dbed7 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalSleepDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalSleepDataset.java @@ -25,8 +25,8 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.tools.Shape; import org.tensorflow.types.TInt64; -import org.tensorflow.util.Shape; /** */ diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalThreadPoolDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalThreadPoolDataset.java index 6c7da5c2a7e..e31471c7203 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalThreadPoolDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalThreadPoolDataset.java @@ -25,7 +25,7 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; -import org.tensorflow.util.Shape; +import org.tensorflow.tools.Shape; /** * Creates a dataset that uses a custom thread pool to compute `input_dataset`. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalUniqueDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalUniqueDataset.java index 1c345e2631c..e22bd401ea8 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalUniqueDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ExperimentalUniqueDataset.java @@ -25,7 +25,7 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; -import org.tensorflow.util.Shape; +import org.tensorflow.tools.Shape; /** * Creates a dataset that contains the unique elements of `input_dataset`. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/FilterByLastComponentDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/FilterByLastComponentDataset.java index c2768716342..2e2a57199bf 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/FilterByLastComponentDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/FilterByLastComponentDataset.java @@ -25,7 +25,7 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; -import org.tensorflow.util.Shape; +import org.tensorflow.tools.Shape; /** * Creates a dataset containing elements of first component of `input_dataset` having true in the last component. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/Iterator.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/Iterator.java index 905fbe6c8aa..ec7a81406a7 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/Iterator.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/Iterator.java @@ -25,7 +25,7 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; -import org.tensorflow.util.Shape; +import org.tensorflow.tools.Shape; /** */ diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/IteratorFromStringHandle.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/IteratorFromStringHandle.java index 61b27017999..056150cab93 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/IteratorFromStringHandle.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/IteratorFromStringHandle.java @@ -25,8 +25,8 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.tools.Shape; import org.tensorflow.types.TString; -import org.tensorflow.util.Shape; /** */ diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/IteratorGetNext.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/IteratorGetNext.java index 9299e80ff53..0089363b6bb 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/IteratorGetNext.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/IteratorGetNext.java @@ -28,7 +28,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; -import org.tensorflow.util.Shape; +import org.tensorflow.tools.Shape; /** * Gets the next output from the given iterator . diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/IteratorGetNextAsOptional.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/IteratorGetNextAsOptional.java index 0092cbc83a2..80179a6191e 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/IteratorGetNextAsOptional.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/IteratorGetNextAsOptional.java @@ -26,7 +26,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; -import org.tensorflow.util.Shape; +import org.tensorflow.tools.Shape; /** * Gets the next output from the given iterator as an Optional variant. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/IteratorGetNextSync.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/IteratorGetNextSync.java index d79a0a1da44..41ae62f5251 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/IteratorGetNextSync.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/IteratorGetNextSync.java @@ -28,7 +28,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; -import org.tensorflow.util.Shape; +import org.tensorflow.tools.Shape; /** * Gets the next output from the given iterator. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/LatencyStatsDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/LatencyStatsDataset.java index 194803d2929..7f0cf4ef560 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/LatencyStatsDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/LatencyStatsDataset.java @@ -25,8 +25,8 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.tools.Shape; import org.tensorflow.types.TString; -import org.tensorflow.util.Shape; /** * Records the latency of producing `input_dataset` elements in a StatsAggregator. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ModelDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ModelDataset.java index b6c537e69e6..f48bacd90b4 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ModelDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ModelDataset.java @@ -25,7 +25,7 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; -import org.tensorflow.util.Shape; +import org.tensorflow.tools.Shape; /** * Identity transformation that models performance. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/MultiDeviceIterator.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/MultiDeviceIterator.java index 248602716ba..ce87756aff9 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/MultiDeviceIterator.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/MultiDeviceIterator.java @@ -25,7 +25,7 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; -import org.tensorflow.util.Shape; +import org.tensorflow.tools.Shape; /** * Creates a MultiDeviceIterator resource. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/MultiDeviceIteratorFromStringHandle.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/MultiDeviceIteratorFromStringHandle.java index e879183bb41..e8b6b80e502 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/MultiDeviceIteratorFromStringHandle.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/MultiDeviceIteratorFromStringHandle.java @@ -25,8 +25,8 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.tools.Shape; import org.tensorflow.types.TString; -import org.tensorflow.util.Shape; /** * Generates a MultiDeviceIterator resource from its provided string handle. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/MultiDeviceIteratorGetNextFromShard.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/MultiDeviceIteratorGetNextFromShard.java index ba3dfea3c97..2a54923c315 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/MultiDeviceIteratorGetNextFromShard.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/MultiDeviceIteratorGetNextFromShard.java @@ -27,9 +27,9 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.tools.Shape; import org.tensorflow.types.TInt32; import org.tensorflow.types.TInt64; -import org.tensorflow.util.Shape; /** * Gets next element for the provided shard number. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/OptimizeDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/OptimizeDataset.java index 712948c8617..9003ba3b850 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/OptimizeDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/OptimizeDataset.java @@ -25,8 +25,8 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.tools.Shape; import org.tensorflow.types.TString; -import org.tensorflow.util.Shape; /** * Creates a dataset by applying optimizations to `input_dataset`. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/OptionalGetValue.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/OptionalGetValue.java index 4eabb10ea5c..c095a72faf5 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/OptionalGetValue.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/OptionalGetValue.java @@ -28,7 +28,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; -import org.tensorflow.util.Shape; +import org.tensorflow.tools.Shape; /** * Returns the value stored in an Optional variant or raises an error if none exists. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/PaddedBatchDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/PaddedBatchDataset.java index fd0983d885e..773646c3cbd 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/PaddedBatchDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/PaddedBatchDataset.java @@ -25,9 +25,9 @@ import org.tensorflow.op.Operands; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.tools.Shape; import org.tensorflow.types.TBool; import org.tensorflow.types.TInt64; -import org.tensorflow.util.Shape; /** * Creates a dataset that batches and pads `batch_size` elements from the input. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ParseExampleDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ParseExampleDataset.java index 66fdf4e3698..3a0b727d50f 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ParseExampleDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ParseExampleDataset.java @@ -26,8 +26,8 @@ import org.tensorflow.op.Operands; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.tools.Shape; import org.tensorflow.types.TInt64; -import org.tensorflow.util.Shape; /** * Transforms `input_dataset` containing `Example` protos as vectors of DT_STRING into a dataset of `Tensor` or `SparseTensor` objects representing the parsed features. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/PrefetchDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/PrefetchDataset.java index b287fef5742..eab31556d43 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/PrefetchDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/PrefetchDataset.java @@ -25,8 +25,8 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.tools.Shape; import org.tensorflow.types.TInt64; -import org.tensorflow.util.Shape; /** * Creates a dataset that asynchronously prefetches elements from `input_dataset`. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/RandomDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/RandomDataset.java index 1a729542cb8..d5b4c426f8e 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/RandomDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/RandomDataset.java @@ -25,8 +25,8 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.tools.Shape; import org.tensorflow.types.TInt64; -import org.tensorflow.util.Shape; /** * Creates a Dataset that returns pseudorandom numbers. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/RangeDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/RangeDataset.java index b56444e780e..bd3d1cd8d2b 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/RangeDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/RangeDataset.java @@ -25,8 +25,8 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.tools.Shape; import org.tensorflow.types.TInt64; -import org.tensorflow.util.Shape; /** * Creates a dataset with a range of values. Corresponds to python's xrange. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/RepeatDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/RepeatDataset.java index 08d46244ff0..ae222ce75ba 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/RepeatDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/RepeatDataset.java @@ -25,8 +25,8 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.tools.Shape; import org.tensorflow.types.TInt64; -import org.tensorflow.util.Shape; /** * Creates a dataset that emits the outputs of `input_dataset` `count` times. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/SetStatsAggregatorDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/SetStatsAggregatorDataset.java index 2c1a36baa60..3ba993008d5 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/SetStatsAggregatorDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/SetStatsAggregatorDataset.java @@ -25,8 +25,8 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.tools.Shape; import org.tensorflow.types.TString; -import org.tensorflow.util.Shape; /** */ diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ShuffleAndRepeatDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ShuffleAndRepeatDataset.java index c22c3f3f2b5..df54035d905 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ShuffleAndRepeatDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ShuffleAndRepeatDataset.java @@ -25,8 +25,8 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.tools.Shape; import org.tensorflow.types.TInt64; -import org.tensorflow.util.Shape; /** * Creates a dataset that shuffles and repeats elements from `input_dataset` diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ShuffleDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ShuffleDataset.java index 68dfe51615e..aac17663d01 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ShuffleDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ShuffleDataset.java @@ -25,8 +25,8 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.tools.Shape; import org.tensorflow.types.TInt64; -import org.tensorflow.util.Shape; /** * Creates a dataset that shuffles elements from `input_dataset` pseudorandomly. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/SkipDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/SkipDataset.java index f24988f8326..1c9a4d6143e 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/SkipDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/SkipDataset.java @@ -25,8 +25,8 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.tools.Shape; import org.tensorflow.types.TInt64; -import org.tensorflow.util.Shape; /** * Creates a dataset that skips `count` elements from the `input_dataset`. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/SqlDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/SqlDataset.java index 07078fa4c2e..4b34f137723 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/SqlDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/SqlDataset.java @@ -25,8 +25,8 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.tools.Shape; import org.tensorflow.types.TString; -import org.tensorflow.util.Shape; /** * Creates a dataset that executes a SQL query and emits rows of the result set. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/TakeDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/TakeDataset.java index 7b2cd078690..93791200bd6 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/TakeDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/TakeDataset.java @@ -25,8 +25,8 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.tools.Shape; import org.tensorflow.types.TInt64; -import org.tensorflow.util.Shape; /** * Creates a dataset that contains `count` elements from the `input_dataset`. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/TensorDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/TensorDataset.java index 862731cfe50..7ddcf02df67 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/TensorDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/TensorDataset.java @@ -25,7 +25,7 @@ import org.tensorflow.op.Operands; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; -import org.tensorflow.util.Shape; +import org.tensorflow.tools.Shape; /** * Creates a dataset that emits `components` as a tuple of tensors once. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/TensorSliceDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/TensorSliceDataset.java index 5c193addc0c..3b578643367 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/TensorSliceDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/TensorSliceDataset.java @@ -25,7 +25,7 @@ import org.tensorflow.op.Operands; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; -import org.tensorflow.util.Shape; +import org.tensorflow.tools.Shape; /** * Creates a dataset that emits each dim-0 slice of `components` once. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/UnbatchDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/UnbatchDataset.java index 5618961abcc..c1c818d19e9 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/UnbatchDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/UnbatchDataset.java @@ -25,7 +25,7 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; -import org.tensorflow.util.Shape; +import org.tensorflow.tools.Shape; /** * A dataset that splits the elements of its input into multiple elements. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/WindowDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/WindowDataset.java index 2180da993f0..1e45f672e35 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/WindowDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/WindowDataset.java @@ -25,9 +25,9 @@ import org.tensorflow.Output; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; +import org.tensorflow.tools.Shape; import org.tensorflow.types.TBool; import org.tensorflow.types.TInt64; -import org.tensorflow.util.Shape; /** * A dataset that creates window datasets from the input dataset. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ZipDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ZipDataset.java index 6e8b003c540..6bb146668d1 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ZipDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ZipDataset.java @@ -26,7 +26,7 @@ import org.tensorflow.op.Operands; import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; -import org.tensorflow.util.Shape; +import org.tensorflow.tools.Shape; /** * Creates a dataset that zips together `input_datasets`. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/FifoQueue.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/FifoQueue.java index e5b432776c3..ec55a72751c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/FifoQueue.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/FifoQueue.java @@ -26,7 +26,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; -import org.tensorflow.util.Shape; +import org.tensorflow.tools.Shape; /** * A queue that produces elements in first-in first-out order. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/PaddingFifoQueue.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/PaddingFifoQueue.java index 4c7be6599ae..f61d97473ed 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/PaddingFifoQueue.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/PaddingFifoQueue.java @@ -26,7 +26,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; -import org.tensorflow.util.Shape; +import org.tensorflow.tools.Shape; /** * A queue that produces elements in first-in first-out order. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ParseExample.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ParseExample.java index ab1be51b8e1..5fa13a134a0 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ParseExample.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ParseExample.java @@ -28,9 +28,9 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.tools.Shape; import org.tensorflow.types.TInt64; import org.tensorflow.types.TString; -import org.tensorflow.util.Shape; /** * Transforms a vector of brain.Example protos (as strings) into typed tensors. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ParseSequenceExample.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ParseSequenceExample.java index 807142d8f8d..b8f86055912 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ParseSequenceExample.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ParseSequenceExample.java @@ -28,9 +28,9 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.tools.Shape; import org.tensorflow.types.TInt64; import org.tensorflow.types.TString; -import org.tensorflow.util.Shape; /** * Transforms a vector of brain.SequenceExample protos (as strings) into typed tensors. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ParseSingleExample.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ParseSingleExample.java index 57863920e6d..c4466b7bba4 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ParseSingleExample.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ParseSingleExample.java @@ -28,9 +28,9 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.tools.Shape; import org.tensorflow.types.TInt64; import org.tensorflow.types.TString; -import org.tensorflow.util.Shape; /** * Transforms a tf.Example proto (as a string) into typed tensors. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ParseSingleSequenceExample.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ParseSingleSequenceExample.java index 9e9ce3d9fac..269706669ba 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ParseSingleSequenceExample.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ParseSingleSequenceExample.java @@ -28,9 +28,9 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.tools.Shape; import org.tensorflow.types.TInt64; import org.tensorflow.types.TString; -import org.tensorflow.util.Shape; /** * Transforms a scalar brain.SequenceExample proto (as strings) into typed tensors. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/PriorityQueue.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/PriorityQueue.java index c681a506b7d..9abfe3b0556 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/PriorityQueue.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/PriorityQueue.java @@ -26,7 +26,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; -import org.tensorflow.util.Shape; +import org.tensorflow.tools.Shape; /** * A queue that produces elements sorted by the first component value. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/RandomShuffleQueue.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/RandomShuffleQueue.java index fd301e499d1..b86db69392b 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/RandomShuffleQueue.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/RandomShuffleQueue.java @@ -26,7 +26,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; -import org.tensorflow.util.Shape; +import org.tensorflow.tools.Shape; /** * A queue that randomizes the order of elements. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/AccumulateN.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/AccumulateN.java index 96c84f7e997..63f9e35cbad 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/AccumulateN.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/AccumulateN.java @@ -25,7 +25,7 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; -import org.tensorflow.util.Shape; +import org.tensorflow.tools.Shape; /** * Returns the element-wise sum of a list of tensors. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseConditionalAccumulator.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseConditionalAccumulator.java index 2700581b906..670b32344d2 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseConditionalAccumulator.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseConditionalAccumulator.java @@ -25,8 +25,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.tools.Shape; import org.tensorflow.types.TString; -import org.tensorflow.util.Shape; /** * A conditional accumulator for aggregating sparse gradients. diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ConditionalAccumulator.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ConditionalAccumulator.java index c8c2f845380..6c9a7cf3487 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ConditionalAccumulator.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ConditionalAccumulator.java @@ -25,8 +25,8 @@ import org.tensorflow.op.PrimitiveOp; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Operator; +import org.tensorflow.tools.Shape; import org.tensorflow.types.TString; -import org.tensorflow.util.Shape; /** * A conditional accumulator for aggregating gradients. diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/AbstractOperation.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/AbstractOperation.java index 4569e22ddcc..703fcfa9638 100644 --- a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/AbstractOperation.java +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/AbstractOperation.java @@ -15,7 +15,7 @@ package org.tensorflow; -import org.tensorflow.util.Shape; +import org.tensorflow.tools.Shape; /** * Base class for {@link Operation} implementations. diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/DataType.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/DataType.java index 7947096a4c0..4cf2cfeb21f 100644 --- a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/DataType.java +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/DataType.java @@ -16,7 +16,7 @@ package org.tensorflow; import org.tensorflow.internal.c_api.TF_Tensor; -import org.tensorflow.util.Shape; +import org.tensorflow.tools.Shape; /** Represents a type of elements in a {@link Tensor} */ public final class DataType { diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/EagerOperation.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/EagerOperation.java index 29ef3da1afa..9cb8287f6f7 100644 --- a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/EagerOperation.java +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/EagerOperation.java @@ -16,7 +16,7 @@ package org.tensorflow; import java.util.concurrent.atomic.AtomicReferenceArray; -import org.tensorflow.util.Shape; +import org.tensorflow.tools.Shape; /** * Implementation of an {@link Operation} executed eagerly. diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/EagerOperationBuilder.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/EagerOperationBuilder.java index d8cd3612dad..73273f65c89 100644 --- a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/EagerOperationBuilder.java +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/EagerOperationBuilder.java @@ -17,7 +17,7 @@ import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; -import org.tensorflow.util.Shape; +import org.tensorflow.tools.Shape; /** * An {@link OperationBuilder} for building {@link Operation Operations} that are executed eagerly. diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/GraphOperation.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/GraphOperation.java index 13131566952..68b1edad399 100644 --- a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/GraphOperation.java +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/GraphOperation.java @@ -15,7 +15,7 @@ package org.tensorflow; -import org.tensorflow.util.Shape; +import org.tensorflow.tools.Shape; /** * Implementation for an {@link Operation} added as a node to a {@link Graph}. diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/GraphOperationBuilder.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/GraphOperationBuilder.java index de1c4065d18..41f6374363c 100644 --- a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/GraphOperationBuilder.java +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/GraphOperationBuilder.java @@ -16,7 +16,7 @@ package org.tensorflow; import java.nio.charset.Charset; -import org.tensorflow.util.Shape; +import org.tensorflow.tools.Shape; /** An {@link OperationBuilder} for adding {@link GraphOperation}s to a {@link Graph}. */ public final class GraphOperationBuilder implements OperationBuilder { diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/OperationBuilder.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/OperationBuilder.java index 266e734f378..17611fae979 100644 --- a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/OperationBuilder.java +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/OperationBuilder.java @@ -15,7 +15,7 @@ package org.tensorflow; -import org.tensorflow.util.Shape; +import org.tensorflow.tools.Shape; /** * A builder for {@link Operation}s. diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/Output.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/Output.java index 2303053c553..180bb4733ef 100644 --- a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/Output.java +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/Output.java @@ -16,7 +16,7 @@ package org.tensorflow; import java.util.Objects; -import org.tensorflow.util.Shape; +import org.tensorflow.tools.Shape; /** * A symbolic handle to a tensor produced by an {@link Operation}. diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/Tensor.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/Tensor.java index f0cbcf51568..6deb69ec50b 100644 --- a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/Tensor.java +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/Tensor.java @@ -27,7 +27,7 @@ import java.util.Arrays; import java.util.HashMap; import org.tensorflow.internal.c_api.TF_Tensor; -import org.tensorflow.util.Shape; +import org.tensorflow.tools.Shape; import org.tensorflow.types.TBool; import org.tensorflow.types.TDouble; import org.tensorflow.types.TFloat; diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/internal/buffer/RawBufferHelper.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/internal/buffer/RawBufferHelper.java index 472f6d37129..2dbf6bd8b7e 100644 --- a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/internal/buffer/RawBufferHelper.java +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/internal/buffer/RawBufferHelper.java @@ -2,11 +2,11 @@ import java.lang.reflect.Field; import org.bytedeco.javacpp.Pointer; -import org.tensorflow.util.buffer.ByteDataBuffer; -import org.tensorflow.util.buffer.LongDataBuffer; -import org.tensorflow.util.buffer.impl.raw.ByteRawDataBuffer; -import org.tensorflow.util.buffer.impl.raw.LongRawDataBuffer; -import org.tensorflow.util.buffer.impl.raw.UnsafeReference; +import org.tensorflow.tools.buffer.ByteDataBuffer; +import org.tensorflow.tools.buffer.LongDataBuffer; +import org.tensorflow.tools.buffer.impl.raw.ByteRawDataBuffer; +import org.tensorflow.tools.buffer.impl.raw.LongRawDataBuffer; +import org.tensorflow.tools.buffer.impl.raw.UnsafeReference; final class RawBufferHelper { diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/internal/buffer/StringTensorBuffer.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/internal/buffer/StringTensorBuffer.java index 919812610e4..f47f16b817e 100644 --- a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/internal/buffer/StringTensorBuffer.java +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/internal/buffer/StringTensorBuffer.java @@ -1,18 +1,13 @@ package org.tensorflow.internal.buffer; import com.google.common.base.Charsets; -import java.nio.ByteBuffer; -import java.nio.LongBuffer; import java.nio.ReadOnlyBufferException; -import org.tensorflow.util.buffer.ByteDataBuffer; -import org.tensorflow.util.buffer.DataBuffer; -import org.tensorflow.util.buffer.DataBuffers; -import org.tensorflow.util.buffer.LongDataBuffer; -import org.tensorflow.util.buffer.impl.AbstractDataBuffer; -import org.tensorflow.util.buffer.impl.Validator; -import org.tensorflow.util.buffer.impl.raw.ByteRawDataBuffer; -import org.tensorflow.util.buffer.impl.raw.LongRawDataBuffer; -import org.tensorflow.util.ndarray.NdArray; +import org.tensorflow.tools.buffer.ByteDataBuffer; +import org.tensorflow.tools.buffer.DataBuffer; +import org.tensorflow.tools.buffer.LongDataBuffer; +import org.tensorflow.tools.buffer.impl.AbstractDataBuffer; +import org.tensorflow.tools.buffer.impl.Validator; +import org.tensorflow.tools.ndarray.NdArray; public class StringTensorBuffer extends AbstractDataBuffer { diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/internal/buffer/TensorBuffers.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/internal/buffer/TensorBuffers.java index 9bc637cac03..46896f59d0a 100644 --- a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/internal/buffer/TensorBuffers.java +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/internal/buffer/TensorBuffers.java @@ -7,17 +7,17 @@ import java.nio.LongBuffer; import org.bytedeco.javacpp.Pointer; import org.tensorflow.internal.c_api.TF_Tensor; -import org.tensorflow.util.buffer.ByteDataBuffer; -import org.tensorflow.util.buffer.DataBuffers; -import org.tensorflow.util.buffer.DoubleDataBuffer; -import org.tensorflow.util.buffer.FloatDataBuffer; -import org.tensorflow.util.buffer.IntDataBuffer; -import org.tensorflow.util.buffer.LongDataBuffer; -import org.tensorflow.util.buffer.impl.raw.ByteRawDataBuffer; -import org.tensorflow.util.buffer.impl.raw.DoubleRawDataBuffer; -import org.tensorflow.util.buffer.impl.raw.FloatRawDataBuffer; -import org.tensorflow.util.buffer.impl.raw.IntRawDataBuffer; -import org.tensorflow.util.buffer.impl.raw.LongRawDataBuffer; +import org.tensorflow.tools.buffer.ByteDataBuffer; +import org.tensorflow.tools.buffer.DataBuffers; +import org.tensorflow.tools.buffer.DoubleDataBuffer; +import org.tensorflow.tools.buffer.FloatDataBuffer; +import org.tensorflow.tools.buffer.IntDataBuffer; +import org.tensorflow.tools.buffer.LongDataBuffer; +import org.tensorflow.tools.buffer.impl.raw.ByteRawDataBuffer; +import org.tensorflow.tools.buffer.impl.raw.DoubleRawDataBuffer; +import org.tensorflow.tools.buffer.impl.raw.FloatRawDataBuffer; +import org.tensorflow.tools.buffer.impl.raw.IntRawDataBuffer; +import org.tensorflow.tools.buffer.impl.raw.LongRawDataBuffer; public final class TensorBuffers { diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TBool.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TBool.java index dabf9cf3f57..634279d417e 100644 --- a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TBool.java +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TBool.java @@ -4,14 +4,14 @@ import org.tensorflow.Tensor; import org.tensorflow.internal.buffer.TensorBuffers; import org.tensorflow.internal.c_api.TF_Tensor; -import org.tensorflow.util.buffer.BooleanDataBuffer; -import org.tensorflow.util.buffer.ByteDataBuffer; -import org.tensorflow.util.buffer.DataBuffers; -import org.tensorflow.util.buffer.adapter.BooleanDataAdapter; -import org.tensorflow.util.ndarray.BooleanNdArray; -import org.tensorflow.util.ndarray.NdArray; -import org.tensorflow.util.Shape; -import org.tensorflow.util.ndarray.impl.dense.BooleanDenseNdArray; +import org.tensorflow.tools.buffer.BooleanDataBuffer; +import org.tensorflow.tools.buffer.ByteDataBuffer; +import org.tensorflow.tools.buffer.DataBuffers; +import org.tensorflow.tools.buffer.adapter.BooleanDataAdapter; +import org.tensorflow.tools.ndarray.BooleanNdArray; +import org.tensorflow.tools.ndarray.NdArray; +import org.tensorflow.tools.Shape; +import org.tensorflow.tools.ndarray.impl.dense.BooleanDenseNdArray; import org.tensorflow.types.family.TType; public interface TBool extends BooleanNdArray, TType { diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TDouble.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TDouble.java index 87eba65535d..b8c6f4a7018 100644 --- a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TDouble.java +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TDouble.java @@ -4,11 +4,11 @@ import org.tensorflow.Tensor; import org.tensorflow.internal.buffer.TensorBuffers; import org.tensorflow.internal.c_api.TF_Tensor; -import org.tensorflow.util.buffer.DoubleDataBuffer; -import org.tensorflow.util.ndarray.DoubleNdArray; -import org.tensorflow.util.ndarray.NdArray; -import org.tensorflow.util.Shape; -import org.tensorflow.util.ndarray.impl.dense.DoubleDenseNdArray; +import org.tensorflow.tools.buffer.DoubleDataBuffer; +import org.tensorflow.tools.ndarray.DoubleNdArray; +import org.tensorflow.tools.ndarray.NdArray; +import org.tensorflow.tools.Shape; +import org.tensorflow.tools.ndarray.impl.dense.DoubleDenseNdArray; import org.tensorflow.types.family.TDecimal; public interface TDouble extends DoubleNdArray, TDecimal { diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TFloat.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TFloat.java index 12c5e7172ab..c620e0fc8a3 100644 --- a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TFloat.java +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TFloat.java @@ -4,11 +4,11 @@ import org.tensorflow.Tensor; import org.tensorflow.internal.buffer.TensorBuffers; import org.tensorflow.internal.c_api.TF_Tensor; -import org.tensorflow.util.buffer.FloatDataBuffer; -import org.tensorflow.util.ndarray.FloatNdArray; -import org.tensorflow.util.ndarray.NdArray; -import org.tensorflow.util.Shape; -import org.tensorflow.util.ndarray.impl.dense.FloatDenseNdArray; +import org.tensorflow.tools.buffer.FloatDataBuffer; +import org.tensorflow.tools.ndarray.FloatNdArray; +import org.tensorflow.tools.ndarray.NdArray; +import org.tensorflow.tools.Shape; +import org.tensorflow.tools.ndarray.impl.dense.FloatDenseNdArray; import org.tensorflow.types.family.TDecimal; public interface TFloat extends FloatNdArray, TDecimal { diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TInt32.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TInt32.java index 16e08f39181..874cfc615e5 100644 --- a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TInt32.java +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TInt32.java @@ -4,11 +4,11 @@ import org.tensorflow.Tensor; import org.tensorflow.internal.buffer.TensorBuffers; import org.tensorflow.internal.c_api.TF_Tensor; -import org.tensorflow.util.buffer.IntDataBuffer; -import org.tensorflow.util.ndarray.IntNdArray; -import org.tensorflow.util.ndarray.NdArray; -import org.tensorflow.util.Shape; -import org.tensorflow.util.ndarray.impl.dense.IntDenseNdArray; +import org.tensorflow.tools.buffer.IntDataBuffer; +import org.tensorflow.tools.ndarray.IntNdArray; +import org.tensorflow.tools.ndarray.NdArray; +import org.tensorflow.tools.Shape; +import org.tensorflow.tools.ndarray.impl.dense.IntDenseNdArray; import org.tensorflow.types.family.TNumber; public interface TInt32 extends IntNdArray, TNumber { diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TInt64.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TInt64.java index 7eb6e118df8..d7d5cf12caf 100644 --- a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TInt64.java +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TInt64.java @@ -4,11 +4,11 @@ import org.tensorflow.Tensor; import org.tensorflow.internal.buffer.TensorBuffers; import org.tensorflow.internal.c_api.TF_Tensor; -import org.tensorflow.util.buffer.LongDataBuffer; -import org.tensorflow.util.ndarray.LongNdArray; -import org.tensorflow.util.ndarray.NdArray; -import org.tensorflow.util.Shape; -import org.tensorflow.util.ndarray.impl.dense.LongDenseNdArray; +import org.tensorflow.tools.buffer.LongDataBuffer; +import org.tensorflow.tools.ndarray.LongNdArray; +import org.tensorflow.tools.ndarray.NdArray; +import org.tensorflow.tools.Shape; +import org.tensorflow.tools.ndarray.impl.dense.LongDenseNdArray; import org.tensorflow.types.family.TNumber; public interface TInt64 extends LongNdArray, TNumber { diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TString.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TString.java index f24227ab32d..91c46564998 100644 --- a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TString.java +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TString.java @@ -7,11 +7,11 @@ import org.tensorflow.internal.buffer.StringTensorBuffer; import org.tensorflow.internal.buffer.TensorBuffers; import org.tensorflow.internal.c_api.TF_Tensor; -import org.tensorflow.util.buffer.DataBuffer; -import org.tensorflow.util.ndarray.NdArray; -import org.tensorflow.util.ndarray.NdArrays; -import org.tensorflow.util.Shape; -import org.tensorflow.util.ndarray.impl.dense.DenseNdArray; +import org.tensorflow.tools.buffer.DataBuffer; +import org.tensorflow.tools.ndarray.NdArray; +import org.tensorflow.tools.ndarray.NdArrays; +import org.tensorflow.tools.Shape; +import org.tensorflow.tools.ndarray.impl.dense.DenseNdArray; import org.tensorflow.types.family.TType; public interface TString extends NdArray, TType { diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TUInt8.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TUInt8.java index e8913fd461f..7af9df4a951 100644 --- a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TUInt8.java +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TUInt8.java @@ -4,11 +4,11 @@ import org.tensorflow.Tensor; import org.tensorflow.internal.buffer.TensorBuffers; import org.tensorflow.internal.c_api.TF_Tensor; -import org.tensorflow.util.buffer.ByteDataBuffer; -import org.tensorflow.util.ndarray.ByteNdArray; -import org.tensorflow.util.ndarray.NdArray; -import org.tensorflow.util.Shape; -import org.tensorflow.util.ndarray.impl.dense.ByteDenseNdArray; +import org.tensorflow.tools.buffer.ByteDataBuffer; +import org.tensorflow.tools.ndarray.ByteNdArray; +import org.tensorflow.tools.ndarray.NdArray; +import org.tensorflow.tools.Shape; +import org.tensorflow.tools.ndarray.impl.dense.ByteDenseNdArray; import org.tensorflow.types.family.TNumber; public interface TUInt8 extends ByteNdArray, TNumber { diff --git a/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/EagerOperationBuilderTest.java b/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/EagerOperationBuilderTest.java index 11a01ff2bd9..7536d0b65a1 100644 --- a/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/EagerOperationBuilderTest.java +++ b/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/EagerOperationBuilderTest.java @@ -20,7 +20,7 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; -import org.tensorflow.util.Shape; +import org.tensorflow.tools.Shape; import org.tensorflow.types.TFloat; import org.tensorflow.types.TInt32; diff --git a/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/GraphOperationBuilderTest.java b/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/GraphOperationBuilderTest.java index a066f3770c9..eb797f7944c 100644 --- a/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/GraphOperationBuilderTest.java +++ b/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/GraphOperationBuilderTest.java @@ -23,7 +23,7 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; -import org.tensorflow.util.Shape; +import org.tensorflow.tools.Shape; import org.tensorflow.types.TBool; import org.tensorflow.types.TFloat; import org.tensorflow.types.TInt32; diff --git a/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/op/core/GeneratedOperationsTest.java b/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/op/core/GeneratedOperationsTest.java index ac80f3b6f7f..f6b342433d1 100644 --- a/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/op/core/GeneratedOperationsTest.java +++ b/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/op/core/GeneratedOperationsTest.java @@ -25,7 +25,7 @@ import org.tensorflow.Operand; import org.tensorflow.Session; import org.tensorflow.Tensor; -import org.tensorflow.util.Shape; +import org.tensorflow.tools.Shape; import org.tensorflow.op.Ops; import org.tensorflow.types.TInt32; diff --git a/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/types/NumericTypesTestBase.java b/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/types/NumericTypesTestBase.java index a1930d1a217..86bc76ca361 100644 --- a/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/types/NumericTypesTestBase.java +++ b/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/types/NumericTypesTestBase.java @@ -5,11 +5,11 @@ import org.junit.Test; import org.tensorflow.EagerSession; import org.tensorflow.Tensor; -import org.tensorflow.util.ndarray.IntNdArray; -import org.tensorflow.util.ndarray.NdArray; -import org.tensorflow.util.ndarray.NdArrays; -import org.tensorflow.util.Shape; -import org.tensorflow.util.ndarray.index.Indices; +import org.tensorflow.tools.ndarray.IntNdArray; +import org.tensorflow.tools.ndarray.NdArray; +import org.tensorflow.tools.ndarray.NdArrays; +import org.tensorflow.tools.Shape; +import org.tensorflow.tools.ndarray.index.Indices; import org.tensorflow.op.Ops; import org.tensorflow.op.core.Constant; import org.tensorflow.op.math.Sub; diff --git a/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/types/TDoubleTest.java b/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/types/TDoubleTest.java index ebb7ca3a325..9455aae7e7c 100644 --- a/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/types/TDoubleTest.java +++ b/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/types/TDoubleTest.java @@ -1,7 +1,7 @@ package org.tensorflow.types; import org.tensorflow.Tensor; -import org.tensorflow.util.Shape; +import org.tensorflow.tools.Shape; public class TDoubleTest extends NumericTypesTestBase { diff --git a/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/types/TFloatTest.java b/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/types/TFloatTest.java index 69f44795749..c335e55b509 100644 --- a/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/types/TFloatTest.java +++ b/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/types/TFloatTest.java @@ -1,7 +1,7 @@ package org.tensorflow.types; import org.tensorflow.Tensor; -import org.tensorflow.util.Shape; +import org.tensorflow.tools.Shape; public class TFloatTest extends NumericTypesTestBase { diff --git a/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/types/TInt32Test.java b/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/types/TInt32Test.java index b4c06737123..a15c053ad62 100644 --- a/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/types/TInt32Test.java +++ b/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/types/TInt32Test.java @@ -1,7 +1,7 @@ package org.tensorflow.types; import org.tensorflow.Tensor; -import org.tensorflow.util.Shape; +import org.tensorflow.tools.Shape; public class TInt32Test extends NumericTypesTestBase { diff --git a/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/types/TInt64Test.java b/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/types/TInt64Test.java index b19348b7893..af877cb3035 100644 --- a/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/types/TInt64Test.java +++ b/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/types/TInt64Test.java @@ -1,7 +1,7 @@ package org.tensorflow.types; import org.tensorflow.Tensor; -import org.tensorflow.util.Shape; +import org.tensorflow.tools.Shape; public class TInt64Test extends NumericTypesTestBase { diff --git a/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/types/TUInt8Test.java b/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/types/TUInt8Test.java index e2b4822f59d..14b3d4ef1b7 100644 --- a/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/types/TUInt8Test.java +++ b/tensorflow-core/tensorflow-core-api/src/test/java/org/tensorflow/types/TUInt8Test.java @@ -1,7 +1,7 @@ package org.tensorflow.types; import org.tensorflow.Tensor; -import org.tensorflow.util.Shape; +import org.tensorflow.tools.Shape; public class TUInt8Test extends NumericTypesTestBase { diff --git a/tensorflow-utils/README.md b/tensorflow-tools/README.md similarity index 62% rename from tensorflow-utils/README.md rename to tensorflow-tools/README.md index d7598de9837..98e553b498f 100644 --- a/tensorflow-utils/README.md +++ b/tensorflow-tools/README.md @@ -1,18 +1,18 @@ -# TensorFlow Utility Library +# TensorFlow Tools ## Introduction -TensorFlow Utils library contains various utility classes required by the TensorFlow Core API. +TensorFlow Tools is a utility library used by TensorFlow to accomplish tasks that are not easily +achievable using a standard JDK. As opposed to other artifacts in this repository, this library does +not depend on TensorFlow runtime itself and can be imported by any other projects running on a JVM +that wants to make use of those tools. For example, an instance of `NdArray` could easily be passed +from one library to another for sharing data. -As opposed to other artifacts in this repository, this library does not depend on TensorFlow runtime -and can be imported by any other projects running on a standard JVM. For example, an instance of -`NdArray` could easily be passed from one library to another for sharing data. - -To import TensorFlow NdArray in your project, simply add the following dependency: +To import TensorFlow Tools in your project, simply add the following dependency: ```xml org.tensorflow - tensorflow-utils + tensorflow-tools 0.1.0-SNAPSHOT ``` @@ -21,21 +21,18 @@ To import TensorFlow NdArray in your project, simply add the following dependenc Note: For convenience, the helper interface `StaticApi` is providing access to most of the important features of this library in a more readable fashion. It is suggested to import static helpers of -this interface in every class working with TensorFlow NdArray as follow. +this interface in every class working with TensorFlow Tools as follow. ```java -import static org.tensorflow.util.StaticApi.*; +import static org.tensorflow.tools.StaticApi.*; ``` All examples of this README page are based on this import statement. ### Data Buffers -Instances of `DataBuffer` map contiguous segments of memory with 64-bits indexation and supports -generic parametrization while still allowing direct access to primitive types. Such memory segments -could be standard Java arrays, JDK NIO buffers or native memory. - -By supporting 64-bits indexation, they theoretically allow the storage and manipulation of data -records up to 8216 PB. In addition, it can serialize and deserialize data of any type (and not only -primitive types, as with the `java.util.nio`). +Instances of `DataBuffer` map contiguous segments of memory with 64-bits indexing and supports +generic parametrization while still allowing direct access to primitive types. Such segments +could be standard Java arrays, JDK NIO buffers or native memory. In addition, it can serialize and +deserialize data of any type (and not only primitive types, as with `java.util.nio`). ```java // Allocate a buffer of 4K int values @@ -59,13 +56,11 @@ assertEquals(2, bufferB.getInt(0)); ### ND Arrays -TensorFlow NdArray provides an interface called `NdArray` for wrapping up a `DataBuffer` to expose -an API for traversing, reading or writing data to small or large multi-dimensional data structures -from the JVM. - -The need of additional utilities to handle those data structures became obvious when users observed -slow performances by using standard multidimensional arrays in Java, resulting from the -non-contiguous storage of the data and the multiple dereferences required to access the values. +Instances of `NdArray` are used to view memory segments stored in a `DataBuffer` as a +multidimensional arrays and to provide an API for traversing, reading, writing and slicing +their data. The goal of these tools is to replace the usage of standard multidimensional Java arrays +(e.g. `new int[][][]`) since those results in slow performances, from the non-contiguous +storage of their data and the multiple dereferences required to access their values. ```java // Allocating a 3D matrix of 2x3x2 @@ -75,11 +70,11 @@ assertEquals(3, matrix3d.rank()); // Initializing 3D matrix data with vectors from the first dimension (index 0) matrix3d.elements(0).forEach(matrix -> { assertEquals(2, matrix.rank()); - assertEquals(shape(3, 2), matrix.shape()); + assertEquals(shapeOf(3, 2), matrix.shape()); matrix - .set(vector(1, 2), 0) - .set(vector(3, 4), 1) - .set(vector(5, 6), 2); + .set(vectorOf(1, 2), 0) + .set(vectorOf(3, 4), 1) + .set(vectorOf(5, 6), 2); }); // Visit all scalars of 3D matrix, printing their coordinates and value @@ -99,17 +94,16 @@ assertEquals(8, matrix3d.getInt(0, 1, 1)); // Slicing the 3D matrix so we only keep the second element of the second dimension IntNdArray slice = matrix3d.slice(all(), at(1)); assertEquals(2, slice.rank()); -assertEquals(shape(2, 2), slice.shape()); +assertEquals(shapeOf(2, 2), slice.shape()); assertEquals(7, slice.getInt(0, 0)); // (0, 1, 0) in the original matrix assertEquals(3, slice.getInt(1, 0)); // (1, 1, 0) in the original matrix ``` ## Integration with TensorFlow -Like previously stated, TensorFlow Utils is independent of any other TensorFlow runtime library, -making it a good choice for manipulating multi-dimensional data structures from anywhere. But here -is how it is actually used by the [TensorFlow Core API](https://github.com/tensorflow/java/tree/master/tensorflow-core/tensorflow-core-api) -to map and manipulate tensor data. +TensorFlow tools are independent of the TensorFlow runtime library, making it a good choice for +manipulating multi-dimensional data structures from anywhere. As an example, here +is how it is actually done by the [TensorFlow Core API](https://github.com/tensorflow/java/tree/master/tensorflow-core/tensorflow-core-api): ```java // Allocate a tensor of 32-bits integer of the shape (2, 3, 2) diff --git a/tensorflow-utils/pom.xml b/tensorflow-tools/pom.xml similarity index 98% rename from tensorflow-utils/pom.xml rename to tensorflow-tools/pom.xml index 868a9a5245e..9f8d64a8b6b 100644 --- a/tensorflow-utils/pom.xml +++ b/tensorflow-tools/pom.xml @@ -24,7 +24,7 @@ tensorflow-java 0.1.0-SNAPSHOT - tensorflow-utils + tensorflow-tools jar TensorFlow Utility Library diff --git a/tensorflow-utils/src/main/java/org/tensorflow/util/Shape.java b/tensorflow-tools/src/main/java/org/tensorflow/tools/Shape.java similarity index 99% rename from tensorflow-utils/src/main/java/org/tensorflow/util/Shape.java rename to tensorflow-tools/src/main/java/org/tensorflow/tools/Shape.java index e0c5d3f09ba..201d052bf23 100644 --- a/tensorflow-utils/src/main/java/org/tensorflow/util/Shape.java +++ b/tensorflow-tools/src/main/java/org/tensorflow/tools/Shape.java @@ -15,7 +15,7 @@ ======================================================================= */ -package org.tensorflow.util; +package org.tensorflow.tools; import java.util.Arrays; diff --git a/tensorflow-utils/src/main/java/org/tensorflow/util/StaticApi.java b/tensorflow-tools/src/main/java/org/tensorflow/tools/StaticApi.java similarity index 94% rename from tensorflow-utils/src/main/java/org/tensorflow/util/StaticApi.java rename to tensorflow-tools/src/main/java/org/tensorflow/tools/StaticApi.java index 5710ee4b278..ffb01198245 100644 --- a/tensorflow-utils/src/main/java/org/tensorflow/util/StaticApi.java +++ b/tensorflow-tools/src/main/java/org/tensorflow/tools/StaticApi.java @@ -1,26 +1,26 @@ -package org.tensorflow.util; - -import org.tensorflow.util.buffer.BooleanDataBuffer; -import org.tensorflow.util.buffer.ByteDataBuffer; -import org.tensorflow.util.buffer.DataBuffers; -import org.tensorflow.util.buffer.DoubleDataBuffer; -import org.tensorflow.util.buffer.FloatDataBuffer; -import org.tensorflow.util.buffer.LongDataBuffer; -import org.tensorflow.util.buffer.ShortDataBuffer; -import org.tensorflow.util.ndarray.ByteNdArray; -import org.tensorflow.util.ndarray.DoubleNdArray; -import org.tensorflow.util.buffer.DataBuffer; -import org.tensorflow.util.buffer.IntDataBuffer; -import org.tensorflow.util.ndarray.BooleanNdArray; -import org.tensorflow.util.ndarray.IllegalRankException; -import org.tensorflow.util.ndarray.FloatNdArray; -import org.tensorflow.util.ndarray.IntNdArray; -import org.tensorflow.util.ndarray.LongNdArray; -import org.tensorflow.util.ndarray.NdArray; -import org.tensorflow.util.ndarray.NdArrays; -import org.tensorflow.util.ndarray.ShortNdArray; -import org.tensorflow.util.ndarray.index.Index; -import org.tensorflow.util.ndarray.index.Indices; +package org.tensorflow.tools; + +import org.tensorflow.tools.buffer.BooleanDataBuffer; +import org.tensorflow.tools.buffer.ByteDataBuffer; +import org.tensorflow.tools.buffer.DataBuffers; +import org.tensorflow.tools.buffer.DoubleDataBuffer; +import org.tensorflow.tools.buffer.FloatDataBuffer; +import org.tensorflow.tools.buffer.LongDataBuffer; +import org.tensorflow.tools.buffer.ShortDataBuffer; +import org.tensorflow.tools.ndarray.ByteNdArray; +import org.tensorflow.tools.ndarray.DoubleNdArray; +import org.tensorflow.tools.buffer.DataBuffer; +import org.tensorflow.tools.buffer.IntDataBuffer; +import org.tensorflow.tools.ndarray.BooleanNdArray; +import org.tensorflow.tools.ndarray.IllegalRankException; +import org.tensorflow.tools.ndarray.FloatNdArray; +import org.tensorflow.tools.ndarray.IntNdArray; +import org.tensorflow.tools.ndarray.LongNdArray; +import org.tensorflow.tools.ndarray.NdArray; +import org.tensorflow.tools.ndarray.NdArrays; +import org.tensorflow.tools.ndarray.ShortNdArray; +import org.tensorflow.tools.ndarray.index.Index; +import org.tensorflow.tools.ndarray.index.Indices; /** * Helper class for instantiating NIO utility objects. diff --git a/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/BooleanDataBuffer.java b/tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/BooleanDataBuffer.java similarity index 99% rename from tensorflow-utils/src/main/java/org/tensorflow/util/buffer/BooleanDataBuffer.java rename to tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/BooleanDataBuffer.java index e410292584a..177178bebfb 100644 --- a/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/BooleanDataBuffer.java +++ b/tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/BooleanDataBuffer.java @@ -14,7 +14,7 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.util.buffer; +package org.tensorflow.tools.buffer; import java.nio.BufferOverflowException; import java.nio.BufferUnderflowException; diff --git a/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/ByteDataBuffer.java b/tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/ByteDataBuffer.java similarity index 99% rename from tensorflow-utils/src/main/java/org/tensorflow/util/buffer/ByteDataBuffer.java rename to tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/ByteDataBuffer.java index 73a8ef3c269..56bd35b9954 100644 --- a/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/ByteDataBuffer.java +++ b/tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/ByteDataBuffer.java @@ -14,7 +14,7 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.util.buffer; +package org.tensorflow.tools.buffer; import java.nio.BufferOverflowException; import java.nio.BufferUnderflowException; diff --git a/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/DataBuffer.java b/tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/DataBuffer.java similarity index 99% rename from tensorflow-utils/src/main/java/org/tensorflow/util/buffer/DataBuffer.java rename to tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/DataBuffer.java index a05dd64990f..b814d736d29 100644 --- a/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/DataBuffer.java +++ b/tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/DataBuffer.java @@ -15,7 +15,7 @@ ======================================================================= */ -package org.tensorflow.util.buffer; +package org.tensorflow.tools.buffer; import java.nio.ReadOnlyBufferException; diff --git a/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/DataBuffers.java b/tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/DataBuffers.java similarity index 86% rename from tensorflow-utils/src/main/java/org/tensorflow/util/buffer/DataBuffers.java rename to tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/DataBuffers.java index 3f355c4c874..980f589c4b4 100644 --- a/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/DataBuffers.java +++ b/tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/DataBuffers.java @@ -14,7 +14,7 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.util.buffer; +package org.tensorflow.tools.buffer; import java.nio.ByteBuffer; import java.nio.DoubleBuffer; @@ -22,37 +22,37 @@ import java.nio.IntBuffer; import java.nio.LongBuffer; import java.nio.ShortBuffer; -import org.tensorflow.util.buffer.adapter.BooleanDataAdapter; -import org.tensorflow.util.buffer.adapter.DataAdapter; -import org.tensorflow.util.buffer.adapter.DoubleDataAdapter; -import org.tensorflow.util.buffer.adapter.FloatDataAdapter; -import org.tensorflow.util.buffer.adapter.IntDataAdapter; -import org.tensorflow.util.buffer.adapter.LongDataAdapter; -import org.tensorflow.util.buffer.adapter.ShortDataAdapter; -import org.tensorflow.util.buffer.impl.jdk.ByteJdkDataBuffer; -import org.tensorflow.util.buffer.impl.jdk.DoubleJdkDataBuffer; -import org.tensorflow.util.buffer.impl.jdk.FloatJdkDataBuffer; -import org.tensorflow.util.buffer.impl.jdk.IntJdkDataBuffer; -import org.tensorflow.util.buffer.impl.jdk.LongJdkDataBuffer; -import org.tensorflow.util.buffer.impl.jdk.ShortJdkDataBuffer; -import org.tensorflow.util.buffer.impl.misc.ArrayDataBuffer; -import org.tensorflow.util.buffer.impl.misc.BitSetDataBuffer; -import org.tensorflow.util.buffer.impl.misc.BooleanArrayDataBuffer; -import org.tensorflow.util.buffer.impl.raw.BooleanRawDataBuffer; -import org.tensorflow.util.buffer.impl.raw.ByteRawDataBuffer; -import org.tensorflow.util.buffer.impl.raw.DoubleRawDataBuffer; -import org.tensorflow.util.buffer.impl.raw.FloatRawDataBuffer; -import org.tensorflow.util.buffer.impl.raw.IntRawDataBuffer; -import org.tensorflow.util.buffer.impl.raw.LongRawDataBuffer; -import org.tensorflow.util.buffer.impl.raw.ShortRawDataBuffer; -import org.tensorflow.util.buffer.impl.raw.UnsafeReference; -import org.tensorflow.util.buffer.impl.virtual.BooleanVirtualDataBuffer; -import org.tensorflow.util.buffer.impl.virtual.DoubleVirtualDataBuffer; -import org.tensorflow.util.buffer.impl.virtual.FloatVirtualDataBuffer; -import org.tensorflow.util.buffer.impl.virtual.IntVirtualDataBuffer; -import org.tensorflow.util.buffer.impl.virtual.LongVirtualDataBuffer; -import org.tensorflow.util.buffer.impl.virtual.ShortVirtualDataBuffer; -import org.tensorflow.util.buffer.impl.virtual.VirtualDataBuffer; +import org.tensorflow.tools.buffer.adapter.BooleanDataAdapter; +import org.tensorflow.tools.buffer.adapter.DataAdapter; +import org.tensorflow.tools.buffer.adapter.DoubleDataAdapter; +import org.tensorflow.tools.buffer.adapter.FloatDataAdapter; +import org.tensorflow.tools.buffer.adapter.IntDataAdapter; +import org.tensorflow.tools.buffer.adapter.LongDataAdapter; +import org.tensorflow.tools.buffer.adapter.ShortDataAdapter; +import org.tensorflow.tools.buffer.impl.jdk.ByteJdkDataBuffer; +import org.tensorflow.tools.buffer.impl.jdk.DoubleJdkDataBuffer; +import org.tensorflow.tools.buffer.impl.jdk.IntJdkDataBuffer; +import org.tensorflow.tools.buffer.impl.jdk.LongJdkDataBuffer; +import org.tensorflow.tools.buffer.impl.jdk.ShortJdkDataBuffer; +import org.tensorflow.tools.buffer.impl.misc.ArrayDataBuffer; +import org.tensorflow.tools.buffer.impl.virtual.BooleanVirtualDataBuffer; +import org.tensorflow.tools.buffer.impl.virtual.DoubleVirtualDataBuffer; +import org.tensorflow.tools.buffer.impl.virtual.FloatVirtualDataBuffer; +import org.tensorflow.tools.buffer.impl.virtual.IntVirtualDataBuffer; +import org.tensorflow.tools.buffer.impl.virtual.LongVirtualDataBuffer; +import org.tensorflow.tools.buffer.impl.virtual.ShortVirtualDataBuffer; +import org.tensorflow.tools.buffer.impl.virtual.VirtualDataBuffer; +import org.tensorflow.tools.buffer.impl.jdk.FloatJdkDataBuffer; +import org.tensorflow.tools.buffer.impl.misc.BitSetDataBuffer; +import org.tensorflow.tools.buffer.impl.misc.BooleanArrayDataBuffer; +import org.tensorflow.tools.buffer.impl.raw.BooleanRawDataBuffer; +import org.tensorflow.tools.buffer.impl.raw.ByteRawDataBuffer; +import org.tensorflow.tools.buffer.impl.raw.DoubleRawDataBuffer; +import org.tensorflow.tools.buffer.impl.raw.FloatRawDataBuffer; +import org.tensorflow.tools.buffer.impl.raw.IntRawDataBuffer; +import org.tensorflow.tools.buffer.impl.raw.LongRawDataBuffer; +import org.tensorflow.tools.buffer.impl.raw.ShortRawDataBuffer; +import org.tensorflow.tools.buffer.impl.raw.UnsafeReference; /** * Helper class for creating {@code DataBuffer} instances. @@ -66,7 +66,8 @@ public final class DataBuffers { * @return a new buffer */ public static ByteDataBuffer ofBytes(long size) { - return UnsafeReference.isAvailableInternally() ? ByteRawDataBuffer.allocate(size) : ByteJdkDataBuffer.allocate(size); + return UnsafeReference.isAvailableInternally() ? ByteRawDataBuffer.allocate(size) : ByteJdkDataBuffer + .allocate(size); } /** @@ -101,7 +102,8 @@ public static ByteDataBuffer wrap(ByteBuffer buf) { * @return a new buffer */ public static LongDataBuffer ofLongs(long size) { - return UnsafeReference.isAvailableInternally() ? LongRawDataBuffer.allocate(size) : LongJdkDataBuffer.allocate(size); + return UnsafeReference.isAvailableInternally() ? LongRawDataBuffer.allocate(size) : LongJdkDataBuffer + .allocate(size); } /** @@ -164,7 +166,8 @@ public static LongDataBuffer wrap(LongBuffer buf) { * @return a new buffer */ public static IntDataBuffer ofInts(long size) { - return UnsafeReference.isAvailableInternally() ? IntRawDataBuffer.allocate(size) : IntJdkDataBuffer.allocate(size); + return UnsafeReference.isAvailableInternally() ? IntRawDataBuffer.allocate(size) : IntJdkDataBuffer + .allocate(size); } /** @@ -227,7 +230,8 @@ public static IntDataBuffer wrap(IntBuffer buf) { * @return a new buffer */ public static ShortDataBuffer ofShorts(long size) { - return UnsafeReference.isAvailableInternally() ? ShortRawDataBuffer.allocate(size) : ShortJdkDataBuffer.allocate(size); + return UnsafeReference.isAvailableInternally() ? ShortRawDataBuffer.allocate(size) : ShortJdkDataBuffer + .allocate(size); } /** @@ -289,7 +293,8 @@ public static ShortDataBuffer wrap(ShortBuffer buf) { * @return a new buffer */ public static DoubleDataBuffer ofDoubles(long size) { - return UnsafeReference.isAvailableInternally() ? DoubleRawDataBuffer.allocate(size) : DoubleJdkDataBuffer.allocate(size); + return UnsafeReference.isAvailableInternally() ? DoubleRawDataBuffer.allocate(size) : DoubleJdkDataBuffer + .allocate(size); } /** diff --git a/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/DoubleDataBuffer.java b/tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/DoubleDataBuffer.java similarity index 99% rename from tensorflow-utils/src/main/java/org/tensorflow/util/buffer/DoubleDataBuffer.java rename to tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/DoubleDataBuffer.java index ec16b21ee42..143f3c5f18d 100644 --- a/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/DoubleDataBuffer.java +++ b/tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/DoubleDataBuffer.java @@ -14,7 +14,7 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.util.buffer; +package org.tensorflow.tools.buffer; import java.nio.BufferOverflowException; import java.nio.BufferUnderflowException; diff --git a/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/FloatDataBuffer.java b/tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/FloatDataBuffer.java similarity index 99% rename from tensorflow-utils/src/main/java/org/tensorflow/util/buffer/FloatDataBuffer.java rename to tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/FloatDataBuffer.java index 458f277bd75..2cfdf2dafcb 100644 --- a/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/FloatDataBuffer.java +++ b/tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/FloatDataBuffer.java @@ -14,7 +14,7 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.util.buffer; +package org.tensorflow.tools.buffer; import java.nio.BufferOverflowException; import java.nio.BufferUnderflowException; diff --git a/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/IntDataBuffer.java b/tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/IntDataBuffer.java similarity index 99% rename from tensorflow-utils/src/main/java/org/tensorflow/util/buffer/IntDataBuffer.java rename to tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/IntDataBuffer.java index 567d8144f6a..728a6be686b 100644 --- a/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/IntDataBuffer.java +++ b/tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/IntDataBuffer.java @@ -14,7 +14,7 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.util.buffer; +package org.tensorflow.tools.buffer; import java.nio.BufferOverflowException; import java.nio.BufferUnderflowException; diff --git a/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/LongDataBuffer.java b/tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/LongDataBuffer.java similarity index 99% rename from tensorflow-utils/src/main/java/org/tensorflow/util/buffer/LongDataBuffer.java rename to tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/LongDataBuffer.java index 5fbef726972..06047ff49c6 100644 --- a/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/LongDataBuffer.java +++ b/tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/LongDataBuffer.java @@ -14,7 +14,7 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.util.buffer; +package org.tensorflow.tools.buffer; import java.nio.BufferOverflowException; import java.nio.BufferUnderflowException; diff --git a/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/ShortDataBuffer.java b/tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/ShortDataBuffer.java similarity index 99% rename from tensorflow-utils/src/main/java/org/tensorflow/util/buffer/ShortDataBuffer.java rename to tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/ShortDataBuffer.java index 247522af0c7..3730aed5fcf 100644 --- a/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/ShortDataBuffer.java +++ b/tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/ShortDataBuffer.java @@ -14,7 +14,7 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.util.buffer; +package org.tensorflow.tools.buffer; import java.nio.BufferOverflowException; import java.nio.BufferUnderflowException; diff --git a/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/adapter/BooleanDataAdapter.java b/tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/adapter/BooleanDataAdapter.java similarity index 90% rename from tensorflow-utils/src/main/java/org/tensorflow/util/buffer/adapter/BooleanDataAdapter.java rename to tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/adapter/BooleanDataAdapter.java index 9e0ab441f02..b986bb0b475 100644 --- a/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/adapter/BooleanDataAdapter.java +++ b/tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/adapter/BooleanDataAdapter.java @@ -1,6 +1,6 @@ -package org.tensorflow.util.buffer.adapter; +package org.tensorflow.tools.buffer.adapter; -import org.tensorflow.util.buffer.ByteDataBuffer; +import org.tensorflow.tools.buffer.ByteDataBuffer; /** * Converts a boolean to/from bytes diff --git a/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/adapter/DataAdapter.java b/tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/adapter/DataAdapter.java similarity index 89% rename from tensorflow-utils/src/main/java/org/tensorflow/util/buffer/adapter/DataAdapter.java rename to tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/adapter/DataAdapter.java index 0158f6303ba..84c865ce9c9 100644 --- a/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/adapter/DataAdapter.java +++ b/tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/adapter/DataAdapter.java @@ -1,6 +1,6 @@ -package org.tensorflow.util.buffer.adapter; +package org.tensorflow.tools.buffer.adapter; -import org.tensorflow.util.buffer.ByteDataBuffer; +import org.tensorflow.tools.buffer.ByteDataBuffer; /** * Converts a value of a given type to/from bytes diff --git a/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/adapter/DoubleDataAdapter.java b/tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/adapter/DoubleDataAdapter.java similarity index 90% rename from tensorflow-utils/src/main/java/org/tensorflow/util/buffer/adapter/DoubleDataAdapter.java rename to tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/adapter/DoubleDataAdapter.java index 815ce9aea04..f170ab67d9f 100644 --- a/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/adapter/DoubleDataAdapter.java +++ b/tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/adapter/DoubleDataAdapter.java @@ -1,6 +1,6 @@ -package org.tensorflow.util.buffer.adapter; +package org.tensorflow.tools.buffer.adapter; -import org.tensorflow.util.buffer.ByteDataBuffer; +import org.tensorflow.tools.buffer.ByteDataBuffer; /** * Converts a double to/from bytes diff --git a/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/adapter/FloatDataAdapter.java b/tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/adapter/FloatDataAdapter.java similarity index 90% rename from tensorflow-utils/src/main/java/org/tensorflow/util/buffer/adapter/FloatDataAdapter.java rename to tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/adapter/FloatDataAdapter.java index 0107dc6caae..94b532c2322 100644 --- a/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/adapter/FloatDataAdapter.java +++ b/tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/adapter/FloatDataAdapter.java @@ -1,6 +1,6 @@ -package org.tensorflow.util.buffer.adapter; +package org.tensorflow.tools.buffer.adapter; -import org.tensorflow.util.buffer.ByteDataBuffer; +import org.tensorflow.tools.buffer.ByteDataBuffer; /** * Converts a float to/from bytes diff --git a/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/adapter/IntDataAdapter.java b/tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/adapter/IntDataAdapter.java similarity index 90% rename from tensorflow-utils/src/main/java/org/tensorflow/util/buffer/adapter/IntDataAdapter.java rename to tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/adapter/IntDataAdapter.java index 75ed8f3df56..8c0a12a15f6 100644 --- a/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/adapter/IntDataAdapter.java +++ b/tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/adapter/IntDataAdapter.java @@ -1,6 +1,6 @@ -package org.tensorflow.util.buffer.adapter; +package org.tensorflow.tools.buffer.adapter; -import org.tensorflow.util.buffer.ByteDataBuffer; +import org.tensorflow.tools.buffer.ByteDataBuffer; /** * Converts a int to/from bytes diff --git a/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/adapter/LongDataAdapter.java b/tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/adapter/LongDataAdapter.java similarity index 90% rename from tensorflow-utils/src/main/java/org/tensorflow/util/buffer/adapter/LongDataAdapter.java rename to tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/adapter/LongDataAdapter.java index ff9944da60d..d4e8a6de711 100644 --- a/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/adapter/LongDataAdapter.java +++ b/tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/adapter/LongDataAdapter.java @@ -1,6 +1,6 @@ -package org.tensorflow.util.buffer.adapter; +package org.tensorflow.tools.buffer.adapter; -import org.tensorflow.util.buffer.ByteDataBuffer; +import org.tensorflow.tools.buffer.ByteDataBuffer; /** * Converts a long to/from bytes diff --git a/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/adapter/ShortDataAdapter.java b/tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/adapter/ShortDataAdapter.java similarity index 90% rename from tensorflow-utils/src/main/java/org/tensorflow/util/buffer/adapter/ShortDataAdapter.java rename to tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/adapter/ShortDataAdapter.java index ca31242c1c8..7cdaf92d129 100644 --- a/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/adapter/ShortDataAdapter.java +++ b/tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/adapter/ShortDataAdapter.java @@ -1,6 +1,6 @@ -package org.tensorflow.util.buffer.adapter; +package org.tensorflow.tools.buffer.adapter; -import org.tensorflow.util.buffer.ByteDataBuffer; +import org.tensorflow.tools.buffer.ByteDataBuffer; /** * Converts a short to/from bytes diff --git a/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/AbstractDataBuffer.java b/tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/impl/AbstractDataBuffer.java similarity index 91% rename from tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/AbstractDataBuffer.java rename to tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/impl/AbstractDataBuffer.java index e47bc721710..c3be19f2bfe 100644 --- a/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/AbstractDataBuffer.java +++ b/tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/impl/AbstractDataBuffer.java @@ -14,9 +14,9 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.util.buffer.impl; +package org.tensorflow.tools.buffer.impl; -import org.tensorflow.util.buffer.DataBuffer; +import org.tensorflow.tools.buffer.DataBuffer; public abstract class AbstractDataBuffer implements DataBuffer { diff --git a/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/Validator.java b/tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/impl/Validator.java similarity index 97% rename from tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/Validator.java rename to tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/impl/Validator.java index 808c822065e..91def63b829 100644 --- a/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/Validator.java +++ b/tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/impl/Validator.java @@ -14,12 +14,12 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.util.buffer.impl; +package org.tensorflow.tools.buffer.impl; import java.nio.BufferOverflowException; import java.nio.BufferUnderflowException; import java.nio.ReadOnlyBufferException; -import org.tensorflow.util.buffer.DataBuffer; +import org.tensorflow.tools.buffer.DataBuffer; public class Validator { diff --git a/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/jdk/AbstractJdkDataBuffer.java b/tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/impl/jdk/AbstractJdkDataBuffer.java similarity index 92% rename from tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/jdk/AbstractJdkDataBuffer.java rename to tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/impl/jdk/AbstractJdkDataBuffer.java index 91bad920569..fbba5a870c3 100644 --- a/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/jdk/AbstractJdkDataBuffer.java +++ b/tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/impl/jdk/AbstractJdkDataBuffer.java @@ -15,10 +15,10 @@ ======================================================================= */ -package org.tensorflow.util.buffer.impl.jdk; +package org.tensorflow.tools.buffer.impl.jdk; import java.nio.Buffer; -import org.tensorflow.util.buffer.impl.AbstractDataBuffer; +import org.tensorflow.tools.buffer.impl.AbstractDataBuffer; /** * Base class for all JDK-based data buffers. diff --git a/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/jdk/ByteJdkDataBuffer.java b/tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/impl/jdk/ByteJdkDataBuffer.java similarity index 94% rename from tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/jdk/ByteJdkDataBuffer.java rename to tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/impl/jdk/ByteJdkDataBuffer.java index fe7522b7b1a..d59645d2af7 100644 --- a/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/jdk/ByteJdkDataBuffer.java +++ b/tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/impl/jdk/ByteJdkDataBuffer.java @@ -15,12 +15,12 @@ ======================================================================= */ -package org.tensorflow.util.buffer.impl.jdk; +package org.tensorflow.tools.buffer.impl.jdk; import java.nio.ByteBuffer; -import org.tensorflow.util.buffer.ByteDataBuffer; -import org.tensorflow.util.buffer.DataBuffer; -import org.tensorflow.util.buffer.impl.Validator; +import org.tensorflow.tools.buffer.ByteDataBuffer; +import org.tensorflow.tools.buffer.DataBuffer; +import org.tensorflow.tools.buffer.impl.Validator; /** * A buffer of bytes using a JDK {@link ByteBuffer} for storage. diff --git a/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/jdk/DoubleJdkDataBuffer.java b/tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/impl/jdk/DoubleJdkDataBuffer.java similarity index 94% rename from tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/jdk/DoubleJdkDataBuffer.java rename to tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/impl/jdk/DoubleJdkDataBuffer.java index 611877febac..46a3f27504c 100644 --- a/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/jdk/DoubleJdkDataBuffer.java +++ b/tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/impl/jdk/DoubleJdkDataBuffer.java @@ -15,12 +15,12 @@ ======================================================================= */ -package org.tensorflow.util.buffer.impl.jdk; +package org.tensorflow.tools.buffer.impl.jdk; import java.nio.DoubleBuffer; -import org.tensorflow.util.buffer.DataBuffer; -import org.tensorflow.util.buffer.DoubleDataBuffer; -import org.tensorflow.util.buffer.impl.Validator; +import org.tensorflow.tools.buffer.DataBuffer; +import org.tensorflow.tools.buffer.DoubleDataBuffer; +import org.tensorflow.tools.buffer.impl.Validator; /** * A buffer of bytes using a JDK {@link DoubleBuffer} for storage. diff --git a/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/jdk/FloatJdkDataBuffer.java b/tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/impl/jdk/FloatJdkDataBuffer.java similarity index 94% rename from tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/jdk/FloatJdkDataBuffer.java rename to tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/impl/jdk/FloatJdkDataBuffer.java index 571fb060b13..65d85a92245 100644 --- a/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/jdk/FloatJdkDataBuffer.java +++ b/tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/impl/jdk/FloatJdkDataBuffer.java @@ -15,12 +15,12 @@ ======================================================================= */ -package org.tensorflow.util.buffer.impl.jdk; +package org.tensorflow.tools.buffer.impl.jdk; import java.nio.FloatBuffer; -import org.tensorflow.util.buffer.DataBuffer; -import org.tensorflow.util.buffer.FloatDataBuffer; -import org.tensorflow.util.buffer.impl.Validator; +import org.tensorflow.tools.buffer.DataBuffer; +import org.tensorflow.tools.buffer.FloatDataBuffer; +import org.tensorflow.tools.buffer.impl.Validator; /** * A buffer of bytes using a JDK {@link FloatBuffer} for storage. diff --git a/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/jdk/IntJdkDataBuffer.java b/tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/impl/jdk/IntJdkDataBuffer.java similarity index 94% rename from tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/jdk/IntJdkDataBuffer.java rename to tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/impl/jdk/IntJdkDataBuffer.java index 81237624b33..08870c146d1 100644 --- a/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/jdk/IntJdkDataBuffer.java +++ b/tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/impl/jdk/IntJdkDataBuffer.java @@ -15,12 +15,12 @@ ======================================================================= */ -package org.tensorflow.util.buffer.impl.jdk; +package org.tensorflow.tools.buffer.impl.jdk; import java.nio.IntBuffer; -import org.tensorflow.util.buffer.DataBuffer; -import org.tensorflow.util.buffer.IntDataBuffer; -import org.tensorflow.util.buffer.impl.Validator; +import org.tensorflow.tools.buffer.DataBuffer; +import org.tensorflow.tools.buffer.IntDataBuffer; +import org.tensorflow.tools.buffer.impl.Validator; /** * A buffer of bytes using a JDK {@link IntBuffer} for storage. diff --git a/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/jdk/LongJdkDataBuffer.java b/tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/impl/jdk/LongJdkDataBuffer.java similarity index 94% rename from tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/jdk/LongJdkDataBuffer.java rename to tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/impl/jdk/LongJdkDataBuffer.java index 3ea9daa1b04..e55f443e26a 100644 --- a/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/jdk/LongJdkDataBuffer.java +++ b/tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/impl/jdk/LongJdkDataBuffer.java @@ -15,12 +15,12 @@ ======================================================================= */ -package org.tensorflow.util.buffer.impl.jdk; +package org.tensorflow.tools.buffer.impl.jdk; import java.nio.LongBuffer; -import org.tensorflow.util.buffer.DataBuffer; -import org.tensorflow.util.buffer.LongDataBuffer; -import org.tensorflow.util.buffer.impl.Validator; +import org.tensorflow.tools.buffer.DataBuffer; +import org.tensorflow.tools.buffer.LongDataBuffer; +import org.tensorflow.tools.buffer.impl.Validator; /** * A buffer of bytes using a JDK {@link LongBuffer} for storage. diff --git a/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/jdk/ShortJdkDataBuffer.java b/tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/impl/jdk/ShortJdkDataBuffer.java similarity index 94% rename from tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/jdk/ShortJdkDataBuffer.java rename to tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/impl/jdk/ShortJdkDataBuffer.java index d4371f27804..9d7f18aeb14 100644 --- a/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/jdk/ShortJdkDataBuffer.java +++ b/tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/impl/jdk/ShortJdkDataBuffer.java @@ -15,12 +15,12 @@ ======================================================================= */ -package org.tensorflow.util.buffer.impl.jdk; +package org.tensorflow.tools.buffer.impl.jdk; import java.nio.ShortBuffer; -import org.tensorflow.util.buffer.DataBuffer; -import org.tensorflow.util.buffer.ShortDataBuffer; -import org.tensorflow.util.buffer.impl.Validator; +import org.tensorflow.tools.buffer.DataBuffer; +import org.tensorflow.tools.buffer.ShortDataBuffer; +import org.tensorflow.tools.buffer.impl.Validator; /** * A buffer of bytes using a JDK {@link ShortBuffer} for storage. diff --git a/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/misc/ArrayDataBuffer.java b/tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/impl/misc/ArrayDataBuffer.java similarity index 93% rename from tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/misc/ArrayDataBuffer.java rename to tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/impl/misc/ArrayDataBuffer.java index 8d53d55eee2..acdcd78f8d8 100644 --- a/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/misc/ArrayDataBuffer.java +++ b/tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/impl/misc/ArrayDataBuffer.java @@ -14,12 +14,12 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.util.buffer.impl.misc; +package org.tensorflow.tools.buffer.impl.misc; import java.lang.reflect.Array; -import org.tensorflow.util.buffer.impl.AbstractDataBuffer; -import org.tensorflow.util.buffer.impl.Validator; -import org.tensorflow.util.buffer.DataBuffer; +import org.tensorflow.tools.buffer.impl.AbstractDataBuffer; +import org.tensorflow.tools.buffer.impl.Validator; +import org.tensorflow.tools.buffer.DataBuffer; public class ArrayDataBuffer extends AbstractDataBuffer { diff --git a/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/misc/BitSetDataBuffer.java b/tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/impl/misc/BitSetDataBuffer.java similarity index 90% rename from tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/misc/BitSetDataBuffer.java rename to tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/impl/misc/BitSetDataBuffer.java index 692d4f09bf3..07b5bc009a2 100644 --- a/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/misc/BitSetDataBuffer.java +++ b/tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/impl/misc/BitSetDataBuffer.java @@ -1,10 +1,10 @@ -package org.tensorflow.util.buffer.impl.misc; +package org.tensorflow.tools.buffer.impl.misc; import java.util.BitSet; -import org.tensorflow.util.buffer.BooleanDataBuffer; -import org.tensorflow.util.buffer.DataBuffer; -import org.tensorflow.util.buffer.impl.AbstractDataBuffer; -import org.tensorflow.util.buffer.impl.Validator; +import org.tensorflow.tools.buffer.BooleanDataBuffer; +import org.tensorflow.tools.buffer.DataBuffer; +import org.tensorflow.tools.buffer.impl.AbstractDataBuffer; +import org.tensorflow.tools.buffer.impl.Validator; public class BitSetDataBuffer extends AbstractDataBuffer implements BooleanDataBuffer { diff --git a/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/misc/BooleanArrayDataBuffer.java b/tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/impl/misc/BooleanArrayDataBuffer.java similarity index 91% rename from tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/misc/BooleanArrayDataBuffer.java rename to tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/impl/misc/BooleanArrayDataBuffer.java index 77612e6ef70..10f896de86c 100644 --- a/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/misc/BooleanArrayDataBuffer.java +++ b/tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/impl/misc/BooleanArrayDataBuffer.java @@ -14,12 +14,12 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.util.buffer.impl.misc; +package org.tensorflow.tools.buffer.impl.misc; -import org.tensorflow.util.buffer.BooleanDataBuffer; -import org.tensorflow.util.buffer.DataBuffer; -import org.tensorflow.util.buffer.impl.AbstractDataBuffer; -import org.tensorflow.util.buffer.impl.Validator; +import org.tensorflow.tools.buffer.BooleanDataBuffer; +import org.tensorflow.tools.buffer.DataBuffer; +import org.tensorflow.tools.buffer.impl.AbstractDataBuffer; +import org.tensorflow.tools.buffer.impl.Validator; public class BooleanArrayDataBuffer extends AbstractDataBuffer implements BooleanDataBuffer { diff --git a/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/raw/AbstractRawDataBuffer.java b/tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/impl/raw/AbstractRawDataBuffer.java similarity index 88% rename from tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/raw/AbstractRawDataBuffer.java rename to tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/impl/raw/AbstractRawDataBuffer.java index 30898b7b917..39b9f026ce3 100644 --- a/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/raw/AbstractRawDataBuffer.java +++ b/tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/impl/raw/AbstractRawDataBuffer.java @@ -1,8 +1,8 @@ -package org.tensorflow.util.buffer.impl.raw; +package org.tensorflow.tools.buffer.impl.raw; -import org.tensorflow.util.buffer.DataBuffer; -import org.tensorflow.util.buffer.impl.AbstractDataBuffer; -import org.tensorflow.util.buffer.impl.Validator; +import org.tensorflow.tools.buffer.DataBuffer; +import org.tensorflow.tools.buffer.impl.AbstractDataBuffer; +import org.tensorflow.tools.buffer.impl.Validator; abstract class AbstractRawDataBuffer> extends AbstractDataBuffer { diff --git a/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/raw/BooleanRawDataBuffer.java b/tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/impl/raw/BooleanRawDataBuffer.java similarity index 92% rename from tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/raw/BooleanRawDataBuffer.java rename to tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/impl/raw/BooleanRawDataBuffer.java index b68db0a7bf3..d11a8d552cf 100644 --- a/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/raw/BooleanRawDataBuffer.java +++ b/tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/impl/raw/BooleanRawDataBuffer.java @@ -1,8 +1,7 @@ -package org.tensorflow.util.buffer.impl.raw; +package org.tensorflow.tools.buffer.impl.raw; -import org.tensorflow.util.buffer.BooleanDataBuffer; -import org.tensorflow.util.buffer.impl.Validator; -import sun.misc.Unsafe; +import org.tensorflow.tools.buffer.BooleanDataBuffer; +import org.tensorflow.tools.buffer.impl.Validator; public final class BooleanRawDataBuffer extends AbstractRawDataBuffer implements BooleanDataBuffer { diff --git a/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/raw/ByteRawDataBuffer.java b/tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/impl/raw/ByteRawDataBuffer.java similarity index 92% rename from tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/raw/ByteRawDataBuffer.java rename to tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/impl/raw/ByteRawDataBuffer.java index 2cd154bea2e..0da449aee48 100644 --- a/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/raw/ByteRawDataBuffer.java +++ b/tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/impl/raw/ByteRawDataBuffer.java @@ -1,8 +1,7 @@ -package org.tensorflow.util.buffer.impl.raw; +package org.tensorflow.tools.buffer.impl.raw; -import org.tensorflow.util.buffer.ByteDataBuffer; -import org.tensorflow.util.buffer.impl.Validator; -import sun.misc.Unsafe; +import org.tensorflow.tools.buffer.ByteDataBuffer; +import org.tensorflow.tools.buffer.impl.Validator; public final class ByteRawDataBuffer extends AbstractRawDataBuffer implements ByteDataBuffer { diff --git a/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/raw/DoubleRawDataBuffer.java b/tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/impl/raw/DoubleRawDataBuffer.java similarity index 92% rename from tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/raw/DoubleRawDataBuffer.java rename to tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/impl/raw/DoubleRawDataBuffer.java index ee158c0d9b8..442353b8c3e 100644 --- a/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/raw/DoubleRawDataBuffer.java +++ b/tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/impl/raw/DoubleRawDataBuffer.java @@ -1,8 +1,7 @@ -package org.tensorflow.util.buffer.impl.raw; +package org.tensorflow.tools.buffer.impl.raw; -import org.tensorflow.util.buffer.DoubleDataBuffer; -import org.tensorflow.util.buffer.impl.Validator; -import sun.misc.Unsafe; +import org.tensorflow.tools.buffer.DoubleDataBuffer; +import org.tensorflow.tools.buffer.impl.Validator; public final class DoubleRawDataBuffer extends AbstractRawDataBuffer implements DoubleDataBuffer { diff --git a/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/raw/FloatRawDataBuffer.java b/tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/impl/raw/FloatRawDataBuffer.java similarity index 92% rename from tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/raw/FloatRawDataBuffer.java rename to tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/impl/raw/FloatRawDataBuffer.java index b8b26d692f3..4ef96bc658f 100644 --- a/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/raw/FloatRawDataBuffer.java +++ b/tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/impl/raw/FloatRawDataBuffer.java @@ -1,8 +1,7 @@ -package org.tensorflow.util.buffer.impl.raw; +package org.tensorflow.tools.buffer.impl.raw; -import org.tensorflow.util.buffer.FloatDataBuffer; -import org.tensorflow.util.buffer.impl.Validator; -import sun.misc.Unsafe; +import org.tensorflow.tools.buffer.FloatDataBuffer; +import org.tensorflow.tools.buffer.impl.Validator; public final class FloatRawDataBuffer extends AbstractRawDataBuffer implements FloatDataBuffer { diff --git a/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/raw/IntRawDataBuffer.java b/tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/impl/raw/IntRawDataBuffer.java similarity index 92% rename from tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/raw/IntRawDataBuffer.java rename to tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/impl/raw/IntRawDataBuffer.java index 87ea879043e..6fa6f6cf635 100644 --- a/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/raw/IntRawDataBuffer.java +++ b/tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/impl/raw/IntRawDataBuffer.java @@ -1,8 +1,7 @@ -package org.tensorflow.util.buffer.impl.raw; +package org.tensorflow.tools.buffer.impl.raw; -import org.tensorflow.util.buffer.IntDataBuffer; -import org.tensorflow.util.buffer.impl.Validator; -import sun.misc.Unsafe; +import org.tensorflow.tools.buffer.IntDataBuffer; +import org.tensorflow.tools.buffer.impl.Validator; public final class IntRawDataBuffer extends AbstractRawDataBuffer implements IntDataBuffer { diff --git a/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/raw/LongRawDataBuffer.java b/tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/impl/raw/LongRawDataBuffer.java similarity index 92% rename from tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/raw/LongRawDataBuffer.java rename to tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/impl/raw/LongRawDataBuffer.java index 1ebd7f18181..d48f2667dd8 100644 --- a/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/raw/LongRawDataBuffer.java +++ b/tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/impl/raw/LongRawDataBuffer.java @@ -1,8 +1,7 @@ -package org.tensorflow.util.buffer.impl.raw; +package org.tensorflow.tools.buffer.impl.raw; -import org.tensorflow.util.buffer.LongDataBuffer; -import org.tensorflow.util.buffer.impl.Validator; -import sun.misc.Unsafe; +import org.tensorflow.tools.buffer.LongDataBuffer; +import org.tensorflow.tools.buffer.impl.Validator; public final class LongRawDataBuffer extends AbstractRawDataBuffer implements LongDataBuffer { diff --git a/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/raw/ShortRawDataBuffer.java b/tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/impl/raw/ShortRawDataBuffer.java similarity index 92% rename from tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/raw/ShortRawDataBuffer.java rename to tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/impl/raw/ShortRawDataBuffer.java index 1c1c1436d95..c6c38504db3 100644 --- a/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/raw/ShortRawDataBuffer.java +++ b/tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/impl/raw/ShortRawDataBuffer.java @@ -1,8 +1,7 @@ -package org.tensorflow.util.buffer.impl.raw; +package org.tensorflow.tools.buffer.impl.raw; -import org.tensorflow.util.buffer.ShortDataBuffer; -import org.tensorflow.util.buffer.impl.Validator; -import sun.misc.Unsafe; +import org.tensorflow.tools.buffer.ShortDataBuffer; +import org.tensorflow.tools.buffer.impl.Validator; public final class ShortRawDataBuffer extends AbstractRawDataBuffer implements ShortDataBuffer { diff --git a/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/raw/UnsafeMemoryHandle.java b/tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/impl/raw/UnsafeMemoryHandle.java similarity index 98% rename from tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/raw/UnsafeMemoryHandle.java rename to tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/impl/raw/UnsafeMemoryHandle.java index 9fbfbe0d45f..22582c63d72 100644 --- a/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/raw/UnsafeMemoryHandle.java +++ b/tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/impl/raw/UnsafeMemoryHandle.java @@ -1,4 +1,4 @@ -package org.tensorflow.util.buffer.impl.raw; +package org.tensorflow.tools.buffer.impl.raw; public final class UnsafeMemoryHandle { diff --git a/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/raw/UnsafeReference.java b/tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/impl/raw/UnsafeReference.java similarity index 98% rename from tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/raw/UnsafeReference.java rename to tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/impl/raw/UnsafeReference.java index 3443c83b989..9b6d48a778f 100644 --- a/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/raw/UnsafeReference.java +++ b/tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/impl/raw/UnsafeReference.java @@ -1,4 +1,4 @@ -package org.tensorflow.util.buffer.impl.raw; +package org.tensorflow.tools.buffer.impl.raw; import java.lang.reflect.Field; import sun.misc.Unsafe; diff --git a/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/virtual/AbstractVirtualDataBuffer.java b/tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/impl/virtual/AbstractVirtualDataBuffer.java similarity index 79% rename from tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/virtual/AbstractVirtualDataBuffer.java rename to tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/impl/virtual/AbstractVirtualDataBuffer.java index e80e6c34a19..252c80cf216 100644 --- a/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/virtual/AbstractVirtualDataBuffer.java +++ b/tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/impl/virtual/AbstractVirtualDataBuffer.java @@ -1,10 +1,10 @@ -package org.tensorflow.util.buffer.impl.virtual; +package org.tensorflow.tools.buffer.impl.virtual; -import org.tensorflow.util.buffer.ByteDataBuffer; -import org.tensorflow.util.buffer.DataBuffer; -import org.tensorflow.util.buffer.adapter.DataAdapter; -import org.tensorflow.util.buffer.impl.AbstractDataBuffer; -import org.tensorflow.util.buffer.impl.Validator; +import org.tensorflow.tools.buffer.ByteDataBuffer; +import org.tensorflow.tools.buffer.DataBuffer; +import org.tensorflow.tools.buffer.adapter.DataAdapter; +import org.tensorflow.tools.buffer.impl.AbstractDataBuffer; +import org.tensorflow.tools.buffer.impl.Validator; @SuppressWarnings("unchecked") abstract class AbstractVirtualDataBuffer> extends AbstractDataBuffer { diff --git a/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/virtual/BooleanVirtualDataBuffer.java b/tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/impl/virtual/BooleanVirtualDataBuffer.java similarity index 87% rename from tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/virtual/BooleanVirtualDataBuffer.java rename to tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/impl/virtual/BooleanVirtualDataBuffer.java index a016a114f72..eaf8c89acff 100644 --- a/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/virtual/BooleanVirtualDataBuffer.java +++ b/tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/impl/virtual/BooleanVirtualDataBuffer.java @@ -1,9 +1,9 @@ -package org.tensorflow.util.buffer.impl.virtual; +package org.tensorflow.tools.buffer.impl.virtual; -import org.tensorflow.util.buffer.adapter.BooleanDataAdapter; -import org.tensorflow.util.buffer.BooleanDataBuffer; -import org.tensorflow.util.buffer.ByteDataBuffer; -import org.tensorflow.util.buffer.impl.Validator; +import org.tensorflow.tools.buffer.adapter.BooleanDataAdapter; +import org.tensorflow.tools.buffer.BooleanDataBuffer; +import org.tensorflow.tools.buffer.ByteDataBuffer; +import org.tensorflow.tools.buffer.impl.Validator; public class BooleanVirtualDataBuffer extends AbstractVirtualDataBuffer implements BooleanDataBuffer { diff --git a/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/virtual/DoubleVirtualDataBuffer.java b/tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/impl/virtual/DoubleVirtualDataBuffer.java similarity index 87% rename from tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/virtual/DoubleVirtualDataBuffer.java rename to tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/impl/virtual/DoubleVirtualDataBuffer.java index a9901ed1817..fad31a67adb 100644 --- a/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/virtual/DoubleVirtualDataBuffer.java +++ b/tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/impl/virtual/DoubleVirtualDataBuffer.java @@ -1,9 +1,9 @@ -package org.tensorflow.util.buffer.impl.virtual; +package org.tensorflow.tools.buffer.impl.virtual; -import org.tensorflow.util.buffer.adapter.DoubleDataAdapter; -import org.tensorflow.util.buffer.ByteDataBuffer; -import org.tensorflow.util.buffer.DoubleDataBuffer; -import org.tensorflow.util.buffer.impl.Validator; +import org.tensorflow.tools.buffer.adapter.DoubleDataAdapter; +import org.tensorflow.tools.buffer.ByteDataBuffer; +import org.tensorflow.tools.buffer.DoubleDataBuffer; +import org.tensorflow.tools.buffer.impl.Validator; public class DoubleVirtualDataBuffer extends AbstractVirtualDataBuffer implements DoubleDataBuffer { diff --git a/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/virtual/FloatVirtualDataBuffer.java b/tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/impl/virtual/FloatVirtualDataBuffer.java similarity index 87% rename from tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/virtual/FloatVirtualDataBuffer.java rename to tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/impl/virtual/FloatVirtualDataBuffer.java index 6961b01a49f..2b6edc1e5af 100644 --- a/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/virtual/FloatVirtualDataBuffer.java +++ b/tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/impl/virtual/FloatVirtualDataBuffer.java @@ -1,9 +1,9 @@ -package org.tensorflow.util.buffer.impl.virtual; +package org.tensorflow.tools.buffer.impl.virtual; -import org.tensorflow.util.buffer.adapter.FloatDataAdapter; -import org.tensorflow.util.buffer.ByteDataBuffer; -import org.tensorflow.util.buffer.FloatDataBuffer; -import org.tensorflow.util.buffer.impl.Validator; +import org.tensorflow.tools.buffer.adapter.FloatDataAdapter; +import org.tensorflow.tools.buffer.ByteDataBuffer; +import org.tensorflow.tools.buffer.FloatDataBuffer; +import org.tensorflow.tools.buffer.impl.Validator; public class FloatVirtualDataBuffer extends AbstractVirtualDataBuffer implements FloatDataBuffer { diff --git a/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/virtual/IntVirtualDataBuffer.java b/tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/impl/virtual/IntVirtualDataBuffer.java similarity index 87% rename from tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/virtual/IntVirtualDataBuffer.java rename to tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/impl/virtual/IntVirtualDataBuffer.java index 82da85442ba..c00d2f7e937 100644 --- a/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/virtual/IntVirtualDataBuffer.java +++ b/tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/impl/virtual/IntVirtualDataBuffer.java @@ -1,9 +1,9 @@ -package org.tensorflow.util.buffer.impl.virtual; +package org.tensorflow.tools.buffer.impl.virtual; -import org.tensorflow.util.buffer.adapter.IntDataAdapter; -import org.tensorflow.util.buffer.ByteDataBuffer; -import org.tensorflow.util.buffer.IntDataBuffer; -import org.tensorflow.util.buffer.impl.Validator; +import org.tensorflow.tools.buffer.adapter.IntDataAdapter; +import org.tensorflow.tools.buffer.ByteDataBuffer; +import org.tensorflow.tools.buffer.IntDataBuffer; +import org.tensorflow.tools.buffer.impl.Validator; public class IntVirtualDataBuffer extends AbstractVirtualDataBuffer implements IntDataBuffer { diff --git a/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/virtual/LongVirtualDataBuffer.java b/tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/impl/virtual/LongVirtualDataBuffer.java similarity index 87% rename from tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/virtual/LongVirtualDataBuffer.java rename to tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/impl/virtual/LongVirtualDataBuffer.java index 4fdc9b03e90..909ef04d992 100644 --- a/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/virtual/LongVirtualDataBuffer.java +++ b/tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/impl/virtual/LongVirtualDataBuffer.java @@ -1,9 +1,9 @@ -package org.tensorflow.util.buffer.impl.virtual; +package org.tensorflow.tools.buffer.impl.virtual; -import org.tensorflow.util.buffer.ByteDataBuffer; -import org.tensorflow.util.buffer.LongDataBuffer; -import org.tensorflow.util.buffer.adapter.LongDataAdapter; -import org.tensorflow.util.buffer.impl.Validator; +import org.tensorflow.tools.buffer.ByteDataBuffer; +import org.tensorflow.tools.buffer.LongDataBuffer; +import org.tensorflow.tools.buffer.adapter.LongDataAdapter; +import org.tensorflow.tools.buffer.impl.Validator; public class LongVirtualDataBuffer extends AbstractVirtualDataBuffer implements LongDataBuffer { diff --git a/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/virtual/ShortVirtualDataBuffer.java b/tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/impl/virtual/ShortVirtualDataBuffer.java similarity index 87% rename from tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/virtual/ShortVirtualDataBuffer.java rename to tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/impl/virtual/ShortVirtualDataBuffer.java index 1d252685ebb..218b5257194 100644 --- a/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/virtual/ShortVirtualDataBuffer.java +++ b/tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/impl/virtual/ShortVirtualDataBuffer.java @@ -1,9 +1,9 @@ -package org.tensorflow.util.buffer.impl.virtual; +package org.tensorflow.tools.buffer.impl.virtual; -import org.tensorflow.util.buffer.adapter.ShortDataAdapter; -import org.tensorflow.util.buffer.ByteDataBuffer; -import org.tensorflow.util.buffer.ShortDataBuffer; -import org.tensorflow.util.buffer.impl.Validator; +import org.tensorflow.tools.buffer.adapter.ShortDataAdapter; +import org.tensorflow.tools.buffer.ByteDataBuffer; +import org.tensorflow.tools.buffer.ShortDataBuffer; +import org.tensorflow.tools.buffer.impl.Validator; public class ShortVirtualDataBuffer extends AbstractVirtualDataBuffer implements ShortDataBuffer { diff --git a/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/virtual/VirtualDataBuffer.java b/tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/impl/virtual/VirtualDataBuffer.java similarity index 78% rename from tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/virtual/VirtualDataBuffer.java rename to tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/impl/virtual/VirtualDataBuffer.java index 4fe7e6ea88b..2d22ef7c18a 100644 --- a/tensorflow-utils/src/main/java/org/tensorflow/util/buffer/impl/virtual/VirtualDataBuffer.java +++ b/tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/impl/virtual/VirtualDataBuffer.java @@ -1,8 +1,8 @@ -package org.tensorflow.util.buffer.impl.virtual; +package org.tensorflow.tools.buffer.impl.virtual; -import org.tensorflow.util.buffer.ByteDataBuffer; -import org.tensorflow.util.buffer.DataBuffer; -import org.tensorflow.util.buffer.adapter.DataAdapter; +import org.tensorflow.tools.buffer.ByteDataBuffer; +import org.tensorflow.tools.buffer.DataBuffer; +import org.tensorflow.tools.buffer.adapter.DataAdapter; @SuppressWarnings("unchecked") public class VirtualDataBuffer extends AbstractVirtualDataBuffer> { diff --git a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/BooleanNdArray.java b/tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/BooleanNdArray.java similarity index 97% rename from tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/BooleanNdArray.java rename to tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/BooleanNdArray.java index 16b5bb63c6c..bba08ffdeb5 100644 --- a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/BooleanNdArray.java +++ b/tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/BooleanNdArray.java @@ -14,11 +14,11 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.util.ndarray; +package org.tensorflow.tools.ndarray; -import org.tensorflow.util.buffer.BooleanDataBuffer; -import org.tensorflow.util.buffer.DataBuffer; -import org.tensorflow.util.ndarray.index.Index; +import org.tensorflow.tools.buffer.BooleanDataBuffer; +import org.tensorflow.tools.buffer.DataBuffer; +import org.tensorflow.tools.ndarray.index.Index; /** * An {@link NdArray} of booleans. diff --git a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/ByteNdArray.java b/tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/ByteNdArray.java similarity index 97% rename from tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/ByteNdArray.java rename to tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/ByteNdArray.java index ccaace23551..4d9e35bfaef 100644 --- a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/ByteNdArray.java +++ b/tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/ByteNdArray.java @@ -14,11 +14,11 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.util.ndarray; +package org.tensorflow.tools.ndarray; -import org.tensorflow.util.buffer.ByteDataBuffer; -import org.tensorflow.util.buffer.DataBuffer; -import org.tensorflow.util.ndarray.index.Index; +import org.tensorflow.tools.buffer.ByteDataBuffer; +import org.tensorflow.tools.buffer.DataBuffer; +import org.tensorflow.tools.ndarray.index.Index; /** * An {@link NdArray} of bytes. diff --git a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/DoubleNdArray.java b/tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/DoubleNdArray.java similarity index 97% rename from tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/DoubleNdArray.java rename to tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/DoubleNdArray.java index 67725794941..bce21a32338 100644 --- a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/DoubleNdArray.java +++ b/tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/DoubleNdArray.java @@ -14,11 +14,11 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.util.ndarray; +package org.tensorflow.tools.ndarray; -import org.tensorflow.util.buffer.DoubleDataBuffer; -import org.tensorflow.util.buffer.DataBuffer; -import org.tensorflow.util.ndarray.index.Index; +import org.tensorflow.tools.buffer.DoubleDataBuffer; +import org.tensorflow.tools.buffer.DataBuffer; +import org.tensorflow.tools.ndarray.index.Index; /** * An {@link NdArray} of doubles. diff --git a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/FloatNdArray.java b/tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/FloatNdArray.java similarity index 97% rename from tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/FloatNdArray.java rename to tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/FloatNdArray.java index 9c29bf5bfd0..13305381f47 100644 --- a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/FloatNdArray.java +++ b/tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/FloatNdArray.java @@ -14,11 +14,11 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.util.ndarray; +package org.tensorflow.tools.ndarray; -import org.tensorflow.util.buffer.FloatDataBuffer; -import org.tensorflow.util.buffer.DataBuffer; -import org.tensorflow.util.ndarray.index.Index; +import org.tensorflow.tools.buffer.FloatDataBuffer; +import org.tensorflow.tools.buffer.DataBuffer; +import org.tensorflow.tools.ndarray.index.Index; /** * An {@link NdArray} of floats. diff --git a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/IllegalRankException.java b/tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/IllegalRankException.java similarity index 95% rename from tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/IllegalRankException.java rename to tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/IllegalRankException.java index 21fc817e371..21c9b43c2c4 100644 --- a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/IllegalRankException.java +++ b/tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/IllegalRankException.java @@ -14,7 +14,7 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.util.ndarray; +package org.tensorflow.tools.ndarray; public class IllegalRankException extends IllegalArgumentException { diff --git a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/IntNdArray.java b/tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/IntNdArray.java similarity index 97% rename from tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/IntNdArray.java rename to tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/IntNdArray.java index f5b25ca13b3..7158996664d 100644 --- a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/IntNdArray.java +++ b/tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/IntNdArray.java @@ -14,11 +14,11 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.util.ndarray; +package org.tensorflow.tools.ndarray; -import org.tensorflow.util.buffer.DataBuffer; -import org.tensorflow.util.buffer.IntDataBuffer; -import org.tensorflow.util.ndarray.index.Index; +import org.tensorflow.tools.buffer.DataBuffer; +import org.tensorflow.tools.buffer.IntDataBuffer; +import org.tensorflow.tools.ndarray.index.Index; /** * An {@link NdArray} of integers. diff --git a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/LongNdArray.java b/tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/LongNdArray.java similarity index 97% rename from tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/LongNdArray.java rename to tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/LongNdArray.java index 5ab03adb91f..02dc11f40ee 100644 --- a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/LongNdArray.java +++ b/tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/LongNdArray.java @@ -14,11 +14,11 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.util.ndarray; +package org.tensorflow.tools.ndarray; -import org.tensorflow.util.buffer.LongDataBuffer; -import org.tensorflow.util.buffer.DataBuffer; -import org.tensorflow.util.ndarray.index.Index; +import org.tensorflow.tools.buffer.LongDataBuffer; +import org.tensorflow.tools.buffer.DataBuffer; +import org.tensorflow.tools.ndarray.index.Index; /** * An {@link NdArray} of longs. diff --git a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/NdArray.java b/tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/NdArray.java similarity index 98% rename from tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/NdArray.java rename to tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/NdArray.java index 947a02fe097..1e7140b3809 100644 --- a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/NdArray.java +++ b/tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/NdArray.java @@ -14,13 +14,13 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.util.ndarray; +package org.tensorflow.tools.ndarray; import java.util.function.BiConsumer; import java.util.function.Consumer; -import org.tensorflow.util.Shape; -import org.tensorflow.util.buffer.DataBuffer; -import org.tensorflow.util.ndarray.index.Index; +import org.tensorflow.tools.Shape; +import org.tensorflow.tools.buffer.DataBuffer; +import org.tensorflow.tools.ndarray.index.Index; /** * A data structure of N-dimensions. diff --git a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/NdArraySequence.java b/tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/NdArraySequence.java similarity index 95% rename from tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/NdArraySequence.java rename to tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/NdArraySequence.java index f2676c218e7..d30c020486f 100644 --- a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/NdArraySequence.java +++ b/tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/NdArraySequence.java @@ -1,4 +1,4 @@ -package org.tensorflow.util.ndarray; +package org.tensorflow.tools.ndarray; import java.util.function.BiConsumer; import java.util.function.Consumer; diff --git a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/NdArrays.java b/tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/NdArrays.java similarity index 92% rename from tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/NdArrays.java rename to tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/NdArrays.java index 862a0d8b88c..42531416ed4 100644 --- a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/NdArrays.java +++ b/tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/NdArrays.java @@ -14,26 +14,26 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.util.ndarray; - -import org.tensorflow.util.Shape; -import org.tensorflow.util.buffer.BooleanDataBuffer; -import org.tensorflow.util.buffer.ByteDataBuffer; -import org.tensorflow.util.buffer.DataBuffer; -import org.tensorflow.util.buffer.DataBuffers; -import org.tensorflow.util.buffer.DoubleDataBuffer; -import org.tensorflow.util.buffer.FloatDataBuffer; -import org.tensorflow.util.buffer.IntDataBuffer; -import org.tensorflow.util.buffer.LongDataBuffer; -import org.tensorflow.util.buffer.ShortDataBuffer; -import org.tensorflow.util.ndarray.impl.dense.BooleanDenseNdArray; -import org.tensorflow.util.ndarray.impl.dense.ByteDenseNdArray; -import org.tensorflow.util.ndarray.impl.dense.DenseNdArray; -import org.tensorflow.util.ndarray.impl.dense.DoubleDenseNdArray; -import org.tensorflow.util.ndarray.impl.dense.FloatDenseNdArray; -import org.tensorflow.util.ndarray.impl.dense.IntDenseNdArray; -import org.tensorflow.util.ndarray.impl.dense.LongDenseNdArray; -import org.tensorflow.util.ndarray.impl.dense.ShortDenseNdArray; +package org.tensorflow.tools.ndarray; + +import org.tensorflow.tools.Shape; +import org.tensorflow.tools.buffer.BooleanDataBuffer; +import org.tensorflow.tools.buffer.ByteDataBuffer; +import org.tensorflow.tools.buffer.DataBuffer; +import org.tensorflow.tools.buffer.DataBuffers; +import org.tensorflow.tools.buffer.DoubleDataBuffer; +import org.tensorflow.tools.buffer.FloatDataBuffer; +import org.tensorflow.tools.buffer.IntDataBuffer; +import org.tensorflow.tools.buffer.LongDataBuffer; +import org.tensorflow.tools.buffer.ShortDataBuffer; +import org.tensorflow.tools.ndarray.impl.dense.BooleanDenseNdArray; +import org.tensorflow.tools.ndarray.impl.dense.ByteDenseNdArray; +import org.tensorflow.tools.ndarray.impl.dense.DenseNdArray; +import org.tensorflow.tools.ndarray.impl.dense.DoubleDenseNdArray; +import org.tensorflow.tools.ndarray.impl.dense.FloatDenseNdArray; +import org.tensorflow.tools.ndarray.impl.dense.IntDenseNdArray; +import org.tensorflow.tools.ndarray.impl.dense.LongDenseNdArray; +import org.tensorflow.tools.ndarray.impl.dense.ShortDenseNdArray; /** * Helper class for instantiating {@link NdArray} objects. diff --git a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/ShortNdArray.java b/tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/ShortNdArray.java similarity index 97% rename from tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/ShortNdArray.java rename to tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/ShortNdArray.java index e6530130238..2a8b6c160aa 100644 --- a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/ShortNdArray.java +++ b/tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/ShortNdArray.java @@ -14,11 +14,11 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.util.ndarray; +package org.tensorflow.tools.ndarray; -import org.tensorflow.util.buffer.DataBuffer; -import org.tensorflow.util.buffer.ShortDataBuffer; -import org.tensorflow.util.ndarray.index.Index; +import org.tensorflow.tools.buffer.DataBuffer; +import org.tensorflow.tools.buffer.ShortDataBuffer; +import org.tensorflow.tools.ndarray.index.Index; /** * An {@link NdArray} of shorts. diff --git a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/AbstractNdArray.java b/tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/impl/AbstractNdArray.java similarity index 86% rename from tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/AbstractNdArray.java rename to tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/impl/AbstractNdArray.java index 6b7918ce99d..3adb7217918 100644 --- a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/AbstractNdArray.java +++ b/tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/impl/AbstractNdArray.java @@ -14,14 +14,14 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.util.ndarray.impl; - -import org.tensorflow.util.ndarray.NdArraySequence; -import org.tensorflow.util.ndarray.impl.sequence.ElementSequence; -import org.tensorflow.util.buffer.DataBuffers; -import org.tensorflow.util.ndarray.NdArray; -import org.tensorflow.util.Shape; -import org.tensorflow.util.ndarray.impl.dimension.DimensionalSpace; +package org.tensorflow.tools.ndarray.impl; + +import org.tensorflow.tools.ndarray.NdArraySequence; +import org.tensorflow.tools.ndarray.impl.sequence.ElementSequence; +import org.tensorflow.tools.buffer.DataBuffers; +import org.tensorflow.tools.ndarray.NdArray; +import org.tensorflow.tools.Shape; +import org.tensorflow.tools.ndarray.impl.dimension.DimensionalSpace; @SuppressWarnings("unchecked") public abstract class AbstractNdArray> implements NdArray { diff --git a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/Validator.java b/tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/impl/Validator.java similarity index 94% rename from tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/Validator.java rename to tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/impl/Validator.java index 88b60b36350..67172350b0c 100644 --- a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/Validator.java +++ b/tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/impl/Validator.java @@ -14,12 +14,12 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.util.ndarray.impl; +package org.tensorflow.tools.ndarray.impl; import java.nio.BufferOverflowException; import java.nio.BufferUnderflowException; -import org.tensorflow.util.buffer.DataBuffer; -import org.tensorflow.util.ndarray.NdArray; +import org.tensorflow.tools.buffer.DataBuffer; +import org.tensorflow.tools.ndarray.NdArray; public class Validator { diff --git a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dense/AbstractDenseNdArray.java b/tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/impl/dense/AbstractDenseNdArray.java similarity index 87% rename from tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dense/AbstractDenseNdArray.java rename to tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/impl/dense/AbstractDenseNdArray.java index bdda631d553..409b8643184 100644 --- a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dense/AbstractDenseNdArray.java +++ b/tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/impl/dense/AbstractDenseNdArray.java @@ -14,16 +14,16 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.util.ndarray.impl.dense; +package org.tensorflow.tools.ndarray.impl.dense; import java.util.concurrent.atomic.AtomicLong; -import org.tensorflow.util.buffer.DataBuffer; -import org.tensorflow.util.ndarray.IllegalRankException; -import org.tensorflow.util.ndarray.NdArray; -import org.tensorflow.util.ndarray.impl.AbstractNdArray; -import org.tensorflow.util.ndarray.index.Index; -import org.tensorflow.util.ndarray.impl.dimension.DimensionalSpace; -import org.tensorflow.util.ndarray.impl.dimension.RelativeDimensionalSpace; +import org.tensorflow.tools.buffer.DataBuffer; +import org.tensorflow.tools.ndarray.IllegalRankException; +import org.tensorflow.tools.ndarray.NdArray; +import org.tensorflow.tools.ndarray.impl.AbstractNdArray; +import org.tensorflow.tools.ndarray.index.Index; +import org.tensorflow.tools.ndarray.impl.dimension.DimensionalSpace; +import org.tensorflow.tools.ndarray.impl.dimension.RelativeDimensionalSpace; @SuppressWarnings("unchecked") public abstract class AbstractDenseNdArray> extends AbstractNdArray { diff --git a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dense/BooleanDenseNdArray.java b/tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/impl/dense/BooleanDenseNdArray.java similarity index 88% rename from tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dense/BooleanDenseNdArray.java rename to tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/impl/dense/BooleanDenseNdArray.java index 98e3911ebbd..368cef4c9ed 100644 --- a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dense/BooleanDenseNdArray.java +++ b/tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/impl/dense/BooleanDenseNdArray.java @@ -14,15 +14,15 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.util.ndarray.impl.dense; - -import org.tensorflow.util.buffer.BooleanDataBuffer; -import org.tensorflow.util.buffer.DataBuffer; -import org.tensorflow.util.buffer.DataBuffers; -import org.tensorflow.util.ndarray.BooleanNdArray; -import org.tensorflow.util.ndarray.NdArray; -import org.tensorflow.util.Shape; -import org.tensorflow.util.ndarray.impl.dimension.DimensionalSpace; +package org.tensorflow.tools.ndarray.impl.dense; + +import org.tensorflow.tools.Shape; +import org.tensorflow.tools.buffer.BooleanDataBuffer; +import org.tensorflow.tools.buffer.DataBuffer; +import org.tensorflow.tools.buffer.DataBuffers; +import org.tensorflow.tools.ndarray.BooleanNdArray; +import org.tensorflow.tools.ndarray.NdArray; +import org.tensorflow.tools.ndarray.impl.dimension.DimensionalSpace; public class BooleanDenseNdArray extends AbstractDenseNdArray implements BooleanNdArray { diff --git a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dense/ByteDenseNdArray.java b/tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/impl/dense/ByteDenseNdArray.java similarity index 88% rename from tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dense/ByteDenseNdArray.java rename to tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/impl/dense/ByteDenseNdArray.java index fb00553a7ac..ca4bee6f624 100644 --- a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dense/ByteDenseNdArray.java +++ b/tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/impl/dense/ByteDenseNdArray.java @@ -14,15 +14,15 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.util.ndarray.impl.dense; - -import org.tensorflow.util.buffer.ByteDataBuffer; -import org.tensorflow.util.buffer.DataBuffer; -import org.tensorflow.util.buffer.DataBuffers; -import org.tensorflow.util.ndarray.ByteNdArray; -import org.tensorflow.util.ndarray.NdArray; -import org.tensorflow.util.Shape; -import org.tensorflow.util.ndarray.impl.dimension.DimensionalSpace; +package org.tensorflow.tools.ndarray.impl.dense; + +import org.tensorflow.tools.Shape; +import org.tensorflow.tools.buffer.ByteDataBuffer; +import org.tensorflow.tools.buffer.DataBuffer; +import org.tensorflow.tools.buffer.DataBuffers; +import org.tensorflow.tools.ndarray.ByteNdArray; +import org.tensorflow.tools.ndarray.NdArray; +import org.tensorflow.tools.ndarray.impl.dimension.DimensionalSpace; public class ByteDenseNdArray extends AbstractDenseNdArray implements ByteNdArray { diff --git a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dense/DataTransfer.java b/tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/impl/dense/DataTransfer.java similarity index 87% rename from tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dense/DataTransfer.java rename to tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/impl/dense/DataTransfer.java index 45bcdfcb774..abd63b20ea7 100644 --- a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dense/DataTransfer.java +++ b/tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/impl/dense/DataTransfer.java @@ -1,15 +1,15 @@ -package org.tensorflow.util.ndarray.impl.dense; +package org.tensorflow.tools.ndarray.impl.dense; -import org.tensorflow.util.buffer.BooleanDataBuffer; -import org.tensorflow.util.buffer.ByteDataBuffer; -import org.tensorflow.util.buffer.DataBuffer; -import org.tensorflow.util.buffer.DoubleDataBuffer; -import org.tensorflow.util.buffer.FloatDataBuffer; -import org.tensorflow.util.buffer.IntDataBuffer; -import org.tensorflow.util.buffer.LongDataBuffer; -import org.tensorflow.util.buffer.ShortDataBuffer; -import org.tensorflow.util.ndarray.impl.dimension.DimensionalSpace; -import org.tensorflow.util.ndarray.impl.sequence.PositionIterator; +import org.tensorflow.tools.buffer.BooleanDataBuffer; +import org.tensorflow.tools.buffer.ByteDataBuffer; +import org.tensorflow.tools.buffer.DataBuffer; +import org.tensorflow.tools.buffer.DoubleDataBuffer; +import org.tensorflow.tools.buffer.FloatDataBuffer; +import org.tensorflow.tools.buffer.IntDataBuffer; +import org.tensorflow.tools.buffer.LongDataBuffer; +import org.tensorflow.tools.buffer.ShortDataBuffer; +import org.tensorflow.tools.ndarray.impl.dimension.DimensionalSpace; +import org.tensorflow.tools.ndarray.impl.sequence.PositionIterator; final class DataTransfer { diff --git a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dense/DenseNdArray.java b/tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/impl/dense/DenseNdArray.java similarity index 88% rename from tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dense/DenseNdArray.java rename to tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/impl/dense/DenseNdArray.java index 3616f9fafeb..04ef0d3904f 100644 --- a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dense/DenseNdArray.java +++ b/tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/impl/dense/DenseNdArray.java @@ -14,12 +14,12 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.util.ndarray.impl.dense; +package org.tensorflow.tools.ndarray.impl.dense; -import org.tensorflow.util.buffer.DataBuffer; -import org.tensorflow.util.ndarray.NdArray; -import org.tensorflow.util.Shape; -import org.tensorflow.util.ndarray.impl.dimension.DimensionalSpace; +import org.tensorflow.tools.Shape; +import org.tensorflow.tools.buffer.DataBuffer; +import org.tensorflow.tools.ndarray.NdArray; +import org.tensorflow.tools.ndarray.impl.dimension.DimensionalSpace; public class DenseNdArray extends AbstractDenseNdArray> { diff --git a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dense/DoubleDenseNdArray.java b/tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/impl/dense/DoubleDenseNdArray.java similarity index 88% rename from tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dense/DoubleDenseNdArray.java rename to tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/impl/dense/DoubleDenseNdArray.java index 02a3f25c85a..bad5ee4b1dc 100644 --- a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dense/DoubleDenseNdArray.java +++ b/tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/impl/dense/DoubleDenseNdArray.java @@ -14,15 +14,15 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.util.ndarray.impl.dense; - -import org.tensorflow.util.buffer.DataBuffer; -import org.tensorflow.util.buffer.DataBuffers; -import org.tensorflow.util.buffer.DoubleDataBuffer; -import org.tensorflow.util.ndarray.DoubleNdArray; -import org.tensorflow.util.ndarray.NdArray; -import org.tensorflow.util.Shape; -import org.tensorflow.util.ndarray.impl.dimension.DimensionalSpace; +package org.tensorflow.tools.ndarray.impl.dense; + +import org.tensorflow.tools.Shape; +import org.tensorflow.tools.buffer.DataBuffer; +import org.tensorflow.tools.buffer.DataBuffers; +import org.tensorflow.tools.buffer.DoubleDataBuffer; +import org.tensorflow.tools.ndarray.DoubleNdArray; +import org.tensorflow.tools.ndarray.NdArray; +import org.tensorflow.tools.ndarray.impl.dimension.DimensionalSpace; public class DoubleDenseNdArray extends AbstractDenseNdArray implements DoubleNdArray { diff --git a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dense/FloatDenseNdArray.java b/tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/impl/dense/FloatDenseNdArray.java similarity index 88% rename from tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dense/FloatDenseNdArray.java rename to tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/impl/dense/FloatDenseNdArray.java index 72aa2460391..adba06e020c 100644 --- a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dense/FloatDenseNdArray.java +++ b/tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/impl/dense/FloatDenseNdArray.java @@ -14,15 +14,15 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.util.ndarray.impl.dense; - -import org.tensorflow.util.buffer.DataBuffer; -import org.tensorflow.util.buffer.DataBuffers; -import org.tensorflow.util.buffer.FloatDataBuffer; -import org.tensorflow.util.ndarray.FloatNdArray; -import org.tensorflow.util.ndarray.NdArray; -import org.tensorflow.util.Shape; -import org.tensorflow.util.ndarray.impl.dimension.DimensionalSpace; +package org.tensorflow.tools.ndarray.impl.dense; + +import org.tensorflow.tools.Shape; +import org.tensorflow.tools.buffer.DataBuffer; +import org.tensorflow.tools.buffer.DataBuffers; +import org.tensorflow.tools.buffer.FloatDataBuffer; +import org.tensorflow.tools.ndarray.FloatNdArray; +import org.tensorflow.tools.ndarray.NdArray; +import org.tensorflow.tools.ndarray.impl.dimension.DimensionalSpace; public class FloatDenseNdArray extends AbstractDenseNdArray implements FloatNdArray { diff --git a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dense/IntDenseNdArray.java b/tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/impl/dense/IntDenseNdArray.java similarity index 88% rename from tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dense/IntDenseNdArray.java rename to tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/impl/dense/IntDenseNdArray.java index bfedfaf071d..1374a38e27c 100644 --- a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dense/IntDenseNdArray.java +++ b/tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/impl/dense/IntDenseNdArray.java @@ -14,15 +14,15 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.util.ndarray.impl.dense; - -import org.tensorflow.util.buffer.DataBuffer; -import org.tensorflow.util.buffer.DataBuffers; -import org.tensorflow.util.buffer.IntDataBuffer; -import org.tensorflow.util.ndarray.IntNdArray; -import org.tensorflow.util.ndarray.NdArray; -import org.tensorflow.util.Shape; -import org.tensorflow.util.ndarray.impl.dimension.DimensionalSpace; +package org.tensorflow.tools.ndarray.impl.dense; + +import org.tensorflow.tools.Shape; +import org.tensorflow.tools.buffer.DataBuffer; +import org.tensorflow.tools.buffer.DataBuffers; +import org.tensorflow.tools.buffer.IntDataBuffer; +import org.tensorflow.tools.ndarray.IntNdArray; +import org.tensorflow.tools.ndarray.NdArray; +import org.tensorflow.tools.ndarray.impl.dimension.DimensionalSpace; public class IntDenseNdArray extends AbstractDenseNdArray implements IntNdArray { diff --git a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dense/LongDenseNdArray.java b/tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/impl/dense/LongDenseNdArray.java similarity index 88% rename from tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dense/LongDenseNdArray.java rename to tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/impl/dense/LongDenseNdArray.java index bdbdcead4d5..a584e8d7098 100644 --- a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dense/LongDenseNdArray.java +++ b/tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/impl/dense/LongDenseNdArray.java @@ -14,15 +14,15 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.util.ndarray.impl.dense; - -import org.tensorflow.util.buffer.DataBuffer; -import org.tensorflow.util.buffer.DataBuffers; -import org.tensorflow.util.buffer.LongDataBuffer; -import org.tensorflow.util.ndarray.LongNdArray; -import org.tensorflow.util.ndarray.NdArray; -import org.tensorflow.util.Shape; -import org.tensorflow.util.ndarray.impl.dimension.DimensionalSpace; +package org.tensorflow.tools.ndarray.impl.dense; + +import org.tensorflow.tools.Shape; +import org.tensorflow.tools.buffer.DataBuffer; +import org.tensorflow.tools.buffer.DataBuffers; +import org.tensorflow.tools.buffer.LongDataBuffer; +import org.tensorflow.tools.ndarray.LongNdArray; +import org.tensorflow.tools.ndarray.NdArray; +import org.tensorflow.tools.ndarray.impl.dimension.DimensionalSpace; public class LongDenseNdArray extends AbstractDenseNdArray implements LongNdArray { diff --git a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dense/ShortDenseNdArray.java b/tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/impl/dense/ShortDenseNdArray.java similarity index 88% rename from tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dense/ShortDenseNdArray.java rename to tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/impl/dense/ShortDenseNdArray.java index ec3af6a0819..bb5c6067cb7 100644 --- a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dense/ShortDenseNdArray.java +++ b/tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/impl/dense/ShortDenseNdArray.java @@ -14,15 +14,15 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.util.ndarray.impl.dense; - -import org.tensorflow.util.buffer.DataBuffer; -import org.tensorflow.util.buffer.DataBuffers; -import org.tensorflow.util.buffer.ShortDataBuffer; -import org.tensorflow.util.ndarray.NdArray; -import org.tensorflow.util.Shape; -import org.tensorflow.util.ndarray.impl.dimension.DimensionalSpace; -import org.tensorflow.util.ndarray.ShortNdArray; +package org.tensorflow.tools.ndarray.impl.dense; + +import org.tensorflow.tools.Shape; +import org.tensorflow.tools.buffer.DataBuffer; +import org.tensorflow.tools.buffer.DataBuffers; +import org.tensorflow.tools.buffer.ShortDataBuffer; +import org.tensorflow.tools.ndarray.NdArray; +import org.tensorflow.tools.ndarray.impl.dimension.DimensionalSpace; +import org.tensorflow.tools.ndarray.ShortNdArray; public class ShortDenseNdArray extends AbstractDenseNdArray implements ShortNdArray { diff --git a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dense/Validator.java b/tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/impl/dense/Validator.java similarity index 84% rename from tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dense/Validator.java rename to tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/impl/dense/Validator.java index 41074ef7508..b46364c158d 100644 --- a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dense/Validator.java +++ b/tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/impl/dense/Validator.java @@ -14,12 +14,12 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.util.ndarray.impl.dense; +package org.tensorflow.tools.ndarray.impl.dense; -import org.tensorflow.util.buffer.DataBuffer; -import org.tensorflow.util.Shape; +import org.tensorflow.tools.Shape; +import org.tensorflow.tools.buffer.DataBuffer; -final class Validator extends org.tensorflow.util.ndarray.impl.Validator { +final class Validator extends org.tensorflow.tools.ndarray.impl.Validator { static void denseShape(DataBuffer buffer, Shape shape) { if (shape == null) { diff --git a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dimension/AbstractDimension.java b/tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/impl/dimension/AbstractDimension.java similarity index 95% rename from tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dimension/AbstractDimension.java rename to tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/impl/dimension/AbstractDimension.java index 6d8d49d2506..095a42b1af0 100644 --- a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dimension/AbstractDimension.java +++ b/tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/impl/dimension/AbstractDimension.java @@ -14,7 +14,7 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.util.ndarray.impl.dimension; +package org.tensorflow.tools.ndarray.impl.dimension; abstract class AbstractDimension implements Dimension { diff --git a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dimension/Axis.java b/tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/impl/dimension/Axis.java similarity index 96% rename from tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dimension/Axis.java rename to tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/impl/dimension/Axis.java index 554beb46d66..e6eb2d6a5c4 100644 --- a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dimension/Axis.java +++ b/tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/impl/dimension/Axis.java @@ -14,7 +14,7 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.util.ndarray.impl.dimension; +package org.tensorflow.tools.ndarray.impl.dimension; final class Axis extends AbstractDimension { diff --git a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dimension/Dimension.java b/tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/impl/dimension/Dimension.java similarity index 90% rename from tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dimension/Dimension.java rename to tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/impl/dimension/Dimension.java index 54e71618909..1b0fcaae675 100644 --- a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dimension/Dimension.java +++ b/tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/impl/dimension/Dimension.java @@ -14,9 +14,9 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.util.ndarray.impl.dimension; +package org.tensorflow.tools.ndarray.impl.dimension; -import org.tensorflow.util.ndarray.index.Index; +import org.tensorflow.tools.ndarray.index.Index; public interface Dimension { diff --git a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dimension/DimensionalSpace.java b/tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/impl/dimension/DimensionalSpace.java similarity index 97% rename from tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dimension/DimensionalSpace.java rename to tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/impl/dimension/DimensionalSpace.java index 09010832fcf..9b4aa2f26f0 100644 --- a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dimension/DimensionalSpace.java +++ b/tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/impl/dimension/DimensionalSpace.java @@ -15,11 +15,11 @@ ======================================================================= */ -package org.tensorflow.util.ndarray.impl.dimension; +package org.tensorflow.tools.ndarray.impl.dimension; import java.util.Arrays; -import org.tensorflow.util.Shape; -import org.tensorflow.util.ndarray.index.Index; +import org.tensorflow.tools.Shape; +import org.tensorflow.tools.ndarray.index.Index; public class DimensionalSpace { diff --git a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dimension/IndexedDimension.java b/tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/impl/dimension/IndexedDimension.java similarity index 94% rename from tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dimension/IndexedDimension.java rename to tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/impl/dimension/IndexedDimension.java index 7c06cba92ea..7858addc7cb 100644 --- a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dimension/IndexedDimension.java +++ b/tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/impl/dimension/IndexedDimension.java @@ -14,9 +14,9 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.util.ndarray.impl.dimension; +package org.tensorflow.tools.ndarray.impl.dimension; -import org.tensorflow.util.ndarray.index.Index; +import org.tensorflow.tools.ndarray.index.Index; final class IndexedDimension extends AbstractDimension { diff --git a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dimension/ReducedDimension.java b/tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/impl/dimension/ReducedDimension.java similarity index 96% rename from tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dimension/ReducedDimension.java rename to tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/impl/dimension/ReducedDimension.java index 94902de01be..4f45fc5f36e 100644 --- a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dimension/ReducedDimension.java +++ b/tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/impl/dimension/ReducedDimension.java @@ -14,7 +14,7 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.util.ndarray.impl.dimension; +package org.tensorflow.tools.ndarray.impl.dimension; final class ReducedDimension extends AbstractDimension { diff --git a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dimension/RelativeDimensionalSpace.java b/tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/impl/dimension/RelativeDimensionalSpace.java similarity index 94% rename from tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dimension/RelativeDimensionalSpace.java rename to tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/impl/dimension/RelativeDimensionalSpace.java index 9cf3d626ca1..f2496b3efc8 100644 --- a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dimension/RelativeDimensionalSpace.java +++ b/tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/impl/dimension/RelativeDimensionalSpace.java @@ -15,7 +15,7 @@ ======================================================================= */ -package org.tensorflow.util.ndarray.impl.dimension; +package org.tensorflow.tools.ndarray.impl.dimension; public class RelativeDimensionalSpace extends DimensionalSpace { diff --git a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dimension/UnknownDimension.java b/tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/impl/dimension/UnknownDimension.java similarity index 93% rename from tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dimension/UnknownDimension.java rename to tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/impl/dimension/UnknownDimension.java index af8102cd9c7..450ff871957 100644 --- a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/dimension/UnknownDimension.java +++ b/tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/impl/dimension/UnknownDimension.java @@ -14,9 +14,9 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.util.ndarray.impl.dimension; +package org.tensorflow.tools.ndarray.impl.dimension; -import org.tensorflow.util.Shape; +import org.tensorflow.tools.Shape; final class UnknownDimension extends AbstractDimension { diff --git a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/sequence/ElementSequence.java b/tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/impl/sequence/ElementSequence.java similarity index 83% rename from tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/sequence/ElementSequence.java rename to tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/impl/sequence/ElementSequence.java index 3dd3e60984d..64fd01cfad2 100644 --- a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/sequence/ElementSequence.java +++ b/tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/impl/sequence/ElementSequence.java @@ -1,11 +1,11 @@ -package org.tensorflow.util.ndarray.impl.sequence; +package org.tensorflow.tools.ndarray.impl.sequence; import java.util.function.BiConsumer; import java.util.function.Consumer; -import org.tensorflow.util.ndarray.NdArray; -import org.tensorflow.util.ndarray.NdArraySequence; -import org.tensorflow.util.ndarray.impl.AbstractNdArray; -import org.tensorflow.util.ndarray.impl.dimension.DimensionalSpace; +import org.tensorflow.tools.ndarray.NdArray; +import org.tensorflow.tools.ndarray.NdArraySequence; +import org.tensorflow.tools.ndarray.impl.AbstractNdArray; +import org.tensorflow.tools.ndarray.impl.dimension.DimensionalSpace; public class ElementSequence> implements NdArraySequence { diff --git a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/sequence/IndexedPositionIterator.java b/tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/impl/sequence/IndexedPositionIterator.java similarity index 81% rename from tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/sequence/IndexedPositionIterator.java rename to tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/impl/sequence/IndexedPositionIterator.java index f4318538d34..784fc1d0f77 100644 --- a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/sequence/IndexedPositionIterator.java +++ b/tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/impl/sequence/IndexedPositionIterator.java @@ -1,4 +1,4 @@ -package org.tensorflow.util.ndarray.impl.sequence; +package org.tensorflow.tools.ndarray.impl.sequence; public interface IndexedPositionIterator extends PositionIterator { diff --git a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/sequence/IndexedSequentialPositionIterator.java b/tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/impl/sequence/IndexedSequentialPositionIterator.java similarity index 83% rename from tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/sequence/IndexedSequentialPositionIterator.java rename to tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/impl/sequence/IndexedSequentialPositionIterator.java index 90a2f0873f6..c25bf588ca4 100644 --- a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/sequence/IndexedSequentialPositionIterator.java +++ b/tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/impl/sequence/IndexedSequentialPositionIterator.java @@ -1,6 +1,6 @@ -package org.tensorflow.util.ndarray.impl.sequence; +package org.tensorflow.tools.ndarray.impl.sequence; -import org.tensorflow.util.ndarray.impl.dimension.DimensionalSpace; +import org.tensorflow.tools.ndarray.impl.dimension.DimensionalSpace; class IndexedSequentialPositionIterator extends SequentialPositionIterator implements IndexedPositionIterator { diff --git a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/sequence/NdPositionIterator.java b/tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/impl/sequence/NdPositionIterator.java similarity index 89% rename from tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/sequence/NdPositionIterator.java rename to tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/impl/sequence/NdPositionIterator.java index 85e857ef6e2..e52b7bcee4f 100644 --- a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/sequence/NdPositionIterator.java +++ b/tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/impl/sequence/NdPositionIterator.java @@ -1,6 +1,6 @@ -package org.tensorflow.util.ndarray.impl.sequence; +package org.tensorflow.tools.ndarray.impl.sequence; -import org.tensorflow.util.ndarray.impl.dimension.DimensionalSpace; +import org.tensorflow.tools.ndarray.impl.dimension.DimensionalSpace; class NdPositionIterator implements IndexedPositionIterator { diff --git a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/sequence/PositionIterator.java b/tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/impl/sequence/PositionIterator.java similarity index 86% rename from tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/sequence/PositionIterator.java rename to tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/impl/sequence/PositionIterator.java index b9d7cc07ad4..e1cf74d9674 100644 --- a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/sequence/PositionIterator.java +++ b/tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/impl/sequence/PositionIterator.java @@ -1,7 +1,7 @@ -package org.tensorflow.util.ndarray.impl.sequence; +package org.tensorflow.tools.ndarray.impl.sequence; import java.util.PrimitiveIterator; -import org.tensorflow.util.ndarray.impl.dimension.DimensionalSpace; +import org.tensorflow.tools.ndarray.impl.dimension.DimensionalSpace; public interface PositionIterator extends PrimitiveIterator.OfLong { diff --git a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/sequence/SequentialPositionIterator.java b/tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/impl/sequence/SequentialPositionIterator.java similarity index 84% rename from tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/sequence/SequentialPositionIterator.java rename to tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/impl/sequence/SequentialPositionIterator.java index 78428a1cb12..fa83eb0073f 100644 --- a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/sequence/SequentialPositionIterator.java +++ b/tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/impl/sequence/SequentialPositionIterator.java @@ -1,6 +1,6 @@ -package org.tensorflow.util.ndarray.impl.sequence; +package org.tensorflow.tools.ndarray.impl.sequence; -import org.tensorflow.util.ndarray.impl.dimension.DimensionalSpace; +import org.tensorflow.tools.ndarray.impl.dimension.DimensionalSpace; class SequentialPositionIterator implements PositionIterator { diff --git a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/sequence/SingleElementSequence.java b/tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/impl/sequence/SingleElementSequence.java similarity index 69% rename from tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/sequence/SingleElementSequence.java rename to tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/impl/sequence/SingleElementSequence.java index df3729b51bb..fed96b112e3 100644 --- a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/impl/sequence/SingleElementSequence.java +++ b/tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/impl/sequence/SingleElementSequence.java @@ -1,11 +1,11 @@ -package org.tensorflow.util.ndarray.impl.sequence; +package org.tensorflow.tools.ndarray.impl.sequence; import java.util.function.BiConsumer; import java.util.function.Consumer; -import org.tensorflow.util.ndarray.IllegalRankException; -import org.tensorflow.util.ndarray.NdArray; -import org.tensorflow.util.ndarray.NdArraySequence; -import org.tensorflow.util.ndarray.impl.AbstractNdArray; +import org.tensorflow.tools.ndarray.IllegalRankException; +import org.tensorflow.tools.ndarray.NdArray; +import org.tensorflow.tools.ndarray.NdArraySequence; +import org.tensorflow.tools.ndarray.impl.AbstractNdArray; class SingleElementSequence> implements NdArraySequence { diff --git a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/index/All.java b/tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/index/All.java similarity index 90% rename from tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/index/All.java rename to tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/index/All.java index 06c5ea7df40..3022b5407d2 100644 --- a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/index/All.java +++ b/tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/index/All.java @@ -14,9 +14,9 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.util.ndarray.index; +package org.tensorflow.tools.ndarray.index; -import org.tensorflow.util.ndarray.impl.dimension.Dimension; +import org.tensorflow.tools.ndarray.impl.dimension.Dimension; class All implements Index { diff --git a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/index/At.java b/tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/index/At.java similarity index 91% rename from tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/index/At.java rename to tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/index/At.java index 68cc6bf1f2a..34d26c81e2e 100644 --- a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/index/At.java +++ b/tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/index/At.java @@ -14,9 +14,9 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.util.ndarray.index; +package org.tensorflow.tools.ndarray.index; -import org.tensorflow.util.ndarray.impl.dimension.Dimension; +import org.tensorflow.tools.ndarray.impl.dimension.Dimension; class At implements Index { diff --git a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/index/Even.java b/tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/index/Even.java similarity index 90% rename from tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/index/Even.java rename to tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/index/Even.java index f1776a6bd78..0a5abe1c719 100644 --- a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/index/Even.java +++ b/tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/index/Even.java @@ -14,9 +14,9 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.util.ndarray.index; +package org.tensorflow.tools.ndarray.index; -import org.tensorflow.util.ndarray.impl.dimension.Dimension; +import org.tensorflow.tools.ndarray.impl.dimension.Dimension; class Even implements Index { diff --git a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/index/Flip.java b/tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/index/Flip.java similarity index 90% rename from tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/index/Flip.java rename to tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/index/Flip.java index 274b0974b40..eb15692a1dc 100644 --- a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/index/Flip.java +++ b/tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/index/Flip.java @@ -14,9 +14,9 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.util.ndarray.index; +package org.tensorflow.tools.ndarray.index; -import org.tensorflow.util.ndarray.impl.dimension.Dimension; +import org.tensorflow.tools.ndarray.impl.dimension.Dimension; class Flip implements Index { diff --git a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/index/From.java b/tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/index/From.java similarity index 90% rename from tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/index/From.java rename to tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/index/From.java index 24539364e48..6014df97ead 100644 --- a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/index/From.java +++ b/tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/index/From.java @@ -14,9 +14,9 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.util.ndarray.index; +package org.tensorflow.tools.ndarray.index; -import org.tensorflow.util.ndarray.impl.dimension.Dimension; +import org.tensorflow.tools.ndarray.impl.dimension.Dimension; class From implements Index { diff --git a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/index/Index.java b/tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/index/Index.java similarity index 94% rename from tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/index/Index.java rename to tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/index/Index.java index 48be7debe14..c2b4b0aa3ea 100644 --- a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/index/Index.java +++ b/tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/index/Index.java @@ -14,10 +14,10 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.util.ndarray.index; +package org.tensorflow.tools.ndarray.index; -import org.tensorflow.util.ndarray.NdArray; -import org.tensorflow.util.ndarray.impl.dimension.Dimension; +import org.tensorflow.tools.ndarray.impl.dimension.Dimension; +import org.tensorflow.tools.ndarray.NdArray; /** * An index used for slicing a view out of an N-dimensional array. diff --git a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/index/Indices.java b/tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/index/Indices.java similarity index 96% rename from tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/index/Indices.java rename to tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/index/Indices.java index e7fe5b5ecf0..822de6e60d8 100644 --- a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/index/Indices.java +++ b/tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/index/Indices.java @@ -14,13 +14,13 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.util.ndarray.index; +package org.tensorflow.tools.ndarray.index; -import org.tensorflow.util.buffer.DataBuffers; -import org.tensorflow.util.ndarray.IllegalRankException; -import org.tensorflow.util.ndarray.NdArray; -import org.tensorflow.util.ndarray.NdArrays; -import org.tensorflow.util.Shape; +import org.tensorflow.tools.buffer.DataBuffers; +import org.tensorflow.tools.ndarray.IllegalRankException; +import org.tensorflow.tools.ndarray.NdArray; +import org.tensorflow.tools.ndarray.NdArrays; +import org.tensorflow.tools.Shape; /** * Helper class for instantiating {@link Index} objects. diff --git a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/index/Odd.java b/tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/index/Odd.java similarity index 90% rename from tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/index/Odd.java rename to tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/index/Odd.java index 046d355fb73..1740e8a40b7 100644 --- a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/index/Odd.java +++ b/tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/index/Odd.java @@ -14,9 +14,9 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.util.ndarray.index; +package org.tensorflow.tools.ndarray.index; -import org.tensorflow.util.ndarray.impl.dimension.Dimension; +import org.tensorflow.tools.ndarray.impl.dimension.Dimension; class Odd implements Index { diff --git a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/index/Range.java b/tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/index/Range.java similarity index 90% rename from tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/index/Range.java rename to tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/index/Range.java index 72438e0f4bb..af71d79a275 100644 --- a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/index/Range.java +++ b/tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/index/Range.java @@ -14,9 +14,9 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.util.ndarray.index; +package org.tensorflow.tools.ndarray.index; -import org.tensorflow.util.ndarray.impl.dimension.Dimension; +import org.tensorflow.tools.ndarray.impl.dimension.Dimension; class Range implements Index { diff --git a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/index/Sequence.java b/tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/index/Sequence.java similarity index 87% rename from tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/index/Sequence.java rename to tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/index/Sequence.java index e862173c310..6322d851a51 100644 --- a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/index/Sequence.java +++ b/tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/index/Sequence.java @@ -14,10 +14,10 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.util.ndarray.index; +package org.tensorflow.tools.ndarray.index; -import org.tensorflow.util.ndarray.impl.dimension.Dimension; -import org.tensorflow.util.ndarray.NdArray; +import org.tensorflow.tools.ndarray.impl.dimension.Dimension; +import org.tensorflow.tools.ndarray.NdArray; class Sequence implements Index { diff --git a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/index/Step.java b/tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/index/Step.java similarity index 90% rename from tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/index/Step.java rename to tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/index/Step.java index cb3f65cae10..173018294ca 100644 --- a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/index/Step.java +++ b/tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/index/Step.java @@ -14,9 +14,9 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.util.ndarray.index; +package org.tensorflow.tools.ndarray.index; -import org.tensorflow.util.ndarray.impl.dimension.Dimension; +import org.tensorflow.tools.ndarray.impl.dimension.Dimension; class Step implements Index { diff --git a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/index/To.java b/tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/index/To.java similarity index 89% rename from tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/index/To.java rename to tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/index/To.java index a7ca91c6d31..4184d9a9430 100644 --- a/tensorflow-utils/src/main/java/org/tensorflow/util/ndarray/index/To.java +++ b/tensorflow-tools/src/main/java/org/tensorflow/tools/ndarray/index/To.java @@ -14,9 +14,9 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.util.ndarray.index; +package org.tensorflow.tools.ndarray.index; -import org.tensorflow.util.ndarray.impl.dimension.Dimension; +import org.tensorflow.tools.ndarray.impl.dimension.Dimension; class To implements Index { diff --git a/tensorflow-utils/src/test/java/org/tensorflow/util/ShapeTest.java b/tensorflow-tools/src/test/java/org/tensorflow/tools/ShapeTest.java similarity index 97% rename from tensorflow-utils/src/test/java/org/tensorflow/util/ShapeTest.java rename to tensorflow-tools/src/test/java/org/tensorflow/tools/ShapeTest.java index be80e4cc9e7..1f8b4dc44e4 100644 --- a/tensorflow-utils/src/test/java/org/tensorflow/util/ShapeTest.java +++ b/tensorflow-tools/src/test/java/org/tensorflow/tools/ShapeTest.java @@ -14,7 +14,7 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.util; +package org.tensorflow.tools; import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertEquals; @@ -22,7 +22,7 @@ import static org.junit.Assert.fail; import org.junit.Test; -import org.tensorflow.util.Shape; +import org.tensorflow.tools.Shape; public class ShapeTest { diff --git a/tensorflow-utils/src/test/java/org/tensorflow/util/benchmark/NdArrayBenchmark.java b/tensorflow-tools/src/test/java/org/tensorflow/tools/benchmark/NdArrayBenchmark.java similarity index 93% rename from tensorflow-utils/src/test/java/org/tensorflow/util/benchmark/NdArrayBenchmark.java rename to tensorflow-tools/src/test/java/org/tensorflow/tools/benchmark/NdArrayBenchmark.java index 12e5b66c2c5..84b7ed324ef 100644 --- a/tensorflow-utils/src/test/java/org/tensorflow/util/benchmark/NdArrayBenchmark.java +++ b/tensorflow-tools/src/test/java/org/tensorflow/tools/benchmark/NdArrayBenchmark.java @@ -14,10 +14,10 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.util.benchmark; +package org.tensorflow.tools.benchmark; -import static org.tensorflow.util.ndarray.index.Indices.all; -import static org.tensorflow.util.ndarray.index.Indices.at; +import static org.tensorflow.tools.ndarray.index.Indices.all; +import static org.tensorflow.tools.ndarray.index.Indices.at; import java.awt.image.BufferedImage; import java.awt.image.Raster; @@ -33,9 +33,9 @@ import org.openjdk.jmh.annotations.State; import org.openjdk.jmh.annotations.Warmup; import org.openjdk.jmh.runner.RunnerException; -import org.tensorflow.util.ndarray.FloatNdArray; -import org.tensorflow.util.ndarray.NdArrays; -import org.tensorflow.util.Shape; +import org.tensorflow.tools.ndarray.FloatNdArray; +import org.tensorflow.tools.ndarray.NdArrays; +import org.tensorflow.tools.Shape; @Fork(value = 1, jvmArgs = {"-Xms4G", "-Xmx4G"}) @BenchmarkMode(Mode.AverageTime) diff --git a/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/BooleanDataBufferTestBase.java b/tensorflow-tools/src/test/java/org/tensorflow/tools/buffer/BooleanDataBufferTestBase.java similarity index 98% rename from tensorflow-utils/src/test/java/org/tensorflow/util/buffer/BooleanDataBufferTestBase.java rename to tensorflow-tools/src/test/java/org/tensorflow/tools/buffer/BooleanDataBufferTestBase.java index 697699ee139..37d9a4a5d71 100644 --- a/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/BooleanDataBufferTestBase.java +++ b/tensorflow-tools/src/test/java/org/tensorflow/tools/buffer/BooleanDataBufferTestBase.java @@ -14,7 +14,7 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.util.buffer; +package org.tensorflow.tools.buffer; import static junit.framework.TestCase.assertTrue; import static org.junit.Assert.assertArrayEquals; diff --git a/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/ByteDataBufferTestBase.java b/tensorflow-tools/src/test/java/org/tensorflow/tools/buffer/ByteDataBufferTestBase.java similarity index 98% rename from tensorflow-utils/src/test/java/org/tensorflow/util/buffer/ByteDataBufferTestBase.java rename to tensorflow-tools/src/test/java/org/tensorflow/tools/buffer/ByteDataBufferTestBase.java index 119868799c1..b922c528223 100644 --- a/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/ByteDataBufferTestBase.java +++ b/tensorflow-tools/src/test/java/org/tensorflow/tools/buffer/ByteDataBufferTestBase.java @@ -14,7 +14,7 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.util.buffer; +package org.tensorflow.tools.buffer; import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertEquals; diff --git a/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/DataBufferTestBase.java b/tensorflow-tools/src/test/java/org/tensorflow/tools/buffer/DataBufferTestBase.java similarity index 98% rename from tensorflow-utils/src/test/java/org/tensorflow/util/buffer/DataBufferTestBase.java rename to tensorflow-tools/src/test/java/org/tensorflow/tools/buffer/DataBufferTestBase.java index 1b77cba24bb..e77fd23e019 100644 --- a/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/DataBufferTestBase.java +++ b/tensorflow-tools/src/test/java/org/tensorflow/tools/buffer/DataBufferTestBase.java @@ -14,7 +14,7 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.util.buffer; +package org.tensorflow.tools.buffer; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; @@ -24,6 +24,7 @@ import java.nio.BufferOverflowException; import java.nio.BufferUnderflowException; import org.junit.Test; +import org.tensorflow.tools.buffer.DataBuffer; abstract public class DataBufferTestBase { diff --git a/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/DoubleDataBufferTestBase.java b/tensorflow-tools/src/test/java/org/tensorflow/tools/buffer/DoubleDataBufferTestBase.java similarity index 98% rename from tensorflow-utils/src/test/java/org/tensorflow/util/buffer/DoubleDataBufferTestBase.java rename to tensorflow-tools/src/test/java/org/tensorflow/tools/buffer/DoubleDataBufferTestBase.java index 6391542c9dc..715f8d6329b 100644 --- a/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/DoubleDataBufferTestBase.java +++ b/tensorflow-tools/src/test/java/org/tensorflow/tools/buffer/DoubleDataBufferTestBase.java @@ -14,7 +14,7 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.util.buffer; +package org.tensorflow.tools.buffer; import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertEquals; diff --git a/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/FloatDataBufferTestBase.java b/tensorflow-tools/src/test/java/org/tensorflow/tools/buffer/FloatDataBufferTestBase.java similarity index 98% rename from tensorflow-utils/src/test/java/org/tensorflow/util/buffer/FloatDataBufferTestBase.java rename to tensorflow-tools/src/test/java/org/tensorflow/tools/buffer/FloatDataBufferTestBase.java index fba9fdf00ad..3c60eb92a2a 100644 --- a/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/FloatDataBufferTestBase.java +++ b/tensorflow-tools/src/test/java/org/tensorflow/tools/buffer/FloatDataBufferTestBase.java @@ -14,7 +14,7 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.util.buffer; +package org.tensorflow.tools.buffer; import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertEquals; diff --git a/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/IntDataBufferTestBase.java b/tensorflow-tools/src/test/java/org/tensorflow/tools/buffer/IntDataBufferTestBase.java similarity index 98% rename from tensorflow-utils/src/test/java/org/tensorflow/util/buffer/IntDataBufferTestBase.java rename to tensorflow-tools/src/test/java/org/tensorflow/tools/buffer/IntDataBufferTestBase.java index 42899ab1317..fd4badc6c9c 100644 --- a/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/IntDataBufferTestBase.java +++ b/tensorflow-tools/src/test/java/org/tensorflow/tools/buffer/IntDataBufferTestBase.java @@ -14,7 +14,7 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.util.buffer; +package org.tensorflow.tools.buffer; import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertEquals; diff --git a/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/LongDataBufferTestBase.java b/tensorflow-tools/src/test/java/org/tensorflow/tools/buffer/LongDataBufferTestBase.java similarity index 98% rename from tensorflow-utils/src/test/java/org/tensorflow/util/buffer/LongDataBufferTestBase.java rename to tensorflow-tools/src/test/java/org/tensorflow/tools/buffer/LongDataBufferTestBase.java index b4498b6196e..9228861957b 100644 --- a/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/LongDataBufferTestBase.java +++ b/tensorflow-tools/src/test/java/org/tensorflow/tools/buffer/LongDataBufferTestBase.java @@ -14,7 +14,7 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.util.buffer; +package org.tensorflow.tools.buffer; import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertEquals; diff --git a/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/ShortDataBufferTestBase.java b/tensorflow-tools/src/test/java/org/tensorflow/tools/buffer/ShortDataBufferTestBase.java similarity index 98% rename from tensorflow-utils/src/test/java/org/tensorflow/util/buffer/ShortDataBufferTestBase.java rename to tensorflow-tools/src/test/java/org/tensorflow/tools/buffer/ShortDataBufferTestBase.java index 0eb73f8b2e1..845e4aa7108 100644 --- a/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/ShortDataBufferTestBase.java +++ b/tensorflow-tools/src/test/java/org/tensorflow/tools/buffer/ShortDataBufferTestBase.java @@ -14,7 +14,7 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.util.buffer; +package org.tensorflow.tools.buffer; import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertEquals; diff --git a/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/jdk/ByteJdkDataBufferTest.java b/tensorflow-tools/src/test/java/org/tensorflow/tools/buffer/impl/jdk/ByteJdkDataBufferTest.java similarity index 85% rename from tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/jdk/ByteJdkDataBufferTest.java rename to tensorflow-tools/src/test/java/org/tensorflow/tools/buffer/impl/jdk/ByteJdkDataBufferTest.java index 25accbc63a3..3974969d156 100644 --- a/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/jdk/ByteJdkDataBufferTest.java +++ b/tensorflow-tools/src/test/java/org/tensorflow/tools/buffer/impl/jdk/ByteJdkDataBufferTest.java @@ -14,10 +14,10 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.util.buffer.impl.jdk; +package org.tensorflow.tools.buffer.impl.jdk; -import org.tensorflow.util.buffer.ByteDataBuffer; -import org.tensorflow.util.buffer.ByteDataBufferTestBase; +import org.tensorflow.tools.buffer.ByteDataBuffer; +import org.tensorflow.tools.buffer.ByteDataBufferTestBase; public class ByteJdkDataBufferTest extends ByteDataBufferTestBase { diff --git a/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/jdk/DoubleJdkDataBufferTest.java b/tensorflow-tools/src/test/java/org/tensorflow/tools/buffer/impl/jdk/DoubleJdkDataBufferTest.java similarity index 85% rename from tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/jdk/DoubleJdkDataBufferTest.java rename to tensorflow-tools/src/test/java/org/tensorflow/tools/buffer/impl/jdk/DoubleJdkDataBufferTest.java index 99f8ccf075e..09284725159 100644 --- a/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/jdk/DoubleJdkDataBufferTest.java +++ b/tensorflow-tools/src/test/java/org/tensorflow/tools/buffer/impl/jdk/DoubleJdkDataBufferTest.java @@ -14,10 +14,10 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.util.buffer.impl.jdk; +package org.tensorflow.tools.buffer.impl.jdk; -import org.tensorflow.util.buffer.DoubleDataBuffer; -import org.tensorflow.util.buffer.DoubleDataBufferTestBase; +import org.tensorflow.tools.buffer.DoubleDataBuffer; +import org.tensorflow.tools.buffer.DoubleDataBufferTestBase; public class DoubleJdkDataBufferTest extends DoubleDataBufferTestBase { diff --git a/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/jdk/FloatJdkDataBufferTest.java b/tensorflow-tools/src/test/java/org/tensorflow/tools/buffer/impl/jdk/FloatJdkDataBufferTest.java similarity index 85% rename from tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/jdk/FloatJdkDataBufferTest.java rename to tensorflow-tools/src/test/java/org/tensorflow/tools/buffer/impl/jdk/FloatJdkDataBufferTest.java index 3c71abfb008..e269c1c09fc 100644 --- a/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/jdk/FloatJdkDataBufferTest.java +++ b/tensorflow-tools/src/test/java/org/tensorflow/tools/buffer/impl/jdk/FloatJdkDataBufferTest.java @@ -14,10 +14,10 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.util.buffer.impl.jdk; +package org.tensorflow.tools.buffer.impl.jdk; -import org.tensorflow.util.buffer.FloatDataBuffer; -import org.tensorflow.util.buffer.FloatDataBufferTestBase; +import org.tensorflow.tools.buffer.FloatDataBuffer; +import org.tensorflow.tools.buffer.FloatDataBufferTestBase; public class FloatJdkDataBufferTest extends FloatDataBufferTestBase { diff --git a/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/jdk/IntJdkDataBufferTest.java b/tensorflow-tools/src/test/java/org/tensorflow/tools/buffer/impl/jdk/IntJdkDataBufferTest.java similarity index 85% rename from tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/jdk/IntJdkDataBufferTest.java rename to tensorflow-tools/src/test/java/org/tensorflow/tools/buffer/impl/jdk/IntJdkDataBufferTest.java index b6e9ce6898e..d1751a63753 100644 --- a/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/jdk/IntJdkDataBufferTest.java +++ b/tensorflow-tools/src/test/java/org/tensorflow/tools/buffer/impl/jdk/IntJdkDataBufferTest.java @@ -14,10 +14,10 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.util.buffer.impl.jdk; +package org.tensorflow.tools.buffer.impl.jdk; -import org.tensorflow.util.buffer.IntDataBuffer; -import org.tensorflow.util.buffer.IntDataBufferTestBase; +import org.tensorflow.tools.buffer.IntDataBuffer; +import org.tensorflow.tools.buffer.IntDataBufferTestBase; public class IntJdkDataBufferTest extends IntDataBufferTestBase { diff --git a/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/jdk/LongJdkDataBufferTest.java b/tensorflow-tools/src/test/java/org/tensorflow/tools/buffer/impl/jdk/LongJdkDataBufferTest.java similarity index 85% rename from tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/jdk/LongJdkDataBufferTest.java rename to tensorflow-tools/src/test/java/org/tensorflow/tools/buffer/impl/jdk/LongJdkDataBufferTest.java index ee6cabf8f69..8bb6eb04a70 100644 --- a/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/jdk/LongJdkDataBufferTest.java +++ b/tensorflow-tools/src/test/java/org/tensorflow/tools/buffer/impl/jdk/LongJdkDataBufferTest.java @@ -14,10 +14,10 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.util.buffer.impl.jdk; +package org.tensorflow.tools.buffer.impl.jdk; -import org.tensorflow.util.buffer.LongDataBuffer; -import org.tensorflow.util.buffer.LongDataBufferTestBase; +import org.tensorflow.tools.buffer.LongDataBuffer; +import org.tensorflow.tools.buffer.LongDataBufferTestBase; public class LongJdkDataBufferTest extends LongDataBufferTestBase { diff --git a/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/jdk/ShortJdkDataBufferTest.java b/tensorflow-tools/src/test/java/org/tensorflow/tools/buffer/impl/jdk/ShortJdkDataBufferTest.java similarity index 85% rename from tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/jdk/ShortJdkDataBufferTest.java rename to tensorflow-tools/src/test/java/org/tensorflow/tools/buffer/impl/jdk/ShortJdkDataBufferTest.java index bfded1dac87..e2e7d9ccf4f 100644 --- a/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/jdk/ShortJdkDataBufferTest.java +++ b/tensorflow-tools/src/test/java/org/tensorflow/tools/buffer/impl/jdk/ShortJdkDataBufferTest.java @@ -14,10 +14,10 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.util.buffer.impl.jdk; +package org.tensorflow.tools.buffer.impl.jdk; -import org.tensorflow.util.buffer.ShortDataBuffer; -import org.tensorflow.util.buffer.ShortDataBufferTestBase; +import org.tensorflow.tools.buffer.ShortDataBuffer; +import org.tensorflow.tools.buffer.ShortDataBufferTestBase; public class ShortJdkDataBufferTest extends ShortDataBufferTestBase { diff --git a/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/misc/ArrayDataBufferTest.java b/tensorflow-tools/src/test/java/org/tensorflow/tools/buffer/impl/misc/ArrayDataBufferTest.java similarity index 88% rename from tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/misc/ArrayDataBufferTest.java rename to tensorflow-tools/src/test/java/org/tensorflow/tools/buffer/impl/misc/ArrayDataBufferTest.java index df20a9545e8..d5b02313bcd 100644 --- a/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/misc/ArrayDataBufferTest.java +++ b/tensorflow-tools/src/test/java/org/tensorflow/tools/buffer/impl/misc/ArrayDataBufferTest.java @@ -14,11 +14,11 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.util.buffer.impl.misc; +package org.tensorflow.tools.buffer.impl.misc; import java.math.BigDecimal; -import org.tensorflow.util.buffer.DataBuffer; -import org.tensorflow.util.buffer.DataBufferTestBase; +import org.tensorflow.tools.buffer.DataBuffer; +import org.tensorflow.tools.buffer.DataBufferTestBase; public class ArrayDataBufferTest extends DataBufferTestBase { diff --git a/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/misc/BitSetDataBufferTest.java b/tensorflow-tools/src/test/java/org/tensorflow/tools/buffer/impl/misc/BitSetDataBufferTest.java similarity index 86% rename from tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/misc/BitSetDataBufferTest.java rename to tensorflow-tools/src/test/java/org/tensorflow/tools/buffer/impl/misc/BitSetDataBufferTest.java index 4dd11497bc7..37f5dfb2f8c 100644 --- a/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/misc/BitSetDataBufferTest.java +++ b/tensorflow-tools/src/test/java/org/tensorflow/tools/buffer/impl/misc/BitSetDataBufferTest.java @@ -14,10 +14,10 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.util.buffer.impl.misc; +package org.tensorflow.tools.buffer.impl.misc; -import org.tensorflow.util.buffer.BooleanDataBuffer; -import org.tensorflow.util.buffer.BooleanDataBufferTestBase; +import org.tensorflow.tools.buffer.BooleanDataBuffer; +import org.tensorflow.tools.buffer.BooleanDataBufferTestBase; public class BitSetDataBufferTest extends BooleanDataBufferTestBase { diff --git a/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/misc/StringArrayDataBufferTest.java b/tensorflow-tools/src/test/java/org/tensorflow/tools/buffer/impl/misc/StringArrayDataBufferTest.java similarity index 87% rename from tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/misc/StringArrayDataBufferTest.java rename to tensorflow-tools/src/test/java/org/tensorflow/tools/buffer/impl/misc/StringArrayDataBufferTest.java index 404bf4d834a..ac3b6bc8665 100644 --- a/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/misc/StringArrayDataBufferTest.java +++ b/tensorflow-tools/src/test/java/org/tensorflow/tools/buffer/impl/misc/StringArrayDataBufferTest.java @@ -14,10 +14,10 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.util.buffer.impl.misc; +package org.tensorflow.tools.buffer.impl.misc; -import org.tensorflow.util.buffer.DataBuffer; -import org.tensorflow.util.buffer.DataBufferTestBase; +import org.tensorflow.tools.buffer.DataBuffer; +import org.tensorflow.tools.buffer.DataBufferTestBase; public class StringArrayDataBufferTest extends DataBufferTestBase { diff --git a/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/raw/BooleanRawDataBufferTest.java b/tensorflow-tools/src/test/java/org/tensorflow/tools/buffer/impl/raw/BooleanRawDataBufferTest.java similarity index 85% rename from tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/raw/BooleanRawDataBufferTest.java rename to tensorflow-tools/src/test/java/org/tensorflow/tools/buffer/impl/raw/BooleanRawDataBufferTest.java index 4ee78c03c70..5f74d48ca93 100644 --- a/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/raw/BooleanRawDataBufferTest.java +++ b/tensorflow-tools/src/test/java/org/tensorflow/tools/buffer/impl/raw/BooleanRawDataBufferTest.java @@ -14,10 +14,10 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.util.buffer.impl.raw; +package org.tensorflow.tools.buffer.impl.raw; -import org.tensorflow.util.buffer.DoubleDataBuffer; -import org.tensorflow.util.buffer.DoubleDataBufferTestBase; +import org.tensorflow.tools.buffer.DoubleDataBuffer; +import org.tensorflow.tools.buffer.DoubleDataBufferTestBase; public class BooleanRawDataBufferTest extends DoubleDataBufferTestBase { diff --git a/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/raw/ByteRawDataBufferTest.java b/tensorflow-tools/src/test/java/org/tensorflow/tools/buffer/impl/raw/ByteRawDataBufferTest.java similarity index 85% rename from tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/raw/ByteRawDataBufferTest.java rename to tensorflow-tools/src/test/java/org/tensorflow/tools/buffer/impl/raw/ByteRawDataBufferTest.java index fa219af3254..5f448dafcf0 100644 --- a/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/raw/ByteRawDataBufferTest.java +++ b/tensorflow-tools/src/test/java/org/tensorflow/tools/buffer/impl/raw/ByteRawDataBufferTest.java @@ -14,10 +14,10 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.util.buffer.impl.raw; +package org.tensorflow.tools.buffer.impl.raw; -import org.tensorflow.util.buffer.ByteDataBuffer; -import org.tensorflow.util.buffer.ByteDataBufferTestBase; +import org.tensorflow.tools.buffer.ByteDataBuffer; +import org.tensorflow.tools.buffer.ByteDataBufferTestBase; public class ByteRawDataBufferTest extends ByteDataBufferTestBase { diff --git a/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/raw/DoubleRawDataBufferTest.java b/tensorflow-tools/src/test/java/org/tensorflow/tools/buffer/impl/raw/DoubleRawDataBufferTest.java similarity index 85% rename from tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/raw/DoubleRawDataBufferTest.java rename to tensorflow-tools/src/test/java/org/tensorflow/tools/buffer/impl/raw/DoubleRawDataBufferTest.java index 6b7134bfabc..ca260f000e9 100644 --- a/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/raw/DoubleRawDataBufferTest.java +++ b/tensorflow-tools/src/test/java/org/tensorflow/tools/buffer/impl/raw/DoubleRawDataBufferTest.java @@ -14,10 +14,10 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.util.buffer.impl.raw; +package org.tensorflow.tools.buffer.impl.raw; -import org.tensorflow.util.buffer.DoubleDataBuffer; -import org.tensorflow.util.buffer.DoubleDataBufferTestBase; +import org.tensorflow.tools.buffer.DoubleDataBuffer; +import org.tensorflow.tools.buffer.DoubleDataBufferTestBase; public class DoubleRawDataBufferTest extends DoubleDataBufferTestBase { diff --git a/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/raw/FloatRawDataBufferTest.java b/tensorflow-tools/src/test/java/org/tensorflow/tools/buffer/impl/raw/FloatRawDataBufferTest.java similarity index 85% rename from tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/raw/FloatRawDataBufferTest.java rename to tensorflow-tools/src/test/java/org/tensorflow/tools/buffer/impl/raw/FloatRawDataBufferTest.java index 262feb14263..2c539ddd0c8 100644 --- a/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/raw/FloatRawDataBufferTest.java +++ b/tensorflow-tools/src/test/java/org/tensorflow/tools/buffer/impl/raw/FloatRawDataBufferTest.java @@ -14,10 +14,10 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.util.buffer.impl.raw; +package org.tensorflow.tools.buffer.impl.raw; -import org.tensorflow.util.buffer.FloatDataBuffer; -import org.tensorflow.util.buffer.FloatDataBufferTestBase; +import org.tensorflow.tools.buffer.FloatDataBuffer; +import org.tensorflow.tools.buffer.FloatDataBufferTestBase; public class FloatRawDataBufferTest extends FloatDataBufferTestBase { diff --git a/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/raw/IntRawDataBufferTest.java b/tensorflow-tools/src/test/java/org/tensorflow/tools/buffer/impl/raw/IntRawDataBufferTest.java similarity index 85% rename from tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/raw/IntRawDataBufferTest.java rename to tensorflow-tools/src/test/java/org/tensorflow/tools/buffer/impl/raw/IntRawDataBufferTest.java index 7ad18e6cb5d..a5e9978b9d6 100644 --- a/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/raw/IntRawDataBufferTest.java +++ b/tensorflow-tools/src/test/java/org/tensorflow/tools/buffer/impl/raw/IntRawDataBufferTest.java @@ -14,10 +14,10 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.util.buffer.impl.raw; +package org.tensorflow.tools.buffer.impl.raw; -import org.tensorflow.util.buffer.IntDataBuffer; -import org.tensorflow.util.buffer.IntDataBufferTestBase; +import org.tensorflow.tools.buffer.IntDataBuffer; +import org.tensorflow.tools.buffer.IntDataBufferTestBase; public class IntRawDataBufferTest extends IntDataBufferTestBase { diff --git a/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/raw/LongRawDataBufferTest.java b/tensorflow-tools/src/test/java/org/tensorflow/tools/buffer/impl/raw/LongRawDataBufferTest.java similarity index 85% rename from tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/raw/LongRawDataBufferTest.java rename to tensorflow-tools/src/test/java/org/tensorflow/tools/buffer/impl/raw/LongRawDataBufferTest.java index 40ad6c8678c..48b1e4734e3 100644 --- a/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/raw/LongRawDataBufferTest.java +++ b/tensorflow-tools/src/test/java/org/tensorflow/tools/buffer/impl/raw/LongRawDataBufferTest.java @@ -14,10 +14,10 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.util.buffer.impl.raw; +package org.tensorflow.tools.buffer.impl.raw; -import org.tensorflow.util.buffer.LongDataBuffer; -import org.tensorflow.util.buffer.LongDataBufferTestBase; +import org.tensorflow.tools.buffer.LongDataBuffer; +import org.tensorflow.tools.buffer.LongDataBufferTestBase; public class LongRawDataBufferTest extends LongDataBufferTestBase { diff --git a/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/raw/ShortRawDataBufferTest.java b/tensorflow-tools/src/test/java/org/tensorflow/tools/buffer/impl/raw/ShortRawDataBufferTest.java similarity index 85% rename from tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/raw/ShortRawDataBufferTest.java rename to tensorflow-tools/src/test/java/org/tensorflow/tools/buffer/impl/raw/ShortRawDataBufferTest.java index 154e15ea569..0c9bb5a9b65 100644 --- a/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/raw/ShortRawDataBufferTest.java +++ b/tensorflow-tools/src/test/java/org/tensorflow/tools/buffer/impl/raw/ShortRawDataBufferTest.java @@ -14,10 +14,10 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.util.buffer.impl.raw; +package org.tensorflow.tools.buffer.impl.raw; -import org.tensorflow.util.buffer.ShortDataBufferTestBase; -import org.tensorflow.util.buffer.ShortDataBuffer; +import org.tensorflow.tools.buffer.ShortDataBufferTestBase; +import org.tensorflow.tools.buffer.ShortDataBuffer; public class ShortRawDataBufferTest extends ShortDataBufferTestBase { diff --git a/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/virtual/BigIntegerVirtualDataBufferTest.java b/tensorflow-tools/src/test/java/org/tensorflow/tools/buffer/impl/virtual/BigIntegerVirtualDataBufferTest.java similarity index 76% rename from tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/virtual/BigIntegerVirtualDataBufferTest.java rename to tensorflow-tools/src/test/java/org/tensorflow/tools/buffer/impl/virtual/BigIntegerVirtualDataBufferTest.java index e60650b5923..0f88ae83f54 100644 --- a/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/virtual/BigIntegerVirtualDataBufferTest.java +++ b/tensorflow-tools/src/test/java/org/tensorflow/tools/buffer/impl/virtual/BigIntegerVirtualDataBufferTest.java @@ -1,12 +1,12 @@ -package org.tensorflow.util.buffer.impl.virtual; +package org.tensorflow.tools.buffer.impl.virtual; import java.math.BigInteger; -import org.tensorflow.util.buffer.ByteDataBuffer; -import org.tensorflow.util.buffer.DataBuffer; -import org.tensorflow.util.buffer.DataBuffers; -import org.tensorflow.util.buffer.adapter.DataAdapter; -import org.tensorflow.util.buffer.impl.jdk.ByteJdkDataBuffer; -import org.tensorflow.util.buffer.DataBufferTestBase; +import org.tensorflow.tools.buffer.ByteDataBuffer; +import org.tensorflow.tools.buffer.DataBuffer; +import org.tensorflow.tools.buffer.DataBuffers; +import org.tensorflow.tools.buffer.adapter.DataAdapter; +import org.tensorflow.tools.buffer.impl.jdk.ByteJdkDataBuffer; +import org.tensorflow.tools.buffer.DataBufferTestBase; public class BigIntegerVirtualDataBufferTest extends DataBufferTestBase { diff --git a/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/virtual/BooleanVirtualDataBufferTest.java b/tensorflow-tools/src/test/java/org/tensorflow/tools/buffer/impl/virtual/BooleanVirtualDataBufferTest.java similarity index 65% rename from tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/virtual/BooleanVirtualDataBufferTest.java rename to tensorflow-tools/src/test/java/org/tensorflow/tools/buffer/impl/virtual/BooleanVirtualDataBufferTest.java index 18c0575349d..3e98357c9b0 100644 --- a/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/virtual/BooleanVirtualDataBufferTest.java +++ b/tensorflow-tools/src/test/java/org/tensorflow/tools/buffer/impl/virtual/BooleanVirtualDataBufferTest.java @@ -1,11 +1,11 @@ -package org.tensorflow.util.buffer.impl.virtual; - -import org.tensorflow.util.buffer.BooleanDataBuffer; -import org.tensorflow.util.buffer.ByteDataBuffer; -import org.tensorflow.util.buffer.DataBuffers; -import org.tensorflow.util.buffer.adapter.BooleanDataAdapter; -import org.tensorflow.util.buffer.impl.jdk.ByteJdkDataBuffer; -import org.tensorflow.util.buffer.BooleanDataBufferTestBase; +package org.tensorflow.tools.buffer.impl.virtual; + +import org.tensorflow.tools.buffer.BooleanDataBuffer; +import org.tensorflow.tools.buffer.ByteDataBuffer; +import org.tensorflow.tools.buffer.DataBuffers; +import org.tensorflow.tools.buffer.adapter.BooleanDataAdapter; +import org.tensorflow.tools.buffer.impl.jdk.ByteJdkDataBuffer; +import org.tensorflow.tools.buffer.BooleanDataBufferTestBase; public class BooleanVirtualDataBufferTest extends BooleanDataBufferTestBase { diff --git a/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/virtual/DoubleVirtualDataBufferTest.java b/tensorflow-tools/src/test/java/org/tensorflow/tools/buffer/impl/virtual/DoubleVirtualDataBufferTest.java similarity index 74% rename from tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/virtual/DoubleVirtualDataBufferTest.java rename to tensorflow-tools/src/test/java/org/tensorflow/tools/buffer/impl/virtual/DoubleVirtualDataBufferTest.java index 5dc8706ea3a..28b67f97e3c 100644 --- a/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/virtual/DoubleVirtualDataBufferTest.java +++ b/tensorflow-tools/src/test/java/org/tensorflow/tools/buffer/impl/virtual/DoubleVirtualDataBufferTest.java @@ -1,11 +1,11 @@ -package org.tensorflow.util.buffer.impl.virtual; - -import org.tensorflow.util.buffer.ByteDataBuffer; -import org.tensorflow.util.buffer.DataBuffers; -import org.tensorflow.util.buffer.DoubleDataBuffer; -import org.tensorflow.util.buffer.adapter.DoubleDataAdapter; -import org.tensorflow.util.buffer.impl.jdk.ByteJdkDataBuffer; -import org.tensorflow.util.buffer.DoubleDataBufferTestBase; +package org.tensorflow.tools.buffer.impl.virtual; + +import org.tensorflow.tools.buffer.ByteDataBuffer; +import org.tensorflow.tools.buffer.DataBuffers; +import org.tensorflow.tools.buffer.DoubleDataBuffer; +import org.tensorflow.tools.buffer.adapter.DoubleDataAdapter; +import org.tensorflow.tools.buffer.impl.jdk.ByteJdkDataBuffer; +import org.tensorflow.tools.buffer.DoubleDataBufferTestBase; public class DoubleVirtualDataBufferTest extends DoubleDataBufferTestBase { diff --git a/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/virtual/FloatVirtualDataBufferTest.java b/tensorflow-tools/src/test/java/org/tensorflow/tools/buffer/impl/virtual/FloatVirtualDataBufferTest.java similarity index 71% rename from tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/virtual/FloatVirtualDataBufferTest.java rename to tensorflow-tools/src/test/java/org/tensorflow/tools/buffer/impl/virtual/FloatVirtualDataBufferTest.java index ac19b3db51f..e32e74d7f70 100644 --- a/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/virtual/FloatVirtualDataBufferTest.java +++ b/tensorflow-tools/src/test/java/org/tensorflow/tools/buffer/impl/virtual/FloatVirtualDataBufferTest.java @@ -1,11 +1,11 @@ -package org.tensorflow.util.buffer.impl.virtual; - -import org.tensorflow.util.buffer.ByteDataBuffer; -import org.tensorflow.util.buffer.DataBuffers; -import org.tensorflow.util.buffer.FloatDataBuffer; -import org.tensorflow.util.buffer.adapter.FloatDataAdapter; -import org.tensorflow.util.buffer.impl.jdk.ByteJdkDataBuffer; -import org.tensorflow.util.buffer.FloatDataBufferTestBase; +package org.tensorflow.tools.buffer.impl.virtual; + +import org.tensorflow.tools.buffer.ByteDataBuffer; +import org.tensorflow.tools.buffer.DataBuffers; +import org.tensorflow.tools.buffer.FloatDataBuffer; +import org.tensorflow.tools.buffer.adapter.FloatDataAdapter; +import org.tensorflow.tools.buffer.impl.jdk.ByteJdkDataBuffer; +import org.tensorflow.tools.buffer.FloatDataBufferTestBase; public class FloatVirtualDataBufferTest extends FloatDataBufferTestBase { diff --git a/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/virtual/IntVirtualDataBufferTest.java b/tensorflow-tools/src/test/java/org/tensorflow/tools/buffer/impl/virtual/IntVirtualDataBufferTest.java similarity index 70% rename from tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/virtual/IntVirtualDataBufferTest.java rename to tensorflow-tools/src/test/java/org/tensorflow/tools/buffer/impl/virtual/IntVirtualDataBufferTest.java index a23748726c9..a57df03da8b 100644 --- a/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/virtual/IntVirtualDataBufferTest.java +++ b/tensorflow-tools/src/test/java/org/tensorflow/tools/buffer/impl/virtual/IntVirtualDataBufferTest.java @@ -1,11 +1,11 @@ -package org.tensorflow.util.buffer.impl.virtual; - -import org.tensorflow.util.buffer.ByteDataBuffer; -import org.tensorflow.util.buffer.DataBuffers; -import org.tensorflow.util.buffer.IntDataBuffer; -import org.tensorflow.util.buffer.adapter.IntDataAdapter; -import org.tensorflow.util.buffer.impl.jdk.ByteJdkDataBuffer; -import org.tensorflow.util.buffer.IntDataBufferTestBase; +package org.tensorflow.tools.buffer.impl.virtual; + +import org.tensorflow.tools.buffer.ByteDataBuffer; +import org.tensorflow.tools.buffer.DataBuffers; +import org.tensorflow.tools.buffer.IntDataBuffer; +import org.tensorflow.tools.buffer.adapter.IntDataAdapter; +import org.tensorflow.tools.buffer.impl.jdk.ByteJdkDataBuffer; +import org.tensorflow.tools.buffer.IntDataBufferTestBase; public class IntVirtualDataBufferTest extends IntDataBufferTestBase { diff --git a/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/virtual/LongVirtualDataBufferTest.java b/tensorflow-tools/src/test/java/org/tensorflow/tools/buffer/impl/virtual/LongVirtualDataBufferTest.java similarity index 73% rename from tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/virtual/LongVirtualDataBufferTest.java rename to tensorflow-tools/src/test/java/org/tensorflow/tools/buffer/impl/virtual/LongVirtualDataBufferTest.java index 8302acc265b..ef4d617e2fa 100644 --- a/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/virtual/LongVirtualDataBufferTest.java +++ b/tensorflow-tools/src/test/java/org/tensorflow/tools/buffer/impl/virtual/LongVirtualDataBufferTest.java @@ -1,11 +1,11 @@ -package org.tensorflow.util.buffer.impl.virtual; - -import org.tensorflow.util.buffer.ByteDataBuffer; -import org.tensorflow.util.buffer.DataBuffers; -import org.tensorflow.util.buffer.LongDataBuffer; -import org.tensorflow.util.buffer.adapter.LongDataAdapter; -import org.tensorflow.util.buffer.impl.jdk.ByteJdkDataBuffer; -import org.tensorflow.util.buffer.LongDataBufferTestBase; +package org.tensorflow.tools.buffer.impl.virtual; + +import org.tensorflow.tools.buffer.ByteDataBuffer; +import org.tensorflow.tools.buffer.DataBuffers; +import org.tensorflow.tools.buffer.LongDataBuffer; +import org.tensorflow.tools.buffer.adapter.LongDataAdapter; +import org.tensorflow.tools.buffer.impl.jdk.ByteJdkDataBuffer; +import org.tensorflow.tools.buffer.LongDataBufferTestBase; public class LongVirtualDataBufferTest extends LongDataBufferTestBase { diff --git a/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/virtual/ShortVirtualDataBufferTest.java b/tensorflow-tools/src/test/java/org/tensorflow/tools/buffer/impl/virtual/ShortVirtualDataBufferTest.java similarity index 66% rename from tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/virtual/ShortVirtualDataBufferTest.java rename to tensorflow-tools/src/test/java/org/tensorflow/tools/buffer/impl/virtual/ShortVirtualDataBufferTest.java index 631ffdcdf0c..ac15b8590a3 100644 --- a/tensorflow-utils/src/test/java/org/tensorflow/util/buffer/impl/virtual/ShortVirtualDataBufferTest.java +++ b/tensorflow-tools/src/test/java/org/tensorflow/tools/buffer/impl/virtual/ShortVirtualDataBufferTest.java @@ -1,11 +1,11 @@ -package org.tensorflow.util.buffer.impl.virtual; - -import org.tensorflow.util.buffer.ShortDataBufferTestBase; -import org.tensorflow.util.buffer.adapter.ShortDataAdapter; -import org.tensorflow.util.buffer.ByteDataBuffer; -import org.tensorflow.util.buffer.DataBuffers; -import org.tensorflow.util.buffer.ShortDataBuffer; -import org.tensorflow.util.buffer.impl.jdk.ByteJdkDataBuffer; +package org.tensorflow.tools.buffer.impl.virtual; + +import org.tensorflow.tools.buffer.ShortDataBufferTestBase; +import org.tensorflow.tools.buffer.adapter.ShortDataAdapter; +import org.tensorflow.tools.buffer.ByteDataBuffer; +import org.tensorflow.tools.buffer.DataBuffers; +import org.tensorflow.tools.buffer.ShortDataBuffer; +import org.tensorflow.tools.buffer.impl.jdk.ByteJdkDataBuffer; public class ShortVirtualDataBufferTest extends ShortDataBufferTestBase { diff --git a/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/BooleanNdArrayTestBase.java b/tensorflow-tools/src/test/java/org/tensorflow/tools/ndarray/BooleanNdArrayTestBase.java similarity index 96% rename from tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/BooleanNdArrayTestBase.java rename to tensorflow-tools/src/test/java/org/tensorflow/tools/ndarray/BooleanNdArrayTestBase.java index 963b7679cd2..c2f64fcb23e 100644 --- a/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/BooleanNdArrayTestBase.java +++ b/tensorflow-tools/src/test/java/org/tensorflow/tools/ndarray/BooleanNdArrayTestBase.java @@ -14,17 +14,17 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.util.ndarray; +package org.tensorflow.tools.ndarray; import static junit.framework.TestCase.assertTrue; import static org.junit.Assert.assertFalse; import static org.junit.Assert.fail; -import static org.tensorflow.util.ndarray.NdArrays.vectorOf; +import static org.tensorflow.tools.ndarray.NdArrays.vectorOf; import java.nio.BufferOverflowException; import java.nio.BufferUnderflowException; import org.junit.Test; -import org.tensorflow.util.Shape; +import org.tensorflow.tools.Shape; public abstract class BooleanNdArrayTestBase extends NdArrayTestBase { diff --git a/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/ByteNdArrayTestBase.java b/tensorflow-tools/src/test/java/org/tensorflow/tools/ndarray/ByteNdArrayTestBase.java similarity index 97% rename from tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/ByteNdArrayTestBase.java rename to tensorflow-tools/src/test/java/org/tensorflow/tools/ndarray/ByteNdArrayTestBase.java index 46802c75cf5..3fbab1f9b39 100644 --- a/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/ByteNdArrayTestBase.java +++ b/tensorflow-tools/src/test/java/org/tensorflow/tools/ndarray/ByteNdArrayTestBase.java @@ -14,16 +14,16 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.util.ndarray; +package org.tensorflow.tools.ndarray; import static org.junit.Assert.assertEquals; import static org.junit.Assert.fail; -import static org.tensorflow.util.ndarray.NdArrays.vectorOf; +import static org.tensorflow.tools.ndarray.NdArrays.vectorOf; import java.nio.BufferOverflowException; import java.nio.BufferUnderflowException; import org.junit.Test; -import org.tensorflow.util.Shape; +import org.tensorflow.tools.Shape; public abstract class ByteNdArrayTestBase extends NdArrayTestBase { diff --git a/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/DoubleNdArrayTestBase.java b/tensorflow-tools/src/test/java/org/tensorflow/tools/ndarray/DoubleNdArrayTestBase.java similarity index 97% rename from tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/DoubleNdArrayTestBase.java rename to tensorflow-tools/src/test/java/org/tensorflow/tools/ndarray/DoubleNdArrayTestBase.java index 812facdf2e0..4db3781466b 100644 --- a/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/DoubleNdArrayTestBase.java +++ b/tensorflow-tools/src/test/java/org/tensorflow/tools/ndarray/DoubleNdArrayTestBase.java @@ -14,16 +14,16 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.util.ndarray; +package org.tensorflow.tools.ndarray; import static org.junit.Assert.assertEquals; import static org.junit.Assert.fail; -import static org.tensorflow.util.ndarray.NdArrays.vectorOf; +import static org.tensorflow.tools.ndarray.NdArrays.vectorOf; import java.nio.BufferOverflowException; import java.nio.BufferUnderflowException; import org.junit.Test; -import org.tensorflow.util.Shape; +import org.tensorflow.tools.Shape; public abstract class DoubleNdArrayTestBase extends NdArrayTestBase { diff --git a/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/FloatNdArrayTestBase.java b/tensorflow-tools/src/test/java/org/tensorflow/tools/ndarray/FloatNdArrayTestBase.java similarity index 97% rename from tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/FloatNdArrayTestBase.java rename to tensorflow-tools/src/test/java/org/tensorflow/tools/ndarray/FloatNdArrayTestBase.java index 22d7537f8be..de1f5e69bff 100644 --- a/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/FloatNdArrayTestBase.java +++ b/tensorflow-tools/src/test/java/org/tensorflow/tools/ndarray/FloatNdArrayTestBase.java @@ -14,16 +14,16 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.util.ndarray; +package org.tensorflow.tools.ndarray; import static org.junit.Assert.assertEquals; import static org.junit.Assert.fail; -import static org.tensorflow.util.ndarray.NdArrays.vectorOf; +import static org.tensorflow.tools.ndarray.NdArrays.vectorOf; import java.nio.BufferOverflowException; import java.nio.BufferUnderflowException; import org.junit.Test; -import org.tensorflow.util.Shape; +import org.tensorflow.tools.Shape; public abstract class FloatNdArrayTestBase extends NdArrayTestBase { diff --git a/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/IntNdArrayTestBase.java b/tensorflow-tools/src/test/java/org/tensorflow/tools/ndarray/IntNdArrayTestBase.java similarity index 96% rename from tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/IntNdArrayTestBase.java rename to tensorflow-tools/src/test/java/org/tensorflow/tools/ndarray/IntNdArrayTestBase.java index 95b05d31b19..657e092af4d 100644 --- a/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/IntNdArrayTestBase.java +++ b/tensorflow-tools/src/test/java/org/tensorflow/tools/ndarray/IntNdArrayTestBase.java @@ -14,16 +14,16 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.util.ndarray; +package org.tensorflow.tools.ndarray; import static org.junit.Assert.assertEquals; import static org.junit.Assert.fail; -import static org.tensorflow.util.ndarray.NdArrays.vectorOf; +import static org.tensorflow.tools.ndarray.NdArrays.vectorOf; import java.nio.BufferOverflowException; import java.nio.BufferUnderflowException; import org.junit.Test; -import org.tensorflow.util.Shape; +import org.tensorflow.tools.Shape; public abstract class IntNdArrayTestBase extends NdArrayTestBase { diff --git a/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/LongNdArrayTestBase.java b/tensorflow-tools/src/test/java/org/tensorflow/tools/ndarray/LongNdArrayTestBase.java similarity index 98% rename from tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/LongNdArrayTestBase.java rename to tensorflow-tools/src/test/java/org/tensorflow/tools/ndarray/LongNdArrayTestBase.java index 0bf8801553d..b08d361ff11 100644 --- a/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/LongNdArrayTestBase.java +++ b/tensorflow-tools/src/test/java/org/tensorflow/tools/ndarray/LongNdArrayTestBase.java @@ -14,7 +14,7 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.util.ndarray; +package org.tensorflow.tools.ndarray; import static org.junit.Assert.assertEquals; import static org.junit.Assert.fail; @@ -22,7 +22,7 @@ import java.nio.BufferOverflowException; import java.nio.BufferUnderflowException; import org.junit.Test; -import org.tensorflow.util.Shape; +import org.tensorflow.tools.Shape; public abstract class LongNdArrayTestBase extends NdArrayTestBase { diff --git a/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/NdArrayTestBase.java b/tensorflow-tools/src/test/java/org/tensorflow/tools/ndarray/NdArrayTestBase.java similarity index 92% rename from tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/NdArrayTestBase.java rename to tensorflow-tools/src/test/java/org/tensorflow/tools/ndarray/NdArrayTestBase.java index 89baf6cbb4b..81b4fb9c571 100644 --- a/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/NdArrayTestBase.java +++ b/tensorflow-tools/src/test/java/org/tensorflow/tools/ndarray/NdArrayTestBase.java @@ -14,29 +14,33 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.util.ndarray; +package org.tensorflow.tools.ndarray; import static org.junit.Assert.assertEquals; import static org.junit.Assert.fail; -import static org.tensorflow.util.ndarray.NdArrays.scalarOf; -import static org.tensorflow.util.ndarray.NdArrays.vectorOfObjects; -import static org.tensorflow.util.ndarray.index.Indices.all; -import static org.tensorflow.util.ndarray.index.Indices.at; -import static org.tensorflow.util.ndarray.index.Indices.even; -import static org.tensorflow.util.ndarray.index.Indices.flip; -import static org.tensorflow.util.ndarray.index.Indices.from; -import static org.tensorflow.util.ndarray.index.Indices.odd; -import static org.tensorflow.util.ndarray.index.Indices.range; -import static org.tensorflow.util.ndarray.index.Indices.seq; -import static org.tensorflow.util.ndarray.index.Indices.to; +import static org.tensorflow.tools.ndarray.NdArrays.scalarOf; +import static org.tensorflow.tools.ndarray.NdArrays.vectorOfObjects; +import static org.tensorflow.tools.ndarray.index.Indices.all; +import static org.tensorflow.tools.ndarray.index.Indices.at; +import static org.tensorflow.tools.ndarray.index.Indices.even; +import static org.tensorflow.tools.ndarray.index.Indices.flip; +import static org.tensorflow.tools.ndarray.index.Indices.from; +import static org.tensorflow.tools.ndarray.index.Indices.odd; +import static org.tensorflow.tools.ndarray.index.Indices.range; +import static org.tensorflow.tools.ndarray.index.Indices.seq; +import static org.tensorflow.tools.ndarray.index.Indices.to; import java.nio.BufferOverflowException; import java.nio.BufferUnderflowException; import java.util.concurrent.atomic.AtomicLong; import java.util.stream.LongStream; import org.junit.Test; -import org.tensorflow.util.Shape; -import org.tensorflow.util.buffer.DataBuffer; +import org.tensorflow.tools.Shape; +import org.tensorflow.tools.buffer.DataBuffer; +import org.tensorflow.tools.ndarray.IllegalRankException; +import org.tensorflow.tools.ndarray.LongNdArray; +import org.tensorflow.tools.ndarray.NdArray; +import org.tensorflow.tools.ndarray.NdArrays; public abstract class NdArrayTestBase { diff --git a/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/ShortNdArrayTestBase.java b/tensorflow-tools/src/test/java/org/tensorflow/tools/ndarray/ShortNdArrayTestBase.java similarity index 97% rename from tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/ShortNdArrayTestBase.java rename to tensorflow-tools/src/test/java/org/tensorflow/tools/ndarray/ShortNdArrayTestBase.java index 43ad42dfcb1..37bb64d7919 100644 --- a/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/ShortNdArrayTestBase.java +++ b/tensorflow-tools/src/test/java/org/tensorflow/tools/ndarray/ShortNdArrayTestBase.java @@ -14,16 +14,16 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.util.ndarray; +package org.tensorflow.tools.ndarray; import static org.junit.Assert.assertEquals; import static org.junit.Assert.fail; -import static org.tensorflow.util.ndarray.NdArrays.vectorOf; +import static org.tensorflow.tools.ndarray.NdArrays.vectorOf; import java.nio.BufferOverflowException; import java.nio.BufferUnderflowException; import org.junit.Test; -import org.tensorflow.util.Shape; +import org.tensorflow.tools.Shape; public abstract class ShortNdArrayTestBase extends NdArrayTestBase { diff --git a/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/impl/dense/BooleanDenseNdArrayTest.java b/tensorflow-tools/src/test/java/org/tensorflow/tools/ndarray/impl/dense/BooleanDenseNdArrayTest.java similarity index 74% rename from tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/impl/dense/BooleanDenseNdArrayTest.java rename to tensorflow-tools/src/test/java/org/tensorflow/tools/ndarray/impl/dense/BooleanDenseNdArrayTest.java index 3ef5f06db25..80f302fce3a 100644 --- a/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/impl/dense/BooleanDenseNdArrayTest.java +++ b/tensorflow-tools/src/test/java/org/tensorflow/tools/ndarray/impl/dense/BooleanDenseNdArrayTest.java @@ -14,14 +14,14 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.util.ndarray.impl.dense; +package org.tensorflow.tools.ndarray.impl.dense; -import org.tensorflow.util.ndarray.BooleanNdArrayTestBase; -import org.tensorflow.util.buffer.DataBuffer; -import org.tensorflow.util.buffer.DataBuffers; -import org.tensorflow.util.ndarray.BooleanNdArray; -import org.tensorflow.util.ndarray.NdArrays; -import org.tensorflow.util.Shape; +import org.tensorflow.tools.ndarray.BooleanNdArrayTestBase; +import org.tensorflow.tools.buffer.DataBuffer; +import org.tensorflow.tools.buffer.DataBuffers; +import org.tensorflow.tools.ndarray.BooleanNdArray; +import org.tensorflow.tools.ndarray.NdArrays; +import org.tensorflow.tools.Shape; public class BooleanDenseNdArrayTest extends BooleanNdArrayTestBase { diff --git a/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/impl/dense/ByteDenseNdArrayTest.java b/tensorflow-tools/src/test/java/org/tensorflow/tools/ndarray/impl/dense/ByteDenseNdArrayTest.java similarity index 74% rename from tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/impl/dense/ByteDenseNdArrayTest.java rename to tensorflow-tools/src/test/java/org/tensorflow/tools/ndarray/impl/dense/ByteDenseNdArrayTest.java index ebb5d009930..5f5d1271842 100644 --- a/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/impl/dense/ByteDenseNdArrayTest.java +++ b/tensorflow-tools/src/test/java/org/tensorflow/tools/ndarray/impl/dense/ByteDenseNdArrayTest.java @@ -14,14 +14,14 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.util.ndarray.impl.dense; +package org.tensorflow.tools.ndarray.impl.dense; -import org.tensorflow.util.ndarray.ByteNdArrayTestBase; -import org.tensorflow.util.buffer.DataBuffer; -import org.tensorflow.util.buffer.DataBuffers; -import org.tensorflow.util.ndarray.ByteNdArray; -import org.tensorflow.util.ndarray.NdArrays; -import org.tensorflow.util.Shape; +import org.tensorflow.tools.ndarray.ByteNdArrayTestBase; +import org.tensorflow.tools.buffer.DataBuffer; +import org.tensorflow.tools.buffer.DataBuffers; +import org.tensorflow.tools.ndarray.ByteNdArray; +import org.tensorflow.tools.ndarray.NdArrays; +import org.tensorflow.tools.Shape; public class ByteDenseNdArrayTest extends ByteNdArrayTestBase { diff --git a/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/impl/dense/DoubleDenseNdArrayTest.java b/tensorflow-tools/src/test/java/org/tensorflow/tools/ndarray/impl/dense/DoubleDenseNdArrayTest.java similarity index 74% rename from tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/impl/dense/DoubleDenseNdArrayTest.java rename to tensorflow-tools/src/test/java/org/tensorflow/tools/ndarray/impl/dense/DoubleDenseNdArrayTest.java index 1270e53d5e7..f527ee779a1 100644 --- a/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/impl/dense/DoubleDenseNdArrayTest.java +++ b/tensorflow-tools/src/test/java/org/tensorflow/tools/ndarray/impl/dense/DoubleDenseNdArrayTest.java @@ -14,14 +14,14 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.util.ndarray.impl.dense; +package org.tensorflow.tools.ndarray.impl.dense; -import org.tensorflow.util.ndarray.DoubleNdArrayTestBase; -import org.tensorflow.util.buffer.DataBuffer; -import org.tensorflow.util.buffer.DataBuffers; -import org.tensorflow.util.ndarray.DoubleNdArray; -import org.tensorflow.util.ndarray.NdArrays; -import org.tensorflow.util.Shape; +import org.tensorflow.tools.ndarray.DoubleNdArrayTestBase; +import org.tensorflow.tools.buffer.DataBuffer; +import org.tensorflow.tools.buffer.DataBuffers; +import org.tensorflow.tools.ndarray.DoubleNdArray; +import org.tensorflow.tools.ndarray.NdArrays; +import org.tensorflow.tools.Shape; public class DoubleDenseNdArrayTest extends DoubleNdArrayTestBase { diff --git a/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/impl/dense/FloatDenseNdArrayTest.java b/tensorflow-tools/src/test/java/org/tensorflow/tools/ndarray/impl/dense/FloatDenseNdArrayTest.java similarity index 74% rename from tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/impl/dense/FloatDenseNdArrayTest.java rename to tensorflow-tools/src/test/java/org/tensorflow/tools/ndarray/impl/dense/FloatDenseNdArrayTest.java index 14a40f6e1b2..ab4f6f0e0f2 100644 --- a/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/impl/dense/FloatDenseNdArrayTest.java +++ b/tensorflow-tools/src/test/java/org/tensorflow/tools/ndarray/impl/dense/FloatDenseNdArrayTest.java @@ -14,14 +14,14 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.util.ndarray.impl.dense; +package org.tensorflow.tools.ndarray.impl.dense; -import org.tensorflow.util.ndarray.FloatNdArrayTestBase; -import org.tensorflow.util.buffer.DataBuffer; -import org.tensorflow.util.buffer.DataBuffers; -import org.tensorflow.util.ndarray.FloatNdArray; -import org.tensorflow.util.ndarray.NdArrays; -import org.tensorflow.util.Shape; +import org.tensorflow.tools.ndarray.FloatNdArrayTestBase; +import org.tensorflow.tools.buffer.DataBuffer; +import org.tensorflow.tools.buffer.DataBuffers; +import org.tensorflow.tools.ndarray.FloatNdArray; +import org.tensorflow.tools.ndarray.NdArrays; +import org.tensorflow.tools.Shape; public class FloatDenseNdArrayTest extends FloatNdArrayTestBase { diff --git a/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/impl/dense/IntDenseNdArrayTest.java b/tensorflow-tools/src/test/java/org/tensorflow/tools/ndarray/impl/dense/IntDenseNdArrayTest.java similarity index 74% rename from tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/impl/dense/IntDenseNdArrayTest.java rename to tensorflow-tools/src/test/java/org/tensorflow/tools/ndarray/impl/dense/IntDenseNdArrayTest.java index 60379f0adee..3228b42879b 100644 --- a/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/impl/dense/IntDenseNdArrayTest.java +++ b/tensorflow-tools/src/test/java/org/tensorflow/tools/ndarray/impl/dense/IntDenseNdArrayTest.java @@ -14,14 +14,14 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.util.ndarray.impl.dense; +package org.tensorflow.tools.ndarray.impl.dense; -import org.tensorflow.util.ndarray.IntNdArrayTestBase; -import org.tensorflow.util.buffer.DataBuffer; -import org.tensorflow.util.buffer.DataBuffers; -import org.tensorflow.util.ndarray.IntNdArray; -import org.tensorflow.util.ndarray.NdArrays; -import org.tensorflow.util.Shape; +import org.tensorflow.tools.ndarray.IntNdArrayTestBase; +import org.tensorflow.tools.buffer.DataBuffer; +import org.tensorflow.tools.buffer.DataBuffers; +import org.tensorflow.tools.ndarray.IntNdArray; +import org.tensorflow.tools.ndarray.NdArrays; +import org.tensorflow.tools.Shape; public class IntDenseNdArrayTest extends IntNdArrayTestBase { diff --git a/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/impl/dense/LongDenseNdArrayTest.java b/tensorflow-tools/src/test/java/org/tensorflow/tools/ndarray/impl/dense/LongDenseNdArrayTest.java similarity index 74% rename from tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/impl/dense/LongDenseNdArrayTest.java rename to tensorflow-tools/src/test/java/org/tensorflow/tools/ndarray/impl/dense/LongDenseNdArrayTest.java index 3e4c2c74f14..6e1114bf75b 100644 --- a/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/impl/dense/LongDenseNdArrayTest.java +++ b/tensorflow-tools/src/test/java/org/tensorflow/tools/ndarray/impl/dense/LongDenseNdArrayTest.java @@ -14,14 +14,14 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.util.ndarray.impl.dense; +package org.tensorflow.tools.ndarray.impl.dense; -import org.tensorflow.util.buffer.DataBuffer; -import org.tensorflow.util.buffer.DataBuffers; -import org.tensorflow.util.ndarray.LongNdArray; -import org.tensorflow.util.ndarray.LongNdArrayTestBase; -import org.tensorflow.util.ndarray.NdArrays; -import org.tensorflow.util.Shape; +import org.tensorflow.tools.buffer.DataBuffer; +import org.tensorflow.tools.buffer.DataBuffers; +import org.tensorflow.tools.ndarray.LongNdArray; +import org.tensorflow.tools.ndarray.LongNdArrayTestBase; +import org.tensorflow.tools.ndarray.NdArrays; +import org.tensorflow.tools.Shape; public class LongDenseNdArrayTest extends LongNdArrayTestBase { diff --git a/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/impl/dense/ShortDenseNdArrayTest.java b/tensorflow-tools/src/test/java/org/tensorflow/tools/ndarray/impl/dense/ShortDenseNdArrayTest.java similarity index 74% rename from tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/impl/dense/ShortDenseNdArrayTest.java rename to tensorflow-tools/src/test/java/org/tensorflow/tools/ndarray/impl/dense/ShortDenseNdArrayTest.java index 49ae7f5306d..79043cc0195 100644 --- a/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/impl/dense/ShortDenseNdArrayTest.java +++ b/tensorflow-tools/src/test/java/org/tensorflow/tools/ndarray/impl/dense/ShortDenseNdArrayTest.java @@ -14,14 +14,14 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.util.ndarray.impl.dense; +package org.tensorflow.tools.ndarray.impl.dense; -import org.tensorflow.util.buffer.DataBuffer; -import org.tensorflow.util.buffer.DataBuffers; -import org.tensorflow.util.ndarray.NdArrays; -import org.tensorflow.util.Shape; -import org.tensorflow.util.ndarray.ShortNdArray; -import org.tensorflow.util.ndarray.ShortNdArrayTestBase; +import org.tensorflow.tools.buffer.DataBuffer; +import org.tensorflow.tools.buffer.DataBuffers; +import org.tensorflow.tools.ndarray.NdArrays; +import org.tensorflow.tools.Shape; +import org.tensorflow.tools.ndarray.ShortNdArray; +import org.tensorflow.tools.ndarray.ShortNdArrayTestBase; public class ShortDenseNdArrayTest extends ShortNdArrayTestBase { diff --git a/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/impl/dense/StringDenseNdArrayTest.java b/tensorflow-tools/src/test/java/org/tensorflow/tools/ndarray/impl/dense/StringDenseNdArrayTest.java similarity index 77% rename from tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/impl/dense/StringDenseNdArrayTest.java rename to tensorflow-tools/src/test/java/org/tensorflow/tools/ndarray/impl/dense/StringDenseNdArrayTest.java index 08b169a7ab5..eeed9a3574c 100644 --- a/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/impl/dense/StringDenseNdArrayTest.java +++ b/tensorflow-tools/src/test/java/org/tensorflow/tools/ndarray/impl/dense/StringDenseNdArrayTest.java @@ -14,14 +14,14 @@ limitations under the License. ======================================================================= */ -package org.tensorflow.util.ndarray.impl.dense; - -import org.tensorflow.util.buffer.DataBuffer; -import org.tensorflow.util.buffer.DataBuffers; -import org.tensorflow.util.ndarray.NdArray; -import org.tensorflow.util.ndarray.NdArrayTestBase; -import org.tensorflow.util.ndarray.NdArrays; -import org.tensorflow.util.Shape; +package org.tensorflow.tools.ndarray.impl.dense; + +import org.tensorflow.tools.buffer.DataBuffer; +import org.tensorflow.tools.buffer.DataBuffers; +import org.tensorflow.tools.ndarray.NdArray; +import org.tensorflow.tools.ndarray.NdArrayTestBase; +import org.tensorflow.tools.ndarray.NdArrays; +import org.tensorflow.tools.Shape; public class StringDenseNdArrayTest extends NdArrayTestBase { diff --git a/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/impl/sequence/ElementSequenceTest.java b/tensorflow-tools/src/test/java/org/tensorflow/tools/ndarray/impl/sequence/ElementSequenceTest.java similarity index 81% rename from tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/impl/sequence/ElementSequenceTest.java rename to tensorflow-tools/src/test/java/org/tensorflow/tools/ndarray/impl/sequence/ElementSequenceTest.java index d748dfa4b7b..670bd0a3066 100644 --- a/tensorflow-utils/src/test/java/org/tensorflow/util/ndarray/impl/sequence/ElementSequenceTest.java +++ b/tensorflow-tools/src/test/java/org/tensorflow/tools/ndarray/impl/sequence/ElementSequenceTest.java @@ -1,4 +1,4 @@ -package org.tensorflow.util.ndarray.impl.sequence; +package org.tensorflow.tools.ndarray.impl.sequence; import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertEquals; @@ -7,11 +7,12 @@ import java.util.Arrays; import java.util.List; import org.junit.Test; -import org.tensorflow.util.ndarray.IntNdArray; -import org.tensorflow.util.ndarray.NdArraySequence; -import org.tensorflow.util.ndarray.NdArrays; -import org.tensorflow.util.Shape; -import org.tensorflow.util.ndarray.impl.AbstractNdArray; +import org.tensorflow.tools.ndarray.IntNdArray; +import org.tensorflow.tools.ndarray.NdArraySequence; +import org.tensorflow.tools.ndarray.NdArrays; +import org.tensorflow.tools.Shape; +import org.tensorflow.tools.ndarray.impl.AbstractNdArray; +import org.tensorflow.tools.ndarray.impl.sequence.ElementSequence; public class ElementSequenceTest { @@ -20,7 +21,8 @@ public void iterateVectorsWithIndex() { IntNdArray array = NdArrays.ofInts(Shape.make(2, 3, 2)); @SuppressWarnings("unchecked") - NdArraySequence sequence = ElementSequence.create((AbstractNdArray)array, 1); + NdArraySequence sequence = ElementSequence + .create((AbstractNdArray)array, 1); List coords = new ArrayList<>((int)array.shape().size()); sequence.forEachIndexed((c, e) -> coords.add(Arrays.copyOf(c, c.length))); diff --git a/tensorflow-utils/src/test/resources/COPYRIGHT.txt b/tensorflow-tools/src/test/resources/COPYRIGHT.txt similarity index 100% rename from tensorflow-utils/src/test/resources/COPYRIGHT.txt rename to tensorflow-tools/src/test/resources/COPYRIGHT.txt diff --git a/tensorflow-utils/src/test/resources/castle.jpg b/tensorflow-tools/src/test/resources/castle.jpg similarity index 100% rename from tensorflow-utils/src/test/resources/castle.jpg rename to tensorflow-tools/src/test/resources/castle.jpg From 8735909655dd8a8214e2047d368a5fc2eafca188 Mon Sep 17 00:00:00 2001 From: Karl Lessard Date: Fri, 13 Dec 2019 12:55:37 -0500 Subject: [PATCH 6/8] Add raw buffer factories --- .../main/java/org/tensorflow/DataType.java | 2 +- .../src/main/java/org/tensorflow/Tensor.java | 68 +-- .../internal/buffer/RawBufferHelper.java | 54 --- .../internal/buffer/TensorBuffers.java | 55 +-- .../buffer/TensorRawDataBufferFactory.java | 42 ++ .../main/java/org/tensorflow/types/TBool.java | 2 +- .../java/org/tensorflow/types/TDouble.java | 2 +- .../java/org/tensorflow/types/TFloat.java | 2 +- .../java/org/tensorflow/types/TInt32.java | 2 +- .../java/org/tensorflow/types/TInt64.java | 2 +- .../java/org/tensorflow/types/TString.java | 6 +- .../java/org/tensorflow/types/TUInt8.java | 2 +- .../java/org/tensorflow/tools/StaticApi.java | 18 +- .../tensorflow/tools/buffer/DataBuffer.java | 3 +- .../tensorflow/tools/buffer/DataBuffers.java | 450 +++++++++--------- .../buffer/impl/jdk/ByteJdkDataBuffer.java | 2 +- .../buffer/impl/jdk/DoubleJdkDataBuffer.java | 2 +- .../buffer/impl/jdk/FloatJdkDataBuffer.java | 2 +- .../buffer/impl/jdk/IntJdkDataBuffer.java | 2 +- .../buffer/impl/jdk/LongJdkDataBuffer.java | 2 +- .../buffer/impl/jdk/ShortJdkDataBuffer.java | 2 +- .../impl/raw/AbstractRawDataBuffer.java | 48 +- .../buffer/impl/raw/BooleanRawDataBuffer.java | 36 +- .../buffer/impl/raw/ByteRawDataBuffer.java | 36 +- .../buffer/impl/raw/DoubleRawDataBuffer.java | 36 +- .../buffer/impl/raw/FloatRawDataBuffer.java | 36 +- .../buffer/impl/raw/IntRawDataBuffer.java | 36 +- .../buffer/impl/raw/LongRawDataBuffer.java | 36 +- .../buffer/impl/raw/RawDataBufferFactory.java | 184 +++++++ .../buffer/impl/raw/ShortRawDataBuffer.java | 36 +- .../buffer/impl/raw/UnsafeMemoryHandle.java | 81 +--- .../buffer/impl/raw/UnsafeReference.java | 100 ++-- .../org/tensorflow/tools/ndarray/NdArray.java | 2 +- .../tensorflow/tools/ndarray/NdArrays.java | 12 +- .../impl/raw/BooleanRawDataBufferTest.java | 10 +- .../impl/raw/ByteRawDataBufferTest.java | 4 +- .../impl/raw/DoubleRawDataBufferTest.java | 4 +- .../impl/raw/FloatRawDataBufferTest.java | 4 +- .../buffer/impl/raw/IntRawDataBufferTest.java | 4 +- .../impl/raw/LongRawDataBufferTest.java | 4 +- .../impl/raw/ShortRawDataBufferTest.java | 4 +- .../BigIntegerVirtualDataBufferTest.java | 2 +- .../tools/ndarray/NdArrayTestBase.java | 12 +- .../impl/dense/StringDenseNdArrayTest.java | 4 +- 44 files changed, 697 insertions(+), 756 deletions(-) delete mode 100644 tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/internal/buffer/RawBufferHelper.java create mode 100644 tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/internal/buffer/TensorRawDataBufferFactory.java create mode 100644 tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/impl/raw/RawDataBufferFactory.java diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/DataType.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/DataType.java index 4cf2cfeb21f..6e77e9ca7e6 100644 --- a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/DataType.java +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/DataType.java @@ -73,7 +73,7 @@ int nativeCode() { * @param tensor tensor to map * @return data structure of elements of this type */ - T map(Tensor tensor) { + T map(Tensor tensor) { return tensorMapper.apply(tensor.getNative(), tensor.shape()); } diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/Tensor.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/Tensor.java index 6deb69ec50b..5c255802141 100644 --- a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/Tensor.java +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/Tensor.java @@ -27,6 +27,7 @@ import java.util.Arrays; import java.util.HashMap; import org.tensorflow.internal.c_api.TF_Tensor; +import org.tensorflow.internal.c_api.global.tensorflow; import org.tensorflow.tools.Shape; import org.tensorflow.types.TBool; import org.tensorflow.types.TDouble; @@ -121,7 +122,6 @@ public static Tensor create(Object obj, DataType dtype) + dataTypeOf(obj) + ")"); } - @SuppressWarnings("rawtypes") long[] dimSizes = new long[numDimensions(obj, dtype)]; fillShape(obj, 0, dimSizes); Tensor t = new Tensor(dtype, Shape.make(dimSizes)); @@ -287,9 +287,9 @@ public Tensor expect(DataType dt) { // Helper function to allocate a Tensor for the create() methods that create a Tensor from // a java.nio.Buffer. // Requires: dataType matches T - private static Tensor allocateForBuffer(DataType dataType, long[] dimSizes, int nBuffered) { + private static Tensor allocateForBuffer(DataType dataType, long[] dimSizes, int nBuffered) { final int nflattened = numElements(dimSizes); - int nbytes = 0; + int nbytes; if (dataType != TString.DTYPE) { if (nBuffered != nflattened) { throw incompatibleBuffer(nBuffered, dimSizes); @@ -299,7 +299,7 @@ private static Tensor allocateForBuffer(DataType dataType, // DT_STRING tensor encoded in a ByteBuffer. nbytes = nBuffered; } - Tensor t = new Tensor(dataType, Shape.make(dimSizes)); + Tensor t = new Tensor<>(dataType, Shape.make(dimSizes)); long nativeHandle = allocate(t.dtype.nativeCode(), dimSizes, nbytes); t.nativeRef = new NativeReference(nativeHandle); return t; @@ -334,13 +334,7 @@ public T data() { /** Returns the size, in bytes, of the tensor data. */ public long numBytes() { if (numBytes == null) { - // If the element size in bytes in unknown, we need to map tensor memory to the Java space - // and compute the number of bytes manually, hence the reason we cache the result - if (dtype.byteSize() < 0) { - numBytes = Arrays.stream(buffers()).mapToLong(ByteBuffer::remaining).sum(); - } else { - numBytes = shape.size() * dtype.byteSize(); - } + numBytes = tensorflow.TF_TensorByteSize(nativeRef.cTensor); } return numBytes; } @@ -537,7 +531,6 @@ public String toString() { *

Takes ownership of the handle. */ static Tensor fromHandle(long handle) { - @SuppressWarnings("rawtypes") Tensor t = new Tensor<>(DataTypes.fromNativeCode(dtype(handle)), Shape.make(shape(handle))); t.nativeRef = new NativeReference(handle); return t; @@ -559,19 +552,7 @@ long getNativeHandle() { } TF_Tensor getNative() { - TF_Tensor nativeTensor = new TF_Tensor(); - nativeTensor.temporaryHackToSetAddressFromHandle(nativeRef.tensorHandle); - return nativeTensor; - } - - ByteBuffer[] buffers() { - // TODO change the C API so it can return more than one buffer in case the size of the tensor - // exceeds the maximum capacity of a single buffer (which is around Integer.MAX_VALUE) - return new ByteBuffer[] { buffer(getNativeHandle()).order(ByteOrder.nativeOrder()) }; - } - - long[] bufferInfo() { - return bufferInfo(nativeRef.tensorHandle); + return nativeRef.cTensor; } private NativeReference nativeRef = null; @@ -589,7 +570,7 @@ private ByteBuffer buffer() { return buffer(getNativeHandle()).order(ByteOrder.nativeOrder()); } - private static IllegalArgumentException incompatibleBuffer(Buffer buf, DataType dataType) { + private static IllegalArgumentException incompatibleBuffer(Buffer buf, DataType dataType) { return new IllegalArgumentException( String.format("cannot use %s with Tensor of type %s", buf.getClass().getName(), dataType)); } @@ -610,7 +591,7 @@ private static int numElements(long[] shape) { return n; } - private static int elemByteSize(DataType dataType) { + private static int elemByteSize(DataType dataType) { int size = dataType.byteSize(); if (size < 0) { throw new IllegalArgumentException("STRING tensors do not have a fixed element size"); @@ -618,13 +599,6 @@ private static int elemByteSize(DataType dataType) { return size; } - private static void throwExceptionIfNotByteOfByteArrays(Object array) { - if (!array.getClass().getName().equals("[[B")) { - throw new IllegalArgumentException( - "object cannot be converted to a Tensor as it includes an array with null elements"); - } - } - /** * Reference to the underlying native tensor * @@ -658,7 +632,7 @@ void delete() { } NativeReference(long tensorHandle) { - this.tensorHandle = tensorHandle; + setTensorHandle(tensorHandle); } void eager(EagerSession session, Tensor tensor) { @@ -676,15 +650,21 @@ synchronized void release() { eagerRef = null; } Tensor.delete(tensorHandle); - tensorHandle = 0L; + setTensorHandle(0L); } } private long tensorHandle; + private final TF_Tensor cTensor = new TF_Tensor(); private EagerReference eagerRef; + + private void setTensorHandle(long tensorHandle) { + this.tensorHandle = tensorHandle; + cTensor.temporaryHackToSetAddressFromHandle(tensorHandle); + } } - private static HashMap, DataType> classDataTypes = new HashMap<>(); + private static HashMap, DataType> classDataTypes = new HashMap<>(); static { classDataTypes.put(int.class, TInt32.DTYPE); @@ -715,13 +695,13 @@ private static Class baseObjType(Object o) { * represent more than one TensorFlow data type; for example, 'byte' can represent both {@code * uint8} and {@code string}, with the latter being the default interpretation. */ - private static DataType dataTypeOf(Object o) { + private static DataType dataTypeOf(Object o) { Class c = baseObjType(o); return dataTypeFromClass(c); } - private static DataType dataTypeFromClass(Class c) { - DataType ret = classDataTypes.get(c); + private static DataType dataTypeFromClass(Class c) { + DataType ret = classDataTypes.get(c); if (ret != null) { return ret; } @@ -736,7 +716,7 @@ private static DataType dataTypeFromClass(Class c) { * @param o The object to inspect. It must be a valid representation of the given data type. * @param dtype The expected data type of the tensor. */ - private static int numDimensions(Object o, DataType dtype) { + private static int numDimensions(Object o, DataType dtype) { int ret = numArrayDimensions(o); if (dtype == TString.DTYPE && ret > 0) { return ret - 1; @@ -780,9 +760,9 @@ private static void fillShape(Object o, int dim, long[] shape) { } /** Returns whether the object {@code obj} can represent a tensor with data type {@code dtype}. */ - private static boolean objectCompatWithType(Object obj, DataType dtype) { + private static boolean objectCompatWithType(Object obj, DataType dtype) { Class c = baseObjType(obj); - DataType dto = dataTypeFromClass(c); + DataType dto = dataTypeFromClass(c); int nd = numDimensions(obj, dto); if (!c.isPrimitive() && c != String.class && nd != 0) { throw new IllegalArgumentException( @@ -833,8 +813,6 @@ private void throwExceptionIfTypeIsIncompatible(Object o) { private static native ByteBuffer buffer(long handle); - private static native long[] bufferInfo(long handle); - private static native int dtype(long handle); private static native long[] shape(long handle); diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/internal/buffer/RawBufferHelper.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/internal/buffer/RawBufferHelper.java deleted file mode 100644 index 2dbf6bd8b7e..00000000000 --- a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/internal/buffer/RawBufferHelper.java +++ /dev/null @@ -1,54 +0,0 @@ -package org.tensorflow.internal.buffer; - -import java.lang.reflect.Field; -import org.bytedeco.javacpp.Pointer; -import org.tensorflow.tools.buffer.ByteDataBuffer; -import org.tensorflow.tools.buffer.LongDataBuffer; -import org.tensorflow.tools.buffer.impl.raw.ByteRawDataBuffer; -import org.tensorflow.tools.buffer.impl.raw.LongRawDataBuffer; -import org.tensorflow.tools.buffer.impl.raw.UnsafeReference; - -final class RawBufferHelper { - - interface Mapper { - T map(UnsafeReference unsafe, long address, long size, boolean readOnly); - } - - static T map(Pointer tensorData, Mapper mapper) { - if (UNSAFE == null) { - throw new RuntimeException("No valid reference to an instance of 'sun.misc.Unsafe'"); - } - return mapper.map(UNSAFE, tensorData.address(), tensorData.capacity(), false); - } - - static StringTensorBuffer mapToStrings(Pointer tensorData, long numElements) { - if (UNSAFE == null) { - throw new RuntimeException("No valid reference to an instance of 'sun.misc.Unsafe'"); - } - long offsetByteSize = numElements * Long.BYTES; - LongDataBuffer offsets = - LongRawDataBuffer.map(UNSAFE, tensorData.address(), numElements, false); - ByteDataBuffer data = - ByteRawDataBuffer.map(UNSAFE, tensorData.address() + offsetByteSize, tensorData.capacity() - offsetByteSize, false); - return new StringTensorBuffer(offsets, data); - } - - static boolean isUnsafeAvailable() { - return UNSAFE != null; - } - - private static final UnsafeReference UNSAFE; - - static { - UnsafeReference ref = null; - try { - Class clazz = Class.forName("sun.misc.Unsafe"); - Field theUnsafe = clazz.getDeclaredField("theUnsafe"); - theUnsafe.setAccessible(true); - ref = UnsafeReference.from(theUnsafe.get(null)); - } catch (ClassNotFoundException | NoSuchFieldException | IllegalAccessException e) { - // Do nothing and leave unsafe reference as null - } - UNSAFE = ref; - } -} diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/internal/buffer/TensorBuffers.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/internal/buffer/TensorBuffers.java index 46896f59d0a..18e4231eb12 100644 --- a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/internal/buffer/TensorBuffers.java +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/internal/buffer/TensorBuffers.java @@ -13,63 +13,58 @@ import org.tensorflow.tools.buffer.FloatDataBuffer; import org.tensorflow.tools.buffer.IntDataBuffer; import org.tensorflow.tools.buffer.LongDataBuffer; -import org.tensorflow.tools.buffer.impl.raw.ByteRawDataBuffer; -import org.tensorflow.tools.buffer.impl.raw.DoubleRawDataBuffer; -import org.tensorflow.tools.buffer.impl.raw.FloatRawDataBuffer; -import org.tensorflow.tools.buffer.impl.raw.IntRawDataBuffer; -import org.tensorflow.tools.buffer.impl.raw.LongRawDataBuffer; public final class TensorBuffers { public static ByteDataBuffer toBytes(TF_Tensor nativeTensor) { - Pointer tensorData = tensorData(nativeTensor); - if (RawBufferHelper.isUnsafeAvailable()) { - return RawBufferHelper.map(tensorData, ByteRawDataBuffer::map); + Pointer tensorMemory = tensorMemory(nativeTensor); + if (TensorRawDataBufferFactory.canBeUsed()) { + return TensorRawDataBufferFactory.mapTensorToBytes(tensorMemory); } - return DataBuffers.wrap(tensorData.asByteBuffer()); + return DataBuffers.wrap(tensorMemory.asByteBuffer()); } public static IntDataBuffer toInts(TF_Tensor nativeTensor) { - Pointer tensorData = tensorData(nativeTensor); - if (RawBufferHelper.isUnsafeAvailable()) { - return RawBufferHelper.map(tensorData, IntRawDataBuffer::map); + Pointer tensorMemory = tensorMemory(nativeTensor); + if (TensorRawDataBufferFactory.canBeUsed()) { + return TensorRawDataBufferFactory.mapTensorToInts(tensorMemory); } - return DataBuffers.wrap(tensorData.asByteBuffer().asIntBuffer()); + return DataBuffers.wrap(tensorMemory.asByteBuffer().asIntBuffer()); } public static LongDataBuffer toLongs(TF_Tensor nativeTensor) { - Pointer tensorData = tensorData(nativeTensor); - if (RawBufferHelper.isUnsafeAvailable()) { - return RawBufferHelper.map(tensorData, LongRawDataBuffer::map); + Pointer tensorMemory = tensorMemory(nativeTensor); + if (TensorRawDataBufferFactory.canBeUsed()) { + return TensorRawDataBufferFactory.mapTensorToLongs(tensorMemory); } - return DataBuffers.wrap(tensorData.asByteBuffer().asLongBuffer()); + return DataBuffers.wrap(tensorMemory.asByteBuffer().asLongBuffer()); } public static FloatDataBuffer toFloats(TF_Tensor nativeTensor) { - Pointer tensorData = tensorData(nativeTensor); - if (RawBufferHelper.isUnsafeAvailable()) { - return RawBufferHelper.map(tensorData, FloatRawDataBuffer::map); + Pointer tensorMemory = tensorMemory(nativeTensor); + if (TensorRawDataBufferFactory.canBeUsed()) { + return TensorRawDataBufferFactory.mapTensorToFloats(tensorMemory); } - return DataBuffers.wrap(tensorData.asByteBuffer().asFloatBuffer()); + return DataBuffers.wrap(tensorMemory.asByteBuffer().asFloatBuffer()); } public static DoubleDataBuffer toDoubles(TF_Tensor nativeTensor) { - Pointer tensorData = tensorData(nativeTensor); - if (RawBufferHelper.isUnsafeAvailable()) { - return RawBufferHelper.map(tensorData, DoubleRawDataBuffer::map); + Pointer tensorMemory = tensorMemory(nativeTensor); + if (TensorRawDataBufferFactory.canBeUsed()) { + return TensorRawDataBufferFactory.mapTensorToDoubles(tensorMemory); } - return DataBuffers.wrap(tensorData.asByteBuffer().asDoubleBuffer()); + return DataBuffers.wrap(tensorMemory.asByteBuffer().asDoubleBuffer()); } public static StringTensorBuffer toStrings(TF_Tensor nativeTensor, long numElements) { - Pointer tensorData = tensorData(nativeTensor); - if (RawBufferHelper.isUnsafeAvailable()) { - return RawBufferHelper.mapToStrings(tensorData, numElements); + Pointer tensorMemory = tensorMemory(nativeTensor); + if (TensorRawDataBufferFactory.canBeUsed()) { + return TensorRawDataBufferFactory.mapTensorToStrings(tensorMemory, numElements); } if (numElements > Integer.MAX_VALUE) { throw new IllegalArgumentException("Cannot map string tensor of " + numElements + " elements"); } - ByteBuffer dataBuffer = tensorData.asByteBuffer(); + ByteBuffer dataBuffer = tensorMemory.asByteBuffer(); LongBuffer offsetBuffer = dataBuffer.asLongBuffer(); offsetBuffer.limit((int)numElements); @@ -81,7 +76,7 @@ public static StringTensorBuffer toStrings(TF_Tensor nativeTensor, long numEleme return new StringTensorBuffer(offsets, data); } - private static Pointer tensorData(TF_Tensor nativeTensor) { + private static Pointer tensorMemory(TF_Tensor nativeTensor) { return TF_TensorData(nativeTensor).capacity(TF_TensorByteSize(nativeTensor)); } } diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/internal/buffer/TensorRawDataBufferFactory.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/internal/buffer/TensorRawDataBufferFactory.java new file mode 100644 index 00000000000..3dc2c6d6ab0 --- /dev/null +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/internal/buffer/TensorRawDataBufferFactory.java @@ -0,0 +1,42 @@ +package org.tensorflow.internal.buffer; + +import org.bytedeco.javacpp.Pointer; +import org.tensorflow.tools.buffer.ByteDataBuffer; +import org.tensorflow.tools.buffer.DoubleDataBuffer; +import org.tensorflow.tools.buffer.FloatDataBuffer; +import org.tensorflow.tools.buffer.IntDataBuffer; +import org.tensorflow.tools.buffer.LongDataBuffer; +import org.tensorflow.tools.buffer.impl.raw.RawDataBufferFactory; + +class TensorRawDataBufferFactory extends RawDataBufferFactory { + + static ByteDataBuffer mapTensorToBytes(Pointer tensorMemory) { + return mapNativeBytes(tensorMemory.address(), tensorMemory.capacity(), false); + } + + static IntDataBuffer mapTensorToInts(Pointer tensorMemory) { + return mapNativeInts(tensorMemory.address(), tensorMemory.capacity(), false); + } + + static LongDataBuffer mapTensorToLongs(Pointer tensorMemory) { + return mapNativeLongs(tensorMemory.address(), tensorMemory.capacity(), false); + } + + static FloatDataBuffer mapTensorToFloats(Pointer tensorMemory) { + return mapNativeFloats(tensorMemory.address(), tensorMemory.capacity(), false); + } + + static DoubleDataBuffer mapTensorToDoubles(Pointer tensorMemory) { + return mapNativeDoubles(tensorMemory.address(), tensorMemory.capacity(), false); + } + + static StringTensorBuffer mapTensorToStrings(Pointer tensorMemory, long numElements) { + long offsetByteSize = numElements * Long.BYTES; + LongDataBuffer offsets = mapNativeLongs(tensorMemory.address(), numElements, false); + ByteDataBuffer data = mapNativeBytes( + tensorMemory.address() + offsetByteSize, + tensorMemory.capacity() - offsetByteSize, + false); + return new StringTensorBuffer(offsets, data); + } +} diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TBool.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TBool.java index 634279d417e..f2d3de652fa 100644 --- a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TBool.java +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TBool.java @@ -4,13 +4,13 @@ import org.tensorflow.Tensor; import org.tensorflow.internal.buffer.TensorBuffers; import org.tensorflow.internal.c_api.TF_Tensor; +import org.tensorflow.tools.Shape; import org.tensorflow.tools.buffer.BooleanDataBuffer; import org.tensorflow.tools.buffer.ByteDataBuffer; import org.tensorflow.tools.buffer.DataBuffers; import org.tensorflow.tools.buffer.adapter.BooleanDataAdapter; import org.tensorflow.tools.ndarray.BooleanNdArray; import org.tensorflow.tools.ndarray.NdArray; -import org.tensorflow.tools.Shape; import org.tensorflow.tools.ndarray.impl.dense.BooleanDenseNdArray; import org.tensorflow.types.family.TType; diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TDouble.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TDouble.java index b8c6f4a7018..a2361db8952 100644 --- a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TDouble.java +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TDouble.java @@ -4,10 +4,10 @@ import org.tensorflow.Tensor; import org.tensorflow.internal.buffer.TensorBuffers; import org.tensorflow.internal.c_api.TF_Tensor; +import org.tensorflow.tools.Shape; import org.tensorflow.tools.buffer.DoubleDataBuffer; import org.tensorflow.tools.ndarray.DoubleNdArray; import org.tensorflow.tools.ndarray.NdArray; -import org.tensorflow.tools.Shape; import org.tensorflow.tools.ndarray.impl.dense.DoubleDenseNdArray; import org.tensorflow.types.family.TDecimal; diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TFloat.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TFloat.java index c620e0fc8a3..7512a0d4de0 100644 --- a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TFloat.java +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TFloat.java @@ -4,10 +4,10 @@ import org.tensorflow.Tensor; import org.tensorflow.internal.buffer.TensorBuffers; import org.tensorflow.internal.c_api.TF_Tensor; +import org.tensorflow.tools.Shape; import org.tensorflow.tools.buffer.FloatDataBuffer; import org.tensorflow.tools.ndarray.FloatNdArray; import org.tensorflow.tools.ndarray.NdArray; -import org.tensorflow.tools.Shape; import org.tensorflow.tools.ndarray.impl.dense.FloatDenseNdArray; import org.tensorflow.types.family.TDecimal; diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TInt32.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TInt32.java index 874cfc615e5..a40c0ad6e36 100644 --- a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TInt32.java +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TInt32.java @@ -4,10 +4,10 @@ import org.tensorflow.Tensor; import org.tensorflow.internal.buffer.TensorBuffers; import org.tensorflow.internal.c_api.TF_Tensor; +import org.tensorflow.tools.Shape; import org.tensorflow.tools.buffer.IntDataBuffer; import org.tensorflow.tools.ndarray.IntNdArray; import org.tensorflow.tools.ndarray.NdArray; -import org.tensorflow.tools.Shape; import org.tensorflow.tools.ndarray.impl.dense.IntDenseNdArray; import org.tensorflow.types.family.TNumber; diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TInt64.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TInt64.java index d7d5cf12caf..a42271ab81b 100644 --- a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TInt64.java +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TInt64.java @@ -4,10 +4,10 @@ import org.tensorflow.Tensor; import org.tensorflow.internal.buffer.TensorBuffers; import org.tensorflow.internal.c_api.TF_Tensor; +import org.tensorflow.tools.Shape; import org.tensorflow.tools.buffer.LongDataBuffer; import org.tensorflow.tools.ndarray.LongNdArray; import org.tensorflow.tools.ndarray.NdArray; -import org.tensorflow.tools.Shape; import org.tensorflow.tools.ndarray.impl.dense.LongDenseNdArray; import org.tensorflow.types.family.TNumber; diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TString.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TString.java index 91c46564998..141c75481e7 100644 --- a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TString.java +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TString.java @@ -7,10 +7,10 @@ import org.tensorflow.internal.buffer.StringTensorBuffer; import org.tensorflow.internal.buffer.TensorBuffers; import org.tensorflow.internal.c_api.TF_Tensor; +import org.tensorflow.tools.Shape; import org.tensorflow.tools.buffer.DataBuffer; import org.tensorflow.tools.ndarray.NdArray; import org.tensorflow.tools.ndarray.NdArrays; -import org.tensorflow.tools.Shape; import org.tensorflow.tools.ndarray.impl.dense.DenseNdArray; import org.tensorflow.types.family.TType; @@ -19,11 +19,11 @@ public interface TString extends NdArray, TType { DataType DTYPE = DataType.create("STRING", 7, -1, TStringImpl::mapTensor); static Tensor scalarOf(String value) { - return copyOf(NdArrays.of(String.class, Shape.scalar()).setObject(value)); + return copyOf(NdArrays.ofRefs(String.class, Shape.scalar()).setObject(value)); } static Tensor vectorOf(String... values) { - return copyOf(NdArrays.of(String.class, Shape.make(values.length)).write(values)); + return copyOf(NdArrays.ofRefs(String.class, Shape.make(values.length)).write(values)); } static Tensor copyOf(NdArray src) { diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TUInt8.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TUInt8.java index 7af9df4a951..968c65d69ff 100644 --- a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TUInt8.java +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TUInt8.java @@ -4,10 +4,10 @@ import org.tensorflow.Tensor; import org.tensorflow.internal.buffer.TensorBuffers; import org.tensorflow.internal.c_api.TF_Tensor; +import org.tensorflow.tools.Shape; import org.tensorflow.tools.buffer.ByteDataBuffer; import org.tensorflow.tools.ndarray.ByteNdArray; import org.tensorflow.tools.ndarray.NdArray; -import org.tensorflow.tools.Shape; import org.tensorflow.tools.ndarray.impl.dense.ByteDenseNdArray; import org.tensorflow.types.family.TNumber; diff --git a/tensorflow-tools/src/main/java/org/tensorflow/tools/StaticApi.java b/tensorflow-tools/src/main/java/org/tensorflow/tools/StaticApi.java index ffb01198245..7708c19a834 100644 --- a/tensorflow-tools/src/main/java/org/tensorflow/tools/StaticApi.java +++ b/tensorflow-tools/src/main/java/org/tensorflow/tools/StaticApi.java @@ -34,8 +34,8 @@ public interface StaticApi { * @param size size of the buffer to allocate * @return a new buffer */ - static DataBuffer bufferOf(Class clazz, long size) { - return DataBuffers.of(clazz, size); + static DataBuffer bufferOfRefs(Class clazz, long size) { + return DataBuffers.ofObjects(clazz, size); } /** @@ -115,7 +115,7 @@ static BooleanDataBuffer bufferOfBooleans(long size) { * @param readOnly true if the buffer created must be read-only * @return a new buffer */ - static DataBuffer bufferOf(T[] array, boolean readOnly) { + static DataBuffer bufferOfRefs(T[] array, boolean readOnly) { return DataBuffers.wrap(array, readOnly); } @@ -195,8 +195,8 @@ static DoubleDataBuffer bufferOf(double[] array, boolean readOnly) { * @return new N-dimensional array * @throws IllegalArgumentException if shape is null or has unknown dimensions */ - static NdArray ndArrayOf(Class clazz, Shape shape) { - return NdArrays.of(clazz, shape); + static NdArray ndArrayOfRefs(Class clazz, Shape shape) { + return NdArrays.ofRefs(clazz, shape); } /** @@ -400,8 +400,8 @@ static BooleanNdArray ndArrayOf(BooleanDataBuffer buffer, Shape shape) { * @param value scalar value * @return new scalar */ - static NdArray scalarOfObject(T value) { - return NdArrays.scalarOfObject(value); + static NdArray scalarOfRef(T value) { + return NdArrays.scalarOfRef(value); } /** @@ -481,8 +481,8 @@ static BooleanNdArray scalarOf(boolean value) { * @return new vector * @throws IllegalArgumentException if values is null */ - static NdArray vectorOfObjects(T... values) { - return NdArrays.vectorOfObjects(values); + static NdArray vectorOfRefs(T... values) { + return NdArrays.vectorOfRefs(values); } /** diff --git a/tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/DataBuffer.java b/tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/DataBuffer.java index b814d736d29..5e2b89bae7b 100644 --- a/tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/DataBuffer.java +++ b/tensorflow-tools/src/main/java/org/tensorflow/tools/buffer/DataBuffer.java @@ -25,8 +25,7 @@ *

Instances of {@code DataBuffer} map native or heap memory segments to a linear view that * supports: *