isis-group / isis

The ISIS project aims to provide a framework to access a large variety of image processing libraries written in different programming languages and environments.
GNU General Public License v3.0
17 stars 14 forks source link

python isis.data.IOFactory.write should accept python lists #57

Closed DerOrfa closed 12 years ago

DerOrfa commented 12 years ago

This works just fine:

from isis.data import IOFactory
images=IOFactory.load("/scr/mrincoming7t/INC_20120410_162026496")
data.IOFactory.write(images,"/tmp/delme.nii")

But only because images is ImageList:

images?
Type:           ImageList
Base Class:     <class 'isis.data._data.ImageList'>
String Form:    <isis.data._data.ImageList object at 0x17fea28>
Namespace:      Interactive
Length:         17
File:           /tmp/isis/data/_data.so
Docstring:
    <no docstring>                                                                                                                                                                                                                          
Constructor Docstring:
    __init__( (object)arg1 [, (ImageList)arg2]) -> None :                                                                                                                                                                                   

        C++ signature :
            void __init__(_object* [,std::list<isis::data::Image, std::allocator<isis::data::Image> >])

But using a normal list will fail:


imgs=[]
for i in images:imgs.append(i)
data.IOFactory.write(imgs,"/tmp/delme.nii")
---------------------------------------------------------------------------
ArgumentError                             Traceback (most recent call last)

/tmp/boost_1_49_0/<ipython console> in <module>()

ArgumentError: Python argument types in
    IOFactory.write(list, str)
did not match C++ signature:
    write(std::list<isis::data::Image, std::allocator<isis::data::Image> > {lvalue} images, std::string path)
    write(std::list<isis::data::Image, std::allocator<isis::data::Image> > {lvalue} images, std::string path, std::basic_string<char, isis::util::_internal::ichar_traits, std::allocator<char> > suffix_override)
    write(std::list<isis::data::Image, std::allocator<isis::data::Image> > {lvalue} images, std::string path, std::basic_string<char, isis::util::_internal::ichar_traits, std::allocator<char> > suffix_override, std::basic_string<char, isis::util::_internal::ichar_traits, std::allocator<char> > dialect)
    write(isis::data::Image image, std::string path)
    write(isis::data::Image image, std::string path, std::basic_string<char, isis::util::_internal::ichar_traits, std::allocator<char> > suffix_override)
    write(isis::data::Image image, std::string path, std::basic_string<char, isis::util::_internal::ichar_traits, std::allocator<char> > suffix_override, std::basic_string<char, isis::util::_internal::ichar_traits, std::allocator<char> > dialect)

This is bad ..

DerOrfa commented 12 years ago

PS: Why is there an ImageList anyway ? Wouldn't it be better to allways use a python list ?