MCPcopy Create free account
hub / github.com/DeepRec-AI/DeepRec / MergeApiDefs

Function MergeApiDefs

tensorflow/core/framework/op_gen_lib.cc:364–469  ·  view source on GitHub ↗

Updates base_api_def based on overrides in new_api_def.

Source from the content-addressed store, hash-verified

362
363// Updates base_api_def based on overrides in new_api_def.
364Status MergeApiDefs(ApiDef* base_api_def, const ApiDef& new_api_def) {
365 // Merge visibility
366 if (new_api_def.visibility() != ApiDef::DEFAULT_VISIBILITY) {
367 base_api_def->set_visibility(new_api_def.visibility());
368 }
369 // Merge endpoints
370 if (new_api_def.endpoint_size() > 0) {
371 base_api_def->clear_endpoint();
372 std::copy(
373 new_api_def.endpoint().begin(), new_api_def.endpoint().end(),
374 protobuf::RepeatedFieldBackInserter(base_api_def->mutable_endpoint()));
375 }
376 // Merge args
377 for (const auto& new_arg : new_api_def.in_arg()) {
378 bool found_base_arg = false;
379 for (int i = 0; i < base_api_def->in_arg_size(); ++i) {
380 auto* base_arg = base_api_def->mutable_in_arg(i);
381 if (base_arg->name() == new_arg.name()) {
382 MergeArg(base_arg, new_arg);
383 found_base_arg = true;
384 break;
385 }
386 }
387 if (!found_base_arg) {
388 return errors::FailedPrecondition("Argument ", new_arg.name(),
389 " not defined in base api for ",
390 base_api_def->graph_op_name());
391 }
392 }
393 for (const auto& new_arg : new_api_def.out_arg()) {
394 bool found_base_arg = false;
395 for (int i = 0; i < base_api_def->out_arg_size(); ++i) {
396 auto* base_arg = base_api_def->mutable_out_arg(i);
397 if (base_arg->name() == new_arg.name()) {
398 MergeArg(base_arg, new_arg);
399 found_base_arg = true;
400 break;
401 }
402 }
403 if (!found_base_arg) {
404 return errors::FailedPrecondition("Argument ", new_arg.name(),
405 " not defined in base api for ",
406 base_api_def->graph_op_name());
407 }
408 }
409 // Merge arg order
410 if (new_api_def.arg_order_size() > 0) {
411 // Validate that new arg_order is correct.
412 if (new_api_def.arg_order_size() != base_api_def->arg_order_size()) {
413 return errors::FailedPrecondition(
414 "Invalid number of arguments ", new_api_def.arg_order_size(), " for ",
415 base_api_def->graph_op_name(),
416 ". Expected: ", base_api_def->arg_order_size());
417 }
418 if (!std::is_permutation(new_api_def.arg_order().begin(),
419 new_api_def.arg_order().end(),
420 base_api_def->arg_order().begin())) {
421 return errors::FailedPrecondition(

Callers 1

LoadApiDefMethod · 0.85

Calls 12

MergeArgFunction · 0.85
FailedPreconditionFunction · 0.85
MergeAttrFunction · 0.85
attrMethod · 0.80
descriptionMethod · 0.80
nameMethod · 0.65
copyFunction · 0.50
StrCatFunction · 0.50
beginMethod · 0.45
endMethod · 0.45
emptyMethod · 0.45
summaryMethod · 0.45

Tested by

no test coverage detected