void MojoWhereMatcher::ValidateClause(const MojObject& clause) const { MojLogTrace(s_log); MojLogInfo(s_log, _T("Validating where clause \"%s\""), MojoObjectJson(clause).c_str()); if (!clause.contains(_T("prop"))) { throw std::runtime_error("Each where clause must contain a property " "to operate on"); } MojObject prop; clause.get(_T("prop"), prop); ValidateKey(prop); if (!clause.contains(_T("op"))) { throw std::runtime_error("Each where clause must contain a test " "operation to perform"); } MojObject op; clause.get(_T("op"), op); ValidateOp(op); if (!clause.contains(_T("val"))) { throw std::runtime_error("Each where clause must contain a value to " "test against"); } }
void MojoWhereMatcher::ValidateClause(const MojObject& clause) const { LOG_AM_TRACE("Entering function %s", __FUNCTION__); LOG_AM_DEBUG("Validating where clause \"%s\"", MojoObjectJson(clause).c_str()); if (!clause.contains(_T("prop"))) { throw std::runtime_error("Each where clause must contain a property " "to operate on"); } MojObject prop; clause.get(_T("prop"), prop); ValidateKey(prop); if (!clause.contains(_T("op"))) { throw std::runtime_error("Each where clause must contain a test " "operation to perform"); } MojObject op; clause.get(_T("op"), op); ValidateOp(op); if (!clause.contains(_T("val"))) { throw std::runtime_error("Each where clause must contain a value to " "test against"); } }
/*virtual*/ void ReduceElementsNode<ElemType>::Validate(bool isFinalValidationPass) /*override*/ { Base::Validate(isFinalValidationPass); InferMBLayoutFromInputsForStandardCase(isFinalValidationPass); // validate the opcode (in case we got instantiated empty and never updated) ValidateOp(); let shape = Input(0)->GetSampleLayout(); auto dims = shape.GetDims(); size_t reducedDim = 0; // (init to keep compiler happy) if (m_axis == 0) { reducedDim = shape.GetNumElements(); dims = { 1 }; // entire sample is reduced to a scalar } else if (m_axis - 1 >= 0 && m_axis - 1 < dims.size()) { reducedDim = dims[m_axis - 1]; dims[m_axis - 1] = 1; // one axis is reduced to a scalar } else if (isFinalValidationPass) InvalidArgument("The shape of %ls [%s] has no axis %d", NodeDescription().c_str(), string(shape).c_str(), m_axis); // for "Mean", we must divide by #elements if (isFinalValidationPass && m_operation == L"Mean") m_scale = (ElemType)(1.0 / reducedDim); else m_scale = (ElemType)1; SetDims(TensorShape(dims), Input(0)->HasMBLayout()); }
/*virtual*/ void ReduceElementsNode<ElemType>::Validate(bool isFinalValidationPass) /*override*/ { Base::Validate(isFinalValidationPass); InferMBLayoutFromInputsForStandardCase(isFinalValidationPass); // validate the opcode (in case we got instantiated empty and never updated) ValidateOp(); let shape = Input(0)->GetSampleLayout(); auto dims = shape.GetDims(); if (m_axis == 0) dims = { 1 }; // entire sample is reduced to a scalar else if (m_axis - 1 >= 0 && m_axis - 1 < dims.size()) dims[m_axis - 1] = 1; // one axis is reduced to a scalar else if (isFinalValidationPass) InvalidArgument("The shape of %ls [%s] has no axis %d", NodeDescription().c_str(), string(shape).c_str(), m_axis); SetDims(TensorShape(dims), Input(0)->HasMBLayout()); }
void MojoNewWhereMatcher::ValidateClause(const MojObject& clause) const { LOG_AM_TRACE("Entering function %s", __FUNCTION__); LOG_AM_DEBUG("Validating where clause \"%s\"", MojoObjectJson(clause).c_str()); bool found = false; if (clause.contains(_T("and"))) { found = true; MojObject andClauses; clause.get(_T("and"), andClauses); ValidateClauses(andClauses); } if (clause.contains(_T("or"))) { if (found) { throw std::runtime_error("Only one of \"and\", \"or\", or a valid " "clause including \"prop\", \"op\", and a \"val\"ue to " "compare against must be present in a clause"); } found = true; MojObject orClauses; clause.get(_T("or"), orClauses); ValidateClauses(orClauses); } if (!clause.contains(_T("prop"))) { if (!found) { throw std::runtime_error("Each where clause must contain \"or\", " "\"and\", or a \"prop\"erty to compare against"); } else { return; } } else if (found) { throw std::runtime_error("Only one of \"and\", \"or\", or a valid " "clause including \"prop\", \"op\", and a \"val\"ue to " "compare against must be present in a clause"); } MojObject prop; clause.get(_T("prop"), prop); ValidateKey(prop); if (!clause.contains(_T("val"))) { throw std::runtime_error("Each where clause must contain a value to " "test against"); } MojObject val; clause.get(_T("val"), val); if (!clause.contains(_T("op"))) { throw std::runtime_error("Each where clause must contain a test " "operation to perform"); } MojObject op; clause.get(_T("op"), op); ValidateOp(op, val); }
/*virtual*/ void ReduceElementsNode<ElemType>::Load(File& fstream, size_t modelVersion) /*override*/ { Base::Load(fstream, modelVersion); fstream >> m_axis >> m_operation; ValidateOp(); }