1d8e9fbcb727d47b10a2b12a993216b9289d306eeA. Unique TensorFlower/* Copyright 2016 The TensorFlow Authors. All Rights Reserved. 2d8e9fbcb727d47b10a2b12a993216b9289d306eeA. Unique TensorFlower 3d8e9fbcb727d47b10a2b12a993216b9289d306eeA. Unique TensorFlowerLicensed under the Apache License, Version 2.0 (the "License"); 4d8e9fbcb727d47b10a2b12a993216b9289d306eeA. Unique TensorFlower 5d8e9fbcb727d47b10a2b12a993216b9289d306eeA. Unique TensorFlowerYou may obtain a copy of the License at 6d8e9fbcb727d47b10a2b12a993216b9289d306eeA. Unique TensorFlower 7d8e9fbcb727d47b10a2b12a993216b9289d306eeA. Unique TensorFlower http://www.apache.org/licenses/LICENSE-2.0 8d8e9fbcb727d47b10a2b12a993216b9289d306eeA. Unique TensorFlower 9d8e9fbcb727d47b10a2b12a993216b9289d306eeA. Unique TensorFlowerUnless required by applicable law or agreed to in writing, software 10d8e9fbcb727d47b10a2b12a993216b9289d306eeA. Unique TensorFlowerdistributed under the License is distributed on an "AS IS" BASIS, 11d8e9fbcb727d47b10a2b12a993216b9289d306eeA. Unique TensorFlowerWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12d8e9fbcb727d47b10a2b12a993216b9289d306eeA. Unique TensorFlowerSee the License for the specific language governing permissions and 13d8e9fbcb727d47b10a2b12a993216b9289d306eeA. Unique TensorFlowerlimitations under the License. 14d8e9fbcb727d47b10a2b12a993216b9289d306eeA. Unique TensorFlower==============================================================================*/ 15d8e9fbcb727d47b10a2b12a993216b9289d306eeA. Unique TensorFlower 16d8e9fbcb727d47b10a2b12a993216b9289d306eeA. Unique TensorFlower#include "tensorflow/core/framework/node_def_builder.h" 17d8e9fbcb727d47b10a2b12a993216b9289d306eeA. Unique TensorFlower#include "tensorflow/core/framework/op.h" 18d8e9fbcb727d47b10a2b12a993216b9289d306eeA. Unique TensorFlower#include "tensorflow/core/framework/shape_inference_testutil.h" 19d8e9fbcb727d47b10a2b12a993216b9289d306eeA. Unique TensorFlower#include "tensorflow/core/framework/tensor_testutil.h" 20d8e9fbcb727d47b10a2b12a993216b9289d306eeA. Unique TensorFlower#include "tensorflow/core/platform/test.h" 21d8e9fbcb727d47b10a2b12a993216b9289d306eeA. Unique TensorFlower 22d8e9fbcb727d47b10a2b12a993216b9289d306eeA. Unique TensorFlowernamespace tensorflow { 23d8e9fbcb727d47b10a2b12a993216b9289d306eeA. Unique TensorFlower 24d8e9fbcb727d47b10a2b12a993216b9289d306eeA. Unique TensorFlowerTEST(SetOpsTest, DenseToDenseShape_InvalidNumberOfInputs) { 25d8e9fbcb727d47b10a2b12a993216b9289d306eeA. Unique TensorFlower ShapeInferenceTestOp op("DenseToDenseSetOperation"); 26d8e9fbcb727d47b10a2b12a993216b9289d306eeA. Unique TensorFlower op.input_tensors.resize(3); 27cf93b043a88607db17b84b5b5d3f0064473cf5ceA. Unique TensorFlower INFER_ERROR("Wrong number of inputs passed", op, "?;?;?"); 28d8e9fbcb727d47b10a2b12a993216b9289d306eeA. Unique TensorFlower} 29d8e9fbcb727d47b10a2b12a993216b9289d306eeA. Unique TensorFlower 30d8e9fbcb727d47b10a2b12a993216b9289d306eeA. Unique TensorFlowerTEST(SetOpsTest, DenseToDenseShape) { 31d8e9fbcb727d47b10a2b12a993216b9289d306eeA. Unique TensorFlower ShapeInferenceTestOp op("DenseToDenseSetOperation"); 32d8e9fbcb727d47b10a2b12a993216b9289d306eeA. Unique TensorFlower 33d8e9fbcb727d47b10a2b12a993216b9289d306eeA. Unique TensorFlower // Unknown shapes. 34d8e9fbcb727d47b10a2b12a993216b9289d306eeA. Unique TensorFlower INFER_OK(op, "?;?", "[?,?];[?];[?]"); 35d8e9fbcb727d47b10a2b12a993216b9289d306eeA. Unique TensorFlower 36d8e9fbcb727d47b10a2b12a993216b9289d306eeA. Unique TensorFlower // Invalid rank. 37f7240d8ee4f9ca8b8725d3c9ced221e9789edb6cA. Unique TensorFlower INFER_ERROR("Shape must be at least rank 2 but is rank 1", op, "[?];?"); 38f7240d8ee4f9ca8b8725d3c9ced221e9789edb6cA. Unique TensorFlower INFER_ERROR("Shape must be at least rank 2 but is rank 1", op, "?;[?]"); 39f7240d8ee4f9ca8b8725d3c9ced221e9789edb6cA. Unique TensorFlower INFER_ERROR("Shape must be at least rank 2 but is rank 1", op, "[2];?"); 40f7240d8ee4f9ca8b8725d3c9ced221e9789edb6cA. Unique TensorFlower INFER_ERROR("Shape must be at least rank 2 but is rank 1", op, "?;[2]"); 41d8e9fbcb727d47b10a2b12a993216b9289d306eeA. Unique TensorFlower 42d8e9fbcb727d47b10a2b12a993216b9289d306eeA. Unique TensorFlower // Mismatched ranks. 43f7240d8ee4f9ca8b8725d3c9ced221e9789edb6cA. Unique TensorFlower INFER_ERROR("Shape must be rank 2 but is rank 3", op, "[?,?];[?,?,?]"); 44f7240d8ee4f9ca8b8725d3c9ced221e9789edb6cA. Unique TensorFlower INFER_ERROR("Shape must be rank 3 but is rank 2", op, "[?,?,?];[?,?]"); 45f7240d8ee4f9ca8b8725d3c9ced221e9789edb6cA. Unique TensorFlower INFER_ERROR("Shape must be rank 2 but is rank 3", op, "[2,1];[2,1,2]"); 46f7240d8ee4f9ca8b8725d3c9ced221e9789edb6cA. Unique TensorFlower INFER_ERROR("Shape must be rank 3 but is rank 2", op, "[2,1,2];[2,1]"); 47d8e9fbcb727d47b10a2b12a993216b9289d306eeA. Unique TensorFlower 48d8e9fbcb727d47b10a2b12a993216b9289d306eeA. Unique TensorFlower // Rank 2, unknown dims. 49d8e9fbcb727d47b10a2b12a993216b9289d306eeA. Unique TensorFlower INFER_OK(op, "[?,?];?", "[?,2];[?];[2]"); 50d8e9fbcb727d47b10a2b12a993216b9289d306eeA. Unique TensorFlower INFER_OK(op, "?;[?,?]", "[?,2];[?];[2]"); 51d8e9fbcb727d47b10a2b12a993216b9289d306eeA. Unique TensorFlower INFER_OK(op, "[?,?];[?,?]", "[?,2];[?];[2]"); 52d8e9fbcb727d47b10a2b12a993216b9289d306eeA. Unique TensorFlower 53d8e9fbcb727d47b10a2b12a993216b9289d306eeA. Unique TensorFlower // Rank 4, unknown dims. 54d8e9fbcb727d47b10a2b12a993216b9289d306eeA. Unique TensorFlower INFER_OK(op, "[?,?,?,?];?", "[?,4];[?];[4]"); 55d8e9fbcb727d47b10a2b12a993216b9289d306eeA. Unique TensorFlower INFER_OK(op, "?;[?,?,?,?]", "[?,4];[?];[4]"); 56d8e9fbcb727d47b10a2b12a993216b9289d306eeA. Unique TensorFlower INFER_OK(op, "[?,?,?,?];[?,?,?,?]", "[?,4];[?];[4]"); 57d8e9fbcb727d47b10a2b12a993216b9289d306eeA. Unique TensorFlower 58f7240d8ee4f9ca8b8725d3c9ced221e9789edb6cA. Unique TensorFlower // Known rank for 1 input. 59f7240d8ee4f9ca8b8725d3c9ced221e9789edb6cA. Unique TensorFlower INFER_OK(op, "[5,3,2,1];?", "[?,4];[?];[4]"); 60f7240d8ee4f9ca8b8725d3c9ced221e9789edb6cA. Unique TensorFlower INFER_OK(op, "?;[5,3,2,1]", "[?,4];[?];[4]"); 61f7240d8ee4f9ca8b8725d3c9ced221e9789edb6cA. Unique TensorFlower INFER_OK(op, "[5,3,2,1];[?,?,?,?]", "[?,4];[?];[4]"); 62f7240d8ee4f9ca8b8725d3c9ced221e9789edb6cA. Unique TensorFlower INFER_OK(op, "[?,?,?,?];[5,3,2,1]", "[?,4];[?];[4]"); 63f7240d8ee4f9ca8b8725d3c9ced221e9789edb6cA. Unique TensorFlower INFER_OK(op, "[5,3,2,1];[?,?,?,?]", "[?,4];[?];[4]"); 64d8e9fbcb727d47b10a2b12a993216b9289d306eeA. Unique TensorFlower 65f7240d8ee4f9ca8b8725d3c9ced221e9789edb6cA. Unique TensorFlower // Mismatched n-1 dims. 66d8e9fbcb727d47b10a2b12a993216b9289d306eeA. Unique TensorFlower INFER_ERROR("Dimension 0 in both shapes must be equal", op, 67d8e9fbcb727d47b10a2b12a993216b9289d306eeA. Unique TensorFlower "[4,?,2,?];[3,1,?,5]"); 68d8e9fbcb727d47b10a2b12a993216b9289d306eeA. Unique TensorFlower INFER_ERROR("Dimension 2 in both shapes must be equal", op, 69d8e9fbcb727d47b10a2b12a993216b9289d306eeA. Unique TensorFlower "[4,3,2,1];[4,3,3,1]"); 70d8e9fbcb727d47b10a2b12a993216b9289d306eeA. Unique TensorFlower 71f7240d8ee4f9ca8b8725d3c9ced221e9789edb6cA. Unique TensorFlower // Matched n-1 dims. 72f7240d8ee4f9ca8b8725d3c9ced221e9789edb6cA. Unique TensorFlower INFER_OK(op, "[4,5,6,7];[?,?,?,?]", "[?,4];[?];[4]"); 73f7240d8ee4f9ca8b8725d3c9ced221e9789edb6cA. Unique TensorFlower INFER_OK(op, "[4,5,6,7];[?,?,?,4]", "[?,4];[?];[4]"); 74f7240d8ee4f9ca8b8725d3c9ced221e9789edb6cA. Unique TensorFlower INFER_OK(op, "[?,?,?,?];[4,5,6,7]", "[?,4];[?];[4]"); 75f7240d8ee4f9ca8b8725d3c9ced221e9789edb6cA. Unique TensorFlower INFER_OK(op, "[4,?,2,?];[?,1,?,5]", "[?,4];[?];[4]"); 76f7240d8ee4f9ca8b8725d3c9ced221e9789edb6cA. Unique TensorFlower INFER_OK(op, "[4,5,6,7];[4,?,6,?]", "[?,4];[?];[4]"); 77f7240d8ee4f9ca8b8725d3c9ced221e9789edb6cA. Unique TensorFlower INFER_OK(op, "[4,5,6,7];[4,5,6,4]", "[?,4];[?];[4]"); 78d8e9fbcb727d47b10a2b12a993216b9289d306eeA. Unique TensorFlower} 79d8e9fbcb727d47b10a2b12a993216b9289d306eeA. Unique TensorFlower 80d8e9fbcb727d47b10a2b12a993216b9289d306eeA. Unique TensorFlowerTEST(SetOpsTest, DenseToSparseShape_InvalidNumberOfInputs) { 81d8e9fbcb727d47b10a2b12a993216b9289d306eeA. Unique TensorFlower ShapeInferenceTestOp op("DenseToSparseSetOperation"); 82d8e9fbcb727d47b10a2b12a993216b9289d306eeA. Unique TensorFlower op.input_tensors.resize(5); 83cf93b043a88607db17b84b5b5d3f0064473cf5ceA. Unique TensorFlower INFER_ERROR("Wrong number of inputs passed", op, "?;?;?;?;?"); 84d8e9fbcb727d47b10a2b12a993216b9289d306eeA. Unique TensorFlower} 85d8e9fbcb727d47b10a2b12a993216b9289d306eeA. Unique TensorFlower 86d8e9fbcb727d47b10a2b12a993216b9289d306eeA. Unique TensorFlowerTEST(SetOpsTest, DenseToSparseShape) { 87d8e9fbcb727d47b10a2b12a993216b9289d306eeA. Unique TensorFlower ShapeInferenceTestOp op("DenseToSparseSetOperation"); 88d8e9fbcb727d47b10a2b12a993216b9289d306eeA. Unique TensorFlower INFER_OK(op, "?;?;?;?", "[?,?];[?];[?]"); 89d8e9fbcb727d47b10a2b12a993216b9289d306eeA. Unique TensorFlower 90d8e9fbcb727d47b10a2b12a993216b9289d306eeA. Unique TensorFlower // Unknown shapes. 91d8e9fbcb727d47b10a2b12a993216b9289d306eeA. Unique TensorFlower INFER_OK(op, "?;?;?;?", "[?,?];[?];[?]"); 92f7240d8ee4f9ca8b8725d3c9ced221e9789edb6cA. Unique TensorFlower INFER_OK(op, "?;[?,?];[?];[?]", "[?,?];[?];[?]"); 93d8e9fbcb727d47b10a2b12a993216b9289d306eeA. Unique TensorFlower 94d8e9fbcb727d47b10a2b12a993216b9289d306eeA. Unique TensorFlower // Invalid rank. 95f7240d8ee4f9ca8b8725d3c9ced221e9789edb6cA. Unique TensorFlower INFER_ERROR("Shape must be at least rank 2 but is rank 1", op, "[?];?;?;?"); 96f7240d8ee4f9ca8b8725d3c9ced221e9789edb6cA. Unique TensorFlower INFER_ERROR("Shape must be at least rank 2 but is rank 1", op, 97f7240d8ee4f9ca8b8725d3c9ced221e9789edb6cA. Unique TensorFlower "[?];[?,?];[?];[?]"); 98f7240d8ee4f9ca8b8725d3c9ced221e9789edb6cA. Unique TensorFlower INFER_ERROR("Shape must be at least rank 2 but is rank 1", op, 99f7240d8ee4f9ca8b8725d3c9ced221e9789edb6cA. Unique TensorFlower "[?];[5,3];[5];[3]"); 100f7240d8ee4f9ca8b8725d3c9ced221e9789edb6cA. Unique TensorFlower INFER_ERROR("Shape must be at least rank 2 but is rank 1", op, "[2];?;?;?"); 101f7240d8ee4f9ca8b8725d3c9ced221e9789edb6cA. Unique TensorFlower INFER_ERROR("Shape must be at least rank 2 but is rank 1", op, 102f7240d8ee4f9ca8b8725d3c9ced221e9789edb6cA. Unique TensorFlower "[2];[?,?];[?];[?]"); 103f7240d8ee4f9ca8b8725d3c9ced221e9789edb6cA. Unique TensorFlower INFER_ERROR("Shape must be at least rank 2 but is rank 1", op, 104f7240d8ee4f9ca8b8725d3c9ced221e9789edb6cA. Unique TensorFlower "[2];[5,3];[5];[3]"); 105f7240d8ee4f9ca8b8725d3c9ced221e9789edb6cA. Unique TensorFlower 106f7240d8ee4f9ca8b8725d3c9ced221e9789edb6cA. Unique TensorFlower // Unknown sparse rank. 107d8e9fbcb727d47b10a2b12a993216b9289d306eeA. Unique TensorFlower INFER_OK(op, "[?,?];?;?;?", "[?,2];[?];[2]"); 108d8e9fbcb727d47b10a2b12a993216b9289d306eeA. Unique TensorFlower INFER_OK(op, "[?,?];[?,?];[?];[?]", "[?,2];[?];[2]"); 109d8e9fbcb727d47b10a2b12a993216b9289d306eeA. Unique TensorFlower 110f7240d8ee4f9ca8b8725d3c9ced221e9789edb6cA. Unique TensorFlower // Unknown dense rank. 111f7240d8ee4f9ca8b8725d3c9ced221e9789edb6cA. Unique TensorFlower INFER_OK(op, "?;[?,2];[?];[2]", "[?,d3_0];[?];[d3_0]"); 112f7240d8ee4f9ca8b8725d3c9ced221e9789edb6cA. Unique TensorFlower INFER_OK(op, "?;[5,2];[5];[2]", "[?,d3_0];[?];[d3_0]"); 113d8e9fbcb727d47b10a2b12a993216b9289d306eeA. Unique TensorFlower 114f7240d8ee4f9ca8b8725d3c9ced221e9789edb6cA. Unique TensorFlower // Known both ranks. 115f7240d8ee4f9ca8b8725d3c9ced221e9789edb6cA. Unique TensorFlower INFER_OK(op, "[?,?];[5,2];[5];[2]", "[?,2];[?];[2]"); 116f7240d8ee4f9ca8b8725d3c9ced221e9789edb6cA. Unique TensorFlower INFER_OK(op, "[4,3];[5,2];[5];[2]", "[?,2];[?];[2]"); 117d8e9fbcb727d47b10a2b12a993216b9289d306eeA. Unique TensorFlower 118d8e9fbcb727d47b10a2b12a993216b9289d306eeA. Unique TensorFlower // Invalid input sparse tensor. 119d8e9fbcb727d47b10a2b12a993216b9289d306eeA. Unique TensorFlower INFER_ERROR("elements in index (5) and values (6) do not match", op, 120f7240d8ee4f9ca8b8725d3c9ced221e9789edb6cA. Unique TensorFlower "?;[5,3];[6];[3]"); 121d8e9fbcb727d47b10a2b12a993216b9289d306eeA. Unique TensorFlower INFER_ERROR("rank (3) and shape rank (4) do not match", op, 122f7240d8ee4f9ca8b8725d3c9ced221e9789edb6cA. Unique TensorFlower "?;[5,3];[5];[4]"); 123d8e9fbcb727d47b10a2b12a993216b9289d306eeA. Unique TensorFlower} 124d8e9fbcb727d47b10a2b12a993216b9289d306eeA. Unique TensorFlower 125d8e9fbcb727d47b10a2b12a993216b9289d306eeA. Unique TensorFlowerTEST(SetOpsTest, SparseToSparseShape_InvalidNumberOfInputs) { 126d8e9fbcb727d47b10a2b12a993216b9289d306eeA. Unique TensorFlower ShapeInferenceTestOp op("SparseToSparseSetOperation"); 127d8e9fbcb727d47b10a2b12a993216b9289d306eeA. Unique TensorFlower op.input_tensors.resize(7); 128cf93b043a88607db17b84b5b5d3f0064473cf5ceA. Unique TensorFlower INFER_ERROR("Wrong number of inputs passed", op, "?;?;?;?;?;?;?"); 129d8e9fbcb727d47b10a2b12a993216b9289d306eeA. Unique TensorFlower} 130d8e9fbcb727d47b10a2b12a993216b9289d306eeA. Unique TensorFlower 131d8e9fbcb727d47b10a2b12a993216b9289d306eeA. Unique TensorFlowerTEST(SetOpsTest, SparseToSparseShape) { 132d8e9fbcb727d47b10a2b12a993216b9289d306eeA. Unique TensorFlower ShapeInferenceTestOp op("SparseToSparseSetOperation"); 133f7240d8ee4f9ca8b8725d3c9ced221e9789edb6cA. Unique TensorFlower 134f7240d8ee4f9ca8b8725d3c9ced221e9789edb6cA. Unique TensorFlower // Unknown. 135d8e9fbcb727d47b10a2b12a993216b9289d306eeA. Unique TensorFlower INFER_OK(op, "?;?;?;?;?;?", "[?,?];[?];[?]"); 136f7240d8ee4f9ca8b8725d3c9ced221e9789edb6cA. Unique TensorFlower INFER_OK(op, "[?,?];[?];[?];[?,?];[?];[?]", "[?,?];[?];[?]"); 137f7240d8ee4f9ca8b8725d3c9ced221e9789edb6cA. Unique TensorFlower INFER_OK(op, "?;?;?;[?,?];[?];[?]", "[?,?];[?];[?]"); 138f7240d8ee4f9ca8b8725d3c9ced221e9789edb6cA. Unique TensorFlower INFER_OK(op, "[?,?];[?];[?];?;?;?", "[?,?];[?];[?]"); 139f7240d8ee4f9ca8b8725d3c9ced221e9789edb6cA. Unique TensorFlower 140f7240d8ee4f9ca8b8725d3c9ced221e9789edb6cA. Unique TensorFlower // Known rank for 1 input. 141f7240d8ee4f9ca8b8725d3c9ced221e9789edb6cA. Unique TensorFlower INFER_OK(op, "[?,2];[?];[2];?;?;?", "[?,d2_0];[?];[d2_0]"); 142f7240d8ee4f9ca8b8725d3c9ced221e9789edb6cA. Unique TensorFlower INFER_OK(op, "?;?;?;[?,2];[?];[2]", "[?,d5_0];[?];[d5_0]"); 143f7240d8ee4f9ca8b8725d3c9ced221e9789edb6cA. Unique TensorFlower INFER_OK(op, "[?,2];[?];[2];[?,?];[?];[?]", "[?,d2_0];[?];[d2_0]"); 144f7240d8ee4f9ca8b8725d3c9ced221e9789edb6cA. Unique TensorFlower INFER_OK(op, "[?,?];[?];[?];[?,2];[?];[2]", "[?,d5_0];[?];[d5_0]"); 145f7240d8ee4f9ca8b8725d3c9ced221e9789edb6cA. Unique TensorFlower 146f7240d8ee4f9ca8b8725d3c9ced221e9789edb6cA. Unique TensorFlower // Known rank for both inputs. 147f7240d8ee4f9ca8b8725d3c9ced221e9789edb6cA. Unique TensorFlower INFER_OK(op, "[?,2];[?];[2];[?,2];[?];[2]", "[?,d2_0];[?];[d2_0]"); 148d8e9fbcb727d47b10a2b12a993216b9289d306eeA. Unique TensorFlower} 149d8e9fbcb727d47b10a2b12a993216b9289d306eeA. Unique TensorFlower 150d8e9fbcb727d47b10a2b12a993216b9289d306eeA. Unique TensorFlower} // end namespace tensorflow 151