| 843 | } |
| 844 | |
| 845 | TF_CAPI_EXPORT extern int TFE_OpGetInputLength(TFE_Op* op, |
| 846 | const char* input_name, |
| 847 | TF_Status* status) { |
| 848 | const tensorflow::OpDef* op_def = GetOpDef(op, status); |
| 849 | if (!status->status.ok()) { |
| 850 | return -1; |
| 851 | } |
| 852 | tensorflow::AttrValueMap attrs; |
| 853 | op->operation.Attrs().FillAttrValueMap(&attrs); |
| 854 | tensorflow::NameRangeMap name_ranges; |
| 855 | status->status = tensorflow::NameRangesForNode( |
| 856 | tensorflow::AttrSlice(&attrs), *op_def, &name_ranges, nullptr); |
| 857 | if (!status->status.ok()) { |
| 858 | return -1; |
| 859 | } |
| 860 | auto iter = name_ranges.find(input_name); |
| 861 | if (iter == name_ranges.end()) { |
| 862 | status->status = tensorflow::errors::InvalidArgument("Input '", input_name, |
| 863 | "' not found"); |
| 864 | return -1; |
| 865 | } |
| 866 | return iter->second.second - iter->second.first; |
| 867 | } |
| 868 | |
| 869 | TF_CAPI_EXPORT extern int TFE_OpGetOutputLength(TFE_Op* op, |
| 870 | const char* output_name, |