Skip to content

Commit 1726d3e

Browse files
committed
COMP: Avoid PySequence_Fast_GET_ITEM
No longer available in Python 3.14. Use PySequence_GetItem. This returns a reference. In the use cases (image dimensions), the performance impact is negligible.
1 parent 30bf750 commit 1726d3e

File tree

3 files changed

+8
-4
lines changed

3 files changed

+8
-4
lines changed

Modules/Bridge/NumPy/include/itkPyBuffer.hxx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,9 +113,10 @@ PyBuffer<TImage>::_GetImageViewFromArray(PyObject * arr, PyObject * shape, PyObj
113113

114114
for (unsigned int i = 0; i < dimension; ++i)
115115
{
116-
item = PySequence_Fast_GET_ITEM(shapeseq, i);
116+
item = PySequence_GetItem(shapeseq, i);
117117
size[i] = (SizeValueType)PyInt_AsLong(item);
118118
sizeFortran[dimension - 1 - i] = (SizeValueType)PyInt_AsLong(item);
119+
Py_DECREF(item);
119120
numberOfPixels *= size[i];
120121
}
121122

Modules/Bridge/NumPy/include/itkPyVectorContainer.hxx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,8 +94,9 @@ PyVectorContainer<TElementIdentifier, TElement>::_vector_container_from_array(Py
9494
shapeseq = PySequence_Fast(obj, "expected sequence");
9595
dimension = PySequence_Size(obj);
9696

97-
item = PySequence_Fast_GET_ITEM(shapeseq, 0); // Only one dimension
97+
item = PySequence_GetItem(shapeseq, 0); // Only one dimension
9898
numberOfElements = (size_t)PyInt_AsLong(item);
99+
Py_DECREF(item);
99100

100101
len = numberOfElements * elementSize;
101102
if (bufferLength != len)

Modules/Bridge/NumPy/include/itkPyVnl.hxx

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -93,8 +93,9 @@ PyVnl<TElement>::_GetVnlVectorFromArray(PyObject * arr, PyObject * shape) -> con
9393
shapeseq = PySequence_Fast(obj, "expected sequence");
9494
dimension = PySequence_Size(obj);
9595

96-
item = PySequence_Fast_GET_ITEM(shapeseq, 0); // Only one dimension
96+
item = PySequence_GetItem(shapeseq, 0); // Only one dimension
9797
numberOfElements = (size_t)PyInt_AsLong(item);
98+
Py_DECREF(item);
9899

99100
len = numberOfElements * elementSize;
100101
if (bufferLength != len)
@@ -182,8 +183,9 @@ PyVnl<TElement>::_GetVnlMatrixFromArray(PyObject * arr, PyObject * shape) -> con
182183

183184
for (unsigned int i = 0; i < 2; ++i)
184185
{
185-
item = PySequence_Fast_GET_ITEM(shapeseq, i);
186+
item = PySequence_GetItem(shapeseq, i);
186187
size[i] = static_cast<unsigned int>(PyInt_AsLong(item));
188+
Py_DECREF(item);
187189
numberOfElements *= size[i];
188190
}
189191

0 commit comments

Comments
 (0)