← Back to team overview

dolfin team mailing list archive

Re: Release

 


Johan Hake wrote:
> On Tuesday 01 December 2009 11:06:43 you wrote:
>> Anders Logg wrote:
>>> On Tue, Dec 01, 2009 at 09:59:18AM -0800, Johan Hake wrote:
>>>> On Tuesday 01 December 2009 00:45:50 Anders Logg wrote:
>>>>> Would it help to add a new class on the C++ side that is used only for
>>>>> passing array data back and forth between C++ and Python? We have had
>>>>> this before (SimpleArray) and it would be fairly easy to extend the
>>>>> C++ with extra functions in the interface that use SimpleArray instead
>>>>> of std::vector.
>>>>>
>>>>> Then perhaps we can have one single typemap that hits SimpleArray
>>>>> everywhere and converts it to a NumPy array.
>>>> Yes, something in that direction is what I had in mind. In addition we
>>>> could also add a foo.array() function to get a NumPy view from this
>>>> class. This would be nice when we do not want to have all the
>>>> communication through typemaps, but actually using the SimpleArray in
>>>> Python as return argument from some function that wants to resize the
>>>> array.
>>>>
>>>> We would also need some stuff to handle memory management.
>>>>
>>>> I see two fundamental ways such a class could be used:
>>>>   1) A replacement for the previous use of double/uint/int*, now
>>>> std::vector 2) A replacement for communication using std::vector where
>>>> resize flexibility is needed.
>>>>
>>>> I think 1, speaks for it self. 2 is where we need to resize any passed
>>>> vector. This goes for GenericMatrix.getrow, foo.intersection,
>>>> GenericFunction.comput_vertex_values.
>>>>
>>>>> And the work would be to add the extra stuff on the C++ side. The
>>>>> advantage would be less complex wrapper code and that Garth and I
>>>>> are capable of handling the complexities on the C++ side.
>>>> Yes this must be a goal. I agree that the present SWIG situation has
>>>> grown out of hands.
>>>>
>>>>> But what I don't understand is why it would be easier to write a
>>>>> typemap for SimpleArray than for std::vector. Both of them use
>>>>> contiguous memory.
>>>> Yes, but in std::vector it is now way, I suppose, to prevent a vector to
>>>> delete its data when it goes out of scope. This is necessary in a
>>>> typical in typemap.
>>> ok, let's create a very flexible array class that is targeted at
>>> simple communication between C++ and Python/NumPy. We had a class
>>> before named SimpleArray. We might call it NumPyArray or PythonArray.
>> Can we just call it Array? It will be visible in the C++ interface (e.g.
>> in eval) so it would be good to have a nice name.
> 
> Agree.
> 
>>> I have created a blueprint:
>>>
>>> https://blueprints.launchpad.net/dolfin/+spec/array-typemaps
>> I'll add something. I was thinking already about this. With a smart
>> pointer to the underlying data we should be to devise an elegant memory
>> model and be able to tell an Array object when it does and doesn't own
>> the data upon construction, and be able to change during execution.
> 
> Sounds fancy.
> 
>>> We can fill out the details together.
>>>
>>>> I will fix the interface of getrow this evening. I was about to do it
>>>> yesterday, but instead I got grumpy :) But a good night sleep makes
>>>> wonders!
>>> Good! :-)
>>>
>>> Will you make a fast/temporary fix so that we can get ready for a
>>> release of 0.9.5 and then we can move the PythonArray implementation
>>> to a future release?
>> The fast fix would be revert back to the
>>
>>     eval(double*, std::vector<double>&)
>>
>> interface. No point wasting time on typemaps for std::vector if we're
>> not going to use them.
> 
> Fell free to make this change, I have a fool proof plan for the other 
> temporary fix though. No new typemaps, just reusing old ones. 
> 

OK, we need to make a decision.

Option 1: Revert changes to eval.

Option 2: Get SWIG working with the eval(std::vector<double>&, const
std::vector<double>&) interface.

What's it going to be? I'm inclined to Option 1 since it requires no
work and it's been well tested.

Garth

> Johan
> 
>> Garth
>>
>>> --
>>> Anders



Follow ups

References