Result NeuralNetworkSpecValidator::validateLayer()

in mlmodel/src/Validation/NeuralNetwork/NeuralNetworkValidator.cpp [38:337]


Result NeuralNetworkSpecValidator::validateLayer(const Specification::NeuralNetworkLayer& layer) {
    
    switch(layer.layer_case()) {
        case Specification::NeuralNetworkLayer::LayerCase::kConvolution:
            return validateConvolutionLayer(layer);
        case Specification::NeuralNetworkLayer::LayerCase::kConvolution3D:
            return validateConvolution3DLayer(layer);
        case Specification::NeuralNetworkLayer::LayerCase::kInnerProduct:
            return validateInnerProductLayer(layer);
        case Specification::NeuralNetworkLayer::LayerCase::kBatchnorm:
            return validateBatchnormLayer(layer);
        case Specification::NeuralNetworkLayer::LayerCase::kActivation:
            return validateActivation(layer);
        case Specification::NeuralNetworkLayer::LayerCase::kPooling:
            return validatePoolingLayer(layer);
        case Specification::NeuralNetworkLayer::LayerCase::kPooling3D:
            return validatePooling3dLayer(layer);
        case Specification::NeuralNetworkLayer::LayerCase::kGlobalPooling3D:
            return validateGlobalPooling3dLayer(layer);
        case Specification::NeuralNetworkLayer::LayerCase::kPadding:
            return validatePaddingLayer(layer);
        case Specification::NeuralNetworkLayer::LayerCase::kConcat:
            return validateConcatLayer(layer);
        case Specification::NeuralNetworkLayer::LayerCase::kLrn:
            return validateLRNLayer(layer);
        case Specification::NeuralNetworkLayer::LayerCase::kSoftmax:
            return validateSoftmaxLayer(layer);
        case Specification::NeuralNetworkLayer::LayerCase::kSplit:
            return validateSplitLayer(layer);
        case Specification::NeuralNetworkLayer::LayerCase::kAdd:
            return validateAddLayer(layer);
        case Specification::NeuralNetworkLayer::LayerCase::kMultiply:
            return validateMultiplyLayer(layer);
        case Specification::NeuralNetworkLayer::LayerCase::kUnary:
            return validateUnaryFunctionLayer(layer);
        case Specification::NeuralNetworkLayer::LayerCase::kUpsample:
            return validateUpsampleLayer(layer);
        case Specification::NeuralNetworkLayer::LayerCase::kBias:
            return validateBiasLayer(layer);
        case Specification::NeuralNetworkLayer::LayerCase::kL2Normalize:
            return validateL2NormLayer(layer);
        case Specification::NeuralNetworkLayer::LayerCase::kReshape:
            return validateReshapeLayer(layer);
        case Specification::NeuralNetworkLayer::LayerCase::kFlatten:
            return validateFlattenLayer(layer);
        case Specification::NeuralNetworkLayer::LayerCase::kPermute:
            return validatePermuteLayer(layer);
        case Specification::NeuralNetworkLayer::LayerCase::kReduce:
            return validateReduceLayer(layer);
        case Specification::NeuralNetworkLayer::LayerCase::kLoadConstant:
            return validateLoadConstantLayer(layer);
        case Specification::NeuralNetworkLayer::LayerCase::kScale:
            return validateScaleLayer(layer);
        case Specification::NeuralNetworkLayer::LayerCase::kSimpleRecurrent:
            return validateSimpleRecurrentLayer(layer);
        case Specification::NeuralNetworkLayer::LayerCase::kGru:
            return validateGRULayer(layer);
        case Specification::NeuralNetworkLayer::LayerCase::kUniDirectionalLSTM:
            return validateUniDirectionalLSTMLayer(layer);
        case Specification::NeuralNetworkLayer::LayerCase::kBiDirectionalLSTM:
            return validateBiDirectionalLSTMLayer(layer);
        case Specification::NeuralNetworkLayer::LayerCase::kCrop:
            return validateCropLayer(layer);
        case Specification::NeuralNetworkLayer::LayerCase::kAverage:
            return validateAverageLayer(layer);
        case Specification::NeuralNetworkLayer::LayerCase::kMax:
            return validateMaxLayer(layer);
        case Specification::NeuralNetworkLayer::LayerCase::kMin:
            return validateMinLayer(layer);
        case Specification::NeuralNetworkLayer::LayerCase::kDot:
            return validateDotLayer(layer);
        case Specification::NeuralNetworkLayer::LayerCase::kMvn:
            return validateMvnLayer(layer);
        case Specification::NeuralNetworkLayer::LayerCase::kEmbedding:
            return validateEmbeddingLayer(layer);
        case Specification::NeuralNetworkLayer::LayerCase::kSequenceRepeat:
            return validateSequenceRepeatLayer(layer);
        case Specification::NeuralNetworkLayer::LayerCase::kReorganizeData:
            return validateReorganizeDataLayer(layer);
        case Specification::NeuralNetworkLayer::LayerCase::kSlice:
            return validateSliceLayer(layer);
        case Specification::NeuralNetworkLayer::LayerCase::kCustom:
            return validateCustomLayer(layer);
        case Specification::NeuralNetworkLayer::LayerCase::kResizeBilinear:
            return validateResizeBilinearLayer(layer);
        case Specification::NeuralNetworkLayer::LayerCase::kCropResize:
            return validateCropResizeLayer(layer);
        case Specification::NeuralNetworkLayer::LayerCase::kTranspose:
            return validateTransposeLayer(layer);
        case Specification::NeuralNetworkLayer::LayerCase::kBranch:
            return validateBranchLayer(layer);
        case Specification::NeuralNetworkLayer::LayerCase::kCopy:
            return validateCopyLayer(layer);
        case Specification::NeuralNetworkLayer::LayerCase::kBatchedMatmul:
            return validateBatchedMatmulLayer(layer);
        case Specification::NeuralNetworkLayer::LayerCase::kConcatND:
            return validateConcatNDLayer(layer);
        case Specification::NeuralNetworkLayer::LayerCase::kSoftmaxND:
            return validateSoftmaxNDLayer(layer);
        case Specification::NeuralNetworkLayer::LayerCase::kReverse:
            return validateReverseLayer(layer);
        case Specification::NeuralNetworkLayer::LayerCase::kFillLike:
            return validateFillLikeLayer(layer);
        case Specification::NeuralNetworkLayer::LayerCase::kFillStatic:
            return validateFillStaticLayer(layer);
        case Specification::NeuralNetworkLayer::LayerCase::kFillDynamic:
            return validateFillDynamicLayer(layer);
        case Specification::NeuralNetworkLayer::LayerCase::kWhereBroadcastable:
            return validateWhereLayer(layer);
        case Specification::NeuralNetworkLayer::LayerCase::kSin:
        case Specification::NeuralNetworkLayer::LayerCase::kCos:
        case Specification::NeuralNetworkLayer::LayerCase::kTan:
        case Specification::NeuralNetworkLayer::LayerCase::kAsin:
        case Specification::NeuralNetworkLayer::LayerCase::kAcos:
        case Specification::NeuralNetworkLayer::LayerCase::kAtan:
        case Specification::NeuralNetworkLayer::LayerCase::kSinh:
        case Specification::NeuralNetworkLayer::LayerCase::kCosh:
        case Specification::NeuralNetworkLayer::LayerCase::kTanh:
        case Specification::NeuralNetworkLayer::LayerCase::kAsinh:
        case Specification::NeuralNetworkLayer::LayerCase::kAcosh:
        case Specification::NeuralNetworkLayer::LayerCase::kAtanh:
            return validateTrigonometryLayer(layer);
        case Specification::NeuralNetworkLayer::LayerCase::kExp2:
            return validateExp2Layer(layer);
        case Specification::NeuralNetworkLayer::LayerCase::kMatrixBandPart:
            return validateMatrixBandPartLayer(layer);
        case Specification::NeuralNetworkLayer::LayerCase::kUpperTriangular:
            return validateUpperTriangularLayer(layer);
        case Specification::NeuralNetworkLayer::LayerCase::kLowerTriangular:
            return validateLowerTriangularLayer(layer);
        case Specification::NeuralNetworkLayer::LayerCase::kPowBroadcastable:
            return validatePowBroadcastableLayer(layer);
        case CoreML::Specification::NeuralNetworkLayer::kGreaterThan:
        case CoreML::Specification::NeuralNetworkLayer::kGreaterEqual:
        case CoreML::Specification::NeuralNetworkLayer::kLessEqual:
        case CoreML::Specification::NeuralNetworkLayer::kLessThan:
        case CoreML::Specification::NeuralNetworkLayer::kEqual:
        case CoreML::Specification::NeuralNetworkLayer::kNotEqual:
        case CoreML::Specification::NeuralNetworkLayer::kLogicalAnd:
        case CoreML::Specification::NeuralNetworkLayer::kLogicalOr:
        case CoreML::Specification::NeuralNetworkLayer::kLogicalXor:
        case CoreML::Specification::NeuralNetworkLayer::kLogicalNot:
            return validateBooleanElementwiseLayer(layer);
        case CoreML::Specification::NeuralNetworkLayer::kLoop:
            return validateLoopLayer(layer);
        case CoreML::Specification::NeuralNetworkLayer::kLoopContinue:
        case CoreML::Specification::NeuralNetworkLayer::kLoopBreak:
            return validateLoopContinueBreakLayer(layer);
        case CoreML::Specification::NeuralNetworkLayer::kErf:
        case CoreML::Specification::NeuralNetworkLayer::kGelu:
        case CoreML::Specification::NeuralNetworkLayer::kClampedReLU:
            return validateActivationLayers(layer);
        case CoreML::Specification::NeuralNetworkLayer::kRankPreservingReshape:
            return validateRankPreservingReshapeLayer(layer);
        case CoreML::Specification::NeuralNetworkLayer::kExpandDims:
            return validateExpandDimsLayer(layer);
        case CoreML::Specification::NeuralNetworkLayer::kFlattenTo2D:
            return validateFlattenTo2DLayer(layer);
        case Specification::NeuralNetworkLayer::LayerCase::kReshapeLike:
            return validateReshapeLikeLayer(layer);
        case Specification::NeuralNetworkLayer::LayerCase::kReshapeStatic:
            return validateReshapeStaticLayer(layer);
        case Specification::NeuralNetworkLayer::LayerCase::kReshapeDynamic:
            return validateReshapeDynamicLayer(layer);
        case CoreML::Specification::NeuralNetworkLayer::kSqueeze:
            return validateSqueezeLayer(layer);
        case CoreML::Specification::NeuralNetworkLayer::kBroadcastToLike:
            return validateBroadcastToLikeLayer(layer);
        case CoreML::Specification::NeuralNetworkLayer::kBroadcastToStatic:
            return validateBroadcastToStaticLayer(layer);
        case CoreML::Specification::NeuralNetworkLayer::kBroadcastToDynamic:
            return validateBroadcastToDynamicLayer(layer);
        case CoreML::Specification::NeuralNetworkLayer::kAddBroadcastable:
            return validateAddBroadcastableLayer(layer);
        case CoreML::Specification::NeuralNetworkLayer::kSubtractBroadcastable:
            return validateSubtractBroadcastableLayer(layer);
        case CoreML::Specification::NeuralNetworkLayer::kMultiplyBroadcastable:
            return validateMultiplyBroadcastableLayer(layer);
        case CoreML::Specification::NeuralNetworkLayer::kDivideBroadcastable:
            return validateDivideBroadcastableLayer(layer);
        case CoreML::Specification::NeuralNetworkLayer::kMaxBroadcastable:
            return validateMaxBroadcastableLayer(layer);
        case CoreML::Specification::NeuralNetworkLayer::kMinBroadcastable:
            return validateMinBroadcastableLayer(layer);
        case CoreML::Specification::NeuralNetworkLayer::kFloorDivBroadcastable:
            return validateFloorDivBroadcastableLayer(layer);
        case CoreML::Specification::NeuralNetworkLayer::kModBroadcastable:
            return validateModBroadcastableLayer(layer);
        case CoreML::Specification::NeuralNetworkLayer::kGather:
            return validateGatherLayer(layer);
        case CoreML::Specification::NeuralNetworkLayer::kScatter:
            return validateScatterLayer(layer);
        case CoreML::Specification::NeuralNetworkLayer::kGatherND:
            return validateGatherNDLayer(layer);
        case CoreML::Specification::NeuralNetworkLayer::kScatterND:
            return validateScatterNDLayer(layer);
        case CoreML::Specification::NeuralNetworkLayer::kGatherAlongAxis:
            return validateGatherAlongAxisLayer(layer);
        case CoreML::Specification::NeuralNetworkLayer::kScatterAlongAxis:
            return validateScatterAlongAxisLayer(layer);
        case CoreML::Specification::NeuralNetworkLayer::kWhereNonZero:
            return validateWhereNonZeroLayer(layer);
        case CoreML::Specification::NeuralNetworkLayer::kStack:
            return validateStackLayer(layer);
        case CoreML::Specification::NeuralNetworkLayer::kSplitND:
            return validateSplitNDLayer(layer);
        case CoreML::Specification::NeuralNetworkLayer::kLoadConstantND:
            return validateLoadConstantNDLayer(layer);
        case CoreML::Specification::NeuralNetworkLayer::kCeil:
            return validateCeilLayer(layer);
        case CoreML::Specification::NeuralNetworkLayer::kFloor:
            return validateFloorLayer(layer);
        case CoreML::Specification::NeuralNetworkLayer::kRound:
            return validateRoundLayer(layer);
        case CoreML::Specification::NeuralNetworkLayer::kSign:
            return validateSignLayer(layer);
        case CoreML::Specification::NeuralNetworkLayer::kClip:
            return validateClipLayer(layer);
        case CoreML::Specification::NeuralNetworkLayer::kSliceStatic:
            return validateSliceStaticLayer(layer);
        case CoreML::Specification::NeuralNetworkLayer::kSliceDynamic:
            return validateSliceDynamicLayer(layer);
        case CoreML::Specification::NeuralNetworkLayer::kGetShape:
            return validateGetShapeLayer(layer);
        case CoreML::Specification::NeuralNetworkLayer::kTile:
            return validateTileLayer(layer);
        case CoreML::Specification::NeuralNetworkLayer::kRangeStatic:
            return validateRangeStaticLayer(layer);
        case CoreML::Specification::NeuralNetworkLayer::kRangeDynamic:
            return validateRangeDynamicLayer(layer);
        case Specification::NeuralNetworkLayer::LayerCase::kEmbeddingND:
            return validateEmbeddingNDLayer(layer);
        case Specification::NeuralNetworkLayer::LayerCase::kSlidingWindows:
            return validateSlidingWindowsLayer(layer);
        case Specification::NeuralNetworkLayer::LayerCase::kRandomNormalLike:
            return validateRandomNormalLikeLayer(layer);
        case Specification::NeuralNetworkLayer::LayerCase::kRandomNormalStatic:
            return validateRandomNormalStaticLayer(layer);
        case Specification::NeuralNetworkLayer::LayerCase::kRandomNormalDynamic:
            return validateRandomNormalDynamicLayer(layer);
        case Specification::NeuralNetworkLayer::LayerCase::kRandomUniformLike:
            return validateRandomUniformLikeLayer(layer);
        case Specification::NeuralNetworkLayer::LayerCase::kRandomUniformStatic:
            return validateRandomUniformStaticLayer(layer);
        case Specification::NeuralNetworkLayer::LayerCase::kRandomUniformDynamic:
            return validateRandomUniformDynamicLayer(layer);
        case Specification::NeuralNetworkLayer::LayerCase::kRandomBernoulliLike:
            return validateRandomBernoulliLikeLayer(layer);
        case Specification::NeuralNetworkLayer::LayerCase::kRandomBernoulliStatic:
            return validateRandomBernoulliStaticLayer(layer);
        case Specification::NeuralNetworkLayer::LayerCase::kRandomBernoulliDynamic:
            return validateRandomBernoulliDynamicLayer(layer);
        case Specification::NeuralNetworkLayer::LayerCase::kTopK:
            return validateTopKLayer(layer);
        case Specification::NeuralNetworkLayer::LayerCase::kArgMax:
            return validateArgMaxLayer(layer);
        case Specification::NeuralNetworkLayer::LayerCase::kArgMin:
            return validateArgMinLayer(layer);
        case Specification::NeuralNetworkLayer::LayerCase::kCategoricalDistribution:
            return validateCategoricalDistributionLayer(layer);
        case Specification::NeuralNetworkLayer::LayerCase::kReduceL1:
            return validateReductionTypeLayer(layer);
        case Specification::NeuralNetworkLayer::LayerCase::kReduceL2:
            return validateReductionTypeLayer(layer);
        case Specification::NeuralNetworkLayer::LayerCase::kReduceMax:
            return validateReductionTypeLayer(layer);
        case Specification::NeuralNetworkLayer::LayerCase::kReduceMin:
            return validateReductionTypeLayer(layer);
        case Specification::NeuralNetworkLayer::LayerCase::kReduceSum:
            return validateReductionTypeLayer(layer);
        case Specification::NeuralNetworkLayer::LayerCase::kReduceProd:
            return validateReductionTypeLayer(layer);
        case Specification::NeuralNetworkLayer::LayerCase::kReduceMean:
            return validateReductionTypeLayer(layer);
        case Specification::NeuralNetworkLayer::LayerCase::kReduceLogSum:
            return validateReductionTypeLayer(layer);
        case Specification::NeuralNetworkLayer::LayerCase::kReduceSumSquare:
            return validateReductionTypeLayer(layer);
        case Specification::NeuralNetworkLayer::LayerCase::kReduceLogSumExp:
            return validateReductionTypeLayer(layer);
        case Specification::NeuralNetworkLayer::LayerCase::kReverseSeq:
            return validateReverseSeqLayer(layer);
        case Specification::NeuralNetworkLayer::LayerCase::kLayerNormalization:
            return validateLayerNormalizationLayer(layer);
        case Specification::NeuralNetworkLayer::LayerCase::kConstantPad:
            return validateConstantPadLayer(layer);
        case Specification::NeuralNetworkLayer::LayerCase::kNonMaximumSuppression:
            return validateNMSLayer(layer);
        case Specification::NeuralNetworkLayer::LayerCase::kOneHot:
            return validateOneHotLayer(layer);
        case Specification::NeuralNetworkLayer::LayerCase::kCumSum:
            return validateCumSumLayer(layer);
        case Specification::NeuralNetworkLayer::LayerCase::kArgSort:
            return validateArgsortLayer(layer);
        case Specification::NeuralNetworkLayer::LayerCase::kSliceBySize:
            return validateSliceBySizeLayer(layer);
        default:
            return validateFailUnknownType(layer);
    }
}