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:gn...@cam.ac.uk] > >>>>>>>> Sent: Wed 04.08.2010 19:07 > >>>>>>>> To: johan.h...@gmail.com > >>>>>>>> Cc: Riesen Patrick; dolfin@lists.launchpad.net > >>>>>>>> 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@lists.launchpad.net > > Unsubscribe : https://launchpad.net/~dolfin > > More help : https://help.launchpad.net/ListHelp > > _______________________________________________ > Mailing list: https://launchpad.net/~dolfin > Post to : dolfin@lists.launchpad.net > Unsubscribe : https://launchpad.net/~dolfin > More help : https://help.launchpad.net/ListHelp _______________________________________________ Mailing list: https://launchpad.net/~dolfin Post to : dolfin@lists.launchpad.net Unsubscribe : https://launchpad.net/~dolfin More help : https://help.launchpad.net/ListHelp