| 1092 | } |
| 1093 | } |
| 1094 | |
| 1095 | // 3. calculation |
| 1096 | VLOG(6) << "Calling greater_than_ad_func in tensor__gt__method"; |
| 1097 | { |
| 1098 | eager_gil_scoped_release guard; |
| 1099 | ret = greater_than_ad_func(self_tensor, other_tensor); |
| 1100 | } |
| 1101 | |
| 1102 | return ToPyObject(ret); |
| 1103 | EAGER_CATCH_AND_THROW_RETURN_NULL |
| 1104 | } |
| 1105 | |
| 1106 | static PyObject* tensor__ge__method(TensorObject* self, |
| 1107 | PyObject* args, |
| 1108 | PyObject* kwargs) { |
| 1109 | phi::RecordEvent pythonc_record_event( |
| 1110 | "__ge__ pybind_patch_func", phi::TracerEventType::UserDefined, 1); |
| 1111 | |
| 1112 | EAGER_TRY |
| 1113 | VLOG(4) << "Running Eager tensor__ge__method"; |
| 1114 | |
| 1115 | SetPythonStack(); |
| 1116 | |
| 1117 | // Set Device ID |
| 1118 | auto place = egr::Controller::Instance().GetExpectedPlace(); |
| 1119 | SetDevice(place); |
| 1120 | |
| 1121 | Tensor ret; |
| 1122 | Tensor self_tensor = self->tensor; |
| 1123 | PyObject* other_obj = PyTuple_GET_ITEM(args, 0); |
| 1124 | |
| 1125 | // 1. scalar exists cases |
| 1126 | // there is no scalar function for __ge__ now |
| 1127 | if (PyFloat_Check(other_obj) || PyCheckInteger(other_obj) || |
| 1128 | IsNumpyType(other_obj)) { |
| 1129 | if (PyFloat_Check(other_obj)) { |
| 1130 | if (_supported_int_dtype_.find(self_tensor.dtype()) != |
| 1131 | _supported_int_dtype_.end()) { |
| 1132 | eager_gil_scoped_release guard; |
| 1133 | self_tensor = cast_ad_func(self_tensor, DataType::FLOAT32); |
| 1134 | } |
| 1135 | } else if (PyCheckInteger(other_obj) && |
| 1136 | self_tensor.dtype() == DataType::BOOL) { |
| 1137 | eager_gil_scoped_release guard; |
| 1138 | self_tensor = cast_ad_func(self_tensor, DataType::INT64); |
| 1139 | } |
| 1140 | } else if (PyComplex_Check(other_obj)) { |
| 1141 | if (is_support_complex(self_tensor.dtype()) == false) { |
| 1142 | eager_gil_scoped_release guard; |
| 1143 | self_tensor = cast_ad_func( |
| 1144 | self_tensor, promoteTypes(self_tensor.dtype(), DataType::COMPLEX64)); |
| 1145 | } |
| 1146 | } |
| 1147 | |
| 1148 | // 2. create or get tensor for other_obj |
| 1149 | Tensor other_tensor; |
| 1150 | if (PyCheckTensor(other_obj)) { |
| 1151 | auto& self_tensor_ref_addr = self->tensor; |
nothing calls this directly
no test coverage detected