MCPcopy Create free account
hub / github.com/Oneflow-Inc/oneflow / PySliceUnpack

Function PySliceUnpack

oneflow/api/python/functional/indexing.cpp:35–57  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

33namespace detail {
34
35void PySliceUnpack(PyObject* object, Py_ssize_t* start, Py_ssize_t* stop, Py_ssize_t* step) {
36 PySliceObject* obj = (PySliceObject*)object;
37 if (obj->step == Py_None) {
38 *step = 1;
39 } else {
40 CHECK_OR_THROW(_PyEval_SliceIndex(obj->step, step))
41 << "Invalid slice " << PyObjectToReprStr(object);
42 CHECK_NE_OR_THROW(*step, 0) << "slice step cannot be zero.";
43 if (*step < -PY_SSIZE_T_MAX) *step = -PY_SSIZE_T_MAX;
44 }
45 if (obj->start == Py_None) {
46 *start = *step < 0 ? PY_SSIZE_T_MAX : 0;
47 } else {
48 CHECK_OR_THROW(_PyEval_SliceIndex(obj->start, start))
49 << "Invalid slice " << PyObjectToReprStr(object);
50 }
51 if (obj->stop == Py_None) {
52 *stop = *step < 0 ? PY_SSIZE_T_MIN : PY_SSIZE_T_MAX;
53 } else {
54 CHECK_OR_THROW(_PyEval_SliceIndex(obj->stop, stop))
55 << "Invalid slice " << PyObjectToReprStr(object);
56 }
57}
58
59DataType InferScalarType(PyObject* object) {
60 if (PyBool_Check(object)) {

Callers 1

UnpackIndexItemFunction · 0.85

Calls 1

PyObjectToReprStrFunction · 0.85

Tested by

no test coverage detected