InsightSoftwareConsortium / ITK

Insight Toolkit (ITK) -- Official Repository. ITK builds on a proven, spatially-oriented architecture for processing, segmentation, and registration of scientific images in two, three, or more dimensions.
https://itk.org
Apache License 2.0
1.37k stars 660 forks source link

BUG: GPU Python Wrapping Fails on Linux #3777

Open tbirdso opened 1 year ago

tbirdso commented 1 year ago

Description

Building ITK with ITK_USE_GPU=ON and ITK_WRAP_PYTHON=ON on Linux results in a build failure.

Steps to Reproduce

Configure ITK with ITK_USE_GPU=ON, ITK_WRAP_PYTHON=ON. ITK_USE_SYSTEM_FFTW was also turned ON to use cuFFTW. Then, build ITK.

Expected behavior

The build succeeds and Python wrappings are generated.

Actual behavior

[1/38] Generating .pyi files for Python wrapper interface
FAILED: Wrapping/CMakeFiles/itk-stub-files Wrapping/Generators/Python/itk/_proxies.pyi Wrapping/Generators/Python/itk/__init__.pyi /home/tom/builds/ITK-base-dev/Wrapping/CMakeFiles/itk-stub-files /home/tom/builds/ITK-base-dev/Wrapping/Generators/Python/itk/_proxies.pyi /home/tom/builds/ITK-base-dev/Wrapping/Generators/Python/itk/__init__.pyi
cd /home/tom/builds/ITK-base-dev/Wrapping && /home/tom/anaconda3/bin/python3.8 /home/tom/repos/ITK/Wrapping/Generators/Python/itk/pyi_generator.py --pyi_dir /home/tom/builds/ITK-base-dev/Wrapping/Generators/Python/itk --pkl_dir /home/tom/builds/ITK-base-dev/Wrapping/Generators/Python/itk-pkl --index_list_file /home/tom/builds/ITK-base-dev/Wrapping/GlobalIdxFilesList.txt
Traceback (most recent call last):
  File "/home/tom/repos/ITK/Wrapping/Generators/Python/itk/pyi_generator.py", line 609, in <module>
    class_name = unpack(class_files, options.pyi_dir)
  File "/home/tom/repos/ITK/Wrapping/Generators/Python/itk/pyi_generator.py", line 391, in unpack
    base = merge(class_definitions)
  File "/home/tom/repos/ITK/Wrapping/Generators/Python/itk/pyi_generator.py", line 450, in merge
    raise AssertionError(
AssertionError: The basic values of two associated classes do not match.
Item 1: class `itkCastImageFilter::CastImageFilter` has_new_method: `True` typed: `True` is_abstract: `False` is_enum: `False` has_superclass: `True`Item 2: class `itkGPUCastImageFilter::CastImageFilter` has_new_method: `True` typed: `True` is_abstract: `False` is_enum: `False` has_superclass: `False`
[14/38] Linking CXX shared module Wrapping/Generators/Python/itk/_ITKMetricsv4Python.so
ninja: build stopped: subcommand failed.

Reproducibility

100%

Versions

ITK 5.3.0

Environment

Ubuntu 20.04 CMake 3.21.3 Ninja 1.10.0

Additional Information

Likely due to some POINTER vs POINTER_WITH_SUPERCLASS mismatch for GPUCastImageFilter's wrapping.

Found in attempt to reproduce related https://github.com/InsightSoftwareConsortium/ITK/issues/3744

nilason commented 9 months ago

I can confirm this, building on Mac too, with ITK_USE_GPU=ON and ITK_WRAP_PYTHON=ON:

cd /opt/local/var/macports/build/_Users_nilason_ports_graphics_InsightToolkit-devel/py311-InsightToolkit-devel/work/build/Wrapping && /opt/local/bin/bin/python3.11 /opt/local/var/macports/build/_Users_nilason_ports_graphics_InsightToolkit-devel/py311-InsightToolkit-devel/work/InsightToolkit-5.3.0/Wrapping/Generators/Python/itk/pyi_generator.py --pyi_dir /opt/local/var/macports/build/_Users_nilason_ports_graphics_InsightToolkit-devel/py311-InsightToolkit-devel/work/build/Wrapping/Generators/Python/itk --pkl_dir /opt/local/var/macports/build/_Users_nilason_ports_graphics_InsightToolkit-devel/py311-InsightToolkit-devel/work/build/Wrapping/Generators/Python/itk-pkl --index_list_file /opt/local/var/macports/build/_Users_nilason_ports_graphics_InsightToolkit-devel/py311-InsightToolkit-devel/work/build/Wrapping/GlobalIdxFilesList.txt
Traceback (most recent call last):
  File "/opt/local/var/macports/build/_Users_nilason_ports_graphics_InsightToolkit-devel/py311-InsightToolkit-devel/work/InsightToolkit-5.3.0/Wrapping/Generators/Python/itk/pyi_generator.py", line 609, in <module>
    class_name = unpack(class_files, options.pyi_dir)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/local/var/macports/build/_Users_nilason_ports_graphics_InsightToolkit-devel/py311-InsightToolkit-devel/work/InsightToolkit-5.3.0/Wrapping/Generators/Python/itk/pyi_generator.py", line 391, in unpack
    base = merge(class_definitions)
           ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/local/var/macports/build/_Users_nilason_ports_graphics_InsightToolkit-devel/py311-InsightToolkit-devel/work/InsightToolkit-5.3.0/Wrapping/Generators/Python/itk/pyi_generator.py", line 450, in merge
    raise AssertionError(
AssertionError: The basic values of two associated classes do not match.
Item 1: class `itkCastImageFilter::CastImageFilter` has_new_method: `True` typed: `True` is_abstract: `False` is_enum: `False` has_superclass: `True`Item 2: class `itkGPUCastImageFilter::CastImageFilter` has_new_method: `True` typed: `True` is_abstract: `False` is_enum: `False` has_superclass: `False`
make[2]: *** [Wrapping/CMakeFiles/itk-stub-files] Error 1

Switching to ITK_USE_GPU=OFF, makes it build successfully

melrobin commented 6 months ago

I can confirm this bug too from the latest sources.

hqh0127 commented 2 months ago

I can confirm this bug too from the latest sources. Version 5.3.0