def _Worldline_getCoord(self, t, *arrays): if isinstance(t, core.array_double) or numpy.isscalar(t): core._core.Worldline_getCoord(self, t, *arrays) else: sizes = numpy.asarray([v.size for v in arrays]) if not (sizes == t.size).all(): raise ValueError('all arrays must be the same size') core._core.Worldline_getCoord( self, core.array_double_fromnumpy1(t), t.size, *[core.array_double_fromnumpy1(v) for v in arrays])
def _Worldline_getCartesian(self, t=None, *arrays): # if no time provided, return all computed coordinates if t is None: n = self.get_nelements() t = numpy.empty(n) self.get_t(t) x = numpy.empty(n) y = numpy.empty(n) z = numpy.empty(n) xprime = numpy.empty(n) yprime = numpy.empty(n) zprime = numpy.empty(n) _Worldline_getCartesian(self, t, x, y, z, xprime, yprime, zprime) return t, x, y, z, xprime, yprime, zprime # if t is provided, return 8-coord for this time. t can be index or time. if not len(arrays): scalarcase = False if numpy.isscalar(t): scalarcase = True if numpy.issubdtype(type(t), numpy.integer): n = self.get_nelements() ta = numpy.empty(n) self.get_t(ta) if t >= 0: t = ta[t] else: t = ta[n + t] t = numpy.full(1, t) n = t.size x = numpy.empty(n) y = numpy.empty(n) z = numpy.empty(n) xprime = numpy.empty(n) yprime = numpy.empty(n) zprime = numpy.empty(n) _Worldline_getCartesian(self, t, x, y, z, xprime, yprime, zprime) if scalarcase: return numpy.asarray( [t, x[0], y[0], z[0], xprime[0], yprime[0], zprime[0]]) else: return t, x, y, z, xp, yp, zp # if t is a gyoto.core.array_double, call low-level C++ function if isinstance(t, core.array_double): core._core.Worldline_getCartesian(self, t, *arrays) # else fill pre-allocated arrays else: sizes = numpy.asarray([v.size for v in arrays]) if not (sizes == t.size).all(): raise ValueError('all arrays must be the same size') core._core.Worldline_getCartesian( self, core.array_double_fromnumpy1(t), t.size, *[core.array_double_fromnumpy1(v) for v in arrays])
def _Worldline_getCoord(self, t, *arrays): # if no time provided, return all computed coordinates if t is None: n=self.get_nelements() t=numpy.empty(n) self.get_t(t) x=numpy.empty(n) y=numpy.empty(n) z=numpy.empty(n) tdot=numpy.empty(n) xdot=numpy.empty(n) ydot=numpy.empty(n) zdot=numpy.empty(n) _Worldline_getCoord(self, t, x, y, z, tdot, xdot, ydot, zdot) return t, x, y, z, tdot, xdot, ydot, zdot # if t is provided, return 8-coord for this time. t can be index or time. if numpy.isscalar(t) and not len(arrays): if numpy.issubdtype(type(t), numpy.integer): n=self.get_nelements() ta=numpy.empty(n) self.get_t(ta) if t >= 0: t=ta[t] else: t=ta[n+t] ta=numpy.full(1, t) x=numpy.empty(1) y=numpy.empty(1) z=numpy.empty(1) tdot==numpy.empty(1) xdot=numpy.empty(1) ydot=numpy.empty(1) zdot=numpy.empty(1) _Worldline_getCoord(self, ta, x, y, z, tdot, xdot, ydot, zdot) return numpy.asarray([t, x[0], y[0], z[0], tdot[0], xdot[0], ydot[0], zdot[0]]) # if t is a gyoto.core.array_double, call low-level C++ function if isinstance(t, core.array_double) or numpy.isscalar(t) : core._core.Worldline_getCoord(self, t, *arrays) # else fill pre-allocated arrays else: sizes=numpy.asarray([v.size for v in arrays]) if not (sizes == t.size).all(): raise ValueError('all arrays must be the same size') core._core.Worldline_getCoord( self, core.array_double_fromnumpy1(t), t.size, *[core.array_double_fromnumpy1(v) for v in arrays] )