/* Generated by Pyrex 0.9.5.1a on Fri Aug  3 21:50:32 2007 */

#include "Python.h"
#include "structmember.h"
#ifndef PY_LONG_LONG
  #define PY_LONG_LONG LONG_LONG
#endif
#ifdef __cplusplus
#define __PYX_EXTERN_C extern "C"
#else
#define __PYX_EXTERN_C extern
#endif
__PYX_EXTERN_C double pow(double, double);
#include "math.h"


typedef struct {PyObject **p; char *s;} __Pyx_InternTabEntry; /*proto*/
typedef struct {PyObject **p; char *s; long n;} __Pyx_StringTabEntry; /*proto*/

static PyObject *__pyx_m;
static PyObject *__pyx_b;
static int __pyx_lineno;
static char *__pyx_filename;
static char **__pyx_f;

static int __Pyx_GetStarArgs(PyObject **args, PyObject **kwds, char *kwd_list[], int nargs, PyObject **args2, PyObject **kwds2); /*proto*/

static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list); /*proto*/

static PyObject *__Pyx_GetName(PyObject *dict, PyObject *name); /*proto*/

static PyObject *__Pyx_CreateClass(PyObject *bases, PyObject *dict, PyObject *name, char *modname); /*proto*/

static int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type); /*proto*/

static PyObject *__Pyx_UnpackItem(PyObject *); /*proto*/
static int __Pyx_EndUnpack(PyObject *); /*proto*/

static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb); /*proto*/

static PyObject *__Pyx_GetExcValue(void); /*proto*/

static int __Pyx_InternStrings(__Pyx_InternTabEntry *t); /*proto*/

static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); /*proto*/

static PyTypeObject *__Pyx_ImportType(char *module_name, char *class_name, long size);  /*proto*/

static int __Pyx_GetVtable(PyObject *dict, void *vtabptr); /*proto*/

static int __Pyx_SetVtable(PyObject *dict, void *vtable); /*proto*/

static void __Pyx_AddTraceback(char *funcname); /*proto*/

/* Declarations from anims */


struct __pyx_obj_5anims_Anim {
  PyObject_HEAD
  struct __pyx_vtabstruct_5anims_Anim *__pyx_vtab;
};

struct __pyx_vtabstruct_5anims_Anim {
  float ((*g)(struct __pyx_obj_5anims_Anim *));
};
static struct __pyx_vtabstruct_5anims_Anim *__pyx_vtabptr_5anims_Anim;


struct __pyx_obj_5anims_AnimConst {
  struct __pyx_obj_5anims_Anim __pyx_base;
  float v;
};

struct __pyx_vtabstruct_5anims_AnimConst {
  struct __pyx_vtabstruct_5anims_Anim __pyx_base;
};
static struct __pyx_vtabstruct_5anims_AnimConst *__pyx_vtabptr_5anims_AnimConst;

static PyTypeObject *__pyx_ptype_5anims_Anim = 0;
static PyTypeObject *__pyx_ptype_5anims_AnimConst = 0;

/* Declarations from rabbyt.physics */

typedef struct {
  float x;
  float y;
} __pyx_t_6rabbyt_7physics_cpVect;

typedef struct {
  float m;
  float m_inv;
  float i;
  float i_inv;
  __pyx_t_6rabbyt_7physics_cpVect p;
  __pyx_t_6rabbyt_7physics_cpVect v;
  __pyx_t_6rabbyt_7physics_cpVect f;
  __pyx_t_6rabbyt_7physics_cpVect v_bias;
  float a;
  float w;
  float t;
  float w_bias;
  __pyx_t_6rabbyt_7physics_cpVect rot;
} __pyx_t_6rabbyt_7physics_cpBody;


struct __pyx_obj_6rabbyt_7physics_Basic1 {
  struct __pyx_obj_5anims_Anim __pyx_base;
  PyObject *__weakref__;
  float _p;
  float _v;
  struct __pyx_obj_5anims_Anim *_a;
};

struct __pyx_vtabstruct_6rabbyt_7physics_Basic1 {
  struct __pyx_vtabstruct_5anims_Anim __pyx_base;
  void ((*_update)(struct __pyx_obj_6rabbyt_7physics_Basic1 *,float ));
};
static struct __pyx_vtabstruct_6rabbyt_7physics_Basic1 *__pyx_vtabptr_6rabbyt_7physics_Basic1;


struct __pyx_obj_6rabbyt_7physics_Basic2 {
  PyObject_HEAD
  PyObject *__weakref__;
  struct __pyx_obj_6rabbyt_7physics_Basic1 *_x;
  struct __pyx_obj_6rabbyt_7physics_Basic1 *_y;
};


struct __pyx_obj_6rabbyt_7physics__ChipmonkBodyX {
  struct __pyx_obj_5anims_Anim __pyx_base;
  __pyx_t_6rabbyt_7physics_cpBody (*body);
};

struct __pyx_vtabstruct_6rabbyt_7physics__ChipmonkBodyX {
  struct __pyx_vtabstruct_5anims_Anim __pyx_base;
};
static struct __pyx_vtabstruct_6rabbyt_7physics__ChipmonkBodyX *__pyx_vtabptr_6rabbyt_7physics__ChipmonkBodyX;


struct __pyx_obj_6rabbyt_7physics__ChipmonkBodyY {
  struct __pyx_obj_5anims_Anim __pyx_base;
  __pyx_t_6rabbyt_7physics_cpBody (*body);
};

struct __pyx_vtabstruct_6rabbyt_7physics__ChipmonkBodyY {
  struct __pyx_vtabstruct_5anims_Anim __pyx_base;
};
static struct __pyx_vtabstruct_6rabbyt_7physics__ChipmonkBodyY *__pyx_vtabptr_6rabbyt_7physics__ChipmonkBodyY;


struct __pyx_obj_6rabbyt_7physics__ChipmonkBodyA {
  struct __pyx_obj_5anims_Anim __pyx_base;
  __pyx_t_6rabbyt_7physics_cpBody (*body);
};

struct __pyx_vtabstruct_6rabbyt_7physics__ChipmonkBodyA {
  struct __pyx_vtabstruct_5anims_Anim __pyx_base;
};
static struct __pyx_vtabstruct_6rabbyt_7physics__ChipmonkBodyA *__pyx_vtabptr_6rabbyt_7physics__ChipmonkBodyA;

static PyTypeObject *__pyx_ptype_6rabbyt_7physics_Basic1 = 0;
static PyTypeObject *__pyx_ptype_6rabbyt_7physics_Basic2 = 0;
static PyTypeObject *__pyx_ptype_6rabbyt_7physics__ChipmonkBodyX = 0;
static PyTypeObject *__pyx_ptype_6rabbyt_7physics__ChipmonkBodyY = 0;
static PyTypeObject *__pyx_ptype_6rabbyt_7physics__ChipmonkBodyA = 0;
static float __pyx_v_6rabbyt_7physics_pi;
static float __pyx_v_6rabbyt_7physics_pi_over_180;
static float __pyx_v_6rabbyt_7physics_oneeighty_over_pi;
static PyObject *__pyx_k16;
static PyObject *__pyx_k17;
static PyObject *__pyx_k18;
static PyObject *__pyx_k19;
static PyObject *__pyx_k20;
static PyObject *__pyx_k21;


/* Implementation of rabbyt.physics */

static char (__pyx_k1[]) = "\n        position\n        ";
static char (__pyx_k2[]) = "\n        velocity\n        ";
static char (__pyx_k3[]) = "\n        acceleration\n\n        This property accepts anims.  For example, if you want to ramp\n        up acceleration:\n\n            .. sourcecode:: python\n\n                basic_physics.a = rabbyt.lerp(0,100, dt=1000)\n        ";
static char (__pyx_k4[]) = "x position";
static char (__pyx_k5[]) = "y position";
static char (__pyx_k6[]) = "x velocity";
static char (__pyx_k7[]) = "y velocity";
static char (__pyx_k8[]) = "x acceleration";
static char (__pyx_k9[]) = "y acceleration";
static char (__pyx_k10[]) = "x and y positions";
static char (__pyx_k11[]) = "x and y velocities";
static char (__pyx_k12[]) = "x and y accelerations";
static char (__pyx_k13[]) = "rabbyt.anims";
static char (__pyx_k23[]) = "\n    ``UpdateManager()``\n\n    This is a small helper class for keeping track of physics drivers that need\n    updated.\n\n    All physics drivers are stored as weakrefs, so you don\'t need to worry about\n    removing them.\n\n    There is a global update manager at\n    ``rabbyt.physics.default_update_manager``. All physics drivers are\n    automatically added to it.\n    ";
static char (__pyx_k24[]) = "Basic1 Basic2 UpdateManager update chipmonk_body_anims";

static PyObject *__pyx_n_to_Anim;
static PyObject *__pyx_n_weakref;
static PyObject *__pyx_n_UpdateManager;
static PyObject *__pyx_n_default_update_manager;
static PyObject *__pyx_n_update;
static PyObject *__pyx_n_chipmonk_body_anims;
static PyObject *__pyx_n___docs_all__;
static PyObject *__pyx_n_object;
static PyObject *__pyx_n___init__;
static PyObject *__pyx_n_append;
static PyObject *__pyx_n_remove_ref;
static PyObject *__pyx_n_split;

static PyObject *__pyx_k13p;
static PyObject *__pyx_k23p;
static PyObject *__pyx_k24p;

static int __pyx_f_6rabbyt_7physics_6Basic1___new__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_f_6rabbyt_7physics_6Basic1___new__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_args = 0;
  PyObject *__pyx_v_kwargs = 0;
  int __pyx_r;
  PyObject *__pyx_1 = 0;
  PyObject *__pyx_2 = 0;
  static char *__pyx_argnames[] = {0};
  if (__Pyx_GetStarArgs(&__pyx_args, &__pyx_kwds, __pyx_argnames, 0, &__pyx_v_args, &__pyx_v_kwargs) < 0) return -1;
  if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "", __pyx_argnames)) {
    Py_XDECREF(__pyx_args);
    Py_XDECREF(__pyx_kwds);
    Py_XDECREF(__pyx_v_args);
    Py_XDECREF(__pyx_v_kwargs);
    return -1;
  }
  Py_INCREF((PyObject *)__pyx_v_self);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.physics.pyx":47 */
  __pyx_1 = PyFloat_FromDouble(0.0); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 47; goto __pyx_L1;}
  __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 47; goto __pyx_L1;}
  PyTuple_SET_ITEM(__pyx_2, 0, __pyx_1);
  __pyx_1 = 0;
  __pyx_1 = PyObject_CallObject(((PyObject*)__pyx_ptype_5anims_AnimConst), __pyx_2); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 47; goto __pyx_L1;}
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  if (!__Pyx_TypeTest(__pyx_1, __pyx_ptype_5anims_Anim)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 47; goto __pyx_L1;}
  Py_DECREF(((PyObject *)((struct __pyx_obj_6rabbyt_7physics_Basic1 *)__pyx_v_self)->_a));
  ((struct __pyx_obj_6rabbyt_7physics_Basic1 *)__pyx_v_self)->_a = ((struct __pyx_obj_5anims_Anim *)__pyx_1);
  __pyx_1 = 0;

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  Py_XDECREF(__pyx_2);
  __Pyx_AddTraceback("rabbyt.physics.Basic1.__new__");
  __pyx_r = -1;
  __pyx_L0:;
  Py_XDECREF(__pyx_v_args);
  Py_XDECREF(__pyx_v_kwargs);
  Py_DECREF((PyObject *)__pyx_v_self);
  Py_XDECREF(__pyx_args);
  Py_XDECREF(__pyx_kwds);
  return __pyx_r;
}

static PyObject *__pyx_n_p;
static PyObject *__pyx_n_v;
static PyObject *__pyx_n_a;

static int __pyx_f_6rabbyt_7physics_6Basic1___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6rabbyt_7physics_6Basic1___init__[] = "\n        ";
static int __pyx_f_6rabbyt_7physics_6Basic1___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_p = 0;
  PyObject *__pyx_v_v = 0;
  PyObject *__pyx_v_a = 0;
  int __pyx_r;
  PyObject *__pyx_1 = 0;
  PyObject *__pyx_2 = 0;
  PyObject *__pyx_3 = 0;
  static char *__pyx_argnames[] = {"p","v","a",0};
  __pyx_v_p = __pyx_k16;
  __pyx_v_v = __pyx_k17;
  __pyx_v_a = __pyx_k18;
  if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "|OOO", __pyx_argnames, &__pyx_v_p, &__pyx_v_v, &__pyx_v_a)) return -1;
  Py_INCREF((PyObject *)__pyx_v_self);
  Py_INCREF(__pyx_v_p);
  Py_INCREF(__pyx_v_v);
  Py_INCREF(__pyx_v_a);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.physics.pyx":52 */
  if (PyObject_SetAttr(__pyx_v_self, __pyx_n_p, __pyx_v_p) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 52; goto __pyx_L1;}

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.physics.pyx":53 */
  if (PyObject_SetAttr(__pyx_v_self, __pyx_n_v, __pyx_v_v) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 53; goto __pyx_L1;}

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.physics.pyx":54 */
  if (PyObject_SetAttr(__pyx_v_self, __pyx_n_a, __pyx_v_a) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 54; goto __pyx_L1;}

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.physics.pyx":55 */
  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_n_default_update_manager); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 55; goto __pyx_L1;}
  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_n_append); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 55; goto __pyx_L1;}
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  __pyx_1 = PyTuple_New(1); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 55; goto __pyx_L1;}
  Py_INCREF(__pyx_v_self);
  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_v_self);
  __pyx_3 = PyObject_CallObject(__pyx_2, __pyx_1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 55; goto __pyx_L1;}
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  Py_DECREF(__pyx_3); __pyx_3 = 0;

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  Py_XDECREF(__pyx_2);
  Py_XDECREF(__pyx_3);
  __Pyx_AddTraceback("rabbyt.physics.Basic1.__init__");
  __pyx_r = -1;
  __pyx_L0:;
  Py_DECREF((PyObject *)__pyx_v_self);
  Py_DECREF(__pyx_v_p);
  Py_DECREF(__pyx_v_v);
  Py_DECREF(__pyx_v_a);
  return __pyx_r;
}

static PyObject *__pyx_f_6rabbyt_7physics_6Basic1_1p___get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_f_6rabbyt_7physics_6Basic1_1p___get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r;
  PyObject *__pyx_1 = 0;
  Py_INCREF((PyObject *)__pyx_v_self);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.physics.pyx":62 */
  __pyx_1 = PyFloat_FromDouble(((struct __pyx_obj_6rabbyt_7physics_Basic1 *)__pyx_v_self)->_p); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 62; goto __pyx_L1;}
  __pyx_r = __pyx_1;
  __pyx_1 = 0;
  goto __pyx_L0;

  __pyx_r = Py_None; Py_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  __Pyx_AddTraceback("rabbyt.physics.Basic1.p.__get__");
  __pyx_r = 0;
  __pyx_L0:;
  Py_DECREF((PyObject *)__pyx_v_self);
  return __pyx_r;
}

static int __pyx_f_6rabbyt_7physics_6Basic1_1p___set__(PyObject *__pyx_v_self, PyObject *__pyx_arg_p); /*proto*/
static int __pyx_f_6rabbyt_7physics_6Basic1_1p___set__(PyObject *__pyx_v_self, PyObject *__pyx_arg_p) {
  float __pyx_v_p;
  int __pyx_r;
  Py_INCREF((PyObject *)__pyx_v_self);
  __pyx_v_p = PyFloat_AsDouble(__pyx_arg_p); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 63; goto __pyx_L1;}

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.physics.pyx":64 */
  ((struct __pyx_obj_6rabbyt_7physics_Basic1 *)__pyx_v_self)->_p = __pyx_v_p;

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1:;
  __Pyx_AddTraceback("rabbyt.physics.Basic1.p.__set__");
  __pyx_r = -1;
  __pyx_L0:;
  Py_DECREF((PyObject *)__pyx_v_self);
  return __pyx_r;
}

static PyObject *__pyx_f_6rabbyt_7physics_6Basic1_1v___get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_f_6rabbyt_7physics_6Basic1_1v___get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r;
  PyObject *__pyx_1 = 0;
  Py_INCREF((PyObject *)__pyx_v_self);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.physics.pyx":71 */
  __pyx_1 = PyFloat_FromDouble(((struct __pyx_obj_6rabbyt_7physics_Basic1 *)__pyx_v_self)->_v); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 71; goto __pyx_L1;}
  __pyx_r = __pyx_1;
  __pyx_1 = 0;
  goto __pyx_L0;

  __pyx_r = Py_None; Py_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  __Pyx_AddTraceback("rabbyt.physics.Basic1.v.__get__");
  __pyx_r = 0;
  __pyx_L0:;
  Py_DECREF((PyObject *)__pyx_v_self);
  return __pyx_r;
}

static int __pyx_f_6rabbyt_7physics_6Basic1_1v___set__(PyObject *__pyx_v_self, PyObject *__pyx_v_v); /*proto*/
static int __pyx_f_6rabbyt_7physics_6Basic1_1v___set__(PyObject *__pyx_v_self, PyObject *__pyx_v_v) {
  int __pyx_r;
  float __pyx_1;
  Py_INCREF((PyObject *)__pyx_v_self);
  Py_INCREF(__pyx_v_v);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.physics.pyx":73 */
  __pyx_1 = PyFloat_AsDouble(__pyx_v_v); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 73; goto __pyx_L1;}
  ((struct __pyx_obj_6rabbyt_7physics_Basic1 *)__pyx_v_self)->_v = __pyx_1;

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1:;
  __Pyx_AddTraceback("rabbyt.physics.Basic1.v.__set__");
  __pyx_r = -1;
  __pyx_L0:;
  Py_DECREF((PyObject *)__pyx_v_self);
  Py_DECREF(__pyx_v_v);
  return __pyx_r;
}

static PyObject *__pyx_f_6rabbyt_7physics_6Basic1_1a___get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_f_6rabbyt_7physics_6Basic1_1a___get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r;
  Py_INCREF((PyObject *)__pyx_v_self);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.physics.pyx":87 */
  Py_INCREF(((PyObject *)((struct __pyx_obj_6rabbyt_7physics_Basic1 *)__pyx_v_self)->_a));
  __pyx_r = ((PyObject *)((struct __pyx_obj_6rabbyt_7physics_Basic1 *)__pyx_v_self)->_a);
  goto __pyx_L0;

  __pyx_r = Py_None; Py_INCREF(Py_None);
  __pyx_L0:;
  Py_DECREF((PyObject *)__pyx_v_self);
  return __pyx_r;
}

static int __pyx_f_6rabbyt_7physics_6Basic1_1a___set__(PyObject *__pyx_v_self, PyObject *__pyx_v_a); /*proto*/
static int __pyx_f_6rabbyt_7physics_6Basic1_1a___set__(PyObject *__pyx_v_self, PyObject *__pyx_v_a) {
  int __pyx_r;
  PyObject *__pyx_1 = 0;
  PyObject *__pyx_2 = 0;
  PyObject *__pyx_3 = 0;
  Py_INCREF((PyObject *)__pyx_v_self);
  Py_INCREF(__pyx_v_a);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.physics.pyx":89 */
  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_n_to_Anim); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 89; goto __pyx_L1;}
  __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 89; goto __pyx_L1;}
  Py_INCREF(__pyx_v_a);
  PyTuple_SET_ITEM(__pyx_2, 0, __pyx_v_a);
  __pyx_3 = PyObject_CallObject(__pyx_1, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 89; goto __pyx_L1;}
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  if (!__Pyx_TypeTest(__pyx_3, __pyx_ptype_5anims_Anim)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 89; goto __pyx_L1;}
  Py_DECREF(((PyObject *)((struct __pyx_obj_6rabbyt_7physics_Basic1 *)__pyx_v_self)->_a));
  ((struct __pyx_obj_6rabbyt_7physics_Basic1 *)__pyx_v_self)->_a = ((struct __pyx_obj_5anims_Anim *)__pyx_3);
  __pyx_3 = 0;

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  Py_XDECREF(__pyx_2);
  Py_XDECREF(__pyx_3);
  __Pyx_AddTraceback("rabbyt.physics.Basic1.a.__set__");
  __pyx_r = -1;
  __pyx_L0:;
  Py_DECREF((PyObject *)__pyx_v_self);
  Py_DECREF(__pyx_v_a);
  return __pyx_r;
}

static PyObject *__pyx_f_6rabbyt_7physics_6Basic1_update(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6rabbyt_7physics_6Basic1_update[] = "\n        ``update(dt)``\n\n        Update the state by timestep ``dt``.\n\n        By convention, I recommend using a timestep measured in seconds, rather\n        than in milliseconds.\n        ";
static PyObject *__pyx_f_6rabbyt_7physics_6Basic1_update(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_dt = 0;
  PyObject *__pyx_r;
  float __pyx_1;
  static char *__pyx_argnames[] = {"dt",0};
  if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "O", __pyx_argnames, &__pyx_v_dt)) return 0;
  Py_INCREF((PyObject *)__pyx_v_self);
  Py_INCREF(__pyx_v_dt);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.physics.pyx":100 */
  __pyx_1 = PyFloat_AsDouble(__pyx_v_dt); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 100; goto __pyx_L1;}
  ((struct __pyx_vtabstruct_6rabbyt_7physics_Basic1 *)((struct __pyx_obj_6rabbyt_7physics_Basic1 *)__pyx_v_self)->__pyx_base.__pyx_vtab)->_update(((struct __pyx_obj_6rabbyt_7physics_Basic1 *)__pyx_v_self),__pyx_1);

  __pyx_r = Py_None; Py_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1:;
  __Pyx_AddTraceback("rabbyt.physics.Basic1.update");
  __pyx_r = 0;
  __pyx_L0:;
  Py_DECREF((PyObject *)__pyx_v_self);
  Py_DECREF(__pyx_v_dt);
  return __pyx_r;
}

static void __pyx_f_6rabbyt_7physics_6Basic1__update(struct __pyx_obj_6rabbyt_7physics_Basic1 *__pyx_v_self,float __pyx_v_dt) {
  float __pyx_v_a;
  float __pyx_v_v;
  Py_INCREF((PyObject *)__pyx_v_self);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.physics.pyx":106 */
  __pyx_v_v = __pyx_v_self->_v;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.physics.pyx":107 */
  __pyx_v_a = ((struct __pyx_vtabstruct_5anims_Anim *)__pyx_v_self->_a->__pyx_vtab)->g(__pyx_v_self->_a);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.physics.pyx":108 */
  __pyx_v_self->_v = (__pyx_v_v + (__pyx_v_a * __pyx_v_dt));

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.physics.pyx":109 */
  __pyx_v_self->_p = ((__pyx_v_self->_p + (__pyx_v_v * __pyx_v_dt)) + (((.5 * __pyx_v_a) * __pyx_v_dt) * __pyx_v_dt));

  Py_DECREF((PyObject *)__pyx_v_self);
}

static float __pyx_f_6rabbyt_7physics_6Basic1_g(struct __pyx_obj_6rabbyt_7physics_Basic1 *__pyx_v_self) {
  float __pyx_r;
  Py_INCREF((PyObject *)__pyx_v_self);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.physics.pyx":112 */
  __pyx_r = __pyx_v_self->_p;
  goto __pyx_L0;

  __pyx_r = 0;
  __pyx_L0:;
  Py_DECREF((PyObject *)__pyx_v_self);
  return __pyx_r;
}

static int __pyx_f_6rabbyt_7physics_6Basic2___new__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_f_6rabbyt_7physics_6Basic2___new__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_args = 0;
  PyObject *__pyx_v_kwargs = 0;
  int __pyx_r;
  PyObject *__pyx_1 = 0;
  static char *__pyx_argnames[] = {0};
  if (__Pyx_GetStarArgs(&__pyx_args, &__pyx_kwds, __pyx_argnames, 0, &__pyx_v_args, &__pyx_v_kwargs) < 0) return -1;
  if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "", __pyx_argnames)) {
    Py_XDECREF(__pyx_args);
    Py_XDECREF(__pyx_kwds);
    Py_XDECREF(__pyx_v_args);
    Py_XDECREF(__pyx_v_kwargs);
    return -1;
  }
  Py_INCREF(__pyx_v_self);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.physics.pyx":150 */
  __pyx_1 = PyObject_CallObject(((PyObject*)__pyx_ptype_6rabbyt_7physics_Basic1), 0); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 150; goto __pyx_L1;}
  if (!__Pyx_TypeTest(__pyx_1, __pyx_ptype_6rabbyt_7physics_Basic1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 150; goto __pyx_L1;}
  Py_DECREF(((PyObject *)((struct __pyx_obj_6rabbyt_7physics_Basic2 *)__pyx_v_self)->_x));
  ((struct __pyx_obj_6rabbyt_7physics_Basic2 *)__pyx_v_self)->_x = ((struct __pyx_obj_6rabbyt_7physics_Basic1 *)__pyx_1);
  __pyx_1 = 0;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.physics.pyx":151 */
  __pyx_1 = PyObject_CallObject(((PyObject*)__pyx_ptype_6rabbyt_7physics_Basic1), 0); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 151; goto __pyx_L1;}
  if (!__Pyx_TypeTest(__pyx_1, __pyx_ptype_6rabbyt_7physics_Basic1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 151; goto __pyx_L1;}
  Py_DECREF(((PyObject *)((struct __pyx_obj_6rabbyt_7physics_Basic2 *)__pyx_v_self)->_y));
  ((struct __pyx_obj_6rabbyt_7physics_Basic2 *)__pyx_v_self)->_y = ((struct __pyx_obj_6rabbyt_7physics_Basic1 *)__pyx_1);
  __pyx_1 = 0;

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  __Pyx_AddTraceback("rabbyt.physics.Basic2.__new__");
  __pyx_r = -1;
  __pyx_L0:;
  Py_XDECREF(__pyx_v_args);
  Py_XDECREF(__pyx_v_kwargs);
  Py_DECREF(__pyx_v_self);
  Py_XDECREF(__pyx_args);
  Py_XDECREF(__pyx_kwds);
  return __pyx_r;
}

static PyObject *__pyx_n_xy;
static PyObject *__pyx_n_vxy;
static PyObject *__pyx_n_axy;
static PyObject *__pyx_n_items;
static PyObject *__pyx_n_TypeError;
static PyObject *__pyx_n_setattr;

static PyObject *__pyx_k25p;
static PyObject *__pyx_k26p;

static char (__pyx_k25[]) = "x y vx vy ax ay";
static char (__pyx_k26[]) = "Unexpected keyword argument %r";

static int __pyx_f_6rabbyt_7physics_6Basic2___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_f_6rabbyt_7physics_6Basic2___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_xy = 0;
  PyObject *__pyx_v_vxy = 0;
  PyObject *__pyx_v_axy = 0;
  PyObject *__pyx_v_kwargs = 0;
  PyObject *__pyx_v_valid_keys;
  PyObject *__pyx_v_key;
  PyObject *__pyx_v_value;
  int __pyx_r;
  PyObject *__pyx_1 = 0;
  PyObject *__pyx_2 = 0;
  PyObject *__pyx_3 = 0;
  int __pyx_4;
  PyObject *__pyx_5 = 0;
  static char *__pyx_argnames[] = {"xy","vxy","axy",0};
  __pyx_v_xy = __pyx_k19;
  __pyx_v_vxy = __pyx_k20;
  __pyx_v_axy = __pyx_k21;
  if (__Pyx_GetStarArgs(&__pyx_args, &__pyx_kwds, __pyx_argnames, 3, 0, &__pyx_v_kwargs) < 0) return -1;
  if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "|OOO", __pyx_argnames, &__pyx_v_xy, &__pyx_v_vxy, &__pyx_v_axy)) {
    Py_XDECREF(__pyx_args);
    Py_XDECREF(__pyx_kwds);
    Py_XDECREF(__pyx_v_kwargs);
    return -1;
  }
  Py_INCREF(__pyx_v_self);
  Py_INCREF(__pyx_v_xy);
  Py_INCREF(__pyx_v_vxy);
  Py_INCREF(__pyx_v_axy);
  __pyx_v_valid_keys = Py_None; Py_INCREF(Py_None);
  __pyx_v_key = Py_None; Py_INCREF(Py_None);
  __pyx_v_value = Py_None; Py_INCREF(Py_None);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.physics.pyx":154 */
  if (PyObject_SetAttr(__pyx_v_self, __pyx_n_xy, __pyx_v_xy) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 154; goto __pyx_L1;}

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.physics.pyx":155 */
  if (PyObject_SetAttr(__pyx_v_self, __pyx_n_vxy, __pyx_v_vxy) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 155; goto __pyx_L1;}

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.physics.pyx":156 */
  if (PyObject_SetAttr(__pyx_v_self, __pyx_n_axy, __pyx_v_axy) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 156; goto __pyx_L1;}

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.physics.pyx":157 */
  __pyx_1 = PyObject_GetAttr(__pyx_k25p, __pyx_n_split); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 157; goto __pyx_L1;}
  __pyx_2 = PyObject_CallObject(__pyx_1, 0); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 157; goto __pyx_L1;}
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  Py_DECREF(__pyx_v_valid_keys);
  __pyx_v_valid_keys = __pyx_2;
  __pyx_2 = 0;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.physics.pyx":158 */
  __pyx_1 = PyObject_GetAttr(__pyx_v_kwargs, __pyx_n_items); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 158; goto __pyx_L1;}
  __pyx_2 = PyObject_CallObject(__pyx_1, 0); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 158; goto __pyx_L1;}
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  __pyx_1 = PyObject_GetIter(__pyx_2); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 158; goto __pyx_L1;}
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  for (;;) {
    __pyx_2 = PyIter_Next(__pyx_1);
    if (!__pyx_2) {
      if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 158; goto __pyx_L1;}
      break;
    }
    __pyx_3 = PyObject_GetIter(__pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 158; goto __pyx_L1;}
    Py_DECREF(__pyx_2); __pyx_2 = 0;
    __pyx_2 = __Pyx_UnpackItem(__pyx_3); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 158; goto __pyx_L1;}
    Py_DECREF(__pyx_v_key);
    __pyx_v_key = __pyx_2;
    __pyx_2 = 0;
    __pyx_2 = __Pyx_UnpackItem(__pyx_3); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 158; goto __pyx_L1;}
    Py_DECREF(__pyx_v_value);
    __pyx_v_value = __pyx_2;
    __pyx_2 = 0;
    if (__Pyx_EndUnpack(__pyx_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 158; goto __pyx_L1;}
    Py_DECREF(__pyx_3); __pyx_3 = 0;

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.physics.pyx":159 */
    __pyx_4 = PySequence_Contains(__pyx_v_valid_keys, __pyx_v_key); if (__pyx_4 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 159; goto __pyx_L1;}
    __pyx_4 = !__pyx_4;
    if (__pyx_4) {

      /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.physics.pyx":160 */
      __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_TypeError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 160; goto __pyx_L1;}
      __pyx_3 = PyNumber_Remainder(__pyx_k26p, __pyx_v_key); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 160; goto __pyx_L1;}
      __pyx_5 = PyTuple_New(1); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 160; goto __pyx_L1;}
      PyTuple_SET_ITEM(__pyx_5, 0, __pyx_3);
      __pyx_3 = 0;
      __pyx_3 = PyObject_CallObject(__pyx_2, __pyx_5); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 160; goto __pyx_L1;}
      Py_DECREF(__pyx_2); __pyx_2 = 0;
      Py_DECREF(__pyx_5); __pyx_5 = 0;
      __Pyx_Raise(__pyx_3, 0, 0);
      Py_DECREF(__pyx_3); __pyx_3 = 0;
      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 160; goto __pyx_L1;}
      goto __pyx_L4;
    }
    __pyx_L4:;

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.physics.pyx":161 */
    __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_setattr); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 161; goto __pyx_L1;}
    __pyx_5 = PyTuple_New(3); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 161; goto __pyx_L1;}
    Py_INCREF(__pyx_v_self);
    PyTuple_SET_ITEM(__pyx_5, 0, __pyx_v_self);
    Py_INCREF(__pyx_v_key);
    PyTuple_SET_ITEM(__pyx_5, 1, __pyx_v_key);
    Py_INCREF(__pyx_v_value);
    PyTuple_SET_ITEM(__pyx_5, 2, __pyx_v_value);
    __pyx_3 = PyObject_CallObject(__pyx_2, __pyx_5); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 161; goto __pyx_L1;}
    Py_DECREF(__pyx_2); __pyx_2 = 0;
    Py_DECREF(__pyx_5); __pyx_5 = 0;
    Py_DECREF(__pyx_3); __pyx_3 = 0;
  }
  Py_DECREF(__pyx_1); __pyx_1 = 0;

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  Py_XDECREF(__pyx_2);
  Py_XDECREF(__pyx_3);
  Py_XDECREF(__pyx_5);
  __Pyx_AddTraceback("rabbyt.physics.Basic2.__init__");
  __pyx_r = -1;
  __pyx_L0:;
  Py_XDECREF(__pyx_v_kwargs);
  Py_DECREF(__pyx_v_valid_keys);
  Py_DECREF(__pyx_v_key);
  Py_DECREF(__pyx_v_value);
  Py_DECREF(__pyx_v_self);
  Py_DECREF(__pyx_v_xy);
  Py_DECREF(__pyx_v_vxy);
  Py_DECREF(__pyx_v_axy);
  Py_XDECREF(__pyx_args);
  Py_XDECREF(__pyx_kwds);
  return __pyx_r;
}

static PyObject *__pyx_f_6rabbyt_7physics_6Basic2_1x___get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_f_6rabbyt_7physics_6Basic2_1x___get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r;
  PyObject *__pyx_1 = 0;
  Py_INCREF(__pyx_v_self);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.physics.pyx":166 */
  __pyx_1 = PyObject_GetAttr(((PyObject *)((struct __pyx_obj_6rabbyt_7physics_Basic2 *)__pyx_v_self)->_x), __pyx_n_p); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 166; goto __pyx_L1;}
  __pyx_r = __pyx_1;
  __pyx_1 = 0;
  goto __pyx_L0;

  __pyx_r = Py_None; Py_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  __Pyx_AddTraceback("rabbyt.physics.Basic2.x.__get__");
  __pyx_r = 0;
  __pyx_L0:;
  Py_DECREF(__pyx_v_self);
  return __pyx_r;
}

static int __pyx_f_6rabbyt_7physics_6Basic2_1x___set__(PyObject *__pyx_v_self, PyObject *__pyx_v_x); /*proto*/
static int __pyx_f_6rabbyt_7physics_6Basic2_1x___set__(PyObject *__pyx_v_self, PyObject *__pyx_v_x) {
  int __pyx_r;
  Py_INCREF(__pyx_v_self);
  Py_INCREF(__pyx_v_x);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.physics.pyx":168 */
  if (PyObject_SetAttr(((PyObject *)((struct __pyx_obj_6rabbyt_7physics_Basic2 *)__pyx_v_self)->_x), __pyx_n_p, __pyx_v_x) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 168; goto __pyx_L1;}

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1:;
  __Pyx_AddTraceback("rabbyt.physics.Basic2.x.__set__");
  __pyx_r = -1;
  __pyx_L0:;
  Py_DECREF(__pyx_v_self);
  Py_DECREF(__pyx_v_x);
  return __pyx_r;
}

static PyObject *__pyx_f_6rabbyt_7physics_6Basic2_1y___get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_f_6rabbyt_7physics_6Basic2_1y___get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r;
  PyObject *__pyx_1 = 0;
  Py_INCREF(__pyx_v_self);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.physics.pyx":172 */
  __pyx_1 = PyObject_GetAttr(((PyObject *)((struct __pyx_obj_6rabbyt_7physics_Basic2 *)__pyx_v_self)->_y), __pyx_n_p); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 172; goto __pyx_L1;}
  __pyx_r = __pyx_1;
  __pyx_1 = 0;
  goto __pyx_L0;

  __pyx_r = Py_None; Py_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  __Pyx_AddTraceback("rabbyt.physics.Basic2.y.__get__");
  __pyx_r = 0;
  __pyx_L0:;
  Py_DECREF(__pyx_v_self);
  return __pyx_r;
}

static int __pyx_f_6rabbyt_7physics_6Basic2_1y___set__(PyObject *__pyx_v_self, PyObject *__pyx_v_y); /*proto*/
static int __pyx_f_6rabbyt_7physics_6Basic2_1y___set__(PyObject *__pyx_v_self, PyObject *__pyx_v_y) {
  int __pyx_r;
  Py_INCREF(__pyx_v_self);
  Py_INCREF(__pyx_v_y);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.physics.pyx":174 */
  if (PyObject_SetAttr(((PyObject *)((struct __pyx_obj_6rabbyt_7physics_Basic2 *)__pyx_v_self)->_y), __pyx_n_p, __pyx_v_y) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 174; goto __pyx_L1;}

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1:;
  __Pyx_AddTraceback("rabbyt.physics.Basic2.y.__set__");
  __pyx_r = -1;
  __pyx_L0:;
  Py_DECREF(__pyx_v_self);
  Py_DECREF(__pyx_v_y);
  return __pyx_r;
}

static PyObject *__pyx_f_6rabbyt_7physics_6Basic2_2vx___get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_f_6rabbyt_7physics_6Basic2_2vx___get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r;
  PyObject *__pyx_1 = 0;
  Py_INCREF(__pyx_v_self);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.physics.pyx":178 */
  __pyx_1 = PyObject_GetAttr(((PyObject *)((struct __pyx_obj_6rabbyt_7physics_Basic2 *)__pyx_v_self)->_x), __pyx_n_v); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 178; goto __pyx_L1;}
  __pyx_r = __pyx_1;
  __pyx_1 = 0;
  goto __pyx_L0;

  __pyx_r = Py_None; Py_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  __Pyx_AddTraceback("rabbyt.physics.Basic2.vx.__get__");
  __pyx_r = 0;
  __pyx_L0:;
  Py_DECREF(__pyx_v_self);
  return __pyx_r;
}

static int __pyx_f_6rabbyt_7physics_6Basic2_2vx___set__(PyObject *__pyx_v_self, PyObject *__pyx_v_x); /*proto*/
static int __pyx_f_6rabbyt_7physics_6Basic2_2vx___set__(PyObject *__pyx_v_self, PyObject *__pyx_v_x) {
  int __pyx_r;
  Py_INCREF(__pyx_v_self);
  Py_INCREF(__pyx_v_x);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.physics.pyx":180 */
  if (PyObject_SetAttr(((PyObject *)((struct __pyx_obj_6rabbyt_7physics_Basic2 *)__pyx_v_self)->_x), __pyx_n_v, __pyx_v_x) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 180; goto __pyx_L1;}

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1:;
  __Pyx_AddTraceback("rabbyt.physics.Basic2.vx.__set__");
  __pyx_r = -1;
  __pyx_L0:;
  Py_DECREF(__pyx_v_self);
  Py_DECREF(__pyx_v_x);
  return __pyx_r;
}

static PyObject *__pyx_f_6rabbyt_7physics_6Basic2_2vy___get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_f_6rabbyt_7physics_6Basic2_2vy___get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r;
  PyObject *__pyx_1 = 0;
  Py_INCREF(__pyx_v_self);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.physics.pyx":184 */
  __pyx_1 = PyObject_GetAttr(((PyObject *)((struct __pyx_obj_6rabbyt_7physics_Basic2 *)__pyx_v_self)->_y), __pyx_n_v); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 184; goto __pyx_L1;}
  __pyx_r = __pyx_1;
  __pyx_1 = 0;
  goto __pyx_L0;

  __pyx_r = Py_None; Py_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  __Pyx_AddTraceback("rabbyt.physics.Basic2.vy.__get__");
  __pyx_r = 0;
  __pyx_L0:;
  Py_DECREF(__pyx_v_self);
  return __pyx_r;
}

static int __pyx_f_6rabbyt_7physics_6Basic2_2vy___set__(PyObject *__pyx_v_self, PyObject *__pyx_v_y); /*proto*/
static int __pyx_f_6rabbyt_7physics_6Basic2_2vy___set__(PyObject *__pyx_v_self, PyObject *__pyx_v_y) {
  int __pyx_r;
  Py_INCREF(__pyx_v_self);
  Py_INCREF(__pyx_v_y);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.physics.pyx":186 */
  if (PyObject_SetAttr(((PyObject *)((struct __pyx_obj_6rabbyt_7physics_Basic2 *)__pyx_v_self)->_y), __pyx_n_v, __pyx_v_y) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 186; goto __pyx_L1;}

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1:;
  __Pyx_AddTraceback("rabbyt.physics.Basic2.vy.__set__");
  __pyx_r = -1;
  __pyx_L0:;
  Py_DECREF(__pyx_v_self);
  Py_DECREF(__pyx_v_y);
  return __pyx_r;
}

static PyObject *__pyx_f_6rabbyt_7physics_6Basic2_2ax___get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_f_6rabbyt_7physics_6Basic2_2ax___get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r;
  PyObject *__pyx_1 = 0;
  Py_INCREF(__pyx_v_self);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.physics.pyx":190 */
  __pyx_1 = PyObject_GetAttr(((PyObject *)((struct __pyx_obj_6rabbyt_7physics_Basic2 *)__pyx_v_self)->_x), __pyx_n_a); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 190; goto __pyx_L1;}
  __pyx_r = __pyx_1;
  __pyx_1 = 0;
  goto __pyx_L0;

  __pyx_r = Py_None; Py_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  __Pyx_AddTraceback("rabbyt.physics.Basic2.ax.__get__");
  __pyx_r = 0;
  __pyx_L0:;
  Py_DECREF(__pyx_v_self);
  return __pyx_r;
}

static int __pyx_f_6rabbyt_7physics_6Basic2_2ax___set__(PyObject *__pyx_v_self, PyObject *__pyx_v_x); /*proto*/
static int __pyx_f_6rabbyt_7physics_6Basic2_2ax___set__(PyObject *__pyx_v_self, PyObject *__pyx_v_x) {
  int __pyx_r;
  Py_INCREF(__pyx_v_self);
  Py_INCREF(__pyx_v_x);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.physics.pyx":192 */
  if (PyObject_SetAttr(((PyObject *)((struct __pyx_obj_6rabbyt_7physics_Basic2 *)__pyx_v_self)->_x), __pyx_n_a, __pyx_v_x) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 192; goto __pyx_L1;}

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1:;
  __Pyx_AddTraceback("rabbyt.physics.Basic2.ax.__set__");
  __pyx_r = -1;
  __pyx_L0:;
  Py_DECREF(__pyx_v_self);
  Py_DECREF(__pyx_v_x);
  return __pyx_r;
}

static PyObject *__pyx_f_6rabbyt_7physics_6Basic2_2ay___get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_f_6rabbyt_7physics_6Basic2_2ay___get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r;
  PyObject *__pyx_1 = 0;
  Py_INCREF(__pyx_v_self);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.physics.pyx":196 */
  __pyx_1 = PyObject_GetAttr(((PyObject *)((struct __pyx_obj_6rabbyt_7physics_Basic2 *)__pyx_v_self)->_y), __pyx_n_a); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 196; goto __pyx_L1;}
  __pyx_r = __pyx_1;
  __pyx_1 = 0;
  goto __pyx_L0;

  __pyx_r = Py_None; Py_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  __Pyx_AddTraceback("rabbyt.physics.Basic2.ay.__get__");
  __pyx_r = 0;
  __pyx_L0:;
  Py_DECREF(__pyx_v_self);
  return __pyx_r;
}

static int __pyx_f_6rabbyt_7physics_6Basic2_2ay___set__(PyObject *__pyx_v_self, PyObject *__pyx_v_y); /*proto*/
static int __pyx_f_6rabbyt_7physics_6Basic2_2ay___set__(PyObject *__pyx_v_self, PyObject *__pyx_v_y) {
  int __pyx_r;
  Py_INCREF(__pyx_v_self);
  Py_INCREF(__pyx_v_y);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.physics.pyx":198 */
  if (PyObject_SetAttr(((PyObject *)((struct __pyx_obj_6rabbyt_7physics_Basic2 *)__pyx_v_self)->_y), __pyx_n_a, __pyx_v_y) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 198; goto __pyx_L1;}

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1:;
  __Pyx_AddTraceback("rabbyt.physics.Basic2.ay.__set__");
  __pyx_r = -1;
  __pyx_L0:;
  Py_DECREF(__pyx_v_self);
  Py_DECREF(__pyx_v_y);
  return __pyx_r;
}

static PyObject *__pyx_n_x;
static PyObject *__pyx_n_y;

static PyObject *__pyx_f_6rabbyt_7physics_6Basic2_2xy___get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_f_6rabbyt_7physics_6Basic2_2xy___get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r;
  PyObject *__pyx_1 = 0;
  PyObject *__pyx_2 = 0;
  PyObject *__pyx_3 = 0;
  Py_INCREF(__pyx_v_self);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.physics.pyx":203 */
  __pyx_1 = PyObject_GetAttr(__pyx_v_self, __pyx_n_x); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 203; goto __pyx_L1;}
  __pyx_2 = PyObject_GetAttr(__pyx_v_self, __pyx_n_y); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 203; goto __pyx_L1;}
  __pyx_3 = PyTuple_New(2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 203; goto __pyx_L1;}
  PyTuple_SET_ITEM(__pyx_3, 0, __pyx_1);
  PyTuple_SET_ITEM(__pyx_3, 1, __pyx_2);
  __pyx_1 = 0;
  __pyx_2 = 0;
  __pyx_r = __pyx_3;
  __pyx_3 = 0;
  goto __pyx_L0;

  __pyx_r = Py_None; Py_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  Py_XDECREF(__pyx_2);
  Py_XDECREF(__pyx_3);
  __Pyx_AddTraceback("rabbyt.physics.Basic2.xy.__get__");
  __pyx_r = 0;
  __pyx_L0:;
  Py_DECREF(__pyx_v_self);
  return __pyx_r;
}

static int __pyx_f_6rabbyt_7physics_6Basic2_2xy___set__(PyObject *__pyx_v_self, PyObject *__pyx_v_xy); /*proto*/
static int __pyx_f_6rabbyt_7physics_6Basic2_2xy___set__(PyObject *__pyx_v_self, PyObject *__pyx_v_xy) {
  int __pyx_r;
  PyObject *__pyx_1 = 0;
  PyObject *__pyx_2 = 0;
  Py_INCREF(__pyx_v_self);
  Py_INCREF(__pyx_v_xy);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.physics.pyx":205 */
  __pyx_1 = PyObject_GetIter(__pyx_v_xy); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 205; goto __pyx_L1;}
  __pyx_2 = __Pyx_UnpackItem(__pyx_1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 205; goto __pyx_L1;}
  if (PyObject_SetAttr(__pyx_v_self, __pyx_n_x, __pyx_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 205; goto __pyx_L1;}
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  __pyx_2 = __Pyx_UnpackItem(__pyx_1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 205; goto __pyx_L1;}
  if (PyObject_SetAttr(__pyx_v_self, __pyx_n_y, __pyx_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 205; goto __pyx_L1;}
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  if (__Pyx_EndUnpack(__pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 205; goto __pyx_L1;}
  Py_DECREF(__pyx_1); __pyx_1 = 0;

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  Py_XDECREF(__pyx_2);
  __Pyx_AddTraceback("rabbyt.physics.Basic2.xy.__set__");
  __pyx_r = -1;
  __pyx_L0:;
  Py_DECREF(__pyx_v_self);
  Py_DECREF(__pyx_v_xy);
  return __pyx_r;
}

static PyObject *__pyx_n_vx;
static PyObject *__pyx_n_vy;

static PyObject *__pyx_f_6rabbyt_7physics_6Basic2_3vxy___get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_f_6rabbyt_7physics_6Basic2_3vxy___get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r;
  PyObject *__pyx_1 = 0;
  PyObject *__pyx_2 = 0;
  PyObject *__pyx_3 = 0;
  Py_INCREF(__pyx_v_self);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.physics.pyx":209 */
  __pyx_1 = PyObject_GetAttr(__pyx_v_self, __pyx_n_vx); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 209; goto __pyx_L1;}
  __pyx_2 = PyObject_GetAttr(__pyx_v_self, __pyx_n_vy); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 209; goto __pyx_L1;}
  __pyx_3 = PyTuple_New(2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 209; goto __pyx_L1;}
  PyTuple_SET_ITEM(__pyx_3, 0, __pyx_1);
  PyTuple_SET_ITEM(__pyx_3, 1, __pyx_2);
  __pyx_1 = 0;
  __pyx_2 = 0;
  __pyx_r = __pyx_3;
  __pyx_3 = 0;
  goto __pyx_L0;

  __pyx_r = Py_None; Py_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  Py_XDECREF(__pyx_2);
  Py_XDECREF(__pyx_3);
  __Pyx_AddTraceback("rabbyt.physics.Basic2.vxy.__get__");
  __pyx_r = 0;
  __pyx_L0:;
  Py_DECREF(__pyx_v_self);
  return __pyx_r;
}

static int __pyx_f_6rabbyt_7physics_6Basic2_3vxy___set__(PyObject *__pyx_v_self, PyObject *__pyx_v_vxy); /*proto*/
static int __pyx_f_6rabbyt_7physics_6Basic2_3vxy___set__(PyObject *__pyx_v_self, PyObject *__pyx_v_vxy) {
  int __pyx_r;
  PyObject *__pyx_1 = 0;
  PyObject *__pyx_2 = 0;
  Py_INCREF(__pyx_v_self);
  Py_INCREF(__pyx_v_vxy);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.physics.pyx":211 */
  __pyx_1 = PyObject_GetIter(__pyx_v_vxy); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 211; goto __pyx_L1;}
  __pyx_2 = __Pyx_UnpackItem(__pyx_1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 211; goto __pyx_L1;}
  if (PyObject_SetAttr(__pyx_v_self, __pyx_n_vx, __pyx_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 211; goto __pyx_L1;}
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  __pyx_2 = __Pyx_UnpackItem(__pyx_1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 211; goto __pyx_L1;}
  if (PyObject_SetAttr(__pyx_v_self, __pyx_n_vy, __pyx_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 211; goto __pyx_L1;}
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  if (__Pyx_EndUnpack(__pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 211; goto __pyx_L1;}
  Py_DECREF(__pyx_1); __pyx_1 = 0;

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  Py_XDECREF(__pyx_2);
  __Pyx_AddTraceback("rabbyt.physics.Basic2.vxy.__set__");
  __pyx_r = -1;
  __pyx_L0:;
  Py_DECREF(__pyx_v_self);
  Py_DECREF(__pyx_v_vxy);
  return __pyx_r;
}

static PyObject *__pyx_n_ax;
static PyObject *__pyx_n_ay;

static PyObject *__pyx_f_6rabbyt_7physics_6Basic2_3axy___get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_f_6rabbyt_7physics_6Basic2_3axy___get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r;
  PyObject *__pyx_1 = 0;
  PyObject *__pyx_2 = 0;
  PyObject *__pyx_3 = 0;
  Py_INCREF(__pyx_v_self);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.physics.pyx":215 */
  __pyx_1 = PyObject_GetAttr(__pyx_v_self, __pyx_n_ax); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 215; goto __pyx_L1;}
  __pyx_2 = PyObject_GetAttr(__pyx_v_self, __pyx_n_ay); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 215; goto __pyx_L1;}
  __pyx_3 = PyTuple_New(2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 215; goto __pyx_L1;}
  PyTuple_SET_ITEM(__pyx_3, 0, __pyx_1);
  PyTuple_SET_ITEM(__pyx_3, 1, __pyx_2);
  __pyx_1 = 0;
  __pyx_2 = 0;
  __pyx_r = __pyx_3;
  __pyx_3 = 0;
  goto __pyx_L0;

  __pyx_r = Py_None; Py_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  Py_XDECREF(__pyx_2);
  Py_XDECREF(__pyx_3);
  __Pyx_AddTraceback("rabbyt.physics.Basic2.axy.__get__");
  __pyx_r = 0;
  __pyx_L0:;
  Py_DECREF(__pyx_v_self);
  return __pyx_r;
}

static int __pyx_f_6rabbyt_7physics_6Basic2_3axy___set__(PyObject *__pyx_v_self, PyObject *__pyx_v_axy); /*proto*/
static int __pyx_f_6rabbyt_7physics_6Basic2_3axy___set__(PyObject *__pyx_v_self, PyObject *__pyx_v_axy) {
  int __pyx_r;
  PyObject *__pyx_1 = 0;
  PyObject *__pyx_2 = 0;
  Py_INCREF(__pyx_v_self);
  Py_INCREF(__pyx_v_axy);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.physics.pyx":217 */
  __pyx_1 = PyObject_GetIter(__pyx_v_axy); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 217; goto __pyx_L1;}
  __pyx_2 = __Pyx_UnpackItem(__pyx_1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 217; goto __pyx_L1;}
  if (PyObject_SetAttr(__pyx_v_self, __pyx_n_ax, __pyx_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 217; goto __pyx_L1;}
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  __pyx_2 = __Pyx_UnpackItem(__pyx_1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 217; goto __pyx_L1;}
  if (PyObject_SetAttr(__pyx_v_self, __pyx_n_ay, __pyx_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 217; goto __pyx_L1;}
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  if (__Pyx_EndUnpack(__pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 217; goto __pyx_L1;}
  Py_DECREF(__pyx_1); __pyx_1 = 0;

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  Py_XDECREF(__pyx_2);
  __Pyx_AddTraceback("rabbyt.physics.Basic2.axy.__set__");
  __pyx_r = -1;
  __pyx_L0:;
  Py_DECREF(__pyx_v_self);
  Py_DECREF(__pyx_v_axy);
  return __pyx_r;
}

static int __pyx_f_6rabbyt_7physics_6Basic2___len__(PyObject *__pyx_v_self); /*proto*/
static int __pyx_f_6rabbyt_7physics_6Basic2___len__(PyObject *__pyx_v_self) {
  int __pyx_r;
  Py_INCREF(__pyx_v_self);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.physics.pyx":220 */
  __pyx_r = 2;
  goto __pyx_L0;

  __pyx_r = 0;
  __pyx_L0:;
  Py_DECREF(__pyx_v_self);
  return __pyx_r;
}

static PyObject *__pyx_f_6rabbyt_7physics_6Basic2___getitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_i); /*proto*/
static PyObject *__pyx_f_6rabbyt_7physics_6Basic2___getitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_i) {
  PyObject *__pyx_r;
  PyObject *__pyx_1 = 0;
  int __pyx_2;
  Py_INCREF(__pyx_v_self);
  Py_INCREF(__pyx_v_i);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.physics.pyx":223 */
  __pyx_1 = PyInt_FromLong(0); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 223; goto __pyx_L1;}
  if (PyObject_Cmp(__pyx_v_i, __pyx_1, &__pyx_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 223; goto __pyx_L1;}
  __pyx_2 = __pyx_2 == 0;
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  if (__pyx_2) {

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.physics.pyx":224 */
    Py_INCREF(((PyObject *)((struct __pyx_obj_6rabbyt_7physics_Basic2 *)__pyx_v_self)->_x));
    __pyx_r = ((PyObject *)((struct __pyx_obj_6rabbyt_7physics_Basic2 *)__pyx_v_self)->_x);
    goto __pyx_L0;
    goto __pyx_L2;
  }
  /*else*/ {

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.physics.pyx":226 */
    Py_INCREF(((PyObject *)((struct __pyx_obj_6rabbyt_7physics_Basic2 *)__pyx_v_self)->_y));
    __pyx_r = ((PyObject *)((struct __pyx_obj_6rabbyt_7physics_Basic2 *)__pyx_v_self)->_y);
    goto __pyx_L0;
  }
  __pyx_L2:;

  __pyx_r = Py_None; Py_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  __Pyx_AddTraceback("rabbyt.physics.Basic2.__getitem__");
  __pyx_r = 0;
  __pyx_L0:;
  Py_DECREF(__pyx_v_self);
  Py_DECREF(__pyx_v_i);
  return __pyx_r;
}

static PyObject *__pyx_f_6rabbyt_7physics_6Basic2_update(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_f_6rabbyt_7physics_6Basic2_update(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_dt = 0;
  PyObject *__pyx_r;
  PyObject *__pyx_1 = 0;
  PyObject *__pyx_2 = 0;
  PyObject *__pyx_3 = 0;
  static char *__pyx_argnames[] = {"dt",0};
  if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "O", __pyx_argnames, &__pyx_v_dt)) return 0;
  Py_INCREF(__pyx_v_self);
  Py_INCREF(__pyx_v_dt);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.physics.pyx":229 */
  __pyx_1 = PyObject_GetAttr(((PyObject *)((struct __pyx_obj_6rabbyt_7physics_Basic2 *)__pyx_v_self)->_x), __pyx_n_update); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 229; goto __pyx_L1;}
  __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 229; goto __pyx_L1;}
  Py_INCREF(__pyx_v_dt);
  PyTuple_SET_ITEM(__pyx_2, 0, __pyx_v_dt);
  __pyx_3 = PyObject_CallObject(__pyx_1, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 229; goto __pyx_L1;}
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  Py_DECREF(__pyx_3); __pyx_3 = 0;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.physics.pyx":230 */
  __pyx_1 = PyObject_GetAttr(((PyObject *)((struct __pyx_obj_6rabbyt_7physics_Basic2 *)__pyx_v_self)->_y), __pyx_n_update); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 230; goto __pyx_L1;}
  __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 230; goto __pyx_L1;}
  Py_INCREF(__pyx_v_dt);
  PyTuple_SET_ITEM(__pyx_2, 0, __pyx_v_dt);
  __pyx_3 = PyObject_CallObject(__pyx_1, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 230; goto __pyx_L1;}
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  Py_DECREF(__pyx_3); __pyx_3 = 0;

  __pyx_r = Py_None; Py_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  Py_XDECREF(__pyx_2);
  Py_XDECREF(__pyx_3);
  __Pyx_AddTraceback("rabbyt.physics.Basic2.update");
  __pyx_r = 0;
  __pyx_L0:;
  Py_DECREF(__pyx_v_self);
  Py_DECREF(__pyx_v_dt);
  return __pyx_r;
}

static PyObject *__pyx_n_updateables;

static PyObject *__pyx_f_6rabbyt_7physics_13UpdateManager___init__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_6rabbyt_7physics_13UpdateManager___init__ = {"__init__", (PyCFunction)__pyx_f_6rabbyt_7physics_13UpdateManager___init__, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_f_6rabbyt_7physics_13UpdateManager___init__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_r;
  PyObject *__pyx_1 = 0;
  static char *__pyx_argnames[] = {"self",0};
  if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "O", __pyx_argnames, &__pyx_v_self)) return 0;
  Py_INCREF(__pyx_v_self);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.physics.pyx":248 */
  __pyx_1 = PyList_New(0); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 248; goto __pyx_L1;}
  if (PyObject_SetAttr(__pyx_v_self, __pyx_n_updateables, __pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 248; goto __pyx_L1;}
  Py_DECREF(__pyx_1); __pyx_1 = 0;

  __pyx_r = Py_None; Py_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  __Pyx_AddTraceback("rabbyt.physics.UpdateManager.__init__");
  __pyx_r = 0;
  __pyx_L0:;
  Py_DECREF(__pyx_v_self);
  return __pyx_r;
}

static PyObject *__pyx_n_ref;

static PyObject *__pyx_f_6rabbyt_7physics_13UpdateManager_append(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_6rabbyt_7physics_13UpdateManager_append = {"append", (PyCFunction)__pyx_f_6rabbyt_7physics_13UpdateManager_append, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_f_6rabbyt_7physics_13UpdateManager_append(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_v_updateable = 0;
  PyObject *__pyx_r;
  PyObject *__pyx_1 = 0;
  PyObject *__pyx_2 = 0;
  PyObject *__pyx_3 = 0;
  PyObject *__pyx_4 = 0;
  static char *__pyx_argnames[] = {"self","updateable",0};
  if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "OO", __pyx_argnames, &__pyx_v_self, &__pyx_v_updateable)) return 0;
  Py_INCREF(__pyx_v_self);
  Py_INCREF(__pyx_v_updateable);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.physics.pyx":251 */
  __pyx_1 = PyObject_GetAttr(__pyx_v_self, __pyx_n_updateables); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 251; goto __pyx_L1;}
  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_n_append); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 251; goto __pyx_L1;}
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_n_weakref); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 251; goto __pyx_L1;}
  __pyx_3 = PyObject_GetAttr(__pyx_1, __pyx_n_ref); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 251; goto __pyx_L1;}
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  __pyx_1 = PyObject_GetAttr(__pyx_v_self, __pyx_n_remove_ref); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 251; goto __pyx_L1;}
  __pyx_4 = PyTuple_New(2); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 251; goto __pyx_L1;}
  Py_INCREF(__pyx_v_updateable);
  PyTuple_SET_ITEM(__pyx_4, 0, __pyx_v_updateable);
  PyTuple_SET_ITEM(__pyx_4, 1, __pyx_1);
  __pyx_1 = 0;
  __pyx_1 = PyObject_CallObject(__pyx_3, __pyx_4); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 251; goto __pyx_L1;}
  Py_DECREF(__pyx_3); __pyx_3 = 0;
  Py_DECREF(__pyx_4); __pyx_4 = 0;
  __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 251; goto __pyx_L1;}
  PyTuple_SET_ITEM(__pyx_3, 0, __pyx_1);
  __pyx_1 = 0;
  __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 251; goto __pyx_L1;}
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  Py_DECREF(__pyx_3); __pyx_3 = 0;
  Py_DECREF(__pyx_4); __pyx_4 = 0;

  __pyx_r = Py_None; Py_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  Py_XDECREF(__pyx_2);
  Py_XDECREF(__pyx_3);
  Py_XDECREF(__pyx_4);
  __Pyx_AddTraceback("rabbyt.physics.UpdateManager.append");
  __pyx_r = 0;
  __pyx_L0:;
  Py_DECREF(__pyx_v_self);
  Py_DECREF(__pyx_v_updateable);
  return __pyx_r;
}

static PyObject *__pyx_n_remove;
static PyObject *__pyx_n_ValueError;

static PyObject *__pyx_f_6rabbyt_7physics_13UpdateManager_remove_ref(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_6rabbyt_7physics_13UpdateManager_remove_ref = {"remove_ref", (PyCFunction)__pyx_f_6rabbyt_7physics_13UpdateManager_remove_ref, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_f_6rabbyt_7physics_13UpdateManager_remove_ref(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_v_reference = 0;
  PyObject *__pyx_r;
  PyObject *__pyx_1 = 0;
  PyObject *__pyx_2 = 0;
  PyObject *__pyx_3 = 0;
  int __pyx_4;
  static char *__pyx_argnames[] = {"self","reference",0};
  if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "OO", __pyx_argnames, &__pyx_v_self, &__pyx_v_reference)) return 0;
  Py_INCREF(__pyx_v_self);
  Py_INCREF(__pyx_v_reference);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.physics.pyx":254 */
  /*try:*/ {

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.physics.pyx":255 */
    __pyx_1 = PyObject_GetAttr(__pyx_v_self, __pyx_n_updateables); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 255; goto __pyx_L2;}
    __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_n_remove); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 255; goto __pyx_L2;}
    Py_DECREF(__pyx_1); __pyx_1 = 0;
    __pyx_1 = PyTuple_New(1); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 255; goto __pyx_L2;}
    Py_INCREF(__pyx_v_reference);
    PyTuple_SET_ITEM(__pyx_1, 0, __pyx_v_reference);
    __pyx_3 = PyObject_CallObject(__pyx_2, __pyx_1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 255; goto __pyx_L2;}
    Py_DECREF(__pyx_2); __pyx_2 = 0;
    Py_DECREF(__pyx_1); __pyx_1 = 0;
    Py_DECREF(__pyx_3); __pyx_3 = 0;
  }
  goto __pyx_L3;
  __pyx_L2:;
  Py_XDECREF(__pyx_2); __pyx_2 = 0;
  Py_XDECREF(__pyx_1); __pyx_1 = 0;
  Py_XDECREF(__pyx_3); __pyx_3 = 0;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.physics.pyx":256 */
  __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 256; goto __pyx_L1;}
  __pyx_4 = PyErr_ExceptionMatches(__pyx_2);
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  if (__pyx_4) {
    __Pyx_AddTraceback("rabbyt.physics.remove_ref");
    __pyx_1 = __Pyx_GetExcValue(); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 256; goto __pyx_L1;}
    Py_DECREF(__pyx_1); __pyx_1 = 0;

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.physics.pyx":257 */
    goto __pyx_L3;
  }
  goto __pyx_L1;
  __pyx_L3:;

  __pyx_r = Py_None; Py_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  Py_XDECREF(__pyx_2);
  Py_XDECREF(__pyx_3);
  __Pyx_AddTraceback("rabbyt.physics.UpdateManager.remove_ref");
  __pyx_r = 0;
  __pyx_L0:;
  Py_DECREF(__pyx_v_self);
  Py_DECREF(__pyx_v_reference);
  return __pyx_r;
}

static PyObject *__pyx_f_6rabbyt_7physics_13UpdateManager_update(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6rabbyt_7physics_13UpdateManager_update[] = "\n        ``update(dt)``\n\n        Update the physics drivers by timestep ``dt``.\n        ";
static PyMethodDef __pyx_mdef_6rabbyt_7physics_13UpdateManager_update = {"update", (PyCFunction)__pyx_f_6rabbyt_7physics_13UpdateManager_update, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6rabbyt_7physics_13UpdateManager_update};
static PyObject *__pyx_f_6rabbyt_7physics_13UpdateManager_update(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  float __pyx_v_dt;
  PyObject *__pyx_v_u;
  PyObject *__pyx_r;
  PyObject *__pyx_1 = 0;
  PyObject *__pyx_2 = 0;
  PyObject *__pyx_3 = 0;
  PyObject *__pyx_4 = 0;
  static char *__pyx_argnames[] = {"self","dt",0};
  if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "Of", __pyx_argnames, &__pyx_v_self, &__pyx_v_dt)) return 0;
  Py_INCREF(__pyx_v_self);
  __pyx_v_u = Py_None; Py_INCREF(Py_None);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.physics.pyx":265 */
  __pyx_1 = PyObject_GetAttr(__pyx_v_self, __pyx_n_updateables); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 265; goto __pyx_L1;}
  __pyx_2 = PyObject_GetIter(__pyx_1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 265; goto __pyx_L1;}
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  for (;;) {
    __pyx_1 = PyIter_Next(__pyx_2);
    if (!__pyx_1) {
      if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 265; goto __pyx_L1;}
      break;
    }
    Py_DECREF(__pyx_v_u);
    __pyx_v_u = __pyx_1;
    __pyx_1 = 0;

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.physics.pyx":266 */
    __pyx_1 = PyObject_CallObject(__pyx_v_u, 0); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 266; goto __pyx_L1;}
    __pyx_3 = PyObject_GetAttr(__pyx_1, __pyx_n_update); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 266; goto __pyx_L1;}
    Py_DECREF(__pyx_1); __pyx_1 = 0;
    __pyx_1 = PyFloat_FromDouble(__pyx_v_dt); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 266; goto __pyx_L1;}
    __pyx_4 = PyTuple_New(1); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 266; goto __pyx_L1;}
    PyTuple_SET_ITEM(__pyx_4, 0, __pyx_1);
    __pyx_1 = 0;
    __pyx_1 = PyObject_CallObject(__pyx_3, __pyx_4); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 266; goto __pyx_L1;}
    Py_DECREF(__pyx_3); __pyx_3 = 0;
    Py_DECREF(__pyx_4); __pyx_4 = 0;
    Py_DECREF(__pyx_1); __pyx_1 = 0;
  }
  Py_DECREF(__pyx_2); __pyx_2 = 0;

  __pyx_r = Py_None; Py_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  Py_XDECREF(__pyx_2);
  Py_XDECREF(__pyx_3);
  Py_XDECREF(__pyx_4);
  __Pyx_AddTraceback("rabbyt.physics.UpdateManager.update");
  __pyx_r = 0;
  __pyx_L0:;
  Py_DECREF(__pyx_v_u);
  Py_DECREF(__pyx_v_self);
  return __pyx_r;
}

static float __pyx_f_6rabbyt_7physics_14_ChipmonkBodyX_g(struct __pyx_obj_6rabbyt_7physics__ChipmonkBodyX *__pyx_v_self) {
  float __pyx_r;
  Py_INCREF((PyObject *)__pyx_v_self);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.physics.pyx":286 */
  __pyx_r = (__pyx_v_self->body[0]).p.x;
  goto __pyx_L0;

  __pyx_r = 0;
  __pyx_L0:;
  Py_DECREF((PyObject *)__pyx_v_self);
  return __pyx_r;
}

static float __pyx_f_6rabbyt_7physics_14_ChipmonkBodyY_g(struct __pyx_obj_6rabbyt_7physics__ChipmonkBodyY *__pyx_v_self) {
  float __pyx_r;
  Py_INCREF((PyObject *)__pyx_v_self);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.physics.pyx":292 */
  __pyx_r = (__pyx_v_self->body[0]).p.y;
  goto __pyx_L0;

  __pyx_r = 0;
  __pyx_L0:;
  Py_DECREF((PyObject *)__pyx_v_self);
  return __pyx_r;
}

static float __pyx_f_6rabbyt_7physics_14_ChipmonkBodyA_g(struct __pyx_obj_6rabbyt_7physics__ChipmonkBodyA *__pyx_v_self) {
  float __pyx_r;
  Py_INCREF((PyObject *)__pyx_v_self);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.physics.pyx":298 */
  __pyx_r = ((__pyx_v_self->body[0]).a * __pyx_v_6rabbyt_7physics_oneeighty_over_pi);
  goto __pyx_L0;

  __pyx_r = 0;
  __pyx_L0:;
  Py_DECREF((PyObject *)__pyx_v_self);
  return __pyx_r;
}

static PyObject *__pyx_f_6rabbyt_7physics_chipmonk_body_anims(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6rabbyt_7physics_chipmonk_body_anims[] = "\n    ``chipmonk_body_anims(body_addr)``\n\n    Provides fast integration with the chipmonk physics library.  Returns\n    three anims for x, y, and rotation.\n\n    ``body_addr`` Should be the address of a cpBody structure.  For example,\n    if you are using the pymonk wrapper, you can do this:\n\n        .. sourcecode:: python\n\n            anims = chipmonk_body_anims(ctypes.addressof(body.contents))\n            sprite.x, sprite.y, sprite.rot = anims\n\n    Note that the anims store an internal pointer to the cpBody structure,\n    but not a python reference.  This means that if you read the anims value\n    after calling cpBodyDestroy on the body, you will get a segfault.\n    ";
static PyObject *__pyx_f_6rabbyt_7physics_chipmonk_body_anims(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  long __pyx_v_body_addr;
  struct __pyx_obj_6rabbyt_7physics__ChipmonkBodyX *__pyx_v_x;
  struct __pyx_obj_6rabbyt_7physics__ChipmonkBodyY *__pyx_v_y;
  struct __pyx_obj_6rabbyt_7physics__ChipmonkBodyA *__pyx_v_a;
  PyObject *__pyx_r;
  PyObject *__pyx_1 = 0;
  static char *__pyx_argnames[] = {"body_addr",0};
  if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "l", __pyx_argnames, &__pyx_v_body_addr)) return 0;
  __pyx_v_x = ((struct __pyx_obj_6rabbyt_7physics__ChipmonkBodyX *)Py_None); Py_INCREF(Py_None);
  __pyx_v_y = ((struct __pyx_obj_6rabbyt_7physics__ChipmonkBodyY *)Py_None); Py_INCREF(Py_None);
  __pyx_v_a = ((struct __pyx_obj_6rabbyt_7physics__ChipmonkBodyA *)Py_None); Py_INCREF(Py_None);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.physics.pyx":321 */
  __pyx_1 = PyObject_CallObject(((PyObject*)__pyx_ptype_6rabbyt_7physics__ChipmonkBodyX), 0); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 321; goto __pyx_L1;}
  if (!__Pyx_TypeTest(__pyx_1, __pyx_ptype_6rabbyt_7physics__ChipmonkBodyX)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 321; goto __pyx_L1;}
  Py_DECREF(((PyObject *)__pyx_v_x));
  __pyx_v_x = ((struct __pyx_obj_6rabbyt_7physics__ChipmonkBodyX *)__pyx_1);
  __pyx_1 = 0;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.physics.pyx":322 */
  __pyx_v_x->body = ((__pyx_t_6rabbyt_7physics_cpBody (*))__pyx_v_body_addr);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.physics.pyx":324 */
  __pyx_1 = PyObject_CallObject(((PyObject*)__pyx_ptype_6rabbyt_7physics__ChipmonkBodyY), 0); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 324; goto __pyx_L1;}
  if (!__Pyx_TypeTest(__pyx_1, __pyx_ptype_6rabbyt_7physics__ChipmonkBodyY)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 324; goto __pyx_L1;}
  Py_DECREF(((PyObject *)__pyx_v_y));
  __pyx_v_y = ((struct __pyx_obj_6rabbyt_7physics__ChipmonkBodyY *)__pyx_1);
  __pyx_1 = 0;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.physics.pyx":325 */
  __pyx_v_y->body = ((__pyx_t_6rabbyt_7physics_cpBody (*))__pyx_v_body_addr);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.physics.pyx":327 */
  __pyx_1 = PyObject_CallObject(((PyObject*)__pyx_ptype_6rabbyt_7physics__ChipmonkBodyA), 0); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 327; goto __pyx_L1;}
  if (!__Pyx_TypeTest(__pyx_1, __pyx_ptype_6rabbyt_7physics__ChipmonkBodyA)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 327; goto __pyx_L1;}
  Py_DECREF(((PyObject *)__pyx_v_a));
  __pyx_v_a = ((struct __pyx_obj_6rabbyt_7physics__ChipmonkBodyA *)__pyx_1);
  __pyx_1 = 0;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.physics.pyx":328 */
  __pyx_v_a->body = ((__pyx_t_6rabbyt_7physics_cpBody (*))__pyx_v_body_addr);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.physics.pyx":330 */
  __pyx_1 = PyTuple_New(3); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 330; goto __pyx_L1;}
  Py_INCREF(((PyObject *)__pyx_v_x));
  PyTuple_SET_ITEM(__pyx_1, 0, ((PyObject *)__pyx_v_x));
  Py_INCREF(((PyObject *)__pyx_v_y));
  PyTuple_SET_ITEM(__pyx_1, 1, ((PyObject *)__pyx_v_y));
  Py_INCREF(((PyObject *)__pyx_v_a));
  PyTuple_SET_ITEM(__pyx_1, 2, ((PyObject *)__pyx_v_a));
  __pyx_r = __pyx_1;
  __pyx_1 = 0;
  goto __pyx_L0;

  __pyx_r = Py_None; Py_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  __Pyx_AddTraceback("rabbyt.physics.chipmonk_body_anims");
  __pyx_r = 0;
  __pyx_L0:;
  Py_DECREF((PyObject *)__pyx_v_x);
  Py_DECREF((PyObject *)__pyx_v_y);
  Py_DECREF((PyObject *)__pyx_v_a);
  return __pyx_r;
}

static __Pyx_InternTabEntry __pyx_intern_tab[] = {
  {&__pyx_n_TypeError, "TypeError"},
  {&__pyx_n_UpdateManager, "UpdateManager"},
  {&__pyx_n_ValueError, "ValueError"},
  {&__pyx_n___docs_all__, "__docs_all__"},
  {&__pyx_n___init__, "__init__"},
  {&__pyx_n_a, "a"},
  {&__pyx_n_append, "append"},
  {&__pyx_n_ax, "ax"},
  {&__pyx_n_axy, "axy"},
  {&__pyx_n_ay, "ay"},
  {&__pyx_n_chipmonk_body_anims, "chipmonk_body_anims"},
  {&__pyx_n_default_update_manager, "default_update_manager"},
  {&__pyx_n_items, "items"},
  {&__pyx_n_object, "object"},
  {&__pyx_n_p, "p"},
  {&__pyx_n_ref, "ref"},
  {&__pyx_n_remove, "remove"},
  {&__pyx_n_remove_ref, "remove_ref"},
  {&__pyx_n_setattr, "setattr"},
  {&__pyx_n_split, "split"},
  {&__pyx_n_to_Anim, "to_Anim"},
  {&__pyx_n_update, "update"},
  {&__pyx_n_updateables, "updateables"},
  {&__pyx_n_v, "v"},
  {&__pyx_n_vx, "vx"},
  {&__pyx_n_vxy, "vxy"},
  {&__pyx_n_vy, "vy"},
  {&__pyx_n_weakref, "weakref"},
  {&__pyx_n_x, "x"},
  {&__pyx_n_xy, "xy"},
  {&__pyx_n_y, "y"},
  {0, 0}
};

static __Pyx_StringTabEntry __pyx_string_tab[] = {
  {&__pyx_k13p, __pyx_k13, sizeof(__pyx_k13)},
  {&__pyx_k23p, __pyx_k23, sizeof(__pyx_k23)},
  {&__pyx_k24p, __pyx_k24, sizeof(__pyx_k24)},
  {&__pyx_k25p, __pyx_k25, sizeof(__pyx_k25)},
  {&__pyx_k26p, __pyx_k26, sizeof(__pyx_k26)},
  {0, 0, 0}
};
static struct __pyx_vtabstruct_6rabbyt_7physics_Basic1 __pyx_vtable_6rabbyt_7physics_Basic1;

static PyObject *__pyx_tp_new_6rabbyt_7physics_Basic1(PyTypeObject *t, PyObject *a, PyObject *k) {
  PyObject *o = __pyx_ptype_5anims_Anim->tp_new(t, a, k);
  struct __pyx_obj_6rabbyt_7physics_Basic1 *p = (struct __pyx_obj_6rabbyt_7physics_Basic1 *)o;
  *(struct __pyx_vtabstruct_6rabbyt_7physics_Basic1 **)&p->__pyx_base.__pyx_vtab = __pyx_vtabptr_6rabbyt_7physics_Basic1;
  p->__weakref__ = 0;
  p->_a = ((struct __pyx_obj_5anims_Anim *)Py_None); Py_INCREF(Py_None);
  if (__pyx_f_6rabbyt_7physics_6Basic1___new__(o, a, k) < 0) {
    Py_DECREF(o); o = 0;
  }
  return o;
}

static void __pyx_tp_dealloc_6rabbyt_7physics_Basic1(PyObject *o) {
  struct __pyx_obj_6rabbyt_7physics_Basic1 *p = (struct __pyx_obj_6rabbyt_7physics_Basic1 *)o;
  PyObject_ClearWeakRefs(o);
  Py_XDECREF(((PyObject *)p->_a));
  __pyx_ptype_5anims_Anim->tp_dealloc(o);
}

static int __pyx_tp_traverse_6rabbyt_7physics_Basic1(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_6rabbyt_7physics_Basic1 *p = (struct __pyx_obj_6rabbyt_7physics_Basic1 *)o;
  e = __pyx_ptype_5anims_Anim->tp_traverse(o, v, a); if (e) return e;
  if (p->__weakref__) {
    e = (*v)(p->__weakref__, a); if (e) return e;
  }
  if (p->_a) {
    e = (*v)(((PyObject*)p->_a), a); if (e) return e;
  }
  return 0;
}

static int __pyx_tp_clear_6rabbyt_7physics_Basic1(PyObject *o) {
  struct __pyx_obj_6rabbyt_7physics_Basic1 *p = (struct __pyx_obj_6rabbyt_7physics_Basic1 *)o;
  __pyx_ptype_5anims_Anim->tp_clear(o);
  Py_XDECREF(p->__weakref__);
  p->__weakref__ = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(((PyObject *)p->_a));
  p->_a = ((struct __pyx_obj_5anims_Anim *)Py_None); Py_INCREF(Py_None);
  return 0;
}

static PyObject *__pyx_getprop_6rabbyt_7physics_6Basic1_p(PyObject *o, void *x) {
  return __pyx_f_6rabbyt_7physics_6Basic1_1p___get__(o);
}

static int __pyx_setprop_6rabbyt_7physics_6Basic1_p(PyObject *o, PyObject *v, void *x) {
  if (v) {
    return __pyx_f_6rabbyt_7physics_6Basic1_1p___set__(o, v);
  }
  else {
    PyErr_SetString(PyExc_NotImplementedError, "__del__");
    return -1;
  }
}

static PyObject *__pyx_getprop_6rabbyt_7physics_6Basic1_v(PyObject *o, void *x) {
  return __pyx_f_6rabbyt_7physics_6Basic1_1v___get__(o);
}

static int __pyx_setprop_6rabbyt_7physics_6Basic1_v(PyObject *o, PyObject *v, void *x) {
  if (v) {
    return __pyx_f_6rabbyt_7physics_6Basic1_1v___set__(o, v);
  }
  else {
    PyErr_SetString(PyExc_NotImplementedError, "__del__");
    return -1;
  }
}

static PyObject *__pyx_getprop_6rabbyt_7physics_6Basic1_a(PyObject *o, void *x) {
  return __pyx_f_6rabbyt_7physics_6Basic1_1a___get__(o);
}

static int __pyx_setprop_6rabbyt_7physics_6Basic1_a(PyObject *o, PyObject *v, void *x) {
  if (v) {
    return __pyx_f_6rabbyt_7physics_6Basic1_1a___set__(o, v);
  }
  else {
    PyErr_SetString(PyExc_NotImplementedError, "__del__");
    return -1;
  }
}

static struct PyMethodDef __pyx_methods_6rabbyt_7physics_Basic1[] = {
  {"update", (PyCFunction)__pyx_f_6rabbyt_7physics_6Basic1_update, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6rabbyt_7physics_6Basic1_update},
  {0, 0, 0, 0}
};

static struct PyGetSetDef __pyx_getsets_6rabbyt_7physics_Basic1[] = {
  {"p", __pyx_getprop_6rabbyt_7physics_6Basic1_p, __pyx_setprop_6rabbyt_7physics_6Basic1_p, __pyx_k1, 0},
  {"v", __pyx_getprop_6rabbyt_7physics_6Basic1_v, __pyx_setprop_6rabbyt_7physics_6Basic1_v, __pyx_k2, 0},
  {"a", __pyx_getprop_6rabbyt_7physics_6Basic1_a, __pyx_setprop_6rabbyt_7physics_6Basic1_a, __pyx_k3, 0},
  {0, 0, 0, 0, 0}
};

static PyNumberMethods __pyx_tp_as_number_Basic1 = {
  0, /*nb_add*/
  0, /*nb_subtract*/
  0, /*nb_multiply*/
  0, /*nb_divide*/
  0, /*nb_remainder*/
  0, /*nb_divmod*/
  0, /*nb_power*/
  0, /*nb_negative*/
  0, /*nb_positive*/
  0, /*nb_absolute*/
  0, /*nb_nonzero*/
  0, /*nb_invert*/
  0, /*nb_lshift*/
  0, /*nb_rshift*/
  0, /*nb_and*/
  0, /*nb_xor*/
  0, /*nb_or*/
  0, /*nb_coerce*/
  0, /*nb_int*/
  0, /*nb_long*/
  0, /*nb_float*/
  0, /*nb_oct*/
  0, /*nb_hex*/
  0, /*nb_inplace_add*/
  0, /*nb_inplace_subtract*/
  0, /*nb_inplace_multiply*/
  0, /*nb_inplace_divide*/
  0, /*nb_inplace_remainder*/
  0, /*nb_inplace_power*/
  0, /*nb_inplace_lshift*/
  0, /*nb_inplace_rshift*/
  0, /*nb_inplace_and*/
  0, /*nb_inplace_xor*/
  0, /*nb_inplace_or*/
  0, /*nb_floor_divide*/
  0, /*nb_true_divide*/
  0, /*nb_inplace_floor_divide*/
  0, /*nb_inplace_true_divide*/
};

static PySequenceMethods __pyx_tp_as_sequence_Basic1 = {
  0, /*sq_length*/
  0, /*sq_concat*/
  0, /*sq_repeat*/
  0, /*sq_item*/
  0, /*sq_slice*/
  0, /*sq_ass_item*/
  0, /*sq_ass_slice*/
  0, /*sq_contains*/
  0, /*sq_inplace_concat*/
  0, /*sq_inplace_repeat*/
};

static PyMappingMethods __pyx_tp_as_mapping_Basic1 = {
  0, /*mp_length*/
  0, /*mp_subscript*/
  0, /*mp_ass_subscript*/
};

static PyBufferProcs __pyx_tp_as_buffer_Basic1 = {
  0, /*bf_getreadbuffer*/
  0, /*bf_getwritebuffer*/
  0, /*bf_getsegcount*/
  0, /*bf_getcharbuffer*/
};

PyTypeObject __pyx_type_6rabbyt_7physics_Basic1 = {
  PyObject_HEAD_INIT(0)
  0, /*ob_size*/
  "rabbyt.physics.Basic1", /*tp_name*/
  sizeof(struct __pyx_obj_6rabbyt_7physics_Basic1), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6rabbyt_7physics_Basic1, /*tp_dealloc*/
  0, /*tp_print*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  0, /*tp_compare*/
  0, /*tp_repr*/
  &__pyx_tp_as_number_Basic1, /*tp_as_number*/
  &__pyx_tp_as_sequence_Basic1, /*tp_as_sequence*/
  &__pyx_tp_as_mapping_Basic1, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  &__pyx_tp_as_buffer_Basic1, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
  "\n    ``Basic1(p=0, v=0, a=0)``\n\n    Provides basic physics (position, velocity, and acceleration,) in a single\n    dimention.\n\n    Basic1 instances can be used as anims, so you can do this for\n    example:\n\n        .. sourcecode:: python\n\n            sprite.y = Basic1(10, a=-9.81)\n\n    (The sprite will start at a height of ten, then fall with an acceleration\n    of -9.81 world units per second.)\n\n    Uppon creation, a ``Basic1`` instance will automatically add itself to the\n    global update manager.  This frees you from having to keep track of\n    it yourself.  Just use ``rabbyt.physics.update(dt)`` to update everything.\n    ", /*tp_doc*/
  __pyx_tp_traverse_6rabbyt_7physics_Basic1, /*tp_traverse*/
  __pyx_tp_clear_6rabbyt_7physics_Basic1, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_6rabbyt_7physics_Basic1, /*tp_methods*/
  0, /*tp_members*/
  __pyx_getsets_6rabbyt_7physics_Basic1, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  __pyx_f_6rabbyt_7physics_6Basic1___init__, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6rabbyt_7physics_Basic1, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
};

static PyObject *__pyx_tp_new_6rabbyt_7physics_Basic2(PyTypeObject *t, PyObject *a, PyObject *k) {
  PyObject *o = (*t->tp_alloc)(t, 0);
  struct __pyx_obj_6rabbyt_7physics_Basic2 *p = (struct __pyx_obj_6rabbyt_7physics_Basic2 *)o;
  p->__weakref__ = 0;
  p->_x = ((struct __pyx_obj_6rabbyt_7physics_Basic1 *)Py_None); Py_INCREF(Py_None);
  p->_y = ((struct __pyx_obj_6rabbyt_7physics_Basic1 *)Py_None); Py_INCREF(Py_None);
  if (__pyx_f_6rabbyt_7physics_6Basic2___new__(o, a, k) < 0) {
    Py_DECREF(o); o = 0;
  }
  return o;
}

static void __pyx_tp_dealloc_6rabbyt_7physics_Basic2(PyObject *o) {
  struct __pyx_obj_6rabbyt_7physics_Basic2 *p = (struct __pyx_obj_6rabbyt_7physics_Basic2 *)o;
  PyObject_ClearWeakRefs(o);
  Py_XDECREF(((PyObject *)p->_x));
  Py_XDECREF(((PyObject *)p->_y));
  (*o->ob_type->tp_free)(o);
}

static int __pyx_tp_traverse_6rabbyt_7physics_Basic2(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_6rabbyt_7physics_Basic2 *p = (struct __pyx_obj_6rabbyt_7physics_Basic2 *)o;
  if (p->__weakref__) {
    e = (*v)(p->__weakref__, a); if (e) return e;
  }
  if (p->_x) {
    e = (*v)(((PyObject*)p->_x), a); if (e) return e;
  }
  if (p->_y) {
    e = (*v)(((PyObject*)p->_y), a); if (e) return e;
  }
  return 0;
}

static int __pyx_tp_clear_6rabbyt_7physics_Basic2(PyObject *o) {
  struct __pyx_obj_6rabbyt_7physics_Basic2 *p = (struct __pyx_obj_6rabbyt_7physics_Basic2 *)o;
  Py_XDECREF(p->__weakref__);
  p->__weakref__ = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(((PyObject *)p->_x));
  p->_x = ((struct __pyx_obj_6rabbyt_7physics_Basic1 *)Py_None); Py_INCREF(Py_None);
  Py_XDECREF(((PyObject *)p->_y));
  p->_y = ((struct __pyx_obj_6rabbyt_7physics_Basic1 *)Py_None); Py_INCREF(Py_None);
  return 0;
}
static PyObject *__pyx_sq_item_6rabbyt_7physics_Basic2(PyObject *o, int i) {
  PyObject *r;
  PyObject *x = PyInt_FromLong(i); if(!x) return 0;
  r = o->ob_type->tp_as_mapping->mp_subscript(o, x);
  Py_DECREF(x);
  return r;
}

static PyObject *__pyx_getprop_6rabbyt_7physics_6Basic2_x(PyObject *o, void *x) {
  return __pyx_f_6rabbyt_7physics_6Basic2_1x___get__(o);
}

static int __pyx_setprop_6rabbyt_7physics_6Basic2_x(PyObject *o, PyObject *v, void *x) {
  if (v) {
    return __pyx_f_6rabbyt_7physics_6Basic2_1x___set__(o, v);
  }
  else {
    PyErr_SetString(PyExc_NotImplementedError, "__del__");
    return -1;
  }
}

static PyObject *__pyx_getprop_6rabbyt_7physics_6Basic2_y(PyObject *o, void *x) {
  return __pyx_f_6rabbyt_7physics_6Basic2_1y___get__(o);
}

static int __pyx_setprop_6rabbyt_7physics_6Basic2_y(PyObject *o, PyObject *v, void *x) {
  if (v) {
    return __pyx_f_6rabbyt_7physics_6Basic2_1y___set__(o, v);
  }
  else {
    PyErr_SetString(PyExc_NotImplementedError, "__del__");
    return -1;
  }
}

static PyObject *__pyx_getprop_6rabbyt_7physics_6Basic2_vx(PyObject *o, void *x) {
  return __pyx_f_6rabbyt_7physics_6Basic2_2vx___get__(o);
}

static int __pyx_setprop_6rabbyt_7physics_6Basic2_vx(PyObject *o, PyObject *v, void *x) {
  if (v) {
    return __pyx_f_6rabbyt_7physics_6Basic2_2vx___set__(o, v);
  }
  else {
    PyErr_SetString(PyExc_NotImplementedError, "__del__");
    return -1;
  }
}

static PyObject *__pyx_getprop_6rabbyt_7physics_6Basic2_vy(PyObject *o, void *x) {
  return __pyx_f_6rabbyt_7physics_6Basic2_2vy___get__(o);
}

static int __pyx_setprop_6rabbyt_7physics_6Basic2_vy(PyObject *o, PyObject *v, void *x) {
  if (v) {
    return __pyx_f_6rabbyt_7physics_6Basic2_2vy___set__(o, v);
  }
  else {
    PyErr_SetString(PyExc_NotImplementedError, "__del__");
    return -1;
  }
}

static PyObject *__pyx_getprop_6rabbyt_7physics_6Basic2_ax(PyObject *o, void *x) {
  return __pyx_f_6rabbyt_7physics_6Basic2_2ax___get__(o);
}

static int __pyx_setprop_6rabbyt_7physics_6Basic2_ax(PyObject *o, PyObject *v, void *x) {
  if (v) {
    return __pyx_f_6rabbyt_7physics_6Basic2_2ax___set__(o, v);
  }
  else {
    PyErr_SetString(PyExc_NotImplementedError, "__del__");
    return -1;
  }
}

static PyObject *__pyx_getprop_6rabbyt_7physics_6Basic2_ay(PyObject *o, void *x) {
  return __pyx_f_6rabbyt_7physics_6Basic2_2ay___get__(o);
}

static int __pyx_setprop_6rabbyt_7physics_6Basic2_ay(PyObject *o, PyObject *v, void *x) {
  if (v) {
    return __pyx_f_6rabbyt_7physics_6Basic2_2ay___set__(o, v);
  }
  else {
    PyErr_SetString(PyExc_NotImplementedError, "__del__");
    return -1;
  }
}

static PyObject *__pyx_getprop_6rabbyt_7physics_6Basic2_xy(PyObject *o, void *x) {
  return __pyx_f_6rabbyt_7physics_6Basic2_2xy___get__(o);
}

static int __pyx_setprop_6rabbyt_7physics_6Basic2_xy(PyObject *o, PyObject *v, void *x) {
  if (v) {
    return __pyx_f_6rabbyt_7physics_6Basic2_2xy___set__(o, v);
  }
  else {
    PyErr_SetString(PyExc_NotImplementedError, "__del__");
    return -1;
  }
}

static PyObject *__pyx_getprop_6rabbyt_7physics_6Basic2_vxy(PyObject *o, void *x) {
  return __pyx_f_6rabbyt_7physics_6Basic2_3vxy___get__(o);
}

static int __pyx_setprop_6rabbyt_7physics_6Basic2_vxy(PyObject *o, PyObject *v, void *x) {
  if (v) {
    return __pyx_f_6rabbyt_7physics_6Basic2_3vxy___set__(o, v);
  }
  else {
    PyErr_SetString(PyExc_NotImplementedError, "__del__");
    return -1;
  }
}

static PyObject *__pyx_getprop_6rabbyt_7physics_6Basic2_axy(PyObject *o, void *x) {
  return __pyx_f_6rabbyt_7physics_6Basic2_3axy___get__(o);
}

static int __pyx_setprop_6rabbyt_7physics_6Basic2_axy(PyObject *o, PyObject *v, void *x) {
  if (v) {
    return __pyx_f_6rabbyt_7physics_6Basic2_3axy___set__(o, v);
  }
  else {
    PyErr_SetString(PyExc_NotImplementedError, "__del__");
    return -1;
  }
}

static struct PyMethodDef __pyx_methods_6rabbyt_7physics_Basic2[] = {
  {"update", (PyCFunction)__pyx_f_6rabbyt_7physics_6Basic2_update, METH_VARARGS|METH_KEYWORDS, 0},
  {0, 0, 0, 0}
};

static struct PyGetSetDef __pyx_getsets_6rabbyt_7physics_Basic2[] = {
  {"x", __pyx_getprop_6rabbyt_7physics_6Basic2_x, __pyx_setprop_6rabbyt_7physics_6Basic2_x, __pyx_k4, 0},
  {"y", __pyx_getprop_6rabbyt_7physics_6Basic2_y, __pyx_setprop_6rabbyt_7physics_6Basic2_y, __pyx_k5, 0},
  {"vx", __pyx_getprop_6rabbyt_7physics_6Basic2_vx, __pyx_setprop_6rabbyt_7physics_6Basic2_vx, __pyx_k6, 0},
  {"vy", __pyx_getprop_6rabbyt_7physics_6Basic2_vy, __pyx_setprop_6rabbyt_7physics_6Basic2_vy, __pyx_k7, 0},
  {"ax", __pyx_getprop_6rabbyt_7physics_6Basic2_ax, __pyx_setprop_6rabbyt_7physics_6Basic2_ax, __pyx_k8, 0},
  {"ay", __pyx_getprop_6rabbyt_7physics_6Basic2_ay, __pyx_setprop_6rabbyt_7physics_6Basic2_ay, __pyx_k9, 0},
  {"xy", __pyx_getprop_6rabbyt_7physics_6Basic2_xy, __pyx_setprop_6rabbyt_7physics_6Basic2_xy, __pyx_k10, 0},
  {"vxy", __pyx_getprop_6rabbyt_7physics_6Basic2_vxy, __pyx_setprop_6rabbyt_7physics_6Basic2_vxy, __pyx_k11, 0},
  {"axy", __pyx_getprop_6rabbyt_7physics_6Basic2_axy, __pyx_setprop_6rabbyt_7physics_6Basic2_axy, __pyx_k12, 0},
  {0, 0, 0, 0, 0}
};

static PyNumberMethods __pyx_tp_as_number_Basic2 = {
  0, /*nb_add*/
  0, /*nb_subtract*/
  0, /*nb_multiply*/
  0, /*nb_divide*/
  0, /*nb_remainder*/
  0, /*nb_divmod*/
  0, /*nb_power*/
  0, /*nb_negative*/
  0, /*nb_positive*/
  0, /*nb_absolute*/
  0, /*nb_nonzero*/
  0, /*nb_invert*/
  0, /*nb_lshift*/
  0, /*nb_rshift*/
  0, /*nb_and*/
  0, /*nb_xor*/
  0, /*nb_or*/
  0, /*nb_coerce*/
  0, /*nb_int*/
  0, /*nb_long*/
  0, /*nb_float*/
  0, /*nb_oct*/
  0, /*nb_hex*/
  0, /*nb_inplace_add*/
  0, /*nb_inplace_subtract*/
  0, /*nb_inplace_multiply*/
  0, /*nb_inplace_divide*/
  0, /*nb_inplace_remainder*/
  0, /*nb_inplace_power*/
  0, /*nb_inplace_lshift*/
  0, /*nb_inplace_rshift*/
  0, /*nb_inplace_and*/
  0, /*nb_inplace_xor*/
  0, /*nb_inplace_or*/
  0, /*nb_floor_divide*/
  0, /*nb_true_divide*/
  0, /*nb_inplace_floor_divide*/
  0, /*nb_inplace_true_divide*/
};

static PySequenceMethods __pyx_tp_as_sequence_Basic2 = {
  __pyx_f_6rabbyt_7physics_6Basic2___len__, /*sq_length*/
  0, /*sq_concat*/
  0, /*sq_repeat*/
  __pyx_sq_item_6rabbyt_7physics_Basic2, /*sq_item*/
  0, /*sq_slice*/
  0, /*sq_ass_item*/
  0, /*sq_ass_slice*/
  0, /*sq_contains*/
  0, /*sq_inplace_concat*/
  0, /*sq_inplace_repeat*/
};

static PyMappingMethods __pyx_tp_as_mapping_Basic2 = {
  __pyx_f_6rabbyt_7physics_6Basic2___len__, /*mp_length*/
  __pyx_f_6rabbyt_7physics_6Basic2___getitem__, /*mp_subscript*/
  0, /*mp_ass_subscript*/
};

static PyBufferProcs __pyx_tp_as_buffer_Basic2 = {
  0, /*bf_getreadbuffer*/
  0, /*bf_getwritebuffer*/
  0, /*bf_getsegcount*/
  0, /*bf_getcharbuffer*/
};

PyTypeObject __pyx_type_6rabbyt_7physics_Basic2 = {
  PyObject_HEAD_INIT(0)
  0, /*ob_size*/
  "rabbyt.physics.Basic2", /*tp_name*/
  sizeof(struct __pyx_obj_6rabbyt_7physics_Basic2), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6rabbyt_7physics_Basic2, /*tp_dealloc*/
  0, /*tp_print*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  0, /*tp_compare*/
  0, /*tp_repr*/
  &__pyx_tp_as_number_Basic2, /*tp_as_number*/
  &__pyx_tp_as_sequence_Basic2, /*tp_as_sequence*/
  &__pyx_tp_as_mapping_Basic2, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  &__pyx_tp_as_buffer_Basic2, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
  "\n    ``Basic2(xy=(0,0), vxy=(0,0), axy=(0,0), ...)``\n\n    (You can also use the single value properties as keyword arguments, if\n    you prefer.)\n\n    This is a convenience class for using two Basic1 instances to simulate\n    physics in two dimentions.\n\n    Using item access will return the individual Basic1 instances, so this would\n    work fine:\n\n        .. sourcecode:: python\n\n            sprite.xy = Basic2((0,10), axy=(0,-9.81))\n\n    You can set the positions, velocities, and accelerations for x and y with\n    the properties ``x``, ``y``, ``vx``, ``vy``, ``ax``, and ``ay``.\n\n    You can also assign/retrieve two value at once with ``xy``, ``vxy``, or\n    ``axy``.\n\n    Any of these properties can be passed to ``__init__()`` as keyword\n    arguments.\n\n    ``Basic2`` instances are not automatically added to\n    ``rabbyt.physics.default_update_manager``, but the individual ``Basic1``\n    instances used for each dimention are.  (Adding the ``Basic2`` instance as\n    well would result in the ``Basic1`` instances being updated twice!)\n    ", /*tp_doc*/
  __pyx_tp_traverse_6rabbyt_7physics_Basic2, /*tp_traverse*/
  __pyx_tp_clear_6rabbyt_7physics_Basic2, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_6rabbyt_7physics_Basic2, /*tp_methods*/
  0, /*tp_members*/
  __pyx_getsets_6rabbyt_7physics_Basic2, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  __pyx_f_6rabbyt_7physics_6Basic2___init__, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6rabbyt_7physics_Basic2, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
};
static struct __pyx_vtabstruct_6rabbyt_7physics__ChipmonkBodyX __pyx_vtable_6rabbyt_7physics__ChipmonkBodyX;

static PyObject *__pyx_tp_new_6rabbyt_7physics__ChipmonkBodyX(PyTypeObject *t, PyObject *a, PyObject *k) {
  PyObject *o = __pyx_ptype_5anims_Anim->tp_new(t, a, k);
  struct __pyx_obj_6rabbyt_7physics__ChipmonkBodyX *p = (struct __pyx_obj_6rabbyt_7physics__ChipmonkBodyX *)o;
  *(struct __pyx_vtabstruct_6rabbyt_7physics__ChipmonkBodyX **)&p->__pyx_base.__pyx_vtab = __pyx_vtabptr_6rabbyt_7physics__ChipmonkBodyX;
  return o;
}

static void __pyx_tp_dealloc_6rabbyt_7physics__ChipmonkBodyX(PyObject *o) {
  __pyx_ptype_5anims_Anim->tp_dealloc(o);
}

static int __pyx_tp_traverse_6rabbyt_7physics__ChipmonkBodyX(PyObject *o, visitproc v, void *a) {
  int e;
  e = __pyx_ptype_5anims_Anim->tp_traverse(o, v, a); if (e) return e;
  return 0;
}

static int __pyx_tp_clear_6rabbyt_7physics__ChipmonkBodyX(PyObject *o) {
  __pyx_ptype_5anims_Anim->tp_clear(o);
  return 0;
}

static struct PyMethodDef __pyx_methods_6rabbyt_7physics__ChipmonkBodyX[] = {
  {0, 0, 0, 0}
};

static PyNumberMethods __pyx_tp_as_number__ChipmonkBodyX = {
  0, /*nb_add*/
  0, /*nb_subtract*/
  0, /*nb_multiply*/
  0, /*nb_divide*/
  0, /*nb_remainder*/
  0, /*nb_divmod*/
  0, /*nb_power*/
  0, /*nb_negative*/
  0, /*nb_positive*/
  0, /*nb_absolute*/
  0, /*nb_nonzero*/
  0, /*nb_invert*/
  0, /*nb_lshift*/
  0, /*nb_rshift*/
  0, /*nb_and*/
  0, /*nb_xor*/
  0, /*nb_or*/
  0, /*nb_coerce*/
  0, /*nb_int*/
  0, /*nb_long*/
  0, /*nb_float*/
  0, /*nb_oct*/
  0, /*nb_hex*/
  0, /*nb_inplace_add*/
  0, /*nb_inplace_subtract*/
  0, /*nb_inplace_multiply*/
  0, /*nb_inplace_divide*/
  0, /*nb_inplace_remainder*/
  0, /*nb_inplace_power*/
  0, /*nb_inplace_lshift*/
  0, /*nb_inplace_rshift*/
  0, /*nb_inplace_and*/
  0, /*nb_inplace_xor*/
  0, /*nb_inplace_or*/
  0, /*nb_floor_divide*/
  0, /*nb_true_divide*/
  0, /*nb_inplace_floor_divide*/
  0, /*nb_inplace_true_divide*/
};

static PySequenceMethods __pyx_tp_as_sequence__ChipmonkBodyX = {
  0, /*sq_length*/
  0, /*sq_concat*/
  0, /*sq_repeat*/
  0, /*sq_item*/
  0, /*sq_slice*/
  0, /*sq_ass_item*/
  0, /*sq_ass_slice*/
  0, /*sq_contains*/
  0, /*sq_inplace_concat*/
  0, /*sq_inplace_repeat*/
};

static PyMappingMethods __pyx_tp_as_mapping__ChipmonkBodyX = {
  0, /*mp_length*/
  0, /*mp_subscript*/
  0, /*mp_ass_subscript*/
};

static PyBufferProcs __pyx_tp_as_buffer__ChipmonkBodyX = {
  0, /*bf_getreadbuffer*/
  0, /*bf_getwritebuffer*/
  0, /*bf_getsegcount*/
  0, /*bf_getcharbuffer*/
};

PyTypeObject __pyx_type_6rabbyt_7physics__ChipmonkBodyX = {
  PyObject_HEAD_INIT(0)
  0, /*ob_size*/
  "rabbyt.physics._ChipmonkBodyX", /*tp_name*/
  sizeof(struct __pyx_obj_6rabbyt_7physics__ChipmonkBodyX), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6rabbyt_7physics__ChipmonkBodyX, /*tp_dealloc*/
  0, /*tp_print*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  0, /*tp_compare*/
  0, /*tp_repr*/
  &__pyx_tp_as_number__ChipmonkBodyX, /*tp_as_number*/
  &__pyx_tp_as_sequence__ChipmonkBodyX, /*tp_as_sequence*/
  &__pyx_tp_as_mapping__ChipmonkBodyX, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  &__pyx_tp_as_buffer__ChipmonkBodyX, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
  0, /*tp_doc*/
  __pyx_tp_traverse_6rabbyt_7physics__ChipmonkBodyX, /*tp_traverse*/
  __pyx_tp_clear_6rabbyt_7physics__ChipmonkBodyX, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_6rabbyt_7physics__ChipmonkBodyX, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6rabbyt_7physics__ChipmonkBodyX, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
};
static struct __pyx_vtabstruct_6rabbyt_7physics__ChipmonkBodyY __pyx_vtable_6rabbyt_7physics__ChipmonkBodyY;

static PyObject *__pyx_tp_new_6rabbyt_7physics__ChipmonkBodyY(PyTypeObject *t, PyObject *a, PyObject *k) {
  PyObject *o = __pyx_ptype_5anims_Anim->tp_new(t, a, k);
  struct __pyx_obj_6rabbyt_7physics__ChipmonkBodyY *p = (struct __pyx_obj_6rabbyt_7physics__ChipmonkBodyY *)o;
  *(struct __pyx_vtabstruct_6rabbyt_7physics__ChipmonkBodyY **)&p->__pyx_base.__pyx_vtab = __pyx_vtabptr_6rabbyt_7physics__ChipmonkBodyY;
  return o;
}

static void __pyx_tp_dealloc_6rabbyt_7physics__ChipmonkBodyY(PyObject *o) {
  __pyx_ptype_5anims_Anim->tp_dealloc(o);
}

static int __pyx_tp_traverse_6rabbyt_7physics__ChipmonkBodyY(PyObject *o, visitproc v, void *a) {
  int e;
  e = __pyx_ptype_5anims_Anim->tp_traverse(o, v, a); if (e) return e;
  return 0;
}

static int __pyx_tp_clear_6rabbyt_7physics__ChipmonkBodyY(PyObject *o) {
  __pyx_ptype_5anims_Anim->tp_clear(o);
  return 0;
}

static struct PyMethodDef __pyx_methods_6rabbyt_7physics__ChipmonkBodyY[] = {
  {0, 0, 0, 0}
};

static PyNumberMethods __pyx_tp_as_number__ChipmonkBodyY = {
  0, /*nb_add*/
  0, /*nb_subtract*/
  0, /*nb_multiply*/
  0, /*nb_divide*/
  0, /*nb_remainder*/
  0, /*nb_divmod*/
  0, /*nb_power*/
  0, /*nb_negative*/
  0, /*nb_positive*/
  0, /*nb_absolute*/
  0, /*nb_nonzero*/
  0, /*nb_invert*/
  0, /*nb_lshift*/
  0, /*nb_rshift*/
  0, /*nb_and*/
  0, /*nb_xor*/
  0, /*nb_or*/
  0, /*nb_coerce*/
  0, /*nb_int*/
  0, /*nb_long*/
  0, /*nb_float*/
  0, /*nb_oct*/
  0, /*nb_hex*/
  0, /*nb_inplace_add*/
  0, /*nb_inplace_subtract*/
  0, /*nb_inplace_multiply*/
  0, /*nb_inplace_divide*/
  0, /*nb_inplace_remainder*/
  0, /*nb_inplace_power*/
  0, /*nb_inplace_lshift*/
  0, /*nb_inplace_rshift*/
  0, /*nb_inplace_and*/
  0, /*nb_inplace_xor*/
  0, /*nb_inplace_or*/
  0, /*nb_floor_divide*/
  0, /*nb_true_divide*/
  0, /*nb_inplace_floor_divide*/
  0, /*nb_inplace_true_divide*/
};

static PySequenceMethods __pyx_tp_as_sequence__ChipmonkBodyY = {
  0, /*sq_length*/
  0, /*sq_concat*/
  0, /*sq_repeat*/
  0, /*sq_item*/
  0, /*sq_slice*/
  0, /*sq_ass_item*/
  0, /*sq_ass_slice*/
  0, /*sq_contains*/
  0, /*sq_inplace_concat*/
  0, /*sq_inplace_repeat*/
};

static PyMappingMethods __pyx_tp_as_mapping__ChipmonkBodyY = {
  0, /*mp_length*/
  0, /*mp_subscript*/
  0, /*mp_ass_subscript*/
};

static PyBufferProcs __pyx_tp_as_buffer__ChipmonkBodyY = {
  0, /*bf_getreadbuffer*/
  0, /*bf_getwritebuffer*/
  0, /*bf_getsegcount*/
  0, /*bf_getcharbuffer*/
};

PyTypeObject __pyx_type_6rabbyt_7physics__ChipmonkBodyY = {
  PyObject_HEAD_INIT(0)
  0, /*ob_size*/
  "rabbyt.physics._ChipmonkBodyY", /*tp_name*/
  sizeof(struct __pyx_obj_6rabbyt_7physics__ChipmonkBodyY), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6rabbyt_7physics__ChipmonkBodyY, /*tp_dealloc*/
  0, /*tp_print*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  0, /*tp_compare*/
  0, /*tp_repr*/
  &__pyx_tp_as_number__ChipmonkBodyY, /*tp_as_number*/
  &__pyx_tp_as_sequence__ChipmonkBodyY, /*tp_as_sequence*/
  &__pyx_tp_as_mapping__ChipmonkBodyY, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  &__pyx_tp_as_buffer__ChipmonkBodyY, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
  0, /*tp_doc*/
  __pyx_tp_traverse_6rabbyt_7physics__ChipmonkBodyY, /*tp_traverse*/
  __pyx_tp_clear_6rabbyt_7physics__ChipmonkBodyY, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_6rabbyt_7physics__ChipmonkBodyY, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6rabbyt_7physics__ChipmonkBodyY, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
};
static struct __pyx_vtabstruct_6rabbyt_7physics__ChipmonkBodyA __pyx_vtable_6rabbyt_7physics__ChipmonkBodyA;

static PyObject *__pyx_tp_new_6rabbyt_7physics__ChipmonkBodyA(PyTypeObject *t, PyObject *a, PyObject *k) {
  PyObject *o = __pyx_ptype_5anims_Anim->tp_new(t, a, k);
  struct __pyx_obj_6rabbyt_7physics__ChipmonkBodyA *p = (struct __pyx_obj_6rabbyt_7physics__ChipmonkBodyA *)o;
  *(struct __pyx_vtabstruct_6rabbyt_7physics__ChipmonkBodyA **)&p->__pyx_base.__pyx_vtab = __pyx_vtabptr_6rabbyt_7physics__ChipmonkBodyA;
  return o;
}

static void __pyx_tp_dealloc_6rabbyt_7physics__ChipmonkBodyA(PyObject *o) {
  __pyx_ptype_5anims_Anim->tp_dealloc(o);
}

static int __pyx_tp_traverse_6rabbyt_7physics__ChipmonkBodyA(PyObject *o, visitproc v, void *a) {
  int e;
  e = __pyx_ptype_5anims_Anim->tp_traverse(o, v, a); if (e) return e;
  return 0;
}

static int __pyx_tp_clear_6rabbyt_7physics__ChipmonkBodyA(PyObject *o) {
  __pyx_ptype_5anims_Anim->tp_clear(o);
  return 0;
}

static struct PyMethodDef __pyx_methods_6rabbyt_7physics__ChipmonkBodyA[] = {
  {0, 0, 0, 0}
};

static PyNumberMethods __pyx_tp_as_number__ChipmonkBodyA = {
  0, /*nb_add*/
  0, /*nb_subtract*/
  0, /*nb_multiply*/
  0, /*nb_divide*/
  0, /*nb_remainder*/
  0, /*nb_divmod*/
  0, /*nb_power*/
  0, /*nb_negative*/
  0, /*nb_positive*/
  0, /*nb_absolute*/
  0, /*nb_nonzero*/
  0, /*nb_invert*/
  0, /*nb_lshift*/
  0, /*nb_rshift*/
  0, /*nb_and*/
  0, /*nb_xor*/
  0, /*nb_or*/
  0, /*nb_coerce*/
  0, /*nb_int*/
  0, /*nb_long*/
  0, /*nb_float*/
  0, /*nb_oct*/
  0, /*nb_hex*/
  0, /*nb_inplace_add*/
  0, /*nb_inplace_subtract*/
  0, /*nb_inplace_multiply*/
  0, /*nb_inplace_divide*/
  0, /*nb_inplace_remainder*/
  0, /*nb_inplace_power*/
  0, /*nb_inplace_lshift*/
  0, /*nb_inplace_rshift*/
  0, /*nb_inplace_and*/
  0, /*nb_inplace_xor*/
  0, /*nb_inplace_or*/
  0, /*nb_floor_divide*/
  0, /*nb_true_divide*/
  0, /*nb_inplace_floor_divide*/
  0, /*nb_inplace_true_divide*/
};

static PySequenceMethods __pyx_tp_as_sequence__ChipmonkBodyA = {
  0, /*sq_length*/
  0, /*sq_concat*/
  0, /*sq_repeat*/
  0, /*sq_item*/
  0, /*sq_slice*/
  0, /*sq_ass_item*/
  0, /*sq_ass_slice*/
  0, /*sq_contains*/
  0, /*sq_inplace_concat*/
  0, /*sq_inplace_repeat*/
};

static PyMappingMethods __pyx_tp_as_mapping__ChipmonkBodyA = {
  0, /*mp_length*/
  0, /*mp_subscript*/
  0, /*mp_ass_subscript*/
};

static PyBufferProcs __pyx_tp_as_buffer__ChipmonkBodyA = {
  0, /*bf_getreadbuffer*/
  0, /*bf_getwritebuffer*/
  0, /*bf_getsegcount*/
  0, /*bf_getcharbuffer*/
};

PyTypeObject __pyx_type_6rabbyt_7physics__ChipmonkBodyA = {
  PyObject_HEAD_INIT(0)
  0, /*ob_size*/
  "rabbyt.physics._ChipmonkBodyA", /*tp_name*/
  sizeof(struct __pyx_obj_6rabbyt_7physics__ChipmonkBodyA), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6rabbyt_7physics__ChipmonkBodyA, /*tp_dealloc*/
  0, /*tp_print*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  0, /*tp_compare*/
  0, /*tp_repr*/
  &__pyx_tp_as_number__ChipmonkBodyA, /*tp_as_number*/
  &__pyx_tp_as_sequence__ChipmonkBodyA, /*tp_as_sequence*/
  &__pyx_tp_as_mapping__ChipmonkBodyA, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  &__pyx_tp_as_buffer__ChipmonkBodyA, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
  0, /*tp_doc*/
  __pyx_tp_traverse_6rabbyt_7physics__ChipmonkBodyA, /*tp_traverse*/
  __pyx_tp_clear_6rabbyt_7physics__ChipmonkBodyA, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_6rabbyt_7physics__ChipmonkBodyA, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6rabbyt_7physics__ChipmonkBodyA, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
};

static struct PyMethodDef __pyx_methods[] = {
  {"chipmonk_body_anims", (PyCFunction)__pyx_f_6rabbyt_7physics_chipmonk_body_anims, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6rabbyt_7physics_chipmonk_body_anims},
  {0, 0, 0, 0}
};

static void __pyx_init_filenames(void); /*proto*/

PyMODINIT_FUNC initphysics(void); /*proto*/
PyMODINIT_FUNC initphysics(void) {
  PyObject *__pyx_1 = 0;
  PyObject *__pyx_2 = 0;
  PyObject *__pyx_3 = 0;
  PyObject *__pyx_4 = 0;
  PyObject *__pyx_5 = 0;
  PyObject *__pyx_6 = 0;
  PyObject *__pyx_7 = 0;
  PyObject *__pyx_8 = 0;
  PyObject *__pyx_9 = 0;
  PyObject *__pyx_10 = 0;
  __pyx_init_filenames();
  __pyx_m = Py_InitModule4("physics", __pyx_methods, 0, 0, PYTHON_API_VERSION);
  if (!__pyx_m) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; goto __pyx_L1;};
  __pyx_b = PyImport_AddModule("__builtin__");
  if (!__pyx_b) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; goto __pyx_L1;};
  if (PyObject_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; goto __pyx_L1;};
  if (__Pyx_InternStrings(__pyx_intern_tab) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; goto __pyx_L1;};
  if (__Pyx_InitStrings(__pyx_string_tab) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; goto __pyx_L1;};
  __pyx_ptype_5anims_Anim = __Pyx_ImportType("anims", "Anim", sizeof(struct __pyx_obj_5anims_Anim)); if (!__pyx_ptype_5anims_Anim) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; goto __pyx_L1;}
  if (__Pyx_GetVtable(__pyx_ptype_5anims_Anim->tp_dict, &__pyx_vtabptr_5anims_Anim) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; goto __pyx_L1;}
  __pyx_vtabptr_6rabbyt_7physics_Basic1 = &__pyx_vtable_6rabbyt_7physics_Basic1;
  __pyx_vtable_6rabbyt_7physics_Basic1.__pyx_base = *__pyx_vtabptr_5anims_Anim;
  *(void(**)())&__pyx_vtable_6rabbyt_7physics_Basic1.__pyx_base.g = (void(*)())__pyx_f_6rabbyt_7physics_6Basic1_g;
  *(void(**)())&__pyx_vtable_6rabbyt_7physics_Basic1._update = (void(*)())__pyx_f_6rabbyt_7physics_6Basic1__update;
  __pyx_type_6rabbyt_7physics_Basic1.tp_base = __pyx_ptype_5anims_Anim;
  __pyx_type_6rabbyt_7physics_Basic1.tp_free = _PyObject_GC_Del;
  if (PyType_Ready(&__pyx_type_6rabbyt_7physics_Basic1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 20; goto __pyx_L1;}
  if (__Pyx_SetVtable(__pyx_type_6rabbyt_7physics_Basic1.tp_dict, __pyx_vtabptr_6rabbyt_7physics_Basic1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 20; goto __pyx_L1;}
  if (PyObject_SetAttrString(__pyx_m, "Basic1", (PyObject *)&__pyx_type_6rabbyt_7physics_Basic1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 20; goto __pyx_L1;}
  if (__pyx_type_6rabbyt_7physics_Basic1.tp_weaklistoffset == 0) __pyx_type_6rabbyt_7physics_Basic1.tp_weaklistoffset = offsetof(struct __pyx_obj_6rabbyt_7physics_Basic1, __weakref__);
  __pyx_ptype_6rabbyt_7physics_Basic1 = &__pyx_type_6rabbyt_7physics_Basic1;
  __pyx_type_6rabbyt_7physics_Basic2.tp_free = _PyObject_GC_Del;
  if (PyType_Ready(&__pyx_type_6rabbyt_7physics_Basic2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 114; goto __pyx_L1;}
  if (PyObject_SetAttrString(__pyx_m, "Basic2", (PyObject *)&__pyx_type_6rabbyt_7physics_Basic2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 114; goto __pyx_L1;}
  if (__pyx_type_6rabbyt_7physics_Basic2.tp_weaklistoffset == 0) __pyx_type_6rabbyt_7physics_Basic2.tp_weaklistoffset = offsetof(struct __pyx_obj_6rabbyt_7physics_Basic2, __weakref__);
  __pyx_ptype_6rabbyt_7physics_Basic2 = &__pyx_type_6rabbyt_7physics_Basic2;
  __pyx_vtabptr_6rabbyt_7physics__ChipmonkBodyX = &__pyx_vtable_6rabbyt_7physics__ChipmonkBodyX;
  __pyx_vtable_6rabbyt_7physics__ChipmonkBodyX.__pyx_base = *__pyx_vtabptr_5anims_Anim;
  *(void(**)())&__pyx_vtable_6rabbyt_7physics__ChipmonkBodyX.__pyx_base.g = (void(*)())__pyx_f_6rabbyt_7physics_14_ChipmonkBodyX_g;
  __pyx_type_6rabbyt_7physics__ChipmonkBodyX.tp_base = __pyx_ptype_5anims_Anim;
  if (PyType_Ready(&__pyx_type_6rabbyt_7physics__ChipmonkBodyX) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 282; goto __pyx_L1;}
  if (__Pyx_SetVtable(__pyx_type_6rabbyt_7physics__ChipmonkBodyX.tp_dict, __pyx_vtabptr_6rabbyt_7physics__ChipmonkBodyX) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 282; goto __pyx_L1;}
  if (PyObject_SetAttrString(__pyx_m, "_ChipmonkBodyX", (PyObject *)&__pyx_type_6rabbyt_7physics__ChipmonkBodyX) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 282; goto __pyx_L1;}
  __pyx_ptype_6rabbyt_7physics__ChipmonkBodyX = &__pyx_type_6rabbyt_7physics__ChipmonkBodyX;
  __pyx_vtabptr_6rabbyt_7physics__ChipmonkBodyY = &__pyx_vtable_6rabbyt_7physics__ChipmonkBodyY;
  __pyx_vtable_6rabbyt_7physics__ChipmonkBodyY.__pyx_base = *__pyx_vtabptr_5anims_Anim;
  *(void(**)())&__pyx_vtable_6rabbyt_7physics__ChipmonkBodyY.__pyx_base.g = (void(*)())__pyx_f_6rabbyt_7physics_14_ChipmonkBodyY_g;
  __pyx_type_6rabbyt_7physics__ChipmonkBodyY.tp_base = __pyx_ptype_5anims_Anim;
  if (PyType_Ready(&__pyx_type_6rabbyt_7physics__ChipmonkBodyY) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 288; goto __pyx_L1;}
  if (__Pyx_SetVtable(__pyx_type_6rabbyt_7physics__ChipmonkBodyY.tp_dict, __pyx_vtabptr_6rabbyt_7physics__ChipmonkBodyY) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 288; goto __pyx_L1;}
  if (PyObject_SetAttrString(__pyx_m, "_ChipmonkBodyY", (PyObject *)&__pyx_type_6rabbyt_7physics__ChipmonkBodyY) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 288; goto __pyx_L1;}
  __pyx_ptype_6rabbyt_7physics__ChipmonkBodyY = &__pyx_type_6rabbyt_7physics__ChipmonkBodyY;
  __pyx_vtabptr_6rabbyt_7physics__ChipmonkBodyA = &__pyx_vtable_6rabbyt_7physics__ChipmonkBodyA;
  __pyx_vtable_6rabbyt_7physics__ChipmonkBodyA.__pyx_base = *__pyx_vtabptr_5anims_Anim;
  *(void(**)())&__pyx_vtable_6rabbyt_7physics__ChipmonkBodyA.__pyx_base.g = (void(*)())__pyx_f_6rabbyt_7physics_14_ChipmonkBodyA_g;
  __pyx_type_6rabbyt_7physics__ChipmonkBodyA.tp_base = __pyx_ptype_5anims_Anim;
  if (PyType_Ready(&__pyx_type_6rabbyt_7physics__ChipmonkBodyA) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 294; goto __pyx_L1;}
  if (__Pyx_SetVtable(__pyx_type_6rabbyt_7physics__ChipmonkBodyA.tp_dict, __pyx_vtabptr_6rabbyt_7physics__ChipmonkBodyA) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 294; goto __pyx_L1;}
  if (PyObject_SetAttrString(__pyx_m, "_ChipmonkBodyA", (PyObject *)&__pyx_type_6rabbyt_7physics__ChipmonkBodyA) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 294; goto __pyx_L1;}
  __pyx_ptype_6rabbyt_7physics__ChipmonkBodyA = &__pyx_type_6rabbyt_7physics__ChipmonkBodyA;
  __pyx_ptype_5anims_AnimConst = __Pyx_ImportType("anims", "AnimConst", sizeof(struct __pyx_obj_5anims_AnimConst)); if (!__pyx_ptype_5anims_AnimConst) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 5; goto __pyx_L1;}
  if (__Pyx_GetVtable(__pyx_ptype_5anims_AnimConst->tp_dict, &__pyx_vtabptr_5anims_AnimConst) < 0) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 5; goto __pyx_L1;}

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.physics.pyx":4 */
  __pyx_1 = PyList_New(1); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4; goto __pyx_L1;}
  Py_INCREF(__pyx_n_to_Anim);
  PyList_SET_ITEM(__pyx_1, 0, __pyx_n_to_Anim);
  __pyx_2 = __Pyx_Import(__pyx_k13p, __pyx_1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4; goto __pyx_L1;}
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  __pyx_1 = PyObject_GetAttr(__pyx_2, __pyx_n_to_Anim); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4; goto __pyx_L1;}
  if (PyObject_SetAttr(__pyx_m, __pyx_n_to_Anim, __pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4; goto __pyx_L1;}
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  Py_DECREF(__pyx_2); __pyx_2 = 0;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.physics.pyx":6 */
  __pyx_2 = __Pyx_Import(__pyx_n_weakref, 0); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6; goto __pyx_L1;}
  if (PyObject_SetAttr(__pyx_m, __pyx_n_weakref, __pyx_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6; goto __pyx_L1;}
  Py_DECREF(__pyx_2); __pyx_2 = 0;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.physics.pyx":16 */
  __pyx_v_6rabbyt_7physics_pi = 3.1415926535897931;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.physics.pyx":17 */
  __pyx_v_6rabbyt_7physics_pi_over_180 = (__pyx_v_6rabbyt_7physics_pi / 180.0);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.physics.pyx":18 */
  __pyx_v_6rabbyt_7physics_oneeighty_over_pi = (180.0 / __pyx_v_6rabbyt_7physics_pi);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.physics.pyx":49 */
  __pyx_1 = PyInt_FromLong(0); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 49; goto __pyx_L1;}
  __pyx_k16 = __pyx_1;
  __pyx_1 = 0;
  __pyx_2 = PyInt_FromLong(0); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 49; goto __pyx_L1;}
  __pyx_k17 = __pyx_2;
  __pyx_2 = 0;
  __pyx_3 = PyInt_FromLong(0); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 49; goto __pyx_L1;}
  __pyx_k18 = __pyx_3;
  __pyx_3 = 0;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.physics.pyx":153 */
  __pyx_4 = PyInt_FromLong(0); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 153; goto __pyx_L1;}
  __pyx_5 = PyInt_FromLong(0); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 153; goto __pyx_L1;}
  __pyx_6 = PyTuple_New(2); if (!__pyx_6) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 153; goto __pyx_L1;}
  PyTuple_SET_ITEM(__pyx_6, 0, __pyx_4);
  PyTuple_SET_ITEM(__pyx_6, 1, __pyx_5);
  __pyx_4 = 0;
  __pyx_5 = 0;
  __pyx_k19 = __pyx_6;
  __pyx_6 = 0;
  __pyx_4 = PyInt_FromLong(0); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 153; goto __pyx_L1;}
  __pyx_5 = PyInt_FromLong(0); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 153; goto __pyx_L1;}
  __pyx_7 = PyTuple_New(2); if (!__pyx_7) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 153; goto __pyx_L1;}
  PyTuple_SET_ITEM(__pyx_7, 0, __pyx_4);
  PyTuple_SET_ITEM(__pyx_7, 1, __pyx_5);
  __pyx_4 = 0;
  __pyx_5 = 0;
  __pyx_k20 = __pyx_7;
  __pyx_7 = 0;
  __pyx_4 = PyInt_FromLong(0); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 153; goto __pyx_L1;}
  __pyx_5 = PyInt_FromLong(0); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 153; goto __pyx_L1;}
  __pyx_8 = PyTuple_New(2); if (!__pyx_8) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 153; goto __pyx_L1;}
  PyTuple_SET_ITEM(__pyx_8, 0, __pyx_4);
  PyTuple_SET_ITEM(__pyx_8, 1, __pyx_5);
  __pyx_4 = 0;
  __pyx_5 = 0;
  __pyx_k21 = __pyx_8;
  __pyx_8 = 0;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.physics.pyx":233 */
  __pyx_4 = PyDict_New(); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 233; goto __pyx_L1;}
  __pyx_5 = __Pyx_GetName(__pyx_b, __pyx_n_object); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 233; goto __pyx_L1;}
  __pyx_9 = PyTuple_New(1); if (!__pyx_9) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 233; goto __pyx_L1;}
  PyTuple_SET_ITEM(__pyx_9, 0, __pyx_5);
  __pyx_5 = 0;
  if (PyDict_SetItemString(__pyx_4, "__doc__", __pyx_k23p) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 233; goto __pyx_L1;}
  __pyx_5 = __Pyx_CreateClass(__pyx_9, __pyx_4, __pyx_n_UpdateManager, "rabbyt.physics"); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 233; goto __pyx_L1;}
  Py_DECREF(__pyx_9); __pyx_9 = 0;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.physics.pyx":247 */
  __pyx_9 = PyCFunction_New(&__pyx_mdef_6rabbyt_7physics_13UpdateManager___init__, 0); if (!__pyx_9) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 247; goto __pyx_L1;}
  __pyx_10 = PyMethod_New(__pyx_9, 0, __pyx_5); if (!__pyx_10) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 247; goto __pyx_L1;}
  Py_DECREF(__pyx_9); __pyx_9 = 0;
  if (PyObject_SetAttr(__pyx_5, __pyx_n___init__, __pyx_10) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 247; goto __pyx_L1;}
  Py_DECREF(__pyx_10); __pyx_10 = 0;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.physics.pyx":250 */
  __pyx_9 = PyCFunction_New(&__pyx_mdef_6rabbyt_7physics_13UpdateManager_append, 0); if (!__pyx_9) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 250; goto __pyx_L1;}
  __pyx_10 = PyMethod_New(__pyx_9, 0, __pyx_5); if (!__pyx_10) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 250; goto __pyx_L1;}
  Py_DECREF(__pyx_9); __pyx_9 = 0;
  if (PyObject_SetAttr(__pyx_5, __pyx_n_append, __pyx_10) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 250; goto __pyx_L1;}
  Py_DECREF(__pyx_10); __pyx_10 = 0;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.physics.pyx":253 */
  __pyx_9 = PyCFunction_New(&__pyx_mdef_6rabbyt_7physics_13UpdateManager_remove_ref, 0); if (!__pyx_9) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 253; goto __pyx_L1;}
  __pyx_10 = PyMethod_New(__pyx_9, 0, __pyx_5); if (!__pyx_10) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 253; goto __pyx_L1;}
  Py_DECREF(__pyx_9); __pyx_9 = 0;
  if (PyObject_SetAttr(__pyx_5, __pyx_n_remove_ref, __pyx_10) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 253; goto __pyx_L1;}
  Py_DECREF(__pyx_10); __pyx_10 = 0;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.physics.pyx":259 */
  __pyx_9 = PyCFunction_New(&__pyx_mdef_6rabbyt_7physics_13UpdateManager_update, 0); if (!__pyx_9) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 259; goto __pyx_L1;}
  __pyx_10 = PyMethod_New(__pyx_9, 0, __pyx_5); if (!__pyx_10) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 259; goto __pyx_L1;}
  Py_DECREF(__pyx_9); __pyx_9 = 0;
  if (PyObject_SetAttr(__pyx_5, __pyx_n_update, __pyx_10) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 259; goto __pyx_L1;}
  Py_DECREF(__pyx_10); __pyx_10 = 0;
  if (PyObject_SetAttr(__pyx_m, __pyx_n_UpdateManager, __pyx_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 233; goto __pyx_L1;}
  Py_DECREF(__pyx_5); __pyx_5 = 0;
  Py_DECREF(__pyx_4); __pyx_4 = 0;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.physics.pyx":268 */
  __pyx_9 = __Pyx_GetName(__pyx_m, __pyx_n_UpdateManager); if (!__pyx_9) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 268; goto __pyx_L1;}
  __pyx_10 = PyObject_CallObject(__pyx_9, 0); if (!__pyx_10) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 268; goto __pyx_L1;}
  Py_DECREF(__pyx_9); __pyx_9 = 0;
  if (PyObject_SetAttr(__pyx_m, __pyx_n_default_update_manager, __pyx_10) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 268; goto __pyx_L1;}
  Py_DECREF(__pyx_10); __pyx_10 = 0;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.physics.pyx":269 */
  __pyx_5 = __Pyx_GetName(__pyx_m, __pyx_n_default_update_manager); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 269; goto __pyx_L1;}
  __pyx_4 = PyObject_GetAttr(__pyx_5, __pyx_n_update); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 269; goto __pyx_L1;}
  Py_DECREF(__pyx_5); __pyx_5 = 0;
  if (PyObject_SetAttr(__pyx_m, __pyx_n_update, __pyx_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 269; goto __pyx_L1;}
  Py_DECREF(__pyx_4); __pyx_4 = 0;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.physics.pyx":333 */
  __pyx_9 = PyObject_GetAttr(__pyx_k24p, __pyx_n_split); if (!__pyx_9) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 333; goto __pyx_L1;}
  __pyx_10 = PyObject_CallObject(__pyx_9, 0); if (!__pyx_10) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 333; goto __pyx_L1;}
  Py_DECREF(__pyx_9); __pyx_9 = 0;
  if (PyObject_SetAttr(__pyx_m, __pyx_n___docs_all__, __pyx_10) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 332; goto __pyx_L1;}
  Py_DECREF(__pyx_10); __pyx_10 = 0;
  return;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  Py_XDECREF(__pyx_2);
  Py_XDECREF(__pyx_3);
  Py_XDECREF(__pyx_4);
  Py_XDECREF(__pyx_5);
  Py_XDECREF(__pyx_6);
  Py_XDECREF(__pyx_7);
  Py_XDECREF(__pyx_8);
  Py_XDECREF(__pyx_9);
  Py_XDECREF(__pyx_10);
  __Pyx_AddTraceback("rabbyt.physics");
}

static char *__pyx_filenames[] = {
  "rabbyt.physics.pyx",
  "anims.pxd",
};

/* Runtime support code */

static void __pyx_init_filenames(void) {
  __pyx_f = __pyx_filenames;
}

static int __Pyx_GetStarArgs(
    PyObject **args, 
    PyObject **kwds,
    char *kwd_list[], 
    int nargs,
    PyObject **args2, 
    PyObject **kwds2)
{
    PyObject *x = 0, *args1 = 0, *kwds1 = 0;
    
    if (args2)
        *args2 = 0;
    if (kwds2)
        *kwds2 = 0;
    
    if (args2) {
        args1 = PyTuple_GetSlice(*args, 0, nargs);
        if (!args1)
            goto bad;
        *args2 = PyTuple_GetSlice(*args, nargs, PyTuple_Size(*args));
        if (!*args2)
            goto bad;
    }
    else {
        args1 = *args;
        Py_INCREF(args1);
    }
    
    if (kwds2) {
        if (*kwds) {
            char **p;
            kwds1 = PyDict_New();
            if (!kwds)
                goto bad;
            *kwds2 = PyDict_Copy(*kwds);
            if (!*kwds2)
                goto bad;
            for (p = kwd_list; *p; p++) {
                x = PyDict_GetItemString(*kwds, *p);
                if (x) {
                    if (PyDict_SetItemString(kwds1, *p, x) < 0)
                        goto bad;
                    if (PyDict_DelItemString(*kwds2, *p) < 0)
                        goto bad;
                }
            }
        }
        else {
            *kwds2 = PyDict_New();
            if (!*kwds2)
                goto bad;
        }
    }
    else {
        kwds1 = *kwds;
        Py_XINCREF(kwds1);
    }
    
    *args = args1;
    *kwds = kwds1;
    return 0;
bad:
    Py_XDECREF(args1);
    Py_XDECREF(kwds1);
    if (*args2) {
        Py_XDECREF(*args2);
    }
    if (*kwds2) {
        Py_XDECREF(*kwds2);
    }
    return -1;
}

static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list) {
    PyObject *__import__ = 0;
    PyObject *empty_list = 0;
    PyObject *module = 0;
    PyObject *global_dict = 0;
    PyObject *empty_dict = 0;
    PyObject *list;
    __import__ = PyObject_GetAttrString(__pyx_b, "__import__");
    if (!__import__)
        goto bad;
    if (from_list)
        list = from_list;
    else {
        empty_list = PyList_New(0);
        if (!empty_list)
            goto bad;
        list = empty_list;
    }
    global_dict = PyModule_GetDict(__pyx_m);
    if (!global_dict)
        goto bad;
    empty_dict = PyDict_New();
    if (!empty_dict)
        goto bad;
    module = PyObject_CallFunction(__import__, "OOOO",
        name, global_dict, empty_dict, list);
bad:
    Py_XDECREF(empty_list);
    Py_XDECREF(__import__);
    Py_XDECREF(empty_dict);
    return module;
}

static PyObject *__Pyx_GetName(PyObject *dict, PyObject *name) {
    PyObject *result;
    result = PyObject_GetAttr(dict, name);
    if (!result)
        PyErr_SetObject(PyExc_NameError, name);
    return result;
}

static PyObject *__Pyx_CreateClass(
    PyObject *bases, PyObject *dict, PyObject *name, char *modname)
{
    PyObject *py_modname;
    PyObject *result = 0;
    
    py_modname = PyString_FromString(modname);
    if (!py_modname)
        goto bad;
    if (PyDict_SetItemString(dict, "__module__", py_modname) < 0)
        goto bad;
    result = PyClass_New(bases, dict, name);
bad:
    Py_XDECREF(py_modname);
    return result;
}

static int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type) {
    if (!type) {
        PyErr_Format(PyExc_SystemError, "Missing type object");
        return 0;
    }
    if (obj == Py_None || PyObject_TypeCheck(obj, type))
        return 1;
    PyErr_Format(PyExc_TypeError, "Cannot convert %s to %s",
        obj->ob_type->tp_name, type->tp_name);
    return 0;
}

static void __Pyx_UnpackError(void) {
    PyErr_SetString(PyExc_ValueError, "unpack sequence of wrong size");
}

static PyObject *__Pyx_UnpackItem(PyObject *iter) {
    PyObject *item;
    if (!(item = PyIter_Next(iter))) {
        if (!PyErr_Occurred())
            __Pyx_UnpackError();
    }
    return item;
}

static int __Pyx_EndUnpack(PyObject *iter) {
    PyObject *item;
    if ((item = PyIter_Next(iter))) {
        Py_DECREF(item);
        __Pyx_UnpackError();
        return -1;
    }
    else if (!PyErr_Occurred())
        return 0;
    else
        return -1;
}

static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb) {
    Py_XINCREF(type);
    Py_XINCREF(value);
    Py_XINCREF(tb);
    /* First, check the traceback argument, replacing None with NULL. */
    if (tb == Py_None) {
        Py_DECREF(tb);
        tb = 0;
    }
    else if (tb != NULL && !PyTraceBack_Check(tb)) {
        PyErr_SetString(PyExc_TypeError,
            "raise: arg 3 must be a traceback or None");
        goto raise_error;
    }
    /* Next, replace a missing value with None */
    if (value == NULL) {
        value = Py_None;
        Py_INCREF(value);
    }
    /* Next, repeatedly, replace a tuple exception with its first item */
    while (PyTuple_Check(type) && PyTuple_Size(type) > 0) {
        PyObject *tmp = type;
        type = PyTuple_GET_ITEM(type, 0);
        Py_INCREF(type);
        Py_DECREF(tmp);
    }
    if (PyString_Check(type)) {
        if (PyErr_Warn(PyExc_DeprecationWarning,
                "raising a string exception is deprecated"))
            goto raise_error;
    }
    else if (PyType_Check(type) || PyClass_Check(type))
        ; /*PyErr_NormalizeException(&type, &value, &tb);*/
    else {
        /* Raising an instance.  The value should be a dummy. */
        if (value != Py_None) {
            PyErr_SetString(PyExc_TypeError,
                "instance exception may not have a separate value");
            goto raise_error;
        }
        /* Normalize to raise <class>, <instance> */
        Py_DECREF(value);
        value = type;
        if (PyInstance_Check(type))
            type = (PyObject*) ((PyInstanceObject*)type)->in_class;
        else
            type = (PyObject*) type->ob_type;
        Py_INCREF(type);
    }
    PyErr_Restore(type, value, tb);
    return;
raise_error:
    Py_XDECREF(value);
    Py_XDECREF(type);
    Py_XDECREF(tb);
    return;
}

static PyObject *__Pyx_GetExcValue(void) {
    PyObject *type = 0, *value = 0, *tb = 0;
    PyObject *result = 0;
    PyThreadState *tstate = PyThreadState_Get();
    PyErr_Fetch(&type, &value, &tb);
    PyErr_NormalizeException(&type, &value, &tb);
    if (PyErr_Occurred())
        goto bad;
    if (!value) {
        value = Py_None;
        Py_INCREF(value);
    }
    Py_XDECREF(tstate->exc_type);
    Py_XDECREF(tstate->exc_value);
    Py_XDECREF(tstate->exc_traceback);
    tstate->exc_type = type;
    tstate->exc_value = value;
    tstate->exc_traceback = tb;
    result = value;
    Py_XINCREF(result);
    type = 0;
    value = 0;
    tb = 0;
bad:
    Py_XDECREF(type);
    Py_XDECREF(value);
    Py_XDECREF(tb);
    return result;
}

static int __Pyx_InternStrings(__Pyx_InternTabEntry *t) {
    while (t->p) {
        *t->p = PyString_InternFromString(t->s);
        if (!*t->p)
            return -1;
        ++t;
    }
    return 0;
}

static int __Pyx_InitStrings(__Pyx_StringTabEntry *t) {
    while (t->p) {
        *t->p = PyString_FromStringAndSize(t->s, t->n - 1);
        if (!*t->p)
            return -1;
        ++t;
    }
    return 0;
}

static PyTypeObject *__Pyx_ImportType(char *module_name, char *class_name, 
    long size) 
{
    PyObject *py_module_name = 0;
    PyObject *py_class_name = 0;
    PyObject *py_name_list = 0;
    PyObject *py_module = 0;
    PyObject *result = 0;
    
    py_module_name = PyString_FromString(module_name);
    if (!py_module_name)
        goto bad;
    py_class_name = PyString_FromString(class_name);
    if (!py_class_name)
        goto bad;
    py_name_list = PyList_New(1);
    if (!py_name_list)
        goto bad;
    Py_INCREF(py_class_name);
    if (PyList_SetItem(py_name_list, 0, py_class_name) < 0)
        goto bad;
    py_module = __Pyx_Import(py_module_name, py_name_list);
    if (!py_module)
        goto bad;
    result = PyObject_GetAttr(py_module, py_class_name);
    if (!result)
        goto bad;
    if (!PyType_Check(result)) {
        PyErr_Format(PyExc_TypeError, 
            "%s.%s is not a type object",
            module_name, class_name);
        goto bad;
    }
    if (((PyTypeObject *)result)->tp_basicsize != size) {
        PyErr_Format(PyExc_ValueError, 
            "%s.%s does not appear to be the correct type object",
            module_name, class_name);
        goto bad;
    }
    goto done;
bad:
    Py_XDECREF(result);
    result = 0;
done:
    Py_XDECREF(py_module_name);
    Py_XDECREF(py_class_name);
    Py_XDECREF(py_name_list);
    return (PyTypeObject *)result;
}

static int __Pyx_GetVtable(PyObject *dict, void *vtabptr) {
    int result;
    PyObject *pycobj;
    
    pycobj = PyMapping_GetItemString(dict, "__pyx_vtable__");
    if (!pycobj)
        goto bad;
    *(void **)vtabptr = PyCObject_AsVoidPtr(pycobj);
    if (!*(void **)vtabptr)
        goto bad;
    result = 0;
    goto done;

bad:
    result = -1;
done:
    Py_XDECREF(pycobj);
    return result;
}

static int __Pyx_SetVtable(PyObject *dict, void *vtable) {
    PyObject *pycobj = 0;
    int result;
    
    pycobj = PyCObject_FromVoidPtr(vtable, 0);
    if (!pycobj)
        goto bad;
    if (PyDict_SetItemString(dict, "__pyx_vtable__", pycobj) < 0)
        goto bad;
    result = 0;
    goto done;

bad:
    result = -1;
done:
    Py_XDECREF(pycobj);
    return result;
}

#include "compile.h"
#include "frameobject.h"
#include "traceback.h"

static void __Pyx_AddTraceback(char *funcname) {
    PyObject *py_srcfile = 0;
    PyObject *py_funcname = 0;
    PyObject *py_globals = 0;
    PyObject *empty_tuple = 0;
    PyObject *empty_string = 0;
    PyCodeObject *py_code = 0;
    PyFrameObject *py_frame = 0;
    
    py_srcfile = PyString_FromString(__pyx_filename);
    if (!py_srcfile) goto bad;
    py_funcname = PyString_FromString(funcname);
    if (!py_funcname) goto bad;
    py_globals = PyModule_GetDict(__pyx_m);
    if (!py_globals) goto bad;
    empty_tuple = PyTuple_New(0);
    if (!empty_tuple) goto bad;
    empty_string = PyString_FromString("");
    if (!empty_string) goto bad;
    py_code = PyCode_New(
        0,            /*int argcount,*/
        0,            /*int nlocals,*/
        0,            /*int stacksize,*/
        0,            /*int flags,*/
        empty_string, /*PyObject *code,*/
        empty_tuple,  /*PyObject *consts,*/
        empty_tuple,  /*PyObject *names,*/
        empty_tuple,  /*PyObject *varnames,*/
        empty_tuple,  /*PyObject *freevars,*/
        empty_tuple,  /*PyObject *cellvars,*/
        py_srcfile,   /*PyObject *filename,*/
        py_funcname,  /*PyObject *name,*/
        __pyx_lineno,   /*int firstlineno,*/
        empty_string  /*PyObject *lnotab*/
    );
    if (!py_code) goto bad;
    py_frame = PyFrame_New(
        PyThreadState_Get(), /*PyThreadState *tstate,*/
        py_code,             /*PyCodeObject *code,*/
        py_globals,          /*PyObject *globals,*/
        0                    /*PyObject *locals*/
    );
    if (!py_frame) goto bad;
    py_frame->f_lineno = __pyx_lineno;
    PyTraceBack_Here(py_frame);
bad:
    Py_XDECREF(py_srcfile);
    Py_XDECREF(py_funcname);
    Py_XDECREF(empty_tuple);
    Py_XDECREF(empty_string);
    Py_XDECREF(py_code);
    Py_XDECREF(py_frame);
}
