← Back to team overview

dolfin team mailing list archive

Re: Hierarchical wrapping troubles

 

On Tue, Feb 01, 2011 at 11:35:28PM +0000, Garth N. Wells wrote:
>
>
> On 01/02/11 23:19, Johan Hake wrote:
> > On Tuesday February 1 2011 15:14:21 Anders Logg wrote:
> >> On Tue, Feb 01, 2011 at 03:12:05PM -0800, Johan Hake wrote:
> >>> On Tuesday February 1 2011 14:53:55 Anders Logg wrote:
> >>>> Something seems to go wrong with the Hierarchical Python wrappers.
> >>>>
> >>>> C++ program:
> >>>>   UnitSquare mesh(3, 3);
> >>>>   mesh._debug();
> >>>>
> >>>> Output:
> >>>>
> >>>> Debugging hierarchical object.
> >>>>
> >>>>   has_parent()    = 0
> >>>>   _parent.get()   = 0
> >>>>   _parent.count() = 0
> >>>>   has_child()     = 0
> >>>>   _child.get()    = 0
> >>>>   _child.count()  = 0
> >>>>
> >>>> Debugging hierarchical object.
> >>>>
> >>>>   has_parent()    = 0
> >>>>   _parent.get()   = 0
> >>>>   _parent.count() = 0
> >>>>   has_child()     = 0
> >>>>   _child.get()    = 0
> >>>>   _child.count()  = 0
> >>>>
> >>>> Python program:
> >>>>   mesh = UnitSquare(3, 3)
> >>>>   mesh._debug()
> >>>>
> >>>> Debugging hierarchical object.
> >>>>
> >>>>   has_parent()    = 0
> >>>>   _parent.get()   = 0
> >>>>   _parent.count() = 0
> >>>>   has_child()     = 0
> >>>>   _child.get()    = 0
> >>>>   _child.count()  = 0
> >>>>
> >>>> Debugging hierarchical object.
> >>>>
> >>>>   has_parent()    = 1
> >>>>   _parent.get()   = cbd47290
> >>>>   _parent.count() = -878438560
> >>>>   has_child()     = 1
> >>>>   _child.get()    = cbd47290
> >>>>   _child.count()  = -878438560
> >>>>
> >>>> The first call to Hierarchical::_debug is made from the constructor of
> >>>> Hierarchical and is correct in both C++ and Python, but then the
> >>>> Python object seems to lose contact with the reality.
> >>>
> >>> Yes quite so...
> >>>
> >>> I changed locally to swig 2.0 and the problem went away. shared_ptr
> >>> support has been rewritten in 2.0. I might be able to hack the interface
> >>> of Hierarchical in a similar manner as I did for Variables. Just
> >>> implementing the interface again in the C++ layer.
> >>>
> >>> But I am not sure. The shared_ptr part of the SWIG interface starts to be
> >>> quite complex now with supporting SWIG version 1.3.37 to 1.3.40 and 2.0
> >>>
> >>> Maybe we should force SWIG 2.0?
> >>
> >> Is that possible? It's not in Ubuntu yet, or is it?
> >
>
> It's in 11.04
>
> Swig is super easy to install.

If we can include SWIG installation in Dorsal and Johannes is able to
make packages that rely on SWIG 2.0 then we might as well move to 2.0
to save us (mainly Johan) a lot of trouble.

--
Anders



Follow ups

References