Skip to content

BUG: SWIG typechecks reject foreign wrapped types#5310

Merged
hjmjohnson merged 1 commit intoInsightSoftwareConsortium:mainfrom
dzenanz:isInsideBuffer
May 4, 2026
Merged

BUG: SWIG typechecks reject foreign wrapped types#5310
hjmjohnson merged 1 commit intoInsightSoftwareConsortium:mainfrom
dzenanz:isInsideBuffer

Conversation

@dzenanz
Copy link
Copy Markdown
Member

@dzenanz dzenanz commented Apr 16, 2025

Based on code provided on the forum: https://discourse.itk.org/t/improper-wrapping-of-imagefunction-isinsidebuffer/7495

PR Checklist

  • No API changes were made (or the changes have been approved)
  • No major design changes were made (or the changes have been approved)
  • Added test (or behavior not changed)
  • Added Python wrapping to new files (if any) as described in ITK Software Guide Section 9.5

@github-actions github-actions Bot added type:Infrastructure Infrastructure/ecosystem related changes, such as CMake or buildbots type:Enhancement Improvement of existing methods or implementation area:Python wrapping Python bindings for a class type:Testing Ensure that the purpose of a class is met/the results on a wide set of test cases are correct area:Core Issues affecting the Core module labels Apr 16, 2025
@dzenanz dzenanz force-pushed the isInsideBuffer branch 2 times, most recently from d3f1bd0 to f14f7d7 Compare April 16, 2025 14:56
@dzenanz dzenanz requested a review from Copilot April 16, 2025 15:40
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

This pull request adds a new Python test file to verify the behavior of LinearImageFunction’s various IsInsideBuffer overloads as wrapped by ITK.

  • Introduces a test script that exercises list, continuous index, and point-based inputs to IsInsideBuffer.
  • Ensures that the Python wrapping for LinearImageFunction works as intended.
Files not reviewed (1)
  • Modules/Core/ImageFunction/wrapping/test/CMakeLists.txt: Language not supported

Comment thread Modules/Core/ImageFunction/wrapping/test/itkLinearImageFunctionWrappingTest.py Outdated
@dzenanz
Copy link
Copy Markdown
Member Author

dzenanz commented Apr 16, 2025

On the CI, the test fails with a different error message:

Traceback (most recent call last):
  File "/Users/runner/work/ITK/ITK/Modules/Core/ImageFunction/wrapping/test/itkLinearImageFunctionWrappingTest.py", line 23, in <module>
    interp = itk.LinearInterpolateImageFunction.New(image)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/runner/work/ITK/ITK/build/Wrapping/Generators/Python/itk/support/template_class.py", line 751, in New
    raise itk.TemplateTypeError(self, input_type)
itk.support.extras.TemplateTypeError: itk.LinearInterpolateImageFunction is not wrapped for input type `None`.

To limit the size of the package, only a limited number of
types are available in ITK Python. To print the supported
types, run the following command in your python environment:

    itk.LinearInterpolateImageFunction.GetTypes()

Possible solutions:
* If you are an application user:
** Convert your input image into a supported format (see below).
** Contact developer to report the issue.
* If you are an application developer, force input images to be
loaded in a supported pixel type.

    e.g.: instance = itk.LinearInterpolateImageFunction[itk.Image[itk.SS,2], itk.D].New(my_input)

* (Advanced) If you are an application developer, build ITK Python yourself and
turned to `ON` the corresponding CMake option to wrap the pixel type or image
dimension you need. When configuring ITK with CMake, you can set
`ITK_WRAP_${type}` (replace ${type} with appropriate pixel type such as
`double`). If you need to support images with 4 or 5 dimensions, you can add
these dimensions to the list of dimensions in the CMake variable
`ITK_WRAP_IMAGE_DIMS`.

Supported input types:

itk.Image[itk.SS,2]
itk.Image[itk.UC,2]
itk.Image[itk.F,2]
itk.Image[itk.Vector[itk.F,2],2]
itk.Image[itk.CovariantVector[itk.F,2],2]
itk.Image[itk.RGBPixel[itk.UC],2]
itk.Image[itk.RGBAPixel[itk.UC],2]
itk.Image[itk.SS,3]
itk.Image[itk.UC,3]
itk.Image[itk.F,3]
itk.Image[itk.Vector[itk.F,3],3]
itk.Image[itk.CovariantVector[itk.F,3],3]
itk.Image[itk.RGBPixel[itk.UC],3]
itk.Image[itk.RGBAPixel[itk.UC],3]
itk.PhasedArray3DSpecialCoordinatesImage[itk.F]
itk.PhasedArray3DSpecialCoordinatesImage[itk.UC]

itkTestDriver: Process exited with return value: 1

@hjmjohnson
Copy link
Copy Markdown
Member

hjmjohnson commented May 2, 2026

Found the root cause and pushed a fix to this branch (bdbe9ae6c3).

The bug isn't specific to IsInsideBuffer — it's in the SWIG typecheck typemaps in Wrapping/Generators/Python/PyBase/pyBase.i. All wrapped fixed-length ITK classes (Index, ContinuousIndex, Point, Vector, FixedArray, ...) expose __getitem__ / __len__ for ergonomic indexing. The typecheck typemaps for those types treated any object satisfying PySequence_Check and the right length as a viable match — so a wrapped ContinuousIndex looked like a valid Index argument, and SWIG's overload dispatcher always committed to the first overload (Index) before ever evaluating ContinuousIndex or Point.

The fix tightens those typechecks so they (a) accept native pointer matches, (b) reject SWIG wrappers of unrelated types via SWIG_Python_GetSwigThis, and (c) for the int-only Index/Size/Offset typemap, peek at element 0 to reject float-element sequences. Your test (now adapted to use assert) passes for all four documented call patterns.

hjmjohnson added a commit to dzenanz/ITK that referenced this pull request May 2, 2026
…reConsortium#5310, Discourse #7495)

The Python overload dispatcher generated by SWIG resolves overloaded
methods by running each overload's `typecheck` typemap in order and
selecting the first that returns `_v=1`.  The fixed-length and
variable-length sequence typecheck typemaps in `pyBase.i` claimed
viability whenever the input passed `PySequence_Check` and had the
right length:

    if (SWIG_ConvertPtr(...) == -1
        && (!PySequence_Check($input) || PyObject_Length($input) != dim)
        && !PyInt_Check($input) && !PyFloat_Check($input))
        _v = 0;
    else
        _v = 1;

But every wrapped ITK fixed-length type (`itk::Index`,
`itk::ContinuousIndex`, `itk::Point`, `itk::Vector`, ...) exposes
`__getitem__` and `__len__` for ergonomic use from Python — which
makes `PySequence_Check` succeed and `PyObject_Length` return the
fixed dimension.  As a result, every typecheck claimed viability for
every wrapped fixed-length input of the right length, regardless of
the actual C++ type, and overload dispatch effectively reduced to
declaration order.

Concretely, `itk::ImageFunction::IsInsideBuffer` has three overloads
(`IndexType`, `ContinuousIndexType`, `PointType`).  Calling

    interp.IsInsideBuffer(itk.ContinuousIndex[itk.D, 3]())

or

    interp.IsInsideBuffer(itk.Point[itk.D, 3]())

both reached the `Index` overload first and failed with

    ValueError: Expecting a sequence of int (or long)

because the wrapped `ContinuousIndex`/`Point` instance was passed
into the integer-only `Index` typemap (its `__getitem__` returned
floats, which the `in` typemap rejected).  The other two overloads
were never considered.

Fix the four affected typecheck typemaps in
`DECL_PYTHON_VEC_TYPEMAP` (`Vector`/`CovariantVector`/`Point`/
`ContinuousIndex`/`FixedArray`), `DECL_PYTHON_SEQ_TYPEMAP`
(`Index`/`Size`/`Offset`), and `DECL_PYTHON_VARLEN_SEQ_TYPEMAP`
(`Array`/`RGBPixel`/`RGBAPixel`):

  1. If `SWIG_ConvertPtr` succeeds for our descriptor, accept (this
     is the strong, type-correct match).
  2. Otherwise, if `SWIG_Python_GetSwigThis` returns non-NULL the
     input is a SWIG-wrapped instance of an *unrelated* type — reject,
     so the dispatcher can keep looking for the right overload.
  3. Otherwise, fall through to the cheap scalar / sequence-length
     checks as before.  For the integer-only `SEQ` typemap we
     additionally peek at element 0 and reject sequences whose first
     element is not a Python int / long, so a `[1.5, 2.5, 3.5]` list
     no longer claims viability for `Index`.

After this change all four documented `IsInsideBuffer` call patterns
resolve to the intended overload (verified with the new
`itkLinearImageFunctionWrappingTest` regression test).

Closes InsightSoftwareConsortium#5310.

Co-Authored-By: Hans Johnson <hans-johnson@uiowa.edu>
hjmjohnson added a commit to dzenanz/ITK that referenced this pull request May 2, 2026
…sortium#5310)

The Python overload dispatcher generated by SWIG resolves overloaded
methods by running each overload's `typecheck` typemap in order and
selecting the first that returns `_v=1`.  The fixed-length and
variable-length sequence typecheck typemaps in `pyBase.i` claimed
viability whenever the input passed `PySequence_Check` and had the
right length:

    if (SWIG_ConvertPtr(...) == -1
        && (!PySequence_Check($input) || PyObject_Length($input) != dim)
        && !PyInt_Check($input) && !PyFloat_Check($input))
        _v = 0;
    else
        _v = 1;

But every wrapped ITK fixed-length type (`itk::Index`,
`itk::ContinuousIndex`, `itk::Point`, `itk::Vector`, ...) exposes
`__getitem__` and `__len__` for ergonomic use from Python — which
makes `PySequence_Check` succeed and `PyObject_Length` return the
fixed dimension.  As a result, every typecheck claimed viability for
every wrapped fixed-length input of the right length, regardless of
the actual C++ type, and overload dispatch effectively reduced to
declaration order.

Concretely, `itk::ImageFunction::IsInsideBuffer` has three overloads
(`IndexType`, `ContinuousIndexType`, `PointType`).  Calling

    interp.IsInsideBuffer(itk.ContinuousIndex[itk.D, 3]())

or

    interp.IsInsideBuffer(itk.Point[itk.D, 3]())

both reached the `Index` overload first and failed with

    ValueError: Expecting a sequence of int (or long)

because the wrapped `ContinuousIndex`/`Point` instance was passed
into the integer-only `Index` typemap (its `__getitem__` returned
floats, which the `in` typemap rejected).  The other two overloads
were never considered.

Fix the four affected typecheck typemaps in
`DECL_PYTHON_VEC_TYPEMAP` (`Vector`/`CovariantVector`/`Point`/
`ContinuousIndex`/`FixedArray`), `DECL_PYTHON_SEQ_TYPEMAP`
(`Index`/`Size`/`Offset`), and `DECL_PYTHON_VARLEN_SEQ_TYPEMAP`
(`Array`/`RGBPixel`/`RGBAPixel`):

  1. If `SWIG_ConvertPtr` succeeds for our descriptor, accept (this
     is the strong, type-correct match).
  2. Otherwise, if `SWIG_Python_GetSwigThis` returns non-NULL the
     input is a SWIG-wrapped instance of an *unrelated* type — reject,
     so the dispatcher can keep looking for the right overload.
  3. Otherwise, fall through to the cheap scalar / sequence-length
     checks as before.  For the integer-only `SEQ` typemap we
     additionally peek at element 0 and reject sequences whose first
     element is not a Python int / long, so a `[1.5, 2.5, 3.5]` list
     no longer claims viability for `Index`.

After this change all four documented `IsInsideBuffer` call patterns
resolve to the intended overload (verified with the new
`itkLinearImageFunctionWrappingTest` regression test).

Closes InsightSoftwareConsortium#5310.

Co-Authored-By: Hans Johnson <hans-johnson@uiowa.edu>
@dzenanz dzenanz requested review from blowekamp and thewtex May 2, 2026 13:20
hjmjohnson added a commit to dzenanz/ITK that referenced this pull request May 2, 2026
…sortium#5310)

The Python overload dispatcher generated by SWIG resolves overloaded
methods by running each overload's `typecheck` typemap in order and
selecting the first that returns `_v=1`.  The fixed-length and
variable-length sequence typecheck typemaps in `pyBase.i` claimed
viability whenever the input passed `PySequence_Check` and had the
right length:

    if (SWIG_ConvertPtr(...) == -1
        && (!PySequence_Check($input) || PyObject_Length($input) != dim)
        && !PyInt_Check($input) && !PyFloat_Check($input))
        _v = 0;
    else
        _v = 1;

But every wrapped ITK fixed-length type (`itk::Index`,
`itk::ContinuousIndex`, `itk::Point`, `itk::Vector`, ...) exposes
`__getitem__` and `__len__` for ergonomic use from Python — which
makes `PySequence_Check` succeed and `PyObject_Length` return the
fixed dimension.  As a result, every typecheck claimed viability for
every wrapped fixed-length input of the right length, regardless of
the actual C++ type, and overload dispatch effectively reduced to
declaration order.

Concretely, `itk::ImageFunction::IsInsideBuffer` has three overloads
(`IndexType`, `ContinuousIndexType`, `PointType`).  Calling

    interp.IsInsideBuffer(itk.ContinuousIndex[itk.D, 3]())

or

    interp.IsInsideBuffer(itk.Point[itk.D, 3]())

both reached the `Index` overload first and failed with

    ValueError: Expecting a sequence of int (or long)

because the wrapped `ContinuousIndex`/`Point` instance was passed
into the integer-only `Index` typemap (its `__getitem__` returned
floats, which the `in` typemap rejected).  The other two overloads
were never considered.

Fix the four affected typecheck typemaps in
`DECL_PYTHON_VEC_TYPEMAP` (`Vector`/`CovariantVector`/`Point`/
`ContinuousIndex`/`FixedArray`), `DECL_PYTHON_SEQ_TYPEMAP`
(`Index`/`Size`/`Offset`), and `DECL_PYTHON_VARLEN_SEQ_TYPEMAP`
(`Array`/`RGBPixel`/`RGBAPixel`):

  1. If `SWIG_ConvertPtr` succeeds for our descriptor, accept (this
     is the strong, type-correct match).
  2. Otherwise, if `SWIG_Python_GetSwigThis` returns non-NULL the
     input is a SWIG-wrapped instance of an *unrelated* type — reject,
     so the dispatcher can keep looking for the right overload.
  3. Otherwise, fall through to the cheap scalar / sequence-length
     checks as before.  For the integer-only `SEQ` typemap we
     additionally peek at element 0 and reject sequences whose first
     element is not a Python int / long, so a `[1.5, 2.5, 3.5]` list
     no longer claims viability for `Index`.

After this change all four documented `IsInsideBuffer` call patterns
resolve to the intended overload (verified with the new
`itkLinearImageFunctionWrappingTest` regression test).

Closes InsightSoftwareConsortium#5310.

Co-Authored-By: Hans Johnson <hans-johnson@uiowa.edu>
@hjmjohnson hjmjohnson marked this pull request as ready for review May 3, 2026 01:45
@greptile-apps
Copy link
Copy Markdown
Contributor

greptile-apps Bot commented May 3, 2026

Greptile Summary

This PR fixes a long-standing SWIG overload-dispatch bug (IsInsideBuffer and similar methods always selected the Index overload regardless of input type) by tightening the typecheck typemaps in pyBase.i. The fix explicitly rejects SWIG-wrapped objects of unrelated types (which previously satisfied PySequence_Check via their __getitem__/__len__) and adds an element-type peek for integer-only (Index) typemaps to reject float sequences. A new Python regression test covering all three overload paths (Index, ContinuousIndex, Point) is added and wired into CMake.

Confidence Score: 4/5

Safe to merge; the typecheck fix is logically sound and the regression test validates all key overload paths.

No P0 or P1 issues found. The SWIG typemap changes correctly handle the four affected macros consistently, and PyErr_Clear usage around the element-peek is appropriate. Only minor style-level observations remain.

Wrapping/Generators/Python/PyBase/pyBase.i — broad impact on all Python-wrapped types using these typemap macros, worth a careful build + test run.

Important Files Changed

Filename Overview
Wrapping/Generators/Python/PyBase/pyBase.i Fixes SWIG typecheck typemaps in four macros to reject unrelated wrapped types via SWIG_Python_GetSwigThis and adds element-type peeking for integer-only (Index) typechecks; logic is correct and consistent across all four affected macros.
Modules/Core/ImageFunction/wrapping/test/itkLinearImageFunctionWrappingTest.py New regression test covering all four IsInsideBuffer overload paths (raw int list, ContinuousIndex, Point, raw float list) plus out-of-buffer False cases; follows established ITK Python test patterns.
Modules/Core/ImageFunction/wrapping/test/CMakeLists.txt Adds itk_python_add_test registration for the new test script; follows existing patterns in this file.

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
    A[Python calls IsInsideBuffer with any input] --> B{SWIG_ConvertPtr\nsucceeds for this type?}
    B -- yes --> C[_v = 1\nOverload candidate]
    B -- no --> D[PyErr_Clear]
    D --> E{SWIG_Python_GetSwigThis\nnot NULL?\nUnrelated wrapped type}
    E -- yes --> F[_v = 0\nReject candidate]
    E -- no --> G{For VEC typemap:\nPyInt/Float_Check?}
    G -- yes --> H[_v = 1\nOverload candidate]
    G -- no --> I{PySequence_Check\nAND length == dim?}
    I -- no --> F2[_v = 0\nReject candidate]
    I -- yes --> J{INT_INDEX typemap only:\nPeek element 0\nPyInt or PyLong?}
    J -- yes --> K[_v = 1\nOverload candidate]
    J -- no --> F3[_v = 0\nReject candidate]
Loading

Reviews (1): Last reviewed commit: "BUG: SWIG typechecks reject foreign wrap..." | Re-trigger Greptile

Comment thread Wrapping/Generators/Python/PyBase/pyBase.i
Copy link
Copy Markdown
Member Author

@dzenanz dzenanz left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good on a glance. I can't approve my own PR.

…sortium#5310)

The Python overload dispatcher generated by SWIG resolves overloaded
methods by running each overload's `typecheck` typemap in order and
selecting the first that returns `_v=1`.  The fixed-length and
variable-length sequence typecheck typemaps in `pyBase.i` claimed
viability whenever the input passed `PySequence_Check` and had the
right length:

    if (SWIG_ConvertPtr(...) == -1
        && (!PySequence_Check($input) || PyObject_Length($input) != dim)
        && !PyInt_Check($input) && !PyFloat_Check($input))
        _v = 0;
    else
        _v = 1;

But every wrapped ITK fixed-length type (`itk::Index`,
`itk::ContinuousIndex`, `itk::Point`, `itk::Vector`, ...) exposes
`__getitem__` and `__len__` for ergonomic use from Python — which
makes `PySequence_Check` succeed and `PyObject_Length` return the
fixed dimension.  As a result, every typecheck claimed viability for
every wrapped fixed-length input of the right length, regardless of
the actual C++ type, and overload dispatch effectively reduced to
declaration order.

Concretely, `itk::ImageFunction::IsInsideBuffer` has three overloads
(`IndexType`, `ContinuousIndexType`, `PointType`).  Calling

    interp.IsInsideBuffer(itk.ContinuousIndex[itk.D, 3]())

or

    interp.IsInsideBuffer(itk.Point[itk.D, 3]())

both reached the `Index` overload first and failed with

    ValueError: Expecting a sequence of int (or long)

because the wrapped `ContinuousIndex`/`Point` instance was passed
into the integer-only `Index` typemap (its `__getitem__` returned
floats, which the `in` typemap rejected).  The other two overloads
were never considered.

Fix the four affected typecheck typemaps in
`DECL_PYTHON_VEC_TYPEMAP` (`Vector`/`CovariantVector`/`Point`/
`ContinuousIndex`/`FixedArray`), `DECL_PYTHON_SEQ_TYPEMAP`
(`Index`/`Size`/`Offset`), and `DECL_PYTHON_VARLEN_SEQ_TYPEMAP`
(`Array`/`RGBPixel`/`RGBAPixel`):

  1. If `SWIG_ConvertPtr` succeeds for our descriptor, accept (this
     is the strong, type-correct match).
  2. Otherwise, if `SWIG_Python_GetSwigThis` returns non-NULL the
     input is a SWIG-wrapped instance of an *unrelated* type — reject,
     so the dispatcher can keep looking for the right overload.
  3. Otherwise, fall through to the cheap scalar / sequence-length
     checks as before.  For the integer-only `SEQ` typemap we
     additionally peek at element 0 and reject sequences whose first
     element is not a Python int / long, so a `[1.5, 2.5, 3.5]` list
     no longer claims viability for `Index`.

After this change all four documented `IsInsideBuffer` call patterns
resolve to the intended overload (verified with the new
`itkLinearImageFunctionWrappingTest` regression test).

Closes InsightSoftwareConsortium#5310.

Co-Authored-By: Hans Johnson <hans-johnson@uiowa.edu>
@hjmjohnson
Copy link
Copy Markdown
Member

I'm addressing the greptile with a minor test addition.

@hjmjohnson hjmjohnson changed the title ENH: Add LinearImageFunction wrapping test BUG: SWIG typechecks reject foreign wrapped types May 4, 2026
@hjmjohnson hjmjohnson merged commit ed56b57 into InsightSoftwareConsortium:main May 4, 2026
15 checks passed
hjmjohnson added a commit to hjmjohnson/ITK that referenced this pull request May 6, 2026
…sortium#5310)

The Python overload dispatcher generated by SWIG resolves overloaded
methods by running each overload's `typecheck` typemap in order and
selecting the first that returns `_v=1`.  The fixed-length and
variable-length sequence typecheck typemaps in `pyBase.i` claimed
viability whenever the input passed `PySequence_Check` and had the
right length:

    if (SWIG_ConvertPtr(...) == -1
        && (!PySequence_Check($input) || PyObject_Length($input) != dim)
        && !PyInt_Check($input) && !PyFloat_Check($input))
        _v = 0;
    else
        _v = 1;

But every wrapped ITK fixed-length type (`itk::Index`,
`itk::ContinuousIndex`, `itk::Point`, `itk::Vector`, ...) exposes
`__getitem__` and `__len__` for ergonomic use from Python — which
makes `PySequence_Check` succeed and `PyObject_Length` return the
fixed dimension.  As a result, every typecheck claimed viability for
every wrapped fixed-length input of the right length, regardless of
the actual C++ type, and overload dispatch effectively reduced to
declaration order.

Concretely, `itk::ImageFunction::IsInsideBuffer` has three overloads
(`IndexType`, `ContinuousIndexType`, `PointType`).  Calling

    interp.IsInsideBuffer(itk.ContinuousIndex[itk.D, 3]())

or

    interp.IsInsideBuffer(itk.Point[itk.D, 3]())

both reached the `Index` overload first and failed with

    ValueError: Expecting a sequence of int (or long)

because the wrapped `ContinuousIndex`/`Point` instance was passed
into the integer-only `Index` typemap (its `__getitem__` returned
floats, which the `in` typemap rejected).  The other two overloads
were never considered.

Fix the four affected typecheck typemaps in
`DECL_PYTHON_VEC_TYPEMAP` (`Vector`/`CovariantVector`/`Point`/
`ContinuousIndex`/`FixedArray`), `DECL_PYTHON_SEQ_TYPEMAP`
(`Index`/`Size`/`Offset`), and `DECL_PYTHON_VARLEN_SEQ_TYPEMAP`
(`Array`/`RGBPixel`/`RGBAPixel`):

  1. If `SWIG_ConvertPtr` succeeds for our descriptor, accept (this
     is the strong, type-correct match).
  2. Otherwise, if `SWIG_Python_GetSwigThis` returns non-NULL the
     input is a SWIG-wrapped instance of an *unrelated* type — reject,
     so the dispatcher can keep looking for the right overload.
  3. Otherwise, fall through to the cheap scalar / sequence-length
     checks as before.  For the integer-only `SEQ` typemap we
     additionally peek at element 0 and reject sequences whose first
     element is not a Python int / long, so a `[1.5, 2.5, 3.5]` list
     no longer claims viability for `Index`.

After this change all four documented `IsInsideBuffer` call patterns
resolve to the intended overload (verified with the new
`itkLinearImageFunctionWrappingTest` regression test).

Closes InsightSoftwareConsortium#5310.

Co-Authored-By: Hans Johnson <hans-johnson@uiowa.edu>
hjmjohnson added a commit to hjmjohnson/ITK that referenced this pull request May 6, 2026
…deBuffer

BUG: SWIG typechecks reject foreign wrapped types
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:Core Issues affecting the Core module area:Python wrapping Python bindings for a class type:Enhancement Improvement of existing methods or implementation type:Infrastructure Infrastructure/ecosystem related changes, such as CMake or buildbots type:Testing Ensure that the purpose of a class is met/the results on a wide set of test cases are correct

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants