op_types.h revision c4ec569953069f689fd42bae92e15f6ccf40e364
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);
271ffb45e7112addad325084084b93897918ed9a54Yao Zhangbool IsAvgPoolGrad(const NodeDef& node);
281ffb45e7112addad325084084b93897918ed9a54Yao Zhangbool IsBiasAddGrad(const NodeDef& node);
291ffb45e7112addad325084084b93897918ed9a54Yao Zhangbool IsConcatOffset(const NodeDef& node);
301a0f2fa7b0f4be4c0196c22b5c6ae717a8361ccaBenoit Steinerbool IsConstant(const NodeDef& node);
311ffb45e7112addad325084084b93897918ed9a54Yao Zhangbool IsConv2D(const NodeDef& node);
321ffb45e7112addad325084084b93897918ed9a54Yao Zhangbool IsConv2DBackpropFilter(const NodeDef& node);
331ffb45e7112addad325084084b93897918ed9a54Yao Zhangbool IsConv2DBackpropInput(const NodeDef& node);
347bc6271055714f3d4d0b957a2f4c6a910ea20388Yuefeng Zhoubool IsDequeueOp(const NodeDef& node);
35c247826219dd2541c6aba4578a03a171375d9290Benoit Steinerbool IsEnter(const NodeDef& node);
36c4a58e3fdd9880d424f639502e93a8298a965467Yao Zhangbool IsExit(const NodeDef& node);
371ffb45e7112addad325084084b93897918ed9a54Yao Zhangbool IsFloorMod(const NodeDef& node);
381ffb45e7112addad325084084b93897918ed9a54Yao Zhangbool IsFusedBatchNormGradV1(const NodeDef& node);
3993c57c6e4fe8f3ec1268bf8a947321cc4ba8bfc8Benoit Steinerbool IsIdentity(const NodeDef& node);
401a0f2fa7b0f4be4c0196c22b5c6ae717a8361ccaBenoit Steinerbool IsMerge(const NodeDef& node);
411ffb45e7112addad325084084b93897918ed9a54Yao Zhangbool IsMul(const NodeDef& node);
421fa8b4247a15079cb60da74a3c86ed5eef7f1b93Benoit Steinerbool IsNextIteration(const NodeDef& node);
431ffb45e7112addad325084084b93897918ed9a54Yao Zhangbool IsPad(const NodeDef& node);
448f89b654f4d49a1b5d4462303ef27f7f7a2958b3A. Unique TensorFlowerbool IsNoOp(const NodeDef& node);
459d57702513001bfded19e72c76a986cce56d5f00Benoit Steinerbool IsPlaceholder(const NodeDef& node);
461ffb45e7112addad325084084b93897918ed9a54Yao Zhangbool IsRealDiv(const NodeDef& node);
471ffb45e7112addad325084084b93897918ed9a54Yao Zhangbool IsReluGrad(const NodeDef& node);
488f89b654f4d49a1b5d4462303ef27f7f7a2958b3A. Unique TensorFlowerbool IsRecv(const NodeDef& node);
499ae941c4a8c2d6e5a87c7a200ebde5bd0b07e5b2Benoit Steinerbool IsReduction(const NodeDef& node);
5059d37536717f08dd6e462ed785ee0e912ff344f5Benoit Steinerbool IsReshape(const NodeDef& node);
5138445f025c4d05f374938e6c6c201dc3c0b20c77Yuefeng Zhoubool IsRestore(const NodeDef& node);
528f89b654f4d49a1b5d4462303ef27f7f7a2958b3A. Unique TensorFlowerbool IsSend(const NodeDef& node);
531ffb45e7112addad325084084b93897918ed9a54Yao Zhangbool IsSlice(const NodeDef& node);
541ffb45e7112addad325084084b93897918ed9a54Yao Zhangbool IsSquaredDifference(const NodeDef& node);
551ffb45e7112addad325084084b93897918ed9a54Yao Zhangbool IsSqueeze(const NodeDef& node);
56bb4a6168eaa0c6752d19e352f9c9dd53c9c6a6aeBenoit Steinerbool IsStopGradient(const NodeDef& node);
571ffb45e7112addad325084084b93897918ed9a54Yao Zhangbool IsSub(const NodeDef& node);
581ffb45e7112addad325084084b93897918ed9a54Yao Zhangbool IsSum(const NodeDef& node);
5993c57c6e4fe8f3ec1268bf8a947321cc4ba8bfc8Benoit Steinerbool IsSwitch(const NodeDef& node);
6065044bc25981e4e060ad5c34d9a520a0561775c3Yao Zhangbool IsTranspose(const NodeDef& node);
614254fa13de1697226e15df26cc101d00d1cb1a03Benoit Steinerbool IsVariable(const NodeDef& node);
629d57702513001bfded19e72c76a986cce56d5f00Benoit Steiner
63c4ec569953069f689fd42bae92e15f6ccf40e364A. Unique TensorFlower// Return true if the op is an aggregation (e.g. Add, AddN).
64c4ec569953069f689fd42bae92e15f6ccf40e364A. Unique TensorFlower// Returns false if it could not be determined to be so.
65c4ec569953069f689fd42bae92e15f6ccf40e364A. Unique TensorFlowerbool IsAggregate(const NodeDef& node);
66c4ec569953069f689fd42bae92e15f6ccf40e364A. Unique TensorFlower
67c4ec569953069f689fd42bae92e15f6ccf40e364A. Unique TensorFlower// Return true if the op is commutative (e.g. Mul, Add).
68c4ec569953069f689fd42bae92e15f6ccf40e364A. Unique TensorFlower// Returns false if it could not be determined to be so.
69c4ec569953069f689fd42bae92e15f6ccf40e364A. Unique TensorFlowerbool IsCommutative(const NodeDef& node);
70c4ec569953069f689fd42bae92e15f6ccf40e364A. Unique TensorFlower
71be4295e796437d18ffb7242942c963a8857e5003Benoit Steinerbool IsFreeOfSideEffect(const NodeDef& node);
72be4295e796437d18ffb7242942c963a8857e5003Benoit Steinerbool ModifiesFrameInfo(const NodeDef& node);
73be4295e796437d18ffb7242942c963a8857e5003Benoit Steiner
74c4ec569953069f689fd42bae92e15f6ccf40e364A. Unique TensorFlower// Returns true if the op is an element-wise involution, i.e. if it is its
75c4ec569953069f689fd42bae92e15f6ccf40e364A. Unique TensorFlower// own inverse such that f(f(x)) == x.
76c4ec569953069f689fd42bae92e15f6ccf40e364A. Unique TensorFlowerbool IsInvolution(const NodeDef& node);
77c4ec569953069f689fd42bae92e15f6ccf40e364A. Unique TensorFlower
78c4ec569953069f689fd42bae92e15f6ccf40e364A. Unique TensorFlower// Returns true if the op in node only rearranges the order of elements in its
79c4ec569953069f689fd42bae92e15f6ccf40e364A. Unique TensorFlower// first input tensor and possible changes its shape. More precisely, this
80c4ec569953069f689fd42bae92e15f6ccf40e364A. Unique TensorFlower// function returns true if the op commutes with all element-wise operations.
81c4ec569953069f689fd42bae92e15f6ccf40e364A. Unique TensorFlowerbool IsValuePreserving(const NodeDef& node);
82c4ec569953069f689fd42bae92e15f6ccf40e364A. Unique TensorFlower
839d57702513001bfded19e72c76a986cce56d5f00Benoit Steiner}  // end namespace grappler
849d57702513001bfded19e72c76a986cce56d5f00Benoit Steiner}  // end namespace tensorflow
859d57702513001bfded19e72c76a986cce56d5f00Benoit Steiner
869d57702513001bfded19e72c76a986cce56d5f00Benoit Steiner#endif  // TENSORFLOW_GRAPPLER_OP_TYPES_H_
87