[Insight-users] Problem with Python Wrapping my own class with WrapITK

Thomas Albrecht Thomas.Albrecht at unibas.ch
Wed Nov 7 10:42:20 EST 2012


Sorry, you can ignore the post. The problem was that I tried to import 
from the build directory, while I should have used the install directory.

On 11/07/2012 11:52 AM, Thomas Albrecht wrote:
> Hi everyone,
>
> this used to work with ITK 3.20 but does not work with ITK 4.2.
>
> The itkLandmarkBasedTransformInitializer is not properly wrapped by 
> WrapITK because it uses std::vectors. Therefore, we created our own 
> class itkPythonEnabledLandmarkBasedTransformInitializer. This is 
> wrapped using the following CMakeLists.txt:
>
>     PROJECT(itkExtensions)
>     FIND_PACKAGE(WrapITK REQUIRED)
>     cmake_minimum_required(VERSION 2.8)
>
>     SET(PROJECT_SOURCE_DIR "../../src")
>     include_directories( ${PROJECT_SOURCE_DIR})
>
>     itk_wrap_module("itkLandmarkAlignment")
>
>     set(WRAPPER_LIBRARY_DEPENDS ITKCommon ITKTransform)
>     SET(WRAPPER_LIBRARY_LINK_LIBRARIES ${ITK_LIBRARIES})
>
>     itk_auto_load_submodules() # includes all *.wrap custom files
>     itk_end_wrap_module()
>
> The included .wrap file looks like this:
>
>     ITK_WRAP_INCLUDE("itkSimilarity3DTransform.h")
>     ITK_WRAP_CLASS("itk::PythonEnabledLandmarkBasedTransformInitializer"
>     POINTER_WITH_SUPERCLASS)
>       ITK_WRAP_TEMPLATE("VTIF3IF3"
>     "itk::VersorRigid3DTransform<double>, itk::Image< float, 3>,
>     itk::Image<float, 3>")
>       ITK_WRAP_TEMPLATE("STIF3IF3"
>     "itk::Similarity3DTransform<double>, itk::Image< float, 3>,
>     itk::Image<float, 3>")
>     ITK_END_WRAP_CLASS()
>
>
>
> This compiles and can be imported into python. However, when I import 
> both itk and this module itkLandmarkAlignment, the regular itk modules 
> don't load properly anymore. I get this error:
>
>      File
>     "/home/tom/workspace/imageToImageRegistration/scripts/landmark_alignement.py",
>     line 166, in <module>
>         main(*args[1:]),
>       File
>     "/home/tom/workspace/imageToImageRegistration/scripts/landmark_alignement.py",
>     line 46, in main
>         fixed_image = ImageReader(fixed_image_name).get_image()
>       File
>     "/home/tom/workspace/tools/scripts/common/ImageReaderITK.py", line
>     51, in __init__
>         self.__itk_img_type = eval("itk.Image." + self.__datatype +
>     str(self.__dimension))
>       File "<string>", line 1, in <module>
>       File
>     "/export/contrib/InsightToolkit-4.20/linux64/u12_04_release/lib/ITK-4.2/Python/itkLazy.py",
>     line 37, in __getattribute__
>         itkBase.LoadModule(module, namespace)
>       File
>     "/export/contrib/InsightToolkit-4.20/linux64/u12_04_release/lib/ITK-4.2/Python/itkBase.py",
>     line 95, in LoadModule
>         LoadModule(dep, namespace)
>       File
>     "/export/contrib/InsightToolkit-4.20/linux64/u12_04_release/lib/ITK-4.2/Python/itkBase.py",
>     line 95, in LoadModule
>         LoadModule(dep, namespace)
>       File
>     "/export/contrib/InsightToolkit-4.20/linux64/u12_04_release/lib/ITK-4.2/Python/itkBase.py",
>     line 95, in LoadModule
>         LoadModule(dep, namespace)
>       File
>     "/export/contrib/InsightToolkit-4.20/linux64/u12_04_release/lib/ITK-4.2/Python/itkBase.py",
>     line 95, in LoadModule
>         LoadModule(dep, namespace)
>       File
>     "/export/contrib/InsightToolkit-4.20/linux64/u12_04_release/lib/ITK-4.2/Python/itkBase.py",
>     line 95, in LoadModule
>         LoadModule(dep, namespace)
>       File
>     "/export/contrib/InsightToolkit-4.20/linux64/u12_04_release/lib/ITK-4.2/Python/itkBase.py",
>     line 118, in LoadModule
>         for k, v in module.__dict__.items():
>     UnboundLocalError: local variable 'module' referenced before
>     assignment
>
> It seems that itkBase cannot load the reader module anymore. This can 
> be reproduced by hand in ipython. If and only if I have my own wrapped 
> module imported before trying to use an ImageFileReader, I get the 
> error messages:
>
>     UnboundLocalError Traceback (most recent call last)
>     /local/tom/data/tibia/Anatomie/right/ct/<ipython-input-3-e158c938807a>
>     in <module>()
>     ----> 1 reader = itk.ImageFileReader.ISS3.New()
>
>     /export/contrib/InsightToolkit-4.20/linux64/u12_04_release/lib/ITK-4.2/Python/itkLazy.pyc
>     in __getattribute__(self, attr)
>          35       module = self.__lazy_attributes[attr]
>          36       namespace = {}
>     ---> 37       itkBase.LoadModule(module, namespace)
>          38       # Load into 'namespace' first, then self.__dict__
>     (via setattr) to
>
>          39       # prevent the warnings about overwriting the
>     'NotLoaded' values already
>
>
>     /export/contrib/InsightToolkit-4.20/linux64/u12_04_release/lib/ITK-4.2/Python/itkBase.pyc
>     in LoadModule(name, namespace)
>          93     deps.sort()
>          94     for dep in deps:
>     ---> 95       LoadModule(dep, namespace)
>          96
>          97   if itkConfig.ImportCallback:
>     itkConfig.ImportCallback(name, 0)
>
>     /export/contrib/InsightToolkit-4.20/linux64/u12_04_release/lib/ITK-4.2/Python/itkBase.pyc
>     in LoadModule(name, namespace)
>          93     deps.sort()
>          94     for dep in deps:
>     ---> 95       LoadModule(dep, namespace)
>          96
>          97   if itkConfig.ImportCallback:
>     itkConfig.ImportCallback(name, 0)
>
>     /export/contrib/InsightToolkit-4.20/linux64/u12_04_release/lib/ITK-4.2/Python/itkBase.pyc
>     in LoadModule(name, namespace)
>         116   this_module.swig = imp.new_module('swig')
>         117   if namespace is not None: swig =
>     namespace.setdefault('swig', imp.new_module('swig'))
>     --> 118   for k, v in module.__dict__.items():
>         119     if not k.startswith('__'): setattr(this_module.swig, k, v)
>         120     if namespace is not None and not k.startswith('__'):
>     setattr(swig, k, v)
>
>     UnboundLocalError: local variable 'module' referenced before
>     assignment
>
>
> Any help would be greatly appreciated.
>
> Tom

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.itk.org/pipermail/insight-users/attachments/20121107/f9a7cf7c/attachment.htm>


More information about the Insight-users mailing list