19d57702513001bfded19e72c76a986cce56d5f00Benoit Steiner/* Copyright 2017 The TensorFlow Authors. All Rights Reserved.
29d57702513001bfded19e72c76a986cce56d5f00Benoit Steiner
39d57702513001bfded19e72c76a986cce56d5f00Benoit SteinerLicensed under the Apache License, Version 2.0 (the "License");
49d57702513001bfded19e72c76a986cce56d5f00Benoit Steineryou may not use this file except in compliance with the License.
59d57702513001bfded19e72c76a986cce56d5f00Benoit SteinerYou may obtain a copy of the License at
69d57702513001bfded19e72c76a986cce56d5f00Benoit Steiner
79d57702513001bfded19e72c76a986cce56d5f00Benoit Steiner    http://www.apache.org/licenses/LICENSE-2.0
89d57702513001bfded19e72c76a986cce56d5f00Benoit Steiner
99d57702513001bfded19e72c76a986cce56d5f00Benoit SteinerUnless required by applicable law or agreed to in writing, software
109d57702513001bfded19e72c76a986cce56d5f00Benoit Steinerdistributed under the License is distributed on an "AS IS" BASIS,
119d57702513001bfded19e72c76a986cce56d5f00Benoit SteinerWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
129d57702513001bfded19e72c76a986cce56d5f00Benoit SteinerSee the License for the specific language governing permissions and
139d57702513001bfded19e72c76a986cce56d5f00Benoit Steinerlimitations under the License.
149d57702513001bfded19e72c76a986cce56d5f00Benoit Steiner==============================================================================*/
159d57702513001bfded19e72c76a986cce56d5f00Benoit Steiner
169d57702513001bfded19e72c76a986cce56d5f00Benoit Steiner#ifndef TENSORFLOW_GRAPPLER_OP_TYPES_H_
179d57702513001bfded19e72c76a986cce56d5f00Benoit Steiner#define TENSORFLOW_GRAPPLER_OP_TYPES_H_
189d57702513001bfded19e72c76a986cce56d5f00Benoit Steiner
199d57702513001bfded19e72c76a986cce56d5f00Benoit Steiner#include "tensorflow/core/framework/node_def.pb.h"
20c4ec569953069f689fd42bae92e15f6ccf40e364A. Unique TensorFlower#include "tensorflow/core/lib/core/status.h"
219d57702513001bfded19e72c76a986cce56d5f00Benoit Steiner
229d57702513001bfded19e72c76a986cce56d5f00Benoit Steinernamespace tensorflow {
239d57702513001bfded19e72c76a986cce56d5f00Benoit Steinernamespace grappler {
249d57702513001bfded19e72c76a986cce56d5f00Benoit Steiner
251ffb45e7112addad325084084b93897918ed9a54Yao Zhangbool IsAdd(const NodeDef& node);
26136494d3295a23e3ed0612773f224243915463b7Benoit Steinerbool IsAddN(const NodeDef& node);
27d723bdb0051b4dc3b88dae459de2a18ea33441faYao Zhangbool IsAll(const NodeDef& node);
28ab6ac785229336a9339b087bc8ab2c27043be329Yao Zhangbool IsAngle(const NodeDef& node);
29d723bdb0051b4dc3b88dae459de2a18ea33441faYao Zhangbool IsAny(const NodeDef& node);
30634515e14e8bf5aa4bdfe149b77c9aa53383891eA. Unique TensorFlowerbool IsAnyDiv(const NodeDef& node);
31ab6ac785229336a9339b087bc8ab2c27043be329Yao Zhangbool IsApproximateEqual(const NodeDef& node);
321ffb45e7112addad325084084b93897918ed9a54Yao Zhangbool IsAvgPoolGrad(const NodeDef& node);
33cd8ced7a2d48574908d2c9b7127960078cf41690A. Unique TensorFlowerbool IsAssert(const NodeDef& node);
34ab6ac785229336a9339b087bc8ab2c27043be329Yao Zhangbool IsAtan2(const NodeDef& node);
3532ee432d9674567e80771b070e68e7f565d4fd2cYao Zhangbool IsBetainc(const NodeDef& node);
36b8368b721a2679fb68c014dc6fe890dc167dff14A. Unique TensorFlowerbool IsBiasAdd(const NodeDef& node);
371ffb45e7112addad325084084b93897918ed9a54Yao Zhangbool IsBiasAddGrad(const NodeDef& node);
38ab6ac785229336a9339b087bc8ab2c27043be329Yao Zhangbool IsBitcast(const NodeDef& node);
39fe613b051b5732f06af586f7b4f0ca28121f1eccYao Zhangbool IsCast(const NodeDef& node);
40ab6ac785229336a9339b087bc8ab2c27043be329Yao Zhangbool IsComplex(const NodeDef& node);
41ab6ac785229336a9339b087bc8ab2c27043be329Yao Zhangbool IsComplexAbs(const NodeDef& node);
42ab6ac785229336a9339b087bc8ab2c27043be329Yao Zhangbool IsConj(const NodeDef& node);
431ffb45e7112addad325084084b93897918ed9a54Yao Zhangbool IsConcatOffset(const NodeDef& node);
441a0f2fa7b0f4be4c0196c22b5c6ae717a8361ccaBenoit Steinerbool IsConstant(const NodeDef& node);
451ffb45e7112addad325084084b93897918ed9a54Yao Zhangbool IsConv2D(const NodeDef& node);
461ffb45e7112addad325084084b93897918ed9a54Yao Zhangbool IsConv2DBackpropFilter(const NodeDef& node);
471ffb45e7112addad325084084b93897918ed9a54Yao Zhangbool IsConv2DBackpropInput(const NodeDef& node);
486ad9e45abf68f62caf7a9fe7adb7ef30da5ea6caYao Zhangbool IsDepthwiseConv2dNative(const NodeDef& node);
496ad9e45abf68f62caf7a9fe7adb7ef30da5ea6caYao Zhangbool IsDepthwiseConv2dNativeBackpropFilter(const NodeDef& node);
506ad9e45abf68f62caf7a9fe7adb7ef30da5ea6caYao Zhangbool IsDepthwiseConv2dNativeBackpropInput(const NodeDef& node);
517bc6271055714f3d4d0b957a2f4c6a910ea20388Yuefeng Zhoubool IsDequeueOp(const NodeDef& node);
52634515e14e8bf5aa4bdfe149b77c9aa53383891eA. Unique TensorFlowerbool IsDiv(const NodeDef& node);
53bb3c383ca03e116a3428bbd885be2f1726ff0c54Yao Zhangbool IsEluGrad(const NodeDef& node);
54c247826219dd2541c6aba4578a03a171375d9290Benoit Steinerbool IsEnter(const NodeDef& node);
55ab6ac785229336a9339b087bc8ab2c27043be329Yao Zhangbool IsEqual(const NodeDef& node);
56c4a58e3fdd9880d424f639502e93a8298a965467Yao Zhangbool IsExit(const NodeDef& node);
574b66819917856d5534cecffc02ed495e59fe5953Yao Zhangbool IsFill(const NodeDef& node);
58ab6ac785229336a9339b087bc8ab2c27043be329Yao Zhangbool IsFloorDiv(const NodeDef& node);
591ffb45e7112addad325084084b93897918ed9a54Yao Zhangbool IsFloorMod(const NodeDef& node);
60a313da5c81babbbf9049c03aba8f078448dd9c9cYao Zhangbool IsFusedBatchNormGrad(const NodeDef& node);
61ab6ac785229336a9339b087bc8ab2c27043be329Yao Zhangbool IsGreater(const NodeDef& node);
62ab6ac785229336a9339b087bc8ab2c27043be329Yao Zhangbool IsGreaterEqual(const NodeDef& node);
63d723bdb0051b4dc3b88dae459de2a18ea33441faYao Zhangbool IsHistogramSummary(const NodeDef& node);
6493c57c6e4fe8f3ec1268bf8a947321cc4ba8bfc8Benoit Steinerbool IsIdentity(const NodeDef& node);
651d651f18ae84c20d71ddfddc32e4495e00902440Yao Zhangbool IsIdentityN(const NodeDef& node);
66ab6ac785229336a9339b087bc8ab2c27043be329Yao Zhangbool IsIgamma(const NodeDef& node);
67ab6ac785229336a9339b087bc8ab2c27043be329Yao Zhangbool IsIgammac(const NodeDef& node);
68ab6ac785229336a9339b087bc8ab2c27043be329Yao Zhangbool IsImag(const NodeDef& node);
69bb3c383ca03e116a3428bbd885be2f1726ff0c54Yao Zhangbool IsInvGrad(const NodeDef& node);
70ab6ac785229336a9339b087bc8ab2c27043be329Yao Zhangbool IsLess(const NodeDef& node);
71ab6ac785229336a9339b087bc8ab2c27043be329Yao Zhangbool IsLessEqual(const NodeDef& node);
72ab6ac785229336a9339b087bc8ab2c27043be329Yao Zhangbool IsLogicalAnd(const NodeDef& node);
73ab6ac785229336a9339b087bc8ab2c27043be329Yao Zhangbool IsLogicalNot(const NodeDef& node);
74ab6ac785229336a9339b087bc8ab2c27043be329Yao Zhangbool IsLogicalOr(const NodeDef& node);
75d723bdb0051b4dc3b88dae459de2a18ea33441faYao Zhangbool IsMax(const NodeDef& node);
76ab6ac785229336a9339b087bc8ab2c27043be329Yao Zhangbool IsMaximum(const NodeDef& node);
77d723bdb0051b4dc3b88dae459de2a18ea33441faYao Zhangbool IsMean(const NodeDef& node);
781a0f2fa7b0f4be4c0196c22b5c6ae717a8361ccaBenoit Steinerbool IsMerge(const NodeDef& node);
79d723bdb0051b4dc3b88dae459de2a18ea33441faYao Zhangbool IsMin(const NodeDef& node);
80ab6ac785229336a9339b087bc8ab2c27043be329Yao Zhangbool IsMinimum(const NodeDef& node);
81e0b647e10ae1e96e350b2ae75d14fd35fd3a0557Yao Zhangbool IsMirrorPad(const NodeDef& node);
82e0b647e10ae1e96e350b2ae75d14fd35fd3a0557Yao Zhangbool IsMirrorPadGrad(const NodeDef& node);
83ab6ac785229336a9339b087bc8ab2c27043be329Yao Zhangbool IsMod(const NodeDef& node);
841ffb45e7112addad325084084b93897918ed9a54Yao Zhangbool IsMul(const NodeDef& node);
8559ae88dac4399a8719aebe1b90f87f61fd1fd7e5A. Unique TensorFlowerbool IsMatMul(const NodeDef& node);
861fa8b4247a15079cb60da74a3c86ed5eef7f1b93Benoit Steinerbool IsNextIteration(const NodeDef& node);
871ffb45e7112addad325084084b93897918ed9a54Yao Zhangbool IsPad(const NodeDef& node);
888f89b654f4d49a1b5d4462303ef27f7f7a2958b3A. Unique TensorFlowerbool IsNoOp(const NodeDef& node);
89ab6ac785229336a9339b087bc8ab2c27043be329Yao Zhangbool IsNotEqual(const NodeDef& node);
909d57702513001bfded19e72c76a986cce56d5f00Benoit Steinerbool IsPlaceholder(const NodeDef& node);
91ab6ac785229336a9339b087bc8ab2c27043be329Yao Zhangbool IsPolygamma(const NodeDef& node);
92d723bdb0051b4dc3b88dae459de2a18ea33441faYao Zhangbool IsProd(const NodeDef& node);
93ab6ac785229336a9339b087bc8ab2c27043be329Yao Zhangbool IsPow(const NodeDef& node);
94ab6ac785229336a9339b087bc8ab2c27043be329Yao Zhangbool IsReal(const NodeDef& node);
951ffb45e7112addad325084084b93897918ed9a54Yao Zhangbool IsRealDiv(const NodeDef& node);
96bb3c383ca03e116a3428bbd885be2f1726ff0c54Yao Zhangbool IsRelu6Grad(const NodeDef& node);
971ffb45e7112addad325084084b93897918ed9a54Yao Zhangbool IsReluGrad(const NodeDef& node);
98bb3c383ca03e116a3428bbd885be2f1726ff0c54Yao Zhangbool IsReciprocalGrad(const NodeDef& node);
998f89b654f4d49a1b5d4462303ef27f7f7a2958b3A. Unique TensorFlowerbool IsRecv(const NodeDef& node);
1009ae941c4a8c2d6e5a87c7a200ebde5bd0b07e5b2Benoit Steinerbool IsReduction(const NodeDef& node);
10159d37536717f08dd6e462ed785ee0e912ff344f5Benoit Steinerbool IsReshape(const NodeDef& node);
10238445f025c4d05f374938e6c6c201dc3c0b20c77Yuefeng Zhoubool IsRestore(const NodeDef& node);
1037989a3aa026f93c1f45e1baf4ac37ad2a79156f9A. Unique TensorFlowerbool IsReverseV2(const NodeDef& node);
104bb3c383ca03e116a3428bbd885be2f1726ff0c54Yao Zhangbool IsRsqrtGrad(const NodeDef& node);
10532ee432d9674567e80771b070e68e7f565d4fd2cYao Zhangbool IsSelect(const NodeDef& node);
106bb3c383ca03e116a3428bbd885be2f1726ff0c54Yao Zhangbool IsSeluGrad(const NodeDef& node);
1078f89b654f4d49a1b5d4462303ef27f7f7a2958b3A. Unique TensorFlowerbool IsSend(const NodeDef& node);
1081ffb45e7112addad325084084b93897918ed9a54Yao Zhangbool IsSlice(const NodeDef& node);
109ea78050f20f7508537ccd1dee6dd60f0f40829ccYao Zhangbool IsShape(const NodeDef& node);
110ea78050f20f7508537ccd1dee6dd60f0f40829ccYao Zhangbool IsShapeN(const NodeDef& node);
111bb3c383ca03e116a3428bbd885be2f1726ff0c54Yao Zhangbool IsSigmoidGrad(const NodeDef& node);
112bb3c383ca03e116a3428bbd885be2f1726ff0c54Yao Zhangbool IsSoftplusGrad(const NodeDef& node);
113bb3c383ca03e116a3428bbd885be2f1726ff0c54Yao Zhangbool IsSoftsignGrad(const NodeDef& node);
1146c5ccadd434f2e6ed9634031bac2682c3dfe5216Yao Zhangbool IsSplit(const NodeDef& node);
115fa96f2595fa073a6bc943dfabea6852d41a706a3Yao Zhangbool IsSplitV(const NodeDef& node);
116bb3c383ca03e116a3428bbd885be2f1726ff0c54Yao Zhangbool IsSqrtGrad(const NodeDef& node);
1171ffb45e7112addad325084084b93897918ed9a54Yao Zhangbool IsSquaredDifference(const NodeDef& node);
1181ffb45e7112addad325084084b93897918ed9a54Yao Zhangbool IsSqueeze(const NodeDef& node);
119bb4a6168eaa0c6752d19e352f9c9dd53c9c6a6aeBenoit Steinerbool IsStopGradient(const NodeDef& node);
120834f4558fbc27605cb0717949ddc276fd4c48c83Yao Zhangbool IsStridedSlice(const NodeDef& node);
121834f4558fbc27605cb0717949ddc276fd4c48c83Yao Zhangbool IsStridedSliceGrad(const NodeDef& node);
1221ffb45e7112addad325084084b93897918ed9a54Yao Zhangbool IsSub(const NodeDef& node);
1231ffb45e7112addad325084084b93897918ed9a54Yao Zhangbool IsSum(const NodeDef& node);
12493c57c6e4fe8f3ec1268bf8a947321cc4ba8bfc8Benoit Steinerbool IsSwitch(const NodeDef& node);
125bb3c383ca03e116a3428bbd885be2f1726ff0c54Yao Zhangbool IsTanhGrad(const NodeDef& node);
12658a77fad5539454e674629d45df569af35453b02Yao Zhangbool IsTile(const NodeDef& node);
12765044bc25981e4e060ad5c34d9a520a0561775c3Yao Zhangbool IsTranspose(const NodeDef& node);
128ab6ac785229336a9339b087bc8ab2c27043be329Yao Zhangbool IsTruncateDiv(const NodeDef& node);
129ab6ac785229336a9339b087bc8ab2c27043be329Yao Zhangbool IsTruncateMod(const NodeDef& node);
1304254fa13de1697226e15df26cc101d00d1cb1a03Benoit Steinerbool IsVariable(const NodeDef& node);
131ab6ac785229336a9339b087bc8ab2c27043be329Yao Zhangbool IsZeta(const NodeDef& node);
1329d57702513001bfded19e72c76a986cce56d5f00Benoit Steiner
133c4ec569953069f689fd42bae92e15f6ccf40e364A. Unique TensorFlower// Return true if the op is an aggregation (e.g. Add, AddN).
134c4ec569953069f689fd42bae92e15f6ccf40e364A. Unique TensorFlower// Returns false if it could not be determined to be so.
135c4ec569953069f689fd42bae92e15f6ccf40e364A. Unique TensorFlowerbool IsAggregate(const NodeDef& node);
136c4ec569953069f689fd42bae92e15f6ccf40e364A. Unique TensorFlower
137c4ec569953069f689fd42bae92e15f6ccf40e364A. Unique TensorFlower// Return true if the op is commutative (e.g. Mul, Add).
138c4ec569953069f689fd42bae92e15f6ccf40e364A. Unique TensorFlower// Returns false if it could not be determined to be so.
139c4ec569953069f689fd42bae92e15f6ccf40e364A. Unique TensorFlowerbool IsCommutative(const NodeDef& node);
140c4ec569953069f689fd42bae92e15f6ccf40e364A. Unique TensorFlower
1412f2ab4bcba21059d5093eac7170662bc3b44c939Benoit Steiner// Returns true if the node is known to use persistent memory to store its
1422f2ab4bcba21059d5093eac7170662bc3b44c939Benoit Steiner// value.
1432f2ab4bcba21059d5093eac7170662bc3b44c939Benoit Steinerbool IsPersistent(const NodeDef& node);
1442f2ab4bcba21059d5093eac7170662bc3b44c939Benoit Steiner
145be4295e796437d18ffb7242942c963a8857e5003Benoit Steinerbool IsFreeOfSideEffect(const NodeDef& node);
146be4295e796437d18ffb7242942c963a8857e5003Benoit Steinerbool ModifiesFrameInfo(const NodeDef& node);
147be4295e796437d18ffb7242942c963a8857e5003Benoit Steiner
148c4ec569953069f689fd42bae92e15f6ccf40e364A. Unique TensorFlower// Returns true if the op is an element-wise involution, i.e. if it is its
149c4ec569953069f689fd42bae92e15f6ccf40e364A. Unique TensorFlower// own inverse such that f(f(x)) == x.
150c4ec569953069f689fd42bae92e15f6ccf40e364A. Unique TensorFlowerbool IsInvolution(const NodeDef& node);
151c4ec569953069f689fd42bae92e15f6ccf40e364A. Unique TensorFlower
152c4ec569953069f689fd42bae92e15f6ccf40e364A. Unique TensorFlower// Returns true if the op in node only rearranges the order of elements in its
153c4ec569953069f689fd42bae92e15f6ccf40e364A. Unique TensorFlower// first input tensor and possible changes its shape. More precisely, this
154c4ec569953069f689fd42bae92e15f6ccf40e364A. Unique TensorFlower// function returns true if the op commutes with all element-wise operations.
155c4ec569953069f689fd42bae92e15f6ccf40e364A. Unique TensorFlowerbool IsValuePreserving(const NodeDef& node);
156c4ec569953069f689fd42bae92e15f6ccf40e364A. Unique TensorFlower
157fcf61d57079c8874cd479d4b0dfdb48033e742d8A. Unique TensorFlower// Returns true if we can find an opdef corresponding to the op of the node.
158fcf61d57079c8874cd479d4b0dfdb48033e742d8A. Unique TensorFlowerbool HasOpDef(const NodeDef& node);
159fcf61d57079c8874cd479d4b0dfdb48033e742d8A. Unique TensorFlower
1609d57702513001bfded19e72c76a986cce56d5f00Benoit Steiner}  // end namespace grappler
1619d57702513001bfded19e72c76a986cce56d5f00Benoit Steiner}  // end namespace tensorflow
1629d57702513001bfded19e72c76a986cce56d5f00Benoit Steiner
1639d57702513001bfded19e72c76a986cce56d5f00Benoit Steiner#endif  // TENSORFLOW_GRAPPLER_OP_TYPES_H_
164