Major trouble with Python unit is fixed.
The problem is that, with the recent C::E source, the class hierarchy has been heavily changed, and the .i files in the unit_PYTHON did not reflect the actual hierarchy.
But the big trouble is that the new class hierarchy of C::E has some multiple inheritances in classes, and this caused the python wrapper to fail.
Basically, the default behaviour of pointer casting of function args in SWIG did a void* reinterpret_cast that previously was working (luckily) but now this is not possible anymore because a following reinterpret_cast to custom classes might cause a 'slicing' in the class offsets (vtables of classes with multiple inheritance is not guaranteed to be aligned to offset 0 !)
So the workaround is to adopt custom typemaps where the shared pointers get converted in SWIG_ConvertPtr using an intermediate ChSharedPtr<> of the proper base class, then it is passed to the function wrapper, then it is deleted.
Last but least, the %DefChSharedPtr() macro can be called in a smarter way.
Improvement to the Python wrapper: the ChSharedPtr<> objects that are passed by pointers or references are subject to pointer casting via an intermediate ChSharedPtr<> (as when passed by value) for handshaking the types and bringing correct casting along the process, that can be critical with classes with multiple C++ inheritance).
Also, typecheck is done in a customized way too.
See boost_shared_ptr.i in SWIG, to whom the entire shared ptr stuff is inspired.