Hi, I am getting inconsistent results and think I may be onto something. I am doing builds both locally and in a online build server, where there should be no old versions around. But both locally and there the results between different runs varies even on same platforms. Sometimes I get the right return type and for some builds and the same function returns its parents for other build (same platform).
I have looked at the generated code and there seems to be a difference in the order of the parameter checking from the working vs non-working (no big statistical ground however). For the working one, the child class type is checked before the parent. Could it be that the parseArgs function gets a positive match when comparing child with the parent? Faulty return type (returns PVCoordinates type on TimeStampedPVCoordinates input) ::org::orekit::utils::PVCoordinates a0((jobject) NULL); ::org::orekit::utils::PVCoordinates result((jobject) NULL); if (!parseArgs(args, "k", ::org::orekit::utils::PVCoordinates::initializeClass, &a0)) { OBJ_CALL(result = self->object.transformPVCoordinates(a0)); return ::org::orekit::utils::t_PVCoordinates::wrap_Object (result); } } { ::org::orekit::utils::TimeStampedPVCoordinates a0((jobject) NULL ); ::org::orekit::utils::TimeStampedPVCoordinates result((jobject) NULL); if (!parseArgs(args, "k", ::org::orekit::utils::TimeStampedPVCoordinates::initializeClass, &a0)) { OBJ_CALL(result = self->object.transformPVCoordinates(a0)); // Här är det det räknas ut return ::org::orekit::utils::t_TimeStampedPVCoordinates:: wrap_Object(result); } } And corresponding code in a build that works: (TimeStampedPVCoordinates as parameter gets return type TimeStampedPVCoordinates) static PyObject *t_Transform_transformPVCoordinates(t_Transform *self, PyObject *args) { switch (PyTuple_GET_SIZE(args)) { case 1: { ::org::orekit::utils::FieldPVCoordinates a0((jobject) NULL); PyTypeObject **p0; ::org::orekit::utils::FieldPVCoordinates result((jobject) NULL); if (!parseArgs(args, "K", ::org::orekit::utils::FieldPVCoordinates::initializeClass, &a0, &p0, ::org::orekit::utils::t_FieldPVCoordinates::parameters_)) { OBJ_CALL(result = self->object.transformPVCoordinates(a0)); return ::org::orekit::utils::t_FieldPVCoordinates::wrap_Object(result); } } { ::org::orekit::utils::TimeStampedPVCoordinates a0((jobject) NULL); ::org::orekit::utils::TimeStampedPVCoordinates result((jobject) NULL); if (!parseArgs(args, "k", ::org::orekit::utils::TimeStampedPVCoordinates::initializeClass, &a0)) { OBJ_CALL(result = self->object.transformPVCoordinates(a0)); return ::org::orekit::utils::t_TimeStampedPVCoordinates::wrap_Object (result); } } { ::org::orekit::utils::TimeStampedFieldPVCoordinates a0((jobject) NULL); PyTypeObject **p0; ::org::orekit::utils::TimeStampedFieldPVCoordinates result((jobject) NULL); if (!parseArgs(args, "K", ::org::orekit::utils::TimeStampedFieldPVCoordinates::initializeClass, &a0, &p0, ::org::orekit::utils::t_TimeStampedFieldPVCoordinates::parameters_)) { OBJ_CALL(result = self->object.transformPVCoordinates(a0)); return ::org::orekit::utils::t_TimeStampedFieldPVCoordinates::wrap_Object (result); } } { ::org::orekit::utils::PVCoordinates a0((jobject) NULL); ::org::orekit::utils::PVCoordinates result((jobject) NULL); if (!parseArgs(args, "k", ::org::orekit::utils::PVCoordinates::initializeClass, &a0)) { OBJ_CALL(result = self->object.transformPVCoordinates(a0)); return ::org::orekit::utils::t_PVCoordinates::wrap_Object(result); } } } I guess there could be a zillion other reasons as well, but this would fit with the random character on when it would work. I have tried to understand the parseArgs function but it is hard. Any comments welcome... With Best Regards /Petrus On Sat, Apr 6, 2019 at 3:58 AM Andi Vajda <va...@apache.org> wrote: > Are you sure you're running the code you think you're running ? Your > description sounds like an old version of something may be picked up > instead. > > Andi.. > > > On Apr 5, 2019, at 15:04, Petrus Hyvönen <petrus.hyvo...@gmail.com> > wrote: > > > > Hi, > > > > I am having some confusing time with a wrapped class. > > > > The class "Transform" has a function transformPVCoordinates() that has > > different options for input parameters. One of these are > > TimeStampedPVCoordinates. It is supposed to return a > > TimeStampedPVCoordinates object but returns instead a PVCoodinates object > > that is its parent class. I cannot cast this to TimeStampedPVCoordinates, > > gets an error. On most systems. On python 2.7 it works and only 3.6 under > > linux (testing for max, linux and win). It worked also in Python 3.7 on > > mac/windows for the JCC 3.0 version. > > > > I've checked the code being generated, and the return type and parameter > > type of TimeStampedPVCoord are there, both in c code and .h file. > > > > How/where is the matching of parameters from python call done? I get a > > feeling that the parent class is somehow used, but not shure how to > > troubleshoot this... > > > > 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