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