def _add_jacobian_getters()

in scripts/gen_wrappers.py [0:0]


def _add_jacobian_getters(obj_type):
    cap_type = obj_type.title()   # Capitalized
    code = '''
    @property
    def {obj_type}_jacp(self):
        jacps = np.zeros((self._model.n{obj_type}, 3 * self._model.nv))
        cdef double [:] jacp_view
        for i, jacp in enumerate(jacps):
            jacp_view = jacp
            mj_jac{cap_type}(self._model.ptr, self.ptr, &jacp_view[0], NULL, i)
        return jacps

    @property
    def {obj_type}_jacr(self):
        jacrs = np.zeros((self._model.n{obj_type}, 3 * self._model.nv))
        cdef double [:] jacr_view
        for i, jacr in enumerate(jacrs):
            jacr_view = jacr
            mj_jac{cap_type}(self._model.ptr, self.ptr, NULL, &jacr_view[0], i)
        return jacrs

    @property
    def {obj_type}_xvelp(self):
        jacp = self.{obj_type}_jacp.reshape((self._model.n{obj_type}, 3, self._model.nv))
        xvelp = np.dot(jacp, self.qvel)
        return xvelp

    @property
    def {obj_type}_xvelr(self):
        jacr = self.{obj_type}_jacr.reshape((self._model.n{obj_type}, 3, self._model.nv))
        xvelr = np.dot(jacr, self.qvel)
        return xvelr\n'''.format(obj_type=obj_type, cap_type=cap_type)
    return code