← Back to team overview

dolfin team mailing list archive

Re: python: xml read for vector / std::vector : what about xml for matrix

 

On Tuesday August 10 2010 04:02:06 Patrick Riesen wrote:
> hello,
> 
> ehm, i just noticed the same problem for writing out a Matrix to XML
> from c++ and then reading it in again in PyDolfin:
> 
> in python, the read-in fails:
> fn = "matrixdata.xml"
> df = File(fn)
> 
> data = Matrix()
> df >> data
> 
> gives:
> RuntimeError: *** Error: Handler stack not empty. Something is wrong!

This should be wrapped to Python. Have you checked that it works in C++?

Johan

> greetings,
> patrick
> 
> Anders Logg wrote:
> > On Fri, Aug 06, 2010 at 01:37:12PM -0700, Johan Hake wrote:
> >> On Friday August 6 2010 12:10:34 Anders Logg wrote:
> >>> On Fri, Aug 06, 2010 at 07:57:52PM +0100, Garth N. Wells wrote:
> >>>> On Fri, 2010-08-06 at 11:55 -0700, Johan Hake wrote:
> >>>>> On Friday August 6 2010 11:48:37 Anders Logg wrote:
> >>>>>> On Wed, Aug 04, 2010 at 05:06:57PM -0700, Johan Hake wrote:
> >>>>>>> On Wednesday August 4 2010 13:09:47 Riesen Patrick wrote:
> >>>>>>>> -----Original Message-----
> >>>>>>>> From: Garth N. Wells [mailto:gnw20@xxxxxxxxx]
> >>>>>>>> Sent: Wed 04.08.2010 19:07
> >>>>>>>> To: johan.hake@xxxxxxxxx
> >>>>>>>> Cc: Riesen  Patrick; dolfin@xxxxxxxxxxxxxxxxxxx
> >>>>>>>> Subject: Re: [Dolfin] python: xml read for vector / std::vector
> >>>>>>>> 
> >>>>>>>> On Wed, 2010-08-04 at 10:03 -0700, Johan Hake wrote:
> >>>>>>>>> On Wednesday August 4 2010 09:28:22 Patrick Riesen wrote:
> >>>>>>>>>> Patrick Riesen wrote:
> >>>>>>>>>>> Johan Hake wrote:
> >>>>>>>>>>>> Patrick!
> >>>>>>>>>>>> 
> >>>>>>>>>>>> On Wednesday August 4 2010 09:13:24 Patrick Riesen wrote:
> >>>>>>>>>>>>> hello dolfin developers
> >>>>>>>>>>>>> 
> >>>>>>>>>>>>> I write out a std::vector in XML file format from cpp.
> >>>>>>>>>>>>> Can I read the XML file in again in python and construct
> >>>>>>>>>>>>> a numpy array? I know how to do it with a dolfin Vector,
> >>>>>>>>>>>>> but is it possible with a std::vector<double>? I could
> >>>>>>>>>>>>> not figure out the syntax, i tried
> >>>>>>>>>>>>> 
> >>>>>>>>>>>>> # this is ok
> >>>>>>>>>>>>> fn = File("data/norm.xml")
> >>>>>>>>>>>>> div_vec = d.Vector()
> >>>>>>>>>>>>> a = n.array((11,1))
> >>>>>>>>>>>>> 
> >>>>>>>>>>>>> # fails
> >>>>>>>>>>>>> fn >> a
> >>>>>>>>>>>>> # fails
> >>>>>>>>>>>>> fn >> div_vec.array()
> >>>>>>>>>>>> 
> >>>>>>>>>>>> Have you tried:
> >>>>>>>>>>>>   fn >> div_vec
> >>>>>>>>>>>>   a = div_vec.array()
> >>>>>>>>>>> 
> >>>>>>>>>>> yes, that gives the error:
> >>>>>>>>>>> *** Error: Handler stack not empty. Something is wrong!
> >>>>>>>>> 
> >>>>>>>>> The format is then different for the Vector XML file and the
> >>>>>>>>> std::vector file?
> >>>>>>>>> 
> >>>>>>>>>> if i write out a dolfin::Vector in xml, it's all fine with:
> >>>>>>>>>> 
> >>>>>>>>>> fn = File("data/norm.xml")
> >>>>>>>>>> div_vec = d.Vector()
> >>>>>>>>>> fn >> div_vec
> >>>>>>>>>> a = div_vec.array()
> >>>>>>>>>> 
> >>>>>>>>>> but if i write out a std::vector<double> in xml, I can't read
> >>>>>>>>>> it in.
> >>>>>>>>> 
> >>>>>>>>> Silly question from a Python user:
> >>>>>>>>>   How do you write the std::vector to a XML file?
> >>>>>>>> 
> >>>>>>>> You don't ;);
> >>>>>>>> 
> >>>>>>>> DOLFIN does. It's overloaded in the XMLFile class.
> >>>>>>>> Well, anyway, i thought if dolfin can write out a std::vector to
> >>>>>>>> xml via File/XMLFile, pydolfin can also read it in, but
> >>>>>>>> obviously not.
> >>>>>>> 
> >>>>>>> I think you stumble across some unused code there. I am not sure
> >>>>>>> but I think Ola implemented this for some debugging of the
> >>>>>>> parallel interface. But I am not sure actually.
> >>>>>>> 
> >>>>>>> If we had a typemap for std::vector <-> numpy array (which we could
> >>>>>>> have, but
> >>>>>>> 
> >>>>>>> desided we did not want...) we sould be able to do:
> >>>>>>>   somefile >> array
> >>>>>>>   somefile << array
> >>>>>>> 
> >>>>>>> Where somefile will be file generated by XMLArray, which probably
> >>>>>>> define a different XML interfaces than XMLVector.
> >>>>>> 
> >>>>>> Input/output is implemented for the Array class so it would be
> >>>>>> appropriate to use that. It was implemented to handle input/output
> >>>>>> for parallel mesh data (stored in the data section of a mesh as
> >>>>>> MeshFunctions, Arrays and maps).
> >>>>> 
> >>>>> Ok
> >>>>> 
> >>>>>> Can someone remind me of why we don't have a typemap for numpy.array
> >>>>>> and dolfin::Array? Or what am I missing here?
> >>>>> 
> >>>>> We have that, but the XMLArray read and writes  std::vector, which
> >>>>> typemaps we decided to ditch.
> >>>> 
> >>>> The best solution is to use dolfin::Array in XMLArray. It will also
> >>>> simplify io of dolfin::Vector.
> >>> 
> >>> Aha. I missed that. I suggest we support input/output for both
> >>> dolfin::Array and std::vector. It should be possible to implement
> >>> with a good deal of code reuse.
> >> 
> >> Another thing, is it anything that prevent us to harmonize the xml
> >> format of an XMLArray and an XMLVector? Any potential issues during
> >> parallel? If so one should be able to do what Patrick did in the first
> >> place.
> >> 
> >>> Speaking of which, would it be possible to add a constructor to
> >>> dolfin::Array that takes a std::vector?
> >>> 
> >>>   std::vector<int> x(10);
> >>>   
> >>>   dolfin::Array<int> xx(x);
> >>> 
> >>> ?
> >>> 
> >>> I have been missing that on a few occasions.
> >> 
> >> That should be possible with copying of data of course.
> > 
> > I meant without copying. Isn't that one of the main points with the
> > Array class that it is flexible in terms of ownership?
> > 
> > --
> > Anders
> > 
> > 
> > ------------------------------------------------------------------------
> > 
> > _______________________________________________
> > Mailing list: https://launchpad.net/~dolfin
> > Post to     : dolfin@xxxxxxxxxxxxxxxxxxx
> > Unsubscribe : https://launchpad.net/~dolfin
> > More help   : https://help.launchpad.net/ListHelp
> 
> _______________________________________________
> Mailing list: https://launchpad.net/~dolfin
> Post to     : dolfin@xxxxxxxxxxxxxxxxxxx
> Unsubscribe : https://launchpad.net/~dolfin
> More help   : https://help.launchpad.net/ListHelp



References