/* Generated by Pyrex 0.9.6.3 on Sat Dec 15 22:02:30 2007 */

#define PY_SSIZE_T_CLEAN
#include "Python.h"
#include "structmember.h"
#ifndef PY_LONG_LONG
  #define PY_LONG_LONG LONG_LONG
#endif
#if PY_VERSION_HEX < 0x02050000
  typedef int Py_ssize_t;
  #define PY_SSIZE_T_MAX INT_MAX
  #define PY_SSIZE_T_MIN INT_MIN
  #define PyInt_FromSsize_t(z) PyInt_FromLong(z)
  #define PyInt_AsSsize_t(o)	PyInt_AsLong(o)
#endif
#ifndef WIN32
  #define __stdcall
  #define __cdecl
#endif
#ifdef __cplusplus
#define __PYX_EXTERN_C extern "C"
#else
#define __PYX_EXTERN_C extern
#endif
#include <math.h>
#include "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\nThis module provides the compiled Anim classes.  Everything is imported into\nthe rabbyt.anims module, and should be accessed from there.\n\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_6_anims_Anim {
  PyObject_HEAD
  struct __pyx_vtabstruct_6rabbyt_6_anims_Anim *__pyx_vtab;
};

struct __pyx_obj_6rabbyt_6_anims_AnimConst {
  struct __pyx_obj_6rabbyt_6_anims_Anim __pyx_base;
  float v;
};

struct __pyx_obj_6rabbyt_6_anims_AnimLerp {
  struct __pyx_obj_6rabbyt_6_anims_Anim __pyx_base;
  float start;
  float end;
  float startt;
  float endt;
  int extend;
  float one_over_dt;
};

struct __pyx_obj_6rabbyt_6_anims_AnimCosine {
  struct __pyx_obj_6rabbyt_6_anims_AnimLerp __pyx_base;
};

struct __pyx_obj_6rabbyt_6_anims_AnimSine {
  struct __pyx_obj_6rabbyt_6_anims_AnimLerp __pyx_base;
};

struct __pyx_obj_6rabbyt_6_anims_AnimExponential {
  struct __pyx_obj_6rabbyt_6_anims_AnimLerp __pyx_base;
};

struct __pyx_obj_6rabbyt_6_anims_AnimStaticCubicBezier {
  struct __pyx_obj_6rabbyt_6_anims_Anim __pyx_base;
  float p0;
  float startt;
  float endt;
  int extend;
  float one_over_dt;
  float a;
  float b;
  float c;
};

struct __pyx_obj_6rabbyt_6_anims_AnimWrap {
  struct __pyx_obj_6rabbyt_6_anims_Anim __pyx_base;
  struct __pyx_obj_6rabbyt_6_anims_Anim *parent;
  PyObject *bounds;
  unsigned char is_static;
  float s_bounds[2];
};

struct __pyx_obj_6rabbyt_6_anims_AnimAddStatic {
  struct __pyx_obj_6rabbyt_6_anims_Anim __pyx_base;
  float s;
  struct __pyx_obj_6rabbyt_6_anims_Anim *a;
};

struct __pyx_obj_6rabbyt_6_anims__AnimArithmatic {
  struct __pyx_obj_6rabbyt_6_anims_Anim __pyx_base;
  struct __pyx_obj_6rabbyt_6_anims_Anim *a1;
  struct __pyx_obj_6rabbyt_6_anims_Anim *a2;
};

struct __pyx_obj_6rabbyt_6_anims_AnimAdd {
  struct __pyx_obj_6rabbyt_6_anims__AnimArithmatic __pyx_base;
};

struct __pyx_obj_6rabbyt_6_anims_AnimSub {
  struct __pyx_obj_6rabbyt_6_anims__AnimArithmatic __pyx_base;
};

struct __pyx_obj_6rabbyt_6_anims_AnimMul {
  struct __pyx_obj_6rabbyt_6_anims__AnimArithmatic __pyx_base;
};

struct __pyx_obj_6rabbyt_6_anims_AnimDiv {
  struct __pyx_obj_6rabbyt_6_anims__AnimArithmatic __pyx_base;
};

struct __pyx_obj_6rabbyt_6_anims_AnimPyFunc {
  struct __pyx_obj_6rabbyt_6_anims_Anim __pyx_base;
  PyObject *function;
  int cache_output;
  float cache;
  float cache_time;
};

struct __pyx_obj_6rabbyt_6_anims_AnimProxy {
  struct __pyx_obj_6rabbyt_6_anims_Anim __pyx_base;
  int cache_output;
  float cache;
  float cache_time;
  struct __pyx_obj_6rabbyt_6_anims_Anim *_value;
};


struct __pyx_vtabstruct_6rabbyt_6_anims_Anim {
  float (*g)(struct __pyx_obj_6rabbyt_6_anims_Anim *);
};
static struct __pyx_vtabstruct_6rabbyt_6_anims_Anim *__pyx_vtabptr_6rabbyt_6_anims_Anim;


struct __pyx_vtabstruct_6rabbyt_6_anims_AnimConst {
  struct __pyx_vtabstruct_6rabbyt_6_anims_Anim __pyx_base;
};
static struct __pyx_vtabstruct_6rabbyt_6_anims_AnimConst *__pyx_vtabptr_6rabbyt_6_anims_AnimConst;


struct __pyx_vtabstruct_6rabbyt_6_anims_AnimLerp {
  struct __pyx_vtabstruct_6rabbyt_6_anims_Anim __pyx_base;
  float (*_interpolate)(struct __pyx_obj_6rabbyt_6_anims_AnimLerp *,float);
};
static struct __pyx_vtabstruct_6rabbyt_6_anims_AnimLerp *__pyx_vtabptr_6rabbyt_6_anims_AnimLerp;


struct __pyx_vtabstruct_6rabbyt_6_anims_AnimCosine {
  struct __pyx_vtabstruct_6rabbyt_6_anims_AnimLerp __pyx_base;
};
static struct __pyx_vtabstruct_6rabbyt_6_anims_AnimCosine *__pyx_vtabptr_6rabbyt_6_anims_AnimCosine;


struct __pyx_vtabstruct_6rabbyt_6_anims_AnimSine {
  struct __pyx_vtabstruct_6rabbyt_6_anims_AnimLerp __pyx_base;
};
static struct __pyx_vtabstruct_6rabbyt_6_anims_AnimSine *__pyx_vtabptr_6rabbyt_6_anims_AnimSine;


struct __pyx_vtabstruct_6rabbyt_6_anims_AnimExponential {
  struct __pyx_vtabstruct_6rabbyt_6_anims_AnimLerp __pyx_base;
};
static struct __pyx_vtabstruct_6rabbyt_6_anims_AnimExponential *__pyx_vtabptr_6rabbyt_6_anims_AnimExponential;


struct __pyx_vtabstruct_6rabbyt_6_anims_AnimStaticCubicBezier {
  struct __pyx_vtabstruct_6rabbyt_6_anims_Anim __pyx_base;
};
static struct __pyx_vtabstruct_6rabbyt_6_anims_AnimStaticCubicBezier *__pyx_vtabptr_6rabbyt_6_anims_AnimStaticCubicBezier;


struct __pyx_vtabstruct_6rabbyt_6_anims_AnimWrap {
  struct __pyx_vtabstruct_6rabbyt_6_anims_Anim __pyx_base;
};
static struct __pyx_vtabstruct_6rabbyt_6_anims_AnimWrap *__pyx_vtabptr_6rabbyt_6_anims_AnimWrap;


struct __pyx_vtabstruct_6rabbyt_6_anims_AnimAddStatic {
  struct __pyx_vtabstruct_6rabbyt_6_anims_Anim __pyx_base;
};
static struct __pyx_vtabstruct_6rabbyt_6_anims_AnimAddStatic *__pyx_vtabptr_6rabbyt_6_anims_AnimAddStatic;


struct __pyx_vtabstruct_6rabbyt_6_anims__AnimArithmatic {
  struct __pyx_vtabstruct_6rabbyt_6_anims_Anim __pyx_base;
};
static struct __pyx_vtabstruct_6rabbyt_6_anims__AnimArithmatic *__pyx_vtabptr_6rabbyt_6_anims__AnimArithmatic;


struct __pyx_vtabstruct_6rabbyt_6_anims_AnimAdd {
  struct __pyx_vtabstruct_6rabbyt_6_anims__AnimArithmatic __pyx_base;
};
static struct __pyx_vtabstruct_6rabbyt_6_anims_AnimAdd *__pyx_vtabptr_6rabbyt_6_anims_AnimAdd;


struct __pyx_vtabstruct_6rabbyt_6_anims_AnimSub {
  struct __pyx_vtabstruct_6rabbyt_6_anims__AnimArithmatic __pyx_base;
};
static struct __pyx_vtabstruct_6rabbyt_6_anims_AnimSub *__pyx_vtabptr_6rabbyt_6_anims_AnimSub;


struct __pyx_vtabstruct_6rabbyt_6_anims_AnimMul {
  struct __pyx_vtabstruct_6rabbyt_6_anims__AnimArithmatic __pyx_base;
};
static struct __pyx_vtabstruct_6rabbyt_6_anims_AnimMul *__pyx_vtabptr_6rabbyt_6_anims_AnimMul;


struct __pyx_vtabstruct_6rabbyt_6_anims_AnimDiv {
  struct __pyx_vtabstruct_6rabbyt_6_anims__AnimArithmatic __pyx_base;
};
static struct __pyx_vtabstruct_6rabbyt_6_anims_AnimDiv *__pyx_vtabptr_6rabbyt_6_anims_AnimDiv;


struct __pyx_vtabstruct_6rabbyt_6_anims_AnimPyFunc {
  struct __pyx_vtabstruct_6rabbyt_6_anims_Anim __pyx_base;
};
static struct __pyx_vtabstruct_6rabbyt_6_anims_AnimPyFunc *__pyx_vtabptr_6rabbyt_6_anims_AnimPyFunc;


struct __pyx_vtabstruct_6rabbyt_6_anims_AnimProxy {
  struct __pyx_vtabstruct_6rabbyt_6_anims_Anim __pyx_base;
};
static struct __pyx_vtabstruct_6rabbyt_6_anims_AnimProxy *__pyx_vtabptr_6rabbyt_6_anims_AnimProxy;

static PyTypeObject *__pyx_ptype_6rabbyt_6_anims_Anim = 0;
static PyTypeObject *__pyx_ptype_6rabbyt_6_anims_AnimConst = 0;
static PyTypeObject *__pyx_ptype_6rabbyt_6_anims_AnimLerp = 0;
static PyTypeObject *__pyx_ptype_6rabbyt_6_anims_AnimCosine = 0;
static PyTypeObject *__pyx_ptype_6rabbyt_6_anims_AnimSine = 0;
static PyTypeObject *__pyx_ptype_6rabbyt_6_anims_AnimExponential = 0;
static PyTypeObject *__pyx_ptype_6rabbyt_6_anims_AnimStaticCubicBezier = 0;
static PyTypeObject *__pyx_ptype_6rabbyt_6_anims_AnimWrap = 0;
static PyTypeObject *__pyx_ptype_6rabbyt_6_anims_AnimAddStatic = 0;
static PyTypeObject *__pyx_ptype_6rabbyt_6_anims__AnimArithmatic = 0;
static PyTypeObject *__pyx_ptype_6rabbyt_6_anims_AnimAdd = 0;
static PyTypeObject *__pyx_ptype_6rabbyt_6_anims_AnimSub = 0;
static PyTypeObject *__pyx_ptype_6rabbyt_6_anims_AnimMul = 0;
static PyTypeObject *__pyx_ptype_6rabbyt_6_anims_AnimDiv = 0;
static PyTypeObject *__pyx_ptype_6rabbyt_6_anims_AnimPyFunc = 0;
static PyTypeObject *__pyx_ptype_6rabbyt_6_anims_AnimProxy = 0;
static float __pyx_v_6rabbyt_6_anims_time;
static PyObject *__pyx_k4;
static PyObject *__pyx_k5;
static PyObject *__pyx_k6;
static float __pyx_f_6rabbyt_6_anims__get_time(void); /*proto*/
static float __pyx_f_6rabbyt_6_anims_extend_t(float,int); /*proto*/


/* Implementation of rabbyt._anims */

static char __pyx_k1[] = "\n        The value that this anim will return.\n\n        You can assign another anim here, and it\'s value will be returned.\n        ";
static char __pyx_k2[] = "\nCopyright (C) 2007  Matthew Marshall\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n";
static char __pyx_k3[] = "Matthew Marshall <matthew@matthewmarshall.org>";

static PyObject *__pyx_n___credits__;
static PyObject *__pyx_n___author__;
static PyObject *__pyx_n_True;
static PyObject *__pyx_n_False;

static PyObject *__pyx_k2p;
static PyObject *__pyx_k3p;

static PyObject *__pyx_f_6rabbyt_6_anims_set_time(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6rabbyt_6_anims_set_time[] = "\n    ``set_time(t)``\n\n    Sets the time that ``get_time()`` should return.\n\n    If you are using any time based animations, (such as ``lerp()``,)\n    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\n    Note that rabbyt makes no assumption about the unit that the time is in.\n    You can use milliseconds or seconds or even something else.  It\'s up to\n    you.\n    ";
static PyObject *__pyx_f_6rabbyt_6_anims_set_time(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  float __pyx_v_t;
  PyObject *__pyx_r;
  static char *__pyx_argnames[] = {"t",0};
  if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "f", __pyx_argnames, &__pyx_v_t)) return 0;

  /* "/home/mmarshall/projects/rabbyt_7.6/rabbyt/rabbyt._anims.pyx":65 */
  __pyx_v_6rabbyt_6_anims_time = __pyx_v_t;

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

static PyObject *__pyx_f_6rabbyt_6_anims_get_time(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6rabbyt_6_anims_get_time[] = "\n    ``get_time()``\n\n    Gets the time that was last set by ``set_time()``\n    ";
static PyObject *__pyx_f_6rabbyt_6_anims_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_7.6/rabbyt/rabbyt._anims.pyx":74 */
  __pyx_1 = PyFloat_FromDouble(__pyx_v_6rabbyt_6_anims_time); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 74; 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 PyObject *__pyx_f_6rabbyt_6_anims_add_time(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6rabbyt_6_anims_add_time[] = "\n    ``add_time(t)``\n\n    Adds ``t`` to the ... time ... (Is it just me or does that sound dorky?)\n\n    This is really just a short cut that does this:\n\n        .. sourcecode:: python\n\n            set_time(get_time() + t)\n\n    The new time is returned.\n    ";
static PyObject *__pyx_f_6rabbyt_6_anims_add_time(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  float __pyx_v_t;
  PyObject *__pyx_r;
  PyObject *__pyx_1 = 0;
  static char *__pyx_argnames[] = {"t",0};
  if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "f", __pyx_argnames, &__pyx_v_t)) return 0;

  /* "/home/mmarshall/projects/rabbyt_7.6/rabbyt/rabbyt._anims.pyx":91 */
  __pyx_v_6rabbyt_6_anims_time = (__pyx_v_6rabbyt_6_anims_time + __pyx_v_t);

  /* "/home/mmarshall/projects/rabbyt_7.6/rabbyt/rabbyt._anims.pyx":92 */
  __pyx_1 = PyFloat_FromDouble(__pyx_v_6rabbyt_6_anims_time); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 92; 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.add_time");
  __pyx_r = 0;
  __pyx_L0:;
  return __pyx_r;
}

static float __pyx_f_6rabbyt_6_anims__get_time(void) {
  float __pyx_r;
  __pyx_r = __pyx_v_6rabbyt_6_anims_time;
  goto __pyx_L0;

  __pyx_r = 0;
  __pyx_L0:;
  return __pyx_r;
}

static float __pyx_f_6rabbyt_6_anims_4Anim_g(struct __pyx_obj_6rabbyt_6_anims_Anim *__pyx_v_self) {
  float __pyx_r;
  Py_INCREF(__pyx_v_self);
  __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_6_anims_4Anim_get(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6rabbyt_6_anims_4Anim_get[] = "\n        ``get() -> float``\n\n        Gets the value.\n        ";
static PyObject *__pyx_f_6rabbyt_6_anims_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);
  __pyx_1 = PyFloat_FromDouble(((struct __pyx_vtabstruct_6rabbyt_6_anims_Anim *)((struct __pyx_obj_6rabbyt_6_anims_Anim *)__pyx_v_self)->__pyx_vtab)->g(((struct __pyx_obj_6rabbyt_6_anims_Anim *)__pyx_v_self))); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 116; 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_int;
static PyObject *__pyx_n_long;
static PyObject *__pyx_n_float;

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

  /* "/home/mmarshall/projects/rabbyt_7.6/rabbyt/rabbyt._anims.pyx":119 */
  __pyx_1 = PyObject_IsInstance(__pyx_v_self,((PyObject*)__pyx_ptype_6rabbyt_6_anims_Anim)); if (__pyx_1 == -1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 119; goto __pyx_L1;}
  __pyx_2 = (!__pyx_1);
  if (__pyx_2) {
    __pyx_3 = __pyx_v_other;
    Py_INCREF(__pyx_3);
    __pyx_4 = __pyx_v_self;
    Py_INCREF(__pyx_4);
    Py_DECREF(__pyx_v_self);
    __pyx_v_self = __pyx_3;
    __pyx_3 = 0;
    Py_DECREF(__pyx_v_other);
    __pyx_v_other = __pyx_4;
    __pyx_4 = 0;
    goto __pyx_L2;
  }
  __pyx_L2:;

  /* "/home/mmarshall/projects/rabbyt_7.6/rabbyt/rabbyt._anims.pyx":121 */
  __pyx_3 = __Pyx_GetName(__pyx_b, __pyx_n_int); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 121; goto __pyx_L1;}
  __pyx_4 = __Pyx_GetName(__pyx_b, __pyx_n_long); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 121; goto __pyx_L1;}
  __pyx_5 = __Pyx_GetName(__pyx_b, __pyx_n_float); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 121; goto __pyx_L1;}
  __pyx_6 = PyTuple_New(3); if (!__pyx_6) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 121; goto __pyx_L1;}
  PyTuple_SET_ITEM(__pyx_6, 0, __pyx_3);
  PyTuple_SET_ITEM(__pyx_6, 1, __pyx_4);
  PyTuple_SET_ITEM(__pyx_6, 2, __pyx_5);
  __pyx_3 = 0;
  __pyx_4 = 0;
  __pyx_5 = 0;
  __pyx_1 = PyObject_IsInstance(__pyx_v_other,__pyx_6); if (__pyx_1 == -1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 121; goto __pyx_L1;}
  Py_DECREF(__pyx_6); __pyx_6 = 0;
  if (__pyx_1) {
    __pyx_3 = PyTuple_New(2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 122; 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_4 = PyObject_CallObject(((PyObject*)__pyx_ptype_6rabbyt_6_anims_AnimAddStatic), __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 122; goto __pyx_L1;}
    Py_DECREF(__pyx_3); __pyx_3 = 0;
    __pyx_r = __pyx_4;
    __pyx_4 = 0;
    goto __pyx_L0;
    goto __pyx_L3;
  }
  /*else*/ {
    __pyx_5 = PyTuple_New(2); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 124; goto __pyx_L1;}
    Py_INCREF(__pyx_v_self);
    PyTuple_SET_ITEM(__pyx_5, 0, __pyx_v_self);
    Py_INCREF(__pyx_v_other);
    PyTuple_SET_ITEM(__pyx_5, 1, __pyx_v_other);
    __pyx_6 = PyObject_CallObject(((PyObject*)__pyx_ptype_6rabbyt_6_anims_AnimAdd), __pyx_5); if (!__pyx_6) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 124; goto __pyx_L1;}
    Py_DECREF(__pyx_5); __pyx_5 = 0;
    __pyx_r = __pyx_6;
    __pyx_6 = 0;
    goto __pyx_L0;
  }
  __pyx_L3:;

  __pyx_r = Py_None; Py_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_3);
  Py_XDECREF(__pyx_4);
  Py_XDECREF(__pyx_5);
  Py_XDECREF(__pyx_6);
  __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_6_anims_4Anim___sub__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /*proto*/
static PyObject *__pyx_f_6rabbyt_6_anims_4Anim___sub__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
  PyObject *__pyx_r;
  int __pyx_1;
  PyObject *__pyx_2 = 0;
  PyObject *__pyx_3 = 0;
  PyObject *__pyx_4 = 0;
  PyObject *__pyx_5 = 0;
  Py_INCREF(__pyx_v_self);
  Py_INCREF(__pyx_v_other);
  __pyx_1 = PyObject_IsInstance(__pyx_v_self,((PyObject*)__pyx_ptype_6rabbyt_6_anims_Anim)); if (__pyx_1 == -1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 127; goto __pyx_L1;}
  if (__pyx_1) {
    __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_int); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 127; goto __pyx_L1;}
    __pyx_3 = __Pyx_GetName(__pyx_b, __pyx_n_long); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 127; goto __pyx_L1;}
    __pyx_4 = __Pyx_GetName(__pyx_b, __pyx_n_float); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 127; goto __pyx_L1;}
    __pyx_5 = PyTuple_New(3); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 127; goto __pyx_L1;}
    PyTuple_SET_ITEM(__pyx_5, 0, __pyx_2);
    PyTuple_SET_ITEM(__pyx_5, 1, __pyx_3);
    PyTuple_SET_ITEM(__pyx_5, 2, __pyx_4);
    __pyx_2 = 0;
    __pyx_3 = 0;
    __pyx_4 = 0;
    __pyx_1 = PyObject_IsInstance(__pyx_v_other,__pyx_5); if (__pyx_1 == -1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 127; goto __pyx_L1;}
    Py_DECREF(__pyx_5); __pyx_5 = 0;
  }
  if (__pyx_1) {
    __pyx_2 = PyNumber_Negative(__pyx_v_other); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 128; goto __pyx_L1;}
    __pyx_3 = PyTuple_New(2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 128; goto __pyx_L1;}
    Py_INCREF(__pyx_v_self);
    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_v_self);
    PyTuple_SET_ITEM(__pyx_3, 1, __pyx_2);
    __pyx_2 = 0;
    __pyx_4 = PyObject_CallObject(((PyObject*)__pyx_ptype_6rabbyt_6_anims_AnimAddStatic), __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 128; goto __pyx_L1;}
    Py_DECREF(__pyx_3); __pyx_3 = 0;
    __pyx_r = __pyx_4;
    __pyx_4 = 0;
    goto __pyx_L0;
    goto __pyx_L2;
  }
  /*else*/ {
    __pyx_5 = PyTuple_New(2); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 130; goto __pyx_L1;}
    Py_INCREF(__pyx_v_self);
    PyTuple_SET_ITEM(__pyx_5, 0, __pyx_v_self);
    Py_INCREF(__pyx_v_other);
    PyTuple_SET_ITEM(__pyx_5, 1, __pyx_v_other);
    __pyx_2 = PyObject_CallObject(((PyObject*)__pyx_ptype_6rabbyt_6_anims_AnimSub), __pyx_5); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 130; goto __pyx_L1;}
    Py_DECREF(__pyx_5); __pyx_5 = 0;
    __pyx_r = __pyx_2;
    __pyx_2 = 0;
    goto __pyx_L0;
  }
  __pyx_L2:;

  __pyx_r = Py_None; Py_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_2);
  Py_XDECREF(__pyx_3);
  Py_XDECREF(__pyx_4);
  Py_XDECREF(__pyx_5);
  __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_6_anims_4Anim___mul__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /*proto*/
static PyObject *__pyx_f_6rabbyt_6_anims_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);
  __pyx_1 = PyTuple_New(2); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 133; 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_6_anims_AnimMul), __pyx_1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 133; 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_6_anims_4Anim___div__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /*proto*/
static PyObject *__pyx_f_6rabbyt_6_anims_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);
  __pyx_1 = PyTuple_New(2); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 136; 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_6_anims_AnimDiv), __pyx_1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 136; 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_6_anims_9AnimConst___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_f_6rabbyt_6_anims_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);
  ((struct __pyx_obj_6rabbyt_6_anims_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_6_anims_9AnimConst_g(struct __pyx_obj_6rabbyt_6_anims_AnimConst *__pyx_v_self) {
  float __pyx_r;
  Py_INCREF((PyObject *)__pyx_v_self);
  __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_6_anims_extend_t(float __pyx_v_t,int __pyx_v_mode) {
  float __pyx_r;
  int __pyx_1;

  /* "/home/mmarshall/projects/rabbyt_7.6/rabbyt/rabbyt._anims.pyx":155 */
  __pyx_1 = (__pyx_v_mode == 1);
  if (__pyx_1) {
    __pyx_1 = (__pyx_v_t < 0);
    if (__pyx_1) {
      __pyx_v_t = 0;
      goto __pyx_L3;
    }
    __pyx_1 = (__pyx_v_t > 1);
    if (__pyx_1) {
      __pyx_v_t = 1;
      goto __pyx_L3;
    }
    __pyx_L3:;
    goto __pyx_L2;
  }
  __pyx_1 = (__pyx_v_mode == 2);
  if (__pyx_1) {
    goto __pyx_L2;
  }
  __pyx_1 = (__pyx_v_mode == 3);
  if (__pyx_1) {
    __pyx_1 = (__pyx_v_t >= 1);
    if (__pyx_1) {
      __pyx_v_t = (__pyx_v_t - ((int)__pyx_v_t));
      goto __pyx_L4;
    }
    __pyx_1 = (__pyx_v_t < 0);
    if (__pyx_1) {
      __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_7.6/rabbyt/rabbyt._anims.pyx":168 */
    __pyx_1 = (__pyx_v_t < 0);
    if (__pyx_1) {
      __pyx_v_t = (-__pyx_v_t);
      goto __pyx_L5;
    }
    __pyx_L5:;

    /* "/home/mmarshall/projects/rabbyt_7.6/rabbyt/rabbyt._anims.pyx":170 */
    __pyx_1 = ((((int)__pyx_v_t) % 2) == 1);
    if (__pyx_1) {
      __pyx_v_t = (1 - (__pyx_v_t - ((int)__pyx_v_t)));
      goto __pyx_L6;
    }
    /*else*/ {
      __pyx_v_t = (__pyx_v_t - ((int)__pyx_v_t));
    }
    __pyx_L6:;
    goto __pyx_L2;
  }
  __pyx_L2:;

  /* "/home/mmarshall/projects/rabbyt_7.6/rabbyt/rabbyt._anims.pyx":174 */
  __pyx_r = __pyx_v_t;
  goto __pyx_L0;

  __pyx_r = 0;
  __pyx_L0:;
  return __pyx_r;
}

static int __pyx_f_6rabbyt_6_anims_8AnimLerp___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_f_6rabbyt_6_anims_8AnimLerp___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  float __pyx_v_start;
  float __pyx_v_end;
  float __pyx_v_startt;
  float __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, "ffffi", __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_7.6/rabbyt/rabbyt._anims.pyx":186 */
  ((struct __pyx_obj_6rabbyt_6_anims_AnimLerp *)__pyx_v_self)->start = __pyx_v_start;

  /* "/home/mmarshall/projects/rabbyt_7.6/rabbyt/rabbyt._anims.pyx":187 */
  ((struct __pyx_obj_6rabbyt_6_anims_AnimLerp *)__pyx_v_self)->end = __pyx_v_end;

  /* "/home/mmarshall/projects/rabbyt_7.6/rabbyt/rabbyt._anims.pyx":188 */
  ((struct __pyx_obj_6rabbyt_6_anims_AnimLerp *)__pyx_v_self)->startt = __pyx_v_startt;

  /* "/home/mmarshall/projects/rabbyt_7.6/rabbyt/rabbyt._anims.pyx":189 */
  ((struct __pyx_obj_6rabbyt_6_anims_AnimLerp *)__pyx_v_self)->endt = __pyx_v_endt;

  /* "/home/mmarshall/projects/rabbyt_7.6/rabbyt/rabbyt._anims.pyx":190 */
  ((struct __pyx_obj_6rabbyt_6_anims_AnimLerp *)__pyx_v_self)->extend = __pyx_v_extend;

  /* "/home/mmarshall/projects/rabbyt_7.6/rabbyt/rabbyt._anims.pyx":191 */
  ((struct __pyx_obj_6rabbyt_6_anims_AnimLerp *)__pyx_v_self)->one_over_dt = (1 / ((float)(((struct __pyx_obj_6rabbyt_6_anims_AnimLerp *)__pyx_v_self)->endt - ((struct __pyx_obj_6rabbyt_6_anims_AnimLerp *)__pyx_v_self)->startt)));

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

static float __pyx_f_6rabbyt_6_anims_8AnimLerp__interpolate(struct __pyx_obj_6rabbyt_6_anims_AnimLerp *__pyx_v_self,float __pyx_v_t) {
  float __pyx_r;
  Py_INCREF((PyObject *)__pyx_v_self);
  __pyx_r = __pyx_v_t;
  goto __pyx_L0;

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

static float __pyx_f_6rabbyt_6_anims_8AnimLerp_g(struct __pyx_obj_6rabbyt_6_anims_AnimLerp *__pyx_v_self) {
  float __pyx_v_t;
  float __pyx_r;
  Py_INCREF((PyObject *)__pyx_v_self);

  /* "/home/mmarshall/projects/rabbyt_7.6/rabbyt/rabbyt._anims.pyx":198 */
  __pyx_v_t = __pyx_f_6rabbyt_6_anims_extend_t(((__pyx_f_6rabbyt_6_anims__get_time() - __pyx_v_self->startt) * __pyx_v_self->one_over_dt),__pyx_v_self->extend);

  /* "/home/mmarshall/projects/rabbyt_7.6/rabbyt/rabbyt._anims.pyx":199 */
  __pyx_r = (((__pyx_v_self->end - __pyx_v_self->start) * ((struct __pyx_vtabstruct_6rabbyt_6_anims_AnimLerp *)__pyx_v_self->__pyx_base.__pyx_vtab)->_interpolate(__pyx_v_self,__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 float __pyx_f_6rabbyt_6_anims_10AnimCosine__interpolate(struct __pyx_obj_6rabbyt_6_anims_AnimCosine *__pyx_v_self,float __pyx_v_t) {
  float __pyx_r;
  Py_INCREF((PyObject *)__pyx_v_self);
  __pyx_r = (1 - cosf(((__pyx_v_t * M_PI) / 2)));
  goto __pyx_L0;

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

static float __pyx_f_6rabbyt_6_anims_8AnimSine__interpolate(struct __pyx_obj_6rabbyt_6_anims_AnimSine *__pyx_v_self,float __pyx_v_t) {
  float __pyx_r;
  Py_INCREF((PyObject *)__pyx_v_self);
  __pyx_r = sinf(((__pyx_v_t * M_PI) / 2));
  goto __pyx_L0;

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

static float __pyx_f_6rabbyt_6_anims_15AnimExponential__interpolate(struct __pyx_obj_6rabbyt_6_anims_AnimExponential *__pyx_v_self,float __pyx_v_t) {
  float __pyx_r;
  Py_INCREF((PyObject *)__pyx_v_self);
  __pyx_r = ((expf(__pyx_v_t) - 1) / (expf(1) - 1));
  goto __pyx_L0;

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

static int __pyx_f_6rabbyt_6_anims_21AnimStaticCubicBezier___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_f_6rabbyt_6_anims_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;
  float __pyx_v_startt;
  float __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, "ffffffi", __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_7.6/rabbyt/rabbyt._anims.pyx":224 */
  ((struct __pyx_obj_6rabbyt_6_anims_AnimStaticCubicBezier *)__pyx_v_self)->p0 = __pyx_v_p0;

  /* "/home/mmarshall/projects/rabbyt_7.6/rabbyt/rabbyt._anims.pyx":225 */
  ((struct __pyx_obj_6rabbyt_6_anims_AnimStaticCubicBezier *)__pyx_v_self)->startt = __pyx_v_startt;

  /* "/home/mmarshall/projects/rabbyt_7.6/rabbyt/rabbyt._anims.pyx":226 */
  ((struct __pyx_obj_6rabbyt_6_anims_AnimStaticCubicBezier *)__pyx_v_self)->endt = __pyx_v_endt;

  /* "/home/mmarshall/projects/rabbyt_7.6/rabbyt/rabbyt._anims.pyx":227 */
  ((struct __pyx_obj_6rabbyt_6_anims_AnimStaticCubicBezier *)__pyx_v_self)->extend = __pyx_v_extend;

  /* "/home/mmarshall/projects/rabbyt_7.6/rabbyt/rabbyt._anims.pyx":228 */
  ((struct __pyx_obj_6rabbyt_6_anims_AnimStaticCubicBezier *)__pyx_v_self)->one_over_dt = (1 / ((float)(__pyx_v_endt - __pyx_v_startt)));

  /* "/home/mmarshall/projects/rabbyt_7.6/rabbyt/rabbyt._anims.pyx":229 */
  ((struct __pyx_obj_6rabbyt_6_anims_AnimStaticCubicBezier *)__pyx_v_self)->c = (3.0 * (__pyx_v_p1 - __pyx_v_p0));

  /* "/home/mmarshall/projects/rabbyt_7.6/rabbyt/rabbyt._anims.pyx":230 */
  ((struct __pyx_obj_6rabbyt_6_anims_AnimStaticCubicBezier *)__pyx_v_self)->b = ((3.0 * (__pyx_v_p2 - __pyx_v_p1)) - ((struct __pyx_obj_6rabbyt_6_anims_AnimStaticCubicBezier *)__pyx_v_self)->c);

  /* "/home/mmarshall/projects/rabbyt_7.6/rabbyt/rabbyt._anims.pyx":231 */
  ((struct __pyx_obj_6rabbyt_6_anims_AnimStaticCubicBezier *)__pyx_v_self)->a = (((__pyx_v_p3 - __pyx_v_p0) - ((struct __pyx_obj_6rabbyt_6_anims_AnimStaticCubicBezier *)__pyx_v_self)->c) - ((struct __pyx_obj_6rabbyt_6_anims_AnimStaticCubicBezier *)__pyx_v_self)->b);

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

static float __pyx_f_6rabbyt_6_anims_21AnimStaticCubicBezier_g(struct __pyx_obj_6rabbyt_6_anims_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_7.6/rabbyt/rabbyt._anims.pyx":235 */
  __pyx_v_t = __pyx_f_6rabbyt_6_anims_extend_t(((__pyx_f_6rabbyt_6_anims__get_time() - __pyx_v_self->startt) * __pyx_v_self->one_over_dt),__pyx_v_self->extend);

  /* "/home/mmarshall/projects/rabbyt_7.6/rabbyt/rabbyt._anims.pyx":236 */
  __pyx_v_t2 = (__pyx_v_t * __pyx_v_t);

  /* "/home/mmarshall/projects/rabbyt_7.6/rabbyt/rabbyt._anims.pyx":237 */
  __pyx_v_t3 = (__pyx_v_t2 * __pyx_v_t);

  /* "/home/mmarshall/projects/rabbyt_7.6/rabbyt/rabbyt._anims.pyx":238 */
  __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 PyObject *__pyx_n_to_Anim;

static int __pyx_f_6rabbyt_6_anims_8AnimWrap___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_f_6rabbyt_6_anims_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_k4;
  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_7.6/rabbyt/rabbyt._anims.pyx":263 */
  __pyx_1 = PyObject_IsTrue(__pyx_v_static); if (__pyx_1 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 263; goto __pyx_L1;}
  if (__pyx_1) {

    /* "/home/mmarshall/projects/rabbyt_7.6/rabbyt/rabbyt._anims.pyx":264 */
    ((struct __pyx_obj_6rabbyt_6_anims_AnimWrap *)__pyx_v_self)->is_static = 1;

    /* "/home/mmarshall/projects/rabbyt_7.6/rabbyt/rabbyt._anims.pyx":265 */
    __pyx_2 = PyInt_FromLong(0); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 265; goto __pyx_L1;}
    __pyx_3 = PyObject_GetItem(__pyx_v_bounds, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 265; 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 = 265; goto __pyx_L1;}
    Py_DECREF(__pyx_3); __pyx_3 = 0;
    (((struct __pyx_obj_6rabbyt_6_anims_AnimWrap *)__pyx_v_self)->s_bounds[0]) = __pyx_4;

    /* "/home/mmarshall/projects/rabbyt_7.6/rabbyt/rabbyt._anims.pyx":266 */
    __pyx_2 = PyInt_FromLong(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 266; goto __pyx_L1;}
    __pyx_3 = PyObject_GetItem(__pyx_v_bounds, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 266; 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 = 266; goto __pyx_L1;}
    Py_DECREF(__pyx_3); __pyx_3 = 0;
    (((struct __pyx_obj_6rabbyt_6_anims_AnimWrap *)__pyx_v_self)->s_bounds[1]) = __pyx_4;

    /* "/home/mmarshall/projects/rabbyt_7.6/rabbyt/rabbyt._anims.pyx":267 */
    Py_INCREF(Py_None);
    Py_DECREF(((struct __pyx_obj_6rabbyt_6_anims_AnimWrap *)__pyx_v_self)->bounds);
    ((struct __pyx_obj_6rabbyt_6_anims_AnimWrap *)__pyx_v_self)->bounds = Py_None;
    goto __pyx_L2;
  }
  /*else*/ {

    /* "/home/mmarshall/projects/rabbyt_7.6/rabbyt/rabbyt._anims.pyx":269 */
    ((struct __pyx_obj_6rabbyt_6_anims_AnimWrap *)__pyx_v_self)->is_static = 0;

    /* "/home/mmarshall/projects/rabbyt_7.6/rabbyt/rabbyt._anims.pyx":270 */
    Py_INCREF(__pyx_v_bounds);
    Py_DECREF(((struct __pyx_obj_6rabbyt_6_anims_AnimWrap *)__pyx_v_self)->bounds);
    ((struct __pyx_obj_6rabbyt_6_anims_AnimWrap *)__pyx_v_self)->bounds = __pyx_v_bounds;
  }
  __pyx_L2:;

  /* "/home/mmarshall/projects/rabbyt_7.6/rabbyt/rabbyt._anims.pyx":272 */
  __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_n_to_Anim); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 272; goto __pyx_L1;}
  __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 272; 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 = 272; 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_6_anims_Anim)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 272; goto __pyx_L1;}
  Py_DECREF(((PyObject *)((struct __pyx_obj_6rabbyt_6_anims_AnimWrap *)__pyx_v_self)->parent));
  ((struct __pyx_obj_6rabbyt_6_anims_AnimWrap *)__pyx_v_self)->parent = ((struct __pyx_obj_6rabbyt_6_anims_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_6_anims_8AnimWrap_g(struct __pyx_obj_6rabbyt_6_anims_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_7.6/rabbyt/rabbyt._anims.pyx":276 */
  __pyx_1 = (__pyx_v_self->is_static == 1);
  if (__pyx_1) {

    /* "/home/mmarshall/projects/rabbyt_7.6/rabbyt/rabbyt._anims.pyx":277 */
    __pyx_v_b1 = (__pyx_v_self->s_bounds[0]);

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

    /* "/home/mmarshall/projects/rabbyt_7.6/rabbyt/rabbyt._anims.pyx":280 */
    __pyx_2 = PyInt_FromLong(0); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 280; goto __pyx_L1;}
    __pyx_3 = PyObject_GetItem(__pyx_v_self->bounds, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 280; 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 = 280; goto __pyx_L1;}
    Py_DECREF(__pyx_3); __pyx_3 = 0;
    __pyx_v_b1 = __pyx_4;

    /* "/home/mmarshall/projects/rabbyt_7.6/rabbyt/rabbyt._anims.pyx":281 */
    __pyx_2 = PyInt_FromLong(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 281; goto __pyx_L1;}
    __pyx_3 = PyObject_GetItem(__pyx_v_self->bounds, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 281; 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 = 281; goto __pyx_L1;}
    Py_DECREF(__pyx_3); __pyx_3 = 0;
    __pyx_v_b2 = __pyx_4;
  }
  __pyx_L2:;

  /* "/home/mmarshall/projects/rabbyt_7.6/rabbyt/rabbyt._anims.pyx":283 */
  __pyx_v_p = ((struct __pyx_vtabstruct_6rabbyt_6_anims_Anim *)__pyx_v_self->parent->__pyx_vtab)->g(__pyx_v_self->parent);

  /* "/home/mmarshall/projects/rabbyt_7.6/rabbyt/rabbyt._anims.pyx":285 */
  __pyx_v_d = (__pyx_v_b2 - __pyx_v_b1);

  /* "/home/mmarshall/projects/rabbyt_7.6/rabbyt/rabbyt._anims.pyx":287 */
  __pyx_v_p = fmodf((__pyx_v_p - fmodf(__pyx_v_b1,__pyx_v_d)),__pyx_v_d);

  /* "/home/mmarshall/projects/rabbyt_7.6/rabbyt/rabbyt._anims.pyx":288 */
  __pyx_1 = (__pyx_v_p < 0);
  if (__pyx_1) {
    __pyx_v_p = (__pyx_v_p + __pyx_v_d);
    goto __pyx_L3;
  }
  __pyx_L3:;

  /* "/home/mmarshall/projects/rabbyt_7.6/rabbyt/rabbyt._anims.pyx":291 */
  __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_r = 0;
  __pyx_L0:;
  Py_DECREF((PyObject *)__pyx_v_self);
  return __pyx_r;
}

static int __pyx_f_6rabbyt_6_anims_13AnimAddStatic___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_f_6rabbyt_6_anims_13AnimAddStatic___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct __pyx_obj_6rabbyt_6_anims_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_6_anims_Anim, 0, "a")) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 297; goto __pyx_L1;}

  /* "/home/mmarshall/projects/rabbyt_7.6/rabbyt/rabbyt._anims.pyx":298 */
  Py_INCREF(((PyObject *)__pyx_v_a));
  Py_DECREF(((PyObject *)((struct __pyx_obj_6rabbyt_6_anims_AnimAddStatic *)__pyx_v_self)->a));
  ((struct __pyx_obj_6rabbyt_6_anims_AnimAddStatic *)__pyx_v_self)->a = __pyx_v_a;

  /* "/home/mmarshall/projects/rabbyt_7.6/rabbyt/rabbyt._anims.pyx":299 */
  ((struct __pyx_obj_6rabbyt_6_anims_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_6_anims_13AnimAddStatic_g(struct __pyx_obj_6rabbyt_6_anims_AnimAddStatic *__pyx_v_self) {
  float __pyx_r;
  Py_INCREF((PyObject *)__pyx_v_self);
  __pyx_r = (((struct __pyx_vtabstruct_6rabbyt_6_anims_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_6_anims_15_AnimArithmatic___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_f_6rabbyt_6_anims_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_7.6/rabbyt/rabbyt._anims.pyx":309 */
  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_n_to_Anim); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 309; goto __pyx_L1;}
  __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 309; 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 = 309; 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_6_anims_Anim)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 309; goto __pyx_L1;}
  Py_DECREF(((PyObject *)((struct __pyx_obj_6rabbyt_6_anims__AnimArithmatic *)__pyx_v_self)->a1));
  ((struct __pyx_obj_6rabbyt_6_anims__AnimArithmatic *)__pyx_v_self)->a1 = ((struct __pyx_obj_6rabbyt_6_anims_Anim *)__pyx_3);
  __pyx_3 = 0;

  /* "/home/mmarshall/projects/rabbyt_7.6/rabbyt/rabbyt._anims.pyx":310 */
  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_n_to_Anim); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 310; goto __pyx_L1;}
  __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 310; 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 = 310; 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_6_anims_Anim)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 310; goto __pyx_L1;}
  Py_DECREF(((PyObject *)((struct __pyx_obj_6rabbyt_6_anims__AnimArithmatic *)__pyx_v_self)->a2));
  ((struct __pyx_obj_6rabbyt_6_anims__AnimArithmatic *)__pyx_v_self)->a2 = ((struct __pyx_obj_6rabbyt_6_anims_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_6_anims_7AnimAdd_g(struct __pyx_obj_6rabbyt_6_anims_AnimAdd *__pyx_v_self) {
  float __pyx_r;
  Py_INCREF((PyObject *)__pyx_v_self);
  __pyx_r = (((struct __pyx_vtabstruct_6rabbyt_6_anims_Anim *)__pyx_v_self->__pyx_base.a1->__pyx_vtab)->g(__pyx_v_self->__pyx_base.a1) + ((struct __pyx_vtabstruct_6rabbyt_6_anims_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_6_anims_7AnimSub_g(struct __pyx_obj_6rabbyt_6_anims_AnimSub *__pyx_v_self) {
  float __pyx_r;
  Py_INCREF((PyObject *)__pyx_v_self);
  __pyx_r = (((struct __pyx_vtabstruct_6rabbyt_6_anims_Anim *)__pyx_v_self->__pyx_base.a1->__pyx_vtab)->g(__pyx_v_self->__pyx_base.a1) - ((struct __pyx_vtabstruct_6rabbyt_6_anims_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_6_anims_7AnimMul_g(struct __pyx_obj_6rabbyt_6_anims_AnimMul *__pyx_v_self) {
  float __pyx_r;
  Py_INCREF((PyObject *)__pyx_v_self);
  __pyx_r = (((struct __pyx_vtabstruct_6rabbyt_6_anims_Anim *)__pyx_v_self->__pyx_base.a1->__pyx_vtab)->g(__pyx_v_self->__pyx_base.a1) * ((struct __pyx_vtabstruct_6rabbyt_6_anims_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_6_anims_7AnimDiv_g(struct __pyx_obj_6rabbyt_6_anims_AnimDiv *__pyx_v_self) {
  float __pyx_r;
  Py_INCREF((PyObject *)__pyx_v_self);
  __pyx_r = (((struct __pyx_vtabstruct_6rabbyt_6_anims_Anim *)__pyx_v_self->__pyx_base.a1->__pyx_vtab)->g(__pyx_v_self->__pyx_base.a1) / ((struct __pyx_vtabstruct_6rabbyt_6_anims_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_6_anims_10AnimPyFunc___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_f_6rabbyt_6_anims_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_k5;
  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_7.6/rabbyt/rabbyt._anims.pyx":347 */
  Py_INCREF(__pyx_v_function);
  Py_DECREF(((struct __pyx_obj_6rabbyt_6_anims_AnimPyFunc *)__pyx_v_self)->function);
  ((struct __pyx_obj_6rabbyt_6_anims_AnimPyFunc *)__pyx_v_self)->function = __pyx_v_function;

  /* "/home/mmarshall/projects/rabbyt_7.6/rabbyt/rabbyt._anims.pyx":348 */
  __pyx_1 = PyInt_AsLong(__pyx_v_cache); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 348; goto __pyx_L1;}
  ((struct __pyx_obj_6rabbyt_6_anims_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_6_anims_10AnimPyFunc_g(struct __pyx_obj_6rabbyt_6_anims_AnimPyFunc *__pyx_v_self) {
  float __pyx_r;
  int __pyx_1;
  PyObject *__pyx_2 = 0;
  float __pyx_3;
  Py_INCREF((PyObject *)__pyx_v_self);
  __pyx_1 = __pyx_v_self->cache_output;
  if (__pyx_1) {

    /* "/home/mmarshall/projects/rabbyt_7.6/rabbyt/rabbyt._anims.pyx":352 */
    __pyx_1 = (__pyx_f_6rabbyt_6_anims__get_time() != __pyx_v_self->cache_time);
    if (__pyx_1) {

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

      /* "/home/mmarshall/projects/rabbyt_7.6/rabbyt/rabbyt._anims.pyx":354 */
      __pyx_v_self->cache_time = __pyx_f_6rabbyt_6_anims__get_time();
      goto __pyx_L3;
    }
    __pyx_L3:;

    /* "/home/mmarshall/projects/rabbyt_7.6/rabbyt/rabbyt._anims.pyx":355 */
    __pyx_r = __pyx_v_self->cache;
    goto __pyx_L0;
    goto __pyx_L2;
  }
  /*else*/ {
    __pyx_2 = PyObject_CallObject(__pyx_v_self->function, 0); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 357; goto __pyx_L1;}
    __pyx_3 = PyFloat_AsDouble(__pyx_2); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 357; 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_r = 0;
  __pyx_L0:;
  Py_DECREF((PyObject *)__pyx_v_self);
  return __pyx_r;
}

static PyObject *__pyx_n_value;

static int __pyx_f_6rabbyt_6_anims_9AnimProxy___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_f_6rabbyt_6_anims_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_k6;
  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_7.6/rabbyt/rabbyt._anims.pyx":376 */
  __pyx_1 = PyInt_AsLong(__pyx_v_cache); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 376; goto __pyx_L1;}
  ((struct __pyx_obj_6rabbyt_6_anims_AnimProxy *)__pyx_v_self)->cache_output = __pyx_1;

  /* "/home/mmarshall/projects/rabbyt_7.6/rabbyt/rabbyt._anims.pyx":377 */
  if (PyObject_SetAttr(__pyx_v_self, __pyx_n_value, __pyx_v_value) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 377; 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_6_anims_9AnimProxy_5value___get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_f_6rabbyt_6_anims_9AnimProxy_5value___get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r;
  PyObject *__pyx_1 = 0;
  Py_INCREF((PyObject *)__pyx_v_self);
  __pyx_1 = PyFloat_FromDouble(((struct __pyx_vtabstruct_6rabbyt_6_anims_Anim *)((struct __pyx_obj_6rabbyt_6_anims_AnimProxy *)__pyx_v_self)->_value->__pyx_vtab)->g(((struct __pyx_obj_6rabbyt_6_anims_AnimProxy *)__pyx_v_self)->_value)); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 386; 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_6_anims_9AnimProxy_5value___set__(PyObject *__pyx_v_self, PyObject *__pyx_v_v); /*proto*/
static int __pyx_f_6rabbyt_6_anims_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_7.6/rabbyt/rabbyt._anims.pyx":388 */
  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_n_to_Anim); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 388; goto __pyx_L1;}
  __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 388; 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 = 388; 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_6_anims_Anim)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 388; goto __pyx_L1;}
  Py_DECREF(((PyObject *)((struct __pyx_obj_6rabbyt_6_anims_AnimProxy *)__pyx_v_self)->_value));
  ((struct __pyx_obj_6rabbyt_6_anims_AnimProxy *)__pyx_v_self)->_value = ((struct __pyx_obj_6rabbyt_6_anims_Anim *)__pyx_3);
  __pyx_3 = 0;

  /* "/home/mmarshall/projects/rabbyt_7.6/rabbyt/rabbyt._anims.pyx":389 */
  ((struct __pyx_obj_6rabbyt_6_anims_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_6_anims_9AnimProxy_g(struct __pyx_obj_6rabbyt_6_anims_AnimProxy *__pyx_v_self) {
  float __pyx_r;
  int __pyx_1;
  Py_INCREF((PyObject *)__pyx_v_self);

  /* "/home/mmarshall/projects/rabbyt_7.6/rabbyt/rabbyt._anims.pyx":392 */
  __pyx_1 = (!__pyx_v_self->cache_output);
  if (!__pyx_1) {
    __pyx_1 = (__pyx_f_6rabbyt_6_anims__get_time() != __pyx_v_self->cache_time);
  }
  if (__pyx_1) {

    /* "/home/mmarshall/projects/rabbyt_7.6/rabbyt/rabbyt._anims.pyx":393 */
    __pyx_v_self->cache = ((struct __pyx_vtabstruct_6rabbyt_6_anims_Anim *)__pyx_v_self->_value->__pyx_vtab)->g(__pyx_v_self->_value);

    /* "/home/mmarshall/projects/rabbyt_7.6/rabbyt/rabbyt._anims.pyx":394 */
    __pyx_v_self->cache_time = __pyx_f_6rabbyt_6_anims__get_time();
    goto __pyx_L2;
  }
  __pyx_L2:;

  /* "/home/mmarshall/projects/rabbyt_7.6/rabbyt/rabbyt._anims.pyx":395 */
  __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_6_anims_to_Anim(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6rabbyt_6_anims_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_6_anims_to_Anim(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_v = 0;
  struct __pyx_obj_6rabbyt_6_anims_Anim *__pyx_v_dv;
  PyObject *__pyx_r;
  int __pyx_1;
  PyObject *__pyx_2 = 0;
  PyObject *__pyx_3 = 0;
  PyObject *__pyx_4 = 0;
  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_6_anims_Anim *)Py_None); Py_INCREF(Py_None);

  /* "/home/mmarshall/projects/rabbyt_7.6/rabbyt/rabbyt._anims.pyx":410 */
  __pyx_1 = PyObject_IsInstance(__pyx_v_v,((PyObject*)__pyx_ptype_6rabbyt_6_anims_Anim)); if (__pyx_1 == -1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 410; goto __pyx_L1;}
  if (__pyx_1) {
    if (!__Pyx_TypeTest(__pyx_v_v, __pyx_ptype_6rabbyt_6_anims_Anim)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 411; goto __pyx_L1;}
    Py_INCREF(__pyx_v_v);
    Py_DECREF(((PyObject *)__pyx_v_dv));
    __pyx_v_dv = ((struct __pyx_obj_6rabbyt_6_anims_Anim *)__pyx_v_v);
    goto __pyx_L2;
  }
  __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_callable); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 412; goto __pyx_L1;}
  __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 412; goto __pyx_L1;}
  Py_INCREF(__pyx_v_v);
  PyTuple_SET_ITEM(__pyx_3, 0, __pyx_v_v);
  __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 412; goto __pyx_L1;}
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  Py_DECREF(__pyx_3); __pyx_3 = 0;
  __pyx_1 = PyObject_IsTrue(__pyx_4); if (__pyx_1 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 412; goto __pyx_L1;}
  Py_DECREF(__pyx_4); __pyx_4 = 0;
  if (__pyx_1) {
    __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 413; goto __pyx_L1;}
    Py_INCREF(__pyx_v_v);
    PyTuple_SET_ITEM(__pyx_2, 0, __pyx_v_v);
    __pyx_3 = PyObject_CallObject(((PyObject*)__pyx_ptype_6rabbyt_6_anims_AnimPyFunc), __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 413; goto __pyx_L1;}
    Py_DECREF(__pyx_2); __pyx_2 = 0;
    if (!__Pyx_TypeTest(__pyx_3, __pyx_ptype_6rabbyt_6_anims_Anim)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 413; goto __pyx_L1;}
    Py_DECREF(((PyObject *)__pyx_v_dv));
    __pyx_v_dv = ((struct __pyx_obj_6rabbyt_6_anims_Anim *)__pyx_3);
    __pyx_3 = 0;
    goto __pyx_L2;
  }
  /*else*/ {
    __pyx_4 = PyTuple_New(1); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 415; goto __pyx_L1;}
    Py_INCREF(__pyx_v_v);
    PyTuple_SET_ITEM(__pyx_4, 0, __pyx_v_v);
    __pyx_2 = PyObject_CallObject(((PyObject*)__pyx_ptype_6rabbyt_6_anims_AnimConst), __pyx_4); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 415; goto __pyx_L1;}
    Py_DECREF(__pyx_4); __pyx_4 = 0;
    if (!__Pyx_TypeTest(__pyx_2, __pyx_ptype_6rabbyt_6_anims_Anim)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 415; goto __pyx_L1;}
    Py_DECREF(((PyObject *)__pyx_v_dv));
    __pyx_v_dv = ((struct __pyx_obj_6rabbyt_6_anims_Anim *)__pyx_2);
    __pyx_2 = 0;
  }
  __pyx_L2:;

  /* "/home/mmarshall/projects/rabbyt_7.6/rabbyt/rabbyt._anims.pyx":416 */
  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_2);
  Py_XDECREF(__pyx_3);
  Py_XDECREF(__pyx_4);
  __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_callable, "callable"},
  {&__pyx_n_float, "float"},
  {&__pyx_n_int, "int"},
  {&__pyx_n_long, "long"},
  {&__pyx_n_to_Anim, "to_Anim"},
  {&__pyx_n_value, "value"},
  {0, 0}
};

static __Pyx_StringTabEntry __pyx_string_tab[] = {
  {&__pyx_k2p, __pyx_k2, sizeof(__pyx_k2)},
  {&__pyx_k3p, __pyx_k3, sizeof(__pyx_k3)},
  {0, 0, 0}
};
static struct __pyx_vtabstruct_6rabbyt_6_anims_Anim __pyx_vtable_6rabbyt_6_anims_Anim;

static PyObject *__pyx_tp_new_6rabbyt_6_anims_Anim(PyTypeObject *t, PyObject *a, PyObject *k) {
  struct __pyx_obj_6rabbyt_6_anims_Anim *p;
  PyObject *o = (*t->tp_alloc)(t, 0);
  if (!o) return 0;
  p = ((struct __pyx_obj_6rabbyt_6_anims_Anim *)o);
  *(struct __pyx_vtabstruct_6rabbyt_6_anims_Anim **)&p->__pyx_vtab = __pyx_vtabptr_6rabbyt_6_anims_Anim;
  return o;
}

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

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

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

static struct PyMethodDef __pyx_methods_6rabbyt_6_anims_Anim[] = {
  {"get", (PyCFunction)__pyx_f_6rabbyt_6_anims_4Anim_get, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6rabbyt_6_anims_4Anim_get},
  {0, 0, 0, 0}
};

static PyNumberMethods __pyx_tp_as_number_Anim = {
  __pyx_f_6rabbyt_6_anims_4Anim___add__, /*nb_add*/
  __pyx_f_6rabbyt_6_anims_4Anim___sub__, /*nb_subtract*/
  __pyx_f_6rabbyt_6_anims_4Anim___mul__, /*nb_multiply*/
  __pyx_f_6rabbyt_6_anims_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*/
  #if Py_TPFLAGS_DEFAULT & Py_TPFLAGS_HAVE_INDEX
  0, /*nb_index*/
  #endif
};

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_6_anims_Anim = {
  PyObject_HEAD_INIT(0)
  0, /*ob_size*/
  "rabbyt._anims.Anim", /*tp_name*/
  sizeof(struct __pyx_obj_6rabbyt_6_anims_Anim), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6rabbyt_6_anims_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 operations on an anim will result in a new anim that\n    will allways be up to date.\n    ", /*tp_doc*/
  __pyx_tp_traverse_6rabbyt_6_anims_Anim, /*tp_traverse*/
  __pyx_tp_clear_6rabbyt_6_anims_Anim, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_6rabbyt_6_anims_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_6_anims_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_6_anims_AnimConst __pyx_vtable_6rabbyt_6_anims_AnimConst;

static PyObject *__pyx_tp_new_6rabbyt_6_anims_AnimConst(PyTypeObject *t, PyObject *a, PyObject *k) {
  struct __pyx_obj_6rabbyt_6_anims_AnimConst *p;
  PyObject *o = __pyx_ptype_6rabbyt_6_anims_Anim->tp_new(t, a, k);
  if (!o) return 0;
  p = ((struct __pyx_obj_6rabbyt_6_anims_AnimConst *)o);
  *(struct __pyx_vtabstruct_6rabbyt_6_anims_AnimConst **)&p->__pyx_base.__pyx_vtab = __pyx_vtabptr_6rabbyt_6_anims_AnimConst;
  return o;
}

static void __pyx_tp_dealloc_6rabbyt_6_anims_AnimConst(PyObject *o) {
  __pyx_ptype_6rabbyt_6_anims_Anim->tp_dealloc(o);
}

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

static int __pyx_tp_clear_6rabbyt_6_anims_AnimConst(PyObject *o) {
  __pyx_ptype_6rabbyt_6_anims_Anim->tp_clear(o);
  return 0;
}

static struct PyMethodDef __pyx_methods_6rabbyt_6_anims_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*/
  #if Py_TPFLAGS_DEFAULT & Py_TPFLAGS_HAVE_INDEX
  0, /*nb_index*/
  #endif
};

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_6_anims_AnimConst = {
  PyObject_HEAD_INIT(0)
  0, /*ob_size*/
  "rabbyt._anims.AnimConst", /*tp_name*/
  sizeof(struct __pyx_obj_6rabbyt_6_anims_AnimConst), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6rabbyt_6_anims_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_6_anims_AnimConst, /*tp_traverse*/
  __pyx_tp_clear_6rabbyt_6_anims_AnimConst, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_6rabbyt_6_anims_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_6_anims_9AnimConst___init__, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6rabbyt_6_anims_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_6_anims_AnimLerp __pyx_vtable_6rabbyt_6_anims_AnimLerp;

static PyObject *__pyx_tp_new_6rabbyt_6_anims_AnimLerp(PyTypeObject *t, PyObject *a, PyObject *k) {
  struct __pyx_obj_6rabbyt_6_anims_AnimLerp *p;
  PyObject *o = __pyx_ptype_6rabbyt_6_anims_Anim->tp_new(t, a, k);
  if (!o) return 0;
  p = ((struct __pyx_obj_6rabbyt_6_anims_AnimLerp *)o);
  *(struct __pyx_vtabstruct_6rabbyt_6_anims_AnimLerp **)&p->__pyx_base.__pyx_vtab = __pyx_vtabptr_6rabbyt_6_anims_AnimLerp;
  return o;
}

static void __pyx_tp_dealloc_6rabbyt_6_anims_AnimLerp(PyObject *o) {
  __pyx_ptype_6rabbyt_6_anims_Anim->tp_dealloc(o);
}

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

static int __pyx_tp_clear_6rabbyt_6_anims_AnimLerp(PyObject *o) {
  __pyx_ptype_6rabbyt_6_anims_Anim->tp_clear(o);
  return 0;
}

static struct PyMethodDef __pyx_methods_6rabbyt_6_anims_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*/
  #if Py_TPFLAGS_DEFAULT & Py_TPFLAGS_HAVE_INDEX
  0, /*nb_index*/
  #endif
};

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_6_anims_AnimLerp = {
  PyObject_HEAD_INIT(0)
  0, /*ob_size*/
  "rabbyt._anims.AnimLerp", /*tp_name*/
  sizeof(struct __pyx_obj_6rabbyt_6_anims_AnimLerp), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6rabbyt_6_anims_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_6_anims_AnimLerp, /*tp_traverse*/
  __pyx_tp_clear_6rabbyt_6_anims_AnimLerp, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_6rabbyt_6_anims_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_6_anims_8AnimLerp___init__, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6rabbyt_6_anims_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_6_anims_AnimCosine __pyx_vtable_6rabbyt_6_anims_AnimCosine;

static PyObject *__pyx_tp_new_6rabbyt_6_anims_AnimCosine(PyTypeObject *t, PyObject *a, PyObject *k) {
  struct __pyx_obj_6rabbyt_6_anims_AnimCosine *p;
  PyObject *o = __pyx_ptype_6rabbyt_6_anims_AnimLerp->tp_new(t, a, k);
  if (!o) return 0;
  p = ((struct __pyx_obj_6rabbyt_6_anims_AnimCosine *)o);
  *(struct __pyx_vtabstruct_6rabbyt_6_anims_AnimCosine **)&p->__pyx_base.__pyx_base.__pyx_vtab = __pyx_vtabptr_6rabbyt_6_anims_AnimCosine;
  return o;
}

static void __pyx_tp_dealloc_6rabbyt_6_anims_AnimCosine(PyObject *o) {
  __pyx_ptype_6rabbyt_6_anims_AnimLerp->tp_dealloc(o);
}

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

static int __pyx_tp_clear_6rabbyt_6_anims_AnimCosine(PyObject *o) {
  __pyx_ptype_6rabbyt_6_anims_AnimLerp->tp_clear(o);
  return 0;
}

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

static PyNumberMethods __pyx_tp_as_number_AnimCosine = {
  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*/
  #if Py_TPFLAGS_DEFAULT & Py_TPFLAGS_HAVE_INDEX
  0, /*nb_index*/
  #endif
};

static PySequenceMethods __pyx_tp_as_sequence_AnimCosine = {
  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_AnimCosine = {
  0, /*mp_length*/
  0, /*mp_subscript*/
  0, /*mp_ass_subscript*/
};

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

PyTypeObject __pyx_type_6rabbyt_6_anims_AnimCosine = {
  PyObject_HEAD_INIT(0)
  0, /*ob_size*/
  "rabbyt._anims.AnimCosine", /*tp_name*/
  sizeof(struct __pyx_obj_6rabbyt_6_anims_AnimCosine), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6rabbyt_6_anims_AnimCosine, /*tp_dealloc*/
  0, /*tp_print*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  0, /*tp_compare*/
  0, /*tp_repr*/
  &__pyx_tp_as_number_AnimCosine, /*tp_as_number*/
  &__pyx_tp_as_sequence_AnimCosine, /*tp_as_sequence*/
  &__pyx_tp_as_mapping_AnimCosine, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  &__pyx_tp_as_buffer_AnimCosine, /*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_6_anims_AnimCosine, /*tp_traverse*/
  __pyx_tp_clear_6rabbyt_6_anims_AnimCosine, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_6rabbyt_6_anims_AnimCosine, /*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_6_anims_AnimCosine, /*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_6_anims_AnimSine __pyx_vtable_6rabbyt_6_anims_AnimSine;

static PyObject *__pyx_tp_new_6rabbyt_6_anims_AnimSine(PyTypeObject *t, PyObject *a, PyObject *k) {
  struct __pyx_obj_6rabbyt_6_anims_AnimSine *p;
  PyObject *o = __pyx_ptype_6rabbyt_6_anims_AnimLerp->tp_new(t, a, k);
  if (!o) return 0;
  p = ((struct __pyx_obj_6rabbyt_6_anims_AnimSine *)o);
  *(struct __pyx_vtabstruct_6rabbyt_6_anims_AnimSine **)&p->__pyx_base.__pyx_base.__pyx_vtab = __pyx_vtabptr_6rabbyt_6_anims_AnimSine;
  return o;
}

static void __pyx_tp_dealloc_6rabbyt_6_anims_AnimSine(PyObject *o) {
  __pyx_ptype_6rabbyt_6_anims_AnimLerp->tp_dealloc(o);
}

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

static int __pyx_tp_clear_6rabbyt_6_anims_AnimSine(PyObject *o) {
  __pyx_ptype_6rabbyt_6_anims_AnimLerp->tp_clear(o);
  return 0;
}

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

static PyNumberMethods __pyx_tp_as_number_AnimSine = {
  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*/
  #if Py_TPFLAGS_DEFAULT & Py_TPFLAGS_HAVE_INDEX
  0, /*nb_index*/
  #endif
};

static PySequenceMethods __pyx_tp_as_sequence_AnimSine = {
  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_AnimSine = {
  0, /*mp_length*/
  0, /*mp_subscript*/
  0, /*mp_ass_subscript*/
};

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

PyTypeObject __pyx_type_6rabbyt_6_anims_AnimSine = {
  PyObject_HEAD_INIT(0)
  0, /*ob_size*/
  "rabbyt._anims.AnimSine", /*tp_name*/
  sizeof(struct __pyx_obj_6rabbyt_6_anims_AnimSine), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6rabbyt_6_anims_AnimSine, /*tp_dealloc*/
  0, /*tp_print*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  0, /*tp_compare*/
  0, /*tp_repr*/
  &__pyx_tp_as_number_AnimSine, /*tp_as_number*/
  &__pyx_tp_as_sequence_AnimSine, /*tp_as_sequence*/
  &__pyx_tp_as_mapping_AnimSine, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  &__pyx_tp_as_buffer_AnimSine, /*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_6_anims_AnimSine, /*tp_traverse*/
  __pyx_tp_clear_6rabbyt_6_anims_AnimSine, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_6rabbyt_6_anims_AnimSine, /*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_6_anims_AnimSine, /*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_6_anims_AnimExponential __pyx_vtable_6rabbyt_6_anims_AnimExponential;

static PyObject *__pyx_tp_new_6rabbyt_6_anims_AnimExponential(PyTypeObject *t, PyObject *a, PyObject *k) {
  struct __pyx_obj_6rabbyt_6_anims_AnimExponential *p;
  PyObject *o = __pyx_ptype_6rabbyt_6_anims_AnimLerp->tp_new(t, a, k);
  if (!o) return 0;
  p = ((struct __pyx_obj_6rabbyt_6_anims_AnimExponential *)o);
  *(struct __pyx_vtabstruct_6rabbyt_6_anims_AnimExponential **)&p->__pyx_base.__pyx_base.__pyx_vtab = __pyx_vtabptr_6rabbyt_6_anims_AnimExponential;
  return o;
}

static void __pyx_tp_dealloc_6rabbyt_6_anims_AnimExponential(PyObject *o) {
  __pyx_ptype_6rabbyt_6_anims_AnimLerp->tp_dealloc(o);
}

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

static int __pyx_tp_clear_6rabbyt_6_anims_AnimExponential(PyObject *o) {
  __pyx_ptype_6rabbyt_6_anims_AnimLerp->tp_clear(o);
  return 0;
}

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

static PyNumberMethods __pyx_tp_as_number_AnimExponential = {
  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*/
  #if Py_TPFLAGS_DEFAULT & Py_TPFLAGS_HAVE_INDEX
  0, /*nb_index*/
  #endif
};

static PySequenceMethods __pyx_tp_as_sequence_AnimExponential = {
  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_AnimExponential = {
  0, /*mp_length*/
  0, /*mp_subscript*/
  0, /*mp_ass_subscript*/
};

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

PyTypeObject __pyx_type_6rabbyt_6_anims_AnimExponential = {
  PyObject_HEAD_INIT(0)
  0, /*ob_size*/
  "rabbyt._anims.AnimExponential", /*tp_name*/
  sizeof(struct __pyx_obj_6rabbyt_6_anims_AnimExponential), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6rabbyt_6_anims_AnimExponential, /*tp_dealloc*/
  0, /*tp_print*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  0, /*tp_compare*/
  0, /*tp_repr*/
  &__pyx_tp_as_number_AnimExponential, /*tp_as_number*/
  &__pyx_tp_as_sequence_AnimExponential, /*tp_as_sequence*/
  &__pyx_tp_as_mapping_AnimExponential, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  &__pyx_tp_as_buffer_AnimExponential, /*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_6_anims_AnimExponential, /*tp_traverse*/
  __pyx_tp_clear_6rabbyt_6_anims_AnimExponential, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_6rabbyt_6_anims_AnimExponential, /*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_6_anims_AnimExponential, /*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_6_anims_AnimStaticCubicBezier __pyx_vtable_6rabbyt_6_anims_AnimStaticCubicBezier;

static PyObject *__pyx_tp_new_6rabbyt_6_anims_AnimStaticCubicBezier(PyTypeObject *t, PyObject *a, PyObject *k) {
  struct __pyx_obj_6rabbyt_6_anims_AnimStaticCubicBezier *p;
  PyObject *o = __pyx_ptype_6rabbyt_6_anims_Anim->tp_new(t, a, k);
  if (!o) return 0;
  p = ((struct __pyx_obj_6rabbyt_6_anims_AnimStaticCubicBezier *)o);
  *(struct __pyx_vtabstruct_6rabbyt_6_anims_AnimStaticCubicBezier **)&p->__pyx_base.__pyx_vtab = __pyx_vtabptr_6rabbyt_6_anims_AnimStaticCubicBezier;
  return o;
}

static void __pyx_tp_dealloc_6rabbyt_6_anims_AnimStaticCubicBezier(PyObject *o) {
  __pyx_ptype_6rabbyt_6_anims_Anim->tp_dealloc(o);
}

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

static int __pyx_tp_clear_6rabbyt_6_anims_AnimStaticCubicBezier(PyObject *o) {
  __pyx_ptype_6rabbyt_6_anims_Anim->tp_clear(o);
  return 0;
}

static struct PyMethodDef __pyx_methods_6rabbyt_6_anims_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*/
  #if Py_TPFLAGS_DEFAULT & Py_TPFLAGS_HAVE_INDEX
  0, /*nb_index*/
  #endif
};

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_6_anims_AnimStaticCubicBezier = {
  PyObject_HEAD_INIT(0)
  0, /*ob_size*/
  "rabbyt._anims.AnimStaticCubicBezier", /*tp_name*/
  sizeof(struct __pyx_obj_6rabbyt_6_anims_AnimStaticCubicBezier), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6rabbyt_6_anims_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_6_anims_AnimStaticCubicBezier, /*tp_traverse*/
  __pyx_tp_clear_6rabbyt_6_anims_AnimStaticCubicBezier, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_6rabbyt_6_anims_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_6_anims_21AnimStaticCubicBezier___init__, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6rabbyt_6_anims_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_6_anims_AnimWrap __pyx_vtable_6rabbyt_6_anims_AnimWrap;

static PyObject *__pyx_tp_new_6rabbyt_6_anims_AnimWrap(PyTypeObject *t, PyObject *a, PyObject *k) {
  struct __pyx_obj_6rabbyt_6_anims_AnimWrap *p;
  PyObject *o = __pyx_ptype_6rabbyt_6_anims_Anim->tp_new(t, a, k);
  if (!o) return 0;
  p = ((struct __pyx_obj_6rabbyt_6_anims_AnimWrap *)o);
  *(struct __pyx_vtabstruct_6rabbyt_6_anims_AnimWrap **)&p->__pyx_base.__pyx_vtab = __pyx_vtabptr_6rabbyt_6_anims_AnimWrap;
  p->parent = ((struct __pyx_obj_6rabbyt_6_anims_Anim *)Py_None); Py_INCREF(Py_None);
  p->bounds = Py_None; Py_INCREF(Py_None);
  return o;
}

static void __pyx_tp_dealloc_6rabbyt_6_anims_AnimWrap(PyObject *o) {
  struct __pyx_obj_6rabbyt_6_anims_AnimWrap *p = (struct __pyx_obj_6rabbyt_6_anims_AnimWrap *)o;
  Py_XDECREF(((PyObject *)p->parent));
  Py_XDECREF(p->bounds);
  __pyx_ptype_6rabbyt_6_anims_Anim->tp_dealloc(o);
}

static int __pyx_tp_traverse_6rabbyt_6_anims_AnimWrap(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_6rabbyt_6_anims_AnimWrap *p = (struct __pyx_obj_6rabbyt_6_anims_AnimWrap *)o;
  e = __pyx_ptype_6rabbyt_6_anims_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_6_anims_AnimWrap(PyObject *o) {
  struct __pyx_obj_6rabbyt_6_anims_AnimWrap *p = (struct __pyx_obj_6rabbyt_6_anims_AnimWrap *)o;
  __pyx_ptype_6rabbyt_6_anims_Anim->tp_clear(o);
  Py_XDECREF(((PyObject *)p->parent));
  p->parent = ((struct __pyx_obj_6rabbyt_6_anims_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_6_anims_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*/
  #if Py_TPFLAGS_DEFAULT & Py_TPFLAGS_HAVE_INDEX
  0, /*nb_index*/
  #endif
};

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_6_anims_AnimWrap = {
  PyObject_HEAD_INIT(0)
  0, /*ob_size*/
  "rabbyt._anims.AnimWrap", /*tp_name*/
  sizeof(struct __pyx_obj_6rabbyt_6_anims_AnimWrap), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6rabbyt_6_anims_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_6_anims_AnimWrap, /*tp_traverse*/
  __pyx_tp_clear_6rabbyt_6_anims_AnimWrap, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_6rabbyt_6_anims_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_6_anims_8AnimWrap___init__, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6rabbyt_6_anims_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_6_anims_AnimAddStatic __pyx_vtable_6rabbyt_6_anims_AnimAddStatic;

static PyObject *__pyx_tp_new_6rabbyt_6_anims_AnimAddStatic(PyTypeObject *t, PyObject *a, PyObject *k) {
  struct __pyx_obj_6rabbyt_6_anims_AnimAddStatic *p;
  PyObject *o = __pyx_ptype_6rabbyt_6_anims_Anim->tp_new(t, a, k);
  if (!o) return 0;
  p = ((struct __pyx_obj_6rabbyt_6_anims_AnimAddStatic *)o);
  *(struct __pyx_vtabstruct_6rabbyt_6_anims_AnimAddStatic **)&p->__pyx_base.__pyx_vtab = __pyx_vtabptr_6rabbyt_6_anims_AnimAddStatic;
  p->a = ((struct __pyx_obj_6rabbyt_6_anims_Anim *)Py_None); Py_INCREF(Py_None);
  return o;
}

static void __pyx_tp_dealloc_6rabbyt_6_anims_AnimAddStatic(PyObject *o) {
  struct __pyx_obj_6rabbyt_6_anims_AnimAddStatic *p = (struct __pyx_obj_6rabbyt_6_anims_AnimAddStatic *)o;
  Py_XDECREF(((PyObject *)p->a));
  __pyx_ptype_6rabbyt_6_anims_Anim->tp_dealloc(o);
}

static int __pyx_tp_traverse_6rabbyt_6_anims_AnimAddStatic(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_6rabbyt_6_anims_AnimAddStatic *p = (struct __pyx_obj_6rabbyt_6_anims_AnimAddStatic *)o;
  e = __pyx_ptype_6rabbyt_6_anims_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_6_anims_AnimAddStatic(PyObject *o) {
  struct __pyx_obj_6rabbyt_6_anims_AnimAddStatic *p = (struct __pyx_obj_6rabbyt_6_anims_AnimAddStatic *)o;
  __pyx_ptype_6rabbyt_6_anims_Anim->tp_clear(o);
  Py_XDECREF(((PyObject *)p->a));
  p->a = ((struct __pyx_obj_6rabbyt_6_anims_Anim *)Py_None); Py_INCREF(Py_None);
  return 0;
}

static struct PyMethodDef __pyx_methods_6rabbyt_6_anims_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*/
  #if Py_TPFLAGS_DEFAULT & Py_TPFLAGS_HAVE_INDEX
  0, /*nb_index*/
  #endif
};

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_6_anims_AnimAddStatic = {
  PyObject_HEAD_INIT(0)
  0, /*ob_size*/
  "rabbyt._anims.AnimAddStatic", /*tp_name*/
  sizeof(struct __pyx_obj_6rabbyt_6_anims_AnimAddStatic), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6rabbyt_6_anims_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_6_anims_AnimAddStatic, /*tp_traverse*/
  __pyx_tp_clear_6rabbyt_6_anims_AnimAddStatic, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_6rabbyt_6_anims_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_6_anims_13AnimAddStatic___init__, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6rabbyt_6_anims_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_6_anims__AnimArithmatic __pyx_vtable_6rabbyt_6_anims__AnimArithmatic;

static PyObject *__pyx_tp_new_6rabbyt_6_anims__AnimArithmatic(PyTypeObject *t, PyObject *a, PyObject *k) {
  struct __pyx_obj_6rabbyt_6_anims__AnimArithmatic *p;
  PyObject *o = __pyx_ptype_6rabbyt_6_anims_Anim->tp_new(t, a, k);
  if (!o) return 0;
  p = ((struct __pyx_obj_6rabbyt_6_anims__AnimArithmatic *)o);
  *(struct __pyx_vtabstruct_6rabbyt_6_anims__AnimArithmatic **)&p->__pyx_base.__pyx_vtab = __pyx_vtabptr_6rabbyt_6_anims__AnimArithmatic;
  p->a1 = ((struct __pyx_obj_6rabbyt_6_anims_Anim *)Py_None); Py_INCREF(Py_None);
  p->a2 = ((struct __pyx_obj_6rabbyt_6_anims_Anim *)Py_None); Py_INCREF(Py_None);
  return o;
}

static void __pyx_tp_dealloc_6rabbyt_6_anims__AnimArithmatic(PyObject *o) {
  struct __pyx_obj_6rabbyt_6_anims__AnimArithmatic *p = (struct __pyx_obj_6rabbyt_6_anims__AnimArithmatic *)o;
  Py_XDECREF(((PyObject *)p->a1));
  Py_XDECREF(((PyObject *)p->a2));
  __pyx_ptype_6rabbyt_6_anims_Anim->tp_dealloc(o);
}

static int __pyx_tp_traverse_6rabbyt_6_anims__AnimArithmatic(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_6rabbyt_6_anims__AnimArithmatic *p = (struct __pyx_obj_6rabbyt_6_anims__AnimArithmatic *)o;
  e = __pyx_ptype_6rabbyt_6_anims_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_6_anims__AnimArithmatic(PyObject *o) {
  struct __pyx_obj_6rabbyt_6_anims__AnimArithmatic *p = (struct __pyx_obj_6rabbyt_6_anims__AnimArithmatic *)o;
  __pyx_ptype_6rabbyt_6_anims_Anim->tp_clear(o);
  Py_XDECREF(((PyObject *)p->a1));
  p->a1 = ((struct __pyx_obj_6rabbyt_6_anims_Anim *)Py_None); Py_INCREF(Py_None);
  Py_XDECREF(((PyObject *)p->a2));
  p->a2 = ((struct __pyx_obj_6rabbyt_6_anims_Anim *)Py_None); Py_INCREF(Py_None);
  return 0;
}

static struct PyMethodDef __pyx_methods_6rabbyt_6_anims__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*/
  #if Py_TPFLAGS_DEFAULT & Py_TPFLAGS_HAVE_INDEX
  0, /*nb_index*/
  #endif
};

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_6_anims__AnimArithmatic = {
  PyObject_HEAD_INIT(0)
  0, /*ob_size*/
  "rabbyt._anims._AnimArithmatic", /*tp_name*/
  sizeof(struct __pyx_obj_6rabbyt_6_anims__AnimArithmatic), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6rabbyt_6_anims__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_6_anims__AnimArithmatic, /*tp_traverse*/
  __pyx_tp_clear_6rabbyt_6_anims__AnimArithmatic, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_6rabbyt_6_anims__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_6_anims_15_AnimArithmatic___init__, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6rabbyt_6_anims__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_6_anims_AnimAdd __pyx_vtable_6rabbyt_6_anims_AnimAdd;

static PyObject *__pyx_tp_new_6rabbyt_6_anims_AnimAdd(PyTypeObject *t, PyObject *a, PyObject *k) {
  struct __pyx_obj_6rabbyt_6_anims_AnimAdd *p;
  PyObject *o = __pyx_ptype_6rabbyt_6_anims__AnimArithmatic->tp_new(t, a, k);
  if (!o) return 0;
  p = ((struct __pyx_obj_6rabbyt_6_anims_AnimAdd *)o);
  *(struct __pyx_vtabstruct_6rabbyt_6_anims_AnimAdd **)&p->__pyx_base.__pyx_base.__pyx_vtab = __pyx_vtabptr_6rabbyt_6_anims_AnimAdd;
  return o;
}

static void __pyx_tp_dealloc_6rabbyt_6_anims_AnimAdd(PyObject *o) {
  __pyx_ptype_6rabbyt_6_anims__AnimArithmatic->tp_dealloc(o);
}

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

static int __pyx_tp_clear_6rabbyt_6_anims_AnimAdd(PyObject *o) {
  __pyx_ptype_6rabbyt_6_anims__AnimArithmatic->tp_clear(o);
  return 0;
}

static struct PyMethodDef __pyx_methods_6rabbyt_6_anims_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*/
  #if Py_TPFLAGS_DEFAULT & Py_TPFLAGS_HAVE_INDEX
  0, /*nb_index*/
  #endif
};

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_6_anims_AnimAdd = {
  PyObject_HEAD_INIT(0)
  0, /*ob_size*/
  "rabbyt._anims.AnimAdd", /*tp_name*/
  sizeof(struct __pyx_obj_6rabbyt_6_anims_AnimAdd), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6rabbyt_6_anims_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_6_anims_AnimAdd, /*tp_traverse*/
  __pyx_tp_clear_6rabbyt_6_anims_AnimAdd, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_6rabbyt_6_anims_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_6_anims_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_6_anims_AnimSub __pyx_vtable_6rabbyt_6_anims_AnimSub;

static PyObject *__pyx_tp_new_6rabbyt_6_anims_AnimSub(PyTypeObject *t, PyObject *a, PyObject *k) {
  struct __pyx_obj_6rabbyt_6_anims_AnimSub *p;
  PyObject *o = __pyx_ptype_6rabbyt_6_anims__AnimArithmatic->tp_new(t, a, k);
  if (!o) return 0;
  p = ((struct __pyx_obj_6rabbyt_6_anims_AnimSub *)o);
  *(struct __pyx_vtabstruct_6rabbyt_6_anims_AnimSub **)&p->__pyx_base.__pyx_base.__pyx_vtab = __pyx_vtabptr_6rabbyt_6_anims_AnimSub;
  return o;
}

static void __pyx_tp_dealloc_6rabbyt_6_anims_AnimSub(PyObject *o) {
  __pyx_ptype_6rabbyt_6_anims__AnimArithmatic->tp_dealloc(o);
}

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

static int __pyx_tp_clear_6rabbyt_6_anims_AnimSub(PyObject *o) {
  __pyx_ptype_6rabbyt_6_anims__AnimArithmatic->tp_clear(o);
  return 0;
}

static struct PyMethodDef __pyx_methods_6rabbyt_6_anims_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*/
  #if Py_TPFLAGS_DEFAULT & Py_TPFLAGS_HAVE_INDEX
  0, /*nb_index*/
  #endif
};

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_6_anims_AnimSub = {
  PyObject_HEAD_INIT(0)
  0, /*ob_size*/
  "rabbyt._anims.AnimSub", /*tp_name*/
  sizeof(struct __pyx_obj_6rabbyt_6_anims_AnimSub), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6rabbyt_6_anims_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_6_anims_AnimSub, /*tp_traverse*/
  __pyx_tp_clear_6rabbyt_6_anims_AnimSub, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_6rabbyt_6_anims_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_6_anims_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_6_anims_AnimMul __pyx_vtable_6rabbyt_6_anims_AnimMul;

static PyObject *__pyx_tp_new_6rabbyt_6_anims_AnimMul(PyTypeObject *t, PyObject *a, PyObject *k) {
  struct __pyx_obj_6rabbyt_6_anims_AnimMul *p;
  PyObject *o = __pyx_ptype_6rabbyt_6_anims__AnimArithmatic->tp_new(t, a, k);
  if (!o) return 0;
  p = ((struct __pyx_obj_6rabbyt_6_anims_AnimMul *)o);
  *(struct __pyx_vtabstruct_6rabbyt_6_anims_AnimMul **)&p->__pyx_base.__pyx_base.__pyx_vtab = __pyx_vtabptr_6rabbyt_6_anims_AnimMul;
  return o;
}

static void __pyx_tp_dealloc_6rabbyt_6_anims_AnimMul(PyObject *o) {
  __pyx_ptype_6rabbyt_6_anims__AnimArithmatic->tp_dealloc(o);
}

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

static int __pyx_tp_clear_6rabbyt_6_anims_AnimMul(PyObject *o) {
  __pyx_ptype_6rabbyt_6_anims__AnimArithmatic->tp_clear(o);
  return 0;
}

static struct PyMethodDef __pyx_methods_6rabbyt_6_anims_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*/
  #if Py_TPFLAGS_DEFAULT & Py_TPFLAGS_HAVE_INDEX
  0, /*nb_index*/
  #endif
};

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_6_anims_AnimMul = {
  PyObject_HEAD_INIT(0)
  0, /*ob_size*/
  "rabbyt._anims.AnimMul", /*tp_name*/
  sizeof(struct __pyx_obj_6rabbyt_6_anims_AnimMul), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6rabbyt_6_anims_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_6_anims_AnimMul, /*tp_traverse*/
  __pyx_tp_clear_6rabbyt_6_anims_AnimMul, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_6rabbyt_6_anims_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_6_anims_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_6_anims_AnimDiv __pyx_vtable_6rabbyt_6_anims_AnimDiv;

static PyObject *__pyx_tp_new_6rabbyt_6_anims_AnimDiv(PyTypeObject *t, PyObject *a, PyObject *k) {
  struct __pyx_obj_6rabbyt_6_anims_AnimDiv *p;
  PyObject *o = __pyx_ptype_6rabbyt_6_anims__AnimArithmatic->tp_new(t, a, k);
  if (!o) return 0;
  p = ((struct __pyx_obj_6rabbyt_6_anims_AnimDiv *)o);
  *(struct __pyx_vtabstruct_6rabbyt_6_anims_AnimDiv **)&p->__pyx_base.__pyx_base.__pyx_vtab = __pyx_vtabptr_6rabbyt_6_anims_AnimDiv;
  return o;
}

static void __pyx_tp_dealloc_6rabbyt_6_anims_AnimDiv(PyObject *o) {
  __pyx_ptype_6rabbyt_6_anims__AnimArithmatic->tp_dealloc(o);
}

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

static int __pyx_tp_clear_6rabbyt_6_anims_AnimDiv(PyObject *o) {
  __pyx_ptype_6rabbyt_6_anims__AnimArithmatic->tp_clear(o);
  return 0;
}

static struct PyMethodDef __pyx_methods_6rabbyt_6_anims_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*/
  #if Py_TPFLAGS_DEFAULT & Py_TPFLAGS_HAVE_INDEX
  0, /*nb_index*/
  #endif
};

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_6_anims_AnimDiv = {
  PyObject_HEAD_INIT(0)
  0, /*ob_size*/
  "rabbyt._anims.AnimDiv", /*tp_name*/
  sizeof(struct __pyx_obj_6rabbyt_6_anims_AnimDiv), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6rabbyt_6_anims_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_6_anims_AnimDiv, /*tp_traverse*/
  __pyx_tp_clear_6rabbyt_6_anims_AnimDiv, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_6rabbyt_6_anims_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_6_anims_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_6_anims_AnimPyFunc __pyx_vtable_6rabbyt_6_anims_AnimPyFunc;

static PyObject *__pyx_tp_new_6rabbyt_6_anims_AnimPyFunc(PyTypeObject *t, PyObject *a, PyObject *k) {
  struct __pyx_obj_6rabbyt_6_anims_AnimPyFunc *p;
  PyObject *o = __pyx_ptype_6rabbyt_6_anims_Anim->tp_new(t, a, k);
  if (!o) return 0;
  p = ((struct __pyx_obj_6rabbyt_6_anims_AnimPyFunc *)o);
  *(struct __pyx_vtabstruct_6rabbyt_6_anims_AnimPyFunc **)&p->__pyx_base.__pyx_vtab = __pyx_vtabptr_6rabbyt_6_anims_AnimPyFunc;
  p->function = Py_None; Py_INCREF(Py_None);
  return o;
}

static void __pyx_tp_dealloc_6rabbyt_6_anims_AnimPyFunc(PyObject *o) {
  struct __pyx_obj_6rabbyt_6_anims_AnimPyFunc *p = (struct __pyx_obj_6rabbyt_6_anims_AnimPyFunc *)o;
  Py_XDECREF(p->function);
  __pyx_ptype_6rabbyt_6_anims_Anim->tp_dealloc(o);
}

static int __pyx_tp_traverse_6rabbyt_6_anims_AnimPyFunc(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_6rabbyt_6_anims_AnimPyFunc *p = (struct __pyx_obj_6rabbyt_6_anims_AnimPyFunc *)o;
  e = __pyx_ptype_6rabbyt_6_anims_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_6_anims_AnimPyFunc(PyObject *o) {
  struct __pyx_obj_6rabbyt_6_anims_AnimPyFunc *p = (struct __pyx_obj_6rabbyt_6_anims_AnimPyFunc *)o;
  __pyx_ptype_6rabbyt_6_anims_Anim->tp_clear(o);
  Py_XDECREF(p->function);
  p->function = Py_None; Py_INCREF(Py_None);
  return 0;
}

static struct PyMethodDef __pyx_methods_6rabbyt_6_anims_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*/
  #if Py_TPFLAGS_DEFAULT & Py_TPFLAGS_HAVE_INDEX
  0, /*nb_index*/
  #endif
};

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_6_anims_AnimPyFunc = {
  PyObject_HEAD_INIT(0)
  0, /*ob_size*/
  "rabbyt._anims.AnimPyFunc", /*tp_name*/
  sizeof(struct __pyx_obj_6rabbyt_6_anims_AnimPyFunc), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6rabbyt_6_anims_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_6_anims_AnimPyFunc, /*tp_traverse*/
  __pyx_tp_clear_6rabbyt_6_anims_AnimPyFunc, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_6rabbyt_6_anims_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_6_anims_10AnimPyFunc___init__, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6rabbyt_6_anims_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_6_anims_AnimProxy __pyx_vtable_6rabbyt_6_anims_AnimProxy;

static PyObject *__pyx_tp_new_6rabbyt_6_anims_AnimProxy(PyTypeObject *t, PyObject *a, PyObject *k) {
  struct __pyx_obj_6rabbyt_6_anims_AnimProxy *p;
  PyObject *o = __pyx_ptype_6rabbyt_6_anims_Anim->tp_new(t, a, k);
  if (!o) return 0;
  p = ((struct __pyx_obj_6rabbyt_6_anims_AnimProxy *)o);
  *(struct __pyx_vtabstruct_6rabbyt_6_anims_AnimProxy **)&p->__pyx_base.__pyx_vtab = __pyx_vtabptr_6rabbyt_6_anims_AnimProxy;
  p->_value = ((struct __pyx_obj_6rabbyt_6_anims_Anim *)Py_None); Py_INCREF(Py_None);
  return o;
}

static void __pyx_tp_dealloc_6rabbyt_6_anims_AnimProxy(PyObject *o) {
  struct __pyx_obj_6rabbyt_6_anims_AnimProxy *p = (struct __pyx_obj_6rabbyt_6_anims_AnimProxy *)o;
  Py_XDECREF(((PyObject *)p->_value));
  __pyx_ptype_6rabbyt_6_anims_Anim->tp_dealloc(o);
}

static int __pyx_tp_traverse_6rabbyt_6_anims_AnimProxy(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_6rabbyt_6_anims_AnimProxy *p = (struct __pyx_obj_6rabbyt_6_anims_AnimProxy *)o;
  e = __pyx_ptype_6rabbyt_6_anims_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_6_anims_AnimProxy(PyObject *o) {
  struct __pyx_obj_6rabbyt_6_anims_AnimProxy *p = (struct __pyx_obj_6rabbyt_6_anims_AnimProxy *)o;
  __pyx_ptype_6rabbyt_6_anims_Anim->tp_clear(o);
  Py_XDECREF(((PyObject *)p->_value));
  p->_value = ((struct __pyx_obj_6rabbyt_6_anims_Anim *)Py_None); Py_INCREF(Py_None);
  return 0;
}

static PyObject *__pyx_getprop_6rabbyt_6_anims_9AnimProxy_value(PyObject *o, void *x) {
  return __pyx_f_6rabbyt_6_anims_9AnimProxy_5value___get__(o);
}

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

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

static struct PyGetSetDef __pyx_getsets_6rabbyt_6_anims_AnimProxy[] = {
  {"value", __pyx_getprop_6rabbyt_6_anims_9AnimProxy_value, __pyx_setprop_6rabbyt_6_anims_9AnimProxy_value, __pyx_k1, 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*/
  #if Py_TPFLAGS_DEFAULT & Py_TPFLAGS_HAVE_INDEX
  0, /*nb_index*/
  #endif
};

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_6_anims_AnimProxy = {
  PyObject_HEAD_INIT(0)
  0, /*ob_size*/
  "rabbyt._anims.AnimProxy", /*tp_name*/
  sizeof(struct __pyx_obj_6rabbyt_6_anims_AnimProxy), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6rabbyt_6_anims_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\n    ``value`` is the value that can be returned.  It can be a number, a\n    function, or another anim.\n\n    If ``cache`` is True, a cached value will be called when the anim is\n    accessed a second time without the global time changing.\n    ", /*tp_doc*/
  __pyx_tp_traverse_6rabbyt_6_anims_AnimProxy, /*tp_traverse*/
  __pyx_tp_clear_6rabbyt_6_anims_AnimProxy, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_6rabbyt_6_anims_AnimProxy, /*tp_methods*/
  0, /*tp_members*/
  __pyx_getsets_6rabbyt_6_anims_AnimProxy, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  __pyx_f_6rabbyt_6_anims_9AnimProxy___init__, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6rabbyt_6_anims_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_6_anims_set_time, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6rabbyt_6_anims_set_time},
  {"get_time", (PyCFunction)__pyx_f_6rabbyt_6_anims_get_time, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6rabbyt_6_anims_get_time},
  {"add_time", (PyCFunction)__pyx_f_6rabbyt_6_anims_add_time, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6rabbyt_6_anims_add_time},
  {"to_Anim", (PyCFunction)__pyx_f_6rabbyt_6_anims_to_Anim, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6rabbyt_6_anims_to_Anim},
  {0, 0, 0, 0}
};

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

PyMODINIT_FUNC init_anims(void); /*proto*/
PyMODINIT_FUNC init_anims(void) {
  PyObject *__pyx_1 = 0;
  PyObject *__pyx_2 = 0;
  PyObject *__pyx_3 = 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_6_anims_Anim = &__pyx_vtable_6rabbyt_6_anims_Anim;
  *(void(**)(void))&__pyx_vtable_6rabbyt_6_anims_Anim.g = (void(*)(void))__pyx_f_6rabbyt_6_anims_4Anim_g;
  if (PyType_Ready(&__pyx_type_6rabbyt_6_anims_Anim) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; goto __pyx_L1;}
  if (__Pyx_SetVtable(__pyx_type_6rabbyt_6_anims_Anim.tp_dict, __pyx_vtabptr_6rabbyt_6_anims_Anim) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; goto __pyx_L1;}
  if (PyObject_SetAttrString(__pyx_m, "Anim", (PyObject *)&__pyx_type_6rabbyt_6_anims_Anim) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; goto __pyx_L1;}
  __pyx_ptype_6rabbyt_6_anims_Anim = &__pyx_type_6rabbyt_6_anims_Anim;
  __pyx_vtabptr_6rabbyt_6_anims_AnimConst = &__pyx_vtable_6rabbyt_6_anims_AnimConst;
  __pyx_vtable_6rabbyt_6_anims_AnimConst.__pyx_base = *__pyx_vtabptr_6rabbyt_6_anims_Anim;
  *(void(**)(void))&__pyx_vtable_6rabbyt_6_anims_AnimConst.__pyx_base.g = (void(*)(void))__pyx_f_6rabbyt_6_anims_9AnimConst_g;
  __pyx_type_6rabbyt_6_anims_AnimConst.tp_base = __pyx_ptype_6rabbyt_6_anims_Anim;
  if (PyType_Ready(&__pyx_type_6rabbyt_6_anims_AnimConst) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 139; goto __pyx_L1;}
  if (__Pyx_SetVtable(__pyx_type_6rabbyt_6_anims_AnimConst.tp_dict, __pyx_vtabptr_6rabbyt_6_anims_AnimConst) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 139; goto __pyx_L1;}
  if (PyObject_SetAttrString(__pyx_m, "AnimConst", (PyObject *)&__pyx_type_6rabbyt_6_anims_AnimConst) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 139; goto __pyx_L1;}
  __pyx_ptype_6rabbyt_6_anims_AnimConst = &__pyx_type_6rabbyt_6_anims_AnimConst;
  __pyx_vtabptr_6rabbyt_6_anims_AnimLerp = &__pyx_vtable_6rabbyt_6_anims_AnimLerp;
  __pyx_vtable_6rabbyt_6_anims_AnimLerp.__pyx_base = *__pyx_vtabptr_6rabbyt_6_anims_Anim;
  *(void(**)(void))&__pyx_vtable_6rabbyt_6_anims_AnimLerp.__pyx_base.g = (void(*)(void))__pyx_f_6rabbyt_6_anims_8AnimLerp_g;
  *(void(**)(void))&__pyx_vtable_6rabbyt_6_anims_AnimLerp._interpolate = (void(*)(void))__pyx_f_6rabbyt_6_anims_8AnimLerp__interpolate;
  __pyx_type_6rabbyt_6_anims_AnimLerp.tp_base = __pyx_ptype_6rabbyt_6_anims_Anim;
  if (PyType_Ready(&__pyx_type_6rabbyt_6_anims_AnimLerp) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 176; goto __pyx_L1;}
  if (__Pyx_SetVtable(__pyx_type_6rabbyt_6_anims_AnimLerp.tp_dict, __pyx_vtabptr_6rabbyt_6_anims_AnimLerp) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 176; goto __pyx_L1;}
  if (PyObject_SetAttrString(__pyx_m, "AnimLerp", (PyObject *)&__pyx_type_6rabbyt_6_anims_AnimLerp) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 176; goto __pyx_L1;}
  __pyx_ptype_6rabbyt_6_anims_AnimLerp = &__pyx_type_6rabbyt_6_anims_AnimLerp;
  __pyx_vtabptr_6rabbyt_6_anims_AnimCosine = &__pyx_vtable_6rabbyt_6_anims_AnimCosine;
  __pyx_vtable_6rabbyt_6_anims_AnimCosine.__pyx_base = *__pyx_vtabptr_6rabbyt_6_anims_AnimLerp;
  *(void(**)(void))&__pyx_vtable_6rabbyt_6_anims_AnimCosine.__pyx_base._interpolate = (void(*)(void))__pyx_f_6rabbyt_6_anims_10AnimCosine__interpolate;
  __pyx_type_6rabbyt_6_anims_AnimCosine.tp_base = __pyx_ptype_6rabbyt_6_anims_AnimLerp;
  if (PyType_Ready(&__pyx_type_6rabbyt_6_anims_AnimCosine) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 202; goto __pyx_L1;}
  if (__Pyx_SetVtable(__pyx_type_6rabbyt_6_anims_AnimCosine.tp_dict, __pyx_vtabptr_6rabbyt_6_anims_AnimCosine) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 202; goto __pyx_L1;}
  if (PyObject_SetAttrString(__pyx_m, "AnimCosine", (PyObject *)&__pyx_type_6rabbyt_6_anims_AnimCosine) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 202; goto __pyx_L1;}
  __pyx_ptype_6rabbyt_6_anims_AnimCosine = &__pyx_type_6rabbyt_6_anims_AnimCosine;
  __pyx_vtabptr_6rabbyt_6_anims_AnimSine = &__pyx_vtable_6rabbyt_6_anims_AnimSine;
  __pyx_vtable_6rabbyt_6_anims_AnimSine.__pyx_base = *__pyx_vtabptr_6rabbyt_6_anims_AnimLerp;
  *(void(**)(void))&__pyx_vtable_6rabbyt_6_anims_AnimSine.__pyx_base._interpolate = (void(*)(void))__pyx_f_6rabbyt_6_anims_8AnimSine__interpolate;
  __pyx_type_6rabbyt_6_anims_AnimSine.tp_base = __pyx_ptype_6rabbyt_6_anims_AnimLerp;
  if (PyType_Ready(&__pyx_type_6rabbyt_6_anims_AnimSine) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 206; goto __pyx_L1;}
  if (__Pyx_SetVtable(__pyx_type_6rabbyt_6_anims_AnimSine.tp_dict, __pyx_vtabptr_6rabbyt_6_anims_AnimSine) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 206; goto __pyx_L1;}
  if (PyObject_SetAttrString(__pyx_m, "AnimSine", (PyObject *)&__pyx_type_6rabbyt_6_anims_AnimSine) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 206; goto __pyx_L1;}
  __pyx_ptype_6rabbyt_6_anims_AnimSine = &__pyx_type_6rabbyt_6_anims_AnimSine;
  __pyx_vtabptr_6rabbyt_6_anims_AnimExponential = &__pyx_vtable_6rabbyt_6_anims_AnimExponential;
  __pyx_vtable_6rabbyt_6_anims_AnimExponential.__pyx_base = *__pyx_vtabptr_6rabbyt_6_anims_AnimLerp;
  *(void(**)(void))&__pyx_vtable_6rabbyt_6_anims_AnimExponential.__pyx_base._interpolate = (void(*)(void))__pyx_f_6rabbyt_6_anims_15AnimExponential__interpolate;
  __pyx_type_6rabbyt_6_anims_AnimExponential.tp_base = __pyx_ptype_6rabbyt_6_anims_AnimLerp;
  if (PyType_Ready(&__pyx_type_6rabbyt_6_anims_AnimExponential) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 210; goto __pyx_L1;}
  if (__Pyx_SetVtable(__pyx_type_6rabbyt_6_anims_AnimExponential.tp_dict, __pyx_vtabptr_6rabbyt_6_anims_AnimExponential) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 210; goto __pyx_L1;}
  if (PyObject_SetAttrString(__pyx_m, "AnimExponential", (PyObject *)&__pyx_type_6rabbyt_6_anims_AnimExponential) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 210; goto __pyx_L1;}
  __pyx_ptype_6rabbyt_6_anims_AnimExponential = &__pyx_type_6rabbyt_6_anims_AnimExponential;
  __pyx_vtabptr_6rabbyt_6_anims_AnimStaticCubicBezier = &__pyx_vtable_6rabbyt_6_anims_AnimStaticCubicBezier;
  __pyx_vtable_6rabbyt_6_anims_AnimStaticCubicBezier.__pyx_base = *__pyx_vtabptr_6rabbyt_6_anims_Anim;
  *(void(**)(void))&__pyx_vtable_6rabbyt_6_anims_AnimStaticCubicBezier.__pyx_base.g = (void(*)(void))__pyx_f_6rabbyt_6_anims_21AnimStaticCubicBezier_g;
  __pyx_type_6rabbyt_6_anims_AnimStaticCubicBezier.tp_base = __pyx_ptype_6rabbyt_6_anims_Anim;
  if (PyType_Ready(&__pyx_type_6rabbyt_6_anims_AnimStaticCubicBezier) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 215; goto __pyx_L1;}
  if (__Pyx_SetVtable(__pyx_type_6rabbyt_6_anims_AnimStaticCubicBezier.tp_dict, __pyx_vtabptr_6rabbyt_6_anims_AnimStaticCubicBezier) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 215; goto __pyx_L1;}
  if (PyObject_SetAttrString(__pyx_m, "AnimStaticCubicBezier", (PyObject *)&__pyx_type_6rabbyt_6_anims_AnimStaticCubicBezier) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 215; goto __pyx_L1;}
  __pyx_ptype_6rabbyt_6_anims_AnimStaticCubicBezier = &__pyx_type_6rabbyt_6_anims_AnimStaticCubicBezier;
  __pyx_vtabptr_6rabbyt_6_anims_AnimWrap = &__pyx_vtable_6rabbyt_6_anims_AnimWrap;
  __pyx_vtable_6rabbyt_6_anims_AnimWrap.__pyx_base = *__pyx_vtabptr_6rabbyt_6_anims_Anim;
  *(void(**)(void))&__pyx_vtable_6rabbyt_6_anims_AnimWrap.__pyx_base.g = (void(*)(void))__pyx_f_6rabbyt_6_anims_8AnimWrap_g;
  __pyx_type_6rabbyt_6_anims_AnimWrap.tp_base = __pyx_ptype_6rabbyt_6_anims_Anim;
  __pyx_type_6rabbyt_6_anims_AnimWrap.tp_free = _PyObject_GC_Del;
  if (PyType_Ready(&__pyx_type_6rabbyt_6_anims_AnimWrap) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 240; goto __pyx_L1;}
  if (__Pyx_SetVtable(__pyx_type_6rabbyt_6_anims_AnimWrap.tp_dict, __pyx_vtabptr_6rabbyt_6_anims_AnimWrap) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 240; goto __pyx_L1;}
  if (PyObject_SetAttrString(__pyx_m, "AnimWrap", (PyObject *)&__pyx_type_6rabbyt_6_anims_AnimWrap) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 240; goto __pyx_L1;}
  __pyx_ptype_6rabbyt_6_anims_AnimWrap = &__pyx_type_6rabbyt_6_anims_AnimWrap;
  __pyx_vtabptr_6rabbyt_6_anims_AnimAddStatic = &__pyx_vtable_6rabbyt_6_anims_AnimAddStatic;
  __pyx_vtable_6rabbyt_6_anims_AnimAddStatic.__pyx_base = *__pyx_vtabptr_6rabbyt_6_anims_Anim;
  *(void(**)(void))&__pyx_vtable_6rabbyt_6_anims_AnimAddStatic.__pyx_base.g = (void(*)(void))__pyx_f_6rabbyt_6_anims_13AnimAddStatic_g;
  __pyx_type_6rabbyt_6_anims_AnimAddStatic.tp_base = __pyx_ptype_6rabbyt_6_anims_Anim;
  __pyx_type_6rabbyt_6_anims_AnimAddStatic.tp_free = _PyObject_GC_Del;
  if (PyType_Ready(&__pyx_type_6rabbyt_6_anims_AnimAddStatic) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 293; goto __pyx_L1;}
  if (__Pyx_SetVtable(__pyx_type_6rabbyt_6_anims_AnimAddStatic.tp_dict, __pyx_vtabptr_6rabbyt_6_anims_AnimAddStatic) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 293; goto __pyx_L1;}
  if (PyObject_SetAttrString(__pyx_m, "AnimAddStatic", (PyObject *)&__pyx_type_6rabbyt_6_anims_AnimAddStatic) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 293; goto __pyx_L1;}
  __pyx_ptype_6rabbyt_6_anims_AnimAddStatic = &__pyx_type_6rabbyt_6_anims_AnimAddStatic;
  __pyx_vtabptr_6rabbyt_6_anims__AnimArithmatic = &__pyx_vtable_6rabbyt_6_anims__AnimArithmatic;
  __pyx_vtable_6rabbyt_6_anims__AnimArithmatic.__pyx_base = *__pyx_vtabptr_6rabbyt_6_anims_Anim;
  __pyx_type_6rabbyt_6_anims__AnimArithmatic.tp_base = __pyx_ptype_6rabbyt_6_anims_Anim;
  __pyx_type_6rabbyt_6_anims__AnimArithmatic.tp_free = _PyObject_GC_Del;
  if (PyType_Ready(&__pyx_type_6rabbyt_6_anims__AnimArithmatic) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 305; goto __pyx_L1;}
  if (__Pyx_SetVtable(__pyx_type_6rabbyt_6_anims__AnimArithmatic.tp_dict, __pyx_vtabptr_6rabbyt_6_anims__AnimArithmatic) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 305; goto __pyx_L1;}
  if (PyObject_SetAttrString(__pyx_m, "_AnimArithmatic", (PyObject *)&__pyx_type_6rabbyt_6_anims__AnimArithmatic) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 305; goto __pyx_L1;}
  __pyx_ptype_6rabbyt_6_anims__AnimArithmatic = &__pyx_type_6rabbyt_6_anims__AnimArithmatic;
  __pyx_vtabptr_6rabbyt_6_anims_AnimAdd = &__pyx_vtable_6rabbyt_6_anims_AnimAdd;
  __pyx_vtable_6rabbyt_6_anims_AnimAdd.__pyx_base = *__pyx_vtabptr_6rabbyt_6_anims__AnimArithmatic;
  *(void(**)(void))&__pyx_vtable_6rabbyt_6_anims_AnimAdd.__pyx_base.__pyx_base.g = (void(*)(void))__pyx_f_6rabbyt_6_anims_7AnimAdd_g;
  __pyx_type_6rabbyt_6_anims_AnimAdd.tp_base = __pyx_ptype_6rabbyt_6_anims__AnimArithmatic;
  if (PyType_Ready(&__pyx_type_6rabbyt_6_anims_AnimAdd) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 312; goto __pyx_L1;}
  if (__Pyx_SetVtable(__pyx_type_6rabbyt_6_anims_AnimAdd.tp_dict, __pyx_vtabptr_6rabbyt_6_anims_AnimAdd) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 312; goto __pyx_L1;}
  if (PyObject_SetAttrString(__pyx_m, "AnimAdd", (PyObject *)&__pyx_type_6rabbyt_6_anims_AnimAdd) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 312; goto __pyx_L1;}
  __pyx_ptype_6rabbyt_6_anims_AnimAdd = &__pyx_type_6rabbyt_6_anims_AnimAdd;
  __pyx_vtabptr_6rabbyt_6_anims_AnimSub = &__pyx_vtable_6rabbyt_6_anims_AnimSub;
  __pyx_vtable_6rabbyt_6_anims_AnimSub.__pyx_base = *__pyx_vtabptr_6rabbyt_6_anims__AnimArithmatic;
  *(void(**)(void))&__pyx_vtable_6rabbyt_6_anims_AnimSub.__pyx_base.__pyx_base.g = (void(*)(void))__pyx_f_6rabbyt_6_anims_7AnimSub_g;
  __pyx_type_6rabbyt_6_anims_AnimSub.tp_base = __pyx_ptype_6rabbyt_6_anims__AnimArithmatic;
  if (PyType_Ready(&__pyx_type_6rabbyt_6_anims_AnimSub) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 316; goto __pyx_L1;}
  if (__Pyx_SetVtable(__pyx_type_6rabbyt_6_anims_AnimSub.tp_dict, __pyx_vtabptr_6rabbyt_6_anims_AnimSub) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 316; goto __pyx_L1;}
  if (PyObject_SetAttrString(__pyx_m, "AnimSub", (PyObject *)&__pyx_type_6rabbyt_6_anims_AnimSub) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 316; goto __pyx_L1;}
  __pyx_ptype_6rabbyt_6_anims_AnimSub = &__pyx_type_6rabbyt_6_anims_AnimSub;
  __pyx_vtabptr_6rabbyt_6_anims_AnimMul = &__pyx_vtable_6rabbyt_6_anims_AnimMul;
  __pyx_vtable_6rabbyt_6_anims_AnimMul.__pyx_base = *__pyx_vtabptr_6rabbyt_6_anims__AnimArithmatic;
  *(void(**)(void))&__pyx_vtable_6rabbyt_6_anims_AnimMul.__pyx_base.__pyx_base.g = (void(*)(void))__pyx_f_6rabbyt_6_anims_7AnimMul_g;
  __pyx_type_6rabbyt_6_anims_AnimMul.tp_base = __pyx_ptype_6rabbyt_6_anims__AnimArithmatic;
  if (PyType_Ready(&__pyx_type_6rabbyt_6_anims_AnimMul) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 320; goto __pyx_L1;}
  if (__Pyx_SetVtable(__pyx_type_6rabbyt_6_anims_AnimMul.tp_dict, __pyx_vtabptr_6rabbyt_6_anims_AnimMul) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 320; goto __pyx_L1;}
  if (PyObject_SetAttrString(__pyx_m, "AnimMul", (PyObject *)&__pyx_type_6rabbyt_6_anims_AnimMul) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 320; goto __pyx_L1;}
  __pyx_ptype_6rabbyt_6_anims_AnimMul = &__pyx_type_6rabbyt_6_anims_AnimMul;
  __pyx_vtabptr_6rabbyt_6_anims_AnimDiv = &__pyx_vtable_6rabbyt_6_anims_AnimDiv;
  __pyx_vtable_6rabbyt_6_anims_AnimDiv.__pyx_base = *__pyx_vtabptr_6rabbyt_6_anims__AnimArithmatic;
  *(void(**)(void))&__pyx_vtable_6rabbyt_6_anims_AnimDiv.__pyx_base.__pyx_base.g = (void(*)(void))__pyx_f_6rabbyt_6_anims_7AnimDiv_g;
  __pyx_type_6rabbyt_6_anims_AnimDiv.tp_base = __pyx_ptype_6rabbyt_6_anims__AnimArithmatic;
  if (PyType_Ready(&__pyx_type_6rabbyt_6_anims_AnimDiv) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 324; goto __pyx_L1;}
  if (__Pyx_SetVtable(__pyx_type_6rabbyt_6_anims_AnimDiv.tp_dict, __pyx_vtabptr_6rabbyt_6_anims_AnimDiv) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 324; goto __pyx_L1;}
  if (PyObject_SetAttrString(__pyx_m, "AnimDiv", (PyObject *)&__pyx_type_6rabbyt_6_anims_AnimDiv) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 324; goto __pyx_L1;}
  __pyx_ptype_6rabbyt_6_anims_AnimDiv = &__pyx_type_6rabbyt_6_anims_AnimDiv;
  __pyx_vtabptr_6rabbyt_6_anims_AnimPyFunc = &__pyx_vtable_6rabbyt_6_anims_AnimPyFunc;
  __pyx_vtable_6rabbyt_6_anims_AnimPyFunc.__pyx_base = *__pyx_vtabptr_6rabbyt_6_anims_Anim;
  *(void(**)(void))&__pyx_vtable_6rabbyt_6_anims_AnimPyFunc.__pyx_base.g = (void(*)(void))__pyx_f_6rabbyt_6_anims_10AnimPyFunc_g;
  __pyx_type_6rabbyt_6_anims_AnimPyFunc.tp_base = __pyx_ptype_6rabbyt_6_anims_Anim;
  __pyx_type_6rabbyt_6_anims_AnimPyFunc.tp_free = _PyObject_GC_Del;
  if (PyType_Ready(&__pyx_type_6rabbyt_6_anims_AnimPyFunc) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 328; goto __pyx_L1;}
  if (__Pyx_SetVtable(__pyx_type_6rabbyt_6_anims_AnimPyFunc.tp_dict, __pyx_vtabptr_6rabbyt_6_anims_AnimPyFunc) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 328; goto __pyx_L1;}
  if (PyObject_SetAttrString(__pyx_m, "AnimPyFunc", (PyObject *)&__pyx_type_6rabbyt_6_anims_AnimPyFunc) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 328; goto __pyx_L1;}
  __pyx_ptype_6rabbyt_6_anims_AnimPyFunc = &__pyx_type_6rabbyt_6_anims_AnimPyFunc;
  __pyx_vtabptr_6rabbyt_6_anims_AnimProxy = &__pyx_vtable_6rabbyt_6_anims_AnimProxy;
  __pyx_vtable_6rabbyt_6_anims_AnimProxy.__pyx_base = *__pyx_vtabptr_6rabbyt_6_anims_Anim;
  *(void(**)(void))&__pyx_vtable_6rabbyt_6_anims_AnimProxy.__pyx_base.g = (void(*)(void))__pyx_f_6rabbyt_6_anims_9AnimProxy_g;
  __pyx_type_6rabbyt_6_anims_AnimProxy.tp_base = __pyx_ptype_6rabbyt_6_anims_Anim;
  __pyx_type_6rabbyt_6_anims_AnimProxy.tp_free = _PyObject_GC_Del;
  if (PyType_Ready(&__pyx_type_6rabbyt_6_anims_AnimProxy) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 359; goto __pyx_L1;}
  if (__Pyx_SetVtable(__pyx_type_6rabbyt_6_anims_AnimProxy.tp_dict, __pyx_vtabptr_6rabbyt_6_anims_AnimProxy) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 359; goto __pyx_L1;}
  if (PyObject_SetAttrString(__pyx_m, "AnimProxy", (PyObject *)&__pyx_type_6rabbyt_6_anims_AnimProxy) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 359; goto __pyx_L1;}
  __pyx_ptype_6rabbyt_6_anims_AnimProxy = &__pyx_type_6rabbyt_6_anims_AnimProxy;

  /* "/home/mmarshall/projects/rabbyt_7.6/rabbyt/rabbyt._anims.pyx":9 */
  if (PyObject_SetAttr(__pyx_m, __pyx_n___credits__, __pyx_k2p) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8; goto __pyx_L1;}

  /* "/home/mmarshall/projects/rabbyt_7.6/rabbyt/rabbyt._anims.pyx":31 */
  if (PyObject_SetAttr(__pyx_m, __pyx_n___author__, __pyx_k3p) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 31; goto __pyx_L1;}

  /* "/home/mmarshall/projects/rabbyt_7.6/rabbyt/rabbyt._anims.pyx":262 */
  __pyx_1 = __Pyx_GetName(__pyx_b, __pyx_n_True); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 262; goto __pyx_L1;}
  __pyx_k4 = __pyx_1;
  __pyx_1 = 0;

  /* "/home/mmarshall/projects/rabbyt_7.6/rabbyt/rabbyt._anims.pyx":346 */
  __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_False); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 346; goto __pyx_L1;}
  __pyx_k5 = __pyx_2;
  __pyx_2 = 0;

  /* "/home/mmarshall/projects/rabbyt_7.6/rabbyt/rabbyt._anims.pyx":375 */
  __pyx_3 = __Pyx_GetName(__pyx_b, __pyx_n_False); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 375; goto __pyx_L1;}
  __pyx_k6 = __pyx_3;
  __pyx_3 = 0;

  /* "/home/mmarshall/projects/rabbyt_7.6/rabbyt/rabbyt._anims.pyx":397 */
  return;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  Py_XDECREF(__pyx_2);
  Py_XDECREF(__pyx_3);
  __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);
}
