/* Generated by Pyrex 0.9.5.1a on Thu Aug  2 17:00:43 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 char __pyx_mdoc[] = "\n";

static int __Pyx_ArgTypeTest(PyObject *obj, PyTypeObject *type, int none_allowed, char *name); /*proto*/

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

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

static void __Pyx_WriteUnraisable(char *name); /*proto*/

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

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

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

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

/* Declarations from rabbyt.anims */


struct __pyx_obj_6rabbyt_5anims_Anim {
  PyObject_HEAD
  struct __pyx_vtabstruct_6rabbyt_5anims_Anim *__pyx_vtab;
};

struct __pyx_vtabstruct_6rabbyt_5anims_Anim {
  float ((*g)(struct __pyx_obj_6rabbyt_5anims_Anim *));
};
static struct __pyx_vtabstruct_6rabbyt_5anims_Anim *__pyx_vtabptr_6rabbyt_5anims_Anim;


struct __pyx_obj_6rabbyt_5anims_AnimConst {
  struct __pyx_obj_6rabbyt_5anims_Anim __pyx_base;
  float v;
};

struct __pyx_vtabstruct_6rabbyt_5anims_AnimConst {
  struct __pyx_vtabstruct_6rabbyt_5anims_Anim __pyx_base;
};
static struct __pyx_vtabstruct_6rabbyt_5anims_AnimConst *__pyx_vtabptr_6rabbyt_5anims_AnimConst;


struct __pyx_obj_6rabbyt_5anims_AnimLerp {
  struct __pyx_obj_6rabbyt_5anims_Anim __pyx_base;
  float start;
  float end;
  int startt;
  int endt;
  int extend;
  float one_over_dt;
};

struct __pyx_vtabstruct_6rabbyt_5anims_AnimLerp {
  struct __pyx_vtabstruct_6rabbyt_5anims_Anim __pyx_base;
};
static struct __pyx_vtabstruct_6rabbyt_5anims_AnimLerp *__pyx_vtabptr_6rabbyt_5anims_AnimLerp;


struct __pyx_obj_6rabbyt_5anims_AnimStaticCubicBezier {
  struct __pyx_obj_6rabbyt_5anims_Anim __pyx_base;
  float p0;
  int startt;
  int endt;
  int extend;
  float one_over_dt;
  float a;
  float b;
  float c;
};

struct __pyx_vtabstruct_6rabbyt_5anims_AnimStaticCubicBezier {
  struct __pyx_vtabstruct_6rabbyt_5anims_Anim __pyx_base;
};
static struct __pyx_vtabstruct_6rabbyt_5anims_AnimStaticCubicBezier *__pyx_vtabptr_6rabbyt_5anims_AnimStaticCubicBezier;


struct __pyx_obj_6rabbyt_5anims_AnimWrap {
  struct __pyx_obj_6rabbyt_5anims_Anim __pyx_base;
  struct __pyx_obj_6rabbyt_5anims_Anim *parent;
  PyObject *bounds;
  unsigned char is_static;
  float (s_bounds[2]);
};

struct __pyx_vtabstruct_6rabbyt_5anims_AnimWrap {
  struct __pyx_vtabstruct_6rabbyt_5anims_Anim __pyx_base;
};
static struct __pyx_vtabstruct_6rabbyt_5anims_AnimWrap *__pyx_vtabptr_6rabbyt_5anims_AnimWrap;


struct __pyx_obj_6rabbyt_5anims_AnimAddStatic {
  struct __pyx_obj_6rabbyt_5anims_Anim __pyx_base;
  float s;
  struct __pyx_obj_6rabbyt_5anims_Anim *a;
};

struct __pyx_vtabstruct_6rabbyt_5anims_AnimAddStatic {
  struct __pyx_vtabstruct_6rabbyt_5anims_Anim __pyx_base;
};
static struct __pyx_vtabstruct_6rabbyt_5anims_AnimAddStatic *__pyx_vtabptr_6rabbyt_5anims_AnimAddStatic;


struct __pyx_obj_6rabbyt_5anims__AnimArithmatic {
  struct __pyx_obj_6rabbyt_5anims_Anim __pyx_base;
  struct __pyx_obj_6rabbyt_5anims_Anim *a1;
  struct __pyx_obj_6rabbyt_5anims_Anim *a2;
};

struct __pyx_vtabstruct_6rabbyt_5anims__AnimArithmatic {
  struct __pyx_vtabstruct_6rabbyt_5anims_Anim __pyx_base;
};
static struct __pyx_vtabstruct_6rabbyt_5anims__AnimArithmatic *__pyx_vtabptr_6rabbyt_5anims__AnimArithmatic;


struct __pyx_obj_6rabbyt_5anims_AnimAdd {
  struct __pyx_obj_6rabbyt_5anims__AnimArithmatic __pyx_base;
};

struct __pyx_vtabstruct_6rabbyt_5anims_AnimAdd {
  struct __pyx_vtabstruct_6rabbyt_5anims__AnimArithmatic __pyx_base;
};
static struct __pyx_vtabstruct_6rabbyt_5anims_AnimAdd *__pyx_vtabptr_6rabbyt_5anims_AnimAdd;


struct __pyx_obj_6rabbyt_5anims_AnimSub {
  struct __pyx_obj_6rabbyt_5anims__AnimArithmatic __pyx_base;
};

struct __pyx_vtabstruct_6rabbyt_5anims_AnimSub {
  struct __pyx_vtabstruct_6rabbyt_5anims__AnimArithmatic __pyx_base;
};
static struct __pyx_vtabstruct_6rabbyt_5anims_AnimSub *__pyx_vtabptr_6rabbyt_5anims_AnimSub;


struct __pyx_obj_6rabbyt_5anims_AnimMul {
  struct __pyx_obj_6rabbyt_5anims__AnimArithmatic __pyx_base;
};

struct __pyx_vtabstruct_6rabbyt_5anims_AnimMul {
  struct __pyx_vtabstruct_6rabbyt_5anims__AnimArithmatic __pyx_base;
};
static struct __pyx_vtabstruct_6rabbyt_5anims_AnimMul *__pyx_vtabptr_6rabbyt_5anims_AnimMul;


struct __pyx_obj_6rabbyt_5anims_AnimDiv {
  struct __pyx_obj_6rabbyt_5anims__AnimArithmatic __pyx_base;
};

struct __pyx_vtabstruct_6rabbyt_5anims_AnimDiv {
  struct __pyx_vtabstruct_6rabbyt_5anims__AnimArithmatic __pyx_base;
};
static struct __pyx_vtabstruct_6rabbyt_5anims_AnimDiv *__pyx_vtabptr_6rabbyt_5anims_AnimDiv;


struct __pyx_obj_6rabbyt_5anims_AnimPyFunc {
  struct __pyx_obj_6rabbyt_5anims_Anim __pyx_base;
  PyObject *function;
  int cache_output;
  float cache;
  int cache_time;
};

struct __pyx_vtabstruct_6rabbyt_5anims_AnimPyFunc {
  struct __pyx_vtabstruct_6rabbyt_5anims_Anim __pyx_base;
};
static struct __pyx_vtabstruct_6rabbyt_5anims_AnimPyFunc *__pyx_vtabptr_6rabbyt_5anims_AnimPyFunc;


struct __pyx_obj_6rabbyt_5anims_AnimProxy {
  struct __pyx_obj_6rabbyt_5anims_Anim __pyx_base;
  int cache_output;
  float cache;
  int cache_time;
  struct __pyx_obj_6rabbyt_5anims_Anim *_value;
};

struct __pyx_vtabstruct_6rabbyt_5anims_AnimProxy {
  struct __pyx_vtabstruct_6rabbyt_5anims_Anim __pyx_base;
};
static struct __pyx_vtabstruct_6rabbyt_5anims_AnimProxy *__pyx_vtabptr_6rabbyt_5anims_AnimProxy;

static PyTypeObject *__pyx_ptype_6rabbyt_5anims_Anim = 0;
static PyTypeObject *__pyx_ptype_6rabbyt_5anims_AnimConst = 0;
static PyTypeObject *__pyx_ptype_6rabbyt_5anims_AnimLerp = 0;
static PyTypeObject *__pyx_ptype_6rabbyt_5anims_AnimStaticCubicBezier = 0;
static PyTypeObject *__pyx_ptype_6rabbyt_5anims_AnimWrap = 0;
static PyTypeObject *__pyx_ptype_6rabbyt_5anims_AnimAddStatic = 0;
static PyTypeObject *__pyx_ptype_6rabbyt_5anims__AnimArithmatic = 0;
static PyTypeObject *__pyx_ptype_6rabbyt_5anims_AnimAdd = 0;
static PyTypeObject *__pyx_ptype_6rabbyt_5anims_AnimSub = 0;
static PyTypeObject *__pyx_ptype_6rabbyt_5anims_AnimMul = 0;
static PyTypeObject *__pyx_ptype_6rabbyt_5anims_AnimDiv = 0;
static PyTypeObject *__pyx_ptype_6rabbyt_5anims_AnimPyFunc = 0;
static PyTypeObject *__pyx_ptype_6rabbyt_5anims_AnimProxy = 0;
static int __pyx_v_6rabbyt_5anims_time;
static PyObject *__pyx_k3;
static PyObject *__pyx_k4;
static PyObject *__pyx_k5;
static int (__pyx_f_6rabbyt_5anims__get_time(void)); /*proto*/
static float (__pyx_f_6rabbyt_5anims_extend_t(float ,int )); /*proto*/


/* Implementation of rabbyt.anims */

static char (__pyx_k1[]) = "\nCopyright (C) 2007  Matthew Marshall\n\nThis library is free software; you can redistribute it and/or\nmodify it under the terms of the GNU Library General Public\nLicense as published by the Free Software Foundation; either\nversion 2 of the License, or (at your option) any later version.\n\nThis library is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\nLibrary General Public License for more details.\n\nYou should have received a copy of the GNU Library General Public\nLicense along with this library; if not, write to the Free\nFoundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA\n";
static char (__pyx_k2[]) = "Matthew Marshall <matthew@matthewmarshall.org>";
static char (__pyx_k6[]) = "set_time get_time Anim AnimConst AnimPyFunc AnimProxy to_Anim";

static PyObject *__pyx_n___credits__;
static PyObject *__pyx_n___author__;
static PyObject *__pyx_n_set_time;
static PyObject *__pyx_n_get_time;
static PyObject *__pyx_n_to_Anim;
static PyObject *__pyx_n___docs_all__;
static PyObject *__pyx_n_True;
static PyObject *__pyx_n_False;
static PyObject *__pyx_n_split;

static PyObject *__pyx_k1p;
static PyObject *__pyx_k2p;
static PyObject *__pyx_k6p;

static PyObject *__pyx_f_6rabbyt_5anims_set_time(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6rabbyt_5anims_set_time[] = "\n    ``set_time(t)``\n\n    Sets the time that rabbyt.get_time() should return.\n\n    If you are using any time based animations, (such as ``rabbyt.lerp`` or\n    ``rabbyt.bezier3``,) you should call this function every frame.\n\n    For example, if you are using pygame you can do this::\n\n        rabbyt.set_time(pygame.time.get_ticks())\n\n    Using this function should make it easier to implement a pause feature.\n    ";
static PyObject *__pyx_f_6rabbyt_5anims_set_time(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  int __pyx_v_t;
  PyObject *__pyx_r;
  static char *__pyx_argnames[] = {"t",0};
  if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "i", __pyx_argnames, &__pyx_v_t)) return 0;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.anims.pyx":50 */
  __pyx_v_6rabbyt_5anims_time = __pyx_v_t;

  __pyx_r = Py_None; Py_INCREF(Py_None);
  return __pyx_r;
}

static PyObject *__pyx_f_6rabbyt_5anims_get_time(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6rabbyt_5anims_get_time[] = "\n    ``get_time()``\n\n    Gets the time that was last set by ``rabbyt.set_time()``\n    ";
static PyObject *__pyx_f_6rabbyt_5anims_get_time(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_r;
  PyObject *__pyx_1 = 0;
  static char *__pyx_argnames[] = {0};
  if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "", __pyx_argnames)) return 0;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.anims.pyx":59 */
  __pyx_1 = PyInt_FromLong(__pyx_v_6rabbyt_5anims_time); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 59; 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.anims.get_time");
  __pyx_r = 0;
  __pyx_L0:;
  return __pyx_r;
}

static int __pyx_f_6rabbyt_5anims__get_time(void) {
  int __pyx_r;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.anims.pyx":62 */
  __pyx_r = __pyx_v_6rabbyt_5anims_time;
  goto __pyx_L0;

  __pyx_r = 0;
  __pyx_L0:;
  return __pyx_r;
}

static float __pyx_f_6rabbyt_5anims_4Anim_g(struct __pyx_obj_6rabbyt_5anims_Anim *__pyx_v_self) {
  float __pyx_r;
  Py_INCREF(__pyx_v_self);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.anims.pyx":75 */
  __pyx_r = 0.0;
  goto __pyx_L0;

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

static PyObject *__pyx_f_6rabbyt_5anims_4Anim_get(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6rabbyt_5anims_4Anim_get[] = "\n        get() -> float\n\n        Gets the value.\n        ";
static PyObject *__pyx_f_6rabbyt_5anims_4Anim_get(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_r;
  PyObject *__pyx_1 = 0;
  static char *__pyx_argnames[] = {0};
  if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "", __pyx_argnames)) return 0;
  Py_INCREF(__pyx_v_self);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.anims.pyx":83 */
  __pyx_1 = PyFloat_FromDouble(((struct __pyx_vtabstruct_6rabbyt_5anims_Anim *)((struct __pyx_obj_6rabbyt_5anims_Anim *)__pyx_v_self)->__pyx_vtab)->g(((struct __pyx_obj_6rabbyt_5anims_Anim *)__pyx_v_self))); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 83; 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.anims.Anim.get");
  __pyx_r = 0;
  __pyx_L0:;
  Py_DECREF(__pyx_v_self);
  return __pyx_r;
}

static PyObject *__pyx_n_isinstance;
static PyObject *__pyx_n_int;
static PyObject *__pyx_n_long;
static PyObject *__pyx_n_float;

static PyObject *__pyx_f_6rabbyt_5anims_4Anim___add__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /*proto*/
static PyObject *__pyx_f_6rabbyt_5anims_4Anim___add__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
  PyObject *__pyx_r;
  PyObject *__pyx_1 = 0;
  PyObject *__pyx_2 = 0;
  PyObject *__pyx_3 = 0;
  int __pyx_4;
  int __pyx_5;
  PyObject *__pyx_6 = 0;
  PyObject *__pyx_7 = 0;
  Py_INCREF(__pyx_v_self);
  Py_INCREF(__pyx_v_other);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.anims.pyx":86 */
  __pyx_1 = __Pyx_GetName(__pyx_b, __pyx_n_isinstance); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 86; goto __pyx_L1;}
  __pyx_2 = PyTuple_New(2); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 86; goto __pyx_L1;}
  Py_INCREF(__pyx_v_self);
  PyTuple_SET_ITEM(__pyx_2, 0, __pyx_v_self);
  Py_INCREF(((PyObject*)__pyx_ptype_6rabbyt_5anims_Anim));
  PyTuple_SET_ITEM(__pyx_2, 1, ((PyObject*)__pyx_ptype_6rabbyt_5anims_Anim));
  __pyx_3 = PyObject_CallObject(__pyx_1, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 86; goto __pyx_L1;}
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  __pyx_4 = PyObject_IsTrue(__pyx_3); if (__pyx_4 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 86; goto __pyx_L1;}
  Py_DECREF(__pyx_3); __pyx_3 = 0;
  __pyx_5 = (!__pyx_4);
  if (__pyx_5) {

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.anims.pyx":87 */
    __pyx_1 = __pyx_v_other;
    Py_INCREF(__pyx_1);
    __pyx_2 = __pyx_v_self;
    Py_INCREF(__pyx_2);
    Py_DECREF(__pyx_v_self);
    __pyx_v_self = __pyx_1;
    __pyx_1 = 0;
    Py_DECREF(__pyx_v_other);
    __pyx_v_other = __pyx_2;
    __pyx_2 = 0;
    goto __pyx_L2;
  }
  __pyx_L2:;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.anims.pyx":88 */
  __pyx_3 = __Pyx_GetName(__pyx_b, __pyx_n_isinstance); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 88; goto __pyx_L1;}
  __pyx_1 = __Pyx_GetName(__pyx_b, __pyx_n_int); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 88; goto __pyx_L1;}
  __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_long); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 88; goto __pyx_L1;}
  __pyx_6 = __Pyx_GetName(__pyx_b, __pyx_n_float); if (!__pyx_6) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 88; goto __pyx_L1;}
  __pyx_7 = PyTuple_New(3); if (!__pyx_7) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 88; goto __pyx_L1;}
  PyTuple_SET_ITEM(__pyx_7, 0, __pyx_1);
  PyTuple_SET_ITEM(__pyx_7, 1, __pyx_2);
  PyTuple_SET_ITEM(__pyx_7, 2, __pyx_6);
  __pyx_1 = 0;
  __pyx_2 = 0;
  __pyx_6 = 0;
  __pyx_1 = PyTuple_New(2); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 88; goto __pyx_L1;}
  Py_INCREF(__pyx_v_other);
  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_v_other);
  PyTuple_SET_ITEM(__pyx_1, 1, __pyx_7);
  __pyx_7 = 0;
  __pyx_2 = PyObject_CallObject(__pyx_3, __pyx_1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 88; goto __pyx_L1;}
  Py_DECREF(__pyx_3); __pyx_3 = 0;
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  __pyx_4 = PyObject_IsTrue(__pyx_2); if (__pyx_4 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 88; goto __pyx_L1;}
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  if (__pyx_4) {

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.anims.pyx":89 */
    __pyx_6 = PyTuple_New(2); if (!__pyx_6) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 89; goto __pyx_L1;}
    Py_INCREF(__pyx_v_self);
    PyTuple_SET_ITEM(__pyx_6, 0, __pyx_v_self);
    Py_INCREF(__pyx_v_other);
    PyTuple_SET_ITEM(__pyx_6, 1, __pyx_v_other);
    __pyx_7 = PyObject_CallObject(((PyObject*)__pyx_ptype_6rabbyt_5anims_AnimAddStatic), __pyx_6); if (!__pyx_7) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 89; goto __pyx_L1;}
    Py_DECREF(__pyx_6); __pyx_6 = 0;
    __pyx_r = __pyx_7;
    __pyx_7 = 0;
    goto __pyx_L0;
    goto __pyx_L3;
  }
  /*else*/ {

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.anims.pyx":91 */
    __pyx_3 = PyTuple_New(2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 91; goto __pyx_L1;}
    Py_INCREF(__pyx_v_self);
    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_v_self);
    Py_INCREF(__pyx_v_other);
    PyTuple_SET_ITEM(__pyx_3, 1, __pyx_v_other);
    __pyx_1 = PyObject_CallObject(((PyObject*)__pyx_ptype_6rabbyt_5anims_AnimAdd), __pyx_3); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 91; goto __pyx_L1;}
    Py_DECREF(__pyx_3); __pyx_3 = 0;
    __pyx_r = __pyx_1;
    __pyx_1 = 0;
    goto __pyx_L0;
  }
  __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);
  Py_XDECREF(__pyx_6);
  Py_XDECREF(__pyx_7);
  __Pyx_AddTraceback("rabbyt.anims.Anim.__add__");
  __pyx_r = 0;
  __pyx_L0:;
  Py_DECREF(__pyx_v_self);
  Py_DECREF(__pyx_v_other);
  return __pyx_r;
}

static PyObject *__pyx_f_6rabbyt_5anims_4Anim___sub__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /*proto*/
static PyObject *__pyx_f_6rabbyt_5anims_4Anim___sub__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
  PyObject *__pyx_r;
  PyObject *__pyx_1 = 0;
  PyObject *__pyx_2 = 0;
  PyObject *__pyx_3 = 0;
  int __pyx_4;
  PyObject *__pyx_5 = 0;
  PyObject *__pyx_6 = 0;
  PyObject *__pyx_7 = 0;
  Py_INCREF(__pyx_v_self);
  Py_INCREF(__pyx_v_other);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.anims.pyx":94 */
  __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_isinstance); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 94; goto __pyx_L1;}
  __pyx_3 = PyTuple_New(2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 94; goto __pyx_L1;}
  Py_INCREF(__pyx_v_self);
  PyTuple_SET_ITEM(__pyx_3, 0, __pyx_v_self);
  Py_INCREF(((PyObject*)__pyx_ptype_6rabbyt_5anims_Anim));
  PyTuple_SET_ITEM(__pyx_3, 1, ((PyObject*)__pyx_ptype_6rabbyt_5anims_Anim));
  __pyx_1 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 94; goto __pyx_L1;}
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  Py_DECREF(__pyx_3); __pyx_3 = 0;
  __pyx_4 = PyObject_IsTrue(__pyx_1); if (__pyx_4 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 94; goto __pyx_L1;}
  if (__pyx_4) {
    Py_DECREF(__pyx_1); __pyx_1 = 0;
    __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_isinstance); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 94; goto __pyx_L1;}
    __pyx_3 = __Pyx_GetName(__pyx_b, __pyx_n_int); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 94; goto __pyx_L1;}
    __pyx_5 = __Pyx_GetName(__pyx_b, __pyx_n_long); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 94; goto __pyx_L1;}
    __pyx_6 = __Pyx_GetName(__pyx_b, __pyx_n_float); if (!__pyx_6) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 94; goto __pyx_L1;}
    __pyx_7 = PyTuple_New(3); if (!__pyx_7) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 94; goto __pyx_L1;}
    PyTuple_SET_ITEM(__pyx_7, 0, __pyx_3);
    PyTuple_SET_ITEM(__pyx_7, 1, __pyx_5);
    PyTuple_SET_ITEM(__pyx_7, 2, __pyx_6);
    __pyx_3 = 0;
    __pyx_5 = 0;
    __pyx_6 = 0;
    __pyx_3 = PyTuple_New(2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 94; goto __pyx_L1;}
    Py_INCREF(__pyx_v_other);
    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_v_other);
    PyTuple_SET_ITEM(__pyx_3, 1, __pyx_7);
    __pyx_7 = 0;
    __pyx_1 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 94; goto __pyx_L1;}
    Py_DECREF(__pyx_2); __pyx_2 = 0;
    Py_DECREF(__pyx_3); __pyx_3 = 0;
  }
  __pyx_4 = PyObject_IsTrue(__pyx_1); if (__pyx_4 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 94; goto __pyx_L1;}
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  if (__pyx_4) {

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.anims.pyx":95 */
    __pyx_5 = PyNumber_Negative(__pyx_v_other); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 95; goto __pyx_L1;}
    __pyx_6 = PyTuple_New(2); if (!__pyx_6) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 95; goto __pyx_L1;}
    Py_INCREF(__pyx_v_self);
    PyTuple_SET_ITEM(__pyx_6, 0, __pyx_v_self);
    PyTuple_SET_ITEM(__pyx_6, 1, __pyx_5);
    __pyx_5 = 0;
    __pyx_7 = PyObject_CallObject(((PyObject*)__pyx_ptype_6rabbyt_5anims_AnimAddStatic), __pyx_6); if (!__pyx_7) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 95; goto __pyx_L1;}
    Py_DECREF(__pyx_6); __pyx_6 = 0;
    __pyx_r = __pyx_7;
    __pyx_7 = 0;
    goto __pyx_L0;
    goto __pyx_L2;
  }
  /*else*/ {

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.anims.pyx":97 */
    __pyx_2 = PyTuple_New(2); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 97; goto __pyx_L1;}
    Py_INCREF(__pyx_v_self);
    PyTuple_SET_ITEM(__pyx_2, 0, __pyx_v_self);
    Py_INCREF(__pyx_v_other);
    PyTuple_SET_ITEM(__pyx_2, 1, __pyx_v_other);
    __pyx_3 = PyObject_CallObject(((PyObject*)__pyx_ptype_6rabbyt_5anims_AnimSub), __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 97; goto __pyx_L1;}
    Py_DECREF(__pyx_2); __pyx_2 = 0;
    __pyx_r = __pyx_3;
    __pyx_3 = 0;
    goto __pyx_L0;
  }
  __pyx_L2:;

  __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_5);
  Py_XDECREF(__pyx_6);
  Py_XDECREF(__pyx_7);
  __Pyx_AddTraceback("rabbyt.anims.Anim.__sub__");
  __pyx_r = 0;
  __pyx_L0:;
  Py_DECREF(__pyx_v_self);
  Py_DECREF(__pyx_v_other);
  return __pyx_r;
}

static PyObject *__pyx_f_6rabbyt_5anims_4Anim___mul__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /*proto*/
static PyObject *__pyx_f_6rabbyt_5anims_4Anim___mul__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
  PyObject *__pyx_r;
  PyObject *__pyx_1 = 0;
  PyObject *__pyx_2 = 0;
  Py_INCREF(__pyx_v_self);
  Py_INCREF(__pyx_v_other);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.anims.pyx":100 */
  __pyx_1 = PyTuple_New(2); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 100; goto __pyx_L1;}
  Py_INCREF(__pyx_v_self);
  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_v_self);
  Py_INCREF(__pyx_v_other);
  PyTuple_SET_ITEM(__pyx_1, 1, __pyx_v_other);
  __pyx_2 = PyObject_CallObject(((PyObject*)__pyx_ptype_6rabbyt_5anims_AnimMul), __pyx_1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 100; goto __pyx_L1;}
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  __pyx_r = __pyx_2;
  __pyx_2 = 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);
  __Pyx_AddTraceback("rabbyt.anims.Anim.__mul__");
  __pyx_r = 0;
  __pyx_L0:;
  Py_DECREF(__pyx_v_self);
  Py_DECREF(__pyx_v_other);
  return __pyx_r;
}

static PyObject *__pyx_f_6rabbyt_5anims_4Anim___div__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /*proto*/
static PyObject *__pyx_f_6rabbyt_5anims_4Anim___div__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
  PyObject *__pyx_r;
  PyObject *__pyx_1 = 0;
  PyObject *__pyx_2 = 0;
  Py_INCREF(__pyx_v_self);
  Py_INCREF(__pyx_v_other);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.anims.pyx":103 */
  __pyx_1 = PyTuple_New(2); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 103; goto __pyx_L1;}
  Py_INCREF(__pyx_v_self);
  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_v_self);
  Py_INCREF(__pyx_v_other);
  PyTuple_SET_ITEM(__pyx_1, 1, __pyx_v_other);
  __pyx_2 = PyObject_CallObject(((PyObject*)__pyx_ptype_6rabbyt_5anims_AnimDiv), __pyx_1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 103; goto __pyx_L1;}
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  __pyx_r = __pyx_2;
  __pyx_2 = 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);
  __Pyx_AddTraceback("rabbyt.anims.Anim.__div__");
  __pyx_r = 0;
  __pyx_L0:;
  Py_DECREF(__pyx_v_self);
  Py_DECREF(__pyx_v_other);
  return __pyx_r;
}

static int __pyx_f_6rabbyt_5anims_9AnimConst___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_f_6rabbyt_5anims_9AnimConst___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  float __pyx_v_v;
  int __pyx_r;
  static char *__pyx_argnames[] = {"v",0};
  if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "f", __pyx_argnames, &__pyx_v_v)) return -1;
  Py_INCREF((PyObject *)__pyx_v_self);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.anims.pyx":118 */
  ((struct __pyx_obj_6rabbyt_5anims_AnimConst *)__pyx_v_self)->v = __pyx_v_v;

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

static float __pyx_f_6rabbyt_5anims_9AnimConst_g(struct __pyx_obj_6rabbyt_5anims_AnimConst *__pyx_v_self) {
  float __pyx_r;
  Py_INCREF((PyObject *)__pyx_v_self);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.anims.pyx":121 */
  __pyx_r = __pyx_v_self->v;
  goto __pyx_L0;

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

static float __pyx_f_6rabbyt_5anims_extend_t(float __pyx_v_t,int __pyx_v_mode) {
  float __pyx_r;
  int __pyx_1;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.anims.pyx":124 */
  __pyx_1 = (__pyx_v_mode == 1);
  if (__pyx_1) {

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.anims.pyx":125 */
    __pyx_1 = (__pyx_v_t < 0);
    if (__pyx_1) {

      /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.anims.pyx":126 */
      __pyx_v_t = 0;
      goto __pyx_L3;
    }
    __pyx_1 = (__pyx_v_t > 1);
    if (__pyx_1) {

      /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.anims.pyx":128 */
      __pyx_v_t = 1;
      goto __pyx_L3;
    }
    __pyx_L3:;
    goto __pyx_L2;
  }
  __pyx_1 = (__pyx_v_mode == 2);
  if (__pyx_1) {

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.anims.pyx":130 */
    goto __pyx_L2;
  }
  __pyx_1 = (__pyx_v_mode == 3);
  if (__pyx_1) {

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.anims.pyx":132 */
    __pyx_1 = (__pyx_v_t >= 1);
    if (__pyx_1) {

      /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.anims.pyx":133 */
      __pyx_v_t = (__pyx_v_t - ((int )__pyx_v_t));
      goto __pyx_L4;
    }
    __pyx_1 = (__pyx_v_t < 0);
    if (__pyx_1) {

      /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.anims.pyx":135 */
      __pyx_v_t = ((1 + __pyx_v_t) - ((int )__pyx_v_t));
      goto __pyx_L4;
    }
    __pyx_L4:;
    goto __pyx_L2;
  }
  __pyx_1 = (__pyx_v_mode == 4);
  if (__pyx_1) {

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.anims.pyx":137 */
    __pyx_1 = (__pyx_v_t < 0);
    if (__pyx_1) {

      /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.anims.pyx":138 */
      __pyx_v_t = (-__pyx_v_t);
      goto __pyx_L5;
    }
    __pyx_L5:;

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.anims.pyx":139 */
    __pyx_1 = ((((int )__pyx_v_t) % 2) == 1);
    if (__pyx_1) {

      /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.anims.pyx":140 */
      __pyx_v_t = (1 - (__pyx_v_t - ((int )__pyx_v_t)));
      goto __pyx_L6;
    }
    /*else*/ {

      /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.anims.pyx":142 */
      __pyx_v_t = (__pyx_v_t - ((int )__pyx_v_t));
    }
    __pyx_L6:;
    goto __pyx_L2;
  }
  __pyx_L2:;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.anims.pyx":143 */
  __pyx_r = __pyx_v_t;
  goto __pyx_L0;

  __pyx_r = 0;
  __pyx_L0:;
  return __pyx_r;
}

static int __pyx_f_6rabbyt_5anims_8AnimLerp___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_f_6rabbyt_5anims_8AnimLerp___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  float __pyx_v_start;
  float __pyx_v_end;
  int __pyx_v_startt;
  int __pyx_v_endt;
  int __pyx_v_extend;
  int __pyx_r;
  static char *__pyx_argnames[] = {"start","end","startt","endt","extend",0};
  if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "ffiii", __pyx_argnames, &__pyx_v_start, &__pyx_v_end, &__pyx_v_startt, &__pyx_v_endt, &__pyx_v_extend)) return -1;
  Py_INCREF((PyObject *)__pyx_v_self);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.anims.pyx":155 */
  ((struct __pyx_obj_6rabbyt_5anims_AnimLerp *)__pyx_v_self)->start = __pyx_v_start;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.anims.pyx":156 */
  ((struct __pyx_obj_6rabbyt_5anims_AnimLerp *)__pyx_v_self)->end = __pyx_v_end;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.anims.pyx":157 */
  ((struct __pyx_obj_6rabbyt_5anims_AnimLerp *)__pyx_v_self)->startt = __pyx_v_startt;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.anims.pyx":158 */
  ((struct __pyx_obj_6rabbyt_5anims_AnimLerp *)__pyx_v_self)->endt = __pyx_v_endt;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.anims.pyx":159 */
  ((struct __pyx_obj_6rabbyt_5anims_AnimLerp *)__pyx_v_self)->extend = __pyx_v_extend;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.anims.pyx":160 */
  ((struct __pyx_obj_6rabbyt_5anims_AnimLerp *)__pyx_v_self)->one_over_dt = (1 / ((float )(((struct __pyx_obj_6rabbyt_5anims_AnimLerp *)__pyx_v_self)->endt - ((struct __pyx_obj_6rabbyt_5anims_AnimLerp *)__pyx_v_self)->startt)));

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

static float __pyx_f_6rabbyt_5anims_8AnimLerp_g(struct __pyx_obj_6rabbyt_5anims_AnimLerp *__pyx_v_self) {
  float __pyx_v_t;
  float __pyx_r;
  Py_INCREF((PyObject *)__pyx_v_self);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.anims.pyx":164 */
  __pyx_v_t = __pyx_f_6rabbyt_5anims_extend_t(((__pyx_f_6rabbyt_5anims__get_time() - __pyx_v_self->startt) * __pyx_v_self->one_over_dt),__pyx_v_self->extend);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.anims.pyx":166 */
  __pyx_r = (((__pyx_v_self->end - __pyx_v_self->start) * __pyx_v_t) + __pyx_v_self->start);
  goto __pyx_L0;

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

static int __pyx_f_6rabbyt_5anims_21AnimStaticCubicBezier___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_f_6rabbyt_5anims_21AnimStaticCubicBezier___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  float __pyx_v_p0;
  float __pyx_v_p1;
  float __pyx_v_p2;
  float __pyx_v_p3;
  int __pyx_v_startt;
  int __pyx_v_endt;
  int __pyx_v_extend;
  int __pyx_r;
  static char *__pyx_argnames[] = {"p0","p1","p2","p3","startt","endt","extend",0};
  if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "ffffiii", __pyx_argnames, &__pyx_v_p0, &__pyx_v_p1, &__pyx_v_p2, &__pyx_v_p3, &__pyx_v_startt, &__pyx_v_endt, &__pyx_v_extend)) return -1;
  Py_INCREF((PyObject *)__pyx_v_self);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.anims.pyx":177 */
  ((struct __pyx_obj_6rabbyt_5anims_AnimStaticCubicBezier *)__pyx_v_self)->p0 = __pyx_v_p0;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.anims.pyx":178 */
  ((struct __pyx_obj_6rabbyt_5anims_AnimStaticCubicBezier *)__pyx_v_self)->startt = __pyx_v_startt;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.anims.pyx":179 */
  ((struct __pyx_obj_6rabbyt_5anims_AnimStaticCubicBezier *)__pyx_v_self)->endt = __pyx_v_endt;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.anims.pyx":180 */
  ((struct __pyx_obj_6rabbyt_5anims_AnimStaticCubicBezier *)__pyx_v_self)->extend = __pyx_v_extend;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.anims.pyx":181 */
  ((struct __pyx_obj_6rabbyt_5anims_AnimStaticCubicBezier *)__pyx_v_self)->one_over_dt = (1 / ((float )(__pyx_v_endt - __pyx_v_startt)));

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.anims.pyx":182 */
  ((struct __pyx_obj_6rabbyt_5anims_AnimStaticCubicBezier *)__pyx_v_self)->c = (3.0 * (__pyx_v_p1 - __pyx_v_p0));

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.anims.pyx":183 */
  ((struct __pyx_obj_6rabbyt_5anims_AnimStaticCubicBezier *)__pyx_v_self)->b = ((3.0 * (__pyx_v_p2 - __pyx_v_p1)) - ((struct __pyx_obj_6rabbyt_5anims_AnimStaticCubicBezier *)__pyx_v_self)->c);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.anims.pyx":184 */
  ((struct __pyx_obj_6rabbyt_5anims_AnimStaticCubicBezier *)__pyx_v_self)->a = (((__pyx_v_p3 - __pyx_v_p0) - ((struct __pyx_obj_6rabbyt_5anims_AnimStaticCubicBezier *)__pyx_v_self)->c) - ((struct __pyx_obj_6rabbyt_5anims_AnimStaticCubicBezier *)__pyx_v_self)->b);

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

static float __pyx_f_6rabbyt_5anims_21AnimStaticCubicBezier_g(struct __pyx_obj_6rabbyt_5anims_AnimStaticCubicBezier *__pyx_v_self) {
  float __pyx_v_t;
  float __pyx_v_t2;
  float __pyx_v_t3;
  float __pyx_r;
  Py_INCREF((PyObject *)__pyx_v_self);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.anims.pyx":188 */
  __pyx_v_t = __pyx_f_6rabbyt_5anims_extend_t(((__pyx_f_6rabbyt_5anims__get_time() - __pyx_v_self->startt) * __pyx_v_self->one_over_dt),__pyx_v_self->extend);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.anims.pyx":189 */
  __pyx_v_t2 = (__pyx_v_t * __pyx_v_t);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.anims.pyx":190 */
  __pyx_v_t3 = (__pyx_v_t2 * __pyx_v_t);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.anims.pyx":191 */
  __pyx_r = ((((__pyx_v_self->a * __pyx_v_t3) + (__pyx_v_self->b * __pyx_v_t2)) + (__pyx_v_self->c * __pyx_v_t)) + __pyx_v_self->p0);
  goto __pyx_L0;

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

static int __pyx_f_6rabbyt_5anims_8AnimWrap___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_f_6rabbyt_5anims_8AnimWrap___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_bounds = 0;
  PyObject *__pyx_v_parent = 0;
  PyObject *__pyx_v_static = 0;
  int __pyx_r;
  int __pyx_1;
  PyObject *__pyx_2 = 0;
  PyObject *__pyx_3 = 0;
  float __pyx_4;
  PyObject *__pyx_5 = 0;
  static char *__pyx_argnames[] = {"bounds","parent","static",0};
  __pyx_v_static = __pyx_k3;
  if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "OO|O", __pyx_argnames, &__pyx_v_bounds, &__pyx_v_parent, &__pyx_v_static)) return -1;
  Py_INCREF((PyObject *)__pyx_v_self);
  Py_INCREF(__pyx_v_bounds);
  Py_INCREF(__pyx_v_parent);
  Py_INCREF(__pyx_v_static);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.anims.pyx":216 */
  __pyx_1 = PyObject_IsTrue(__pyx_v_static); if (__pyx_1 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 216; goto __pyx_L1;}
  if (__pyx_1) {

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.anims.pyx":217 */
    ((struct __pyx_obj_6rabbyt_5anims_AnimWrap *)__pyx_v_self)->is_static = 1;

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.anims.pyx":218 */
    __pyx_2 = PyInt_FromLong(0); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 218; goto __pyx_L1;}
    __pyx_3 = PyObject_GetItem(__pyx_v_bounds, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 218; goto __pyx_L1;}
    Py_DECREF(__pyx_2); __pyx_2 = 0;
    __pyx_4 = PyFloat_AsDouble(__pyx_3); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 218; goto __pyx_L1;}
    Py_DECREF(__pyx_3); __pyx_3 = 0;
    (((struct __pyx_obj_6rabbyt_5anims_AnimWrap *)__pyx_v_self)->s_bounds[0]) = __pyx_4;

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.anims.pyx":219 */
    __pyx_2 = PyInt_FromLong(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 219; goto __pyx_L1;}
    __pyx_3 = PyObject_GetItem(__pyx_v_bounds, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 219; goto __pyx_L1;}
    Py_DECREF(__pyx_2); __pyx_2 = 0;
    __pyx_4 = PyFloat_AsDouble(__pyx_3); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 219; goto __pyx_L1;}
    Py_DECREF(__pyx_3); __pyx_3 = 0;
    (((struct __pyx_obj_6rabbyt_5anims_AnimWrap *)__pyx_v_self)->s_bounds[1]) = __pyx_4;

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.anims.pyx":220 */
    Py_INCREF(Py_None);
    Py_DECREF(((struct __pyx_obj_6rabbyt_5anims_AnimWrap *)__pyx_v_self)->bounds);
    ((struct __pyx_obj_6rabbyt_5anims_AnimWrap *)__pyx_v_self)->bounds = Py_None;
    goto __pyx_L2;
  }
  /*else*/ {

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.anims.pyx":222 */
    ((struct __pyx_obj_6rabbyt_5anims_AnimWrap *)__pyx_v_self)->is_static = 0;

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.anims.pyx":223 */
    Py_INCREF(__pyx_v_bounds);
    Py_DECREF(((struct __pyx_obj_6rabbyt_5anims_AnimWrap *)__pyx_v_self)->bounds);
    ((struct __pyx_obj_6rabbyt_5anims_AnimWrap *)__pyx_v_self)->bounds = __pyx_v_bounds;
  }
  __pyx_L2:;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.anims.pyx":225 */
  __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_n_to_Anim); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 225; goto __pyx_L1;}
  __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 225; goto __pyx_L1;}
  Py_INCREF(__pyx_v_parent);
  PyTuple_SET_ITEM(__pyx_3, 0, __pyx_v_parent);
  __pyx_5 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 225; goto __pyx_L1;}
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  Py_DECREF(__pyx_3); __pyx_3 = 0;
  if (!__Pyx_TypeTest(__pyx_5, __pyx_ptype_6rabbyt_5anims_Anim)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 225; goto __pyx_L1;}
  Py_DECREF(((PyObject *)((struct __pyx_obj_6rabbyt_5anims_AnimWrap *)__pyx_v_self)->parent));
  ((struct __pyx_obj_6rabbyt_5anims_AnimWrap *)__pyx_v_self)->parent = ((struct __pyx_obj_6rabbyt_5anims_Anim *)__pyx_5);
  __pyx_5 = 0;

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_2);
  Py_XDECREF(__pyx_3);
  Py_XDECREF(__pyx_5);
  __Pyx_AddTraceback("rabbyt.anims.AnimWrap.__init__");
  __pyx_r = -1;
  __pyx_L0:;
  Py_DECREF((PyObject *)__pyx_v_self);
  Py_DECREF(__pyx_v_bounds);
  Py_DECREF(__pyx_v_parent);
  Py_DECREF(__pyx_v_static);
  return __pyx_r;
}

static float __pyx_f_6rabbyt_5anims_8AnimWrap_g(struct __pyx_obj_6rabbyt_5anims_AnimWrap *__pyx_v_self) {
  float __pyx_v_p;
  float __pyx_v_b1;
  float __pyx_v_b2;
  float __pyx_v_d;
  float __pyx_r;
  int __pyx_1;
  PyObject *__pyx_2 = 0;
  PyObject *__pyx_3 = 0;
  float __pyx_4;
  Py_INCREF((PyObject *)__pyx_v_self);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.anims.pyx":229 */
  __pyx_1 = (__pyx_v_self->is_static == 1);
  if (__pyx_1) {

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.anims.pyx":230 */
    __pyx_v_b1 = (__pyx_v_self->s_bounds[0]);

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.anims.pyx":231 */
    __pyx_v_b2 = (__pyx_v_self->s_bounds[1]);
    goto __pyx_L2;
  }
  /*else*/ {

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.anims.pyx":233 */
    __pyx_2 = PyInt_FromLong(0); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 233; goto __pyx_L1;}
    __pyx_3 = PyObject_GetItem(__pyx_v_self->bounds, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 233; goto __pyx_L1;}
    Py_DECREF(__pyx_2); __pyx_2 = 0;
    __pyx_4 = PyFloat_AsDouble(__pyx_3); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 233; goto __pyx_L1;}
    Py_DECREF(__pyx_3); __pyx_3 = 0;
    __pyx_v_b1 = __pyx_4;

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.anims.pyx":234 */
    __pyx_2 = PyInt_FromLong(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 234; goto __pyx_L1;}
    __pyx_3 = PyObject_GetItem(__pyx_v_self->bounds, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 234; goto __pyx_L1;}
    Py_DECREF(__pyx_2); __pyx_2 = 0;
    __pyx_4 = PyFloat_AsDouble(__pyx_3); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 234; goto __pyx_L1;}
    Py_DECREF(__pyx_3); __pyx_3 = 0;
    __pyx_v_b2 = __pyx_4;
  }
  __pyx_L2:;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.anims.pyx":236 */
  __pyx_v_p = ((struct __pyx_vtabstruct_6rabbyt_5anims_Anim *)__pyx_v_self->parent->__pyx_vtab)->g(__pyx_v_self->parent);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.anims.pyx":238 */
  __pyx_v_d = (__pyx_v_b2 - __pyx_v_b1);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.anims.pyx":240 */
  __pyx_v_p = fmodf((__pyx_v_p - fmodf(__pyx_v_b1,__pyx_v_d)),__pyx_v_d);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.anims.pyx":241 */
  __pyx_1 = (__pyx_v_p < 0);
  if (__pyx_1) {

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.anims.pyx":242 */
    __pyx_v_p = (__pyx_v_p + __pyx_v_d);
    goto __pyx_L3;
  }
  __pyx_L3:;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.anims.pyx":244 */
  __pyx_r = (__pyx_v_p + __pyx_v_b1);
  goto __pyx_L0;

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_2);
  Py_XDECREF(__pyx_3);
  __Pyx_WriteUnraisable("rabbyt.anims.AnimWrap.g");
  __pyx_L0:;
  Py_DECREF((PyObject *)__pyx_v_self);
  return __pyx_r;
}

static int __pyx_f_6rabbyt_5anims_13AnimAddStatic___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_f_6rabbyt_5anims_13AnimAddStatic___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct __pyx_obj_6rabbyt_5anims_Anim *__pyx_v_a = 0;
  float __pyx_v_s;
  int __pyx_r;
  static char *__pyx_argnames[] = {"a","s",0};
  if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "Of", __pyx_argnames, &__pyx_v_a, &__pyx_v_s)) return -1;
  Py_INCREF((PyObject *)__pyx_v_self);
  Py_INCREF(__pyx_v_a);
  if (!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_a), __pyx_ptype_6rabbyt_5anims_Anim, 0, "a")) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 250; goto __pyx_L1;}

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.anims.pyx":251 */
  Py_INCREF(((PyObject *)__pyx_v_a));
  Py_DECREF(((PyObject *)((struct __pyx_obj_6rabbyt_5anims_AnimAddStatic *)__pyx_v_self)->a));
  ((struct __pyx_obj_6rabbyt_5anims_AnimAddStatic *)__pyx_v_self)->a = __pyx_v_a;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.anims.pyx":252 */
  ((struct __pyx_obj_6rabbyt_5anims_AnimAddStatic *)__pyx_v_self)->s = __pyx_v_s;

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1:;
  __Pyx_AddTraceback("rabbyt.anims.AnimAddStatic.__init__");
  __pyx_r = -1;
  __pyx_L0:;
  Py_DECREF((PyObject *)__pyx_v_self);
  Py_DECREF(__pyx_v_a);
  return __pyx_r;
}

static float __pyx_f_6rabbyt_5anims_13AnimAddStatic_g(struct __pyx_obj_6rabbyt_5anims_AnimAddStatic *__pyx_v_self) {
  float __pyx_r;
  Py_INCREF((PyObject *)__pyx_v_self);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.anims.pyx":255 */
  __pyx_r = (((struct __pyx_vtabstruct_6rabbyt_5anims_Anim *)__pyx_v_self->a->__pyx_vtab)->g(__pyx_v_self->a) + __pyx_v_self->s);
  goto __pyx_L0;

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

static int __pyx_f_6rabbyt_5anims_15_AnimArithmatic___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_f_6rabbyt_5anims_15_AnimArithmatic___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_a1 = 0;
  PyObject *__pyx_v_a2 = 0;
  int __pyx_r;
  PyObject *__pyx_1 = 0;
  PyObject *__pyx_2 = 0;
  PyObject *__pyx_3 = 0;
  static char *__pyx_argnames[] = {"a1","a2",0};
  if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "OO", __pyx_argnames, &__pyx_v_a1, &__pyx_v_a2)) return -1;
  Py_INCREF((PyObject *)__pyx_v_self);
  Py_INCREF(__pyx_v_a1);
  Py_INCREF(__pyx_v_a2);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.anims.pyx":262 */
  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_n_to_Anim); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 262; goto __pyx_L1;}
  __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 262; goto __pyx_L1;}
  Py_INCREF(__pyx_v_a1);
  PyTuple_SET_ITEM(__pyx_2, 0, __pyx_v_a1);
  __pyx_3 = PyObject_CallObject(__pyx_1, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 262; goto __pyx_L1;}
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  if (!__Pyx_TypeTest(__pyx_3, __pyx_ptype_6rabbyt_5anims_Anim)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 262; goto __pyx_L1;}
  Py_DECREF(((PyObject *)((struct __pyx_obj_6rabbyt_5anims__AnimArithmatic *)__pyx_v_self)->a1));
  ((struct __pyx_obj_6rabbyt_5anims__AnimArithmatic *)__pyx_v_self)->a1 = ((struct __pyx_obj_6rabbyt_5anims_Anim *)__pyx_3);
  __pyx_3 = 0;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.anims.pyx":263 */
  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_n_to_Anim); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 263; goto __pyx_L1;}
  __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 263; goto __pyx_L1;}
  Py_INCREF(__pyx_v_a2);
  PyTuple_SET_ITEM(__pyx_2, 0, __pyx_v_a2);
  __pyx_3 = PyObject_CallObject(__pyx_1, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 263; goto __pyx_L1;}
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  if (!__Pyx_TypeTest(__pyx_3, __pyx_ptype_6rabbyt_5anims_Anim)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 263; goto __pyx_L1;}
  Py_DECREF(((PyObject *)((struct __pyx_obj_6rabbyt_5anims__AnimArithmatic *)__pyx_v_self)->a2));
  ((struct __pyx_obj_6rabbyt_5anims__AnimArithmatic *)__pyx_v_self)->a2 = ((struct __pyx_obj_6rabbyt_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.anims._AnimArithmatic.__init__");
  __pyx_r = -1;
  __pyx_L0:;
  Py_DECREF((PyObject *)__pyx_v_self);
  Py_DECREF(__pyx_v_a1);
  Py_DECREF(__pyx_v_a2);
  return __pyx_r;
}

static float __pyx_f_6rabbyt_5anims_7AnimAdd_g(struct __pyx_obj_6rabbyt_5anims_AnimAdd *__pyx_v_self) {
  float __pyx_r;
  Py_INCREF((PyObject *)__pyx_v_self);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.anims.pyx":267 */
  __pyx_r = (((struct __pyx_vtabstruct_6rabbyt_5anims_Anim *)__pyx_v_self->__pyx_base.a1->__pyx_vtab)->g(__pyx_v_self->__pyx_base.a1) + ((struct __pyx_vtabstruct_6rabbyt_5anims_Anim *)__pyx_v_self->__pyx_base.a2->__pyx_vtab)->g(__pyx_v_self->__pyx_base.a2));
  goto __pyx_L0;

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

static float __pyx_f_6rabbyt_5anims_7AnimSub_g(struct __pyx_obj_6rabbyt_5anims_AnimSub *__pyx_v_self) {
  float __pyx_r;
  Py_INCREF((PyObject *)__pyx_v_self);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.anims.pyx":271 */
  __pyx_r = (((struct __pyx_vtabstruct_6rabbyt_5anims_Anim *)__pyx_v_self->__pyx_base.a1->__pyx_vtab)->g(__pyx_v_self->__pyx_base.a1) - ((struct __pyx_vtabstruct_6rabbyt_5anims_Anim *)__pyx_v_self->__pyx_base.a2->__pyx_vtab)->g(__pyx_v_self->__pyx_base.a2));
  goto __pyx_L0;

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

static float __pyx_f_6rabbyt_5anims_7AnimMul_g(struct __pyx_obj_6rabbyt_5anims_AnimMul *__pyx_v_self) {
  float __pyx_r;
  Py_INCREF((PyObject *)__pyx_v_self);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.anims.pyx":275 */
  __pyx_r = (((struct __pyx_vtabstruct_6rabbyt_5anims_Anim *)__pyx_v_self->__pyx_base.a1->__pyx_vtab)->g(__pyx_v_self->__pyx_base.a1) * ((struct __pyx_vtabstruct_6rabbyt_5anims_Anim *)__pyx_v_self->__pyx_base.a2->__pyx_vtab)->g(__pyx_v_self->__pyx_base.a2));
  goto __pyx_L0;

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

static float __pyx_f_6rabbyt_5anims_7AnimDiv_g(struct __pyx_obj_6rabbyt_5anims_AnimDiv *__pyx_v_self) {
  float __pyx_r;
  Py_INCREF((PyObject *)__pyx_v_self);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.anims.pyx":279 */
  __pyx_r = (((struct __pyx_vtabstruct_6rabbyt_5anims_Anim *)__pyx_v_self->__pyx_base.a1->__pyx_vtab)->g(__pyx_v_self->__pyx_base.a1) / ((struct __pyx_vtabstruct_6rabbyt_5anims_Anim *)__pyx_v_self->__pyx_base.a2->__pyx_vtab)->g(__pyx_v_self->__pyx_base.a2));
  goto __pyx_L0;

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

static int __pyx_f_6rabbyt_5anims_10AnimPyFunc___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_f_6rabbyt_5anims_10AnimPyFunc___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_function = 0;
  PyObject *__pyx_v_cache = 0;
  int __pyx_r;
  int __pyx_1;
  static char *__pyx_argnames[] = {"function","cache",0};
  __pyx_v_cache = __pyx_k4;
  if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "O|O", __pyx_argnames, &__pyx_v_function, &__pyx_v_cache)) return -1;
  Py_INCREF((PyObject *)__pyx_v_self);
  Py_INCREF(__pyx_v_function);
  Py_INCREF(__pyx_v_cache);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.anims.pyx":300 */
  Py_INCREF(__pyx_v_function);
  Py_DECREF(((struct __pyx_obj_6rabbyt_5anims_AnimPyFunc *)__pyx_v_self)->function);
  ((struct __pyx_obj_6rabbyt_5anims_AnimPyFunc *)__pyx_v_self)->function = __pyx_v_function;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.anims.pyx":301 */
  __pyx_1 = PyInt_AsLong(__pyx_v_cache); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 301; goto __pyx_L1;}
  ((struct __pyx_obj_6rabbyt_5anims_AnimPyFunc *)__pyx_v_self)->cache_output = __pyx_1;

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1:;
  __Pyx_AddTraceback("rabbyt.anims.AnimPyFunc.__init__");
  __pyx_r = -1;
  __pyx_L0:;
  Py_DECREF((PyObject *)__pyx_v_self);
  Py_DECREF(__pyx_v_function);
  Py_DECREF(__pyx_v_cache);
  return __pyx_r;
}

static float __pyx_f_6rabbyt_5anims_10AnimPyFunc_g(struct __pyx_obj_6rabbyt_5anims_AnimPyFunc *__pyx_v_self) {
  float __pyx_r;
  int __pyx_1;
  PyObject *__pyx_2 = 0;
  float __pyx_3;
  Py_INCREF((PyObject *)__pyx_v_self);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.anims.pyx":304 */
  __pyx_1 = __pyx_v_self->cache_output;
  if (__pyx_1) {

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.anims.pyx":305 */
    __pyx_1 = (__pyx_f_6rabbyt_5anims__get_time() != __pyx_v_self->cache_time);
    if (__pyx_1) {

      /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.anims.pyx":306 */
      __pyx_2 = PyObject_CallObject(__pyx_v_self->function, 0); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 306; goto __pyx_L1;}
      __pyx_3 = PyFloat_AsDouble(__pyx_2); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 306; goto __pyx_L1;}
      Py_DECREF(__pyx_2); __pyx_2 = 0;
      __pyx_v_self->cache = __pyx_3;

      /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.anims.pyx":307 */
      __pyx_v_self->cache_time = __pyx_f_6rabbyt_5anims__get_time();
      goto __pyx_L3;
    }
    __pyx_L3:;

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.anims.pyx":308 */
    __pyx_r = __pyx_v_self->cache;
    goto __pyx_L0;
    goto __pyx_L2;
  }
  /*else*/ {

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.anims.pyx":310 */
    __pyx_2 = PyObject_CallObject(__pyx_v_self->function, 0); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 310; goto __pyx_L1;}
    __pyx_3 = PyFloat_AsDouble(__pyx_2); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 310; goto __pyx_L1;}
    Py_DECREF(__pyx_2); __pyx_2 = 0;
    __pyx_r = __pyx_3;
    goto __pyx_L0;
  }
  __pyx_L2:;

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_2);
  __Pyx_WriteUnraisable("rabbyt.anims.AnimPyFunc.g");
  __pyx_L0:;
  Py_DECREF((PyObject *)__pyx_v_self);
  return __pyx_r;
}

static PyObject *__pyx_n_value;

static int __pyx_f_6rabbyt_5anims_9AnimProxy___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_f_6rabbyt_5anims_9AnimProxy___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_value = 0;
  PyObject *__pyx_v_cache = 0;
  int __pyx_r;
  int __pyx_1;
  static char *__pyx_argnames[] = {"value","cache",0};
  __pyx_v_cache = __pyx_k5;
  if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "O|O", __pyx_argnames, &__pyx_v_value, &__pyx_v_cache)) return -1;
  Py_INCREF((PyObject *)__pyx_v_self);
  Py_INCREF(__pyx_v_value);
  Py_INCREF(__pyx_v_cache);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.anims.pyx":323 */
  __pyx_1 = PyInt_AsLong(__pyx_v_cache); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 323; goto __pyx_L1;}
  ((struct __pyx_obj_6rabbyt_5anims_AnimProxy *)__pyx_v_self)->cache_output = __pyx_1;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.anims.pyx":324 */
  if (PyObject_SetAttr(__pyx_v_self, __pyx_n_value, __pyx_v_value) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 324; goto __pyx_L1;}

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1:;
  __Pyx_AddTraceback("rabbyt.anims.AnimProxy.__init__");
  __pyx_r = -1;
  __pyx_L0:;
  Py_DECREF((PyObject *)__pyx_v_self);
  Py_DECREF(__pyx_v_value);
  Py_DECREF(__pyx_v_cache);
  return __pyx_r;
}

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

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.anims.pyx":328 */
  __pyx_1 = PyFloat_FromDouble(((struct __pyx_vtabstruct_6rabbyt_5anims_Anim *)((struct __pyx_obj_6rabbyt_5anims_AnimProxy *)__pyx_v_self)->_value->__pyx_vtab)->g(((struct __pyx_obj_6rabbyt_5anims_AnimProxy *)__pyx_v_self)->_value)); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 328; 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.anims.AnimProxy.value.__get__");
  __pyx_r = 0;
  __pyx_L0:;
  Py_DECREF((PyObject *)__pyx_v_self);
  return __pyx_r;
}

static int __pyx_f_6rabbyt_5anims_9AnimProxy_5value___set__(PyObject *__pyx_v_self, PyObject *__pyx_v_v); /*proto*/
static int __pyx_f_6rabbyt_5anims_9AnimProxy_5value___set__(PyObject *__pyx_v_self, PyObject *__pyx_v_v) {
  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_v);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.anims.pyx":330 */
  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_n_to_Anim); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 330; goto __pyx_L1;}
  __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 330; goto __pyx_L1;}
  Py_INCREF(__pyx_v_v);
  PyTuple_SET_ITEM(__pyx_2, 0, __pyx_v_v);
  __pyx_3 = PyObject_CallObject(__pyx_1, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 330; goto __pyx_L1;}
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  if (!__Pyx_TypeTest(__pyx_3, __pyx_ptype_6rabbyt_5anims_Anim)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 330; goto __pyx_L1;}
  Py_DECREF(((PyObject *)((struct __pyx_obj_6rabbyt_5anims_AnimProxy *)__pyx_v_self)->_value));
  ((struct __pyx_obj_6rabbyt_5anims_AnimProxy *)__pyx_v_self)->_value = ((struct __pyx_obj_6rabbyt_5anims_Anim *)__pyx_3);
  __pyx_3 = 0;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.anims.pyx":331 */
  ((struct __pyx_obj_6rabbyt_5anims_AnimProxy *)__pyx_v_self)->cache_time = 0;

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  Py_XDECREF(__pyx_2);
  Py_XDECREF(__pyx_3);
  __Pyx_AddTraceback("rabbyt.anims.AnimProxy.value.__set__");
  __pyx_r = -1;
  __pyx_L0:;
  Py_DECREF((PyObject *)__pyx_v_self);
  Py_DECREF(__pyx_v_v);
  return __pyx_r;
}

static float __pyx_f_6rabbyt_5anims_9AnimProxy_g(struct __pyx_obj_6rabbyt_5anims_AnimProxy *__pyx_v_self) {
  float __pyx_r;
  int __pyx_1;
  Py_INCREF((PyObject *)__pyx_v_self);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.anims.pyx":334 */
  __pyx_1 = (!__pyx_v_self->cache_output);
  if (!__pyx_1) {
    __pyx_1 = (__pyx_f_6rabbyt_5anims__get_time() != __pyx_v_self->cache_time);
  }
  if (__pyx_1) {

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.anims.pyx":335 */
    __pyx_v_self->cache = ((struct __pyx_vtabstruct_6rabbyt_5anims_Anim *)__pyx_v_self->_value->__pyx_vtab)->g(__pyx_v_self->_value);

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.anims.pyx":336 */
    __pyx_v_self->cache_time = __pyx_f_6rabbyt_5anims__get_time();
    goto __pyx_L2;
  }
  __pyx_L2:;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.anims.pyx":337 */
  __pyx_r = __pyx_v_self->cache;
  goto __pyx_L0;

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

static PyObject *__pyx_n_callable;

static PyObject *__pyx_f_6rabbyt_5anims_to_Anim(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6rabbyt_5anims_to_Anim[] = "\n    ``to_Anim(value) -> Anim subclass instance``\n\n    This is a convenience function to get ``Anim`` for a value.\n\n    If ``value`` is already an ``Anim``, it is returned directly.\n\n    If ``value`` is callable, it is wrapped in an ``AnimPyFunc``.\n\n    Otherwise, ``value`` is wrapped in an ``AnimConst``.\n    ";
static PyObject *__pyx_f_6rabbyt_5anims_to_Anim(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_v = 0;
  struct __pyx_obj_6rabbyt_5anims_Anim *__pyx_v_dv;
  PyObject *__pyx_r;
  PyObject *__pyx_1 = 0;
  PyObject *__pyx_2 = 0;
  PyObject *__pyx_3 = 0;
  int __pyx_4;
  static char *__pyx_argnames[] = {"v",0};
  if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "O", __pyx_argnames, &__pyx_v_v)) return 0;
  Py_INCREF(__pyx_v_v);
  __pyx_v_dv = ((struct __pyx_obj_6rabbyt_5anims_Anim *)Py_None); Py_INCREF(Py_None);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.anims.pyx":352 */
  __pyx_1 = __Pyx_GetName(__pyx_b, __pyx_n_isinstance); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 352; goto __pyx_L1;}
  __pyx_2 = PyTuple_New(2); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 352; goto __pyx_L1;}
  Py_INCREF(__pyx_v_v);
  PyTuple_SET_ITEM(__pyx_2, 0, __pyx_v_v);
  Py_INCREF(((PyObject*)__pyx_ptype_6rabbyt_5anims_Anim));
  PyTuple_SET_ITEM(__pyx_2, 1, ((PyObject*)__pyx_ptype_6rabbyt_5anims_Anim));
  __pyx_3 = PyObject_CallObject(__pyx_1, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 352; goto __pyx_L1;}
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  __pyx_4 = PyObject_IsTrue(__pyx_3); if (__pyx_4 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 352; goto __pyx_L1;}
  Py_DECREF(__pyx_3); __pyx_3 = 0;
  if (__pyx_4) {

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.anims.pyx":353 */
    if (!__Pyx_TypeTest(__pyx_v_v, __pyx_ptype_6rabbyt_5anims_Anim)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 353; goto __pyx_L1;}
    Py_INCREF(__pyx_v_v);
    Py_DECREF(((PyObject *)__pyx_v_dv));
    __pyx_v_dv = ((struct __pyx_obj_6rabbyt_5anims_Anim *)__pyx_v_v);
    goto __pyx_L2;
  }
  __pyx_1 = __Pyx_GetName(__pyx_b, __pyx_n_callable); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 354; goto __pyx_L1;}
  __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 354; goto __pyx_L1;}
  Py_INCREF(__pyx_v_v);
  PyTuple_SET_ITEM(__pyx_2, 0, __pyx_v_v);
  __pyx_3 = PyObject_CallObject(__pyx_1, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 354; goto __pyx_L1;}
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  __pyx_4 = PyObject_IsTrue(__pyx_3); if (__pyx_4 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 354; goto __pyx_L1;}
  Py_DECREF(__pyx_3); __pyx_3 = 0;
  if (__pyx_4) {

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.anims.pyx":355 */
    __pyx_1 = PyTuple_New(1); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 355; goto __pyx_L1;}
    Py_INCREF(__pyx_v_v);
    PyTuple_SET_ITEM(__pyx_1, 0, __pyx_v_v);
    __pyx_2 = PyObject_CallObject(((PyObject*)__pyx_ptype_6rabbyt_5anims_AnimPyFunc), __pyx_1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 355; goto __pyx_L1;}
    Py_DECREF(__pyx_1); __pyx_1 = 0;
    if (!__Pyx_TypeTest(__pyx_2, __pyx_ptype_6rabbyt_5anims_Anim)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 355; goto __pyx_L1;}
    Py_DECREF(((PyObject *)__pyx_v_dv));
    __pyx_v_dv = ((struct __pyx_obj_6rabbyt_5anims_Anim *)__pyx_2);
    __pyx_2 = 0;
    goto __pyx_L2;
  }
  /*else*/ {

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.anims.pyx":357 */
    __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 357; goto __pyx_L1;}
    Py_INCREF(__pyx_v_v);
    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_v_v);
    __pyx_1 = PyObject_CallObject(((PyObject*)__pyx_ptype_6rabbyt_5anims_AnimConst), __pyx_3); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 357; goto __pyx_L1;}
    Py_DECREF(__pyx_3); __pyx_3 = 0;
    if (!__Pyx_TypeTest(__pyx_1, __pyx_ptype_6rabbyt_5anims_Anim)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 357; goto __pyx_L1;}
    Py_DECREF(((PyObject *)__pyx_v_dv));
    __pyx_v_dv = ((struct __pyx_obj_6rabbyt_5anims_Anim *)__pyx_1);
    __pyx_1 = 0;
  }
  __pyx_L2:;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.anims.pyx":358 */
  Py_INCREF(((PyObject *)__pyx_v_dv));
  __pyx_r = ((PyObject *)__pyx_v_dv);
  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.anims.to_Anim");
  __pyx_r = 0;
  __pyx_L0:;
  Py_DECREF(__pyx_v_dv);
  Py_DECREF(__pyx_v_v);
  return __pyx_r;
}

static __Pyx_InternTabEntry __pyx_intern_tab[] = {
  {&__pyx_n_False, "False"},
  {&__pyx_n_True, "True"},
  {&__pyx_n___author__, "__author__"},
  {&__pyx_n___credits__, "__credits__"},
  {&__pyx_n___docs_all__, "__docs_all__"},
  {&__pyx_n_callable, "callable"},
  {&__pyx_n_float, "float"},
  {&__pyx_n_get_time, "get_time"},
  {&__pyx_n_int, "int"},
  {&__pyx_n_isinstance, "isinstance"},
  {&__pyx_n_long, "long"},
  {&__pyx_n_set_time, "set_time"},
  {&__pyx_n_split, "split"},
  {&__pyx_n_to_Anim, "to_Anim"},
  {&__pyx_n_value, "value"},
  {0, 0}
};

static __Pyx_StringTabEntry __pyx_string_tab[] = {
  {&__pyx_k1p, __pyx_k1, sizeof(__pyx_k1)},
  {&__pyx_k2p, __pyx_k2, sizeof(__pyx_k2)},
  {&__pyx_k6p, __pyx_k6, sizeof(__pyx_k6)},
  {0, 0, 0}
};
static struct __pyx_vtabstruct_6rabbyt_5anims_Anim __pyx_vtable_6rabbyt_5anims_Anim;

static PyObject *__pyx_tp_new_6rabbyt_5anims_Anim(PyTypeObject *t, PyObject *a, PyObject *k) {
  PyObject *o = (*t->tp_alloc)(t, 0);
  struct __pyx_obj_6rabbyt_5anims_Anim *p = (struct __pyx_obj_6rabbyt_5anims_Anim *)o;
  *(struct __pyx_vtabstruct_6rabbyt_5anims_Anim **)&p->__pyx_vtab = __pyx_vtabptr_6rabbyt_5anims_Anim;
  return o;
}

static void __pyx_tp_dealloc_6rabbyt_5anims_Anim(PyObject *o) {
  (*o->ob_type->tp_free)(o);
}

static int __pyx_tp_traverse_6rabbyt_5anims_Anim(PyObject *o, visitproc v, void *a) {
  return 0;
}

static int __pyx_tp_clear_6rabbyt_5anims_Anim(PyObject *o) {
  return 0;
}

static struct PyMethodDef __pyx_methods_6rabbyt_5anims_Anim[] = {
  {"get", (PyCFunction)__pyx_f_6rabbyt_5anims_4Anim_get, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6rabbyt_5anims_4Anim_get},
  {0, 0, 0, 0}
};

static PyNumberMethods __pyx_tp_as_number_Anim = {
  __pyx_f_6rabbyt_5anims_4Anim___add__, /*nb_add*/
  __pyx_f_6rabbyt_5anims_4Anim___sub__, /*nb_subtract*/
  __pyx_f_6rabbyt_5anims_4Anim___mul__, /*nb_multiply*/
  __pyx_f_6rabbyt_5anims_4Anim___div__, /*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_Anim = {
  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_Anim = {
  0, /*mp_length*/
  0, /*mp_subscript*/
  0, /*mp_ass_subscript*/
};

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

PyTypeObject __pyx_type_6rabbyt_5anims_Anim = {
  PyObject_HEAD_INIT(0)
  0, /*ob_size*/
  "rabbyt.anims.Anim", /*tp_name*/
  sizeof(struct __pyx_obj_6rabbyt_5anims_Anim), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6rabbyt_5anims_Anim, /*tp_dealloc*/
  0, /*tp_print*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  0, /*tp_compare*/
  0, /*tp_repr*/
  &__pyx_tp_as_number_Anim, /*tp_as_number*/
  &__pyx_tp_as_sequence_Anim, /*tp_as_sequence*/
  &__pyx_tp_as_mapping_Anim, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  &__pyx_tp_as_buffer_Anim, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
  "\n    ``Anim()``\n\n    This is the base class for anims.  It shouldn\'t be instanced directly.\n\n    Performing arithmatic opperations on an anim will result in a new anim that\n    will allways be up to date.\n    ", /*tp_doc*/
  __pyx_tp_traverse_6rabbyt_5anims_Anim, /*tp_traverse*/
  __pyx_tp_clear_6rabbyt_5anims_Anim, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_6rabbyt_5anims_Anim, /*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_5anims_Anim, /*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_5anims_AnimConst __pyx_vtable_6rabbyt_5anims_AnimConst;

static PyObject *__pyx_tp_new_6rabbyt_5anims_AnimConst(PyTypeObject *t, PyObject *a, PyObject *k) {
  PyObject *o = __pyx_ptype_6rabbyt_5anims_Anim->tp_new(t, a, k);
  struct __pyx_obj_6rabbyt_5anims_AnimConst *p = (struct __pyx_obj_6rabbyt_5anims_AnimConst *)o;
  *(struct __pyx_vtabstruct_6rabbyt_5anims_AnimConst **)&p->__pyx_base.__pyx_vtab = __pyx_vtabptr_6rabbyt_5anims_AnimConst;
  return o;
}

static void __pyx_tp_dealloc_6rabbyt_5anims_AnimConst(PyObject *o) {
  __pyx_ptype_6rabbyt_5anims_Anim->tp_dealloc(o);
}

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

static int __pyx_tp_clear_6rabbyt_5anims_AnimConst(PyObject *o) {
  __pyx_ptype_6rabbyt_5anims_Anim->tp_clear(o);
  return 0;
}

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

static PyNumberMethods __pyx_tp_as_number_AnimConst = {
  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_AnimConst = {
  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_AnimConst = {
  0, /*mp_length*/
  0, /*mp_subscript*/
  0, /*mp_ass_subscript*/
};

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

PyTypeObject __pyx_type_6rabbyt_5anims_AnimConst = {
  PyObject_HEAD_INIT(0)
  0, /*ob_size*/
  "rabbyt.anims.AnimConst", /*tp_name*/
  sizeof(struct __pyx_obj_6rabbyt_5anims_AnimConst), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6rabbyt_5anims_AnimConst, /*tp_dealloc*/
  0, /*tp_print*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  0, /*tp_compare*/
  0, /*tp_repr*/
  &__pyx_tp_as_number_AnimConst, /*tp_as_number*/
  &__pyx_tp_as_sequence_AnimConst, /*tp_as_sequence*/
  &__pyx_tp_as_mapping_AnimConst, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  &__pyx_tp_as_buffer_AnimConst, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
  "\n    ``AnimConst(value)``\n\n    An anim that isn\'t animated.\n\n    This is mostly here so that constant values can be used with the same\n    interface as Anim.\n    ", /*tp_doc*/
  __pyx_tp_traverse_6rabbyt_5anims_AnimConst, /*tp_traverse*/
  __pyx_tp_clear_6rabbyt_5anims_AnimConst, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_6rabbyt_5anims_AnimConst, /*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*/
  __pyx_f_6rabbyt_5anims_9AnimConst___init__, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6rabbyt_5anims_AnimConst, /*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_5anims_AnimLerp __pyx_vtable_6rabbyt_5anims_AnimLerp;

static PyObject *__pyx_tp_new_6rabbyt_5anims_AnimLerp(PyTypeObject *t, PyObject *a, PyObject *k) {
  PyObject *o = __pyx_ptype_6rabbyt_5anims_Anim->tp_new(t, a, k);
  struct __pyx_obj_6rabbyt_5anims_AnimLerp *p = (struct __pyx_obj_6rabbyt_5anims_AnimLerp *)o;
  *(struct __pyx_vtabstruct_6rabbyt_5anims_AnimLerp **)&p->__pyx_base.__pyx_vtab = __pyx_vtabptr_6rabbyt_5anims_AnimLerp;
  return o;
}

static void __pyx_tp_dealloc_6rabbyt_5anims_AnimLerp(PyObject *o) {
  __pyx_ptype_6rabbyt_5anims_Anim->tp_dealloc(o);
}

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

static int __pyx_tp_clear_6rabbyt_5anims_AnimLerp(PyObject *o) {
  __pyx_ptype_6rabbyt_5anims_Anim->tp_clear(o);
  return 0;
}

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

static PyNumberMethods __pyx_tp_as_number_AnimLerp = {
  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_AnimLerp = {
  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_AnimLerp = {
  0, /*mp_length*/
  0, /*mp_subscript*/
  0, /*mp_ass_subscript*/
};

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

PyTypeObject __pyx_type_6rabbyt_5anims_AnimLerp = {
  PyObject_HEAD_INIT(0)
  0, /*ob_size*/
  "rabbyt.anims.AnimLerp", /*tp_name*/
  sizeof(struct __pyx_obj_6rabbyt_5anims_AnimLerp), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6rabbyt_5anims_AnimLerp, /*tp_dealloc*/
  0, /*tp_print*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  0, /*tp_compare*/
  0, /*tp_repr*/
  &__pyx_tp_as_number_AnimLerp, /*tp_as_number*/
  &__pyx_tp_as_sequence_AnimLerp, /*tp_as_sequence*/
  &__pyx_tp_as_mapping_AnimLerp, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  &__pyx_tp_as_buffer_AnimLerp, /*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_5anims_AnimLerp, /*tp_traverse*/
  __pyx_tp_clear_6rabbyt_5anims_AnimLerp, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_6rabbyt_5anims_AnimLerp, /*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*/
  __pyx_f_6rabbyt_5anims_8AnimLerp___init__, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6rabbyt_5anims_AnimLerp, /*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_5anims_AnimStaticCubicBezier __pyx_vtable_6rabbyt_5anims_AnimStaticCubicBezier;

static PyObject *__pyx_tp_new_6rabbyt_5anims_AnimStaticCubicBezier(PyTypeObject *t, PyObject *a, PyObject *k) {
  PyObject *o = __pyx_ptype_6rabbyt_5anims_Anim->tp_new(t, a, k);
  struct __pyx_obj_6rabbyt_5anims_AnimStaticCubicBezier *p = (struct __pyx_obj_6rabbyt_5anims_AnimStaticCubicBezier *)o;
  *(struct __pyx_vtabstruct_6rabbyt_5anims_AnimStaticCubicBezier **)&p->__pyx_base.__pyx_vtab = __pyx_vtabptr_6rabbyt_5anims_AnimStaticCubicBezier;
  return o;
}

static void __pyx_tp_dealloc_6rabbyt_5anims_AnimStaticCubicBezier(PyObject *o) {
  __pyx_ptype_6rabbyt_5anims_Anim->tp_dealloc(o);
}

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

static int __pyx_tp_clear_6rabbyt_5anims_AnimStaticCubicBezier(PyObject *o) {
  __pyx_ptype_6rabbyt_5anims_Anim->tp_clear(o);
  return 0;
}

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

static PyNumberMethods __pyx_tp_as_number_AnimStaticCubicBezier = {
  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_AnimStaticCubicBezier = {
  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_AnimStaticCubicBezier = {
  0, /*mp_length*/
  0, /*mp_subscript*/
  0, /*mp_ass_subscript*/
};

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

PyTypeObject __pyx_type_6rabbyt_5anims_AnimStaticCubicBezier = {
  PyObject_HEAD_INIT(0)
  0, /*ob_size*/
  "rabbyt.anims.AnimStaticCubicBezier", /*tp_name*/
  sizeof(struct __pyx_obj_6rabbyt_5anims_AnimStaticCubicBezier), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6rabbyt_5anims_AnimStaticCubicBezier, /*tp_dealloc*/
  0, /*tp_print*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  0, /*tp_compare*/
  0, /*tp_repr*/
  &__pyx_tp_as_number_AnimStaticCubicBezier, /*tp_as_number*/
  &__pyx_tp_as_sequence_AnimStaticCubicBezier, /*tp_as_sequence*/
  &__pyx_tp_as_mapping_AnimStaticCubicBezier, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  &__pyx_tp_as_buffer_AnimStaticCubicBezier, /*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_5anims_AnimStaticCubicBezier, /*tp_traverse*/
  __pyx_tp_clear_6rabbyt_5anims_AnimStaticCubicBezier, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_6rabbyt_5anims_AnimStaticCubicBezier, /*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*/
  __pyx_f_6rabbyt_5anims_21AnimStaticCubicBezier___init__, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6rabbyt_5anims_AnimStaticCubicBezier, /*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_5anims_AnimWrap __pyx_vtable_6rabbyt_5anims_AnimWrap;

static PyObject *__pyx_tp_new_6rabbyt_5anims_AnimWrap(PyTypeObject *t, PyObject *a, PyObject *k) {
  PyObject *o = __pyx_ptype_6rabbyt_5anims_Anim->tp_new(t, a, k);
  struct __pyx_obj_6rabbyt_5anims_AnimWrap *p = (struct __pyx_obj_6rabbyt_5anims_AnimWrap *)o;
  *(struct __pyx_vtabstruct_6rabbyt_5anims_AnimWrap **)&p->__pyx_base.__pyx_vtab = __pyx_vtabptr_6rabbyt_5anims_AnimWrap;
  p->parent = ((struct __pyx_obj_6rabbyt_5anims_Anim *)Py_None); Py_INCREF(Py_None);
  p->bounds = Py_None; Py_INCREF(Py_None);
  return o;
}

static void __pyx_tp_dealloc_6rabbyt_5anims_AnimWrap(PyObject *o) {
  struct __pyx_obj_6rabbyt_5anims_AnimWrap *p = (struct __pyx_obj_6rabbyt_5anims_AnimWrap *)o;
  Py_XDECREF(((PyObject *)p->parent));
  Py_XDECREF(p->bounds);
  __pyx_ptype_6rabbyt_5anims_Anim->tp_dealloc(o);
}

static int __pyx_tp_traverse_6rabbyt_5anims_AnimWrap(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_6rabbyt_5anims_AnimWrap *p = (struct __pyx_obj_6rabbyt_5anims_AnimWrap *)o;
  e = __pyx_ptype_6rabbyt_5anims_Anim->tp_traverse(o, v, a); if (e) return e;
  if (p->parent) {
    e = (*v)(((PyObject*)p->parent), a); if (e) return e;
  }
  if (p->bounds) {
    e = (*v)(p->bounds, a); if (e) return e;
  }
  return 0;
}

static int __pyx_tp_clear_6rabbyt_5anims_AnimWrap(PyObject *o) {
  struct __pyx_obj_6rabbyt_5anims_AnimWrap *p = (struct __pyx_obj_6rabbyt_5anims_AnimWrap *)o;
  __pyx_ptype_6rabbyt_5anims_Anim->tp_clear(o);
  Py_XDECREF(((PyObject *)p->parent));
  p->parent = ((struct __pyx_obj_6rabbyt_5anims_Anim *)Py_None); Py_INCREF(Py_None);
  Py_XDECREF(p->bounds);
  p->bounds = Py_None; Py_INCREF(Py_None);
  return 0;
}

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

static PyNumberMethods __pyx_tp_as_number_AnimWrap = {
  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_AnimWrap = {
  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_AnimWrap = {
  0, /*mp_length*/
  0, /*mp_subscript*/
  0, /*mp_ass_subscript*/
};

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

PyTypeObject __pyx_type_6rabbyt_5anims_AnimWrap = {
  PyObject_HEAD_INIT(0)
  0, /*ob_size*/
  "rabbyt.anims.AnimWrap", /*tp_name*/
  sizeof(struct __pyx_obj_6rabbyt_5anims_AnimWrap), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6rabbyt_5anims_AnimWrap, /*tp_dealloc*/
  0, /*tp_print*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  0, /*tp_compare*/
  0, /*tp_repr*/
  &__pyx_tp_as_number_AnimWrap, /*tp_as_number*/
  &__pyx_tp_as_sequence_AnimWrap, /*tp_as_sequence*/
  &__pyx_tp_as_mapping_AnimWrap, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  &__pyx_tp_as_buffer_AnimWrap, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
  "\n    ``AnimWrap(bounds, parent, static=True)``\n\n    An anim that returns another anim wrapped within two bounds.\n\n    You might want to use ``rabbyt.wrap()`` instead.\n\n   ``bounds`` is the bounds that the value should be wrapped within.  It can\n    be anything supporting item access with a length of at least two.\n\n    ``parent`` is the ``Anim`` that is being wrapped.\n\n    If static is ``True``, ``bounds[0]`` and ``bounds[1]`` are read only once\n    and stored as variables in c.  This is much faster, but doesn\'t work if\n    ``bounds`` is an object you wish to mutate.\n    ", /*tp_doc*/
  __pyx_tp_traverse_6rabbyt_5anims_AnimWrap, /*tp_traverse*/
  __pyx_tp_clear_6rabbyt_5anims_AnimWrap, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_6rabbyt_5anims_AnimWrap, /*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*/
  __pyx_f_6rabbyt_5anims_8AnimWrap___init__, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6rabbyt_5anims_AnimWrap, /*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_5anims_AnimAddStatic __pyx_vtable_6rabbyt_5anims_AnimAddStatic;

static PyObject *__pyx_tp_new_6rabbyt_5anims_AnimAddStatic(PyTypeObject *t, PyObject *a, PyObject *k) {
  PyObject *o = __pyx_ptype_6rabbyt_5anims_Anim->tp_new(t, a, k);
  struct __pyx_obj_6rabbyt_5anims_AnimAddStatic *p = (struct __pyx_obj_6rabbyt_5anims_AnimAddStatic *)o;
  *(struct __pyx_vtabstruct_6rabbyt_5anims_AnimAddStatic **)&p->__pyx_base.__pyx_vtab = __pyx_vtabptr_6rabbyt_5anims_AnimAddStatic;
  p->a = ((struct __pyx_obj_6rabbyt_5anims_Anim *)Py_None); Py_INCREF(Py_None);
  return o;
}

static void __pyx_tp_dealloc_6rabbyt_5anims_AnimAddStatic(PyObject *o) {
  struct __pyx_obj_6rabbyt_5anims_AnimAddStatic *p = (struct __pyx_obj_6rabbyt_5anims_AnimAddStatic *)o;
  Py_XDECREF(((PyObject *)p->a));
  __pyx_ptype_6rabbyt_5anims_Anim->tp_dealloc(o);
}

static int __pyx_tp_traverse_6rabbyt_5anims_AnimAddStatic(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_6rabbyt_5anims_AnimAddStatic *p = (struct __pyx_obj_6rabbyt_5anims_AnimAddStatic *)o;
  e = __pyx_ptype_6rabbyt_5anims_Anim->tp_traverse(o, v, 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_5anims_AnimAddStatic(PyObject *o) {
  struct __pyx_obj_6rabbyt_5anims_AnimAddStatic *p = (struct __pyx_obj_6rabbyt_5anims_AnimAddStatic *)o;
  __pyx_ptype_6rabbyt_5anims_Anim->tp_clear(o);
  Py_XDECREF(((PyObject *)p->a));
  p->a = ((struct __pyx_obj_6rabbyt_5anims_Anim *)Py_None); Py_INCREF(Py_None);
  return 0;
}

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

static PyNumberMethods __pyx_tp_as_number_AnimAddStatic = {
  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_AnimAddStatic = {
  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_AnimAddStatic = {
  0, /*mp_length*/
  0, /*mp_subscript*/
  0, /*mp_ass_subscript*/
};

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

PyTypeObject __pyx_type_6rabbyt_5anims_AnimAddStatic = {
  PyObject_HEAD_INIT(0)
  0, /*ob_size*/
  "rabbyt.anims.AnimAddStatic", /*tp_name*/
  sizeof(struct __pyx_obj_6rabbyt_5anims_AnimAddStatic), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6rabbyt_5anims_AnimAddStatic, /*tp_dealloc*/
  0, /*tp_print*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  0, /*tp_compare*/
  0, /*tp_repr*/
  &__pyx_tp_as_number_AnimAddStatic, /*tp_as_number*/
  &__pyx_tp_as_sequence_AnimAddStatic, /*tp_as_sequence*/
  &__pyx_tp_as_mapping_AnimAddStatic, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  &__pyx_tp_as_buffer_AnimAddStatic, /*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_5anims_AnimAddStatic, /*tp_traverse*/
  __pyx_tp_clear_6rabbyt_5anims_AnimAddStatic, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_6rabbyt_5anims_AnimAddStatic, /*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*/
  __pyx_f_6rabbyt_5anims_13AnimAddStatic___init__, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6rabbyt_5anims_AnimAddStatic, /*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_5anims__AnimArithmatic __pyx_vtable_6rabbyt_5anims__AnimArithmatic;

static PyObject *__pyx_tp_new_6rabbyt_5anims__AnimArithmatic(PyTypeObject *t, PyObject *a, PyObject *k) {
  PyObject *o = __pyx_ptype_6rabbyt_5anims_Anim->tp_new(t, a, k);
  struct __pyx_obj_6rabbyt_5anims__AnimArithmatic *p = (struct __pyx_obj_6rabbyt_5anims__AnimArithmatic *)o;
  *(struct __pyx_vtabstruct_6rabbyt_5anims__AnimArithmatic **)&p->__pyx_base.__pyx_vtab = __pyx_vtabptr_6rabbyt_5anims__AnimArithmatic;
  p->a1 = ((struct __pyx_obj_6rabbyt_5anims_Anim *)Py_None); Py_INCREF(Py_None);
  p->a2 = ((struct __pyx_obj_6rabbyt_5anims_Anim *)Py_None); Py_INCREF(Py_None);
  return o;
}

static void __pyx_tp_dealloc_6rabbyt_5anims__AnimArithmatic(PyObject *o) {
  struct __pyx_obj_6rabbyt_5anims__AnimArithmatic *p = (struct __pyx_obj_6rabbyt_5anims__AnimArithmatic *)o;
  Py_XDECREF(((PyObject *)p->a1));
  Py_XDECREF(((PyObject *)p->a2));
  __pyx_ptype_6rabbyt_5anims_Anim->tp_dealloc(o);
}

static int __pyx_tp_traverse_6rabbyt_5anims__AnimArithmatic(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_6rabbyt_5anims__AnimArithmatic *p = (struct __pyx_obj_6rabbyt_5anims__AnimArithmatic *)o;
  e = __pyx_ptype_6rabbyt_5anims_Anim->tp_traverse(o, v, a); if (e) return e;
  if (p->a1) {
    e = (*v)(((PyObject*)p->a1), a); if (e) return e;
  }
  if (p->a2) {
    e = (*v)(((PyObject*)p->a2), a); if (e) return e;
  }
  return 0;
}

static int __pyx_tp_clear_6rabbyt_5anims__AnimArithmatic(PyObject *o) {
  struct __pyx_obj_6rabbyt_5anims__AnimArithmatic *p = (struct __pyx_obj_6rabbyt_5anims__AnimArithmatic *)o;
  __pyx_ptype_6rabbyt_5anims_Anim->tp_clear(o);
  Py_XDECREF(((PyObject *)p->a1));
  p->a1 = ((struct __pyx_obj_6rabbyt_5anims_Anim *)Py_None); Py_INCREF(Py_None);
  Py_XDECREF(((PyObject *)p->a2));
  p->a2 = ((struct __pyx_obj_6rabbyt_5anims_Anim *)Py_None); Py_INCREF(Py_None);
  return 0;
}

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

static PyNumberMethods __pyx_tp_as_number__AnimArithmatic = {
  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__AnimArithmatic = {
  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__AnimArithmatic = {
  0, /*mp_length*/
  0, /*mp_subscript*/
  0, /*mp_ass_subscript*/
};

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

PyTypeObject __pyx_type_6rabbyt_5anims__AnimArithmatic = {
  PyObject_HEAD_INIT(0)
  0, /*ob_size*/
  "rabbyt.anims._AnimArithmatic", /*tp_name*/
  sizeof(struct __pyx_obj_6rabbyt_5anims__AnimArithmatic), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6rabbyt_5anims__AnimArithmatic, /*tp_dealloc*/
  0, /*tp_print*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  0, /*tp_compare*/
  0, /*tp_repr*/
  &__pyx_tp_as_number__AnimArithmatic, /*tp_as_number*/
  &__pyx_tp_as_sequence__AnimArithmatic, /*tp_as_sequence*/
  &__pyx_tp_as_mapping__AnimArithmatic, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  &__pyx_tp_as_buffer__AnimArithmatic, /*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_5anims__AnimArithmatic, /*tp_traverse*/
  __pyx_tp_clear_6rabbyt_5anims__AnimArithmatic, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_6rabbyt_5anims__AnimArithmatic, /*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*/
  __pyx_f_6rabbyt_5anims_15_AnimArithmatic___init__, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6rabbyt_5anims__AnimArithmatic, /*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_5anims_AnimAdd __pyx_vtable_6rabbyt_5anims_AnimAdd;

static PyObject *__pyx_tp_new_6rabbyt_5anims_AnimAdd(PyTypeObject *t, PyObject *a, PyObject *k) {
  PyObject *o = __pyx_ptype_6rabbyt_5anims__AnimArithmatic->tp_new(t, a, k);
  struct __pyx_obj_6rabbyt_5anims_AnimAdd *p = (struct __pyx_obj_6rabbyt_5anims_AnimAdd *)o;
  *(struct __pyx_vtabstruct_6rabbyt_5anims_AnimAdd **)&p->__pyx_base.__pyx_base.__pyx_vtab = __pyx_vtabptr_6rabbyt_5anims_AnimAdd;
  return o;
}

static void __pyx_tp_dealloc_6rabbyt_5anims_AnimAdd(PyObject *o) {
  __pyx_ptype_6rabbyt_5anims__AnimArithmatic->tp_dealloc(o);
}

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

static int __pyx_tp_clear_6rabbyt_5anims_AnimAdd(PyObject *o) {
  __pyx_ptype_6rabbyt_5anims__AnimArithmatic->tp_clear(o);
  return 0;
}

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

static PyNumberMethods __pyx_tp_as_number_AnimAdd = {
  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_AnimAdd = {
  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_AnimAdd = {
  0, /*mp_length*/
  0, /*mp_subscript*/
  0, /*mp_ass_subscript*/
};

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

PyTypeObject __pyx_type_6rabbyt_5anims_AnimAdd = {
  PyObject_HEAD_INIT(0)
  0, /*ob_size*/
  "rabbyt.anims.AnimAdd", /*tp_name*/
  sizeof(struct __pyx_obj_6rabbyt_5anims_AnimAdd), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6rabbyt_5anims_AnimAdd, /*tp_dealloc*/
  0, /*tp_print*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  0, /*tp_compare*/
  0, /*tp_repr*/
  &__pyx_tp_as_number_AnimAdd, /*tp_as_number*/
  &__pyx_tp_as_sequence_AnimAdd, /*tp_as_sequence*/
  &__pyx_tp_as_mapping_AnimAdd, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  &__pyx_tp_as_buffer_AnimAdd, /*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_5anims_AnimAdd, /*tp_traverse*/
  __pyx_tp_clear_6rabbyt_5anims_AnimAdd, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_6rabbyt_5anims_AnimAdd, /*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_5anims_AnimAdd, /*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_5anims_AnimSub __pyx_vtable_6rabbyt_5anims_AnimSub;

static PyObject *__pyx_tp_new_6rabbyt_5anims_AnimSub(PyTypeObject *t, PyObject *a, PyObject *k) {
  PyObject *o = __pyx_ptype_6rabbyt_5anims__AnimArithmatic->tp_new(t, a, k);
  struct __pyx_obj_6rabbyt_5anims_AnimSub *p = (struct __pyx_obj_6rabbyt_5anims_AnimSub *)o;
  *(struct __pyx_vtabstruct_6rabbyt_5anims_AnimSub **)&p->__pyx_base.__pyx_base.__pyx_vtab = __pyx_vtabptr_6rabbyt_5anims_AnimSub;
  return o;
}

static void __pyx_tp_dealloc_6rabbyt_5anims_AnimSub(PyObject *o) {
  __pyx_ptype_6rabbyt_5anims__AnimArithmatic->tp_dealloc(o);
}

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

static int __pyx_tp_clear_6rabbyt_5anims_AnimSub(PyObject *o) {
  __pyx_ptype_6rabbyt_5anims__AnimArithmatic->tp_clear(o);
  return 0;
}

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

static PyNumberMethods __pyx_tp_as_number_AnimSub = {
  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_AnimSub = {
  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_AnimSub = {
  0, /*mp_length*/
  0, /*mp_subscript*/
  0, /*mp_ass_subscript*/
};

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

PyTypeObject __pyx_type_6rabbyt_5anims_AnimSub = {
  PyObject_HEAD_INIT(0)
  0, /*ob_size*/
  "rabbyt.anims.AnimSub", /*tp_name*/
  sizeof(struct __pyx_obj_6rabbyt_5anims_AnimSub), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6rabbyt_5anims_AnimSub, /*tp_dealloc*/
  0, /*tp_print*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  0, /*tp_compare*/
  0, /*tp_repr*/
  &__pyx_tp_as_number_AnimSub, /*tp_as_number*/
  &__pyx_tp_as_sequence_AnimSub, /*tp_as_sequence*/
  &__pyx_tp_as_mapping_AnimSub, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  &__pyx_tp_as_buffer_AnimSub, /*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_5anims_AnimSub, /*tp_traverse*/
  __pyx_tp_clear_6rabbyt_5anims_AnimSub, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_6rabbyt_5anims_AnimSub, /*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_5anims_AnimSub, /*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_5anims_AnimMul __pyx_vtable_6rabbyt_5anims_AnimMul;

static PyObject *__pyx_tp_new_6rabbyt_5anims_AnimMul(PyTypeObject *t, PyObject *a, PyObject *k) {
  PyObject *o = __pyx_ptype_6rabbyt_5anims__AnimArithmatic->tp_new(t, a, k);
  struct __pyx_obj_6rabbyt_5anims_AnimMul *p = (struct __pyx_obj_6rabbyt_5anims_AnimMul *)o;
  *(struct __pyx_vtabstruct_6rabbyt_5anims_AnimMul **)&p->__pyx_base.__pyx_base.__pyx_vtab = __pyx_vtabptr_6rabbyt_5anims_AnimMul;
  return o;
}

static void __pyx_tp_dealloc_6rabbyt_5anims_AnimMul(PyObject *o) {
  __pyx_ptype_6rabbyt_5anims__AnimArithmatic->tp_dealloc(o);
}

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

static int __pyx_tp_clear_6rabbyt_5anims_AnimMul(PyObject *o) {
  __pyx_ptype_6rabbyt_5anims__AnimArithmatic->tp_clear(o);
  return 0;
}

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

static PyNumberMethods __pyx_tp_as_number_AnimMul = {
  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_AnimMul = {
  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_AnimMul = {
  0, /*mp_length*/
  0, /*mp_subscript*/
  0, /*mp_ass_subscript*/
};

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

PyTypeObject __pyx_type_6rabbyt_5anims_AnimMul = {
  PyObject_HEAD_INIT(0)
  0, /*ob_size*/
  "rabbyt.anims.AnimMul", /*tp_name*/
  sizeof(struct __pyx_obj_6rabbyt_5anims_AnimMul), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6rabbyt_5anims_AnimMul, /*tp_dealloc*/
  0, /*tp_print*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  0, /*tp_compare*/
  0, /*tp_repr*/
  &__pyx_tp_as_number_AnimMul, /*tp_as_number*/
  &__pyx_tp_as_sequence_AnimMul, /*tp_as_sequence*/
  &__pyx_tp_as_mapping_AnimMul, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  &__pyx_tp_as_buffer_AnimMul, /*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_5anims_AnimMul, /*tp_traverse*/
  __pyx_tp_clear_6rabbyt_5anims_AnimMul, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_6rabbyt_5anims_AnimMul, /*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_5anims_AnimMul, /*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_5anims_AnimDiv __pyx_vtable_6rabbyt_5anims_AnimDiv;

static PyObject *__pyx_tp_new_6rabbyt_5anims_AnimDiv(PyTypeObject *t, PyObject *a, PyObject *k) {
  PyObject *o = __pyx_ptype_6rabbyt_5anims__AnimArithmatic->tp_new(t, a, k);
  struct __pyx_obj_6rabbyt_5anims_AnimDiv *p = (struct __pyx_obj_6rabbyt_5anims_AnimDiv *)o;
  *(struct __pyx_vtabstruct_6rabbyt_5anims_AnimDiv **)&p->__pyx_base.__pyx_base.__pyx_vtab = __pyx_vtabptr_6rabbyt_5anims_AnimDiv;
  return o;
}

static void __pyx_tp_dealloc_6rabbyt_5anims_AnimDiv(PyObject *o) {
  __pyx_ptype_6rabbyt_5anims__AnimArithmatic->tp_dealloc(o);
}

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

static int __pyx_tp_clear_6rabbyt_5anims_AnimDiv(PyObject *o) {
  __pyx_ptype_6rabbyt_5anims__AnimArithmatic->tp_clear(o);
  return 0;
}

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

static PyNumberMethods __pyx_tp_as_number_AnimDiv = {
  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_AnimDiv = {
  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_AnimDiv = {
  0, /*mp_length*/
  0, /*mp_subscript*/
  0, /*mp_ass_subscript*/
};

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

PyTypeObject __pyx_type_6rabbyt_5anims_AnimDiv = {
  PyObject_HEAD_INIT(0)
  0, /*ob_size*/
  "rabbyt.anims.AnimDiv", /*tp_name*/
  sizeof(struct __pyx_obj_6rabbyt_5anims_AnimDiv), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6rabbyt_5anims_AnimDiv, /*tp_dealloc*/
  0, /*tp_print*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  0, /*tp_compare*/
  0, /*tp_repr*/
  &__pyx_tp_as_number_AnimDiv, /*tp_as_number*/
  &__pyx_tp_as_sequence_AnimDiv, /*tp_as_sequence*/
  &__pyx_tp_as_mapping_AnimDiv, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  &__pyx_tp_as_buffer_AnimDiv, /*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_5anims_AnimDiv, /*tp_traverse*/
  __pyx_tp_clear_6rabbyt_5anims_AnimDiv, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_6rabbyt_5anims_AnimDiv, /*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_5anims_AnimDiv, /*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_5anims_AnimPyFunc __pyx_vtable_6rabbyt_5anims_AnimPyFunc;

static PyObject *__pyx_tp_new_6rabbyt_5anims_AnimPyFunc(PyTypeObject *t, PyObject *a, PyObject *k) {
  PyObject *o = __pyx_ptype_6rabbyt_5anims_Anim->tp_new(t, a, k);
  struct __pyx_obj_6rabbyt_5anims_AnimPyFunc *p = (struct __pyx_obj_6rabbyt_5anims_AnimPyFunc *)o;
  *(struct __pyx_vtabstruct_6rabbyt_5anims_AnimPyFunc **)&p->__pyx_base.__pyx_vtab = __pyx_vtabptr_6rabbyt_5anims_AnimPyFunc;
  p->function = Py_None; Py_INCREF(Py_None);
  return o;
}

static void __pyx_tp_dealloc_6rabbyt_5anims_AnimPyFunc(PyObject *o) {
  struct __pyx_obj_6rabbyt_5anims_AnimPyFunc *p = (struct __pyx_obj_6rabbyt_5anims_AnimPyFunc *)o;
  Py_XDECREF(p->function);
  __pyx_ptype_6rabbyt_5anims_Anim->tp_dealloc(o);
}

static int __pyx_tp_traverse_6rabbyt_5anims_AnimPyFunc(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_6rabbyt_5anims_AnimPyFunc *p = (struct __pyx_obj_6rabbyt_5anims_AnimPyFunc *)o;
  e = __pyx_ptype_6rabbyt_5anims_Anim->tp_traverse(o, v, a); if (e) return e;
  if (p->function) {
    e = (*v)(p->function, a); if (e) return e;
  }
  return 0;
}

static int __pyx_tp_clear_6rabbyt_5anims_AnimPyFunc(PyObject *o) {
  struct __pyx_obj_6rabbyt_5anims_AnimPyFunc *p = (struct __pyx_obj_6rabbyt_5anims_AnimPyFunc *)o;
  __pyx_ptype_6rabbyt_5anims_Anim->tp_clear(o);
  Py_XDECREF(p->function);
  p->function = Py_None; Py_INCREF(Py_None);
  return 0;
}

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

static PyNumberMethods __pyx_tp_as_number_AnimPyFunc = {
  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_AnimPyFunc = {
  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_AnimPyFunc = {
  0, /*mp_length*/
  0, /*mp_subscript*/
  0, /*mp_ass_subscript*/
};

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

PyTypeObject __pyx_type_6rabbyt_5anims_AnimPyFunc = {
  PyObject_HEAD_INIT(0)
  0, /*ob_size*/
  "rabbyt.anims.AnimPyFunc", /*tp_name*/
  sizeof(struct __pyx_obj_6rabbyt_5anims_AnimPyFunc), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6rabbyt_5anims_AnimPyFunc, /*tp_dealloc*/
  0, /*tp_print*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  0, /*tp_compare*/
  0, /*tp_repr*/
  &__pyx_tp_as_number_AnimPyFunc, /*tp_as_number*/
  &__pyx_tp_as_sequence_AnimPyFunc, /*tp_as_sequence*/
  &__pyx_tp_as_mapping_AnimPyFunc, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  &__pyx_tp_as_buffer_AnimPyFunc, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
  "\n    ``AnimPyFunc(function, cache=False)``\n\n    An anim that calls a python function, using the returned value.\n\n    function is the callback called to retrieve the value.  It should\n    return a float.\n\n    If ``cache`` is ``True``, the result returned by function will be\n    cached for as long as the time (as set by ``rabbyt.set_time()``) doesn\'t\n    change. This could provide good speedup if the value is read multiple\n    times per frame.\n    ", /*tp_doc*/
  __pyx_tp_traverse_6rabbyt_5anims_AnimPyFunc, /*tp_traverse*/
  __pyx_tp_clear_6rabbyt_5anims_AnimPyFunc, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_6rabbyt_5anims_AnimPyFunc, /*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*/
  __pyx_f_6rabbyt_5anims_10AnimPyFunc___init__, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6rabbyt_5anims_AnimPyFunc, /*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_5anims_AnimProxy __pyx_vtable_6rabbyt_5anims_AnimProxy;

static PyObject *__pyx_tp_new_6rabbyt_5anims_AnimProxy(PyTypeObject *t, PyObject *a, PyObject *k) {
  PyObject *o = __pyx_ptype_6rabbyt_5anims_Anim->tp_new(t, a, k);
  struct __pyx_obj_6rabbyt_5anims_AnimProxy *p = (struct __pyx_obj_6rabbyt_5anims_AnimProxy *)o;
  *(struct __pyx_vtabstruct_6rabbyt_5anims_AnimProxy **)&p->__pyx_base.__pyx_vtab = __pyx_vtabptr_6rabbyt_5anims_AnimProxy;
  p->_value = ((struct __pyx_obj_6rabbyt_5anims_Anim *)Py_None); Py_INCREF(Py_None);
  return o;
}

static void __pyx_tp_dealloc_6rabbyt_5anims_AnimProxy(PyObject *o) {
  struct __pyx_obj_6rabbyt_5anims_AnimProxy *p = (struct __pyx_obj_6rabbyt_5anims_AnimProxy *)o;
  Py_XDECREF(((PyObject *)p->_value));
  __pyx_ptype_6rabbyt_5anims_Anim->tp_dealloc(o);
}

static int __pyx_tp_traverse_6rabbyt_5anims_AnimProxy(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_6rabbyt_5anims_AnimProxy *p = (struct __pyx_obj_6rabbyt_5anims_AnimProxy *)o;
  e = __pyx_ptype_6rabbyt_5anims_Anim->tp_traverse(o, v, a); if (e) return e;
  if (p->_value) {
    e = (*v)(((PyObject*)p->_value), a); if (e) return e;
  }
  return 0;
}

static int __pyx_tp_clear_6rabbyt_5anims_AnimProxy(PyObject *o) {
  struct __pyx_obj_6rabbyt_5anims_AnimProxy *p = (struct __pyx_obj_6rabbyt_5anims_AnimProxy *)o;
  __pyx_ptype_6rabbyt_5anims_Anim->tp_clear(o);
  Py_XDECREF(((PyObject *)p->_value));
  p->_value = ((struct __pyx_obj_6rabbyt_5anims_Anim *)Py_None); Py_INCREF(Py_None);
  return 0;
}

static PyObject *__pyx_getprop_6rabbyt_5anims_9AnimProxy_value(PyObject *o, void *x) {
  return __pyx_f_6rabbyt_5anims_9AnimProxy_5value___get__(o);
}

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

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

static struct PyGetSetDef __pyx_getsets_6rabbyt_5anims_AnimProxy[] = {
  {"value", __pyx_getprop_6rabbyt_5anims_9AnimProxy_value, __pyx_setprop_6rabbyt_5anims_9AnimProxy_value, 0, 0},
  {0, 0, 0, 0, 0}
};

static PyNumberMethods __pyx_tp_as_number_AnimProxy = {
  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_AnimProxy = {
  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_AnimProxy = {
  0, /*mp_length*/
  0, /*mp_subscript*/
  0, /*mp_ass_subscript*/
};

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

PyTypeObject __pyx_type_6rabbyt_5anims_AnimProxy = {
  PyObject_HEAD_INIT(0)
  0, /*ob_size*/
  "rabbyt.anims.AnimProxy", /*tp_name*/
  sizeof(struct __pyx_obj_6rabbyt_5anims_AnimProxy), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6rabbyt_5anims_AnimProxy, /*tp_dealloc*/
  0, /*tp_print*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  0, /*tp_compare*/
  0, /*tp_repr*/
  &__pyx_tp_as_number_AnimProxy, /*tp_as_number*/
  &__pyx_tp_as_sequence_AnimProxy, /*tp_as_sequence*/
  &__pyx_tp_as_mapping_AnimProxy, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  &__pyx_tp_as_buffer_AnimProxy, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
  "\n    ``AnimProxy(value, cache=False)``\n\n    An anim that simply returns the value of another anim.\n    ", /*tp_doc*/
  __pyx_tp_traverse_6rabbyt_5anims_AnimProxy, /*tp_traverse*/
  __pyx_tp_clear_6rabbyt_5anims_AnimProxy, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_6rabbyt_5anims_AnimProxy, /*tp_methods*/
  0, /*tp_members*/
  __pyx_getsets_6rabbyt_5anims_AnimProxy, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  __pyx_f_6rabbyt_5anims_9AnimProxy___init__, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6rabbyt_5anims_AnimProxy, /*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[] = {
  {"set_time", (PyCFunction)__pyx_f_6rabbyt_5anims_set_time, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6rabbyt_5anims_set_time},
  {"get_time", (PyCFunction)__pyx_f_6rabbyt_5anims_get_time, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6rabbyt_5anims_get_time},
  {"to_Anim", (PyCFunction)__pyx_f_6rabbyt_5anims_to_Anim, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6rabbyt_5anims_to_Anim},
  {0, 0, 0, 0}
};

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

PyMODINIT_FUNC initanims(void); /*proto*/
PyMODINIT_FUNC initanims(void) {
  PyObject *__pyx_1 = 0;
  PyObject *__pyx_2 = 0;
  PyObject *__pyx_3 = 0;
  PyObject *__pyx_4 = 0;
  PyObject *__pyx_5 = 0;
  __pyx_init_filenames();
  __pyx_m = Py_InitModule4("anims", __pyx_methods, __pyx_mdoc, 0, PYTHON_API_VERSION);
  if (!__pyx_m) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; goto __pyx_L1;};
  __pyx_b = PyImport_AddModule("__builtin__");
  if (!__pyx_b) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; goto __pyx_L1;};
  if (PyObject_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; goto __pyx_L1;};
  if (__Pyx_InternStrings(__pyx_intern_tab) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; goto __pyx_L1;};
  if (__Pyx_InitStrings(__pyx_string_tab) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; goto __pyx_L1;};
  __pyx_vtabptr_6rabbyt_5anims_Anim = &__pyx_vtable_6rabbyt_5anims_Anim;
  *(void(**)())&__pyx_vtable_6rabbyt_5anims_Anim.g = (void(*)())__pyx_f_6rabbyt_5anims_4Anim_g;
  if (PyType_Ready(&__pyx_type_6rabbyt_5anims_Anim) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; goto __pyx_L1;}
  if (__Pyx_SetVtable(__pyx_type_6rabbyt_5anims_Anim.tp_dict, __pyx_vtabptr_6rabbyt_5anims_Anim) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; goto __pyx_L1;}
  if (PyObject_SetAttrString(__pyx_m, "Anim", (PyObject *)&__pyx_type_6rabbyt_5anims_Anim) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; goto __pyx_L1;}
  __pyx_ptype_6rabbyt_5anims_Anim = &__pyx_type_6rabbyt_5anims_Anim;
  __pyx_vtabptr_6rabbyt_5anims_AnimConst = &__pyx_vtable_6rabbyt_5anims_AnimConst;
  __pyx_vtable_6rabbyt_5anims_AnimConst.__pyx_base = *__pyx_vtabptr_6rabbyt_5anims_Anim;
  *(void(**)())&__pyx_vtable_6rabbyt_5anims_AnimConst.__pyx_base.g = (void(*)())__pyx_f_6rabbyt_5anims_9AnimConst_g;
  __pyx_type_6rabbyt_5anims_AnimConst.tp_base = __pyx_ptype_6rabbyt_5anims_Anim;
  if (PyType_Ready(&__pyx_type_6rabbyt_5anims_AnimConst) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 106; goto __pyx_L1;}
  if (__Pyx_SetVtable(__pyx_type_6rabbyt_5anims_AnimConst.tp_dict, __pyx_vtabptr_6rabbyt_5anims_AnimConst) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 106; goto __pyx_L1;}
  if (PyObject_SetAttrString(__pyx_m, "AnimConst", (PyObject *)&__pyx_type_6rabbyt_5anims_AnimConst) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 106; goto __pyx_L1;}
  __pyx_ptype_6rabbyt_5anims_AnimConst = &__pyx_type_6rabbyt_5anims_AnimConst;
  __pyx_vtabptr_6rabbyt_5anims_AnimLerp = &__pyx_vtable_6rabbyt_5anims_AnimLerp;
  __pyx_vtable_6rabbyt_5anims_AnimLerp.__pyx_base = *__pyx_vtabptr_6rabbyt_5anims_Anim;
  *(void(**)())&__pyx_vtable_6rabbyt_5anims_AnimLerp.__pyx_base.g = (void(*)())__pyx_f_6rabbyt_5anims_8AnimLerp_g;
  __pyx_type_6rabbyt_5anims_AnimLerp.tp_base = __pyx_ptype_6rabbyt_5anims_Anim;
  if (PyType_Ready(&__pyx_type_6rabbyt_5anims_AnimLerp) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 145; goto __pyx_L1;}
  if (__Pyx_SetVtable(__pyx_type_6rabbyt_5anims_AnimLerp.tp_dict, __pyx_vtabptr_6rabbyt_5anims_AnimLerp) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 145; goto __pyx_L1;}
  if (PyObject_SetAttrString(__pyx_m, "AnimLerp", (PyObject *)&__pyx_type_6rabbyt_5anims_AnimLerp) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 145; goto __pyx_L1;}
  __pyx_ptype_6rabbyt_5anims_AnimLerp = &__pyx_type_6rabbyt_5anims_AnimLerp;
  __pyx_vtabptr_6rabbyt_5anims_AnimStaticCubicBezier = &__pyx_vtable_6rabbyt_5anims_AnimStaticCubicBezier;
  __pyx_vtable_6rabbyt_5anims_AnimStaticCubicBezier.__pyx_base = *__pyx_vtabptr_6rabbyt_5anims_Anim;
  *(void(**)())&__pyx_vtable_6rabbyt_5anims_AnimStaticCubicBezier.__pyx_base.g = (void(*)())__pyx_f_6rabbyt_5anims_21AnimStaticCubicBezier_g;
  __pyx_type_6rabbyt_5anims_AnimStaticCubicBezier.tp_base = __pyx_ptype_6rabbyt_5anims_Anim;
  if (PyType_Ready(&__pyx_type_6rabbyt_5anims_AnimStaticCubicBezier) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 168; goto __pyx_L1;}
  if (__Pyx_SetVtable(__pyx_type_6rabbyt_5anims_AnimStaticCubicBezier.tp_dict, __pyx_vtabptr_6rabbyt_5anims_AnimStaticCubicBezier) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 168; goto __pyx_L1;}
  if (PyObject_SetAttrString(__pyx_m, "AnimStaticCubicBezier", (PyObject *)&__pyx_type_6rabbyt_5anims_AnimStaticCubicBezier) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 168; goto __pyx_L1;}
  __pyx_ptype_6rabbyt_5anims_AnimStaticCubicBezier = &__pyx_type_6rabbyt_5anims_AnimStaticCubicBezier;
  __pyx_vtabptr_6rabbyt_5anims_AnimWrap = &__pyx_vtable_6rabbyt_5anims_AnimWrap;
  __pyx_vtable_6rabbyt_5anims_AnimWrap.__pyx_base = *__pyx_vtabptr_6rabbyt_5anims_Anim;
  *(void(**)())&__pyx_vtable_6rabbyt_5anims_AnimWrap.__pyx_base.g = (void(*)())__pyx_f_6rabbyt_5anims_8AnimWrap_g;
  __pyx_type_6rabbyt_5anims_AnimWrap.tp_base = __pyx_ptype_6rabbyt_5anims_Anim;
  __pyx_type_6rabbyt_5anims_AnimWrap.tp_free = _PyObject_GC_Del;
  if (PyType_Ready(&__pyx_type_6rabbyt_5anims_AnimWrap) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 193; goto __pyx_L1;}
  if (__Pyx_SetVtable(__pyx_type_6rabbyt_5anims_AnimWrap.tp_dict, __pyx_vtabptr_6rabbyt_5anims_AnimWrap) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 193; goto __pyx_L1;}
  if (PyObject_SetAttrString(__pyx_m, "AnimWrap", (PyObject *)&__pyx_type_6rabbyt_5anims_AnimWrap) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 193; goto __pyx_L1;}
  __pyx_ptype_6rabbyt_5anims_AnimWrap = &__pyx_type_6rabbyt_5anims_AnimWrap;
  __pyx_vtabptr_6rabbyt_5anims_AnimAddStatic = &__pyx_vtable_6rabbyt_5anims_AnimAddStatic;
  __pyx_vtable_6rabbyt_5anims_AnimAddStatic.__pyx_base = *__pyx_vtabptr_6rabbyt_5anims_Anim;
  *(void(**)())&__pyx_vtable_6rabbyt_5anims_AnimAddStatic.__pyx_base.g = (void(*)())__pyx_f_6rabbyt_5anims_13AnimAddStatic_g;
  __pyx_type_6rabbyt_5anims_AnimAddStatic.tp_base = __pyx_ptype_6rabbyt_5anims_Anim;
  __pyx_type_6rabbyt_5anims_AnimAddStatic.tp_free = _PyObject_GC_Del;
  if (PyType_Ready(&__pyx_type_6rabbyt_5anims_AnimAddStatic) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 246; goto __pyx_L1;}
  if (__Pyx_SetVtable(__pyx_type_6rabbyt_5anims_AnimAddStatic.tp_dict, __pyx_vtabptr_6rabbyt_5anims_AnimAddStatic) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 246; goto __pyx_L1;}
  if (PyObject_SetAttrString(__pyx_m, "AnimAddStatic", (PyObject *)&__pyx_type_6rabbyt_5anims_AnimAddStatic) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 246; goto __pyx_L1;}
  __pyx_ptype_6rabbyt_5anims_AnimAddStatic = &__pyx_type_6rabbyt_5anims_AnimAddStatic;
  __pyx_vtabptr_6rabbyt_5anims__AnimArithmatic = &__pyx_vtable_6rabbyt_5anims__AnimArithmatic;
  __pyx_vtable_6rabbyt_5anims__AnimArithmatic.__pyx_base = *__pyx_vtabptr_6rabbyt_5anims_Anim;
  __pyx_type_6rabbyt_5anims__AnimArithmatic.tp_base = __pyx_ptype_6rabbyt_5anims_Anim;
  __pyx_type_6rabbyt_5anims__AnimArithmatic.tp_free = _PyObject_GC_Del;
  if (PyType_Ready(&__pyx_type_6rabbyt_5anims__AnimArithmatic) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 258; goto __pyx_L1;}
  if (__Pyx_SetVtable(__pyx_type_6rabbyt_5anims__AnimArithmatic.tp_dict, __pyx_vtabptr_6rabbyt_5anims__AnimArithmatic) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 258; goto __pyx_L1;}
  if (PyObject_SetAttrString(__pyx_m, "_AnimArithmatic", (PyObject *)&__pyx_type_6rabbyt_5anims__AnimArithmatic) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 258; goto __pyx_L1;}
  __pyx_ptype_6rabbyt_5anims__AnimArithmatic = &__pyx_type_6rabbyt_5anims__AnimArithmatic;
  __pyx_vtabptr_6rabbyt_5anims_AnimAdd = &__pyx_vtable_6rabbyt_5anims_AnimAdd;
  __pyx_vtable_6rabbyt_5anims_AnimAdd.__pyx_base = *__pyx_vtabptr_6rabbyt_5anims__AnimArithmatic;
  *(void(**)())&__pyx_vtable_6rabbyt_5anims_AnimAdd.__pyx_base.__pyx_base.g = (void(*)())__pyx_f_6rabbyt_5anims_7AnimAdd_g;
  __pyx_type_6rabbyt_5anims_AnimAdd.tp_base = __pyx_ptype_6rabbyt_5anims__AnimArithmatic;
  if (PyType_Ready(&__pyx_type_6rabbyt_5anims_AnimAdd) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 265; goto __pyx_L1;}
  if (__Pyx_SetVtable(__pyx_type_6rabbyt_5anims_AnimAdd.tp_dict, __pyx_vtabptr_6rabbyt_5anims_AnimAdd) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 265; goto __pyx_L1;}
  if (PyObject_SetAttrString(__pyx_m, "AnimAdd", (PyObject *)&__pyx_type_6rabbyt_5anims_AnimAdd) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 265; goto __pyx_L1;}
  __pyx_ptype_6rabbyt_5anims_AnimAdd = &__pyx_type_6rabbyt_5anims_AnimAdd;
  __pyx_vtabptr_6rabbyt_5anims_AnimSub = &__pyx_vtable_6rabbyt_5anims_AnimSub;
  __pyx_vtable_6rabbyt_5anims_AnimSub.__pyx_base = *__pyx_vtabptr_6rabbyt_5anims__AnimArithmatic;
  *(void(**)())&__pyx_vtable_6rabbyt_5anims_AnimSub.__pyx_base.__pyx_base.g = (void(*)())__pyx_f_6rabbyt_5anims_7AnimSub_g;
  __pyx_type_6rabbyt_5anims_AnimSub.tp_base = __pyx_ptype_6rabbyt_5anims__AnimArithmatic;
  if (PyType_Ready(&__pyx_type_6rabbyt_5anims_AnimSub) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 269; goto __pyx_L1;}
  if (__Pyx_SetVtable(__pyx_type_6rabbyt_5anims_AnimSub.tp_dict, __pyx_vtabptr_6rabbyt_5anims_AnimSub) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 269; goto __pyx_L1;}
  if (PyObject_SetAttrString(__pyx_m, "AnimSub", (PyObject *)&__pyx_type_6rabbyt_5anims_AnimSub) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 269; goto __pyx_L1;}
  __pyx_ptype_6rabbyt_5anims_AnimSub = &__pyx_type_6rabbyt_5anims_AnimSub;
  __pyx_vtabptr_6rabbyt_5anims_AnimMul = &__pyx_vtable_6rabbyt_5anims_AnimMul;
  __pyx_vtable_6rabbyt_5anims_AnimMul.__pyx_base = *__pyx_vtabptr_6rabbyt_5anims__AnimArithmatic;
  *(void(**)())&__pyx_vtable_6rabbyt_5anims_AnimMul.__pyx_base.__pyx_base.g = (void(*)())__pyx_f_6rabbyt_5anims_7AnimMul_g;
  __pyx_type_6rabbyt_5anims_AnimMul.tp_base = __pyx_ptype_6rabbyt_5anims__AnimArithmatic;
  if (PyType_Ready(&__pyx_type_6rabbyt_5anims_AnimMul) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 273; goto __pyx_L1;}
  if (__Pyx_SetVtable(__pyx_type_6rabbyt_5anims_AnimMul.tp_dict, __pyx_vtabptr_6rabbyt_5anims_AnimMul) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 273; goto __pyx_L1;}
  if (PyObject_SetAttrString(__pyx_m, "AnimMul", (PyObject *)&__pyx_type_6rabbyt_5anims_AnimMul) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 273; goto __pyx_L1;}
  __pyx_ptype_6rabbyt_5anims_AnimMul = &__pyx_type_6rabbyt_5anims_AnimMul;
  __pyx_vtabptr_6rabbyt_5anims_AnimDiv = &__pyx_vtable_6rabbyt_5anims_AnimDiv;
  __pyx_vtable_6rabbyt_5anims_AnimDiv.__pyx_base = *__pyx_vtabptr_6rabbyt_5anims__AnimArithmatic;
  *(void(**)())&__pyx_vtable_6rabbyt_5anims_AnimDiv.__pyx_base.__pyx_base.g = (void(*)())__pyx_f_6rabbyt_5anims_7AnimDiv_g;
  __pyx_type_6rabbyt_5anims_AnimDiv.tp_base = __pyx_ptype_6rabbyt_5anims__AnimArithmatic;
  if (PyType_Ready(&__pyx_type_6rabbyt_5anims_AnimDiv) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 277; goto __pyx_L1;}
  if (__Pyx_SetVtable(__pyx_type_6rabbyt_5anims_AnimDiv.tp_dict, __pyx_vtabptr_6rabbyt_5anims_AnimDiv) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 277; goto __pyx_L1;}
  if (PyObject_SetAttrString(__pyx_m, "AnimDiv", (PyObject *)&__pyx_type_6rabbyt_5anims_AnimDiv) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 277; goto __pyx_L1;}
  __pyx_ptype_6rabbyt_5anims_AnimDiv = &__pyx_type_6rabbyt_5anims_AnimDiv;
  __pyx_vtabptr_6rabbyt_5anims_AnimPyFunc = &__pyx_vtable_6rabbyt_5anims_AnimPyFunc;
  __pyx_vtable_6rabbyt_5anims_AnimPyFunc.__pyx_base = *__pyx_vtabptr_6rabbyt_5anims_Anim;
  *(void(**)())&__pyx_vtable_6rabbyt_5anims_AnimPyFunc.__pyx_base.g = (void(*)())__pyx_f_6rabbyt_5anims_10AnimPyFunc_g;
  __pyx_type_6rabbyt_5anims_AnimPyFunc.tp_base = __pyx_ptype_6rabbyt_5anims_Anim;
  __pyx_type_6rabbyt_5anims_AnimPyFunc.tp_free = _PyObject_GC_Del;
  if (PyType_Ready(&__pyx_type_6rabbyt_5anims_AnimPyFunc) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 281; goto __pyx_L1;}
  if (__Pyx_SetVtable(__pyx_type_6rabbyt_5anims_AnimPyFunc.tp_dict, __pyx_vtabptr_6rabbyt_5anims_AnimPyFunc) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 281; goto __pyx_L1;}
  if (PyObject_SetAttrString(__pyx_m, "AnimPyFunc", (PyObject *)&__pyx_type_6rabbyt_5anims_AnimPyFunc) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 281; goto __pyx_L1;}
  __pyx_ptype_6rabbyt_5anims_AnimPyFunc = &__pyx_type_6rabbyt_5anims_AnimPyFunc;
  __pyx_vtabptr_6rabbyt_5anims_AnimProxy = &__pyx_vtable_6rabbyt_5anims_AnimProxy;
  __pyx_vtable_6rabbyt_5anims_AnimProxy.__pyx_base = *__pyx_vtabptr_6rabbyt_5anims_Anim;
  *(void(**)())&__pyx_vtable_6rabbyt_5anims_AnimProxy.__pyx_base.g = (void(*)())__pyx_f_6rabbyt_5anims_9AnimProxy_g;
  __pyx_type_6rabbyt_5anims_AnimProxy.tp_base = __pyx_ptype_6rabbyt_5anims_Anim;
  __pyx_type_6rabbyt_5anims_AnimProxy.tp_free = _PyObject_GC_Del;
  if (PyType_Ready(&__pyx_type_6rabbyt_5anims_AnimProxy) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 312; goto __pyx_L1;}
  if (__Pyx_SetVtable(__pyx_type_6rabbyt_5anims_AnimProxy.tp_dict, __pyx_vtabptr_6rabbyt_5anims_AnimProxy) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 312; goto __pyx_L1;}
  if (PyObject_SetAttrString(__pyx_m, "AnimProxy", (PyObject *)&__pyx_type_6rabbyt_5anims_AnimProxy) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 312; goto __pyx_L1;}
  __pyx_ptype_6rabbyt_5anims_AnimProxy = &__pyx_type_6rabbyt_5anims_AnimProxy;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.anims.pyx":5 */
  if (PyObject_SetAttr(__pyx_m, __pyx_n___credits__, __pyx_k1p) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4; goto __pyx_L1;}

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.anims.pyx":23 */
  if (PyObject_SetAttr(__pyx_m, __pyx_n___author__, __pyx_k2p) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 23; goto __pyx_L1;}

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.anims.pyx":215 */
  __pyx_1 = __Pyx_GetName(__pyx_b, __pyx_n_True); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 215; goto __pyx_L1;}
  __pyx_k3 = __pyx_1;
  __pyx_1 = 0;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.anims.pyx":299 */
  __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_False); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 299; goto __pyx_L1;}
  __pyx_k4 = __pyx_2;
  __pyx_2 = 0;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.anims.pyx":322 */
  __pyx_3 = __Pyx_GetName(__pyx_b, __pyx_n_False); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 322; goto __pyx_L1;}
  __pyx_k5 = __pyx_3;
  __pyx_3 = 0;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.anims.pyx":361 */
  __pyx_4 = PyObject_GetAttr(__pyx_k6p, __pyx_n_split); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 361; goto __pyx_L1;}
  __pyx_5 = PyObject_CallObject(__pyx_4, 0); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 361; goto __pyx_L1;}
  Py_DECREF(__pyx_4); __pyx_4 = 0;
  if (PyObject_SetAttr(__pyx_m, __pyx_n___docs_all__, __pyx_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 360; goto __pyx_L1;}
  Py_DECREF(__pyx_5); __pyx_5 = 0;
  return;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  Py_XDECREF(__pyx_2);
  Py_XDECREF(__pyx_3);
  Py_XDECREF(__pyx_4);
  Py_XDECREF(__pyx_5);
  __Pyx_AddTraceback("rabbyt.anims");
}

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

/* Runtime support code */

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

static int __Pyx_ArgTypeTest(PyObject *obj, PyTypeObject *type, int none_allowed, char *name) {
    if (!type) {
        PyErr_Format(PyExc_SystemError, "Missing type object");
        return 0;
    }
    if ((none_allowed && obj == Py_None) || PyObject_TypeCheck(obj, type))
        return 1;
    PyErr_Format(PyExc_TypeError,
        "Argument '%s' has incorrect type (expected %s, got %s)",
        name, type->tp_name, obj->ob_type->tp_name);
    return 0;
}

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 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_WriteUnraisable(char *name) {
    PyObject *old_exc, *old_val, *old_tb;
    PyObject *ctx;
    PyErr_Fetch(&old_exc, &old_val, &old_tb);
    ctx = PyString_FromString(name);
    PyErr_Restore(old_exc, old_val, old_tb);
    if (!ctx)
        ctx = Py_None;
    PyErr_WriteUnraisable(ctx);
}

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 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);
}
