Hi Petrus, > On Jan 14, 2014, at 4:24, Petrus Hyvönen <petrus.hyvo...@gmail.com> wrote: > > Dear Andi, > > Many many thanks for looking into this! > > I am on travel for a week and do not have the computer with the special case > with me to test. I did now however run it on the library that I am wrapping, > and there get some errors in the creation of the wrapped module (orekit): > > build/_orekit/__wrap__.cpp:86504:89: error: no member named > 'HarmonicOscillator$Parametric$$Type' in namespace
I believe I fixed this bug in rev 1557613, header files for classes for inherited fixed parameters were not included as required. Andi.. > 'org::apache::commons::math3::analysis::function' > ...= > &::org::apache::commons::math3::analysis::function::PY_TYPE(HarmonicOs... > ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ > /Users/petrus/anaconda/lib/python2.7/site-packages/JCC-2.18-py2.7-macosx-10.5-x86_64.egg/jcc/sources/macros.h:66:23: > note: > expanded from macro 'PY_TYPE' > #define PY_TYPE(name) name##$$Type > ^ > <scratch space>:63:1: note: expanded from here > HarmonicOscillator$Parametric$$Type > ^ > build/_orekit/__wrap__.cpp:217752:55: error: no member named > 'OrekitMessages$$Type' in namespace 'org::orekit::errors' > self->parameters[0] = &::org::orekit::errors::PY_TYPE(OrekitMessages); > ~~~~~~~~~~~~~~~~~~~~~~~^ > /Users/petrus/anaconda/lib/python2.7/site-packages/JCC-2.18-py2.7-macosx-10.5-x86_64.egg/jcc/sources/macros.h:66:23: > note: > expanded from macro 'PY_TYPE' > #define PY_TYPE(name) name##$$Type > ^ > <scratch space>:9:1: note: expanded from here > OrekitMessages$$Type > ^ > 2 errors generated. > error: command 'gcc' failed with exit status 1 > > > > The OrekitMessages is defined as a "public enum OrekitMessages implements > Localizable { ..." > and the "public class HarmonicOscillator implements UnivariateDifferentiable, > DifferentiableUnivariateFunction". > > Maybe this says you something, I will try to test more and run my test case > in . > > Best Regards and again, many thanks again! > /petrus > > > > > >> On 11 Jan 2014, at 14:23 , Andi Vajda <va...@apache.org> wrote: >> >> >> Hi Petrus, >> >>> On Mon, 30 Dec 2013, Petrus Hyvönen wrote: >>> >>> Andi, great to hear that you could reproduce it. I'm very thankful if you >>> could have a look at it, I've been struggling to understand how the >>> machinery behind this works, but far from it still.. >> >> I think I fixed the problem and added an improvement to generics support >> along the way. Please check out rev 1557423 from jcc's trunk, rebuild your >> module with it and let me know how it's working for you. >> >> The bug had to do with SimpleClass2's wrapper class missing its parameters >> slot which it should get from its superclass, SimpleClass. When calling a >> method on SimpleClass from SimpleClass2, the missing parameters in the >> wrapper's struct would cause memory to get trashed. >> >> In addition to fixing the bug, I also improved support for fixed class >> parameters. Now, if you change SimpleClass's return_null() method to return >> new Integer(12) instead, when calling it on SimpleClass2, 12 is returned >> instead of <Object: 12>. >> >> Andi.. >> >> public class SimpleClass<T> { public SimpleClass() { >> System.out.println("Created SimpleClass"); } >> public T return_null() { >> return (T) new Integer(12); >> } >> >> } >> >> >>> >>> Best Regards >>> /Petrus >>> >>> >>> >>>> On Mon, Dec 30, 2013 at 10:36 AM, Andi Vajda <va...@apache.org> wrote: >>>> >>>> >>>> On Sun, 29 Dec 2013, Petrus Hyvönen wrote: >>>> >>>> I have distilled the library that I have some trouble with and I think I >>>>> have an example that is failing due to same problem I think. I am not good >>>>> in java, but have tried to follow the logic from the library I'm wrapping. >>>>> The function of the example does not make sense in itself. >>>>> >>>>> public class SimpleClass<T> { >>>>> public SimpleClass() { >>>>> System.out.println("Created SimpleClass"); >>>>> } >>>>> public T return_null() { >>>>> return null; >>>>> } >>>>> >>>>> } >>>>> >>>>> >>>>> >>>>> public class SimpleClass2 extends SimpleClass<Integer>{ >>>>> >>>>> public SimpleClass2(){} >>>>> public void testInJava(){ >>>>> System.out.println(this.return_null()); >>>>> } >>>>> } >>>>> >>>>> >>>>> It seems to me that there is some problem with methods inherited that >>>>> returns a generic type, failing in wrapType when this is to be wrapped. >>>>> >>>>> The python script that fails: >>>>> >>>>> a= SimpleClass() >>>>> print a.return_null() >>>>> >>>>> b = SimpleClass2() >>>>> b.testInJava() >>>>> >>>>> print b.return_null() #Fails in wrapType >>>>> >>>>> I don't know if the return null is a bad thing to do in java, but the >>>>> error >>>>> seems very similar to what I experience in the larger library. I have a >>>>> skeleton of that this is slightly larger, but not returning null, but >>>>> trying to keep the lenght of example low :) >>>>> >>>>> Any comments highly appriciated :) >>>> >>>> I've been able to reproduce the problem. >>>> Thank you for providing an isolated test case ! >>>> >>>> Andi.. >>>> >>>> >>>> >>>>> best Regards >>>>> /Petrus >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>>> On Fri, Dec 27, 2013 at 6:25 PM, Andi Vajda <va...@apache.org> wrote: >>>>>> >>>>>> >>>>>> On Dec 27, 2013, at 17:36, Petrus Hyvönen <petrus.hyvo...@gmail.com> >>>>>> wrote: >>>>>> >>>>>>> >>>>>>> Dear Andi, >>>>>>> >>>>>>> I am working on debugging the failure and try to understand a bit how >>>>>>> JCC >>>>>>> works internally. I haven't gone very far but in case you have some >>>>>>> pointers from these early debugging sessions I would be very thankful. I >>>>>>> know it's complex, and I should try to make some smaller test cases, but >>>>>> I >>>>>> >>>>>>> don't really have a grasp yet where the problem might be. >>>>>>> >>>>>>> Writing this might help me also to get some structure in my thinking :) >>>>>>> >>>>>>> >>>>>>> >>>>>>> The main crash seems to be in the last line, wrapType(), of >>>>>>> __wrap__.cpp: >>>>>>> >>>>>>> static PyObject >>>>>>> >>>>>>> *t_AbstractReconfigurableDetector_withHandler(t_ >>>>>> AbstractReconfigurableDetector >>>>>> >>>>>>> *self, PyObject *arg) >>>>>>> { >>>>>>> ::org::orekit::propagation::events::handlers::EventHandler >>>>>>> a0((jobject) NULL); >>>>>>> PyTypeObject **p0; >>>>>>> ::org::orekit::propagation::events::EventDetector >>>>>>> result((jobject) NULL); >>>>>>> >>>>>>> if (!parseArg(arg, "K", >>>>>>> >>>>>>> ::org::orekit::propagation::events::handlers:: >>>>>> EventHandler::initializeClass, >>>>>> >>>>>>> &a0, &p0, >>>>>>> >>>>>>> ::org::orekit::propagation::events::handlers::t_ >>>>>> EventHandler::parameters_)) >>>>>> >>>>>>> { >>>>>>> OBJ_CALL(result = self->object.withHandler(a0)); >>>>>>> return self->parameters[0] != NULL ? >>>>>>> wrapType(self->parameters[0], result.this$) : >>>>>>> ::org::orekit::propagation::events::t_EventDetector::wrap_ >>>>>>> Object(result); >>>>>>> } >>>>>>> >>>>>>> The parameters[0] does not seem to be null, but neither is it a valid >>>>>>> object, in my debugger it says 0xbaadf00d {ob_refcnt=??? ob_type=??? >>>>>>> ob_size=??? ...} _typeobject *, wrapType is called and when trying >>>>>>> to >>>>>>> access the wrapfn it crashes. >>>>>>> >>>>>>> The main python lines are: >>>>>>> tmp1 = ElevationDetector(sta1Frame) # >>>>>> ElevationDetector >>>>>> >>>>>>> is a java public class ElevationDetector extends >>>>>>> AbstractReconfigurableDetector<ElevationDetector> >>>>>>> hand = ContinueOnEvent().of_(ElevationDetector) # a >>>>>>> java ContinueOnEvent<ElevationDetector> object >>>>>>> elDetector = tmp1.withHandler(hand) #Crash. withHandler is a method >>>>>>> that is inherited from AbstractReconfigurableDetector to >>>>>> ElevationDetector >>>>>> >>>>>>> >>>>>>> This crashes when interactively entered on the python prompt (or in >>>>>>> other >>>>>>> interactive consoles), but seems to work if executed directly without >>>>>>> interactivity. This difference makes me think that it might be something >>>>>>> with garbage collection, but don't know. >>>>>>> >>>>>>> Any comments appriciated, I know this is likely very difficult to >>>>>>> comment >>>>>>> on as it's not very encapsulated. >>>>>> >>>>>> Right, so unless you can isolate this into something I can reproduce, I'm >>>>>> afraid there isn't much I can comment. >>>>>> It is quite likely that by the time you have that reproducible test case >>>>>> ready, you also have the solution to the problem. Or I might be able to >>>>>> help then... >>>>>> >>>>>> Andi.. >>>>>> >>>>>> >>>>>>> Regards >>>>>>> /Petrus >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>>> On Sun, Dec 15, 2013 at 10:36 AM, Andi Vajda <va...@apache.org> wrote: >>>>>>>> >>>>>>>> >>>>>>>> On Dec 15, 2013, at 5:43, Petrus Hyvönen <petrus.hyvo...@gmail.com> >>>>>>>>> wrote: >>>>>>>>> >>>>>>>>> Hi Andi, >>>>>>>>> >>>>>>>>> I see your point and have now kept in the pure python domain. >>>>>>>>> >>>>>>>>> If I run my script from the shell by "python script.py" it does not >>>>>>>> crash. However if I execute it line-by-line in python it crashes (or in >>>>>>>> other tools such as ipython notebook). >>>>>>>> >>>>>>>>> All classes used are non-wrapped java classes, but I get the same >>>>>>>> effect >>>>>> >>>>>>> with classes made for python subclassing. >>>>>>>> >>>>>>>>> I am getting this on both MacOSX 64-bit python and Windows 7 32-bit >>>>>>>> python. >>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> elDetector = >>>>>>>>>>> elDetector.withHandler(ContinueOnEvent().of_(ElevationDetector)) >>>>>>>> >>>>>>>>> # >>>>>>>>> # A fatal error has been detected by the Java Runtime Environment: >>>>>>>>> # >>>>>>>>> # SIGSEGV (0xb) at pc=0x000000010005da1a, pid=3318, tid=1287 >>>>>>>>> # >>>>>>>>> # JRE version: Java(TM) SE Runtime Environment (7.0_45-b18) (build >>>>>>>> 1.7.0_45-b18) >>>>>>>> >>>>>>>>> # Java VM: Java HotSpot(TM) 64-Bit Server VM (24.45-b08 mixed mode >>>>>>>> bsd-amd64 compressed oops) >>>>>>>> >>>>>>>>> # Problematic frame: >>>>>>>>> # C [libpython2.7.dylib+0x5aa1a] PyObject_GetAttr+0x1a >>>>>>>>> # >>>>>>>>> >>>>>>>>> >>>>>>>>> from the stack it seems like there is somthing happening in "wrapType" >>>>>>>>> Stack: [0x00007fff5fb80000,0x00007fff5fc00000], >>>>>>>>> sp=0x00007fff5fbff470, >>>>>>>> free space=509k >>>>>>>> >>>>>>>>> Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, >>>>>>>> C=native code) >>>>>>>> >>>>>>>>> C [libpython2.7.dylib+0x5aa1a] PyObject_GetAttr+0x1a >>>>>>>>> C [_orekit.so+0xa80878] wrapType(_typeobject*, _jobject* >>>>>>>>> const&)+0x58 >>>>>>>>> C [_orekit.so+0x554400] >>>>>>>> >>>>>>>> org::orekit::propagation::events::t_AbstractReconfigurableDetector >>>>>> _withHandler(org::orekit::propagation::events::t_ >>>>>> AbstractReconfigurableDetector*, >>>>>> >>>>>>> _object*)+0x1c0 >>>>>>>> >>>>>>>>> >>>>>>>>> First, is the generic class assignment correct as if to write "new >>>>>>>> ContinueOnEvent<ElevationDetector>()" in java? And is it ok to use >>>>>>> regular >>>>>> >>>>>>> java objects/types? >>>>>>>> >>>>>>>>> >>>>>>>>> Any other comments to move forward highly appriciated.. Is it somehow >>>>>>>> possible to get more log what is going wrong? >>>>>>>> >>>>>>>> You could compile the whole thing for debugging, by adding --debug >>>>>>>> after >>>>>>>> 'build' in the jcc invocation and run it with gdb. >>>>>>>> >>>>>>>> If you can isolate a reproducible crash into a small test case, I can >>>>>>> also >>>>>> >>>>>>> take a look at it. >>>>>>>> >>>>>>>> Andi.. >>>>>>>> >>>>>>>> >>>>>>>>> WIth best regards >>>>>>>>> /Petrus >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>>> On 15 Dec 2013, at 2:40 , Andi Vajda <va...@apache.org> wrote: >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> On Dec 14, 2013, at 19:14, Petrus Hyvönen <petrus.hyvo...@gmail.com >>>>>>>>>> wrote: >>>>>>>> >>>>>>>>> >>>>>>>>>>> Hi, >>>>>>>>>>> >>>>>>>>>>> I'm having a problem with I think might be related to generic types, >>>>>>>>>> but not sure at all. >>>>>>>> >>>>>>>>> >>>>>>>>>>> I'm wrapping a orbit calculation library, which has been working >>>>>>>>>>> well >>>>>>>>>> but in latest version is using generic types and I'm getting some >>>>>>> problems. >>>>>> >>>>>>> The script works when executed in plain python, but fails in ipython >>>>>>>> notebook on this last line when executed as a couple of cells. >>>>>>>> >>>>>>>>> >>>>>>>>>> What is an 'ipython notebook' ? >>>>>>>>>> >>>>>>>>>> Andi., >>>>>>>>>> >>>>>>>>>> >>>>>>>>>>> The section with problem in my script is: >>>>>>>>>>> elDetector = >>>>>>>>>> ElevationDetector(sta1Frame).withConstantElevation(math. >>>>>>>> radians(5.0)) >>>>>>>> >>>>>>>>> elDetector = >>>>>>>>>> elDetector.withHandler(ContinueOnEvent().of_(ElevationDetector)) >>>>>>>> >>>>>>>>> >>>>>>>>>>> In Java it would typically look something like: >>>>>>>>>>> >>>>>>>>>>> ElevationDetector detector = new ElevationDetector(topo) >>>>>>>>>>> .withConstantElevation(x) >>>>>>>>>>> .withHandler(new >>>>>>>>>> ContinueOnEvent<ElevationDetector>()); >>>>>>>> >>>>>>>>> >>>>>>>>>>> It produces correct results in plain python, but crashes the kernel >>>>>>>>>> in >>>>>> >>>>>>> ipython if executed as cells, and in exection from spyder I get an error >>>>>>>> message: >>>>>>>> >>>>>>>>> >>>>>>>>>>> " elDetector = >>>>>>>>>> elDetector.withHandler(ContinueOnEvent().of_(ElevationDetector)) >>>>>>>> >>>>>>>>> AttributeError: 'str' object has no attribute 'wrapfn_' " >>>>>>>>>>> >>>>>>>>>>> As I have been using this setup stabely with lots of other functions >>>>>>>>>> it feels like there is something with the generic type line, but I >>>>>>>> don't >>>>>>>> really know how to get any further? I'm confused by that the pauses in >>>>>>> the >>>>>> >>>>>>> execution could seem to affect the result. >>>>>>>> >>>>>>>>> >>>>>>>>>>> Any comments highly appriciated... >>>>>>>>>>> >>>>>>>>>>> Best Regards >>>>>>>>>>> /Petrus >>>>>>> >>>>>>> >>>>>>> -- >>>>>>> _____________________________________________ >>>>>>> Petrus Hyvönen, Uppsala, Sweden >>>>>>> Mobile Phone/SMS:+46 73 803 19 00 >>>>> >>>>> >>>>> -- >>>>> _____________________________________________ >>>>> Petrus Hyvönen, Uppsala, Sweden >>>>> Mobile Phone/SMS:+46 73 803 19 00 >>> >>> >>> -- >>> _____________________________________________ >>> Petrus Hyvönen, Uppsala, Sweden >>> Mobile Phone/SMS:+46 73 803 19 00 >