| 733 | } |
| 734 | |
| 735 | void TFE_Py_ExecuteCancelable(TFE_Context* ctx, const char* device_name, |
| 736 | const char* op_name, |
| 737 | TFE_InputTensorHandles* inputs, PyObject* attrs, |
| 738 | TFE_CancellationManager* cancellation_manager, |
| 739 | TFE_OutputTensorHandles* outputs, |
| 740 | TF_Status* out_status) { |
| 741 | TFE_Op* op = TFE_NewOp(ctx, op_name, out_status); |
| 742 | if (TF_GetCode(out_status) != TF_OK) return; |
| 743 | TFE_OpSetDevice(op, device_name, out_status); |
| 744 | if (TF_GetCode(out_status) == TF_OK) { |
| 745 | for (size_t i = 0; i < inputs->size() && TF_GetCode(out_status) == TF_OK; |
| 746 | ++i) { |
| 747 | TFE_OpAddInput(op, inputs->at(i), out_status); |
| 748 | } |
| 749 | } |
| 750 | if (cancellation_manager && TF_GetCode(out_status) == TF_OK) { |
| 751 | TFE_OpSetCancellationManager(op, cancellation_manager, out_status); |
| 752 | } |
| 753 | if (TF_GetCode(out_status) == TF_OK) { |
| 754 | SetOpAttrs(ctx, op, attrs, 0, out_status); |
| 755 | } |
| 756 | Py_BEGIN_ALLOW_THREADS; |
| 757 | if (TF_GetCode(out_status) == TF_OK) { |
| 758 | int num_outputs = outputs->size(); |
| 759 | TFE_Execute(op, outputs->data(), &num_outputs, out_status); |
| 760 | outputs->resize(num_outputs); |
| 761 | } |
| 762 | if (TF_GetCode(out_status) != TF_OK) { |
| 763 | TF_SetStatus(out_status, TF_GetCode(out_status), |
| 764 | tensorflow::strings::StrCat(TF_Message(out_status), |
| 765 | " [Op:", op_name, "]") |
| 766 | .c_str()); |
| 767 | } |
| 768 | TFE_DeleteOp(op); |
| 769 | Py_END_ALLOW_THREADS; |
| 770 | } |
| 771 | |
| 772 | PyObject* TFE_Py_RegisterExceptionClass(PyObject* e) { |
| 773 | tensorflow::mutex_lock l(exception_class_mutex); |
no test coverage detected