Skip to content

Commit 83158ff

Browse files
committed
fixes for numpy 1.22+
1 parent b00c8ef commit 83158ff

File tree

3 files changed

+10
-8
lines changed

3 files changed

+10
-8
lines changed

pyproject.toml

+2-2
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,10 @@ classifiers = [
2626
]
2727

2828
dependencies = [
29-
"numpy"
29+
"numpy >= 1.22"
3030
]
3131

32-
version="1.5.0"
32+
version="1.5.1"
3333

3434
[project.optional-dependencies]
3535
test = [ ]

src/pdal/io/NumpyReader.cpp

+5-4
Original file line numberDiff line numberDiff line change
@@ -377,8 +377,9 @@ void NumpyReader::createFields(PointLayoutPtr layout)
377377
int offset;
378378

379379
m_numFields = 0;
380-
if (m_dtype->fields != Py_None)
381-
m_numFields = static_cast<int>(PyDict_Size(m_dtype->fields));
380+
PyObject* fields = PyDataType_FIELDS(m_dtype);
381+
if (fields != Py_None)
382+
m_numFields = static_cast<int>(PyDict_Size(fields));
382383

383384
// Array isn't structured - just a bunch of data.
384385
if (m_numFields <= 0)
@@ -389,7 +390,7 @@ void NumpyReader::createFields(PointLayoutPtr layout)
389390
}
390391
else
391392
{
392-
PyObject* names_dict = m_dtype->fields;
393+
PyObject* names_dict = fields;
393394
PyObject* names = PyDict_Keys(names_dict);
394395
PyObject* values = PyDict_Values(names_dict);
395396
if (!names || !values)
@@ -413,7 +414,7 @@ void NumpyReader::createFields(PointLayoutPtr layout)
413414
type = getType(dt, name);
414415

415416
char byteorder = dt->byteorder;
416-
int elsize = dt->elsize;
417+
int elsize = (int) PyDataType_ELSIZE(dt);
417418
id = registerDim(layout, name, type);
418419
m_fields.push_back({id, type, offset, byteorder, elsize});
419420
}

src/pdal/plang/Invocation.cpp

+3-2
Original file line numberDiff line numberDiff line change
@@ -258,10 +258,11 @@ void *Invocation::extractArray(PyObject *array, std::string const& name,
258258

259259
num_elements = (size_t)nPoints;
260260

261-
if (static_cast<uint32_t>(dtype->elsize) != Dimension::size(t))
261+
npy_intp elsize = PyDataType_ELSIZE(dtype);
262+
if (static_cast<uint32_t>(elsize) != Dimension::size(t))
262263
{
263264
std::ostringstream oss;
264-
oss << "dtype of array has size " << dtype->elsize
265+
oss << "dtype of array has size " << elsize
265266
<< " but PDAL dimension '" << name << "' has byte size of "
266267
<< Dimension::size(t) << " bytes.";
267268
throw pdal_error(oss.str());

0 commit comments

Comments
 (0)