/* Generated by Pyrex 0.9.5.1a on Tue Oct 16 21:20:46 2007 */

#include "Python.h"
#include "structmember.h"
#ifndef PY_LONG_LONG
  #define PY_LONG_LONG LONG_LONG
#endif
#ifdef __cplusplus
#define __PYX_EXTERN_C extern "C"
#else
#define __PYX_EXTERN_C extern
#endif
__PYX_EXTERN_C double pow(double, double);
#include "stdlib.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[] = "\nThis module is ALPHA!  There might be API changes in the future.  This doesn\'t\nmean that you shouldn\'t use it, just don\'t get mad if you have to make a few\nminor changes in the future.\n\nAND it\'s mostly undocumented.  The tests might get you started.\n\nAND it\'s unoptimized.  Right now it\'s pretty slow.\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 void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb); /*proto*/

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

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

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

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

static int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type); /*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.arrays */


struct __pyx_obj_6rabbyt_6arrays__BaseArray {
  PyObject_HEAD
  struct __pyx_vtabstruct_6rabbyt_6arrays__BaseArray *__pyx_vtab;
  float (*_data);
  int _allocated_size;
  int _count;
  int _stride;
  int _is_data_owner;
  struct __pyx_obj_6rabbyt_6arrays__BaseArray *data_owner;
  int _is_assignable;
};

struct __pyx_vtabstruct_6rabbyt_6arrays__BaseArray {
  void ((*_sync_data_ptr)(struct __pyx_obj_6rabbyt_6arrays__BaseArray *));
  float ((*_getitem)(struct __pyx_obj_6rabbyt_6arrays__BaseArray *,int ));
  void ((*_setitem)(struct __pyx_obj_6rabbyt_6arrays__BaseArray *,int ,float ));
  int ((*_convert_index)(struct __pyx_obj_6rabbyt_6arrays__BaseArray *,int ));
};
static struct __pyx_vtabstruct_6rabbyt_6arrays__BaseArray *__pyx_vtabptr_6rabbyt_6arrays__BaseArray;


struct __pyx_obj_6rabbyt_6arrays_ItemInfo {
  PyObject_HEAD
  struct __pyx_obj_6rabbyt_6arrays_Array2d *array;
  int index;
};


struct __pyx_obj_6rabbyt_6arrays_Array2d {
  struct __pyx_obj_6rabbyt_6arrays__BaseArray __pyx_base;
  PyObject *_attributes;
  PyObject *_attribute_arrays;
  PyObject *_column_arrays;
  PyObject *_swizzles;
  PyObject *_defaults;
};

struct __pyx_vtabstruct_6rabbyt_6arrays_Array2d {
  struct __pyx_vtabstruct_6rabbyt_6arrays__BaseArray __pyx_base;
};
static struct __pyx_vtabstruct_6rabbyt_6arrays_Array2d *__pyx_vtabptr_6rabbyt_6arrays_Array2d;


struct __pyx_obj_6rabbyt_6arrays__BaseArray1d {
  struct __pyx_obj_6rabbyt_6arrays__BaseArray __pyx_base;
};

struct __pyx_vtabstruct_6rabbyt_6arrays__BaseArray1d {
  struct __pyx_vtabstruct_6rabbyt_6arrays__BaseArray __pyx_base;
};
static struct __pyx_vtabstruct_6rabbyt_6arrays__BaseArray1d *__pyx_vtabptr_6rabbyt_6arrays__BaseArray1d;


struct __pyx_obj_6rabbyt_6arrays_Array1d {
  struct __pyx_obj_6rabbyt_6arrays__BaseArray1d __pyx_base;
  float _default;
};

struct __pyx_vtabstruct_6rabbyt_6arrays_Array1d {
  struct __pyx_vtabstruct_6rabbyt_6arrays__BaseArray1d __pyx_base;
};
static struct __pyx_vtabstruct_6rabbyt_6arrays_Array1d *__pyx_vtabptr_6rabbyt_6arrays_Array1d;


struct __pyx_obj_6rabbyt_6arrays_OffsetArray {
  struct __pyx_obj_6rabbyt_6arrays__BaseArray1d __pyx_base;
  int _offset;
};

struct __pyx_vtabstruct_6rabbyt_6arrays_OffsetArray {
  struct __pyx_vtabstruct_6rabbyt_6arrays__BaseArray1d __pyx_base;
};
static struct __pyx_vtabstruct_6rabbyt_6arrays_OffsetArray *__pyx_vtabptr_6rabbyt_6arrays_OffsetArray;


struct __pyx_obj_6rabbyt_6arrays_OffsetUByteArray {
  struct __pyx_obj_6rabbyt_6arrays__BaseArray1d __pyx_base;
  unsigned char (*_uchar_data);
  int _uchar_stride;
  int _offset;
  int _uchar_offset;
};

struct __pyx_vtabstruct_6rabbyt_6arrays_OffsetUByteArray {
  struct __pyx_vtabstruct_6rabbyt_6arrays__BaseArray1d __pyx_base;
};
static struct __pyx_vtabstruct_6rabbyt_6arrays_OffsetUByteArray *__pyx_vtabptr_6rabbyt_6arrays_OffsetUByteArray;


struct __pyx_obj_6rabbyt_6arrays__RepeatedArray1d {
  struct __pyx_obj_6rabbyt_6arrays__BaseArray1d __pyx_base;
  int _times;
};

struct __pyx_vtabstruct_6rabbyt_6arrays__RepeatedArray1d {
  struct __pyx_vtabstruct_6rabbyt_6arrays__BaseArray1d __pyx_base;
};
static struct __pyx_vtabstruct_6rabbyt_6arrays__RepeatedArray1d *__pyx_vtabptr_6rabbyt_6arrays__RepeatedArray1d;


struct __pyx_obj_6rabbyt_6arrays__StretchedArray1d {
  struct __pyx_obj_6rabbyt_6arrays__BaseArray1d __pyx_base;
  int _times;
};

struct __pyx_vtabstruct_6rabbyt_6arrays__StretchedArray1d {
  struct __pyx_vtabstruct_6rabbyt_6arrays__BaseArray1d __pyx_base;
};
static struct __pyx_vtabstruct_6rabbyt_6arrays__StretchedArray1d *__pyx_vtabptr_6rabbyt_6arrays__StretchedArray1d;


struct __pyx_obj_6rabbyt_6arrays__ArrayOp2 {
  PyObject_HEAD
  float ((*operation)(float ,float ));
  PyObject *arg1;
  PyObject *arg2;
};


struct __pyx_obj_6rabbyt_6arrays_ArrayOpAdd {
  struct __pyx_obj_6rabbyt_6arrays__ArrayOp2 __pyx_base;
};


struct __pyx_obj_6rabbyt_6arrays_ArrayOpSub {
  struct __pyx_obj_6rabbyt_6arrays__ArrayOp2 __pyx_base;
};


struct __pyx_obj_6rabbyt_6arrays_ArrayOpMul {
  struct __pyx_obj_6rabbyt_6arrays__ArrayOp2 __pyx_base;
};


struct __pyx_obj_6rabbyt_6arrays_ArrayOpDiv {
  struct __pyx_obj_6rabbyt_6arrays__ArrayOp2 __pyx_base;
};


struct __pyx_obj_6rabbyt_6arrays_ArrayOpMod {
  struct __pyx_obj_6rabbyt_6arrays__ArrayOp2 __pyx_base;
};


struct __pyx_obj_6rabbyt_6arrays_ArrayOpMin {
  struct __pyx_obj_6rabbyt_6arrays__ArrayOp2 __pyx_base;
};


struct __pyx_obj_6rabbyt_6arrays_ArrayOpMax {
  struct __pyx_obj_6rabbyt_6arrays__ArrayOp2 __pyx_base;
};

static PyTypeObject *__pyx_ptype_6rabbyt_6arrays__BaseArray = 0;
static PyTypeObject *__pyx_ptype_6rabbyt_6arrays_ItemInfo = 0;
static PyTypeObject *__pyx_ptype_6rabbyt_6arrays_Array2d = 0;
static PyTypeObject *__pyx_ptype_6rabbyt_6arrays__BaseArray1d = 0;
static PyTypeObject *__pyx_ptype_6rabbyt_6arrays_Array1d = 0;
static PyTypeObject *__pyx_ptype_6rabbyt_6arrays_OffsetArray = 0;
static PyTypeObject *__pyx_ptype_6rabbyt_6arrays_OffsetUByteArray = 0;
static PyTypeObject *__pyx_ptype_6rabbyt_6arrays__RepeatedArray1d = 0;
static PyTypeObject *__pyx_ptype_6rabbyt_6arrays__StretchedArray1d = 0;
static PyTypeObject *__pyx_ptype_6rabbyt_6arrays__ArrayOp2 = 0;
static PyTypeObject *__pyx_ptype_6rabbyt_6arrays_ArrayOpAdd = 0;
static PyTypeObject *__pyx_ptype_6rabbyt_6arrays_ArrayOpSub = 0;
static PyTypeObject *__pyx_ptype_6rabbyt_6arrays_ArrayOpMul = 0;
static PyTypeObject *__pyx_ptype_6rabbyt_6arrays_ArrayOpDiv = 0;
static PyTypeObject *__pyx_ptype_6rabbyt_6arrays_ArrayOpMod = 0;
static PyTypeObject *__pyx_ptype_6rabbyt_6arrays_ArrayOpMin = 0;
static PyTypeObject *__pyx_ptype_6rabbyt_6arrays_ArrayOpMax = 0;
static PyObject *__pyx_k3;
static PyObject *__pyx_k4;
static PyObject *__pyx_k5;
static PyObject *__pyx_k6;
static PyObject *__pyx_k7;
static PyObject *__pyx_k8;
static PyObject *__pyx_k9;
static PyObject *(__pyx_f_6rabbyt_6arrays__do_op2_a_a(float ((*)(float ,float )),int ,int ,struct __pyx_obj_6rabbyt_6arrays__BaseArray *,struct __pyx_obj_6rabbyt_6arrays__BaseArray *,struct __pyx_obj_6rabbyt_6arrays__BaseArray *)); /*proto*/
static PyObject *(__pyx_f_6rabbyt_6arrays__do_op2_a_f(float ((*)(float ,float )),int ,int ,struct __pyx_obj_6rabbyt_6arrays__BaseArray *,struct __pyx_obj_6rabbyt_6arrays__BaseArray *,float )); /*proto*/
static PyObject *(__pyx_f_6rabbyt_6arrays__do_op2_f_a(float ((*)(float ,float )),int ,int ,struct __pyx_obj_6rabbyt_6arrays__BaseArray *,float ,struct __pyx_obj_6rabbyt_6arrays__BaseArray *)); /*proto*/
static float (__pyx_f_6rabbyt_6arrays_op2_add(float ,float )); /*proto*/
static float (__pyx_f_6rabbyt_6arrays_op2_sub(float ,float )); /*proto*/
static float (__pyx_f_6rabbyt_6arrays_op2_mul(float ,float )); /*proto*/
static float (__pyx_f_6rabbyt_6arrays_op2_div(float ,float )); /*proto*/
static float (__pyx_f_6rabbyt_6arrays_op2_mod(float ,float )); /*proto*/
static float (__pyx_f_6rabbyt_6arrays_op2_min(float ,float )); /*proto*/
static float (__pyx_f_6rabbyt_6arrays_op2_max(float ,float )); /*proto*/


/* Implementation of rabbyt.arrays */

static char (__pyx_k1[]) = "\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_k2[]) = "Matthew Marshall <matthew@matthewmarshall.org>";

static PyObject *__pyx_n___credits__;
static PyObject *__pyx_n___author__;
static PyObject *__pyx_n_array_max;

static PyObject *__pyx_k1p;
static PyObject *__pyx_k2p;

static void __pyx_f_6rabbyt_6arrays_10_BaseArray__sync_data_ptr(struct __pyx_obj_6rabbyt_6arrays__BaseArray *__pyx_v_self) {
  int __pyx_1;
  Py_INCREF(__pyx_v_self);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":54 */
  __pyx_1 = (!__pyx_v_self->_is_data_owner);
  if (__pyx_1) {

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":55 */
    ((struct __pyx_vtabstruct_6rabbyt_6arrays__BaseArray *)__pyx_v_self->data_owner->__pyx_vtab)->_sync_data_ptr(__pyx_v_self->data_owner);

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":56 */
    __pyx_v_self->_data = __pyx_v_self->data_owner->_data;

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":57 */
    __pyx_v_self->_count = __pyx_v_self->data_owner->_count;
    goto __pyx_L2;
  }
  __pyx_L2:;

  Py_DECREF(__pyx_v_self);
}

static float __pyx_f_6rabbyt_6arrays_10_BaseArray__getitem(struct __pyx_obj_6rabbyt_6arrays__BaseArray *__pyx_v_self,int __pyx_v_index) {
  float __pyx_r;
  Py_INCREF(__pyx_v_self);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":60 */
  __pyx_r = (__pyx_v_self->_data[(__pyx_v_index * __pyx_v_self->_stride)]);
  goto __pyx_L0;

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

static PyObject *__pyx_n_NotImplemented;

static void __pyx_f_6rabbyt_6arrays_10_BaseArray__setitem(struct __pyx_obj_6rabbyt_6arrays__BaseArray *__pyx_v_self,int __pyx_v_index,float __pyx_v_value) {
  PyObject *__pyx_1 = 0;
  Py_INCREF(__pyx_v_self);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":63 */
  __pyx_1 = __Pyx_GetName(__pyx_b, __pyx_n_NotImplemented); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 63; goto __pyx_L1;}
  __Pyx_Raise(__pyx_1, 0, 0);
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  {__pyx_filename = __pyx_f[0]; __pyx_lineno = 63; goto __pyx_L1;}

  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  __Pyx_WriteUnraisable("rabbyt.arrays._BaseArray._setitem");
  __pyx_L0:;
  Py_DECREF(__pyx_v_self);
}

static void __pyx_f_6rabbyt_6arrays_10_BaseArray___dealloc__(PyObject *__pyx_v_self); /*proto*/
static void __pyx_f_6rabbyt_6arrays_10_BaseArray___dealloc__(PyObject *__pyx_v_self) {
  int __pyx_1;
  Py_INCREF(__pyx_v_self);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":69 */
  __pyx_1 = ((struct __pyx_obj_6rabbyt_6arrays__BaseArray *)__pyx_v_self)->_is_data_owner;
  if (__pyx_1) {

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":70 */
    free(((struct __pyx_obj_6rabbyt_6arrays__BaseArray *)__pyx_v_self)->_data);

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":71 */
    ((struct __pyx_obj_6rabbyt_6arrays__BaseArray *)__pyx_v_self)->_data = NULL;
    goto __pyx_L2;
  }
  __pyx_L2:;

  Py_DECREF(__pyx_v_self);
}

static PyObject *__pyx_n_False;
static PyObject *__pyx_n_True;

static int __pyx_f_6rabbyt_6arrays_10_BaseArray___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_f_6rabbyt_6arrays_10_BaseArray___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct __pyx_obj_6rabbyt_6arrays__BaseArray *__pyx_v_data_owner = 0;
  int __pyx_r;
  PyObject *__pyx_1 = 0;
  int __pyx_2;
  static char *__pyx_argnames[] = {"data_owner",0};
  if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "O", __pyx_argnames, &__pyx_v_data_owner)) return -1;
  Py_INCREF(__pyx_v_self);
  Py_INCREF(__pyx_v_data_owner);
  if (!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_data_owner), __pyx_ptype_6rabbyt_6arrays__BaseArray, 1, "data_owner")) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 73; goto __pyx_L1;}

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":76 */
  __pyx_1 = __Pyx_GetName(__pyx_b, __pyx_n_False); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 76; goto __pyx_L1;}
  __pyx_2 = PyInt_AsLong(__pyx_1); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 76; goto __pyx_L1;}
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  ((struct __pyx_obj_6rabbyt_6arrays__BaseArray *)__pyx_v_self)->_is_assignable = __pyx_2;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":78 */
  Py_INCREF(((PyObject *)__pyx_v_data_owner));
  Py_DECREF(((PyObject *)((struct __pyx_obj_6rabbyt_6arrays__BaseArray *)__pyx_v_self)->data_owner));
  ((struct __pyx_obj_6rabbyt_6arrays__BaseArray *)__pyx_v_self)->data_owner = __pyx_v_data_owner;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":79 */
  if (PyObject_Cmp(((PyObject *)__pyx_v_data_owner), __pyx_v_self, &__pyx_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 79; goto __pyx_L1;}
  __pyx_2 = __pyx_2 == 0;
  if (__pyx_2) {

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":80 */
    __pyx_1 = __Pyx_GetName(__pyx_b, __pyx_n_True); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 80; goto __pyx_L1;}
    __pyx_2 = PyInt_AsLong(__pyx_1); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 80; goto __pyx_L1;}
    Py_DECREF(__pyx_1); __pyx_1 = 0;
    ((struct __pyx_obj_6rabbyt_6arrays__BaseArray *)__pyx_v_self)->_is_data_owner = __pyx_2;

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":81 */
    ((struct __pyx_obj_6rabbyt_6arrays__BaseArray *)__pyx_v_self)->_data = NULL;

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":82 */
    ((struct __pyx_obj_6rabbyt_6arrays__BaseArray *)__pyx_v_self)->_allocated_size = 0;
    goto __pyx_L2;
  }
  /*else*/ {

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":84 */
    __pyx_1 = __Pyx_GetName(__pyx_b, __pyx_n_False); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 84; goto __pyx_L1;}
    __pyx_2 = PyInt_AsLong(__pyx_1); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 84; goto __pyx_L1;}
    Py_DECREF(__pyx_1); __pyx_1 = 0;
    ((struct __pyx_obj_6rabbyt_6arrays__BaseArray *)__pyx_v_self)->_is_data_owner = __pyx_2;

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":85 */
    ((struct __pyx_vtabstruct_6rabbyt_6arrays__BaseArray *)((struct __pyx_obj_6rabbyt_6arrays__BaseArray *)__pyx_v_self)->__pyx_vtab)->_sync_data_ptr(((struct __pyx_obj_6rabbyt_6arrays__BaseArray *)__pyx_v_self));

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":86 */
    ((struct __pyx_obj_6rabbyt_6arrays__BaseArray *)__pyx_v_self)->_stride = __pyx_v_data_owner->_stride;
  }
  __pyx_L2:;

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  __Pyx_AddTraceback("rabbyt.arrays._BaseArray.__init__");
  __pyx_r = -1;
  __pyx_L0:;
  Py_DECREF(__pyx_v_self);
  Py_DECREF(__pyx_v_data_owner);
  return __pyx_r;
}

static int __pyx_f_6rabbyt_6arrays_10_BaseArray__convert_index(struct __pyx_obj_6rabbyt_6arrays__BaseArray *__pyx_v_self,int __pyx_v_raw) {
  int __pyx_r;
  Py_INCREF(__pyx_v_self);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":90 */
  __pyx_r = __pyx_v_raw;
  goto __pyx_L0;

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

static PyObject *__pyx_f_6rabbyt_6arrays_10_BaseArray__size_changed(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_f_6rabbyt_6arrays_10_BaseArray__size_changed(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  int __pyx_v_new_size;
  PyObject *__pyx_r;
  static char *__pyx_argnames[] = {"new_size",0};
  if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "i", __pyx_argnames, &__pyx_v_new_size)) return 0;
  Py_INCREF(__pyx_v_self);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":93 */
  ((struct __pyx_obj_6rabbyt_6arrays__BaseArray *)__pyx_v_self)->_count = __pyx_v_new_size;

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

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

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":96 */
  ((struct __pyx_vtabstruct_6rabbyt_6arrays__BaseArray *)((struct __pyx_obj_6rabbyt_6arrays__BaseArray *)__pyx_v_self)->__pyx_vtab)->_sync_data_ptr(((struct __pyx_obj_6rabbyt_6arrays__BaseArray *)__pyx_v_self));

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":97 */
  __pyx_r = ((struct __pyx_obj_6rabbyt_6arrays__BaseArray *)__pyx_v_self)->_count;
  goto __pyx_L0;

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

static PyObject *__pyx_n__size_changed;

static PyObject *__pyx_f_6rabbyt_6arrays_10_BaseArray__grow(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_f_6rabbyt_6arrays_10_BaseArray__grow(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  int __pyx_v_additional_size;
  PyObject *__pyx_v_exact = 0;
  int __pyx_v_new_size;
  PyObject *__pyx_r;
  int __pyx_1;
  PyObject *__pyx_2 = 0;
  PyObject *__pyx_3 = 0;
  PyObject *__pyx_4 = 0;
  static char *__pyx_argnames[] = {"additional_size","exact",0};
  if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "iO", __pyx_argnames, &__pyx_v_additional_size, &__pyx_v_exact)) return 0;
  Py_INCREF(__pyx_v_self);
  Py_INCREF(__pyx_v_exact);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":101 */
  ((struct __pyx_obj_6rabbyt_6arrays__BaseArray *)__pyx_v_self)->_count = (((struct __pyx_obj_6rabbyt_6arrays__BaseArray *)__pyx_v_self)->_count + __pyx_v_additional_size);

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

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":103 */
    __pyx_v_new_size = ((struct __pyx_obj_6rabbyt_6arrays__BaseArray *)__pyx_v_self)->_count;
    goto __pyx_L2;
  }
  /*else*/ {

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":105 */
    __pyx_v_new_size = ((((struct __pyx_obj_6rabbyt_6arrays__BaseArray *)__pyx_v_self)->_allocated_size / (sizeof(float ))) + 1);

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":106 */
    while (1) {
      __pyx_1 = (((struct __pyx_obj_6rabbyt_6arrays__BaseArray *)__pyx_v_self)->_count > __pyx_v_new_size);
      if (!__pyx_1) break;

      /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":107 */
      __pyx_v_new_size = (__pyx_v_new_size * 2);
    }
  }
  __pyx_L2:;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":108 */
  __pyx_1 = ((__pyx_v_new_size * (sizeof(float ))) > ((struct __pyx_obj_6rabbyt_6arrays__BaseArray *)__pyx_v_self)->_allocated_size);
  if (__pyx_1) {

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":109 */
    ((struct __pyx_obj_6rabbyt_6arrays__BaseArray *)__pyx_v_self)->_data = ((float (*))realloc(((struct __pyx_obj_6rabbyt_6arrays__BaseArray *)__pyx_v_self)->_data,(((sizeof(float )) * ((struct __pyx_obj_6rabbyt_6arrays__BaseArray *)__pyx_v_self)->_stride) * __pyx_v_new_size)));

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":112 */
    ((struct __pyx_obj_6rabbyt_6arrays__BaseArray *)__pyx_v_self)->_allocated_size = (((struct __pyx_obj_6rabbyt_6arrays__BaseArray *)__pyx_v_self)->_stride * __pyx_v_new_size);
    goto __pyx_L5;
  }
  __pyx_L5:;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":113 */
  __pyx_2 = PyObject_GetAttr(__pyx_v_self, __pyx_n__size_changed); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 113; goto __pyx_L1;}
  __pyx_3 = PyInt_FromLong(((struct __pyx_obj_6rabbyt_6arrays__BaseArray *)__pyx_v_self)->_count); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 113; goto __pyx_L1;}
  __pyx_4 = PyTuple_New(1); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 113; goto __pyx_L1;}
  PyTuple_SET_ITEM(__pyx_4, 0, __pyx_3);
  __pyx_3 = 0;
  __pyx_3 = PyObject_CallObject(__pyx_2, __pyx_4); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 113; goto __pyx_L1;}
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  Py_DECREF(__pyx_4); __pyx_4 = 0;
  Py_DECREF(__pyx_3); __pyx_3 = 0;

  __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.arrays._BaseArray._grow");
  __pyx_r = 0;
  __pyx_L0:;
  Py_DECREF(__pyx_v_self);
  Py_DECREF(__pyx_v_exact);
  return __pyx_r;
}

static PyObject *__pyx_n_RuntimeError;
static PyObject *__pyx_n__grow;

static PyObject *__pyx_k10p;

static char (__pyx_k10[]) = "Not data owner";

static PyObject *__pyx_f_6rabbyt_6arrays_10_BaseArray_set_size(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6rabbyt_6arrays_10_BaseArray_set_size[] = "\n        ``set_size(size)``\n\n        Sets the size explicitly.\n\n        This is an alternative to using ``append`` and ``extend``.  (It should\n        be a little faster.)\n        ";
static PyObject *__pyx_f_6rabbyt_6arrays_10_BaseArray_set_size(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  int __pyx_v_size;
  PyObject *__pyx_r;
  int __pyx_1;
  PyObject *__pyx_2 = 0;
  PyObject *__pyx_3 = 0;
  PyObject *__pyx_4 = 0;
  PyObject *__pyx_5 = 0;
  static char *__pyx_argnames[] = {"size",0};
  if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "i", __pyx_argnames, &__pyx_v_size)) return 0;
  Py_INCREF(__pyx_v_self);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":124 */
  if (PyObject_Cmp(((PyObject *)((struct __pyx_obj_6rabbyt_6arrays__BaseArray *)__pyx_v_self)->data_owner), __pyx_v_self, &__pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 124; goto __pyx_L1;}
  __pyx_1 = __pyx_1 != 0;
  if (__pyx_1) {

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":125 */
    __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_RuntimeError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 125; goto __pyx_L1;}
    __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 125; goto __pyx_L1;}
    Py_INCREF(__pyx_k10p);
    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_k10p);
    __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 125; goto __pyx_L1;}
    Py_DECREF(__pyx_2); __pyx_2 = 0;
    Py_DECREF(__pyx_3); __pyx_3 = 0;
    __Pyx_Raise(__pyx_4, 0, 0);
    Py_DECREF(__pyx_4); __pyx_4 = 0;
    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 125; goto __pyx_L1;}
    goto __pyx_L2;
  }
  __pyx_L2:;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":126 */
  __pyx_1 = (__pyx_v_size > ((struct __pyx_obj_6rabbyt_6arrays__BaseArray *)__pyx_v_self)->_count);
  if (__pyx_1) {

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":127 */
    __pyx_2 = PyObject_GetAttr(__pyx_v_self, __pyx_n__grow); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 127; goto __pyx_L1;}
    __pyx_3 = PyInt_FromLong((__pyx_v_size - ((struct __pyx_obj_6rabbyt_6arrays__BaseArray *)__pyx_v_self)->_count)); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 127; goto __pyx_L1;}
    __pyx_4 = __Pyx_GetName(__pyx_b, __pyx_n_True); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 127; goto __pyx_L1;}
    __pyx_5 = PyTuple_New(2); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 127; goto __pyx_L1;}
    PyTuple_SET_ITEM(__pyx_5, 0, __pyx_3);
    PyTuple_SET_ITEM(__pyx_5, 1, __pyx_4);
    __pyx_3 = 0;
    __pyx_4 = 0;
    __pyx_3 = PyObject_CallObject(__pyx_2, __pyx_5); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 127; goto __pyx_L1;}
    Py_DECREF(__pyx_2); __pyx_2 = 0;
    Py_DECREF(__pyx_5); __pyx_5 = 0;
    Py_DECREF(__pyx_3); __pyx_3 = 0;
    goto __pyx_L3;
  }
  __pyx_1 = (__pyx_v_size < ((struct __pyx_obj_6rabbyt_6arrays__BaseArray *)__pyx_v_self)->_count);
  if (__pyx_1) {

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":129 */
    ((struct __pyx_obj_6rabbyt_6arrays__BaseArray *)__pyx_v_self)->_count = __pyx_v_size;

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":130 */
    ((struct __pyx_obj_6rabbyt_6arrays__BaseArray *)__pyx_v_self)->_allocated_size = (((struct __pyx_obj_6rabbyt_6arrays__BaseArray *)__pyx_v_self)->_stride * __pyx_v_size);

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":131 */
    ((struct __pyx_obj_6rabbyt_6arrays__BaseArray *)__pyx_v_self)->_data = ((float (*))realloc(((struct __pyx_obj_6rabbyt_6arrays__BaseArray *)__pyx_v_self)->_data,((sizeof(float )) * ((struct __pyx_obj_6rabbyt_6arrays__BaseArray *)__pyx_v_self)->_allocated_size)));

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":133 */
    __pyx_4 = PyObject_GetAttr(__pyx_v_self, __pyx_n__size_changed); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 133; goto __pyx_L1;}
    __pyx_2 = PyInt_FromLong(((struct __pyx_obj_6rabbyt_6arrays__BaseArray *)__pyx_v_self)->_count); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 133; goto __pyx_L1;}
    __pyx_5 = PyTuple_New(1); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 133; goto __pyx_L1;}
    PyTuple_SET_ITEM(__pyx_5, 0, __pyx_2);
    __pyx_2 = 0;
    __pyx_3 = PyObject_CallObject(__pyx_4, __pyx_5); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 133; goto __pyx_L1;}
    Py_DECREF(__pyx_4); __pyx_4 = 0;
    Py_DECREF(__pyx_5); __pyx_5 = 0;
    Py_DECREF(__pyx_3); __pyx_3 = 0;
    goto __pyx_L3;
  }
  __pyx_L3:;

  __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.arrays._BaseArray.set_size");
  __pyx_r = 0;
  __pyx_L0:;
  Py_DECREF(__pyx_v_self);
  return __pyx_r;
}

static PyObject *__pyx_k11p;

static char (__pyx_k11[]) = "Not data owner";

static PyObject *__pyx_f_6rabbyt_6arrays_10_BaseArray_append(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6rabbyt_6arrays_10_BaseArray_append[] = "\n        ``append(item)``\n\n        Appends an item to the array.\n\n        ";
static PyObject *__pyx_f_6rabbyt_6arrays_10_BaseArray_append(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_item = 0;
  PyObject *__pyx_r;
  int __pyx_1;
  PyObject *__pyx_2 = 0;
  PyObject *__pyx_3 = 0;
  PyObject *__pyx_4 = 0;
  PyObject *__pyx_5 = 0;
  static char *__pyx_argnames[] = {"item",0};
  if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "O", __pyx_argnames, &__pyx_v_item)) return 0;
  Py_INCREF(__pyx_v_self);
  Py_INCREF(__pyx_v_item);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":142 */
  if (PyObject_Cmp(((PyObject *)((struct __pyx_obj_6rabbyt_6arrays__BaseArray *)__pyx_v_self)->data_owner), __pyx_v_self, &__pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 142; goto __pyx_L1;}
  __pyx_1 = __pyx_1 != 0;
  if (__pyx_1) {

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":143 */
    __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_RuntimeError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 143; goto __pyx_L1;}
    __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 143; goto __pyx_L1;}
    Py_INCREF(__pyx_k11p);
    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_k11p);
    __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 143; goto __pyx_L1;}
    Py_DECREF(__pyx_2); __pyx_2 = 0;
    Py_DECREF(__pyx_3); __pyx_3 = 0;
    __Pyx_Raise(__pyx_4, 0, 0);
    Py_DECREF(__pyx_4); __pyx_4 = 0;
    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 143; goto __pyx_L1;}
    goto __pyx_L2;
  }
  __pyx_L2:;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":144 */
  __pyx_2 = PyObject_GetAttr(__pyx_v_self, __pyx_n__grow); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 144; goto __pyx_L1;}
  __pyx_3 = PyInt_FromLong(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 144; goto __pyx_L1;}
  __pyx_4 = __Pyx_GetName(__pyx_b, __pyx_n_False); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 144; goto __pyx_L1;}
  __pyx_5 = PyTuple_New(2); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 144; goto __pyx_L1;}
  PyTuple_SET_ITEM(__pyx_5, 0, __pyx_3);
  PyTuple_SET_ITEM(__pyx_5, 1, __pyx_4);
  __pyx_3 = 0;
  __pyx_4 = 0;
  __pyx_3 = PyObject_CallObject(__pyx_2, __pyx_5); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 144; goto __pyx_L1;}
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  Py_DECREF(__pyx_5); __pyx_5 = 0;
  Py_DECREF(__pyx_3); __pyx_3 = 0;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":145 */
  /*try:*/ {

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":146 */
    __pyx_4 = PyInt_FromLong((((struct __pyx_obj_6rabbyt_6arrays__BaseArray *)__pyx_v_self)->_count - 1)); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 146; goto __pyx_L3;}
    if (PyObject_SetItem(__pyx_v_self, __pyx_4, __pyx_v_item) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 146; goto __pyx_L3;}
    Py_DECREF(__pyx_4); __pyx_4 = 0;
  }
  goto __pyx_L4;
  __pyx_L3:;
  Py_XDECREF(__pyx_2); __pyx_2 = 0;
  Py_XDECREF(__pyx_5); __pyx_5 = 0;
  Py_XDECREF(__pyx_3); __pyx_3 = 0;
  Py_XDECREF(__pyx_4); __pyx_4 = 0;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":147 */
  /*except:*/ {
    __Pyx_AddTraceback("rabbyt.arrays.append");
    __pyx_2 = __Pyx_GetExcValue(); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 147; goto __pyx_L1;}
    Py_DECREF(__pyx_2); __pyx_2 = 0;

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":150 */
    ((struct __pyx_obj_6rabbyt_6arrays__BaseArray *)__pyx_v_self)->_count = (((struct __pyx_obj_6rabbyt_6arrays__BaseArray *)__pyx_v_self)->_count - 1);

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":151 */
    __Pyx_ReRaise();
    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 151; goto __pyx_L1;}
    goto __pyx_L4;
  }
  __pyx_L4:;

  __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.arrays._BaseArray.append");
  __pyx_r = 0;
  __pyx_L0:;
  Py_DECREF(__pyx_v_self);
  Py_DECREF(__pyx_v_item);
  return __pyx_r;
}

static PyObject *__pyx_n_append;

static PyObject *__pyx_f_6rabbyt_6arrays_10_BaseArray_extend(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6rabbyt_6arrays_10_BaseArray_extend[] = "\n        ``extend(vertexes)``\n\n        Iterates over vertexes, calling ``append(vertex)`` on each one.\n        ";
static PyObject *__pyx_f_6rabbyt_6arrays_10_BaseArray_extend(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_vertexes = 0;
  PyObject *__pyx_v_v;
  PyObject *__pyx_r;
  PyObject *__pyx_1 = 0;
  PyObject *__pyx_2 = 0;
  PyObject *__pyx_3 = 0;
  PyObject *__pyx_4 = 0;
  static char *__pyx_argnames[] = {"vertexes",0};
  if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "O", __pyx_argnames, &__pyx_v_vertexes)) return 0;
  Py_INCREF(__pyx_v_self);
  Py_INCREF(__pyx_v_vertexes);
  __pyx_v_v = Py_None; Py_INCREF(Py_None);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":159 */
  __pyx_1 = PyObject_GetIter(__pyx_v_vertexes); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 159; goto __pyx_L1;}
  for (;;) {
    __pyx_2 = PyIter_Next(__pyx_1);
    if (!__pyx_2) {
      if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 159; goto __pyx_L1;}
      break;
    }
    Py_DECREF(__pyx_v_v);
    __pyx_v_v = __pyx_2;
    __pyx_2 = 0;

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":160 */
    __pyx_2 = PyObject_GetAttr(__pyx_v_self, __pyx_n_append); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 160; goto __pyx_L1;}
    __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 160; 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 = 160; goto __pyx_L1;}
    Py_DECREF(__pyx_2); __pyx_2 = 0;
    Py_DECREF(__pyx_3); __pyx_3 = 0;
    Py_DECREF(__pyx_4); __pyx_4 = 0;
  }
  Py_DECREF(__pyx_1); __pyx_1 = 0;

  __pyx_r = Py_None; Py_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  Py_XDECREF(__pyx_2);
  Py_XDECREF(__pyx_3);
  Py_XDECREF(__pyx_4);
  __Pyx_AddTraceback("rabbyt.arrays._BaseArray.extend");
  __pyx_r = 0;
  __pyx_L0:;
  Py_DECREF(__pyx_v_v);
  Py_DECREF(__pyx_v_self);
  Py_DECREF(__pyx_v_vertexes);
  return __pyx_r;
}

static PyObject *__pyx_f_6rabbyt_6arrays_10_BaseArray_get_data_addr(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_f_6rabbyt_6arrays_10_BaseArray_get_data_addr(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_r;
  PyObject *__pyx_1 = 0;
  static char *__pyx_argnames[] = {0};
  if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "", __pyx_argnames)) return 0;
  Py_INCREF(__pyx_v_self);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":163 */
  ((struct __pyx_vtabstruct_6rabbyt_6arrays__BaseArray *)((struct __pyx_obj_6rabbyt_6arrays__BaseArray *)__pyx_v_self)->__pyx_vtab)->_sync_data_ptr(((struct __pyx_obj_6rabbyt_6arrays__BaseArray *)__pyx_v_self));

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":164 */
  __pyx_1 = PyLong_FromUnsignedLong(((unsigned long )((struct __pyx_obj_6rabbyt_6arrays__BaseArray *)__pyx_v_self)->_data)); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 164; 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.arrays._BaseArray.get_data_addr");
  __pyx_r = 0;
  __pyx_L0:;
  Py_DECREF(__pyx_v_self);
  return __pyx_r;
}

static PyObject *__pyx_f_6rabbyt_6arrays_10_BaseArray_get_data_stride(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_f_6rabbyt_6arrays_10_BaseArray_get_data_stride(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_r;
  PyObject *__pyx_1 = 0;
  static char *__pyx_argnames[] = {0};
  if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "", __pyx_argnames)) return 0;
  Py_INCREF(__pyx_v_self);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":167 */
  ((struct __pyx_vtabstruct_6rabbyt_6arrays__BaseArray *)((struct __pyx_obj_6rabbyt_6arrays__BaseArray *)__pyx_v_self)->__pyx_vtab)->_sync_data_ptr(((struct __pyx_obj_6rabbyt_6arrays__BaseArray *)__pyx_v_self));

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":168 */
  __pyx_1 = PyInt_FromLong((((struct __pyx_obj_6rabbyt_6arrays__BaseArray *)__pyx_v_self)->_stride * (sizeof(float )))); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 168; 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.arrays._BaseArray.get_data_stride");
  __pyx_r = 0;
  __pyx_L0:;
  Py_DECREF(__pyx_v_self);
  return __pyx_r;
}

static PyObject *__pyx_n___init__;
static PyObject *__pyx_n_data_owner;
static PyObject *__pyx_n_len;
static PyObject *__pyx_n_list;
static PyObject *__pyx_n_max;
static PyObject *__pyx_n_set_size;
static PyObject *__pyx_n_enumerate;
static PyObject *__pyx_n_isinstance;
static PyObject *__pyx_n_basestring;


static int __pyx_f_6rabbyt_6arrays_7Array2d___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_f_6rabbyt_6arrays_7Array2d___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_attributes = 0;
  PyObject *__pyx_v_initial_data = 0;
  PyObject *__pyx_v_swizzles = 0;
  PyObject *__pyx_v_size = 0;
  PyObject *__pyx_v_defaults = 0;
  int __pyx_v_i;
  PyObject *__pyx_v_name;
  PyObject *__pyx_v_array;
  PyObject *__pyx_v_j;
  PyObject *__pyx_v_bytename;
  PyObject *__pyx_v_initial_len;
  int __pyx_r;
  PyObject *__pyx_1 = 0;
  PyObject *__pyx_2 = 0;
  PyObject *__pyx_3 = 0;
  PyObject *__pyx_4 = 0;
  int __pyx_5;
  int __pyx_6;
  PyObject *__pyx_7 = 0;
  long __pyx_8;
  long __pyx_9;
  static char *__pyx_argnames[] = {"attributes","initial_data","swizzles","size","defaults",0};
  __pyx_v_initial_data = __pyx_k3;
  __pyx_v_swizzles = __pyx_k4;
  __pyx_v_size = __pyx_k5;
  __pyx_v_defaults = __pyx_k6;
  if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "O|OOOO", __pyx_argnames, &__pyx_v_attributes, &__pyx_v_initial_data, &__pyx_v_swizzles, &__pyx_v_size, &__pyx_v_defaults)) return -1;
  Py_INCREF((PyObject *)__pyx_v_self);
  Py_INCREF(__pyx_v_attributes);
  Py_INCREF(__pyx_v_initial_data);
  Py_INCREF(__pyx_v_swizzles);
  Py_INCREF(__pyx_v_size);
  Py_INCREF(__pyx_v_defaults);
  __pyx_v_name = Py_None; Py_INCREF(Py_None);
  __pyx_v_array = Py_None; Py_INCREF(Py_None);
  __pyx_v_j = Py_None; Py_INCREF(Py_None);
  __pyx_v_bytename = Py_None; Py_INCREF(Py_None);
  __pyx_v_initial_len = Py_None; Py_INCREF(Py_None);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":181 */
  __pyx_1 = PyObject_GetAttr(((PyObject*)__pyx_ptype_6rabbyt_6arrays__BaseArray), __pyx_n___init__); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 181; goto __pyx_L1;}
  __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 181; goto __pyx_L1;}
  Py_INCREF(__pyx_v_self);
  PyTuple_SET_ITEM(__pyx_2, 0, __pyx_v_self);
  __pyx_3 = PyDict_New(); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 181; goto __pyx_L1;}
  if (PyDict_SetItem(__pyx_3, __pyx_n_data_owner, __pyx_v_self) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 181; goto __pyx_L1;}
  __pyx_4 = PyEval_CallObjectWithKeywords(__pyx_1, __pyx_2, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 181; goto __pyx_L1;}
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  Py_DECREF(__pyx_3); __pyx_3 = 0;
  Py_DECREF(__pyx_4); __pyx_4 = 0;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":183 */
  __pyx_1 = __Pyx_GetName(__pyx_b, __pyx_n_len); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 183; goto __pyx_L1;}
  __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 183; goto __pyx_L1;}
  Py_INCREF(__pyx_v_attributes);
  PyTuple_SET_ITEM(__pyx_2, 0, __pyx_v_attributes);
  __pyx_3 = PyObject_CallObject(__pyx_1, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 183; goto __pyx_L1;}
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  __pyx_5 = PyInt_AsLong(__pyx_3); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 183; goto __pyx_L1;}
  Py_DECREF(__pyx_3); __pyx_3 = 0;
  ((struct __pyx_obj_6rabbyt_6arrays_Array2d *)__pyx_v_self)->__pyx_base._stride = __pyx_5;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":184 */
  __pyx_4 = __Pyx_GetName(__pyx_b, __pyx_n_list); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 184; goto __pyx_L1;}
  __pyx_1 = PyTuple_New(1); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 184; goto __pyx_L1;}
  Py_INCREF(__pyx_v_attributes);
  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_v_attributes);
  __pyx_2 = PyObject_CallObject(__pyx_4, __pyx_1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 184; goto __pyx_L1;}
  Py_DECREF(__pyx_4); __pyx_4 = 0;
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  Py_DECREF(((struct __pyx_obj_6rabbyt_6arrays_Array2d *)__pyx_v_self)->_attributes);
  ((struct __pyx_obj_6rabbyt_6arrays_Array2d *)__pyx_v_self)->_attributes = __pyx_2;
  __pyx_2 = 0;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":185 */
  Py_INCREF(__pyx_v_swizzles);
  Py_DECREF(((struct __pyx_obj_6rabbyt_6arrays_Array2d *)__pyx_v_self)->_swizzles);
  ((struct __pyx_obj_6rabbyt_6arrays_Array2d *)__pyx_v_self)->_swizzles = __pyx_v_swizzles;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":187 */
  __pyx_3 = __Pyx_GetName(__pyx_b, __pyx_n_False); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 187; goto __pyx_L1;}
  __pyx_5 = PyInt_AsLong(__pyx_3); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 187; goto __pyx_L1;}
  Py_DECREF(__pyx_3); __pyx_3 = 0;
  ((struct __pyx_obj_6rabbyt_6arrays_Array2d *)__pyx_v_self)->__pyx_base._is_assignable = __pyx_5;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":189 */
  __pyx_5 = PyObject_IsTrue(__pyx_v_defaults); if (__pyx_5 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 189; goto __pyx_L1;}
  __pyx_6 = (!__pyx_5);
  if (__pyx_6) {

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":190 */
    __pyx_4 = PyInt_FromLong(0); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 190; goto __pyx_L1;}
    __pyx_1 = PyList_New(1); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 190; goto __pyx_L1;}
    PyList_SET_ITEM(__pyx_1, 0, __pyx_4);
    __pyx_4 = 0;
    __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_len); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 190; goto __pyx_L1;}
    __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 190; goto __pyx_L1;}
    Py_INCREF(((struct __pyx_obj_6rabbyt_6arrays_Array2d *)__pyx_v_self)->_attributes);
    PyTuple_SET_ITEM(__pyx_3, 0, ((struct __pyx_obj_6rabbyt_6arrays_Array2d *)__pyx_v_self)->_attributes);
    __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 190; goto __pyx_L1;}
    Py_DECREF(__pyx_2); __pyx_2 = 0;
    Py_DECREF(__pyx_3); __pyx_3 = 0;
    __pyx_2 = PyNumber_Multiply(__pyx_1, __pyx_4); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 190; goto __pyx_L1;}
    Py_DECREF(__pyx_1); __pyx_1 = 0;
    Py_DECREF(__pyx_4); __pyx_4 = 0;
    Py_DECREF(((struct __pyx_obj_6rabbyt_6arrays_Array2d *)__pyx_v_self)->_defaults);
    ((struct __pyx_obj_6rabbyt_6arrays_Array2d *)__pyx_v_self)->_defaults = __pyx_2;
    __pyx_2 = 0;
    goto __pyx_L2;
  }
  /*else*/ {

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":192 */
    Py_INCREF(__pyx_v_defaults);
    Py_DECREF(((struct __pyx_obj_6rabbyt_6arrays_Array2d *)__pyx_v_self)->_defaults);
    ((struct __pyx_obj_6rabbyt_6arrays_Array2d *)__pyx_v_self)->_defaults = __pyx_v_defaults;
  }
  __pyx_L2:;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":194 */
  __pyx_3 = __Pyx_GetName(__pyx_b, __pyx_n_max); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 194; goto __pyx_L1;}
  __pyx_1 = __Pyx_GetName(__pyx_b, __pyx_n_len); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 194; goto __pyx_L1;}
  __pyx_4 = PyTuple_New(1); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 194; goto __pyx_L1;}
  Py_INCREF(__pyx_v_initial_data);
  PyTuple_SET_ITEM(__pyx_4, 0, __pyx_v_initial_data);
  __pyx_2 = PyObject_CallObject(__pyx_1, __pyx_4); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 194; goto __pyx_L1;}
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  Py_DECREF(__pyx_4); __pyx_4 = 0;
  __pyx_1 = PyTuple_New(2); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 194; goto __pyx_L1;}
  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_2);
  Py_INCREF(__pyx_v_size);
  PyTuple_SET_ITEM(__pyx_1, 1, __pyx_v_size);
  __pyx_2 = 0;
  __pyx_4 = PyObject_CallObject(__pyx_3, __pyx_1); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 194; goto __pyx_L1;}
  Py_DECREF(__pyx_3); __pyx_3 = 0;
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  Py_DECREF(__pyx_v_size);
  __pyx_v_size = __pyx_4;
  __pyx_4 = 0;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":195 */
  __pyx_2 = PyObject_GetAttr(__pyx_v_self, __pyx_n_set_size); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 195; goto __pyx_L1;}
  __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 195; goto __pyx_L1;}
  Py_INCREF(__pyx_v_size);
  PyTuple_SET_ITEM(__pyx_3, 0, __pyx_v_size);
  __pyx_1 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 195; goto __pyx_L1;}
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  Py_DECREF(__pyx_3); __pyx_3 = 0;
  Py_DECREF(__pyx_1); __pyx_1 = 0;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":197 */
  __pyx_4 = PyDict_New(); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 197; goto __pyx_L1;}
  Py_DECREF(((struct __pyx_obj_6rabbyt_6arrays_Array2d *)__pyx_v_self)->_attribute_arrays);
  ((struct __pyx_obj_6rabbyt_6arrays_Array2d *)__pyx_v_self)->_attribute_arrays = __pyx_4;
  __pyx_4 = 0;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":198 */
  __pyx_2 = PyList_New(0); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 198; goto __pyx_L1;}
  Py_DECREF(((struct __pyx_obj_6rabbyt_6arrays_Array2d *)__pyx_v_self)->_column_arrays);
  ((struct __pyx_obj_6rabbyt_6arrays_Array2d *)__pyx_v_self)->_column_arrays = __pyx_2;
  __pyx_2 = 0;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":199 */
  __pyx_3 = __Pyx_GetName(__pyx_b, __pyx_n_enumerate); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 199; goto __pyx_L1;}
  __pyx_1 = PyTuple_New(1); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 199; goto __pyx_L1;}
  Py_INCREF(((struct __pyx_obj_6rabbyt_6arrays_Array2d *)__pyx_v_self)->_attributes);
  PyTuple_SET_ITEM(__pyx_1, 0, ((struct __pyx_obj_6rabbyt_6arrays_Array2d *)__pyx_v_self)->_attributes);
  __pyx_4 = PyObject_CallObject(__pyx_3, __pyx_1); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 199; goto __pyx_L1;}
  Py_DECREF(__pyx_3); __pyx_3 = 0;
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  __pyx_2 = PyObject_GetIter(__pyx_4); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 199; goto __pyx_L1;}
  Py_DECREF(__pyx_4); __pyx_4 = 0;
  for (;;) {
    __pyx_3 = PyIter_Next(__pyx_2);
    if (!__pyx_3) {
      if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 199; goto __pyx_L1;}
      break;
    }
    __pyx_1 = PyObject_GetIter(__pyx_3); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 199; goto __pyx_L1;}
    Py_DECREF(__pyx_3); __pyx_3 = 0;
    __pyx_4 = __Pyx_UnpackItem(__pyx_1); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 199; goto __pyx_L1;}
    __pyx_5 = PyInt_AsLong(__pyx_4); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 199; goto __pyx_L1;}
    Py_DECREF(__pyx_4); __pyx_4 = 0;
    __pyx_v_i = __pyx_5;
    __pyx_3 = __Pyx_UnpackItem(__pyx_1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 199; goto __pyx_L1;}
    Py_DECREF(__pyx_v_name);
    __pyx_v_name = __pyx_3;
    __pyx_3 = 0;
    if (__Pyx_EndUnpack(__pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 199; goto __pyx_L1;}
    Py_DECREF(__pyx_1); __pyx_1 = 0;

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":200 */
    __pyx_4 = __Pyx_GetName(__pyx_b, __pyx_n_isinstance); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 200; goto __pyx_L1;}
    __pyx_3 = __Pyx_GetName(__pyx_b, __pyx_n_basestring); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 200; goto __pyx_L1;}
    __pyx_1 = PyTuple_New(2); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 200; goto __pyx_L1;}
    Py_INCREF(__pyx_v_name);
    PyTuple_SET_ITEM(__pyx_1, 0, __pyx_v_name);
    PyTuple_SET_ITEM(__pyx_1, 1, __pyx_3);
    __pyx_3 = 0;
    __pyx_3 = PyObject_CallObject(__pyx_4, __pyx_1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 200; goto __pyx_L1;}
    Py_DECREF(__pyx_4); __pyx_4 = 0;
    Py_DECREF(__pyx_1); __pyx_1 = 0;
    __pyx_6 = PyObject_IsTrue(__pyx_3); if (__pyx_6 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 200; goto __pyx_L1;}
    Py_DECREF(__pyx_3); __pyx_3 = 0;
    if (__pyx_6) {

      /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":201 */
      __pyx_4 = PyInt_FromLong(__pyx_v_i); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 201; goto __pyx_L1;}
      __pyx_1 = PyTuple_New(2); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 201; goto __pyx_L1;}
      Py_INCREF(__pyx_v_self);
      PyTuple_SET_ITEM(__pyx_1, 0, __pyx_v_self);
      PyTuple_SET_ITEM(__pyx_1, 1, __pyx_4);
      __pyx_4 = 0;
      __pyx_3 = PyObject_CallObject(((PyObject*)__pyx_ptype_6rabbyt_6arrays_OffsetArray), __pyx_1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 201; goto __pyx_L1;}
      Py_DECREF(__pyx_1); __pyx_1 = 0;
      Py_DECREF(__pyx_v_array);
      __pyx_v_array = __pyx_3;
      __pyx_3 = 0;

      /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":202 */
      if (PyObject_SetItem(((struct __pyx_obj_6rabbyt_6arrays_Array2d *)__pyx_v_self)->_attribute_arrays, __pyx_v_name, __pyx_v_array) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 202; goto __pyx_L1;}

      /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":203 */
      __pyx_4 = PyObject_GetAttr(((struct __pyx_obj_6rabbyt_6arrays_Array2d *)__pyx_v_self)->_column_arrays, __pyx_n_append); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 203; goto __pyx_L1;}
      __pyx_1 = PyTuple_New(1); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 203; goto __pyx_L1;}
      Py_INCREF(__pyx_v_array);
      PyTuple_SET_ITEM(__pyx_1, 0, __pyx_v_array);
      __pyx_3 = PyObject_CallObject(__pyx_4, __pyx_1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 203; goto __pyx_L1;}
      Py_DECREF(__pyx_4); __pyx_4 = 0;
      Py_DECREF(__pyx_1); __pyx_1 = 0;
      Py_DECREF(__pyx_3); __pyx_3 = 0;
      goto __pyx_L5;
    }
    /*else*/ {

      /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":205 */
      __pyx_4 = __Pyx_GetName(__pyx_b, __pyx_n_len); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 205; goto __pyx_L1;}
      __pyx_1 = PyTuple_New(1); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 205; goto __pyx_L1;}
      Py_INCREF(__pyx_v_name);
      PyTuple_SET_ITEM(__pyx_1, 0, __pyx_v_name);
      __pyx_3 = PyObject_CallObject(__pyx_4, __pyx_1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 205; goto __pyx_L1;}
      Py_DECREF(__pyx_4); __pyx_4 = 0;
      Py_DECREF(__pyx_1); __pyx_1 = 0;
      __pyx_4 = PyInt_FromLong(4); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 205; goto __pyx_L1;}
      if (PyObject_Cmp(__pyx_3, __pyx_4, &__pyx_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 205; goto __pyx_L1;}
      __pyx_5 = __pyx_5 == 0;
      Py_DECREF(__pyx_3); __pyx_3 = 0;
      Py_DECREF(__pyx_4); __pyx_4 = 0;
      if (!__pyx_5) {
        PyErr_SetNone(PyExc_AssertionError);
        {__pyx_filename = __pyx_f[0]; __pyx_lineno = 205; goto __pyx_L1;}
      }

      /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":206 */
      __pyx_1 = __Pyx_GetName(__pyx_b, __pyx_n_enumerate); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 206; goto __pyx_L1;}
      __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 206; goto __pyx_L1;}
      Py_INCREF(__pyx_v_name);
      PyTuple_SET_ITEM(__pyx_3, 0, __pyx_v_name);
      __pyx_4 = PyObject_CallObject(__pyx_1, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 206; goto __pyx_L1;}
      Py_DECREF(__pyx_1); __pyx_1 = 0;
      Py_DECREF(__pyx_3); __pyx_3 = 0;
      __pyx_1 = PyObject_GetIter(__pyx_4); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 206; goto __pyx_L1;}
      Py_DECREF(__pyx_4); __pyx_4 = 0;
      for (;;) {
        __pyx_3 = PyIter_Next(__pyx_1);
        if (!__pyx_3) {
          if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 206; goto __pyx_L1;}
          break;
        }
        __pyx_4 = PyObject_GetIter(__pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 206; goto __pyx_L1;}
        Py_DECREF(__pyx_3); __pyx_3 = 0;
        __pyx_3 = __Pyx_UnpackItem(__pyx_4); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 206; goto __pyx_L1;}
        Py_DECREF(__pyx_v_j);
        __pyx_v_j = __pyx_3;
        __pyx_3 = 0;
        __pyx_3 = __Pyx_UnpackItem(__pyx_4); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 206; goto __pyx_L1;}
        Py_DECREF(__pyx_v_bytename);
        __pyx_v_bytename = __pyx_3;
        __pyx_3 = 0;
        if (__Pyx_EndUnpack(__pyx_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 206; goto __pyx_L1;}
        Py_DECREF(__pyx_4); __pyx_4 = 0;

        /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":207 */
        __pyx_3 = PyInt_FromLong(__pyx_v_i); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 207; goto __pyx_L1;}
        __pyx_4 = PyTuple_New(3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 207; goto __pyx_L1;}
        Py_INCREF(__pyx_v_self);
        PyTuple_SET_ITEM(__pyx_4, 0, __pyx_v_self);
        PyTuple_SET_ITEM(__pyx_4, 1, __pyx_3);
        Py_INCREF(__pyx_v_j);
        PyTuple_SET_ITEM(__pyx_4, 2, __pyx_v_j);
        __pyx_3 = 0;
        __pyx_3 = PyObject_CallObject(((PyObject*)__pyx_ptype_6rabbyt_6arrays_OffsetUByteArray), __pyx_4); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 207; goto __pyx_L1;}
        Py_DECREF(__pyx_4); __pyx_4 = 0;
        Py_DECREF(__pyx_v_array);
        __pyx_v_array = __pyx_3;
        __pyx_3 = 0;

        /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":208 */
        if (PyObject_SetItem(((struct __pyx_obj_6rabbyt_6arrays_Array2d *)__pyx_v_self)->_attribute_arrays, __pyx_v_bytename, __pyx_v_array) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 208; goto __pyx_L1;}

        /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":209 */
        __pyx_4 = PyObject_GetAttr(((struct __pyx_obj_6rabbyt_6arrays_Array2d *)__pyx_v_self)->_column_arrays, __pyx_n_append); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 209; goto __pyx_L1;}
        __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 209; goto __pyx_L1;}
        Py_INCREF(__pyx_v_array);
        PyTuple_SET_ITEM(__pyx_3, 0, __pyx_v_array);
        __pyx_7 = PyObject_CallObject(__pyx_4, __pyx_3); if (!__pyx_7) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 209; goto __pyx_L1;}
        Py_DECREF(__pyx_4); __pyx_4 = 0;
        Py_DECREF(__pyx_3); __pyx_3 = 0;
        Py_DECREF(__pyx_7); __pyx_7 = 0;
      }
      Py_DECREF(__pyx_1); __pyx_1 = 0;
    }
    __pyx_L5:;
  }
  Py_DECREF(__pyx_2); __pyx_2 = 0;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":212 */
  __pyx_4 = __Pyx_GetName(__pyx_b, __pyx_n_len); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 212; goto __pyx_L1;}
  __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 212; goto __pyx_L1;}
  Py_INCREF(__pyx_v_initial_data);
  PyTuple_SET_ITEM(__pyx_3, 0, __pyx_v_initial_data);
  __pyx_7 = PyObject_CallObject(__pyx_4, __pyx_3); if (!__pyx_7) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 212; goto __pyx_L1;}
  Py_DECREF(__pyx_4); __pyx_4 = 0;
  Py_DECREF(__pyx_3); __pyx_3 = 0;
  Py_DECREF(__pyx_v_initial_len);
  __pyx_v_initial_len = __pyx_7;
  __pyx_7 = 0;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":213 */
  __pyx_8 = PyInt_AsLong(__pyx_v_initial_len); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 213; goto __pyx_L1;}
  for (__pyx_v_i = 0; __pyx_v_i < __pyx_8; ++__pyx_v_i) {

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":214 */
    __pyx_1 = PyInt_FromLong(__pyx_v_i); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 214; goto __pyx_L1;}
    __pyx_2 = PyObject_GetItem(__pyx_v_initial_data, __pyx_1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 214; goto __pyx_L1;}
    Py_DECREF(__pyx_1); __pyx_1 = 0;
    __pyx_4 = PyInt_FromLong(__pyx_v_i); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 214; goto __pyx_L1;}
    if (PyObject_SetItem(__pyx_v_self, __pyx_4, __pyx_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 214; goto __pyx_L1;}
    Py_DECREF(__pyx_4); __pyx_4 = 0;
    Py_DECREF(__pyx_2); __pyx_2 = 0;
  }

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":215 */
  __pyx_8 = PyInt_AsLong(__pyx_v_initial_len); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 215; goto __pyx_L1;}
  __pyx_9 = PyInt_AsLong(__pyx_v_size); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 215; goto __pyx_L1;}
  for (__pyx_v_i = __pyx_8; __pyx_v_i < __pyx_9; ++__pyx_v_i) {

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":216 */
    __pyx_3 = PyInt_FromLong(__pyx_v_i); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 216; goto __pyx_L1;}
    if (PyObject_SetItem(__pyx_v_self, __pyx_3, ((struct __pyx_obj_6rabbyt_6arrays_Array2d *)__pyx_v_self)->_defaults) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 216; goto __pyx_L1;}
    Py_DECREF(__pyx_3); __pyx_3 = 0;
  }

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  Py_XDECREF(__pyx_2);
  Py_XDECREF(__pyx_3);
  Py_XDECREF(__pyx_4);
  Py_XDECREF(__pyx_7);
  __Pyx_AddTraceback("rabbyt.arrays.Array2d.__init__");
  __pyx_r = -1;
  __pyx_L0:;
  Py_DECREF(__pyx_v_name);
  Py_DECREF(__pyx_v_array);
  Py_DECREF(__pyx_v_j);
  Py_DECREF(__pyx_v_bytename);
  Py_DECREF(__pyx_v_initial_len);
  Py_DECREF((PyObject *)__pyx_v_self);
  Py_DECREF(__pyx_v_attributes);
  Py_DECREF(__pyx_v_initial_data);
  Py_DECREF(__pyx_v_swizzles);
  Py_DECREF(__pyx_v_size);
  Py_DECREF(__pyx_v_defaults);
  return __pyx_r;
}

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

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":219 */
  __pyx_1 = ((struct __pyx_obj_6rabbyt_6arrays_Array2d *)__pyx_v_self)->_attribute_arrays != Py_None;
  if (__pyx_1) {
    __pyx_1 = PySequence_Contains(((struct __pyx_obj_6rabbyt_6arrays_Array2d *)__pyx_v_self)->_attribute_arrays, __pyx_v_name); if (__pyx_1 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 220; goto __pyx_L1;}
  }
  if (__pyx_1) {

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":221 */
    __pyx_2 = PyObject_GetItem(((struct __pyx_obj_6rabbyt_6arrays_Array2d *)__pyx_v_self)->_attribute_arrays, __pyx_v_name); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 221; goto __pyx_L1;}
    __pyx_r = __pyx_2;
    __pyx_2 = 0;
    goto __pyx_L0;
    goto __pyx_L2;
  }
  /*else*/ {

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":223 */
    __pyx_2 = PyObject_GenericGetAttr(__pyx_v_self,__pyx_v_name); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 223; goto __pyx_L1;}
    __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);
  __Pyx_AddTraceback("rabbyt.arrays.Array2d.__getattr__");
  __pyx_r = 0;
  __pyx_L0:;
  Py_DECREF((PyObject *)__pyx_v_self);
  Py_DECREF(__pyx_v_name);
  return __pyx_r;
}

static PyObject *__pyx_n_assign_from;

static int __pyx_f_6rabbyt_6arrays_7Array2d___setattr__(PyObject *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_value); /*proto*/
static int __pyx_f_6rabbyt_6arrays_7Array2d___setattr__(PyObject *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_value) {
  int __pyx_r;
  int __pyx_1;
  PyObject *__pyx_2 = 0;
  PyObject *__pyx_3 = 0;
  PyObject *__pyx_4 = 0;
  Py_INCREF((PyObject *)__pyx_v_self);
  Py_INCREF(__pyx_v_name);
  Py_INCREF(__pyx_v_value);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":226 */
  __pyx_1 = ((struct __pyx_obj_6rabbyt_6arrays_Array2d *)__pyx_v_self)->_attribute_arrays != Py_None;
  if (__pyx_1) {
    __pyx_1 = PySequence_Contains(((struct __pyx_obj_6rabbyt_6arrays_Array2d *)__pyx_v_self)->_attribute_arrays, __pyx_v_name); if (__pyx_1 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 227; goto __pyx_L1;}
  }
  if (__pyx_1) {

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":228 */
    __pyx_2 = PyObject_GetItem(((struct __pyx_obj_6rabbyt_6arrays_Array2d *)__pyx_v_self)->_attribute_arrays, __pyx_v_name); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 228; goto __pyx_L1;}
    __pyx_3 = PyObject_GetAttr(__pyx_2, __pyx_n_assign_from); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 228; goto __pyx_L1;}
    Py_DECREF(__pyx_2); __pyx_2 = 0;
    __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 228; goto __pyx_L1;}
    Py_INCREF(__pyx_v_value);
    PyTuple_SET_ITEM(__pyx_2, 0, __pyx_v_value);
    __pyx_4 = PyObject_CallObject(__pyx_3, __pyx_2); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 228; goto __pyx_L1;}
    Py_DECREF(__pyx_3); __pyx_3 = 0;
    Py_DECREF(__pyx_2); __pyx_2 = 0;
    Py_DECREF(__pyx_4); __pyx_4 = 0;
    goto __pyx_L2;
  }
  __pyx_1 = ((struct __pyx_obj_6rabbyt_6arrays_Array2d *)__pyx_v_self)->_swizzles != Py_None;
  if (__pyx_1) {
    __pyx_1 = PySequence_Contains(((struct __pyx_obj_6rabbyt_6arrays_Array2d *)__pyx_v_self)->_swizzles, __pyx_v_name); if (__pyx_1 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 229; goto __pyx_L1;}
  }
  if (__pyx_1) {

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":230 */
    __pyx_3 = __Pyx_GetName(__pyx_b, __pyx_n_NotImplemented); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 230; goto __pyx_L1;}
    __Pyx_Raise(__pyx_3, 0, 0);
    Py_DECREF(__pyx_3); __pyx_3 = 0;
    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 230; goto __pyx_L1;}
    goto __pyx_L2;
  }
  /*else*/ {

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":232 */
    PyObject_GenericSetAttr(__pyx_v_self,__pyx_v_name,__pyx_v_value);
  }
  __pyx_L2:;

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_2);
  Py_XDECREF(__pyx_3);
  Py_XDECREF(__pyx_4);
  __Pyx_AddTraceback("rabbyt.arrays.Array2d.__setattr__");
  __pyx_r = -1;
  __pyx_L0:;
  Py_DECREF((PyObject *)__pyx_v_self);
  Py_DECREF(__pyx_v_name);
  Py_DECREF(__pyx_v_value);
  return __pyx_r;
}

static PyObject *__pyx_n_IndexError;

static PyObject *__pyx_f_6rabbyt_6arrays_7Array2d___getitem__(PyObject *__pyx_v_self, PyObject *__pyx_arg_index); /*proto*/
static PyObject *__pyx_f_6rabbyt_6arrays_7Array2d___getitem__(PyObject *__pyx_v_self, PyObject *__pyx_arg_index) {
  int __pyx_v_index;
  PyObject *__pyx_r;
  PyObject *__pyx_1 = 0;
  PyObject *__pyx_2 = 0;
  PyObject *__pyx_3 = 0;
  PyObject *__pyx_4 = 0;
  int __pyx_5;
  Py_INCREF((PyObject *)__pyx_v_self);
  __pyx_v_index = PyInt_AsLong(__pyx_arg_index); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 234; goto __pyx_L1;}

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":235 */
  __pyx_1 = PyInt_FromLong(__pyx_v_index); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 235; goto __pyx_L1;}
  __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_len); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 235; goto __pyx_L1;}
  __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 235; goto __pyx_L1;}
  Py_INCREF(__pyx_v_self);
  PyTuple_SET_ITEM(__pyx_3, 0, __pyx_v_self);
  __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 235; goto __pyx_L1;}
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  Py_DECREF(__pyx_3); __pyx_3 = 0;
  if (PyObject_Cmp(__pyx_1, __pyx_4, &__pyx_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 235; goto __pyx_L1;}
  __pyx_5 = __pyx_5 >= 0;
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  Py_DECREF(__pyx_4); __pyx_4 = 0;
  if (__pyx_5) {

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":236 */
    __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_IndexError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 236; goto __pyx_L1;}
    __pyx_3 = PyInt_FromLong(__pyx_v_index); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 236; goto __pyx_L1;}
    __pyx_1 = PyTuple_New(1); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 236; goto __pyx_L1;}
    PyTuple_SET_ITEM(__pyx_1, 0, __pyx_3);
    __pyx_3 = 0;
    __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_1); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 236; goto __pyx_L1;}
    Py_DECREF(__pyx_2); __pyx_2 = 0;
    Py_DECREF(__pyx_1); __pyx_1 = 0;
    __Pyx_Raise(__pyx_4, 0, 0);
    Py_DECREF(__pyx_4); __pyx_4 = 0;
    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 236; goto __pyx_L1;}
    goto __pyx_L2;
  }
  __pyx_L2:;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":237 */
  __pyx_3 = PyInt_FromLong(((struct __pyx_vtabstruct_6rabbyt_6arrays_Array2d *)((struct __pyx_obj_6rabbyt_6arrays_Array2d *)__pyx_v_self)->__pyx_base.__pyx_vtab)->__pyx_base._convert_index(((struct __pyx_obj_6rabbyt_6arrays__BaseArray *)__pyx_v_self),__pyx_v_index)); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 237; goto __pyx_L1;}
  __pyx_2 = PyTuple_New(2); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 237; goto __pyx_L1;}
  Py_INCREF(__pyx_v_self);
  PyTuple_SET_ITEM(__pyx_2, 0, __pyx_v_self);
  PyTuple_SET_ITEM(__pyx_2, 1, __pyx_3);
  __pyx_3 = 0;
  __pyx_1 = PyObject_CallObject(((PyObject*)__pyx_ptype_6rabbyt_6arrays_ItemInfo), __pyx_2); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 237; goto __pyx_L1;}
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  __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);
  Py_XDECREF(__pyx_2);
  Py_XDECREF(__pyx_3);
  Py_XDECREF(__pyx_4);
  __Pyx_AddTraceback("rabbyt.arrays.Array2d.__getitem__");
  __pyx_r = 0;
  __pyx_L0:;
  Py_DECREF((PyObject *)__pyx_v_self);
  return __pyx_r;
}

static PyObject *__pyx_n__update;

static int __pyx_f_6rabbyt_6arrays_7Array2d___setitem__(PyObject *__pyx_v_self, PyObject *__pyx_arg_index, PyObject *__pyx_v_value); /*proto*/
static int __pyx_f_6rabbyt_6arrays_7Array2d___setitem__(PyObject *__pyx_v_self, PyObject *__pyx_arg_index, PyObject *__pyx_v_value) {
  int __pyx_v_index;
  int __pyx_r;
  PyObject *__pyx_1 = 0;
  PyObject *__pyx_2 = 0;
  PyObject *__pyx_3 = 0;
  PyObject *__pyx_4 = 0;
  int __pyx_5;
  Py_INCREF((PyObject *)__pyx_v_self);
  Py_INCREF(__pyx_v_value);
  __pyx_v_index = PyInt_AsLong(__pyx_arg_index); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 239; goto __pyx_L1;}

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":240 */
  __pyx_1 = PyInt_FromLong(__pyx_v_index); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 240; goto __pyx_L1;}
  __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_len); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 240; goto __pyx_L1;}
  __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 240; goto __pyx_L1;}
  Py_INCREF(__pyx_v_self);
  PyTuple_SET_ITEM(__pyx_3, 0, __pyx_v_self);
  __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 240; goto __pyx_L1;}
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  Py_DECREF(__pyx_3); __pyx_3 = 0;
  if (PyObject_Cmp(__pyx_1, __pyx_4, &__pyx_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 240; goto __pyx_L1;}
  __pyx_5 = __pyx_5 >= 0;
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  Py_DECREF(__pyx_4); __pyx_4 = 0;
  if (__pyx_5) {

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":241 */
    __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_IndexError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 241; goto __pyx_L1;}
    __pyx_3 = PyInt_FromLong(__pyx_v_index); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 241; goto __pyx_L1;}
    __pyx_1 = PyTuple_New(1); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 241; goto __pyx_L1;}
    PyTuple_SET_ITEM(__pyx_1, 0, __pyx_3);
    __pyx_3 = 0;
    __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_1); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 241; goto __pyx_L1;}
    Py_DECREF(__pyx_2); __pyx_2 = 0;
    Py_DECREF(__pyx_1); __pyx_1 = 0;
    __Pyx_Raise(__pyx_4, 0, 0);
    Py_DECREF(__pyx_4); __pyx_4 = 0;
    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 241; goto __pyx_L1;}
    goto __pyx_L2;
  }
  __pyx_L2:;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":242 */
  __pyx_3 = PyInt_FromLong(((struct __pyx_vtabstruct_6rabbyt_6arrays_Array2d *)((struct __pyx_obj_6rabbyt_6arrays_Array2d *)__pyx_v_self)->__pyx_base.__pyx_vtab)->__pyx_base._convert_index(((struct __pyx_obj_6rabbyt_6arrays__BaseArray *)__pyx_v_self),__pyx_v_index)); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 242; goto __pyx_L1;}
  __pyx_2 = PyTuple_New(2); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 242; goto __pyx_L1;}
  Py_INCREF(__pyx_v_self);
  PyTuple_SET_ITEM(__pyx_2, 0, __pyx_v_self);
  PyTuple_SET_ITEM(__pyx_2, 1, __pyx_3);
  __pyx_3 = 0;
  __pyx_1 = PyObject_CallObject(((PyObject*)__pyx_ptype_6rabbyt_6arrays_ItemInfo), __pyx_2); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 242; goto __pyx_L1;}
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  __pyx_4 = PyObject_GetAttr(__pyx_1, __pyx_n__update); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 242; goto __pyx_L1;}
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 242; goto __pyx_L1;}
  Py_INCREF(__pyx_v_value);
  PyTuple_SET_ITEM(__pyx_3, 0, __pyx_v_value);
  __pyx_2 = PyObject_CallObject(__pyx_4, __pyx_3); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 242; goto __pyx_L1;}
  Py_DECREF(__pyx_4); __pyx_4 = 0;
  Py_DECREF(__pyx_3); __pyx_3 = 0;
  Py_DECREF(__pyx_2); __pyx_2 = 0;

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  Py_XDECREF(__pyx_2);
  Py_XDECREF(__pyx_3);
  Py_XDECREF(__pyx_4);
  __Pyx_AddTraceback("rabbyt.arrays.Array2d.__setitem__");
  __pyx_r = -1;
  __pyx_L0:;
  Py_DECREF((PyObject *)__pyx_v_self);
  Py_DECREF(__pyx_v_value);
  return __pyx_r;
}


static int __pyx_f_6rabbyt_6arrays_12_BaseArray1d___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_f_6rabbyt_6arrays_12_BaseArray1d___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_data_owner = 0;
  int __pyx_r;
  PyObject *__pyx_1 = 0;
  PyObject *__pyx_2 = 0;
  PyObject *__pyx_3 = 0;
  PyObject *__pyx_4 = 0;
  static char *__pyx_argnames[] = {"data_owner",0};
  if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "O", __pyx_argnames, &__pyx_v_data_owner)) return -1;
  Py_INCREF((PyObject *)__pyx_v_self);
  Py_INCREF(__pyx_v_data_owner);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":247 */
  __pyx_1 = PyObject_GetAttr(((PyObject*)__pyx_ptype_6rabbyt_6arrays__BaseArray), __pyx_n___init__); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 247; goto __pyx_L1;}
  __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 247; goto __pyx_L1;}
  Py_INCREF(__pyx_v_self);
  PyTuple_SET_ITEM(__pyx_2, 0, __pyx_v_self);
  __pyx_3 = PyDict_New(); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 247; goto __pyx_L1;}
  if (PyDict_SetItem(__pyx_3, __pyx_n_data_owner, __pyx_v_data_owner) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 247; goto __pyx_L1;}
  __pyx_4 = PyEval_CallObjectWithKeywords(__pyx_1, __pyx_2, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 247; goto __pyx_L1;}
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  Py_DECREF(__pyx_3); __pyx_3 = 0;
  Py_DECREF(__pyx_4); __pyx_4 = 0;

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  Py_XDECREF(__pyx_2);
  Py_XDECREF(__pyx_3);
  Py_XDECREF(__pyx_4);
  __Pyx_AddTraceback("rabbyt.arrays._BaseArray1d.__init__");
  __pyx_r = -1;
  __pyx_L0:;
  Py_DECREF((PyObject *)__pyx_v_self);
  Py_DECREF(__pyx_v_data_owner);
  return __pyx_r;
}

static void __pyx_f_6rabbyt_6arrays_12_BaseArray1d__setitem(struct __pyx_obj_6rabbyt_6arrays__BaseArray1d *__pyx_v_self,int __pyx_v_index,float __pyx_v_value) {
  Py_INCREF((PyObject *)__pyx_v_self);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":250 */
  (__pyx_v_self->__pyx_base._data[(((struct __pyx_vtabstruct_6rabbyt_6arrays__BaseArray1d *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base._convert_index(((struct __pyx_obj_6rabbyt_6arrays__BaseArray *)__pyx_v_self),__pyx_v_index) * __pyx_v_self->__pyx_base._stride)]) = __pyx_v_value;

  Py_DECREF((PyObject *)__pyx_v_self);
}

static float __pyx_f_6rabbyt_6arrays_12_BaseArray1d__getitem(struct __pyx_obj_6rabbyt_6arrays__BaseArray1d *__pyx_v_self,int __pyx_v_index) {
  float __pyx_r;
  Py_INCREF((PyObject *)__pyx_v_self);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":253 */
  __pyx_r = (__pyx_v_self->__pyx_base._data[(((struct __pyx_vtabstruct_6rabbyt_6arrays__BaseArray1d *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base._convert_index(((struct __pyx_obj_6rabbyt_6arrays__BaseArray *)__pyx_v_self),__pyx_v_index) * __pyx_v_self->__pyx_base._stride)]);
  goto __pyx_L0;

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

static PyObject *__pyx_n_ValueError;

static PyObject *__pyx_k14p;

static char (__pyx_k14[]) = "This array is not assignable.";

static int __pyx_f_6rabbyt_6arrays_12_BaseArray1d___setitem__(PyObject *__pyx_v_self, PyObject *__pyx_arg_index, PyObject *__pyx_arg_value); /*proto*/
static int __pyx_f_6rabbyt_6arrays_12_BaseArray1d___setitem__(PyObject *__pyx_v_self, PyObject *__pyx_arg_index, PyObject *__pyx_arg_value) {
  int __pyx_v_index;
  float __pyx_v_value;
  int __pyx_r;
  int __pyx_1;
  PyObject *__pyx_2 = 0;
  PyObject *__pyx_3 = 0;
  PyObject *__pyx_4 = 0;
  PyObject *__pyx_5 = 0;
  Py_INCREF((PyObject *)__pyx_v_self);
  __pyx_v_index = PyInt_AsLong(__pyx_arg_index); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 255; goto __pyx_L1;}
  __pyx_v_value = PyFloat_AsDouble(__pyx_arg_value); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 255; goto __pyx_L1;}

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":256 */
  ((struct __pyx_vtabstruct_6rabbyt_6arrays__BaseArray1d *)((struct __pyx_obj_6rabbyt_6arrays__BaseArray1d *)__pyx_v_self)->__pyx_base.__pyx_vtab)->__pyx_base._sync_data_ptr(((struct __pyx_obj_6rabbyt_6arrays__BaseArray *)__pyx_v_self));

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":257 */
  __pyx_1 = (!((struct __pyx_obj_6rabbyt_6arrays__BaseArray1d *)__pyx_v_self)->__pyx_base._is_assignable);
  if (__pyx_1) {

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":258 */
    __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 258; goto __pyx_L1;}
    __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 258; goto __pyx_L1;}
    Py_INCREF(__pyx_k14p);
    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_k14p);
    __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 258; goto __pyx_L1;}
    Py_DECREF(__pyx_2); __pyx_2 = 0;
    Py_DECREF(__pyx_3); __pyx_3 = 0;
    __Pyx_Raise(__pyx_4, 0, 0);
    Py_DECREF(__pyx_4); __pyx_4 = 0;
    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 258; goto __pyx_L1;}
    goto __pyx_L2;
  }
  __pyx_L2:;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":259 */
  __pyx_2 = PyInt_FromLong(__pyx_v_index); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 259; goto __pyx_L1;}
  __pyx_3 = __Pyx_GetName(__pyx_b, __pyx_n_len); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 259; goto __pyx_L1;}
  __pyx_4 = PyTuple_New(1); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 259; goto __pyx_L1;}
  Py_INCREF(__pyx_v_self);
  PyTuple_SET_ITEM(__pyx_4, 0, __pyx_v_self);
  __pyx_5 = PyObject_CallObject(__pyx_3, __pyx_4); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 259; goto __pyx_L1;}
  Py_DECREF(__pyx_3); __pyx_3 = 0;
  Py_DECREF(__pyx_4); __pyx_4 = 0;
  if (PyObject_Cmp(__pyx_2, __pyx_5, &__pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 259; goto __pyx_L1;}
  __pyx_1 = __pyx_1 >= 0;
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  Py_DECREF(__pyx_5); __pyx_5 = 0;
  if (__pyx_1) {

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":260 */
    __pyx_3 = __Pyx_GetName(__pyx_b, __pyx_n_IndexError); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 260; goto __pyx_L1;}
    __Pyx_Raise(__pyx_3, 0, 0);
    Py_DECREF(__pyx_3); __pyx_3 = 0;
    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 260; goto __pyx_L1;}
    goto __pyx_L3;
  }
  __pyx_L3:;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":261 */
  ((struct __pyx_vtabstruct_6rabbyt_6arrays__BaseArray1d *)((struct __pyx_obj_6rabbyt_6arrays__BaseArray1d *)__pyx_v_self)->__pyx_base.__pyx_vtab)->__pyx_base._setitem(((struct __pyx_obj_6rabbyt_6arrays__BaseArray *)__pyx_v_self),__pyx_v_index,__pyx_v_value);

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_2);
  Py_XDECREF(__pyx_3);
  Py_XDECREF(__pyx_4);
  Py_XDECREF(__pyx_5);
  __Pyx_AddTraceback("rabbyt.arrays._BaseArray1d.__setitem__");
  __pyx_r = -1;
  __pyx_L0:;
  Py_DECREF((PyObject *)__pyx_v_self);
  return __pyx_r;
}

static PyObject *__pyx_f_6rabbyt_6arrays_12_BaseArray1d___getitem__(PyObject *__pyx_v_self, PyObject *__pyx_arg_index); /*proto*/
static PyObject *__pyx_f_6rabbyt_6arrays_12_BaseArray1d___getitem__(PyObject *__pyx_v_self, PyObject *__pyx_arg_index) {
  int __pyx_v_index;
  PyObject *__pyx_r;
  PyObject *__pyx_1 = 0;
  PyObject *__pyx_2 = 0;
  PyObject *__pyx_3 = 0;
  PyObject *__pyx_4 = 0;
  int __pyx_5;
  Py_INCREF((PyObject *)__pyx_v_self);
  __pyx_v_index = PyInt_AsLong(__pyx_arg_index); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 263; goto __pyx_L1;}

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":264 */
  ((struct __pyx_vtabstruct_6rabbyt_6arrays__BaseArray1d *)((struct __pyx_obj_6rabbyt_6arrays__BaseArray1d *)__pyx_v_self)->__pyx_base.__pyx_vtab)->__pyx_base._sync_data_ptr(((struct __pyx_obj_6rabbyt_6arrays__BaseArray *)__pyx_v_self));

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":265 */
  __pyx_1 = PyInt_FromLong(__pyx_v_index); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 265; goto __pyx_L1;}
  __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_len); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 265; goto __pyx_L1;}
  __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 265; goto __pyx_L1;}
  Py_INCREF(__pyx_v_self);
  PyTuple_SET_ITEM(__pyx_3, 0, __pyx_v_self);
  __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 265; goto __pyx_L1;}
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  Py_DECREF(__pyx_3); __pyx_3 = 0;
  if (PyObject_Cmp(__pyx_1, __pyx_4, &__pyx_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 265; goto __pyx_L1;}
  __pyx_5 = __pyx_5 >= 0;
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  Py_DECREF(__pyx_4); __pyx_4 = 0;
  if (__pyx_5) {

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":266 */
    __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_IndexError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 266; goto __pyx_L1;}
    __Pyx_Raise(__pyx_2, 0, 0);
    Py_DECREF(__pyx_2); __pyx_2 = 0;
    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 266; goto __pyx_L1;}
    goto __pyx_L2;
  }
  __pyx_L2:;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":267 */
  __pyx_3 = PyFloat_FromDouble(((struct __pyx_vtabstruct_6rabbyt_6arrays__BaseArray1d *)((struct __pyx_obj_6rabbyt_6arrays__BaseArray1d *)__pyx_v_self)->__pyx_base.__pyx_vtab)->__pyx_base._getitem(((struct __pyx_obj_6rabbyt_6arrays__BaseArray *)__pyx_v_self),__pyx_v_index)); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 267; goto __pyx_L1;}
  __pyx_r = __pyx_3;
  __pyx_3 = 0;
  goto __pyx_L0;

  __pyx_r = Py_None; Py_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  Py_XDECREF(__pyx_2);
  Py_XDECREF(__pyx_3);
  Py_XDECREF(__pyx_4);
  __Pyx_AddTraceback("rabbyt.arrays._BaseArray1d.__getitem__");
  __pyx_r = 0;
  __pyx_L0:;
  Py_DECREF((PyObject *)__pyx_v_self);
  return __pyx_r;
}

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

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":270 */
  __pyx_1 = PyTuple_New(2); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 270; 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_6arrays_ArrayOpAdd), __pyx_1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 270; 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.arrays._BaseArray1d.__add__");
  __pyx_r = 0;
  __pyx_L0:;
  Py_DECREF(__pyx_v_self);
  Py_DECREF(__pyx_v_other);
  return __pyx_r;
}

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

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":273 */
  __pyx_1 = PyTuple_New(2); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 273; 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_6arrays_ArrayOpSub), __pyx_1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 273; 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.arrays._BaseArray1d.__sub__");
  __pyx_r = 0;
  __pyx_L0:;
  Py_DECREF(__pyx_v_self);
  Py_DECREF(__pyx_v_other);
  return __pyx_r;
}

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

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":276 */
  __pyx_1 = PyTuple_New(2); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 276; 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_6arrays_ArrayOpMul), __pyx_1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 276; 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.arrays._BaseArray1d.__mul__");
  __pyx_r = 0;
  __pyx_L0:;
  Py_DECREF(__pyx_v_self);
  Py_DECREF(__pyx_v_other);
  return __pyx_r;
}

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

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":279 */
  __pyx_1 = PyTuple_New(2); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 279; 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_6arrays_ArrayOpDiv), __pyx_1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 279; 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.arrays._BaseArray1d.__div__");
  __pyx_r = 0;
  __pyx_L0:;
  Py_DECREF(__pyx_v_self);
  Py_DECREF(__pyx_v_other);
  return __pyx_r;
}

static PyObject *__pyx_n_assign_to;

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

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":282 */
  __pyx_1 = PyTuple_New(2); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 282; 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_6arrays_ArrayOpAdd), __pyx_1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 282; goto __pyx_L1;}
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  __pyx_1 = PyObject_GetAttr(__pyx_2, __pyx_n_assign_to); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 282; goto __pyx_L1;}
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 282; goto __pyx_L1;}
  Py_INCREF(__pyx_v_self);
  PyTuple_SET_ITEM(__pyx_2, 0, __pyx_v_self);
  __pyx_3 = PyObject_CallObject(__pyx_1, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 282; goto __pyx_L1;}
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  Py_DECREF(__pyx_3); __pyx_3 = 0;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":283 */
  Py_INCREF(__pyx_v_self);
  __pyx_r = __pyx_v_self;
  goto __pyx_L0;

  __pyx_r = Py_None; Py_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  Py_XDECREF(__pyx_2);
  Py_XDECREF(__pyx_3);
  __Pyx_AddTraceback("rabbyt.arrays._BaseArray1d.__iadd__");
  __pyx_r = 0;
  __pyx_L0:;
  Py_DECREF((PyObject *)__pyx_v_self);
  Py_DECREF(__pyx_v_other);
  return __pyx_r;
}

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

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":286 */
  __pyx_1 = PyTuple_New(2); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 286; 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_6arrays_ArrayOpSub), __pyx_1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 286; goto __pyx_L1;}
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  __pyx_1 = PyObject_GetAttr(__pyx_2, __pyx_n_assign_to); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 286; goto __pyx_L1;}
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 286; goto __pyx_L1;}
  Py_INCREF(__pyx_v_self);
  PyTuple_SET_ITEM(__pyx_2, 0, __pyx_v_self);
  __pyx_3 = PyObject_CallObject(__pyx_1, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 286; goto __pyx_L1;}
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  Py_DECREF(__pyx_3); __pyx_3 = 0;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":287 */
  Py_INCREF(__pyx_v_self);
  __pyx_r = __pyx_v_self;
  goto __pyx_L0;

  __pyx_r = Py_None; Py_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  Py_XDECREF(__pyx_2);
  Py_XDECREF(__pyx_3);
  __Pyx_AddTraceback("rabbyt.arrays._BaseArray1d.__isub__");
  __pyx_r = 0;
  __pyx_L0:;
  Py_DECREF((PyObject *)__pyx_v_self);
  Py_DECREF(__pyx_v_other);
  return __pyx_r;
}

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

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":290 */
  __pyx_1 = PyTuple_New(2); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 290; 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_6arrays_ArrayOpMul), __pyx_1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 290; goto __pyx_L1;}
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  __pyx_1 = PyObject_GetAttr(__pyx_2, __pyx_n_assign_to); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 290; goto __pyx_L1;}
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 290; goto __pyx_L1;}
  Py_INCREF(__pyx_v_self);
  PyTuple_SET_ITEM(__pyx_2, 0, __pyx_v_self);
  __pyx_3 = PyObject_CallObject(__pyx_1, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 290; goto __pyx_L1;}
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  Py_DECREF(__pyx_3); __pyx_3 = 0;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":291 */
  Py_INCREF(__pyx_v_self);
  __pyx_r = __pyx_v_self;
  goto __pyx_L0;

  __pyx_r = Py_None; Py_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  Py_XDECREF(__pyx_2);
  Py_XDECREF(__pyx_3);
  __Pyx_AddTraceback("rabbyt.arrays._BaseArray1d.__imul__");
  __pyx_r = 0;
  __pyx_L0:;
  Py_DECREF((PyObject *)__pyx_v_self);
  Py_DECREF(__pyx_v_other);
  return __pyx_r;
}

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

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":294 */
  __pyx_1 = PyTuple_New(2); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 294; 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_6arrays_ArrayOpDiv), __pyx_1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 294; goto __pyx_L1;}
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  __pyx_1 = PyObject_GetAttr(__pyx_2, __pyx_n_assign_to); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 294; goto __pyx_L1;}
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 294; goto __pyx_L1;}
  Py_INCREF(__pyx_v_self);
  PyTuple_SET_ITEM(__pyx_2, 0, __pyx_v_self);
  __pyx_3 = PyObject_CallObject(__pyx_1, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 294; goto __pyx_L1;}
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  Py_DECREF(__pyx_3); __pyx_3 = 0;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":295 */
  Py_INCREF(__pyx_v_self);
  __pyx_r = __pyx_v_self;
  goto __pyx_L0;

  __pyx_r = Py_None; Py_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  Py_XDECREF(__pyx_2);
  Py_XDECREF(__pyx_3);
  __Pyx_AddTraceback("rabbyt.arrays._BaseArray1d.__idiv__");
  __pyx_r = 0;
  __pyx_L0:;
  Py_DECREF((PyObject *)__pyx_v_self);
  Py_DECREF(__pyx_v_other);
  return __pyx_r;
}

static PyObject *__pyx_n_float;
static PyObject *__pyx_n_TypeError;
static PyObject *__pyx_n_hasattr;

static PyObject *__pyx_k15p;
static PyObject *__pyx_k16p;

static char (__pyx_k15[]) = "This array is not assignable";
static char (__pyx_k16[]) = "Mismatched lengths";

static PyObject *__pyx_f_6rabbyt_6arrays_12_BaseArray1d_assign_from(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6rabbyt_6arrays_12_BaseArray1d_assign_from[] = "\n        assigns our value *from* other array/iter/operation.\n        ";
static PyObject *__pyx_f_6rabbyt_6arrays_12_BaseArray1d_assign_from(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_source = 0;
  int __pyx_v_i;
  float __pyx_v_f;
  PyObject *__pyx_r;
  int __pyx_1;
  PyObject *__pyx_2 = 0;
  PyObject *__pyx_3 = 0;
  PyObject *__pyx_4 = 0;
  float __pyx_5;
  PyObject *__pyx_6 = 0;
  int __pyx_7;
  static char *__pyx_argnames[] = {"source",0};
  if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "O", __pyx_argnames, &__pyx_v_source)) return 0;
  Py_INCREF((PyObject *)__pyx_v_self);
  Py_INCREF(__pyx_v_source);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":302 */
  ((struct __pyx_vtabstruct_6rabbyt_6arrays__BaseArray1d *)((struct __pyx_obj_6rabbyt_6arrays__BaseArray1d *)__pyx_v_self)->__pyx_base.__pyx_vtab)->__pyx_base._sync_data_ptr(((struct __pyx_obj_6rabbyt_6arrays__BaseArray *)__pyx_v_self));

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":303 */
  __pyx_1 = (!((struct __pyx_obj_6rabbyt_6arrays__BaseArray1d *)__pyx_v_self)->__pyx_base._is_assignable);
  if (__pyx_1) {

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":304 */
    __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 304; goto __pyx_L1;}
    __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 304; goto __pyx_L1;}
    Py_INCREF(__pyx_k15p);
    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_k15p);
    __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 304; goto __pyx_L1;}
    Py_DECREF(__pyx_2); __pyx_2 = 0;
    Py_DECREF(__pyx_3); __pyx_3 = 0;
    __Pyx_Raise(__pyx_4, 0, 0);
    Py_DECREF(__pyx_4); __pyx_4 = 0;
    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 304; goto __pyx_L1;}
    goto __pyx_L2;
  }
  __pyx_L2:;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":307 */
  /*try:*/ {

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":308 */
    __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_float); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 308; goto __pyx_L3;}
    __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 308; goto __pyx_L3;}
    Py_INCREF(__pyx_v_source);
    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_v_source);
    __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 308; goto __pyx_L3;}
    Py_DECREF(__pyx_2); __pyx_2 = 0;
    Py_DECREF(__pyx_3); __pyx_3 = 0;
    __pyx_5 = PyFloat_AsDouble(__pyx_4); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 308; goto __pyx_L3;}
    Py_DECREF(__pyx_4); __pyx_4 = 0;
    __pyx_v_f = __pyx_5;

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":309 */
    __pyx_1 = ((struct __pyx_obj_6rabbyt_6arrays__BaseArray1d *)__pyx_v_self)->__pyx_base._count;
    for (__pyx_v_i = 0; __pyx_v_i < __pyx_1; ++__pyx_v_i) {

      /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":310 */
      ((struct __pyx_vtabstruct_6rabbyt_6arrays__BaseArray1d *)((struct __pyx_obj_6rabbyt_6arrays__BaseArray1d *)__pyx_v_self)->__pyx_base.__pyx_vtab)->__pyx_base._setitem(((struct __pyx_obj_6rabbyt_6arrays__BaseArray *)__pyx_v_self),__pyx_v_i,__pyx_v_f);
    }

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":311 */
    __pyx_r = Py_None; Py_INCREF(Py_None);
    goto __pyx_L0;
  }
  goto __pyx_L4;
  __pyx_L3:;
  Py_XDECREF(__pyx_2); __pyx_2 = 0;
  Py_XDECREF(__pyx_3); __pyx_3 = 0;
  Py_XDECREF(__pyx_4); __pyx_4 = 0;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":312 */
  __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_TypeError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 312; goto __pyx_L1;}
  __pyx_1 = PyErr_ExceptionMatches(__pyx_2);
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  if (__pyx_1) {
    __Pyx_AddTraceback("rabbyt.arrays.assign_from");
    __pyx_3 = __Pyx_GetExcValue(); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 312; goto __pyx_L1;}
    Py_DECREF(__pyx_3); __pyx_3 = 0;

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":313 */
    goto __pyx_L4;
  }
  goto __pyx_L1;
  __pyx_L4:;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":315 */
  __pyx_4 = __Pyx_GetName(__pyx_b, __pyx_n_len); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 315; goto __pyx_L1;}
  __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 315; goto __pyx_L1;}
  Py_INCREF(__pyx_v_source);
  PyTuple_SET_ITEM(__pyx_2, 0, __pyx_v_source);
  __pyx_3 = PyObject_CallObject(__pyx_4, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 315; goto __pyx_L1;}
  Py_DECREF(__pyx_4); __pyx_4 = 0;
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  __pyx_4 = __Pyx_GetName(__pyx_b, __pyx_n_len); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 315; goto __pyx_L1;}
  __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 315; goto __pyx_L1;}
  Py_INCREF(__pyx_v_self);
  PyTuple_SET_ITEM(__pyx_2, 0, __pyx_v_self);
  __pyx_6 = PyObject_CallObject(__pyx_4, __pyx_2); if (!__pyx_6) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 315; goto __pyx_L1;}
  Py_DECREF(__pyx_4); __pyx_4 = 0;
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  if (PyObject_Cmp(__pyx_3, __pyx_6, &__pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 315; goto __pyx_L1;}
  __pyx_1 = __pyx_1 == 0;
  Py_DECREF(__pyx_3); __pyx_3 = 0;
  Py_DECREF(__pyx_6); __pyx_6 = 0;
  __pyx_7 = (!__pyx_1);
  if (__pyx_7) {

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":316 */
    __pyx_4 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 316; goto __pyx_L1;}
    __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 316; goto __pyx_L1;}
    Py_INCREF(__pyx_k16p);
    PyTuple_SET_ITEM(__pyx_2, 0, __pyx_k16p);
    __pyx_3 = PyObject_CallObject(__pyx_4, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 316; goto __pyx_L1;}
    Py_DECREF(__pyx_4); __pyx_4 = 0;
    Py_DECREF(__pyx_2); __pyx_2 = 0;
    __Pyx_Raise(__pyx_3, 0, 0);
    Py_DECREF(__pyx_3); __pyx_3 = 0;
    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 316; goto __pyx_L1;}
    goto __pyx_L7;
  }
  __pyx_L7:;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":317 */
  __pyx_6 = __Pyx_GetName(__pyx_b, __pyx_n_hasattr); if (!__pyx_6) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 317; goto __pyx_L1;}
  __pyx_4 = PyTuple_New(2); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 317; goto __pyx_L1;}
  Py_INCREF(__pyx_v_source);
  PyTuple_SET_ITEM(__pyx_4, 0, __pyx_v_source);
  Py_INCREF(__pyx_n_assign_to);
  PyTuple_SET_ITEM(__pyx_4, 1, __pyx_n_assign_to);
  __pyx_2 = PyObject_CallObject(__pyx_6, __pyx_4); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 317; goto __pyx_L1;}
  Py_DECREF(__pyx_6); __pyx_6 = 0;
  Py_DECREF(__pyx_4); __pyx_4 = 0;
  __pyx_1 = PyObject_IsTrue(__pyx_2); if (__pyx_1 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 317; goto __pyx_L1;}
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  if (__pyx_1) {

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":318 */
    __pyx_3 = PyObject_GetAttr(__pyx_v_source, __pyx_n_assign_to); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 318; goto __pyx_L1;}
    __pyx_6 = PyTuple_New(1); if (!__pyx_6) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 318; goto __pyx_L1;}
    Py_INCREF(__pyx_v_self);
    PyTuple_SET_ITEM(__pyx_6, 0, __pyx_v_self);
    __pyx_4 = PyObject_CallObject(__pyx_3, __pyx_6); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 318; goto __pyx_L1;}
    Py_DECREF(__pyx_3); __pyx_3 = 0;
    Py_DECREF(__pyx_6); __pyx_6 = 0;
    Py_DECREF(__pyx_4); __pyx_4 = 0;
    goto __pyx_L8;
  }
  /*else*/ {

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":320 */
    __pyx_7 = ((struct __pyx_obj_6rabbyt_6arrays__BaseArray1d *)__pyx_v_self)->__pyx_base._count;
    for (__pyx_v_i = 0; __pyx_v_i < __pyx_7; ++__pyx_v_i) {

      /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":321 */
      __pyx_2 = PyInt_FromLong(__pyx_v_i); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 321; goto __pyx_L1;}
      __pyx_3 = PyObject_GetItem(__pyx_v_source, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 321; goto __pyx_L1;}
      Py_DECREF(__pyx_2); __pyx_2 = 0;
      __pyx_5 = PyFloat_AsDouble(__pyx_3); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 321; goto __pyx_L1;}
      Py_DECREF(__pyx_3); __pyx_3 = 0;
      ((struct __pyx_vtabstruct_6rabbyt_6arrays__BaseArray1d *)((struct __pyx_obj_6rabbyt_6arrays__BaseArray1d *)__pyx_v_self)->__pyx_base.__pyx_vtab)->__pyx_base._setitem(((struct __pyx_obj_6rabbyt_6arrays__BaseArray *)__pyx_v_self),__pyx_v_i,__pyx_5);
    }
  }
  __pyx_L8:;

  __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_6);
  __Pyx_AddTraceback("rabbyt.arrays._BaseArray1d.assign_from");
  __pyx_r = 0;
  __pyx_L0:;
  Py_DECREF((PyObject *)__pyx_v_self);
  Py_DECREF(__pyx_v_source);
  return __pyx_r;
}

static PyObject *__pyx_k18p;
static PyObject *__pyx_k19p;

static char (__pyx_k18[]) = "Mismatched lengths";
static char (__pyx_k19[]) = "Array is not assignable";

static PyObject *__pyx_f_6rabbyt_6arrays_12_BaseArray1d_assign_to(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6rabbyt_6arrays_12_BaseArray1d_assign_to[] = "\n        Assigns our value *to* another array.\n        ";
static PyObject *__pyx_f_6rabbyt_6arrays_12_BaseArray1d_assign_to(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct __pyx_obj_6rabbyt_6arrays__BaseArray1d *__pyx_v_target = 0;
  int __pyx_v_i;
  PyObject *__pyx_r;
  PyObject *__pyx_1 = 0;
  PyObject *__pyx_2 = 0;
  PyObject *__pyx_3 = 0;
  PyObject *__pyx_4 = 0;
  int __pyx_5;
  int __pyx_6;
  static char *__pyx_argnames[] = {"target",0};
  if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "O", __pyx_argnames, &__pyx_v_target)) return 0;
  Py_INCREF((PyObject *)__pyx_v_self);
  Py_INCREF((PyObject *)__pyx_v_target);
  if (!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_target), __pyx_ptype_6rabbyt_6arrays__BaseArray1d, 1, "target")) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 323; goto __pyx_L1;}

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":327 */
  ((struct __pyx_vtabstruct_6rabbyt_6arrays__BaseArray1d *)((struct __pyx_obj_6rabbyt_6arrays__BaseArray1d *)__pyx_v_self)->__pyx_base.__pyx_vtab)->__pyx_base._sync_data_ptr(((struct __pyx_obj_6rabbyt_6arrays__BaseArray *)__pyx_v_self));

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":328 */
  ((struct __pyx_vtabstruct_6rabbyt_6arrays__BaseArray1d *)__pyx_v_target->__pyx_base.__pyx_vtab)->__pyx_base._sync_data_ptr(((struct __pyx_obj_6rabbyt_6arrays__BaseArray *)__pyx_v_target));

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":329 */
  __pyx_1 = __Pyx_GetName(__pyx_b, __pyx_n_len); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 329; goto __pyx_L1;}
  __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 329; goto __pyx_L1;}
  Py_INCREF(((PyObject *)__pyx_v_target));
  PyTuple_SET_ITEM(__pyx_2, 0, ((PyObject *)__pyx_v_target));
  __pyx_3 = PyObject_CallObject(__pyx_1, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 329; goto __pyx_L1;}
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  __pyx_1 = __Pyx_GetName(__pyx_b, __pyx_n_len); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 329; goto __pyx_L1;}
  __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 329; goto __pyx_L1;}
  Py_INCREF(__pyx_v_self);
  PyTuple_SET_ITEM(__pyx_2, 0, __pyx_v_self);
  __pyx_4 = PyObject_CallObject(__pyx_1, __pyx_2); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 329; goto __pyx_L1;}
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  if (PyObject_Cmp(__pyx_3, __pyx_4, &__pyx_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 329; goto __pyx_L1;}
  __pyx_5 = __pyx_5 == 0;
  Py_DECREF(__pyx_3); __pyx_3 = 0;
  Py_DECREF(__pyx_4); __pyx_4 = 0;
  __pyx_6 = (!__pyx_5);
  if (__pyx_6) {

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":330 */
    __pyx_1 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 330; goto __pyx_L1;}
    __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 330; goto __pyx_L1;}
    Py_INCREF(__pyx_k18p);
    PyTuple_SET_ITEM(__pyx_2, 0, __pyx_k18p);
    __pyx_3 = PyObject_CallObject(__pyx_1, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 330; goto __pyx_L1;}
    Py_DECREF(__pyx_1); __pyx_1 = 0;
    Py_DECREF(__pyx_2); __pyx_2 = 0;
    __Pyx_Raise(__pyx_3, 0, 0);
    Py_DECREF(__pyx_3); __pyx_3 = 0;
    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 330; goto __pyx_L1;}
    goto __pyx_L2;
  }
  __pyx_L2:;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":331 */
  __pyx_5 = (!__pyx_v_target->__pyx_base._is_assignable);
  if (__pyx_5) {

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":332 */
    __pyx_4 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 332; goto __pyx_L1;}
    __pyx_1 = PyTuple_New(1); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 332; goto __pyx_L1;}
    Py_INCREF(__pyx_k19p);
    PyTuple_SET_ITEM(__pyx_1, 0, __pyx_k19p);
    __pyx_2 = PyObject_CallObject(__pyx_4, __pyx_1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 332; goto __pyx_L1;}
    Py_DECREF(__pyx_4); __pyx_4 = 0;
    Py_DECREF(__pyx_1); __pyx_1 = 0;
    __Pyx_Raise(__pyx_2, 0, 0);
    Py_DECREF(__pyx_2); __pyx_2 = 0;
    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 332; goto __pyx_L1;}
    goto __pyx_L3;
  }
  __pyx_L3:;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":334 */
  __pyx_6 = __pyx_v_target->__pyx_base._count;
  for (__pyx_v_i = 0; __pyx_v_i < __pyx_6; ++__pyx_v_i) {

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":335 */
    ((struct __pyx_vtabstruct_6rabbyt_6arrays__BaseArray1d *)__pyx_v_target->__pyx_base.__pyx_vtab)->__pyx_base._setitem(((struct __pyx_obj_6rabbyt_6arrays__BaseArray *)__pyx_v_target),__pyx_v_i,((struct __pyx_vtabstruct_6rabbyt_6arrays__BaseArray1d *)((struct __pyx_obj_6rabbyt_6arrays__BaseArray1d *)__pyx_v_self)->__pyx_base.__pyx_vtab)->__pyx_base._getitem(((struct __pyx_obj_6rabbyt_6arrays__BaseArray *)__pyx_v_self),__pyx_v_i));
  }

  __pyx_r = Py_None; Py_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  Py_XDECREF(__pyx_2);
  Py_XDECREF(__pyx_3);
  Py_XDECREF(__pyx_4);
  __Pyx_AddTraceback("rabbyt.arrays._BaseArray1d.assign_to");
  __pyx_r = 0;
  __pyx_L0:;
  Py_DECREF((PyObject *)__pyx_v_self);
  Py_DECREF((PyObject *)__pyx_v_target);
  return __pyx_r;
}

static PyObject *__pyx_n_str;
static PyObject *__pyx_n___class__;
static PyObject *__pyx_n___name__;
static PyObject *__pyx_n_join;

static PyObject *__pyx_k21p;
static PyObject *__pyx_k20p;

static char (__pyx_k20[]) = "<%s [%s]>";
static char (__pyx_k21[]) = ", ";

static PyObject *__pyx_f_6rabbyt_6arrays_12_BaseArray1d___repr__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_f_6rabbyt_6arrays_12_BaseArray1d___repr__(PyObject *__pyx_v_self) {
  PyObject *__pyx_v_items;
  PyObject *__pyx_v_f;
  PyObject *__pyx_r;
  PyObject *__pyx_1 = 0;
  PyObject *__pyx_2 = 0;
  PyObject *__pyx_3 = 0;
  PyObject *__pyx_4 = 0;
  PyObject *__pyx_5 = 0;
  Py_INCREF((PyObject *)__pyx_v_self);
  __pyx_v_items = Py_None; Py_INCREF(Py_None);
  __pyx_v_f = Py_None; Py_INCREF(Py_None);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":338 */
  __pyx_1 = PyList_New(0); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 338; goto __pyx_L1;}
  Py_DECREF(__pyx_v_items);
  __pyx_v_items = __pyx_1;
  __pyx_1 = 0;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":339 */
  __pyx_1 = PyObject_GetIter(__pyx_v_self); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 339; goto __pyx_L1;}
  for (;;) {
    __pyx_2 = PyIter_Next(__pyx_1);
    if (!__pyx_2) {
      if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 339; goto __pyx_L1;}
      break;
    }
    Py_DECREF(__pyx_v_f);
    __pyx_v_f = __pyx_2;
    __pyx_2 = 0;

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":340 */
    __pyx_2 = PyObject_GetAttr(__pyx_v_items, __pyx_n_append); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 340; goto __pyx_L1;}
    __pyx_3 = __Pyx_GetName(__pyx_b, __pyx_n_str); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 340; goto __pyx_L1;}
    __pyx_4 = PyTuple_New(1); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 340; goto __pyx_L1;}
    Py_INCREF(__pyx_v_f);
    PyTuple_SET_ITEM(__pyx_4, 0, __pyx_v_f);
    __pyx_5 = PyObject_CallObject(__pyx_3, __pyx_4); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 340; goto __pyx_L1;}
    Py_DECREF(__pyx_3); __pyx_3 = 0;
    Py_DECREF(__pyx_4); __pyx_4 = 0;
    __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 340; goto __pyx_L1;}
    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_5);
    __pyx_5 = 0;
    __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 340; goto __pyx_L1;}
    Py_DECREF(__pyx_2); __pyx_2 = 0;
    Py_DECREF(__pyx_3); __pyx_3 = 0;
    Py_DECREF(__pyx_4); __pyx_4 = 0;
  }
  Py_DECREF(__pyx_1); __pyx_1 = 0;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":341 */
  __pyx_5 = PyObject_GetAttr(__pyx_v_self, __pyx_n___class__); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 341; goto __pyx_L1;}
  __pyx_2 = PyObject_GetAttr(__pyx_5, __pyx_n___name__); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 341; goto __pyx_L1;}
  Py_DECREF(__pyx_5); __pyx_5 = 0;
  __pyx_3 = PyObject_GetAttr(__pyx_k21p, __pyx_n_join); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 341; goto __pyx_L1;}
  __pyx_4 = PyTuple_New(1); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 341; goto __pyx_L1;}
  Py_INCREF(__pyx_v_items);
  PyTuple_SET_ITEM(__pyx_4, 0, __pyx_v_items);
  __pyx_1 = PyObject_CallObject(__pyx_3, __pyx_4); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 341; goto __pyx_L1;}
  Py_DECREF(__pyx_3); __pyx_3 = 0;
  Py_DECREF(__pyx_4); __pyx_4 = 0;
  __pyx_5 = PyTuple_New(2); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 341; goto __pyx_L1;}
  PyTuple_SET_ITEM(__pyx_5, 0, __pyx_2);
  PyTuple_SET_ITEM(__pyx_5, 1, __pyx_1);
  __pyx_2 = 0;
  __pyx_1 = 0;
  __pyx_3 = PyNumber_Remainder(__pyx_k20p, __pyx_5); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 341; goto __pyx_L1;}
  Py_DECREF(__pyx_5); __pyx_5 = 0;
  __pyx_r = __pyx_3;
  __pyx_3 = 0;
  goto __pyx_L0;

  __pyx_r = Py_None; Py_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  Py_XDECREF(__pyx_2);
  Py_XDECREF(__pyx_3);
  Py_XDECREF(__pyx_4);
  Py_XDECREF(__pyx_5);
  __Pyx_AddTraceback("rabbyt.arrays._BaseArray1d.__repr__");
  __pyx_r = 0;
  __pyx_L0:;
  Py_DECREF(__pyx_v_items);
  Py_DECREF(__pyx_v_f);
  Py_DECREF((PyObject *)__pyx_v_self);
  return __pyx_r;
}

static PyObject *__pyx_f_6rabbyt_6arrays_12_BaseArray1d_stretch(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6rabbyt_6arrays_12_BaseArray1d_stretch[] = "\n        ``stretch(times)``\n\n        Returns a new stretched version of this array.  Each item is\n        duplicated ``times`` times.\n\n        For example, ``Array1d([1,2,3]).stretch(3)`` will appear as\n        ``Array1d([1,1,1,2,2,2,3,3,3])``.\n\n        Note that what ``stretch`` returns is a new array, so you can perform\n        arithmetic operations on it and such, but *no data* is copied.  If\n        you make a modification to the origial array it will appear in the\n        stretched version, and vice-versa.\n        ";
static PyObject *__pyx_f_6rabbyt_6arrays_12_BaseArray1d_stretch(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  int __pyx_v_times;
  PyObject *__pyx_r;
  PyObject *__pyx_1 = 0;
  PyObject *__pyx_2 = 0;
  static char *__pyx_argnames[] = {"times",0};
  if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "i", __pyx_argnames, &__pyx_v_times)) return 0;
  Py_INCREF((PyObject *)__pyx_v_self);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":358 */
  __pyx_1 = PyInt_FromLong(__pyx_v_times); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 358; goto __pyx_L1;}
  __pyx_2 = PyTuple_New(2); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 358; goto __pyx_L1;}
  Py_INCREF(__pyx_v_self);
  PyTuple_SET_ITEM(__pyx_2, 0, __pyx_v_self);
  PyTuple_SET_ITEM(__pyx_2, 1, __pyx_1);
  __pyx_1 = 0;
  __pyx_1 = PyObject_CallObject(((PyObject*)__pyx_ptype_6rabbyt_6arrays__StretchedArray1d), __pyx_2); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 358; goto __pyx_L1;}
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  __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);
  Py_XDECREF(__pyx_2);
  __Pyx_AddTraceback("rabbyt.arrays._BaseArray1d.stretch");
  __pyx_r = 0;
  __pyx_L0:;
  Py_DECREF((PyObject *)__pyx_v_self);
  return __pyx_r;
}

static PyObject *__pyx_f_6rabbyt_6arrays_12_BaseArray1d_repeat(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6rabbyt_6arrays_12_BaseArray1d_repeat[] = "\n        ``repeat(times)``\n\n        Returns a repeated version of this array.\n\n        For example, ``Array1d([1,2,3]).repeat(3)`` will appear like\n        ``Array1d([1,2,3,1,2,3,1,2,3])``.\n\n        Just like ``stretch()``, ``repeat()`` is lazy.  No data is copied, and\n        if you modify the origial array the repeated array will change with\n        it.\n        ";
static PyObject *__pyx_f_6rabbyt_6arrays_12_BaseArray1d_repeat(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  int __pyx_v_times;
  PyObject *__pyx_r;
  PyObject *__pyx_1 = 0;
  PyObject *__pyx_2 = 0;
  static char *__pyx_argnames[] = {"times",0};
  if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "i", __pyx_argnames, &__pyx_v_times)) return 0;
  Py_INCREF((PyObject *)__pyx_v_self);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":373 */
  __pyx_1 = PyInt_FromLong(__pyx_v_times); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 373; goto __pyx_L1;}
  __pyx_2 = PyTuple_New(2); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 373; goto __pyx_L1;}
  Py_INCREF(__pyx_v_self);
  PyTuple_SET_ITEM(__pyx_2, 0, __pyx_v_self);
  PyTuple_SET_ITEM(__pyx_2, 1, __pyx_1);
  __pyx_1 = 0;
  __pyx_1 = PyObject_CallObject(((PyObject*)__pyx_ptype_6rabbyt_6arrays__RepeatedArray1d), __pyx_2); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 373; goto __pyx_L1;}
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  __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);
  Py_XDECREF(__pyx_2);
  __Pyx_AddTraceback("rabbyt.arrays._BaseArray1d.repeat");
  __pyx_r = 0;
  __pyx_L0:;
  Py_DECREF((PyObject *)__pyx_v_self);
  return __pyx_r;
}

static PyObject *__pyx_n_size;


static PyObject *__pyx_f_6rabbyt_6arrays_12_BaseArray1d_copy(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6rabbyt_6arrays_12_BaseArray1d_copy[] = "\n        ``copy()``\n\n        Returns a new ``Array1d`` with a copy of our data.  (The data is\n        copied immediately; there\'s nothing lazy here.)\n        ";
static PyObject *__pyx_f_6rabbyt_6arrays_12_BaseArray1d_copy(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_s;
  PyObject *__pyx_r;
  PyObject *__pyx_1 = 0;
  PyObject *__pyx_2 = 0;
  PyObject *__pyx_3 = 0;
  PyObject *__pyx_4 = 0;
  PyObject *__pyx_5 = 0;
  static char *__pyx_argnames[] = {0};
  if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "", __pyx_argnames)) return 0;
  Py_INCREF((PyObject *)__pyx_v_self);
  __pyx_v_s = Py_None; Py_INCREF(Py_None);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":382 */
  __pyx_1 = PyTuple_New(0); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 382; goto __pyx_L1;}
  __pyx_2 = PyDict_New(); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 382; goto __pyx_L1;}
  __pyx_3 = __Pyx_GetName(__pyx_b, __pyx_n_len); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 382; goto __pyx_L1;}
  __pyx_4 = PyTuple_New(1); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 382; goto __pyx_L1;}
  Py_INCREF(__pyx_v_self);
  PyTuple_SET_ITEM(__pyx_4, 0, __pyx_v_self);
  __pyx_5 = PyObject_CallObject(__pyx_3, __pyx_4); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 382; goto __pyx_L1;}
  Py_DECREF(__pyx_3); __pyx_3 = 0;
  Py_DECREF(__pyx_4); __pyx_4 = 0;
  if (PyDict_SetItem(__pyx_2, __pyx_n_size, __pyx_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 382; goto __pyx_L1;}
  Py_DECREF(__pyx_5); __pyx_5 = 0;
  __pyx_3 = PyEval_CallObjectWithKeywords(((PyObject*)__pyx_ptype_6rabbyt_6arrays_Array1d), __pyx_1, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 382; goto __pyx_L1;}
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  Py_DECREF(__pyx_v_s);
  __pyx_v_s = __pyx_3;
  __pyx_3 = 0;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":383 */
  __pyx_4 = PyObject_GetAttr(__pyx_v_self, __pyx_n_assign_to); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 383; goto __pyx_L1;}
  __pyx_5 = PyTuple_New(1); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 383; goto __pyx_L1;}
  Py_INCREF(__pyx_v_s);
  PyTuple_SET_ITEM(__pyx_5, 0, __pyx_v_s);
  __pyx_1 = PyObject_CallObject(__pyx_4, __pyx_5); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 383; goto __pyx_L1;}
  Py_DECREF(__pyx_4); __pyx_4 = 0;
  Py_DECREF(__pyx_5); __pyx_5 = 0;
  Py_DECREF(__pyx_1); __pyx_1 = 0;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":384 */
  Py_INCREF(__pyx_v_s);
  __pyx_r = __pyx_v_s;
  goto __pyx_L0;

  __pyx_r = Py_None; Py_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  Py_XDECREF(__pyx_2);
  Py_XDECREF(__pyx_3);
  Py_XDECREF(__pyx_4);
  Py_XDECREF(__pyx_5);
  __Pyx_AddTraceback("rabbyt.arrays._BaseArray1d.copy");
  __pyx_r = 0;
  __pyx_L0:;
  Py_DECREF(__pyx_v_s);
  Py_DECREF((PyObject *)__pyx_v_self);
  return __pyx_r;
}


static int __pyx_f_6rabbyt_6arrays_7Array1d___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_f_6rabbyt_6arrays_7Array1d___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_initial_data = 0;
  PyObject *__pyx_v_size = 0;
  PyObject *__pyx_v_default = 0;
  int __pyx_v_i;
  int __pyx_v_initial_len;
  int __pyx_r;
  PyObject *__pyx_1 = 0;
  PyObject *__pyx_2 = 0;
  PyObject *__pyx_3 = 0;
  PyObject *__pyx_4 = 0;
  int __pyx_5;
  float __pyx_6;
  long __pyx_7;
  static char *__pyx_argnames[] = {"initial_data","size","default",0};
  __pyx_v_initial_data = __pyx_k7;
  __pyx_v_size = __pyx_k8;
  __pyx_v_default = __pyx_k9;
  if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "|OOO", __pyx_argnames, &__pyx_v_initial_data, &__pyx_v_size, &__pyx_v_default)) return -1;
  Py_INCREF((PyObject *)__pyx_v_self);
  Py_INCREF(__pyx_v_initial_data);
  Py_INCREF(__pyx_v_size);
  Py_INCREF(__pyx_v_default);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":409 */
  __pyx_1 = PyObject_GetAttr(((PyObject*)__pyx_ptype_6rabbyt_6arrays__BaseArray1d), __pyx_n___init__); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 409; goto __pyx_L1;}
  __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 409; goto __pyx_L1;}
  Py_INCREF(__pyx_v_self);
  PyTuple_SET_ITEM(__pyx_2, 0, __pyx_v_self);
  __pyx_3 = PyDict_New(); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 409; goto __pyx_L1;}
  if (PyDict_SetItem(__pyx_3, __pyx_n_data_owner, __pyx_v_self) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 409; goto __pyx_L1;}
  __pyx_4 = PyEval_CallObjectWithKeywords(__pyx_1, __pyx_2, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 409; goto __pyx_L1;}
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  Py_DECREF(__pyx_3); __pyx_3 = 0;
  Py_DECREF(__pyx_4); __pyx_4 = 0;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":410 */
  ((struct __pyx_obj_6rabbyt_6arrays_Array1d *)__pyx_v_self)->__pyx_base.__pyx_base._stride = 1;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":411 */
  __pyx_1 = __Pyx_GetName(__pyx_b, __pyx_n_True); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 411; goto __pyx_L1;}
  __pyx_5 = PyInt_AsLong(__pyx_1); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 411; goto __pyx_L1;}
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  ((struct __pyx_obj_6rabbyt_6arrays_Array1d *)__pyx_v_self)->__pyx_base.__pyx_base._is_assignable = __pyx_5;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":413 */
  __pyx_6 = PyFloat_AsDouble(__pyx_v_default); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 413; goto __pyx_L1;}
  ((struct __pyx_obj_6rabbyt_6arrays_Array1d *)__pyx_v_self)->_default = __pyx_6;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":415 */
  __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_max); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 415; goto __pyx_L1;}
  __pyx_3 = __Pyx_GetName(__pyx_b, __pyx_n_len); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 415; goto __pyx_L1;}
  __pyx_4 = PyTuple_New(1); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 415; goto __pyx_L1;}
  Py_INCREF(__pyx_v_initial_data);
  PyTuple_SET_ITEM(__pyx_4, 0, __pyx_v_initial_data);
  __pyx_1 = PyObject_CallObject(__pyx_3, __pyx_4); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 415; goto __pyx_L1;}
  Py_DECREF(__pyx_3); __pyx_3 = 0;
  Py_DECREF(__pyx_4); __pyx_4 = 0;
  __pyx_3 = PyTuple_New(2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 415; goto __pyx_L1;}
  PyTuple_SET_ITEM(__pyx_3, 0, __pyx_1);
  Py_INCREF(__pyx_v_size);
  PyTuple_SET_ITEM(__pyx_3, 1, __pyx_v_size);
  __pyx_1 = 0;
  __pyx_4 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 415; goto __pyx_L1;}
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  Py_DECREF(__pyx_3); __pyx_3 = 0;
  Py_DECREF(__pyx_v_size);
  __pyx_v_size = __pyx_4;
  __pyx_4 = 0;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":416 */
  __pyx_1 = PyObject_GetAttr(__pyx_v_self, __pyx_n_set_size); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 416; goto __pyx_L1;}
  __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 416; goto __pyx_L1;}
  Py_INCREF(__pyx_v_size);
  PyTuple_SET_ITEM(__pyx_2, 0, __pyx_v_size);
  __pyx_3 = PyObject_CallObject(__pyx_1, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 416; goto __pyx_L1;}
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  Py_DECREF(__pyx_3); __pyx_3 = 0;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":419 */
  __pyx_4 = __Pyx_GetName(__pyx_b, __pyx_n_len); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 419; goto __pyx_L1;}
  __pyx_1 = PyTuple_New(1); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 419; goto __pyx_L1;}
  Py_INCREF(__pyx_v_initial_data);
  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_v_initial_data);
  __pyx_2 = PyObject_CallObject(__pyx_4, __pyx_1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 419; goto __pyx_L1;}
  Py_DECREF(__pyx_4); __pyx_4 = 0;
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  __pyx_5 = PyInt_AsLong(__pyx_2); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 419; goto __pyx_L1;}
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  __pyx_v_initial_len = __pyx_5;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":420 */
  for (__pyx_v_i = 0; __pyx_v_i < __pyx_v_initial_len; ++__pyx_v_i) {

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":421 */
    __pyx_3 = PyInt_FromLong(__pyx_v_i); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 421; goto __pyx_L1;}
    __pyx_4 = PyObject_GetItem(__pyx_v_initial_data, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 421; goto __pyx_L1;}
    Py_DECREF(__pyx_3); __pyx_3 = 0;
    __pyx_1 = PyInt_FromLong(__pyx_v_i); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 421; goto __pyx_L1;}
    if (PyObject_SetItem(__pyx_v_self, __pyx_1, __pyx_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 421; goto __pyx_L1;}
    Py_DECREF(__pyx_1); __pyx_1 = 0;
    Py_DECREF(__pyx_4); __pyx_4 = 0;
  }

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":422 */
  __pyx_5 = (((struct __pyx_obj_6rabbyt_6arrays_Array1d *)__pyx_v_self)->_default != 0);
  if (__pyx_5) {

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":423 */
    __pyx_7 = PyInt_AsLong(__pyx_v_size); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 423; goto __pyx_L1;}
    for (__pyx_v_i = __pyx_v_initial_len; __pyx_v_i < __pyx_7; ++__pyx_v_i) {

      /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":424 */
      __pyx_2 = PyFloat_FromDouble(((struct __pyx_obj_6rabbyt_6arrays_Array1d *)__pyx_v_self)->_default); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 424; goto __pyx_L1;}
      __pyx_3 = PyInt_FromLong(__pyx_v_i); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 424; goto __pyx_L1;}
      if (PyObject_SetItem(__pyx_v_self, __pyx_3, __pyx_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 424; goto __pyx_L1;}
      Py_DECREF(__pyx_3); __pyx_3 = 0;
      Py_DECREF(__pyx_2); __pyx_2 = 0;
    }
    goto __pyx_L4;
  }
  __pyx_L4:;

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  Py_XDECREF(__pyx_2);
  Py_XDECREF(__pyx_3);
  Py_XDECREF(__pyx_4);
  __Pyx_AddTraceback("rabbyt.arrays.Array1d.__init__");
  __pyx_r = -1;
  __pyx_L0:;
  Py_DECREF((PyObject *)__pyx_v_self);
  Py_DECREF(__pyx_v_initial_data);
  Py_DECREF(__pyx_v_size);
  Py_DECREF(__pyx_v_default);
  return __pyx_r;
}


static int __pyx_f_6rabbyt_6arrays_11OffsetArray___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_f_6rabbyt_6arrays_11OffsetArray___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct __pyx_obj_6rabbyt_6arrays__BaseArray *__pyx_v_array = 0;
  int __pyx_v_offset;
  int __pyx_r;
  PyObject *__pyx_1 = 0;
  PyObject *__pyx_2 = 0;
  PyObject *__pyx_3 = 0;
  PyObject *__pyx_4 = 0;
  int __pyx_5;
  static char *__pyx_argnames[] = {"array","offset",0};
  if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "Oi", __pyx_argnames, &__pyx_v_array, &__pyx_v_offset)) return -1;
  Py_INCREF((PyObject *)__pyx_v_self);
  Py_INCREF(__pyx_v_array);
  if (!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_array), __pyx_ptype_6rabbyt_6arrays__BaseArray, 0, "array")) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 431; goto __pyx_L1;}

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":432 */
  ((struct __pyx_obj_6rabbyt_6arrays_OffsetArray *)__pyx_v_self)->_offset = __pyx_v_offset;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":433 */
  __pyx_1 = PyObject_GetAttr(((PyObject*)__pyx_ptype_6rabbyt_6arrays__BaseArray), __pyx_n___init__); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 433; goto __pyx_L1;}
  __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 433; goto __pyx_L1;}
  Py_INCREF(__pyx_v_self);
  PyTuple_SET_ITEM(__pyx_2, 0, __pyx_v_self);
  __pyx_3 = PyDict_New(); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 433; goto __pyx_L1;}
  if (PyDict_SetItem(__pyx_3, __pyx_n_data_owner, ((PyObject *)__pyx_v_array)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 433; goto __pyx_L1;}
  __pyx_4 = PyEval_CallObjectWithKeywords(__pyx_1, __pyx_2, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 433; goto __pyx_L1;}
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  Py_DECREF(__pyx_3); __pyx_3 = 0;
  Py_DECREF(__pyx_4); __pyx_4 = 0;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":434 */
  __pyx_1 = __Pyx_GetName(__pyx_b, __pyx_n_True); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 434; goto __pyx_L1;}
  __pyx_5 = PyInt_AsLong(__pyx_1); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 434; goto __pyx_L1;}
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  ((struct __pyx_obj_6rabbyt_6arrays_OffsetArray *)__pyx_v_self)->__pyx_base.__pyx_base._is_assignable = __pyx_5;

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  Py_XDECREF(__pyx_2);
  Py_XDECREF(__pyx_3);
  Py_XDECREF(__pyx_4);
  __Pyx_AddTraceback("rabbyt.arrays.OffsetArray.__init__");
  __pyx_r = -1;
  __pyx_L0:;
  Py_DECREF((PyObject *)__pyx_v_self);
  Py_DECREF(__pyx_v_array);
  return __pyx_r;
}

static void __pyx_f_6rabbyt_6arrays_11OffsetArray__sync_data_ptr(struct __pyx_obj_6rabbyt_6arrays_OffsetArray *__pyx_v_self) {
  int __pyx_1;
  Py_INCREF((PyObject *)__pyx_v_self);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":437 */
  __pyx_1 = (!__pyx_v_self->__pyx_base.__pyx_base._is_data_owner);
  if (__pyx_1) {

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":438 */
    ((struct __pyx_vtabstruct_6rabbyt_6arrays__BaseArray *)__pyx_v_self->__pyx_base.__pyx_base.data_owner->__pyx_vtab)->_sync_data_ptr(__pyx_v_self->__pyx_base.__pyx_base.data_owner);

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":439 */
    __pyx_v_self->__pyx_base.__pyx_base._data = (__pyx_v_self->__pyx_base.__pyx_base.data_owner->_data + __pyx_v_self->_offset);

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":440 */
    __pyx_v_self->__pyx_base.__pyx_base._count = __pyx_v_self->__pyx_base.__pyx_base.data_owner->_count;
    goto __pyx_L2;
  }
  __pyx_L2:;

  Py_DECREF((PyObject *)__pyx_v_self);
}


static int __pyx_f_6rabbyt_6arrays_16OffsetUByteArray___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_f_6rabbyt_6arrays_16OffsetUByteArray___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct __pyx_obj_6rabbyt_6arrays__BaseArray *__pyx_v_array = 0;
  int __pyx_v_offset;
  int __pyx_v_uchar_offset;
  int __pyx_r;
  PyObject *__pyx_1 = 0;
  PyObject *__pyx_2 = 0;
  PyObject *__pyx_3 = 0;
  PyObject *__pyx_4 = 0;
  int __pyx_5;
  static char *__pyx_argnames[] = {"array","offset","uchar_offset",0};
  if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "Oii", __pyx_argnames, &__pyx_v_array, &__pyx_v_offset, &__pyx_v_uchar_offset)) return -1;
  Py_INCREF((PyObject *)__pyx_v_self);
  Py_INCREF(__pyx_v_array);
  if (!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_array), __pyx_ptype_6rabbyt_6arrays__BaseArray, 0, "array")) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 451; goto __pyx_L1;}

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":453 */
  ((struct __pyx_obj_6rabbyt_6arrays_OffsetUByteArray *)__pyx_v_self)->_offset = __pyx_v_offset;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":454 */
  ((struct __pyx_obj_6rabbyt_6arrays_OffsetUByteArray *)__pyx_v_self)->_uchar_offset = __pyx_v_uchar_offset;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":455 */
  ((struct __pyx_obj_6rabbyt_6arrays_OffsetUByteArray *)__pyx_v_self)->_uchar_stride = (__pyx_v_array->_stride * (sizeof(float )));

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":456 */
  __pyx_1 = PyObject_GetAttr(((PyObject*)__pyx_ptype_6rabbyt_6arrays__BaseArray), __pyx_n___init__); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 456; goto __pyx_L1;}
  __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 456; goto __pyx_L1;}
  Py_INCREF(__pyx_v_self);
  PyTuple_SET_ITEM(__pyx_2, 0, __pyx_v_self);
  __pyx_3 = PyDict_New(); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 456; goto __pyx_L1;}
  if (PyDict_SetItem(__pyx_3, __pyx_n_data_owner, ((PyObject *)__pyx_v_array)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 456; goto __pyx_L1;}
  __pyx_4 = PyEval_CallObjectWithKeywords(__pyx_1, __pyx_2, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 456; goto __pyx_L1;}
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  Py_DECREF(__pyx_3); __pyx_3 = 0;
  Py_DECREF(__pyx_4); __pyx_4 = 0;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":457 */
  __pyx_1 = __Pyx_GetName(__pyx_b, __pyx_n_True); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 457; goto __pyx_L1;}
  __pyx_5 = PyInt_AsLong(__pyx_1); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 457; goto __pyx_L1;}
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  ((struct __pyx_obj_6rabbyt_6arrays_OffsetUByteArray *)__pyx_v_self)->__pyx_base.__pyx_base._is_assignable = __pyx_5;

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  Py_XDECREF(__pyx_2);
  Py_XDECREF(__pyx_3);
  Py_XDECREF(__pyx_4);
  __Pyx_AddTraceback("rabbyt.arrays.OffsetUByteArray.__init__");
  __pyx_r = -1;
  __pyx_L0:;
  Py_DECREF((PyObject *)__pyx_v_self);
  Py_DECREF(__pyx_v_array);
  return __pyx_r;
}

static void __pyx_f_6rabbyt_6arrays_16OffsetUByteArray__sync_data_ptr(struct __pyx_obj_6rabbyt_6arrays_OffsetUByteArray *__pyx_v_self) {
  int __pyx_1;
  Py_INCREF((PyObject *)__pyx_v_self);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":460 */
  __pyx_1 = (!__pyx_v_self->__pyx_base.__pyx_base._is_data_owner);
  if (__pyx_1) {

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":461 */
    __pyx_v_self->__pyx_base.__pyx_base._count = __pyx_v_self->__pyx_base.__pyx_base.data_owner->_count;

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":462 */
    __pyx_v_self->__pyx_base.__pyx_base._data = (__pyx_v_self->__pyx_base.__pyx_base.data_owner->_data + __pyx_v_self->_offset);

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":463 */
    __pyx_v_self->_uchar_data = (((unsigned char (*))__pyx_v_self->__pyx_base.__pyx_base._data) + __pyx_v_self->_uchar_offset);
    goto __pyx_L2;
  }
  __pyx_L2:;

  Py_DECREF((PyObject *)__pyx_v_self);
}

static float __pyx_f_6rabbyt_6arrays_16OffsetUByteArray__getitem(struct __pyx_obj_6rabbyt_6arrays_OffsetUByteArray *__pyx_v_self,int __pyx_v_index) {
  float __pyx_r;
  Py_INCREF((PyObject *)__pyx_v_self);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":466 */
  __pyx_r = (((float )(__pyx_v_self->_uchar_data[(__pyx_v_index * __pyx_v_self->_uchar_stride)])) / 255);
  goto __pyx_L0;

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

static void __pyx_f_6rabbyt_6arrays_16OffsetUByteArray__setitem(struct __pyx_obj_6rabbyt_6arrays_OffsetUByteArray *__pyx_v_self,int __pyx_v_index,float __pyx_v_value) {
  int __pyx_1;
  Py_INCREF((PyObject *)__pyx_v_self);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":469 */
  __pyx_1 = (__pyx_v_value > 1);
  if (__pyx_1) {

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":470 */
    __pyx_v_value = 1;
    goto __pyx_L2;
  }
  __pyx_L2:;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":471 */
  __pyx_1 = (__pyx_v_value < 0);
  if (__pyx_1) {

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":472 */
    __pyx_v_value = 0;
    goto __pyx_L3;
  }
  __pyx_L3:;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":474 */
  (__pyx_v_self->_uchar_data[(__pyx_v_index * __pyx_v_self->_uchar_stride)]) = ((unsigned char )(__pyx_v_value * 255));

  Py_DECREF((PyObject *)__pyx_v_self);
}


static int __pyx_f_6rabbyt_6arrays_16_RepeatedArray1d___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_f_6rabbyt_6arrays_16_RepeatedArray1d___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_data_owner = 0;
  int __pyx_v_times;
  int __pyx_r;
  PyObject *__pyx_1 = 0;
  PyObject *__pyx_2 = 0;
  PyObject *__pyx_3 = 0;
  PyObject *__pyx_4 = 0;
  static char *__pyx_argnames[] = {"data_owner","times",0};
  if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "Oi", __pyx_argnames, &__pyx_v_data_owner, &__pyx_v_times)) return -1;
  Py_INCREF((PyObject *)__pyx_v_self);
  Py_INCREF(__pyx_v_data_owner);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":480 */
  ((struct __pyx_obj_6rabbyt_6arrays__RepeatedArray1d *)__pyx_v_self)->_times = __pyx_v_times;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":481 */
  __pyx_1 = PyObject_GetAttr(((PyObject*)__pyx_ptype_6rabbyt_6arrays__BaseArray1d), __pyx_n___init__); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 481; goto __pyx_L1;}
  __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 481; goto __pyx_L1;}
  Py_INCREF(__pyx_v_self);
  PyTuple_SET_ITEM(__pyx_2, 0, __pyx_v_self);
  __pyx_3 = PyDict_New(); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 481; goto __pyx_L1;}
  if (PyDict_SetItem(__pyx_3, __pyx_n_data_owner, __pyx_v_data_owner) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 481; goto __pyx_L1;}
  __pyx_4 = PyEval_CallObjectWithKeywords(__pyx_1, __pyx_2, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 481; goto __pyx_L1;}
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  Py_DECREF(__pyx_3); __pyx_3 = 0;
  Py_DECREF(__pyx_4); __pyx_4 = 0;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":482 */
  ((struct __pyx_obj_6rabbyt_6arrays__RepeatedArray1d *)__pyx_v_self)->__pyx_base.__pyx_base._is_assignable = ((struct __pyx_obj_6rabbyt_6arrays__RepeatedArray1d *)__pyx_v_self)->__pyx_base.__pyx_base.data_owner->_is_assignable;

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  Py_XDECREF(__pyx_2);
  Py_XDECREF(__pyx_3);
  Py_XDECREF(__pyx_4);
  __Pyx_AddTraceback("rabbyt.arrays._RepeatedArray1d.__init__");
  __pyx_r = -1;
  __pyx_L0:;
  Py_DECREF((PyObject *)__pyx_v_self);
  Py_DECREF(__pyx_v_data_owner);
  return __pyx_r;
}

static void __pyx_f_6rabbyt_6arrays_16_RepeatedArray1d__sync_data_ptr(struct __pyx_obj_6rabbyt_6arrays__RepeatedArray1d *__pyx_v_self) {
  int __pyx_1;
  Py_INCREF((PyObject *)__pyx_v_self);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":485 */
  __pyx_1 = (!__pyx_v_self->__pyx_base.__pyx_base._is_data_owner);
  if (__pyx_1) {

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":486 */
    ((struct __pyx_vtabstruct_6rabbyt_6arrays__BaseArray *)__pyx_v_self->__pyx_base.__pyx_base.data_owner->__pyx_vtab)->_sync_data_ptr(__pyx_v_self->__pyx_base.__pyx_base.data_owner);

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":487 */
    __pyx_v_self->__pyx_base.__pyx_base._data = __pyx_v_self->__pyx_base.__pyx_base.data_owner->_data;

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":488 */
    __pyx_v_self->__pyx_base.__pyx_base._count = (__pyx_v_self->__pyx_base.__pyx_base.data_owner->_count * __pyx_v_self->_times);
    goto __pyx_L2;
  }
  __pyx_L2:;

  Py_DECREF((PyObject *)__pyx_v_self);
}

static int __pyx_f_6rabbyt_6arrays_16_RepeatedArray1d__convert_index(struct __pyx_obj_6rabbyt_6arrays__RepeatedArray1d *__pyx_v_self,int __pyx_v_raw) {
  int __pyx_r;
  Py_INCREF((PyObject *)__pyx_v_self);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":491 */
  __pyx_r = (__pyx_v_raw % __pyx_v_self->__pyx_base.__pyx_base.data_owner->_count);
  goto __pyx_L0;

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


static int __pyx_f_6rabbyt_6arrays_17_StretchedArray1d___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_f_6rabbyt_6arrays_17_StretchedArray1d___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_data_owner = 0;
  int __pyx_v_times;
  int __pyx_r;
  PyObject *__pyx_1 = 0;
  PyObject *__pyx_2 = 0;
  PyObject *__pyx_3 = 0;
  PyObject *__pyx_4 = 0;
  static char *__pyx_argnames[] = {"data_owner","times",0};
  if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "Oi", __pyx_argnames, &__pyx_v_data_owner, &__pyx_v_times)) return -1;
  Py_INCREF((PyObject *)__pyx_v_self);
  Py_INCREF(__pyx_v_data_owner);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":496 */
  ((struct __pyx_obj_6rabbyt_6arrays__StretchedArray1d *)__pyx_v_self)->_times = __pyx_v_times;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":497 */
  __pyx_1 = PyObject_GetAttr(((PyObject*)__pyx_ptype_6rabbyt_6arrays__BaseArray1d), __pyx_n___init__); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 497; goto __pyx_L1;}
  __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 497; goto __pyx_L1;}
  Py_INCREF(__pyx_v_self);
  PyTuple_SET_ITEM(__pyx_2, 0, __pyx_v_self);
  __pyx_3 = PyDict_New(); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 497; goto __pyx_L1;}
  if (PyDict_SetItem(__pyx_3, __pyx_n_data_owner, __pyx_v_data_owner) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 497; goto __pyx_L1;}
  __pyx_4 = PyEval_CallObjectWithKeywords(__pyx_1, __pyx_2, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 497; goto __pyx_L1;}
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  Py_DECREF(__pyx_3); __pyx_3 = 0;
  Py_DECREF(__pyx_4); __pyx_4 = 0;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":498 */
  ((struct __pyx_obj_6rabbyt_6arrays__StretchedArray1d *)__pyx_v_self)->__pyx_base.__pyx_base._is_assignable = ((struct __pyx_obj_6rabbyt_6arrays__StretchedArray1d *)__pyx_v_self)->__pyx_base.__pyx_base.data_owner->_is_assignable;

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  Py_XDECREF(__pyx_2);
  Py_XDECREF(__pyx_3);
  Py_XDECREF(__pyx_4);
  __Pyx_AddTraceback("rabbyt.arrays._StretchedArray1d.__init__");
  __pyx_r = -1;
  __pyx_L0:;
  Py_DECREF((PyObject *)__pyx_v_self);
  Py_DECREF(__pyx_v_data_owner);
  return __pyx_r;
}

static void __pyx_f_6rabbyt_6arrays_17_StretchedArray1d__sync_data_ptr(struct __pyx_obj_6rabbyt_6arrays__StretchedArray1d *__pyx_v_self) {
  int __pyx_1;
  Py_INCREF((PyObject *)__pyx_v_self);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":501 */
  __pyx_1 = (!__pyx_v_self->__pyx_base.__pyx_base._is_data_owner);
  if (__pyx_1) {

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":502 */
    ((struct __pyx_vtabstruct_6rabbyt_6arrays__BaseArray *)__pyx_v_self->__pyx_base.__pyx_base.data_owner->__pyx_vtab)->_sync_data_ptr(__pyx_v_self->__pyx_base.__pyx_base.data_owner);

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":503 */
    __pyx_v_self->__pyx_base.__pyx_base._data = __pyx_v_self->__pyx_base.__pyx_base.data_owner->_data;

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":504 */
    __pyx_v_self->__pyx_base.__pyx_base._count = (__pyx_v_self->__pyx_base.__pyx_base.data_owner->_count * __pyx_v_self->_times);
    goto __pyx_L2;
  }
  __pyx_L2:;

  Py_DECREF((PyObject *)__pyx_v_self);
}

static int __pyx_f_6rabbyt_6arrays_17_StretchedArray1d__convert_index(struct __pyx_obj_6rabbyt_6arrays__StretchedArray1d *__pyx_v_self,int __pyx_v_raw) {
  int __pyx_r;
  Py_INCREF((PyObject *)__pyx_v_self);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":507 */
  __pyx_r = (__pyx_v_raw / __pyx_v_self->_times);
  goto __pyx_L0;

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

static int __pyx_f_6rabbyt_6arrays_8ItemInfo___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_f_6rabbyt_6arrays_8ItemInfo___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct __pyx_obj_6rabbyt_6arrays_Array2d *__pyx_v_array = 0;
  int __pyx_v_index;
  int __pyx_r;
  static char *__pyx_argnames[] = {"array","index",0};
  if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "Oi", __pyx_argnames, &__pyx_v_array, &__pyx_v_index)) return -1;
  Py_INCREF(__pyx_v_self);
  Py_INCREF((PyObject *)__pyx_v_array);
  if (!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_array), __pyx_ptype_6rabbyt_6arrays_Array2d, 0, "array")) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 519; goto __pyx_L1;}

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":520 */
  Py_INCREF(((PyObject *)__pyx_v_array));
  Py_DECREF(((PyObject *)((struct __pyx_obj_6rabbyt_6arrays_ItemInfo *)__pyx_v_self)->array));
  ((struct __pyx_obj_6rabbyt_6arrays_ItemInfo *)__pyx_v_self)->array = __pyx_v_array;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":521 */
  ((struct __pyx_obj_6rabbyt_6arrays_ItemInfo *)__pyx_v_self)->index = __pyx_v_index;

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1:;
  __Pyx_AddTraceback("rabbyt.arrays.ItemInfo.__init__");
  __pyx_r = -1;
  __pyx_L0:;
  Py_DECREF(__pyx_v_self);
  Py_DECREF((PyObject *)__pyx_v_array);
  return __pyx_r;
}

static PyObject *__pyx_n_AttributeError;

static int __pyx_f_6rabbyt_6arrays_8ItemInfo___setattr__(PyObject *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_arg_value); /*proto*/
static int __pyx_f_6rabbyt_6arrays_8ItemInfo___setattr__(PyObject *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_arg_value) {
  float __pyx_v_value;
  int __pyx_r;
  int __pyx_1;
  PyObject *__pyx_2 = 0;
  PyObject *__pyx_3 = 0;
  PyObject *__pyx_4 = 0;
  Py_INCREF(__pyx_v_self);
  Py_INCREF(__pyx_v_name);
  __pyx_v_value = PyFloat_AsDouble(__pyx_arg_value); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 523; goto __pyx_L1;}

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":524 */
  __pyx_1 = PySequence_Contains(((struct __pyx_obj_6rabbyt_6arrays_ItemInfo *)__pyx_v_self)->array->_attribute_arrays, __pyx_v_name); if (__pyx_1 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 524; goto __pyx_L1;}
  __pyx_1 = !__pyx_1;
  if (__pyx_1) {

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":525 */
    __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_AttributeError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 525; goto __pyx_L1;}
    __Pyx_Raise(__pyx_2, 0, 0);
    Py_DECREF(__pyx_2); __pyx_2 = 0;
    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 525; goto __pyx_L1;}
    goto __pyx_L2;
  }
  __pyx_L2:;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":526 */
  __pyx_2 = PyFloat_FromDouble(__pyx_v_value); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 526; goto __pyx_L1;}
  __pyx_3 = PyObject_GetItem(((struct __pyx_obj_6rabbyt_6arrays_ItemInfo *)__pyx_v_self)->array->_attribute_arrays, __pyx_v_name); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 526; goto __pyx_L1;}
  __pyx_4 = PyInt_FromLong(((struct __pyx_obj_6rabbyt_6arrays_ItemInfo *)__pyx_v_self)->index); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 526; goto __pyx_L1;}
  if (PyObject_SetItem(__pyx_3, __pyx_4, __pyx_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 526; goto __pyx_L1;}
  Py_DECREF(__pyx_3); __pyx_3 = 0;
  Py_DECREF(__pyx_4); __pyx_4 = 0;
  Py_DECREF(__pyx_2); __pyx_2 = 0;

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_2);
  Py_XDECREF(__pyx_3);
  Py_XDECREF(__pyx_4);
  __Pyx_AddTraceback("rabbyt.arrays.ItemInfo.__setattr__");
  __pyx_r = -1;
  __pyx_L0:;
  Py_DECREF(__pyx_v_self);
  Py_DECREF(__pyx_v_name);
  return __pyx_r;
}

static PyObject *__pyx_f_6rabbyt_6arrays_8ItemInfo___getattr__(PyObject *__pyx_v_self, PyObject *__pyx_v_name); /*proto*/
static PyObject *__pyx_f_6rabbyt_6arrays_8ItemInfo___getattr__(PyObject *__pyx_v_self, PyObject *__pyx_v_name) {
  PyObject *__pyx_r;
  int __pyx_1;
  PyObject *__pyx_2 = 0;
  PyObject *__pyx_3 = 0;
  PyObject *__pyx_4 = 0;
  Py_INCREF(__pyx_v_self);
  Py_INCREF(__pyx_v_name);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":529 */
  __pyx_1 = PySequence_Contains(((struct __pyx_obj_6rabbyt_6arrays_ItemInfo *)__pyx_v_self)->array->_attribute_arrays, __pyx_v_name); if (__pyx_1 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 529; goto __pyx_L1;}
  __pyx_1 = !__pyx_1;
  if (__pyx_1) {

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":530 */
    __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_AttributeError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 530; goto __pyx_L1;}
    __Pyx_Raise(__pyx_2, 0, 0);
    Py_DECREF(__pyx_2); __pyx_2 = 0;
    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 530; goto __pyx_L1;}
    goto __pyx_L2;
  }
  __pyx_L2:;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":531 */
  __pyx_2 = PyObject_GetItem(((struct __pyx_obj_6rabbyt_6arrays_ItemInfo *)__pyx_v_self)->array->_attribute_arrays, __pyx_v_name); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 531; goto __pyx_L1;}
  __pyx_3 = PyInt_FromLong(((struct __pyx_obj_6rabbyt_6arrays_ItemInfo *)__pyx_v_self)->index); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 531; goto __pyx_L1;}
  __pyx_4 = PyObject_GetItem(__pyx_2, __pyx_3); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 531; goto __pyx_L1;}
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  Py_DECREF(__pyx_3); __pyx_3 = 0;
  __pyx_r = __pyx_4;
  __pyx_4 = 0;
  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.arrays.ItemInfo.__getattr__");
  __pyx_r = 0;
  __pyx_L0:;
  Py_DECREF(__pyx_v_self);
  Py_DECREF(__pyx_v_name);
  return __pyx_r;
}

static PyObject *__pyx_f_6rabbyt_6arrays_8ItemInfo___getitem__(PyObject *__pyx_v_self, PyObject *__pyx_arg_index); /*proto*/
static PyObject *__pyx_f_6rabbyt_6arrays_8ItemInfo___getitem__(PyObject *__pyx_v_self, PyObject *__pyx_arg_index) {
  int __pyx_v_index;
  PyObject *__pyx_r;
  PyObject *__pyx_1 = 0;
  PyObject *__pyx_2 = 0;
  PyObject *__pyx_3 = 0;
  Py_INCREF(__pyx_v_self);
  __pyx_v_index = PyInt_AsLong(__pyx_arg_index); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 533; goto __pyx_L1;}

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":535 */
  __pyx_1 = PyInt_FromLong(__pyx_v_index); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 535; goto __pyx_L1;}
  __pyx_2 = PyObject_GetItem(((struct __pyx_obj_6rabbyt_6arrays_ItemInfo *)__pyx_v_self)->array->_column_arrays, __pyx_1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 535; goto __pyx_L1;}
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  __pyx_1 = PyInt_FromLong(((struct __pyx_obj_6rabbyt_6arrays_ItemInfo *)__pyx_v_self)->index); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 535; goto __pyx_L1;}
  __pyx_3 = PyObject_GetItem(__pyx_2, __pyx_1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 535; goto __pyx_L1;}
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  __pyx_r = __pyx_3;
  __pyx_3 = 0;
  goto __pyx_L0;

  __pyx_r = Py_None; Py_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  Py_XDECREF(__pyx_2);
  Py_XDECREF(__pyx_3);
  __Pyx_AddTraceback("rabbyt.arrays.ItemInfo.__getitem__");
  __pyx_r = 0;
  __pyx_L0:;
  Py_DECREF(__pyx_v_self);
  return __pyx_r;
}

static int __pyx_f_6rabbyt_6arrays_8ItemInfo___setitem__(PyObject *__pyx_v_self, PyObject *__pyx_arg_index, PyObject *__pyx_arg_value); /*proto*/
static int __pyx_f_6rabbyt_6arrays_8ItemInfo___setitem__(PyObject *__pyx_v_self, PyObject *__pyx_arg_index, PyObject *__pyx_arg_value) {
  int __pyx_v_index;
  float __pyx_v_value;
  int __pyx_r;
  PyObject *__pyx_1 = 0;
  PyObject *__pyx_2 = 0;
  PyObject *__pyx_3 = 0;
  Py_INCREF(__pyx_v_self);
  __pyx_v_index = PyInt_AsLong(__pyx_arg_index); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 537; goto __pyx_L1;}
  __pyx_v_value = PyFloat_AsDouble(__pyx_arg_value); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 537; goto __pyx_L1;}

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":538 */
  __pyx_1 = PyFloat_FromDouble(__pyx_v_value); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 538; goto __pyx_L1;}
  __pyx_2 = PyInt_FromLong(__pyx_v_index); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 538; goto __pyx_L1;}
  __pyx_3 = PyObject_GetItem(((struct __pyx_obj_6rabbyt_6arrays_ItemInfo *)__pyx_v_self)->array->_column_arrays, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 538; goto __pyx_L1;}
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  __pyx_2 = PyInt_FromLong(((struct __pyx_obj_6rabbyt_6arrays_ItemInfo *)__pyx_v_self)->index); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 538; goto __pyx_L1;}
  if (PyObject_SetItem(__pyx_3, __pyx_2, __pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 538; goto __pyx_L1;}
  Py_DECREF(__pyx_3); __pyx_3 = 0;
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  Py_DECREF(__pyx_1); __pyx_1 = 0;

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  Py_XDECREF(__pyx_2);
  Py_XDECREF(__pyx_3);
  __Pyx_AddTraceback("rabbyt.arrays.ItemInfo.__setitem__");
  __pyx_r = -1;
  __pyx_L0:;
  Py_DECREF(__pyx_v_self);
  return __pyx_r;
}

static PyObject *__pyx_f_6rabbyt_6arrays_8ItemInfo__update(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_f_6rabbyt_6arrays_8ItemInfo__update(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_new_data = 0;
  int __pyx_v_i;
  int __pyx_v_length;
  PyObject *__pyx_r;
  PyObject *__pyx_1 = 0;
  PyObject *__pyx_2 = 0;
  PyObject *__pyx_3 = 0;
  int __pyx_4;
  PyObject *__pyx_5 = 0;
  static char *__pyx_argnames[] = {"new_data",0};
  if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "O", __pyx_argnames, &__pyx_v_new_data)) return 0;
  Py_INCREF(__pyx_v_self);
  Py_INCREF(__pyx_v_new_data);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":543 */
  __pyx_1 = __Pyx_GetName(__pyx_b, __pyx_n_len); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 543; goto __pyx_L1;}
  __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 543; goto __pyx_L1;}
  Py_INCREF(__pyx_v_new_data);
  PyTuple_SET_ITEM(__pyx_2, 0, __pyx_v_new_data);
  __pyx_3 = PyObject_CallObject(__pyx_1, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 543; goto __pyx_L1;}
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  __pyx_4 = PyInt_AsLong(__pyx_3); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 543; goto __pyx_L1;}
  Py_DECREF(__pyx_3); __pyx_3 = 0;
  __pyx_v_length = __pyx_4;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":544 */
  __pyx_1 = PyInt_FromLong(((struct __pyx_obj_6rabbyt_6arrays_ItemInfo *)__pyx_v_self)->index); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 544; goto __pyx_L1;}
  __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_len); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 544; goto __pyx_L1;}
  __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 544; goto __pyx_L1;}
  Py_INCREF(((PyObject *)((struct __pyx_obj_6rabbyt_6arrays_ItemInfo *)__pyx_v_self)->array));
  PyTuple_SET_ITEM(__pyx_3, 0, ((PyObject *)((struct __pyx_obj_6rabbyt_6arrays_ItemInfo *)__pyx_v_self)->array));
  __pyx_5 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 544; goto __pyx_L1;}
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  Py_DECREF(__pyx_3); __pyx_3 = 0;
  if (PyObject_Cmp(__pyx_1, __pyx_5, &__pyx_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 544; goto __pyx_L1;}
  __pyx_4 = __pyx_4 >= 0;
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  Py_DECREF(__pyx_5); __pyx_5 = 0;
  if (__pyx_4) {

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":545 */
    __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_IndexError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 545; goto __pyx_L1;}
    __Pyx_Raise(__pyx_2, 0, 0);
    Py_DECREF(__pyx_2); __pyx_2 = 0;
    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 545; goto __pyx_L1;}
    goto __pyx_L2;
  }
  __pyx_L2:;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":546 */
  __pyx_3 = PyInt_FromLong(__pyx_v_length); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 546; goto __pyx_L1;}
  __pyx_1 = __Pyx_GetName(__pyx_b, __pyx_n_len); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 546; goto __pyx_L1;}
  __pyx_5 = PyTuple_New(1); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 546; goto __pyx_L1;}
  Py_INCREF(((struct __pyx_obj_6rabbyt_6arrays_ItemInfo *)__pyx_v_self)->array->_column_arrays);
  PyTuple_SET_ITEM(__pyx_5, 0, ((struct __pyx_obj_6rabbyt_6arrays_ItemInfo *)__pyx_v_self)->array->_column_arrays);
  __pyx_2 = PyObject_CallObject(__pyx_1, __pyx_5); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 546; goto __pyx_L1;}
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  Py_DECREF(__pyx_5); __pyx_5 = 0;
  if (PyObject_Cmp(__pyx_3, __pyx_2, &__pyx_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 546; goto __pyx_L1;}
  __pyx_4 = __pyx_4 > 0;
  Py_DECREF(__pyx_3); __pyx_3 = 0;
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  if (__pyx_4) {

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":547 */
    __pyx_1 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 547; goto __pyx_L1;}
    __Pyx_Raise(__pyx_1, 0, 0);
    Py_DECREF(__pyx_1); __pyx_1 = 0;
    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 547; goto __pyx_L1;}
    goto __pyx_L3;
  }
  __pyx_L3:;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":548 */
  for (__pyx_v_i = 0; __pyx_v_i < __pyx_v_length; ++__pyx_v_i) {

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":549 */
    __pyx_5 = PyInt_FromLong(__pyx_v_i); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 549; goto __pyx_L1;}
    __pyx_3 = PyObject_GetItem(__pyx_v_new_data, __pyx_5); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 549; goto __pyx_L1;}
    Py_DECREF(__pyx_5); __pyx_5 = 0;
    __pyx_2 = PyInt_FromLong(__pyx_v_i); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 549; goto __pyx_L1;}
    __pyx_1 = PyObject_GetItem(((struct __pyx_obj_6rabbyt_6arrays_ItemInfo *)__pyx_v_self)->array->_column_arrays, __pyx_2); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 549; goto __pyx_L1;}
    Py_DECREF(__pyx_2); __pyx_2 = 0;
    __pyx_5 = PyInt_FromLong(((struct __pyx_obj_6rabbyt_6arrays_ItemInfo *)__pyx_v_self)->index); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 549; goto __pyx_L1;}
    if (PyObject_SetItem(__pyx_1, __pyx_5, __pyx_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 549; goto __pyx_L1;}
    Py_DECREF(__pyx_1); __pyx_1 = 0;
    Py_DECREF(__pyx_5); __pyx_5 = 0;
    Py_DECREF(__pyx_3); __pyx_3 = 0;
  }

  __pyx_r = Py_None; Py_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  Py_XDECREF(__pyx_2);
  Py_XDECREF(__pyx_3);
  Py_XDECREF(__pyx_5);
  __Pyx_AddTraceback("rabbyt.arrays.ItemInfo._update");
  __pyx_r = 0;
  __pyx_L0:;
  Py_DECREF(__pyx_v_self);
  Py_DECREF(__pyx_v_new_data);
  return __pyx_r;
}

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

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":552 */
  __pyx_1 = __Pyx_GetName(__pyx_b, __pyx_n_len); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 552; goto __pyx_L1;}
  __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 552; goto __pyx_L1;}
  Py_INCREF(((struct __pyx_obj_6rabbyt_6arrays_ItemInfo *)__pyx_v_self)->array->_column_arrays);
  PyTuple_SET_ITEM(__pyx_2, 0, ((struct __pyx_obj_6rabbyt_6arrays_ItemInfo *)__pyx_v_self)->array->_column_arrays);
  __pyx_3 = PyObject_CallObject(__pyx_1, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 552; goto __pyx_L1;}
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  __pyx_4 = PyInt_AsLong(__pyx_3); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 552; goto __pyx_L1;}
  Py_DECREF(__pyx_3); __pyx_3 = 0;
  __pyx_r = __pyx_4;
  goto __pyx_L0;

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  Py_XDECREF(__pyx_2);
  Py_XDECREF(__pyx_3);
  __Pyx_AddTraceback("rabbyt.arrays.ItemInfo.__len__");
  __pyx_r = -1;
  __pyx_L0:;
  Py_DECREF(__pyx_v_self);
  return __pyx_r;
}

static PyObject *__pyx_n_copy;

static int __pyx_f_6rabbyt_6arrays_9_ArrayOp2___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_f_6rabbyt_6arrays_9_ArrayOp2___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_arg1 = 0;
  PyObject *__pyx_v_arg2 = 0;
  int __pyx_r;
  PyObject *__pyx_1 = 0;
  PyObject *__pyx_2 = 0;
  PyObject *__pyx_3 = 0;
  int __pyx_4;
  static char *__pyx_argnames[] = {"arg1","arg2",0};
  if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "OO", __pyx_argnames, &__pyx_v_arg1, &__pyx_v_arg2)) return -1;
  Py_INCREF(__pyx_v_self);
  Py_INCREF(__pyx_v_arg1);
  Py_INCREF(__pyx_v_arg2);

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

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":563 */
    __pyx_1 = PyObject_GetAttr(__pyx_v_arg1, __pyx_n_copy); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 563; goto __pyx_L1;}
    __pyx_2 = PyObject_CallObject(__pyx_1, 0); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 563; goto __pyx_L1;}
    Py_DECREF(__pyx_1); __pyx_1 = 0;
    Py_DECREF(((struct __pyx_obj_6rabbyt_6arrays__ArrayOp2 *)__pyx_v_self)->arg1);
    ((struct __pyx_obj_6rabbyt_6arrays__ArrayOp2 *)__pyx_v_self)->arg1 = __pyx_2;
    __pyx_2 = 0;
    goto __pyx_L2;
  }
  /*else*/ {

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":565 */
    Py_INCREF(__pyx_v_arg1);
    Py_DECREF(((struct __pyx_obj_6rabbyt_6arrays__ArrayOp2 *)__pyx_v_self)->arg1);
    ((struct __pyx_obj_6rabbyt_6arrays__ArrayOp2 *)__pyx_v_self)->arg1 = __pyx_v_arg1;
  }
  __pyx_L2:;

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

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":567 */
    __pyx_3 = PyObject_GetAttr(__pyx_v_arg2, __pyx_n_copy); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 567; goto __pyx_L1;}
    __pyx_1 = PyObject_CallObject(__pyx_3, 0); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 567; goto __pyx_L1;}
    Py_DECREF(__pyx_3); __pyx_3 = 0;
    Py_DECREF(((struct __pyx_obj_6rabbyt_6arrays__ArrayOp2 *)__pyx_v_self)->arg2);
    ((struct __pyx_obj_6rabbyt_6arrays__ArrayOp2 *)__pyx_v_self)->arg2 = __pyx_1;
    __pyx_1 = 0;
    goto __pyx_L3;
  }
  /*else*/ {

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":569 */
    Py_INCREF(__pyx_v_arg2);
    Py_DECREF(((struct __pyx_obj_6rabbyt_6arrays__ArrayOp2 *)__pyx_v_self)->arg2);
    ((struct __pyx_obj_6rabbyt_6arrays__ArrayOp2 *)__pyx_v_self)->arg2 = __pyx_v_arg2;
  }
  __pyx_L3:;

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  Py_XDECREF(__pyx_2);
  Py_XDECREF(__pyx_3);
  __Pyx_AddTraceback("rabbyt.arrays._ArrayOp2.__init__");
  __pyx_r = -1;
  __pyx_L0:;
  Py_DECREF(__pyx_v_self);
  Py_DECREF(__pyx_v_arg1);
  Py_DECREF(__pyx_v_arg2);
  return __pyx_r;
}

static PyObject *__pyx_f_6rabbyt_6arrays_9_ArrayOp2_assign_to(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_f_6rabbyt_6arrays_9_ArrayOp2_assign_to(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct __pyx_obj_6rabbyt_6arrays__BaseArray *__pyx_v_target = 0;
  PyObject *__pyx_r;
  PyObject *__pyx_1 = 0;
  PyObject *__pyx_2 = 0;
  PyObject *__pyx_3 = 0;
  int __pyx_4;
  float __pyx_5;
  static char *__pyx_argnames[] = {"target",0};
  if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "O", __pyx_argnames, &__pyx_v_target)) return 0;
  Py_INCREF(__pyx_v_self);
  Py_INCREF(__pyx_v_target);
  if (!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_target), __pyx_ptype_6rabbyt_6arrays__BaseArray, 1, "target")) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 570; goto __pyx_L1;}

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":571 */
  __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_isinstance); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 571; goto __pyx_L1;}
  __pyx_3 = PyTuple_New(2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 571; goto __pyx_L1;}
  Py_INCREF(((struct __pyx_obj_6rabbyt_6arrays__ArrayOp2 *)__pyx_v_self)->arg1);
  PyTuple_SET_ITEM(__pyx_3, 0, ((struct __pyx_obj_6rabbyt_6arrays__ArrayOp2 *)__pyx_v_self)->arg1);
  Py_INCREF(((PyObject*)__pyx_ptype_6rabbyt_6arrays__BaseArray));
  PyTuple_SET_ITEM(__pyx_3, 1, ((PyObject*)__pyx_ptype_6rabbyt_6arrays__BaseArray));
  __pyx_1 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 571; goto __pyx_L1;}
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  Py_DECREF(__pyx_3); __pyx_3 = 0;
  __pyx_4 = PyObject_IsTrue(__pyx_1); if (__pyx_4 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 571; goto __pyx_L1;}
  if (__pyx_4) {
    Py_DECREF(__pyx_1); __pyx_1 = 0;
    __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_isinstance); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 572; goto __pyx_L1;}
    __pyx_3 = PyTuple_New(2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 572; goto __pyx_L1;}
    Py_INCREF(((struct __pyx_obj_6rabbyt_6arrays__ArrayOp2 *)__pyx_v_self)->arg2);
    PyTuple_SET_ITEM(__pyx_3, 0, ((struct __pyx_obj_6rabbyt_6arrays__ArrayOp2 *)__pyx_v_self)->arg2);
    Py_INCREF(((PyObject*)__pyx_ptype_6rabbyt_6arrays__BaseArray));
    PyTuple_SET_ITEM(__pyx_3, 1, ((PyObject*)__pyx_ptype_6rabbyt_6arrays__BaseArray));
    __pyx_1 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 572; goto __pyx_L1;}
    Py_DECREF(__pyx_2); __pyx_2 = 0;
    Py_DECREF(__pyx_3); __pyx_3 = 0;
  }
  __pyx_4 = PyObject_IsTrue(__pyx_1); if (__pyx_4 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 571; goto __pyx_L1;}
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  if (__pyx_4) {

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":573 */
    __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_len); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 573; goto __pyx_L1;}
    __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 573; goto __pyx_L1;}
    Py_INCREF(((PyObject *)__pyx_v_target));
    PyTuple_SET_ITEM(__pyx_3, 0, ((PyObject *)__pyx_v_target));
    __pyx_1 = PyObject_CallObject(__pyx_2, __pyx_3); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 573; goto __pyx_L1;}
    Py_DECREF(__pyx_2); __pyx_2 = 0;
    Py_DECREF(__pyx_3); __pyx_3 = 0;
    __pyx_4 = PyInt_AsLong(__pyx_1); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 573; goto __pyx_L1;}
    Py_DECREF(__pyx_1); __pyx_1 = 0;
    if (!__Pyx_TypeTest(((struct __pyx_obj_6rabbyt_6arrays__ArrayOp2 *)__pyx_v_self)->arg1, __pyx_ptype_6rabbyt_6arrays__BaseArray)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 574; goto __pyx_L1;}
    if (!__Pyx_TypeTest(((struct __pyx_obj_6rabbyt_6arrays__ArrayOp2 *)__pyx_v_self)->arg2, __pyx_ptype_6rabbyt_6arrays__BaseArray)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 574; goto __pyx_L1;}
    __pyx_2 = __pyx_f_6rabbyt_6arrays__do_op2_a_a(((struct __pyx_obj_6rabbyt_6arrays__ArrayOp2 *)__pyx_v_self)->operation,0,__pyx_4,__pyx_v_target,((struct __pyx_obj_6rabbyt_6arrays__BaseArray *)((struct __pyx_obj_6rabbyt_6arrays__ArrayOp2 *)__pyx_v_self)->arg1),((struct __pyx_obj_6rabbyt_6arrays__BaseArray *)((struct __pyx_obj_6rabbyt_6arrays__ArrayOp2 *)__pyx_v_self)->arg2)); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 573; goto __pyx_L1;}
    Py_DECREF(__pyx_2); __pyx_2 = 0;
    goto __pyx_L2;
  }
  __pyx_3 = __Pyx_GetName(__pyx_b, __pyx_n_isinstance); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 575; goto __pyx_L1;}
  __pyx_1 = PyTuple_New(2); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 575; goto __pyx_L1;}
  Py_INCREF(((struct __pyx_obj_6rabbyt_6arrays__ArrayOp2 *)__pyx_v_self)->arg1);
  PyTuple_SET_ITEM(__pyx_1, 0, ((struct __pyx_obj_6rabbyt_6arrays__ArrayOp2 *)__pyx_v_self)->arg1);
  Py_INCREF(((PyObject*)__pyx_ptype_6rabbyt_6arrays__BaseArray));
  PyTuple_SET_ITEM(__pyx_1, 1, ((PyObject*)__pyx_ptype_6rabbyt_6arrays__BaseArray));
  __pyx_2 = PyObject_CallObject(__pyx_3, __pyx_1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 575; goto __pyx_L1;}
  Py_DECREF(__pyx_3); __pyx_3 = 0;
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  __pyx_4 = PyObject_IsTrue(__pyx_2); if (__pyx_4 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 575; goto __pyx_L1;}
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  if (__pyx_4) {

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":576 */
    __pyx_3 = __Pyx_GetName(__pyx_b, __pyx_n_len); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 576; goto __pyx_L1;}
    __pyx_1 = PyTuple_New(1); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 576; goto __pyx_L1;}
    Py_INCREF(((PyObject *)__pyx_v_target));
    PyTuple_SET_ITEM(__pyx_1, 0, ((PyObject *)__pyx_v_target));
    __pyx_2 = PyObject_CallObject(__pyx_3, __pyx_1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 576; goto __pyx_L1;}
    Py_DECREF(__pyx_3); __pyx_3 = 0;
    Py_DECREF(__pyx_1); __pyx_1 = 0;
    __pyx_4 = PyInt_AsLong(__pyx_2); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 576; goto __pyx_L1;}
    Py_DECREF(__pyx_2); __pyx_2 = 0;
    if (!__Pyx_TypeTest(((struct __pyx_obj_6rabbyt_6arrays__ArrayOp2 *)__pyx_v_self)->arg1, __pyx_ptype_6rabbyt_6arrays__BaseArray)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 577; goto __pyx_L1;}
    __pyx_3 = __Pyx_GetName(__pyx_b, __pyx_n_float); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 577; goto __pyx_L1;}
    __pyx_1 = PyTuple_New(1); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 577; goto __pyx_L1;}
    Py_INCREF(((struct __pyx_obj_6rabbyt_6arrays__ArrayOp2 *)__pyx_v_self)->arg2);
    PyTuple_SET_ITEM(__pyx_1, 0, ((struct __pyx_obj_6rabbyt_6arrays__ArrayOp2 *)__pyx_v_self)->arg2);
    __pyx_2 = PyObject_CallObject(__pyx_3, __pyx_1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 577; goto __pyx_L1;}
    Py_DECREF(__pyx_3); __pyx_3 = 0;
    Py_DECREF(__pyx_1); __pyx_1 = 0;
    __pyx_5 = PyFloat_AsDouble(__pyx_2); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 577; goto __pyx_L1;}
    Py_DECREF(__pyx_2); __pyx_2 = 0;
    __pyx_3 = __pyx_f_6rabbyt_6arrays__do_op2_a_f(((struct __pyx_obj_6rabbyt_6arrays__ArrayOp2 *)__pyx_v_self)->operation,0,__pyx_4,__pyx_v_target,((struct __pyx_obj_6rabbyt_6arrays__BaseArray *)((struct __pyx_obj_6rabbyt_6arrays__ArrayOp2 *)__pyx_v_self)->arg1),__pyx_5); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 576; goto __pyx_L1;}
    Py_DECREF(__pyx_3); __pyx_3 = 0;
    goto __pyx_L2;
  }
  __pyx_1 = __Pyx_GetName(__pyx_b, __pyx_n_isinstance); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 578; goto __pyx_L1;}
  __pyx_2 = PyTuple_New(2); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 578; goto __pyx_L1;}
  Py_INCREF(((struct __pyx_obj_6rabbyt_6arrays__ArrayOp2 *)__pyx_v_self)->arg2);
  PyTuple_SET_ITEM(__pyx_2, 0, ((struct __pyx_obj_6rabbyt_6arrays__ArrayOp2 *)__pyx_v_self)->arg2);
  Py_INCREF(((PyObject*)__pyx_ptype_6rabbyt_6arrays__BaseArray));
  PyTuple_SET_ITEM(__pyx_2, 1, ((PyObject*)__pyx_ptype_6rabbyt_6arrays__BaseArray));
  __pyx_3 = PyObject_CallObject(__pyx_1, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 578; goto __pyx_L1;}
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  __pyx_4 = PyObject_IsTrue(__pyx_3); if (__pyx_4 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 578; goto __pyx_L1;}
  Py_DECREF(__pyx_3); __pyx_3 = 0;
  if (__pyx_4) {

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":579 */
    __pyx_1 = __Pyx_GetName(__pyx_b, __pyx_n_len); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 579; goto __pyx_L1;}
    __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 579; goto __pyx_L1;}
    Py_INCREF(((PyObject *)__pyx_v_target));
    PyTuple_SET_ITEM(__pyx_2, 0, ((PyObject *)__pyx_v_target));
    __pyx_3 = PyObject_CallObject(__pyx_1, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 579; goto __pyx_L1;}
    Py_DECREF(__pyx_1); __pyx_1 = 0;
    Py_DECREF(__pyx_2); __pyx_2 = 0;
    __pyx_4 = PyInt_AsLong(__pyx_3); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 579; goto __pyx_L1;}
    Py_DECREF(__pyx_3); __pyx_3 = 0;
    __pyx_1 = __Pyx_GetName(__pyx_b, __pyx_n_float); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 580; goto __pyx_L1;}
    __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 580; goto __pyx_L1;}
    Py_INCREF(((struct __pyx_obj_6rabbyt_6arrays__ArrayOp2 *)__pyx_v_self)->arg1);
    PyTuple_SET_ITEM(__pyx_2, 0, ((struct __pyx_obj_6rabbyt_6arrays__ArrayOp2 *)__pyx_v_self)->arg1);
    __pyx_3 = PyObject_CallObject(__pyx_1, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 580; goto __pyx_L1;}
    Py_DECREF(__pyx_1); __pyx_1 = 0;
    Py_DECREF(__pyx_2); __pyx_2 = 0;
    __pyx_5 = PyFloat_AsDouble(__pyx_3); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 580; goto __pyx_L1;}
    Py_DECREF(__pyx_3); __pyx_3 = 0;
    if (!__Pyx_TypeTest(((struct __pyx_obj_6rabbyt_6arrays__ArrayOp2 *)__pyx_v_self)->arg2, __pyx_ptype_6rabbyt_6arrays__BaseArray)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 580; goto __pyx_L1;}
    __pyx_1 = __pyx_f_6rabbyt_6arrays__do_op2_f_a(((struct __pyx_obj_6rabbyt_6arrays__ArrayOp2 *)__pyx_v_self)->operation,0,__pyx_4,__pyx_v_target,__pyx_5,((struct __pyx_obj_6rabbyt_6arrays__BaseArray *)((struct __pyx_obj_6rabbyt_6arrays__ArrayOp2 *)__pyx_v_self)->arg2)); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 579; goto __pyx_L1;}
    Py_DECREF(__pyx_1); __pyx_1 = 0;
    goto __pyx_L2;
  }
  /*else*/ {

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":582 */
    __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_RuntimeError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 582; goto __pyx_L1;}
    __Pyx_Raise(__pyx_2, 0, 0);
    Py_DECREF(__pyx_2); __pyx_2 = 0;
    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 582; goto __pyx_L1;}
  }
  __pyx_L2:;

  __pyx_r = Py_None; Py_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  Py_XDECREF(__pyx_2);
  Py_XDECREF(__pyx_3);
  __Pyx_AddTraceback("rabbyt.arrays._ArrayOp2.assign_to");
  __pyx_r = 0;
  __pyx_L0:;
  Py_DECREF(__pyx_v_self);
  Py_DECREF(__pyx_v_target);
  return __pyx_r;
}

static int __pyx_f_6rabbyt_6arrays_9_ArrayOp2___len__(PyObject *__pyx_v_self); /*proto*/
static int __pyx_f_6rabbyt_6arrays_9_ArrayOp2___len__(PyObject *__pyx_v_self) {
  PyObject *__pyx_v_len1;
  PyObject *__pyx_v_len2;
  int __pyx_r;
  PyObject *__pyx_1 = 0;
  PyObject *__pyx_2 = 0;
  PyObject *__pyx_3 = 0;
  int __pyx_4;
  Py_INCREF(__pyx_v_self);
  __pyx_v_len1 = Py_None; Py_INCREF(Py_None);
  __pyx_v_len2 = Py_None; Py_INCREF(Py_None);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":585 */
  /*try:*/ {

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":586 */
    __pyx_1 = __Pyx_GetName(__pyx_b, __pyx_n_len); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 586; goto __pyx_L2;}
    __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 586; goto __pyx_L2;}
    Py_INCREF(((struct __pyx_obj_6rabbyt_6arrays__ArrayOp2 *)__pyx_v_self)->arg1);
    PyTuple_SET_ITEM(__pyx_2, 0, ((struct __pyx_obj_6rabbyt_6arrays__ArrayOp2 *)__pyx_v_self)->arg1);
    __pyx_3 = PyObject_CallObject(__pyx_1, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 586; goto __pyx_L2;}
    Py_DECREF(__pyx_1); __pyx_1 = 0;
    Py_DECREF(__pyx_2); __pyx_2 = 0;
    Py_DECREF(__pyx_v_len1);
    __pyx_v_len1 = __pyx_3;
    __pyx_3 = 0;
  }
  goto __pyx_L3;
  __pyx_L2:;
  Py_XDECREF(__pyx_1); __pyx_1 = 0;
  Py_XDECREF(__pyx_2); __pyx_2 = 0;
  Py_XDECREF(__pyx_3); __pyx_3 = 0;

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

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":588 */
    Py_INCREF(Py_None);
    Py_DECREF(__pyx_v_len1);
    __pyx_v_len1 = Py_None;
    goto __pyx_L3;
  }
  goto __pyx_L1;
  __pyx_L3:;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":589 */
  /*try:*/ {

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":590 */
    __pyx_3 = __Pyx_GetName(__pyx_b, __pyx_n_len); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 590; goto __pyx_L4;}
    __pyx_1 = PyTuple_New(1); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 590; goto __pyx_L4;}
    Py_INCREF(((struct __pyx_obj_6rabbyt_6arrays__ArrayOp2 *)__pyx_v_self)->arg2);
    PyTuple_SET_ITEM(__pyx_1, 0, ((struct __pyx_obj_6rabbyt_6arrays__ArrayOp2 *)__pyx_v_self)->arg2);
    __pyx_2 = PyObject_CallObject(__pyx_3, __pyx_1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 590; goto __pyx_L4;}
    Py_DECREF(__pyx_3); __pyx_3 = 0;
    Py_DECREF(__pyx_1); __pyx_1 = 0;
    Py_DECREF(__pyx_v_len2);
    __pyx_v_len2 = __pyx_2;
    __pyx_2 = 0;
  }
  goto __pyx_L5;
  __pyx_L4:;
  Py_XDECREF(__pyx_3); __pyx_3 = 0;
  Py_XDECREF(__pyx_1); __pyx_1 = 0;
  Py_XDECREF(__pyx_2); __pyx_2 = 0;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":591 */
  __pyx_3 = __Pyx_GetName(__pyx_b, __pyx_n_TypeError); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 591; goto __pyx_L1;}
  __pyx_4 = PyErr_ExceptionMatches(__pyx_3);
  Py_DECREF(__pyx_3); __pyx_3 = 0;
  if (__pyx_4) {
    __Pyx_AddTraceback("rabbyt.arrays.__len__");
    __pyx_1 = __Pyx_GetExcValue(); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 591; goto __pyx_L1;}
    Py_DECREF(__pyx_1); __pyx_1 = 0;

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":592 */
    Py_INCREF(Py_None);
    Py_DECREF(__pyx_v_len2);
    __pyx_v_len2 = Py_None;
    goto __pyx_L5;
  }
  goto __pyx_L1;
  __pyx_L5:;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":593 */
  __pyx_4 = __pyx_v_len1 != Py_None;
  if (__pyx_4) {
    __pyx_4 = __pyx_v_len2 != Py_None;
    if (__pyx_4) {
      if (PyObject_Cmp(__pyx_v_len1, __pyx_v_len2, &__pyx_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 593; goto __pyx_L1;}
      __pyx_4 = __pyx_4 != 0;
    }
  }
  if (__pyx_4) {

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":594 */
    __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_RuntimeError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 594; goto __pyx_L1;}
    __Pyx_Raise(__pyx_2, 0, 0);
    Py_DECREF(__pyx_2); __pyx_2 = 0;
    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 594; goto __pyx_L1;}
    goto __pyx_L6;
  }
  __pyx_L6:;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":595 */
  __pyx_3 = __Pyx_GetName(__pyx_b, __pyx_n_max); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 595; goto __pyx_L1;}
  __pyx_1 = PyTuple_New(2); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 595; goto __pyx_L1;}
  Py_INCREF(__pyx_v_len1);
  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_v_len1);
  Py_INCREF(__pyx_v_len2);
  PyTuple_SET_ITEM(__pyx_1, 1, __pyx_v_len2);
  __pyx_2 = PyObject_CallObject(__pyx_3, __pyx_1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 595; goto __pyx_L1;}
  Py_DECREF(__pyx_3); __pyx_3 = 0;
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  __pyx_4 = PyInt_AsLong(__pyx_2); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 595; goto __pyx_L1;}
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  __pyx_r = __pyx_4;
  goto __pyx_L0;

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  Py_XDECREF(__pyx_2);
  Py_XDECREF(__pyx_3);
  __Pyx_AddTraceback("rabbyt.arrays._ArrayOp2.__len__");
  __pyx_r = -1;
  __pyx_L0:;
  Py_DECREF(__pyx_v_len1);
  Py_DECREF(__pyx_v_len2);
  Py_DECREF(__pyx_v_self);
  return __pyx_r;
}


static PyObject *__pyx_f_6rabbyt_6arrays_9_ArrayOp2_copy(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_f_6rabbyt_6arrays_9_ArrayOp2_copy(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_s;
  PyObject *__pyx_r;
  PyObject *__pyx_1 = 0;
  PyObject *__pyx_2 = 0;
  PyObject *__pyx_3 = 0;
  PyObject *__pyx_4 = 0;
  PyObject *__pyx_5 = 0;
  static char *__pyx_argnames[] = {0};
  if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "", __pyx_argnames)) return 0;
  Py_INCREF(__pyx_v_self);
  __pyx_v_s = Py_None; Py_INCREF(Py_None);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":598 */
  __pyx_1 = PyTuple_New(0); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 598; goto __pyx_L1;}
  __pyx_2 = PyDict_New(); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 598; goto __pyx_L1;}
  __pyx_3 = __Pyx_GetName(__pyx_b, __pyx_n_len); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 598; goto __pyx_L1;}
  __pyx_4 = PyTuple_New(1); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 598; goto __pyx_L1;}
  Py_INCREF(__pyx_v_self);
  PyTuple_SET_ITEM(__pyx_4, 0, __pyx_v_self);
  __pyx_5 = PyObject_CallObject(__pyx_3, __pyx_4); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 598; goto __pyx_L1;}
  Py_DECREF(__pyx_3); __pyx_3 = 0;
  Py_DECREF(__pyx_4); __pyx_4 = 0;
  if (PyDict_SetItem(__pyx_2, __pyx_n_size, __pyx_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 598; goto __pyx_L1;}
  Py_DECREF(__pyx_5); __pyx_5 = 0;
  __pyx_3 = PyEval_CallObjectWithKeywords(((PyObject*)__pyx_ptype_6rabbyt_6arrays_Array1d), __pyx_1, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 598; goto __pyx_L1;}
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  Py_DECREF(__pyx_v_s);
  __pyx_v_s = __pyx_3;
  __pyx_3 = 0;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":599 */
  __pyx_4 = PyObject_GetAttr(__pyx_v_self, __pyx_n_assign_to); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 599; goto __pyx_L1;}
  __pyx_5 = PyTuple_New(1); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 599; goto __pyx_L1;}
  Py_INCREF(__pyx_v_s);
  PyTuple_SET_ITEM(__pyx_5, 0, __pyx_v_s);
  __pyx_1 = PyObject_CallObject(__pyx_4, __pyx_5); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 599; goto __pyx_L1;}
  Py_DECREF(__pyx_4); __pyx_4 = 0;
  Py_DECREF(__pyx_5); __pyx_5 = 0;
  Py_DECREF(__pyx_1); __pyx_1 = 0;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":600 */
  Py_INCREF(__pyx_v_s);
  __pyx_r = __pyx_v_s;
  goto __pyx_L0;

  __pyx_r = Py_None; Py_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  Py_XDECREF(__pyx_2);
  Py_XDECREF(__pyx_3);
  Py_XDECREF(__pyx_4);
  Py_XDECREF(__pyx_5);
  __Pyx_AddTraceback("rabbyt.arrays._ArrayOp2.copy");
  __pyx_r = 0;
  __pyx_L0:;
  Py_DECREF(__pyx_v_s);
  Py_DECREF(__pyx_v_self);
  return __pyx_r;
}

static PyObject *__pyx_n_iter;

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

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":603 */
  __pyx_1 = __Pyx_GetName(__pyx_b, __pyx_n_iter); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 603; goto __pyx_L1;}
  __pyx_2 = PyObject_GetAttr(__pyx_v_self, __pyx_n_copy); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 603; goto __pyx_L1;}
  __pyx_3 = PyObject_CallObject(__pyx_2, 0); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 603; goto __pyx_L1;}
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 603; goto __pyx_L1;}
  PyTuple_SET_ITEM(__pyx_2, 0, __pyx_3);
  __pyx_3 = 0;
  __pyx_3 = PyObject_CallObject(__pyx_1, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 603; goto __pyx_L1;}
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  __pyx_r = __pyx_3;
  __pyx_3 = 0;
  goto __pyx_L0;

  __pyx_r = Py_None; Py_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  Py_XDECREF(__pyx_2);
  Py_XDECREF(__pyx_3);
  __Pyx_AddTraceback("rabbyt.arrays._ArrayOp2.__iter__");
  __pyx_r = 0;
  __pyx_L0:;
  Py_DECREF(__pyx_v_self);
  return __pyx_r;
}

static int __pyx_f_6rabbyt_6arrays_10ArrayOpAdd___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_f_6rabbyt_6arrays_10ArrayOpAdd___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_arg1 = 0;
  PyObject *__pyx_v_arg2 = 0;
  int __pyx_r;
  PyObject *__pyx_1 = 0;
  PyObject *__pyx_2 = 0;
  PyObject *__pyx_3 = 0;
  static char *__pyx_argnames[] = {"arg1","arg2",0};
  if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "OO", __pyx_argnames, &__pyx_v_arg1, &__pyx_v_arg2)) return -1;
  Py_INCREF((PyObject *)__pyx_v_self);
  Py_INCREF(__pyx_v_arg1);
  Py_INCREF(__pyx_v_arg2);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":607 */
  ((struct __pyx_obj_6rabbyt_6arrays_ArrayOpAdd *)__pyx_v_self)->__pyx_base.operation = __pyx_f_6rabbyt_6arrays_op2_add;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":608 */
  __pyx_1 = PyObject_GetAttr(((PyObject*)__pyx_ptype_6rabbyt_6arrays__ArrayOp2), __pyx_n___init__); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 608; goto __pyx_L1;}
  __pyx_2 = PyTuple_New(3); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 608; goto __pyx_L1;}
  Py_INCREF(__pyx_v_self);
  PyTuple_SET_ITEM(__pyx_2, 0, __pyx_v_self);
  Py_INCREF(__pyx_v_arg1);
  PyTuple_SET_ITEM(__pyx_2, 1, __pyx_v_arg1);
  Py_INCREF(__pyx_v_arg2);
  PyTuple_SET_ITEM(__pyx_2, 2, __pyx_v_arg2);
  __pyx_3 = PyObject_CallObject(__pyx_1, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 608; goto __pyx_L1;}
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  Py_DECREF(__pyx_3); __pyx_3 = 0;

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  Py_XDECREF(__pyx_2);
  Py_XDECREF(__pyx_3);
  __Pyx_AddTraceback("rabbyt.arrays.ArrayOpAdd.__init__");
  __pyx_r = -1;
  __pyx_L0:;
  Py_DECREF((PyObject *)__pyx_v_self);
  Py_DECREF(__pyx_v_arg1);
  Py_DECREF(__pyx_v_arg2);
  return __pyx_r;
}

static int __pyx_f_6rabbyt_6arrays_10ArrayOpSub___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_f_6rabbyt_6arrays_10ArrayOpSub___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_arg1 = 0;
  PyObject *__pyx_v_arg2 = 0;
  int __pyx_r;
  PyObject *__pyx_1 = 0;
  PyObject *__pyx_2 = 0;
  PyObject *__pyx_3 = 0;
  static char *__pyx_argnames[] = {"arg1","arg2",0};
  if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "OO", __pyx_argnames, &__pyx_v_arg1, &__pyx_v_arg2)) return -1;
  Py_INCREF((PyObject *)__pyx_v_self);
  Py_INCREF(__pyx_v_arg1);
  Py_INCREF(__pyx_v_arg2);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":612 */
  ((struct __pyx_obj_6rabbyt_6arrays_ArrayOpSub *)__pyx_v_self)->__pyx_base.operation = __pyx_f_6rabbyt_6arrays_op2_sub;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":613 */
  __pyx_1 = PyObject_GetAttr(((PyObject*)__pyx_ptype_6rabbyt_6arrays__ArrayOp2), __pyx_n___init__); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 613; goto __pyx_L1;}
  __pyx_2 = PyTuple_New(3); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 613; goto __pyx_L1;}
  Py_INCREF(__pyx_v_self);
  PyTuple_SET_ITEM(__pyx_2, 0, __pyx_v_self);
  Py_INCREF(__pyx_v_arg1);
  PyTuple_SET_ITEM(__pyx_2, 1, __pyx_v_arg1);
  Py_INCREF(__pyx_v_arg2);
  PyTuple_SET_ITEM(__pyx_2, 2, __pyx_v_arg2);
  __pyx_3 = PyObject_CallObject(__pyx_1, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 613; goto __pyx_L1;}
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  Py_DECREF(__pyx_3); __pyx_3 = 0;

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  Py_XDECREF(__pyx_2);
  Py_XDECREF(__pyx_3);
  __Pyx_AddTraceback("rabbyt.arrays.ArrayOpSub.__init__");
  __pyx_r = -1;
  __pyx_L0:;
  Py_DECREF((PyObject *)__pyx_v_self);
  Py_DECREF(__pyx_v_arg1);
  Py_DECREF(__pyx_v_arg2);
  return __pyx_r;
}

static int __pyx_f_6rabbyt_6arrays_10ArrayOpMul___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_f_6rabbyt_6arrays_10ArrayOpMul___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_arg1 = 0;
  PyObject *__pyx_v_arg2 = 0;
  int __pyx_r;
  PyObject *__pyx_1 = 0;
  PyObject *__pyx_2 = 0;
  PyObject *__pyx_3 = 0;
  static char *__pyx_argnames[] = {"arg1","arg2",0};
  if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "OO", __pyx_argnames, &__pyx_v_arg1, &__pyx_v_arg2)) return -1;
  Py_INCREF((PyObject *)__pyx_v_self);
  Py_INCREF(__pyx_v_arg1);
  Py_INCREF(__pyx_v_arg2);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":617 */
  ((struct __pyx_obj_6rabbyt_6arrays_ArrayOpMul *)__pyx_v_self)->__pyx_base.operation = __pyx_f_6rabbyt_6arrays_op2_mul;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":618 */
  __pyx_1 = PyObject_GetAttr(((PyObject*)__pyx_ptype_6rabbyt_6arrays__ArrayOp2), __pyx_n___init__); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 618; goto __pyx_L1;}
  __pyx_2 = PyTuple_New(3); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 618; goto __pyx_L1;}
  Py_INCREF(__pyx_v_self);
  PyTuple_SET_ITEM(__pyx_2, 0, __pyx_v_self);
  Py_INCREF(__pyx_v_arg1);
  PyTuple_SET_ITEM(__pyx_2, 1, __pyx_v_arg1);
  Py_INCREF(__pyx_v_arg2);
  PyTuple_SET_ITEM(__pyx_2, 2, __pyx_v_arg2);
  __pyx_3 = PyObject_CallObject(__pyx_1, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 618; goto __pyx_L1;}
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  Py_DECREF(__pyx_3); __pyx_3 = 0;

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  Py_XDECREF(__pyx_2);
  Py_XDECREF(__pyx_3);
  __Pyx_AddTraceback("rabbyt.arrays.ArrayOpMul.__init__");
  __pyx_r = -1;
  __pyx_L0:;
  Py_DECREF((PyObject *)__pyx_v_self);
  Py_DECREF(__pyx_v_arg1);
  Py_DECREF(__pyx_v_arg2);
  return __pyx_r;
}

static int __pyx_f_6rabbyt_6arrays_10ArrayOpDiv___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_f_6rabbyt_6arrays_10ArrayOpDiv___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_arg1 = 0;
  PyObject *__pyx_v_arg2 = 0;
  int __pyx_r;
  PyObject *__pyx_1 = 0;
  PyObject *__pyx_2 = 0;
  PyObject *__pyx_3 = 0;
  static char *__pyx_argnames[] = {"arg1","arg2",0};
  if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "OO", __pyx_argnames, &__pyx_v_arg1, &__pyx_v_arg2)) return -1;
  Py_INCREF((PyObject *)__pyx_v_self);
  Py_INCREF(__pyx_v_arg1);
  Py_INCREF(__pyx_v_arg2);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":622 */
  ((struct __pyx_obj_6rabbyt_6arrays_ArrayOpDiv *)__pyx_v_self)->__pyx_base.operation = __pyx_f_6rabbyt_6arrays_op2_div;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":623 */
  __pyx_1 = PyObject_GetAttr(((PyObject*)__pyx_ptype_6rabbyt_6arrays__ArrayOp2), __pyx_n___init__); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 623; goto __pyx_L1;}
  __pyx_2 = PyTuple_New(3); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 623; goto __pyx_L1;}
  Py_INCREF(__pyx_v_self);
  PyTuple_SET_ITEM(__pyx_2, 0, __pyx_v_self);
  Py_INCREF(__pyx_v_arg1);
  PyTuple_SET_ITEM(__pyx_2, 1, __pyx_v_arg1);
  Py_INCREF(__pyx_v_arg2);
  PyTuple_SET_ITEM(__pyx_2, 2, __pyx_v_arg2);
  __pyx_3 = PyObject_CallObject(__pyx_1, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 623; goto __pyx_L1;}
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  Py_DECREF(__pyx_3); __pyx_3 = 0;

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  Py_XDECREF(__pyx_2);
  Py_XDECREF(__pyx_3);
  __Pyx_AddTraceback("rabbyt.arrays.ArrayOpDiv.__init__");
  __pyx_r = -1;
  __pyx_L0:;
  Py_DECREF((PyObject *)__pyx_v_self);
  Py_DECREF(__pyx_v_arg1);
  Py_DECREF(__pyx_v_arg2);
  return __pyx_r;
}

static int __pyx_f_6rabbyt_6arrays_10ArrayOpMod___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_f_6rabbyt_6arrays_10ArrayOpMod___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_arg1 = 0;
  PyObject *__pyx_v_arg2 = 0;
  int __pyx_r;
  PyObject *__pyx_1 = 0;
  PyObject *__pyx_2 = 0;
  PyObject *__pyx_3 = 0;
  static char *__pyx_argnames[] = {"arg1","arg2",0};
  if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "OO", __pyx_argnames, &__pyx_v_arg1, &__pyx_v_arg2)) return -1;
  Py_INCREF((PyObject *)__pyx_v_self);
  Py_INCREF(__pyx_v_arg1);
  Py_INCREF(__pyx_v_arg2);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":627 */
  ((struct __pyx_obj_6rabbyt_6arrays_ArrayOpMod *)__pyx_v_self)->__pyx_base.operation = __pyx_f_6rabbyt_6arrays_op2_mod;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":628 */
  __pyx_1 = PyObject_GetAttr(((PyObject*)__pyx_ptype_6rabbyt_6arrays__ArrayOp2), __pyx_n___init__); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 628; goto __pyx_L1;}
  __pyx_2 = PyTuple_New(3); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 628; goto __pyx_L1;}
  Py_INCREF(__pyx_v_self);
  PyTuple_SET_ITEM(__pyx_2, 0, __pyx_v_self);
  Py_INCREF(__pyx_v_arg1);
  PyTuple_SET_ITEM(__pyx_2, 1, __pyx_v_arg1);
  Py_INCREF(__pyx_v_arg2);
  PyTuple_SET_ITEM(__pyx_2, 2, __pyx_v_arg2);
  __pyx_3 = PyObject_CallObject(__pyx_1, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 628; goto __pyx_L1;}
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  Py_DECREF(__pyx_3); __pyx_3 = 0;

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  Py_XDECREF(__pyx_2);
  Py_XDECREF(__pyx_3);
  __Pyx_AddTraceback("rabbyt.arrays.ArrayOpMod.__init__");
  __pyx_r = -1;
  __pyx_L0:;
  Py_DECREF((PyObject *)__pyx_v_self);
  Py_DECREF(__pyx_v_arg1);
  Py_DECREF(__pyx_v_arg2);
  return __pyx_r;
}

static int __pyx_f_6rabbyt_6arrays_10ArrayOpMin___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_f_6rabbyt_6arrays_10ArrayOpMin___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_arg1 = 0;
  PyObject *__pyx_v_arg2 = 0;
  int __pyx_r;
  PyObject *__pyx_1 = 0;
  PyObject *__pyx_2 = 0;
  PyObject *__pyx_3 = 0;
  static char *__pyx_argnames[] = {"arg1","arg2",0};
  if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "OO", __pyx_argnames, &__pyx_v_arg1, &__pyx_v_arg2)) return -1;
  Py_INCREF((PyObject *)__pyx_v_self);
  Py_INCREF(__pyx_v_arg1);
  Py_INCREF(__pyx_v_arg2);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":632 */
  ((struct __pyx_obj_6rabbyt_6arrays_ArrayOpMin *)__pyx_v_self)->__pyx_base.operation = __pyx_f_6rabbyt_6arrays_op2_min;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":633 */
  __pyx_1 = PyObject_GetAttr(((PyObject*)__pyx_ptype_6rabbyt_6arrays__ArrayOp2), __pyx_n___init__); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 633; goto __pyx_L1;}
  __pyx_2 = PyTuple_New(3); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 633; goto __pyx_L1;}
  Py_INCREF(__pyx_v_self);
  PyTuple_SET_ITEM(__pyx_2, 0, __pyx_v_self);
  Py_INCREF(__pyx_v_arg1);
  PyTuple_SET_ITEM(__pyx_2, 1, __pyx_v_arg1);
  Py_INCREF(__pyx_v_arg2);
  PyTuple_SET_ITEM(__pyx_2, 2, __pyx_v_arg2);
  __pyx_3 = PyObject_CallObject(__pyx_1, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 633; goto __pyx_L1;}
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  Py_DECREF(__pyx_3); __pyx_3 = 0;

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  Py_XDECREF(__pyx_2);
  Py_XDECREF(__pyx_3);
  __Pyx_AddTraceback("rabbyt.arrays.ArrayOpMin.__init__");
  __pyx_r = -1;
  __pyx_L0:;
  Py_DECREF((PyObject *)__pyx_v_self);
  Py_DECREF(__pyx_v_arg1);
  Py_DECREF(__pyx_v_arg2);
  return __pyx_r;
}

static int __pyx_f_6rabbyt_6arrays_10ArrayOpMax___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_f_6rabbyt_6arrays_10ArrayOpMax___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_arg1 = 0;
  PyObject *__pyx_v_arg2 = 0;
  int __pyx_r;
  PyObject *__pyx_1 = 0;
  PyObject *__pyx_2 = 0;
  PyObject *__pyx_3 = 0;
  static char *__pyx_argnames[] = {"arg1","arg2",0};
  if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "OO", __pyx_argnames, &__pyx_v_arg1, &__pyx_v_arg2)) return -1;
  Py_INCREF((PyObject *)__pyx_v_self);
  Py_INCREF(__pyx_v_arg1);
  Py_INCREF(__pyx_v_arg2);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":637 */
  ((struct __pyx_obj_6rabbyt_6arrays_ArrayOpMax *)__pyx_v_self)->__pyx_base.operation = __pyx_f_6rabbyt_6arrays_op2_max;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":638 */
  __pyx_1 = PyObject_GetAttr(((PyObject*)__pyx_ptype_6rabbyt_6arrays__ArrayOp2), __pyx_n___init__); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 638; goto __pyx_L1;}
  __pyx_2 = PyTuple_New(3); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 638; goto __pyx_L1;}
  Py_INCREF(__pyx_v_self);
  PyTuple_SET_ITEM(__pyx_2, 0, __pyx_v_self);
  Py_INCREF(__pyx_v_arg1);
  PyTuple_SET_ITEM(__pyx_2, 1, __pyx_v_arg1);
  Py_INCREF(__pyx_v_arg2);
  PyTuple_SET_ITEM(__pyx_2, 2, __pyx_v_arg2);
  __pyx_3 = PyObject_CallObject(__pyx_1, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 638; goto __pyx_L1;}
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  Py_DECREF(__pyx_3); __pyx_3 = 0;

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  Py_XDECREF(__pyx_2);
  Py_XDECREF(__pyx_3);
  __Pyx_AddTraceback("rabbyt.arrays.ArrayOpMax.__init__");
  __pyx_r = -1;
  __pyx_L0:;
  Py_DECREF((PyObject *)__pyx_v_self);
  Py_DECREF(__pyx_v_arg1);
  Py_DECREF(__pyx_v_arg2);
  return __pyx_r;
}

static PyObject *__pyx_f_6rabbyt_6arrays_array_max(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_f_6rabbyt_6arrays_array_max(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_a = 0;
  PyObject *__pyx_v_b = 0;
  PyObject *__pyx_r;
  PyObject *__pyx_1 = 0;
  PyObject *__pyx_2 = 0;
  static char *__pyx_argnames[] = {"a","b",0};
  if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "OO", __pyx_argnames, &__pyx_v_a, &__pyx_v_b)) return 0;
  Py_INCREF(__pyx_v_a);
  Py_INCREF(__pyx_v_b);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":641 */
  __pyx_1 = PyTuple_New(2); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 641; goto __pyx_L1;}
  Py_INCREF(__pyx_v_a);
  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_v_a);
  Py_INCREF(__pyx_v_b);
  PyTuple_SET_ITEM(__pyx_1, 1, __pyx_v_b);
  __pyx_2 = PyObject_CallObject(((PyObject*)__pyx_ptype_6rabbyt_6arrays_ArrayOpMax), __pyx_1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 641; 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.arrays.array_max");
  __pyx_r = 0;
  __pyx_L0:;
  Py_DECREF(__pyx_v_a);
  Py_DECREF(__pyx_v_b);
  return __pyx_r;
}

static PyObject *__pyx_f_6rabbyt_6arrays__do_op2_a_a(float ((*__pyx_v_operation)(float ,float )),int __pyx_v_start,int __pyx_v_end,struct __pyx_obj_6rabbyt_6arrays__BaseArray *__pyx_v_result,struct __pyx_obj_6rabbyt_6arrays__BaseArray *__pyx_v_arg1,struct __pyx_obj_6rabbyt_6arrays__BaseArray *__pyx_v_arg2) {
  int __pyx_v_i;
  PyObject *__pyx_r;
  Py_INCREF(__pyx_v_result);
  Py_INCREF(__pyx_v_arg1);
  Py_INCREF(__pyx_v_arg2);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":648 */
  ((struct __pyx_vtabstruct_6rabbyt_6arrays__BaseArray *)__pyx_v_arg1->__pyx_vtab)->_sync_data_ptr(__pyx_v_arg1);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":649 */
  ((struct __pyx_vtabstruct_6rabbyt_6arrays__BaseArray *)__pyx_v_arg2->__pyx_vtab)->_sync_data_ptr(__pyx_v_arg2);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":650 */
  for (__pyx_v_i = __pyx_v_start; __pyx_v_i < __pyx_v_end; ++__pyx_v_i) {

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":651 */
    (__pyx_v_result->_data[(__pyx_v_i * __pyx_v_result->_stride)]) = __pyx_v_operation(((struct __pyx_vtabstruct_6rabbyt_6arrays__BaseArray *)__pyx_v_arg1->__pyx_vtab)->_getitem(__pyx_v_arg1,__pyx_v_i),((struct __pyx_vtabstruct_6rabbyt_6arrays__BaseArray *)__pyx_v_arg2->__pyx_vtab)->_getitem(__pyx_v_arg2,__pyx_v_i));
  }

  __pyx_r = Py_None; Py_INCREF(Py_None);
  Py_DECREF(__pyx_v_result);
  Py_DECREF(__pyx_v_arg1);
  Py_DECREF(__pyx_v_arg2);
  return __pyx_r;
}

static PyObject *__pyx_f_6rabbyt_6arrays__do_op2_a_f(float ((*__pyx_v_operation)(float ,float )),int __pyx_v_start,int __pyx_v_end,struct __pyx_obj_6rabbyt_6arrays__BaseArray *__pyx_v_result,struct __pyx_obj_6rabbyt_6arrays__BaseArray *__pyx_v_arg1,float __pyx_v_arg2) {
  int __pyx_v_i;
  PyObject *__pyx_r;
  Py_INCREF(__pyx_v_result);
  Py_INCREF(__pyx_v_arg1);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":659 */
  ((struct __pyx_vtabstruct_6rabbyt_6arrays__BaseArray *)__pyx_v_arg1->__pyx_vtab)->_sync_data_ptr(__pyx_v_arg1);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":660 */
  for (__pyx_v_i = __pyx_v_start; __pyx_v_i < __pyx_v_end; ++__pyx_v_i) {

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":661 */
    (__pyx_v_result->_data[(__pyx_v_i * __pyx_v_result->_stride)]) = __pyx_v_operation(((struct __pyx_vtabstruct_6rabbyt_6arrays__BaseArray *)__pyx_v_arg1->__pyx_vtab)->_getitem(__pyx_v_arg1,__pyx_v_i),__pyx_v_arg2);
  }

  __pyx_r = Py_None; Py_INCREF(Py_None);
  Py_DECREF(__pyx_v_result);
  Py_DECREF(__pyx_v_arg1);
  return __pyx_r;
}

static PyObject *__pyx_f_6rabbyt_6arrays__do_op2_f_a(float ((*__pyx_v_operation)(float ,float )),int __pyx_v_start,int __pyx_v_end,struct __pyx_obj_6rabbyt_6arrays__BaseArray *__pyx_v_result,float __pyx_v_arg1,struct __pyx_obj_6rabbyt_6arrays__BaseArray *__pyx_v_arg2) {
  int __pyx_v_i;
  PyObject *__pyx_r;
  Py_INCREF(__pyx_v_result);
  Py_INCREF(__pyx_v_arg2);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":669 */
  ((struct __pyx_vtabstruct_6rabbyt_6arrays__BaseArray *)__pyx_v_arg2->__pyx_vtab)->_sync_data_ptr(__pyx_v_arg2);

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":670 */
  for (__pyx_v_i = __pyx_v_start; __pyx_v_i < __pyx_v_end; ++__pyx_v_i) {

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":671 */
    (__pyx_v_result->_data[(__pyx_v_i * __pyx_v_result->_stride)]) = __pyx_v_operation(__pyx_v_arg1,((struct __pyx_vtabstruct_6rabbyt_6arrays__BaseArray *)__pyx_v_arg2->__pyx_vtab)->_getitem(__pyx_v_arg2,__pyx_v_i));
  }

  __pyx_r = Py_None; Py_INCREF(Py_None);
  Py_DECREF(__pyx_v_result);
  Py_DECREF(__pyx_v_arg2);
  return __pyx_r;
}

static float __pyx_f_6rabbyt_6arrays_op2_add(float __pyx_v_arg1,float __pyx_v_arg2) {
  float __pyx_r;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":676 */
  __pyx_r = (__pyx_v_arg1 + __pyx_v_arg2);
  goto __pyx_L0;

  __pyx_r = 0;
  __pyx_L0:;
  return __pyx_r;
}

static float __pyx_f_6rabbyt_6arrays_op2_sub(float __pyx_v_arg1,float __pyx_v_arg2) {
  float __pyx_r;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":679 */
  __pyx_r = (__pyx_v_arg1 - __pyx_v_arg2);
  goto __pyx_L0;

  __pyx_r = 0;
  __pyx_L0:;
  return __pyx_r;
}

static float __pyx_f_6rabbyt_6arrays_op2_mul(float __pyx_v_arg1,float __pyx_v_arg2) {
  float __pyx_r;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":682 */
  __pyx_r = (__pyx_v_arg1 * __pyx_v_arg2);
  goto __pyx_L0;

  __pyx_r = 0;
  __pyx_L0:;
  return __pyx_r;
}

static float __pyx_f_6rabbyt_6arrays_op2_div(float __pyx_v_arg1,float __pyx_v_arg2) {
  float __pyx_r;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":685 */
  __pyx_r = (__pyx_v_arg1 / __pyx_v_arg2);
  goto __pyx_L0;

  __pyx_r = 0;
  __pyx_L0:;
  return __pyx_r;
}

static PyObject *__pyx_n_fmodf;

static float __pyx_f_6rabbyt_6arrays_op2_mod(float __pyx_v_arg1,float __pyx_v_arg2) {
  float __pyx_r;
  PyObject *__pyx_1 = 0;
  PyObject *__pyx_2 = 0;
  PyObject *__pyx_3 = 0;
  PyObject *__pyx_4 = 0;
  float __pyx_5;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":688 */
  __pyx_1 = __Pyx_GetName(__pyx_b, __pyx_n_fmodf); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 688; goto __pyx_L1;}
  __pyx_2 = PyFloat_FromDouble(__pyx_v_arg1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 688; goto __pyx_L1;}
  __pyx_3 = PyFloat_FromDouble(__pyx_v_arg2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 688; goto __pyx_L1;}
  __pyx_4 = PyTuple_New(2); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 688; goto __pyx_L1;}
  PyTuple_SET_ITEM(__pyx_4, 0, __pyx_2);
  PyTuple_SET_ITEM(__pyx_4, 1, __pyx_3);
  __pyx_2 = 0;
  __pyx_3 = 0;
  __pyx_2 = PyObject_CallObject(__pyx_1, __pyx_4); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 688; goto __pyx_L1;}
  Py_DECREF(__pyx_1); __pyx_1 = 0;
  Py_DECREF(__pyx_4); __pyx_4 = 0;
  __pyx_5 = PyFloat_AsDouble(__pyx_2); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 688; goto __pyx_L1;}
  Py_DECREF(__pyx_2); __pyx_2 = 0;
  __pyx_r = __pyx_5;
  goto __pyx_L0;

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  Py_XDECREF(__pyx_2);
  Py_XDECREF(__pyx_3);
  Py_XDECREF(__pyx_4);
  __Pyx_WriteUnraisable("rabbyt.arrays.op2_mod");
  __pyx_L0:;
  return __pyx_r;
}

static float __pyx_f_6rabbyt_6arrays_op2_min(float __pyx_v_arg1,float __pyx_v_arg2) {
  float __pyx_r;
  int __pyx_1;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":691 */
  __pyx_1 = (__pyx_v_arg1 < __pyx_v_arg2);
  if (__pyx_1) {

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":692 */
    __pyx_r = __pyx_v_arg1;
    goto __pyx_L0;
    goto __pyx_L2;
  }
  /*else*/ {

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":694 */
    __pyx_r = __pyx_v_arg2;
    goto __pyx_L0;
  }
  __pyx_L2:;

  __pyx_r = 0;
  __pyx_L0:;
  return __pyx_r;
}

static float __pyx_f_6rabbyt_6arrays_op2_max(float __pyx_v_arg1,float __pyx_v_arg2) {
  float __pyx_r;
  int __pyx_1;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":697 */
  __pyx_1 = (__pyx_v_arg1 > __pyx_v_arg2);
  if (__pyx_1) {

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":698 */
    __pyx_r = __pyx_v_arg1;
    goto __pyx_L0;
    goto __pyx_L2;
  }
  /*else*/ {

    /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":700 */
    __pyx_r = __pyx_v_arg2;
    goto __pyx_L0;
  }
  __pyx_L2:;

  __pyx_r = 0;
  __pyx_L0:;
  return __pyx_r;
}

static __Pyx_InternTabEntry __pyx_intern_tab[] = {
  {&__pyx_n_AttributeError, "AttributeError"},
  {&__pyx_n_False, "False"},
  {&__pyx_n_IndexError, "IndexError"},
  {&__pyx_n_NotImplemented, "NotImplemented"},
  {&__pyx_n_RuntimeError, "RuntimeError"},
  {&__pyx_n_True, "True"},
  {&__pyx_n_TypeError, "TypeError"},
  {&__pyx_n_ValueError, "ValueError"},
  {&__pyx_n___author__, "__author__"},
  {&__pyx_n___class__, "__class__"},
  {&__pyx_n___credits__, "__credits__"},
  {&__pyx_n___init__, "__init__"},
  {&__pyx_n___name__, "__name__"},
  {&__pyx_n__grow, "_grow"},
  {&__pyx_n__size_changed, "_size_changed"},
  {&__pyx_n__update, "_update"},
  {&__pyx_n_append, "append"},
  {&__pyx_n_array_max, "array_max"},
  {&__pyx_n_assign_from, "assign_from"},
  {&__pyx_n_assign_to, "assign_to"},
  {&__pyx_n_basestring, "basestring"},
  {&__pyx_n_copy, "copy"},
  {&__pyx_n_data_owner, "data_owner"},
  {&__pyx_n_enumerate, "enumerate"},
  {&__pyx_n_float, "float"},
  {&__pyx_n_fmodf, "fmodf"},
  {&__pyx_n_hasattr, "hasattr"},
  {&__pyx_n_isinstance, "isinstance"},
  {&__pyx_n_iter, "iter"},
  {&__pyx_n_join, "join"},
  {&__pyx_n_len, "len"},
  {&__pyx_n_list, "list"},
  {&__pyx_n_max, "max"},
  {&__pyx_n_set_size, "set_size"},
  {&__pyx_n_size, "size"},
  {&__pyx_n_str, "str"},
  {0, 0}
};

static __Pyx_StringTabEntry __pyx_string_tab[] = {
  {&__pyx_k1p, __pyx_k1, sizeof(__pyx_k1)},
  {&__pyx_k2p, __pyx_k2, sizeof(__pyx_k2)},
  {&__pyx_k10p, __pyx_k10, sizeof(__pyx_k10)},
  {&__pyx_k11p, __pyx_k11, sizeof(__pyx_k11)},
  {&__pyx_k14p, __pyx_k14, sizeof(__pyx_k14)},
  {&__pyx_k15p, __pyx_k15, sizeof(__pyx_k15)},
  {&__pyx_k16p, __pyx_k16, sizeof(__pyx_k16)},
  {&__pyx_k18p, __pyx_k18, sizeof(__pyx_k18)},
  {&__pyx_k19p, __pyx_k19, sizeof(__pyx_k19)},
  {&__pyx_k21p, __pyx_k21, sizeof(__pyx_k21)},
  {&__pyx_k20p, __pyx_k20, sizeof(__pyx_k20)},
  {0, 0, 0}
};
static struct __pyx_vtabstruct_6rabbyt_6arrays__BaseArray __pyx_vtable_6rabbyt_6arrays__BaseArray;

static PyObject *__pyx_tp_new_6rabbyt_6arrays__BaseArray(PyTypeObject *t, PyObject *a, PyObject *k) {
  PyObject *o = (*t->tp_alloc)(t, 0);
  struct __pyx_obj_6rabbyt_6arrays__BaseArray *p = (struct __pyx_obj_6rabbyt_6arrays__BaseArray *)o;
  *(struct __pyx_vtabstruct_6rabbyt_6arrays__BaseArray **)&p->__pyx_vtab = __pyx_vtabptr_6rabbyt_6arrays__BaseArray;
  p->data_owner = ((struct __pyx_obj_6rabbyt_6arrays__BaseArray *)Py_None); Py_INCREF(Py_None);
  return o;
}

static void __pyx_tp_dealloc_6rabbyt_6arrays__BaseArray(PyObject *o) {
  struct __pyx_obj_6rabbyt_6arrays__BaseArray *p = (struct __pyx_obj_6rabbyt_6arrays__BaseArray *)o;
  {
    PyObject *etype, *eval, *etb;
    PyErr_Fetch(&etype, &eval, &etb);
    ++o->ob_refcnt;
    __pyx_f_6rabbyt_6arrays_10_BaseArray___dealloc__(o);
    if (PyErr_Occurred()) PyErr_WriteUnraisable(o);
    --o->ob_refcnt;
    PyErr_Restore(etype, eval, etb);
  }
  Py_XDECREF(((PyObject *)p->data_owner));
  (*o->ob_type->tp_free)(o);
}

static int __pyx_tp_traverse_6rabbyt_6arrays__BaseArray(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_6rabbyt_6arrays__BaseArray *p = (struct __pyx_obj_6rabbyt_6arrays__BaseArray *)o;
  if (p->data_owner) {
    e = (*v)(((PyObject*)p->data_owner), a); if (e) return e;
  }
  return 0;
}

static int __pyx_tp_clear_6rabbyt_6arrays__BaseArray(PyObject *o) {
  struct __pyx_obj_6rabbyt_6arrays__BaseArray *p = (struct __pyx_obj_6rabbyt_6arrays__BaseArray *)o;
  Py_XDECREF(((PyObject *)p->data_owner));
  p->data_owner = ((struct __pyx_obj_6rabbyt_6arrays__BaseArray *)Py_None); Py_INCREF(Py_None);
  return 0;
}

static struct PyMethodDef __pyx_methods_6rabbyt_6arrays__BaseArray[] = {
  {"_size_changed", (PyCFunction)__pyx_f_6rabbyt_6arrays_10_BaseArray__size_changed, METH_VARARGS|METH_KEYWORDS, 0},
  {"_grow", (PyCFunction)__pyx_f_6rabbyt_6arrays_10_BaseArray__grow, METH_VARARGS|METH_KEYWORDS, 0},
  {"set_size", (PyCFunction)__pyx_f_6rabbyt_6arrays_10_BaseArray_set_size, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6rabbyt_6arrays_10_BaseArray_set_size},
  {"append", (PyCFunction)__pyx_f_6rabbyt_6arrays_10_BaseArray_append, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6rabbyt_6arrays_10_BaseArray_append},
  {"extend", (PyCFunction)__pyx_f_6rabbyt_6arrays_10_BaseArray_extend, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6rabbyt_6arrays_10_BaseArray_extend},
  {"get_data_addr", (PyCFunction)__pyx_f_6rabbyt_6arrays_10_BaseArray_get_data_addr, METH_VARARGS|METH_KEYWORDS, 0},
  {"get_data_stride", (PyCFunction)__pyx_f_6rabbyt_6arrays_10_BaseArray_get_data_stride, METH_VARARGS|METH_KEYWORDS, 0},
  {0, 0, 0, 0}
};

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

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

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

PyTypeObject __pyx_type_6rabbyt_6arrays__BaseArray = {
  PyObject_HEAD_INIT(0)
  0, /*ob_size*/
  "rabbyt.arrays._BaseArray", /*tp_name*/
  sizeof(struct __pyx_obj_6rabbyt_6arrays__BaseArray), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6rabbyt_6arrays__BaseArray, /*tp_dealloc*/
  0, /*tp_print*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  0, /*tp_compare*/
  0, /*tp_repr*/
  &__pyx_tp_as_number__BaseArray, /*tp_as_number*/
  &__pyx_tp_as_sequence__BaseArray, /*tp_as_sequence*/
  &__pyx_tp_as_mapping__BaseArray, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  &__pyx_tp_as_buffer__BaseArray, /*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_6arrays__BaseArray, /*tp_traverse*/
  __pyx_tp_clear_6rabbyt_6arrays__BaseArray, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_6rabbyt_6arrays__BaseArray, /*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_6arrays_10_BaseArray___init__, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6rabbyt_6arrays__BaseArray, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
};

static PyObject *__pyx_tp_new_6rabbyt_6arrays_ItemInfo(PyTypeObject *t, PyObject *a, PyObject *k) {
  PyObject *o = (*t->tp_alloc)(t, 0);
  struct __pyx_obj_6rabbyt_6arrays_ItemInfo *p = (struct __pyx_obj_6rabbyt_6arrays_ItemInfo *)o;
  p->array = ((struct __pyx_obj_6rabbyt_6arrays_Array2d *)Py_None); Py_INCREF(Py_None);
  return o;
}

static void __pyx_tp_dealloc_6rabbyt_6arrays_ItemInfo(PyObject *o) {
  struct __pyx_obj_6rabbyt_6arrays_ItemInfo *p = (struct __pyx_obj_6rabbyt_6arrays_ItemInfo *)o;
  Py_XDECREF(((PyObject *)p->array));
  (*o->ob_type->tp_free)(o);
}

static int __pyx_tp_traverse_6rabbyt_6arrays_ItemInfo(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_6rabbyt_6arrays_ItemInfo *p = (struct __pyx_obj_6rabbyt_6arrays_ItemInfo *)o;
  if (p->array) {
    e = (*v)(((PyObject*)p->array), a); if (e) return e;
  }
  return 0;
}

static int __pyx_tp_clear_6rabbyt_6arrays_ItemInfo(PyObject *o) {
  struct __pyx_obj_6rabbyt_6arrays_ItemInfo *p = (struct __pyx_obj_6rabbyt_6arrays_ItemInfo *)o;
  Py_XDECREF(((PyObject *)p->array));
  p->array = ((struct __pyx_obj_6rabbyt_6arrays_Array2d *)Py_None); Py_INCREF(Py_None);
  return 0;
}
static PyObject *__pyx_sq_item_6rabbyt_6arrays_ItemInfo(PyObject *o, int i) {
  PyObject *r;
  PyObject *x = PyInt_FromLong(i); if(!x) return 0;
  r = o->ob_type->tp_as_mapping->mp_subscript(o, x);
  Py_DECREF(x);
  return r;
}

static int __pyx_mp_ass_subscript_6rabbyt_6arrays_ItemInfo(PyObject *o, PyObject *i, PyObject *v) {
  if (v) {
    return __pyx_f_6rabbyt_6arrays_8ItemInfo___setitem__(o, i, v);
  }
  else {
    PyErr_Format(PyExc_NotImplementedError,
      "Subscript deletion not supported by %s", o->ob_type->tp_name);
    return -1;
  }
}

static PyObject *__pyx_tp_getattro_6rabbyt_6arrays_ItemInfo(PyObject *o, PyObject *n) {
  PyObject *v = PyObject_GenericGetAttr(o, n);
  if (!v && PyErr_ExceptionMatches(PyExc_AttributeError)) {
    PyErr_Clear();
    v = __pyx_f_6rabbyt_6arrays_8ItemInfo___getattr__(o, n);
  }
  return v;
}

static int __pyx_tp_setattro_6rabbyt_6arrays_ItemInfo(PyObject *o, PyObject *n, PyObject *v) {
  if (v) {
    return __pyx_f_6rabbyt_6arrays_8ItemInfo___setattr__(o, n, v);
  }
  else {
    return PyObject_GenericSetAttr(o, n, 0);
  }
}

static struct PyMethodDef __pyx_methods_6rabbyt_6arrays_ItemInfo[] = {
  {"_update", (PyCFunction)__pyx_f_6rabbyt_6arrays_8ItemInfo__update, METH_VARARGS|METH_KEYWORDS, 0},
  {0, 0, 0, 0}
};

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

static PySequenceMethods __pyx_tp_as_sequence_ItemInfo = {
  __pyx_f_6rabbyt_6arrays_8ItemInfo___len__, /*sq_length*/
  0, /*sq_concat*/
  0, /*sq_repeat*/
  __pyx_sq_item_6rabbyt_6arrays_ItemInfo, /*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_ItemInfo = {
  __pyx_f_6rabbyt_6arrays_8ItemInfo___len__, /*mp_length*/
  __pyx_f_6rabbyt_6arrays_8ItemInfo___getitem__, /*mp_subscript*/
  __pyx_mp_ass_subscript_6rabbyt_6arrays_ItemInfo, /*mp_ass_subscript*/
};

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

PyTypeObject __pyx_type_6rabbyt_6arrays_ItemInfo = {
  PyObject_HEAD_INIT(0)
  0, /*ob_size*/
  "rabbyt.arrays.ItemInfo", /*tp_name*/
  sizeof(struct __pyx_obj_6rabbyt_6arrays_ItemInfo), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6rabbyt_6arrays_ItemInfo, /*tp_dealloc*/
  0, /*tp_print*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  0, /*tp_compare*/
  0, /*tp_repr*/
  &__pyx_tp_as_number_ItemInfo, /*tp_as_number*/
  &__pyx_tp_as_sequence_ItemInfo, /*tp_as_sequence*/
  &__pyx_tp_as_mapping_ItemInfo, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  __pyx_tp_getattro_6rabbyt_6arrays_ItemInfo, /*tp_getattro*/
  __pyx_tp_setattro_6rabbyt_6arrays_ItemInfo, /*tp_setattro*/
  &__pyx_tp_as_buffer_ItemInfo, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
  "\n    Handles accessing data for a single item in an array.\n    ", /*tp_doc*/
  __pyx_tp_traverse_6rabbyt_6arrays_ItemInfo, /*tp_traverse*/
  __pyx_tp_clear_6rabbyt_6arrays_ItemInfo, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_6rabbyt_6arrays_ItemInfo, /*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_6arrays_8ItemInfo___init__, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6rabbyt_6arrays_ItemInfo, /*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_6arrays_Array2d __pyx_vtable_6rabbyt_6arrays_Array2d;

static PyObject *__pyx_tp_new_6rabbyt_6arrays_Array2d(PyTypeObject *t, PyObject *a, PyObject *k) {
  PyObject *o = __pyx_ptype_6rabbyt_6arrays__BaseArray->tp_new(t, a, k);
  struct __pyx_obj_6rabbyt_6arrays_Array2d *p = (struct __pyx_obj_6rabbyt_6arrays_Array2d *)o;
  *(struct __pyx_vtabstruct_6rabbyt_6arrays_Array2d **)&p->__pyx_base.__pyx_vtab = __pyx_vtabptr_6rabbyt_6arrays_Array2d;
  p->_attributes = Py_None; Py_INCREF(Py_None);
  p->_attribute_arrays = Py_None; Py_INCREF(Py_None);
  p->_column_arrays = Py_None; Py_INCREF(Py_None);
  p->_swizzles = Py_None; Py_INCREF(Py_None);
  p->_defaults = Py_None; Py_INCREF(Py_None);
  return o;
}

static void __pyx_tp_dealloc_6rabbyt_6arrays_Array2d(PyObject *o) {
  struct __pyx_obj_6rabbyt_6arrays_Array2d *p = (struct __pyx_obj_6rabbyt_6arrays_Array2d *)o;
  Py_XDECREF(p->_attributes);
  Py_XDECREF(p->_attribute_arrays);
  Py_XDECREF(p->_column_arrays);
  Py_XDECREF(p->_swizzles);
  Py_XDECREF(p->_defaults);
  __pyx_ptype_6rabbyt_6arrays__BaseArray->tp_dealloc(o);
}

static int __pyx_tp_traverse_6rabbyt_6arrays_Array2d(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_6rabbyt_6arrays_Array2d *p = (struct __pyx_obj_6rabbyt_6arrays_Array2d *)o;
  e = __pyx_ptype_6rabbyt_6arrays__BaseArray->tp_traverse(o, v, a); if (e) return e;
  if (p->_attributes) {
    e = (*v)(p->_attributes, a); if (e) return e;
  }
  if (p->_attribute_arrays) {
    e = (*v)(p->_attribute_arrays, a); if (e) return e;
  }
  if (p->_column_arrays) {
    e = (*v)(p->_column_arrays, a); if (e) return e;
  }
  if (p->_swizzles) {
    e = (*v)(p->_swizzles, a); if (e) return e;
  }
  if (p->_defaults) {
    e = (*v)(p->_defaults, a); if (e) return e;
  }
  return 0;
}

static int __pyx_tp_clear_6rabbyt_6arrays_Array2d(PyObject *o) {
  struct __pyx_obj_6rabbyt_6arrays_Array2d *p = (struct __pyx_obj_6rabbyt_6arrays_Array2d *)o;
  __pyx_ptype_6rabbyt_6arrays__BaseArray->tp_clear(o);
  Py_XDECREF(p->_attributes);
  p->_attributes = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(p->_attribute_arrays);
  p->_attribute_arrays = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(p->_column_arrays);
  p->_column_arrays = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(p->_swizzles);
  p->_swizzles = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(p->_defaults);
  p->_defaults = Py_None; Py_INCREF(Py_None);
  return 0;
}
static PyObject *__pyx_sq_item_6rabbyt_6arrays_Array2d(PyObject *o, int i) {
  PyObject *r;
  PyObject *x = PyInt_FromLong(i); if(!x) return 0;
  r = o->ob_type->tp_as_mapping->mp_subscript(o, x);
  Py_DECREF(x);
  return r;
}

static int __pyx_mp_ass_subscript_6rabbyt_6arrays_Array2d(PyObject *o, PyObject *i, PyObject *v) {
  if (v) {
    return __pyx_f_6rabbyt_6arrays_7Array2d___setitem__(o, i, v);
  }
  else {
    if (__pyx_ptype_6rabbyt_6arrays__BaseArray->tp_as_mapping && __pyx_ptype_6rabbyt_6arrays__BaseArray->tp_as_mapping->mp_ass_subscript)
      return __pyx_ptype_6rabbyt_6arrays__BaseArray->tp_as_mapping->mp_ass_subscript(o, i, v);
    PyErr_Format(PyExc_NotImplementedError,
      "Subscript deletion not supported by %s", o->ob_type->tp_name);
    return -1;
  }
}

static PyObject *__pyx_tp_getattro_6rabbyt_6arrays_Array2d(PyObject *o, PyObject *n) {
  PyObject *v = PyObject_GenericGetAttr(o, n);
  if (!v && PyErr_ExceptionMatches(PyExc_AttributeError)) {
    PyErr_Clear();
    v = __pyx_f_6rabbyt_6arrays_7Array2d___getattr__(o, n);
  }
  return v;
}

static int __pyx_tp_setattro_6rabbyt_6arrays_Array2d(PyObject *o, PyObject *n, PyObject *v) {
  if (v) {
    return __pyx_f_6rabbyt_6arrays_7Array2d___setattr__(o, n, v);
  }
  else {
    if (__pyx_ptype_6rabbyt_6arrays__BaseArray->tp_setattro)
      return __pyx_ptype_6rabbyt_6arrays__BaseArray->tp_setattro(o, n, v);
    return PyObject_GenericSetAttr(o, n, 0);
  }
}

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

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

static PySequenceMethods __pyx_tp_as_sequence_Array2d = {
  0, /*sq_length*/
  0, /*sq_concat*/
  0, /*sq_repeat*/
  __pyx_sq_item_6rabbyt_6arrays_Array2d, /*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_Array2d = {
  0, /*mp_length*/
  __pyx_f_6rabbyt_6arrays_7Array2d___getitem__, /*mp_subscript*/
  __pyx_mp_ass_subscript_6rabbyt_6arrays_Array2d, /*mp_ass_subscript*/
};

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

PyTypeObject __pyx_type_6rabbyt_6arrays_Array2d = {
  PyObject_HEAD_INIT(0)
  0, /*ob_size*/
  "rabbyt.arrays.Array2d", /*tp_name*/
  sizeof(struct __pyx_obj_6rabbyt_6arrays_Array2d), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6rabbyt_6arrays_Array2d, /*tp_dealloc*/
  0, /*tp_print*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  0, /*tp_compare*/
  0, /*tp_repr*/
  &__pyx_tp_as_number_Array2d, /*tp_as_number*/
  &__pyx_tp_as_sequence_Array2d, /*tp_as_sequence*/
  &__pyx_tp_as_mapping_Array2d, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  __pyx_tp_getattro_6rabbyt_6arrays_Array2d, /*tp_getattro*/
  __pyx_tp_setattro_6rabbyt_6arrays_Array2d, /*tp_setattro*/
  &__pyx_tp_as_buffer_Array2d, /*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_6arrays_Array2d, /*tp_traverse*/
  __pyx_tp_clear_6rabbyt_6arrays_Array2d, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_6rabbyt_6arrays_Array2d, /*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_6arrays_7Array2d___init__, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6rabbyt_6arrays_Array2d, /*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_6arrays__BaseArray1d __pyx_vtable_6rabbyt_6arrays__BaseArray1d;

static PyObject *__pyx_tp_new_6rabbyt_6arrays__BaseArray1d(PyTypeObject *t, PyObject *a, PyObject *k) {
  PyObject *o = __pyx_ptype_6rabbyt_6arrays__BaseArray->tp_new(t, a, k);
  struct __pyx_obj_6rabbyt_6arrays__BaseArray1d *p = (struct __pyx_obj_6rabbyt_6arrays__BaseArray1d *)o;
  *(struct __pyx_vtabstruct_6rabbyt_6arrays__BaseArray1d **)&p->__pyx_base.__pyx_vtab = __pyx_vtabptr_6rabbyt_6arrays__BaseArray1d;
  return o;
}

static void __pyx_tp_dealloc_6rabbyt_6arrays__BaseArray1d(PyObject *o) {
  __pyx_ptype_6rabbyt_6arrays__BaseArray->tp_dealloc(o);
}

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

static int __pyx_tp_clear_6rabbyt_6arrays__BaseArray1d(PyObject *o) {
  __pyx_ptype_6rabbyt_6arrays__BaseArray->tp_clear(o);
  return 0;
}
static PyObject *__pyx_sq_item_6rabbyt_6arrays__BaseArray1d(PyObject *o, int i) {
  PyObject *r;
  PyObject *x = PyInt_FromLong(i); if(!x) return 0;
  r = o->ob_type->tp_as_mapping->mp_subscript(o, x);
  Py_DECREF(x);
  return r;
}

static int __pyx_mp_ass_subscript_6rabbyt_6arrays__BaseArray1d(PyObject *o, PyObject *i, PyObject *v) {
  if (v) {
    return __pyx_f_6rabbyt_6arrays_12_BaseArray1d___setitem__(o, i, v);
  }
  else {
    if (__pyx_ptype_6rabbyt_6arrays__BaseArray->tp_as_mapping && __pyx_ptype_6rabbyt_6arrays__BaseArray->tp_as_mapping->mp_ass_subscript)
      return __pyx_ptype_6rabbyt_6arrays__BaseArray->tp_as_mapping->mp_ass_subscript(o, i, v);
    PyErr_Format(PyExc_NotImplementedError,
      "Subscript deletion not supported by %s", o->ob_type->tp_name);
    return -1;
  }
}

static struct PyMethodDef __pyx_methods_6rabbyt_6arrays__BaseArray1d[] = {
  {"assign_from", (PyCFunction)__pyx_f_6rabbyt_6arrays_12_BaseArray1d_assign_from, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6rabbyt_6arrays_12_BaseArray1d_assign_from},
  {"assign_to", (PyCFunction)__pyx_f_6rabbyt_6arrays_12_BaseArray1d_assign_to, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6rabbyt_6arrays_12_BaseArray1d_assign_to},
  {"stretch", (PyCFunction)__pyx_f_6rabbyt_6arrays_12_BaseArray1d_stretch, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6rabbyt_6arrays_12_BaseArray1d_stretch},
  {"repeat", (PyCFunction)__pyx_f_6rabbyt_6arrays_12_BaseArray1d_repeat, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6rabbyt_6arrays_12_BaseArray1d_repeat},
  {"copy", (PyCFunction)__pyx_f_6rabbyt_6arrays_12_BaseArray1d_copy, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6rabbyt_6arrays_12_BaseArray1d_copy},
  {0, 0, 0, 0}
};

static PyNumberMethods __pyx_tp_as_number__BaseArray1d = {
  __pyx_f_6rabbyt_6arrays_12_BaseArray1d___add__, /*nb_add*/
  __pyx_f_6rabbyt_6arrays_12_BaseArray1d___sub__, /*nb_subtract*/
  __pyx_f_6rabbyt_6arrays_12_BaseArray1d___mul__, /*nb_multiply*/
  __pyx_f_6rabbyt_6arrays_12_BaseArray1d___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*/
  __pyx_f_6rabbyt_6arrays_12_BaseArray1d___iadd__, /*nb_inplace_add*/
  __pyx_f_6rabbyt_6arrays_12_BaseArray1d___isub__, /*nb_inplace_subtract*/
  __pyx_f_6rabbyt_6arrays_12_BaseArray1d___imul__, /*nb_inplace_multiply*/
  __pyx_f_6rabbyt_6arrays_12_BaseArray1d___idiv__, /*nb_inplace_divide*/
  0, /*nb_inplace_remainder*/
  0, /*nb_inplace_power*/
  0, /*nb_inplace_lshift*/
  0, /*nb_inplace_rshift*/
  0, /*nb_inplace_and*/
  0, /*nb_inplace_xor*/
  0, /*nb_inplace_or*/
  0, /*nb_floor_divide*/
  0, /*nb_true_divide*/
  0, /*nb_inplace_floor_divide*/
  0, /*nb_inplace_true_divide*/
};

static PySequenceMethods __pyx_tp_as_sequence__BaseArray1d = {
  0, /*sq_length*/
  0, /*sq_concat*/
  0, /*sq_repeat*/
  __pyx_sq_item_6rabbyt_6arrays__BaseArray1d, /*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__BaseArray1d = {
  0, /*mp_length*/
  __pyx_f_6rabbyt_6arrays_12_BaseArray1d___getitem__, /*mp_subscript*/
  __pyx_mp_ass_subscript_6rabbyt_6arrays__BaseArray1d, /*mp_ass_subscript*/
};

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

PyTypeObject __pyx_type_6rabbyt_6arrays__BaseArray1d = {
  PyObject_HEAD_INIT(0)
  0, /*ob_size*/
  "rabbyt.arrays._BaseArray1d", /*tp_name*/
  sizeof(struct __pyx_obj_6rabbyt_6arrays__BaseArray1d), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6rabbyt_6arrays__BaseArray1d, /*tp_dealloc*/
  0, /*tp_print*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  0, /*tp_compare*/
  __pyx_f_6rabbyt_6arrays_12_BaseArray1d___repr__, /*tp_repr*/
  &__pyx_tp_as_number__BaseArray1d, /*tp_as_number*/
  &__pyx_tp_as_sequence__BaseArray1d, /*tp_as_sequence*/
  &__pyx_tp_as_mapping__BaseArray1d, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  &__pyx_tp_as_buffer__BaseArray1d, /*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_6arrays__BaseArray1d, /*tp_traverse*/
  __pyx_tp_clear_6rabbyt_6arrays__BaseArray1d, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_6rabbyt_6arrays__BaseArray1d, /*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_6arrays_12_BaseArray1d___init__, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6rabbyt_6arrays__BaseArray1d, /*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_6arrays_Array1d __pyx_vtable_6rabbyt_6arrays_Array1d;

static PyObject *__pyx_tp_new_6rabbyt_6arrays_Array1d(PyTypeObject *t, PyObject *a, PyObject *k) {
  PyObject *o = __pyx_ptype_6rabbyt_6arrays__BaseArray1d->tp_new(t, a, k);
  struct __pyx_obj_6rabbyt_6arrays_Array1d *p = (struct __pyx_obj_6rabbyt_6arrays_Array1d *)o;
  *(struct __pyx_vtabstruct_6rabbyt_6arrays_Array1d **)&p->__pyx_base.__pyx_base.__pyx_vtab = __pyx_vtabptr_6rabbyt_6arrays_Array1d;
  return o;
}

static void __pyx_tp_dealloc_6rabbyt_6arrays_Array1d(PyObject *o) {
  __pyx_ptype_6rabbyt_6arrays__BaseArray1d->tp_dealloc(o);
}

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

static int __pyx_tp_clear_6rabbyt_6arrays_Array1d(PyObject *o) {
  __pyx_ptype_6rabbyt_6arrays__BaseArray1d->tp_clear(o);
  return 0;
}

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

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

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

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

PyTypeObject __pyx_type_6rabbyt_6arrays_Array1d = {
  PyObject_HEAD_INIT(0)
  0, /*ob_size*/
  "rabbyt.arrays.Array1d", /*tp_name*/
  sizeof(struct __pyx_obj_6rabbyt_6arrays_Array1d), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6rabbyt_6arrays_Array1d, /*tp_dealloc*/
  0, /*tp_print*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  0, /*tp_compare*/
  0, /*tp_repr*/
  &__pyx_tp_as_number_Array1d, /*tp_as_number*/
  &__pyx_tp_as_sequence_Array1d, /*tp_as_sequence*/
  &__pyx_tp_as_mapping_Array1d, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  &__pyx_tp_as_buffer_Array1d, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
  "\n    ``Array1d(initial_data=[], size=0, default=0)``\n\n    This is a single dimensional array.\n\n    ``initial_data`` can be used to populate the array.  ``Array1d(range(10))``\n    works as you would expect :)\n\n    ``size`` is the initial size of the array.  (Unless the length of\n    ``initial_data`` is bigger, in which case it is used.)\n\n    ``default`` is the default value for the array items.\n\n    Note that you can use both ``initial_data`` and ``size`` at the same time.\n    If ``size`` larger than the length of ``initial_data``, the rest of the\n    array will be filled with ``default``.\n    ``Array1d(range(3), size=8, default=6)`` would result in\n    ``[0, 1, 2, 6, 6, 6, 6, 6]``.\n    ", /*tp_doc*/
  __pyx_tp_traverse_6rabbyt_6arrays_Array1d, /*tp_traverse*/
  __pyx_tp_clear_6rabbyt_6arrays_Array1d, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_6rabbyt_6arrays_Array1d, /*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_6arrays_7Array1d___init__, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6rabbyt_6arrays_Array1d, /*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_6arrays_OffsetArray __pyx_vtable_6rabbyt_6arrays_OffsetArray;

static PyObject *__pyx_tp_new_6rabbyt_6arrays_OffsetArray(PyTypeObject *t, PyObject *a, PyObject *k) {
  PyObject *o = __pyx_ptype_6rabbyt_6arrays__BaseArray1d->tp_new(t, a, k);
  struct __pyx_obj_6rabbyt_6arrays_OffsetArray *p = (struct __pyx_obj_6rabbyt_6arrays_OffsetArray *)o;
  *(struct __pyx_vtabstruct_6rabbyt_6arrays_OffsetArray **)&p->__pyx_base.__pyx_base.__pyx_vtab = __pyx_vtabptr_6rabbyt_6arrays_OffsetArray;
  return o;
}

static void __pyx_tp_dealloc_6rabbyt_6arrays_OffsetArray(PyObject *o) {
  __pyx_ptype_6rabbyt_6arrays__BaseArray1d->tp_dealloc(o);
}

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

static int __pyx_tp_clear_6rabbyt_6arrays_OffsetArray(PyObject *o) {
  __pyx_ptype_6rabbyt_6arrays__BaseArray1d->tp_clear(o);
  return 0;
}

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

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

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

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

PyTypeObject __pyx_type_6rabbyt_6arrays_OffsetArray = {
  PyObject_HEAD_INIT(0)
  0, /*ob_size*/
  "rabbyt.arrays.OffsetArray", /*tp_name*/
  sizeof(struct __pyx_obj_6rabbyt_6arrays_OffsetArray), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6rabbyt_6arrays_OffsetArray, /*tp_dealloc*/
  0, /*tp_print*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  0, /*tp_compare*/
  0, /*tp_repr*/
  &__pyx_tp_as_number_OffsetArray, /*tp_as_number*/
  &__pyx_tp_as_sequence_OffsetArray, /*tp_as_sequence*/
  &__pyx_tp_as_mapping_OffsetArray, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  &__pyx_tp_as_buffer_OffsetArray, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
  "\n    An array that accesses it\'s data from an offset inside of another array.\n    ", /*tp_doc*/
  __pyx_tp_traverse_6rabbyt_6arrays_OffsetArray, /*tp_traverse*/
  __pyx_tp_clear_6rabbyt_6arrays_OffsetArray, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_6rabbyt_6arrays_OffsetArray, /*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_6arrays_11OffsetArray___init__, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6rabbyt_6arrays_OffsetArray, /*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_6arrays_OffsetUByteArray __pyx_vtable_6rabbyt_6arrays_OffsetUByteArray;

static PyObject *__pyx_tp_new_6rabbyt_6arrays_OffsetUByteArray(PyTypeObject *t, PyObject *a, PyObject *k) {
  PyObject *o = __pyx_ptype_6rabbyt_6arrays__BaseArray1d->tp_new(t, a, k);
  struct __pyx_obj_6rabbyt_6arrays_OffsetUByteArray *p = (struct __pyx_obj_6rabbyt_6arrays_OffsetUByteArray *)o;
  *(struct __pyx_vtabstruct_6rabbyt_6arrays_OffsetUByteArray **)&p->__pyx_base.__pyx_base.__pyx_vtab = __pyx_vtabptr_6rabbyt_6arrays_OffsetUByteArray;
  return o;
}

static void __pyx_tp_dealloc_6rabbyt_6arrays_OffsetUByteArray(PyObject *o) {
  __pyx_ptype_6rabbyt_6arrays__BaseArray1d->tp_dealloc(o);
}

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

static int __pyx_tp_clear_6rabbyt_6arrays_OffsetUByteArray(PyObject *o) {
  __pyx_ptype_6rabbyt_6arrays__BaseArray1d->tp_clear(o);
  return 0;
}

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

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

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

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

PyTypeObject __pyx_type_6rabbyt_6arrays_OffsetUByteArray = {
  PyObject_HEAD_INIT(0)
  0, /*ob_size*/
  "rabbyt.arrays.OffsetUByteArray", /*tp_name*/
  sizeof(struct __pyx_obj_6rabbyt_6arrays_OffsetUByteArray), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6rabbyt_6arrays_OffsetUByteArray, /*tp_dealloc*/
  0, /*tp_print*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  0, /*tp_compare*/
  0, /*tp_repr*/
  &__pyx_tp_as_number_OffsetUByteArray, /*tp_as_number*/
  &__pyx_tp_as_sequence_OffsetUByteArray, /*tp_as_sequence*/
  &__pyx_tp_as_mapping_OffsetUByteArray, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  &__pyx_tp_as_buffer_OffsetUByteArray, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
  "\n    An array that accesses it\'s data from an offset inside of another array.\n    ", /*tp_doc*/
  __pyx_tp_traverse_6rabbyt_6arrays_OffsetUByteArray, /*tp_traverse*/
  __pyx_tp_clear_6rabbyt_6arrays_OffsetUByteArray, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_6rabbyt_6arrays_OffsetUByteArray, /*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_6arrays_16OffsetUByteArray___init__, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6rabbyt_6arrays_OffsetUByteArray, /*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_6arrays__RepeatedArray1d __pyx_vtable_6rabbyt_6arrays__RepeatedArray1d;

static PyObject *__pyx_tp_new_6rabbyt_6arrays__RepeatedArray1d(PyTypeObject *t, PyObject *a, PyObject *k) {
  PyObject *o = __pyx_ptype_6rabbyt_6arrays__BaseArray1d->tp_new(t, a, k);
  struct __pyx_obj_6rabbyt_6arrays__RepeatedArray1d *p = (struct __pyx_obj_6rabbyt_6arrays__RepeatedArray1d *)o;
  *(struct __pyx_vtabstruct_6rabbyt_6arrays__RepeatedArray1d **)&p->__pyx_base.__pyx_base.__pyx_vtab = __pyx_vtabptr_6rabbyt_6arrays__RepeatedArray1d;
  return o;
}

static void __pyx_tp_dealloc_6rabbyt_6arrays__RepeatedArray1d(PyObject *o) {
  __pyx_ptype_6rabbyt_6arrays__BaseArray1d->tp_dealloc(o);
}

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

static int __pyx_tp_clear_6rabbyt_6arrays__RepeatedArray1d(PyObject *o) {
  __pyx_ptype_6rabbyt_6arrays__BaseArray1d->tp_clear(o);
  return 0;
}

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

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

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

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

PyTypeObject __pyx_type_6rabbyt_6arrays__RepeatedArray1d = {
  PyObject_HEAD_INIT(0)
  0, /*ob_size*/
  "rabbyt.arrays._RepeatedArray1d", /*tp_name*/
  sizeof(struct __pyx_obj_6rabbyt_6arrays__RepeatedArray1d), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6rabbyt_6arrays__RepeatedArray1d, /*tp_dealloc*/
  0, /*tp_print*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  0, /*tp_compare*/
  0, /*tp_repr*/
  &__pyx_tp_as_number__RepeatedArray1d, /*tp_as_number*/
  &__pyx_tp_as_sequence__RepeatedArray1d, /*tp_as_sequence*/
  &__pyx_tp_as_mapping__RepeatedArray1d, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  &__pyx_tp_as_buffer__RepeatedArray1d, /*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_6arrays__RepeatedArray1d, /*tp_traverse*/
  __pyx_tp_clear_6rabbyt_6arrays__RepeatedArray1d, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_6rabbyt_6arrays__RepeatedArray1d, /*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_6arrays_16_RepeatedArray1d___init__, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6rabbyt_6arrays__RepeatedArray1d, /*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_6arrays__StretchedArray1d __pyx_vtable_6rabbyt_6arrays__StretchedArray1d;

static PyObject *__pyx_tp_new_6rabbyt_6arrays__StretchedArray1d(PyTypeObject *t, PyObject *a, PyObject *k) {
  PyObject *o = __pyx_ptype_6rabbyt_6arrays__BaseArray1d->tp_new(t, a, k);
  struct __pyx_obj_6rabbyt_6arrays__StretchedArray1d *p = (struct __pyx_obj_6rabbyt_6arrays__StretchedArray1d *)o;
  *(struct __pyx_vtabstruct_6rabbyt_6arrays__StretchedArray1d **)&p->__pyx_base.__pyx_base.__pyx_vtab = __pyx_vtabptr_6rabbyt_6arrays__StretchedArray1d;
  return o;
}

static void __pyx_tp_dealloc_6rabbyt_6arrays__StretchedArray1d(PyObject *o) {
  __pyx_ptype_6rabbyt_6arrays__BaseArray1d->tp_dealloc(o);
}

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

static int __pyx_tp_clear_6rabbyt_6arrays__StretchedArray1d(PyObject *o) {
  __pyx_ptype_6rabbyt_6arrays__BaseArray1d->tp_clear(o);
  return 0;
}

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

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

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

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

PyTypeObject __pyx_type_6rabbyt_6arrays__StretchedArray1d = {
  PyObject_HEAD_INIT(0)
  0, /*ob_size*/
  "rabbyt.arrays._StretchedArray1d", /*tp_name*/
  sizeof(struct __pyx_obj_6rabbyt_6arrays__StretchedArray1d), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6rabbyt_6arrays__StretchedArray1d, /*tp_dealloc*/
  0, /*tp_print*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  0, /*tp_compare*/
  0, /*tp_repr*/
  &__pyx_tp_as_number__StretchedArray1d, /*tp_as_number*/
  &__pyx_tp_as_sequence__StretchedArray1d, /*tp_as_sequence*/
  &__pyx_tp_as_mapping__StretchedArray1d, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  &__pyx_tp_as_buffer__StretchedArray1d, /*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_6arrays__StretchedArray1d, /*tp_traverse*/
  __pyx_tp_clear_6rabbyt_6arrays__StretchedArray1d, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_6rabbyt_6arrays__StretchedArray1d, /*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_6arrays_17_StretchedArray1d___init__, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6rabbyt_6arrays__StretchedArray1d, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
};

static PyObject *__pyx_tp_new_6rabbyt_6arrays__ArrayOp2(PyTypeObject *t, PyObject *a, PyObject *k) {
  PyObject *o = (*t->tp_alloc)(t, 0);
  struct __pyx_obj_6rabbyt_6arrays__ArrayOp2 *p = (struct __pyx_obj_6rabbyt_6arrays__ArrayOp2 *)o;
  p->arg1 = Py_None; Py_INCREF(Py_None);
  p->arg2 = Py_None; Py_INCREF(Py_None);
  return o;
}

static void __pyx_tp_dealloc_6rabbyt_6arrays__ArrayOp2(PyObject *o) {
  struct __pyx_obj_6rabbyt_6arrays__ArrayOp2 *p = (struct __pyx_obj_6rabbyt_6arrays__ArrayOp2 *)o;
  Py_XDECREF(p->arg1);
  Py_XDECREF(p->arg2);
  (*o->ob_type->tp_free)(o);
}

static int __pyx_tp_traverse_6rabbyt_6arrays__ArrayOp2(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_6rabbyt_6arrays__ArrayOp2 *p = (struct __pyx_obj_6rabbyt_6arrays__ArrayOp2 *)o;
  if (p->arg1) {
    e = (*v)(p->arg1, a); if (e) return e;
  }
  if (p->arg2) {
    e = (*v)(p->arg2, a); if (e) return e;
  }
  return 0;
}

static int __pyx_tp_clear_6rabbyt_6arrays__ArrayOp2(PyObject *o) {
  struct __pyx_obj_6rabbyt_6arrays__ArrayOp2 *p = (struct __pyx_obj_6rabbyt_6arrays__ArrayOp2 *)o;
  Py_XDECREF(p->arg1);
  p->arg1 = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(p->arg2);
  p->arg2 = Py_None; Py_INCREF(Py_None);
  return 0;
}

static struct PyMethodDef __pyx_methods_6rabbyt_6arrays__ArrayOp2[] = {
  {"assign_to", (PyCFunction)__pyx_f_6rabbyt_6arrays_9_ArrayOp2_assign_to, METH_VARARGS|METH_KEYWORDS, 0},
  {"copy", (PyCFunction)__pyx_f_6rabbyt_6arrays_9_ArrayOp2_copy, METH_VARARGS|METH_KEYWORDS, 0},
  {0, 0, 0, 0}
};

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

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

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

PyTypeObject __pyx_type_6rabbyt_6arrays__ArrayOp2 = {
  PyObject_HEAD_INIT(0)
  0, /*ob_size*/
  "rabbyt.arrays._ArrayOp2", /*tp_name*/
  sizeof(struct __pyx_obj_6rabbyt_6arrays__ArrayOp2), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6rabbyt_6arrays__ArrayOp2, /*tp_dealloc*/
  0, /*tp_print*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  0, /*tp_compare*/
  0, /*tp_repr*/
  &__pyx_tp_as_number__ArrayOp2, /*tp_as_number*/
  &__pyx_tp_as_sequence__ArrayOp2, /*tp_as_sequence*/
  &__pyx_tp_as_mapping__ArrayOp2, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  &__pyx_tp_as_buffer__ArrayOp2, /*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_6arrays__ArrayOp2, /*tp_traverse*/
  __pyx_tp_clear_6rabbyt_6arrays__ArrayOp2, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  __pyx_f_6rabbyt_6arrays_9_ArrayOp2___iter__, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_6rabbyt_6arrays__ArrayOp2, /*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_6arrays_9_ArrayOp2___init__, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6rabbyt_6arrays__ArrayOp2, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
};

static PyObject *__pyx_tp_new_6rabbyt_6arrays_ArrayOpAdd(PyTypeObject *t, PyObject *a, PyObject *k) {
  PyObject *o = __pyx_ptype_6rabbyt_6arrays__ArrayOp2->tp_new(t, a, k);
  return o;
}

static void __pyx_tp_dealloc_6rabbyt_6arrays_ArrayOpAdd(PyObject *o) {
  __pyx_ptype_6rabbyt_6arrays__ArrayOp2->tp_dealloc(o);
}

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

static int __pyx_tp_clear_6rabbyt_6arrays_ArrayOpAdd(PyObject *o) {
  __pyx_ptype_6rabbyt_6arrays__ArrayOp2->tp_clear(o);
  return 0;
}

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

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

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

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

PyTypeObject __pyx_type_6rabbyt_6arrays_ArrayOpAdd = {
  PyObject_HEAD_INIT(0)
  0, /*ob_size*/
  "rabbyt.arrays.ArrayOpAdd", /*tp_name*/
  sizeof(struct __pyx_obj_6rabbyt_6arrays_ArrayOpAdd), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6rabbyt_6arrays_ArrayOpAdd, /*tp_dealloc*/
  0, /*tp_print*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  0, /*tp_compare*/
  0, /*tp_repr*/
  &__pyx_tp_as_number_ArrayOpAdd, /*tp_as_number*/
  &__pyx_tp_as_sequence_ArrayOpAdd, /*tp_as_sequence*/
  &__pyx_tp_as_mapping_ArrayOpAdd, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  &__pyx_tp_as_buffer_ArrayOpAdd, /*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_6arrays_ArrayOpAdd, /*tp_traverse*/
  __pyx_tp_clear_6rabbyt_6arrays_ArrayOpAdd, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_6rabbyt_6arrays_ArrayOpAdd, /*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_6arrays_10ArrayOpAdd___init__, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6rabbyt_6arrays_ArrayOpAdd, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
};

static PyObject *__pyx_tp_new_6rabbyt_6arrays_ArrayOpSub(PyTypeObject *t, PyObject *a, PyObject *k) {
  PyObject *o = __pyx_ptype_6rabbyt_6arrays__ArrayOp2->tp_new(t, a, k);
  return o;
}

static void __pyx_tp_dealloc_6rabbyt_6arrays_ArrayOpSub(PyObject *o) {
  __pyx_ptype_6rabbyt_6arrays__ArrayOp2->tp_dealloc(o);
}

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

static int __pyx_tp_clear_6rabbyt_6arrays_ArrayOpSub(PyObject *o) {
  __pyx_ptype_6rabbyt_6arrays__ArrayOp2->tp_clear(o);
  return 0;
}

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

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

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

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

PyTypeObject __pyx_type_6rabbyt_6arrays_ArrayOpSub = {
  PyObject_HEAD_INIT(0)
  0, /*ob_size*/
  "rabbyt.arrays.ArrayOpSub", /*tp_name*/
  sizeof(struct __pyx_obj_6rabbyt_6arrays_ArrayOpSub), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6rabbyt_6arrays_ArrayOpSub, /*tp_dealloc*/
  0, /*tp_print*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  0, /*tp_compare*/
  0, /*tp_repr*/
  &__pyx_tp_as_number_ArrayOpSub, /*tp_as_number*/
  &__pyx_tp_as_sequence_ArrayOpSub, /*tp_as_sequence*/
  &__pyx_tp_as_mapping_ArrayOpSub, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  &__pyx_tp_as_buffer_ArrayOpSub, /*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_6arrays_ArrayOpSub, /*tp_traverse*/
  __pyx_tp_clear_6rabbyt_6arrays_ArrayOpSub, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_6rabbyt_6arrays_ArrayOpSub, /*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_6arrays_10ArrayOpSub___init__, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6rabbyt_6arrays_ArrayOpSub, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
};

static PyObject *__pyx_tp_new_6rabbyt_6arrays_ArrayOpMul(PyTypeObject *t, PyObject *a, PyObject *k) {
  PyObject *o = __pyx_ptype_6rabbyt_6arrays__ArrayOp2->tp_new(t, a, k);
  return o;
}

static void __pyx_tp_dealloc_6rabbyt_6arrays_ArrayOpMul(PyObject *o) {
  __pyx_ptype_6rabbyt_6arrays__ArrayOp2->tp_dealloc(o);
}

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

static int __pyx_tp_clear_6rabbyt_6arrays_ArrayOpMul(PyObject *o) {
  __pyx_ptype_6rabbyt_6arrays__ArrayOp2->tp_clear(o);
  return 0;
}

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

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

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

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

PyTypeObject __pyx_type_6rabbyt_6arrays_ArrayOpMul = {
  PyObject_HEAD_INIT(0)
  0, /*ob_size*/
  "rabbyt.arrays.ArrayOpMul", /*tp_name*/
  sizeof(struct __pyx_obj_6rabbyt_6arrays_ArrayOpMul), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6rabbyt_6arrays_ArrayOpMul, /*tp_dealloc*/
  0, /*tp_print*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  0, /*tp_compare*/
  0, /*tp_repr*/
  &__pyx_tp_as_number_ArrayOpMul, /*tp_as_number*/
  &__pyx_tp_as_sequence_ArrayOpMul, /*tp_as_sequence*/
  &__pyx_tp_as_mapping_ArrayOpMul, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  &__pyx_tp_as_buffer_ArrayOpMul, /*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_6arrays_ArrayOpMul, /*tp_traverse*/
  __pyx_tp_clear_6rabbyt_6arrays_ArrayOpMul, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_6rabbyt_6arrays_ArrayOpMul, /*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_6arrays_10ArrayOpMul___init__, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6rabbyt_6arrays_ArrayOpMul, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
};

static PyObject *__pyx_tp_new_6rabbyt_6arrays_ArrayOpDiv(PyTypeObject *t, PyObject *a, PyObject *k) {
  PyObject *o = __pyx_ptype_6rabbyt_6arrays__ArrayOp2->tp_new(t, a, k);
  return o;
}

static void __pyx_tp_dealloc_6rabbyt_6arrays_ArrayOpDiv(PyObject *o) {
  __pyx_ptype_6rabbyt_6arrays__ArrayOp2->tp_dealloc(o);
}

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

static int __pyx_tp_clear_6rabbyt_6arrays_ArrayOpDiv(PyObject *o) {
  __pyx_ptype_6rabbyt_6arrays__ArrayOp2->tp_clear(o);
  return 0;
}

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

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

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

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

PyTypeObject __pyx_type_6rabbyt_6arrays_ArrayOpDiv = {
  PyObject_HEAD_INIT(0)
  0, /*ob_size*/
  "rabbyt.arrays.ArrayOpDiv", /*tp_name*/
  sizeof(struct __pyx_obj_6rabbyt_6arrays_ArrayOpDiv), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6rabbyt_6arrays_ArrayOpDiv, /*tp_dealloc*/
  0, /*tp_print*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  0, /*tp_compare*/
  0, /*tp_repr*/
  &__pyx_tp_as_number_ArrayOpDiv, /*tp_as_number*/
  &__pyx_tp_as_sequence_ArrayOpDiv, /*tp_as_sequence*/
  &__pyx_tp_as_mapping_ArrayOpDiv, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  &__pyx_tp_as_buffer_ArrayOpDiv, /*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_6arrays_ArrayOpDiv, /*tp_traverse*/
  __pyx_tp_clear_6rabbyt_6arrays_ArrayOpDiv, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_6rabbyt_6arrays_ArrayOpDiv, /*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_6arrays_10ArrayOpDiv___init__, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6rabbyt_6arrays_ArrayOpDiv, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
};

static PyObject *__pyx_tp_new_6rabbyt_6arrays_ArrayOpMod(PyTypeObject *t, PyObject *a, PyObject *k) {
  PyObject *o = __pyx_ptype_6rabbyt_6arrays__ArrayOp2->tp_new(t, a, k);
  return o;
}

static void __pyx_tp_dealloc_6rabbyt_6arrays_ArrayOpMod(PyObject *o) {
  __pyx_ptype_6rabbyt_6arrays__ArrayOp2->tp_dealloc(o);
}

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

static int __pyx_tp_clear_6rabbyt_6arrays_ArrayOpMod(PyObject *o) {
  __pyx_ptype_6rabbyt_6arrays__ArrayOp2->tp_clear(o);
  return 0;
}

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

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

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

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

PyTypeObject __pyx_type_6rabbyt_6arrays_ArrayOpMod = {
  PyObject_HEAD_INIT(0)
  0, /*ob_size*/
  "rabbyt.arrays.ArrayOpMod", /*tp_name*/
  sizeof(struct __pyx_obj_6rabbyt_6arrays_ArrayOpMod), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6rabbyt_6arrays_ArrayOpMod, /*tp_dealloc*/
  0, /*tp_print*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  0, /*tp_compare*/
  0, /*tp_repr*/
  &__pyx_tp_as_number_ArrayOpMod, /*tp_as_number*/
  &__pyx_tp_as_sequence_ArrayOpMod, /*tp_as_sequence*/
  &__pyx_tp_as_mapping_ArrayOpMod, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  &__pyx_tp_as_buffer_ArrayOpMod, /*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_6arrays_ArrayOpMod, /*tp_traverse*/
  __pyx_tp_clear_6rabbyt_6arrays_ArrayOpMod, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_6rabbyt_6arrays_ArrayOpMod, /*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_6arrays_10ArrayOpMod___init__, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6rabbyt_6arrays_ArrayOpMod, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
};

static PyObject *__pyx_tp_new_6rabbyt_6arrays_ArrayOpMin(PyTypeObject *t, PyObject *a, PyObject *k) {
  PyObject *o = __pyx_ptype_6rabbyt_6arrays__ArrayOp2->tp_new(t, a, k);
  return o;
}

static void __pyx_tp_dealloc_6rabbyt_6arrays_ArrayOpMin(PyObject *o) {
  __pyx_ptype_6rabbyt_6arrays__ArrayOp2->tp_dealloc(o);
}

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

static int __pyx_tp_clear_6rabbyt_6arrays_ArrayOpMin(PyObject *o) {
  __pyx_ptype_6rabbyt_6arrays__ArrayOp2->tp_clear(o);
  return 0;
}

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

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

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

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

PyTypeObject __pyx_type_6rabbyt_6arrays_ArrayOpMin = {
  PyObject_HEAD_INIT(0)
  0, /*ob_size*/
  "rabbyt.arrays.ArrayOpMin", /*tp_name*/
  sizeof(struct __pyx_obj_6rabbyt_6arrays_ArrayOpMin), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6rabbyt_6arrays_ArrayOpMin, /*tp_dealloc*/
  0, /*tp_print*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  0, /*tp_compare*/
  0, /*tp_repr*/
  &__pyx_tp_as_number_ArrayOpMin, /*tp_as_number*/
  &__pyx_tp_as_sequence_ArrayOpMin, /*tp_as_sequence*/
  &__pyx_tp_as_mapping_ArrayOpMin, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  &__pyx_tp_as_buffer_ArrayOpMin, /*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_6arrays_ArrayOpMin, /*tp_traverse*/
  __pyx_tp_clear_6rabbyt_6arrays_ArrayOpMin, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_6rabbyt_6arrays_ArrayOpMin, /*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_6arrays_10ArrayOpMin___init__, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6rabbyt_6arrays_ArrayOpMin, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
};

static PyObject *__pyx_tp_new_6rabbyt_6arrays_ArrayOpMax(PyTypeObject *t, PyObject *a, PyObject *k) {
  PyObject *o = __pyx_ptype_6rabbyt_6arrays__ArrayOp2->tp_new(t, a, k);
  return o;
}

static void __pyx_tp_dealloc_6rabbyt_6arrays_ArrayOpMax(PyObject *o) {
  __pyx_ptype_6rabbyt_6arrays__ArrayOp2->tp_dealloc(o);
}

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

static int __pyx_tp_clear_6rabbyt_6arrays_ArrayOpMax(PyObject *o) {
  __pyx_ptype_6rabbyt_6arrays__ArrayOp2->tp_clear(o);
  return 0;
}

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

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

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

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

PyTypeObject __pyx_type_6rabbyt_6arrays_ArrayOpMax = {
  PyObject_HEAD_INIT(0)
  0, /*ob_size*/
  "rabbyt.arrays.ArrayOpMax", /*tp_name*/
  sizeof(struct __pyx_obj_6rabbyt_6arrays_ArrayOpMax), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6rabbyt_6arrays_ArrayOpMax, /*tp_dealloc*/
  0, /*tp_print*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  0, /*tp_compare*/
  0, /*tp_repr*/
  &__pyx_tp_as_number_ArrayOpMax, /*tp_as_number*/
  &__pyx_tp_as_sequence_ArrayOpMax, /*tp_as_sequence*/
  &__pyx_tp_as_mapping_ArrayOpMax, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  &__pyx_tp_as_buffer_ArrayOpMax, /*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_6arrays_ArrayOpMax, /*tp_traverse*/
  __pyx_tp_clear_6rabbyt_6arrays_ArrayOpMax, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_6rabbyt_6arrays_ArrayOpMax, /*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_6arrays_10ArrayOpMax___init__, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6rabbyt_6arrays_ArrayOpMax, /*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[] = {
  {"array_max", (PyCFunction)__pyx_f_6rabbyt_6arrays_array_max, METH_VARARGS|METH_KEYWORDS, 0},
  {0, 0, 0, 0}
};

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

PyMODINIT_FUNC initarrays(void); /*proto*/
PyMODINIT_FUNC initarrays(void) {
  PyObject *__pyx_1 = 0;
  PyObject *__pyx_2 = 0;
  PyObject *__pyx_3 = 0;
  PyObject *__pyx_4 = 0;
  PyObject *__pyx_5 = 0;
  PyObject *__pyx_6 = 0;
  __pyx_init_filenames();
  __pyx_m = Py_InitModule4("arrays", __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_6arrays__BaseArray = &__pyx_vtable_6rabbyt_6arrays__BaseArray;
  *(void(**)())&__pyx_vtable_6rabbyt_6arrays__BaseArray._sync_data_ptr = (void(*)())__pyx_f_6rabbyt_6arrays_10_BaseArray__sync_data_ptr;
  *(void(**)())&__pyx_vtable_6rabbyt_6arrays__BaseArray._getitem = (void(*)())__pyx_f_6rabbyt_6arrays_10_BaseArray__getitem;
  *(void(**)())&__pyx_vtable_6rabbyt_6arrays__BaseArray._setitem = (void(*)())__pyx_f_6rabbyt_6arrays_10_BaseArray__setitem;
  *(void(**)())&__pyx_vtable_6rabbyt_6arrays__BaseArray._convert_index = (void(*)())__pyx_f_6rabbyt_6arrays_10_BaseArray__convert_index;
  __pyx_type_6rabbyt_6arrays__BaseArray.tp_free = _PyObject_GC_Del;
  if (PyType_Ready(&__pyx_type_6rabbyt_6arrays__BaseArray) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 51; goto __pyx_L1;}
  if (__Pyx_SetVtable(__pyx_type_6rabbyt_6arrays__BaseArray.tp_dict, __pyx_vtabptr_6rabbyt_6arrays__BaseArray) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 51; goto __pyx_L1;}
  if (PyObject_SetAttrString(__pyx_m, "_BaseArray", (PyObject *)&__pyx_type_6rabbyt_6arrays__BaseArray) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 51; goto __pyx_L1;}
  __pyx_ptype_6rabbyt_6arrays__BaseArray = &__pyx_type_6rabbyt_6arrays__BaseArray;
  __pyx_type_6rabbyt_6arrays_ItemInfo.tp_free = _PyObject_GC_Del;
  if (PyType_Ready(&__pyx_type_6rabbyt_6arrays_ItemInfo) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 511; goto __pyx_L1;}
  if (PyObject_SetAttrString(__pyx_m, "ItemInfo", (PyObject *)&__pyx_type_6rabbyt_6arrays_ItemInfo) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 511; goto __pyx_L1;}
  __pyx_ptype_6rabbyt_6arrays_ItemInfo = &__pyx_type_6rabbyt_6arrays_ItemInfo;
  __pyx_vtabptr_6rabbyt_6arrays_Array2d = &__pyx_vtable_6rabbyt_6arrays_Array2d;
  __pyx_vtable_6rabbyt_6arrays_Array2d.__pyx_base = *__pyx_vtabptr_6rabbyt_6arrays__BaseArray;
  __pyx_type_6rabbyt_6arrays_Array2d.tp_base = __pyx_ptype_6rabbyt_6arrays__BaseArray;
  __pyx_type_6rabbyt_6arrays_Array2d.tp_free = _PyObject_GC_Del;
  if (PyType_Ready(&__pyx_type_6rabbyt_6arrays_Array2d) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 172; goto __pyx_L1;}
  if (__Pyx_SetVtable(__pyx_type_6rabbyt_6arrays_Array2d.tp_dict, __pyx_vtabptr_6rabbyt_6arrays_Array2d) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 172; goto __pyx_L1;}
  if (PyObject_SetAttrString(__pyx_m, "Array2d", (PyObject *)&__pyx_type_6rabbyt_6arrays_Array2d) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 172; goto __pyx_L1;}
  __pyx_ptype_6rabbyt_6arrays_Array2d = &__pyx_type_6rabbyt_6arrays_Array2d;
  __pyx_vtabptr_6rabbyt_6arrays__BaseArray1d = &__pyx_vtable_6rabbyt_6arrays__BaseArray1d;
  __pyx_vtable_6rabbyt_6arrays__BaseArray1d.__pyx_base = *__pyx_vtabptr_6rabbyt_6arrays__BaseArray;
  *(void(**)())&__pyx_vtable_6rabbyt_6arrays__BaseArray1d.__pyx_base._getitem = (void(*)())__pyx_f_6rabbyt_6arrays_12_BaseArray1d__getitem;
  *(void(**)())&__pyx_vtable_6rabbyt_6arrays__BaseArray1d.__pyx_base._setitem = (void(*)())__pyx_f_6rabbyt_6arrays_12_BaseArray1d__setitem;
  __pyx_type_6rabbyt_6arrays__BaseArray1d.tp_base = __pyx_ptype_6rabbyt_6arrays__BaseArray;
  if (PyType_Ready(&__pyx_type_6rabbyt_6arrays__BaseArray1d) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 245; goto __pyx_L1;}
  if (__Pyx_SetVtable(__pyx_type_6rabbyt_6arrays__BaseArray1d.tp_dict, __pyx_vtabptr_6rabbyt_6arrays__BaseArray1d) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 245; goto __pyx_L1;}
  if (PyObject_SetAttrString(__pyx_m, "_BaseArray1d", (PyObject *)&__pyx_type_6rabbyt_6arrays__BaseArray1d) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 245; goto __pyx_L1;}
  __pyx_ptype_6rabbyt_6arrays__BaseArray1d = &__pyx_type_6rabbyt_6arrays__BaseArray1d;
  __pyx_vtabptr_6rabbyt_6arrays_Array1d = &__pyx_vtable_6rabbyt_6arrays_Array1d;
  __pyx_vtable_6rabbyt_6arrays_Array1d.__pyx_base = *__pyx_vtabptr_6rabbyt_6arrays__BaseArray1d;
  __pyx_type_6rabbyt_6arrays_Array1d.tp_base = __pyx_ptype_6rabbyt_6arrays__BaseArray1d;
  if (PyType_Ready(&__pyx_type_6rabbyt_6arrays_Array1d) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 387; goto __pyx_L1;}
  if (__Pyx_SetVtable(__pyx_type_6rabbyt_6arrays_Array1d.tp_dict, __pyx_vtabptr_6rabbyt_6arrays_Array1d) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 387; goto __pyx_L1;}
  if (PyObject_SetAttrString(__pyx_m, "Array1d", (PyObject *)&__pyx_type_6rabbyt_6arrays_Array1d) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 387; goto __pyx_L1;}
  __pyx_ptype_6rabbyt_6arrays_Array1d = &__pyx_type_6rabbyt_6arrays_Array1d;
  __pyx_vtabptr_6rabbyt_6arrays_OffsetArray = &__pyx_vtable_6rabbyt_6arrays_OffsetArray;
  __pyx_vtable_6rabbyt_6arrays_OffsetArray.__pyx_base = *__pyx_vtabptr_6rabbyt_6arrays__BaseArray1d;
  *(void(**)())&__pyx_vtable_6rabbyt_6arrays_OffsetArray.__pyx_base.__pyx_base._sync_data_ptr = (void(*)())__pyx_f_6rabbyt_6arrays_11OffsetArray__sync_data_ptr;
  __pyx_type_6rabbyt_6arrays_OffsetArray.tp_base = __pyx_ptype_6rabbyt_6arrays__BaseArray1d;
  if (PyType_Ready(&__pyx_type_6rabbyt_6arrays_OffsetArray) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 426; goto __pyx_L1;}
  if (__Pyx_SetVtable(__pyx_type_6rabbyt_6arrays_OffsetArray.tp_dict, __pyx_vtabptr_6rabbyt_6arrays_OffsetArray) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 426; goto __pyx_L1;}
  if (PyObject_SetAttrString(__pyx_m, "OffsetArray", (PyObject *)&__pyx_type_6rabbyt_6arrays_OffsetArray) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 426; goto __pyx_L1;}
  __pyx_ptype_6rabbyt_6arrays_OffsetArray = &__pyx_type_6rabbyt_6arrays_OffsetArray;
  __pyx_vtabptr_6rabbyt_6arrays_OffsetUByteArray = &__pyx_vtable_6rabbyt_6arrays_OffsetUByteArray;
  __pyx_vtable_6rabbyt_6arrays_OffsetUByteArray.__pyx_base = *__pyx_vtabptr_6rabbyt_6arrays__BaseArray1d;
  *(void(**)())&__pyx_vtable_6rabbyt_6arrays_OffsetUByteArray.__pyx_base.__pyx_base._sync_data_ptr = (void(*)())__pyx_f_6rabbyt_6arrays_16OffsetUByteArray__sync_data_ptr;
  *(void(**)())&__pyx_vtable_6rabbyt_6arrays_OffsetUByteArray.__pyx_base.__pyx_base._getitem = (void(*)())__pyx_f_6rabbyt_6arrays_16OffsetUByteArray__getitem;
  *(void(**)())&__pyx_vtable_6rabbyt_6arrays_OffsetUByteArray.__pyx_base.__pyx_base._setitem = (void(*)())__pyx_f_6rabbyt_6arrays_16OffsetUByteArray__setitem;
  __pyx_type_6rabbyt_6arrays_OffsetUByteArray.tp_base = __pyx_ptype_6rabbyt_6arrays__BaseArray1d;
  if (PyType_Ready(&__pyx_type_6rabbyt_6arrays_OffsetUByteArray) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 444; goto __pyx_L1;}
  if (__Pyx_SetVtable(__pyx_type_6rabbyt_6arrays_OffsetUByteArray.tp_dict, __pyx_vtabptr_6rabbyt_6arrays_OffsetUByteArray) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 444; goto __pyx_L1;}
  if (PyObject_SetAttrString(__pyx_m, "OffsetUByteArray", (PyObject *)&__pyx_type_6rabbyt_6arrays_OffsetUByteArray) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 444; goto __pyx_L1;}
  __pyx_ptype_6rabbyt_6arrays_OffsetUByteArray = &__pyx_type_6rabbyt_6arrays_OffsetUByteArray;
  __pyx_vtabptr_6rabbyt_6arrays__RepeatedArray1d = &__pyx_vtable_6rabbyt_6arrays__RepeatedArray1d;
  __pyx_vtable_6rabbyt_6arrays__RepeatedArray1d.__pyx_base = *__pyx_vtabptr_6rabbyt_6arrays__BaseArray1d;
  *(void(**)())&__pyx_vtable_6rabbyt_6arrays__RepeatedArray1d.__pyx_base.__pyx_base._sync_data_ptr = (void(*)())__pyx_f_6rabbyt_6arrays_16_RepeatedArray1d__sync_data_ptr;
  *(void(**)())&__pyx_vtable_6rabbyt_6arrays__RepeatedArray1d.__pyx_base.__pyx_base._convert_index = (void(*)())__pyx_f_6rabbyt_6arrays_16_RepeatedArray1d__convert_index;
  __pyx_type_6rabbyt_6arrays__RepeatedArray1d.tp_base = __pyx_ptype_6rabbyt_6arrays__BaseArray1d;
  if (PyType_Ready(&__pyx_type_6rabbyt_6arrays__RepeatedArray1d) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 477; goto __pyx_L1;}
  if (__Pyx_SetVtable(__pyx_type_6rabbyt_6arrays__RepeatedArray1d.tp_dict, __pyx_vtabptr_6rabbyt_6arrays__RepeatedArray1d) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 477; goto __pyx_L1;}
  if (PyObject_SetAttrString(__pyx_m, "_RepeatedArray1d", (PyObject *)&__pyx_type_6rabbyt_6arrays__RepeatedArray1d) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 477; goto __pyx_L1;}
  __pyx_ptype_6rabbyt_6arrays__RepeatedArray1d = &__pyx_type_6rabbyt_6arrays__RepeatedArray1d;
  __pyx_vtabptr_6rabbyt_6arrays__StretchedArray1d = &__pyx_vtable_6rabbyt_6arrays__StretchedArray1d;
  __pyx_vtable_6rabbyt_6arrays__StretchedArray1d.__pyx_base = *__pyx_vtabptr_6rabbyt_6arrays__BaseArray1d;
  *(void(**)())&__pyx_vtable_6rabbyt_6arrays__StretchedArray1d.__pyx_base.__pyx_base._sync_data_ptr = (void(*)())__pyx_f_6rabbyt_6arrays_17_StretchedArray1d__sync_data_ptr;
  *(void(**)())&__pyx_vtable_6rabbyt_6arrays__StretchedArray1d.__pyx_base.__pyx_base._convert_index = (void(*)())__pyx_f_6rabbyt_6arrays_17_StretchedArray1d__convert_index;
  __pyx_type_6rabbyt_6arrays__StretchedArray1d.tp_base = __pyx_ptype_6rabbyt_6arrays__BaseArray1d;
  if (PyType_Ready(&__pyx_type_6rabbyt_6arrays__StretchedArray1d) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 493; goto __pyx_L1;}
  if (__Pyx_SetVtable(__pyx_type_6rabbyt_6arrays__StretchedArray1d.tp_dict, __pyx_vtabptr_6rabbyt_6arrays__StretchedArray1d) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 493; goto __pyx_L1;}
  if (PyObject_SetAttrString(__pyx_m, "_StretchedArray1d", (PyObject *)&__pyx_type_6rabbyt_6arrays__StretchedArray1d) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 493; goto __pyx_L1;}
  __pyx_ptype_6rabbyt_6arrays__StretchedArray1d = &__pyx_type_6rabbyt_6arrays__StretchedArray1d;
  __pyx_type_6rabbyt_6arrays__ArrayOp2.tp_free = _PyObject_GC_Del;
  if (PyType_Ready(&__pyx_type_6rabbyt_6arrays__ArrayOp2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 558; goto __pyx_L1;}
  if (PyObject_SetAttrString(__pyx_m, "_ArrayOp2", (PyObject *)&__pyx_type_6rabbyt_6arrays__ArrayOp2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 558; goto __pyx_L1;}
  __pyx_ptype_6rabbyt_6arrays__ArrayOp2 = &__pyx_type_6rabbyt_6arrays__ArrayOp2;
  __pyx_type_6rabbyt_6arrays_ArrayOpAdd.tp_base = __pyx_ptype_6rabbyt_6arrays__ArrayOp2;
  if (PyType_Ready(&__pyx_type_6rabbyt_6arrays_ArrayOpAdd) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 605; goto __pyx_L1;}
  if (PyObject_SetAttrString(__pyx_m, "ArrayOpAdd", (PyObject *)&__pyx_type_6rabbyt_6arrays_ArrayOpAdd) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 605; goto __pyx_L1;}
  __pyx_ptype_6rabbyt_6arrays_ArrayOpAdd = &__pyx_type_6rabbyt_6arrays_ArrayOpAdd;
  __pyx_type_6rabbyt_6arrays_ArrayOpSub.tp_base = __pyx_ptype_6rabbyt_6arrays__ArrayOp2;
  if (PyType_Ready(&__pyx_type_6rabbyt_6arrays_ArrayOpSub) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 610; goto __pyx_L1;}
  if (PyObject_SetAttrString(__pyx_m, "ArrayOpSub", (PyObject *)&__pyx_type_6rabbyt_6arrays_ArrayOpSub) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 610; goto __pyx_L1;}
  __pyx_ptype_6rabbyt_6arrays_ArrayOpSub = &__pyx_type_6rabbyt_6arrays_ArrayOpSub;
  __pyx_type_6rabbyt_6arrays_ArrayOpMul.tp_base = __pyx_ptype_6rabbyt_6arrays__ArrayOp2;
  if (PyType_Ready(&__pyx_type_6rabbyt_6arrays_ArrayOpMul) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 615; goto __pyx_L1;}
  if (PyObject_SetAttrString(__pyx_m, "ArrayOpMul", (PyObject *)&__pyx_type_6rabbyt_6arrays_ArrayOpMul) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 615; goto __pyx_L1;}
  __pyx_ptype_6rabbyt_6arrays_ArrayOpMul = &__pyx_type_6rabbyt_6arrays_ArrayOpMul;
  __pyx_type_6rabbyt_6arrays_ArrayOpDiv.tp_base = __pyx_ptype_6rabbyt_6arrays__ArrayOp2;
  if (PyType_Ready(&__pyx_type_6rabbyt_6arrays_ArrayOpDiv) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 620; goto __pyx_L1;}
  if (PyObject_SetAttrString(__pyx_m, "ArrayOpDiv", (PyObject *)&__pyx_type_6rabbyt_6arrays_ArrayOpDiv) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 620; goto __pyx_L1;}
  __pyx_ptype_6rabbyt_6arrays_ArrayOpDiv = &__pyx_type_6rabbyt_6arrays_ArrayOpDiv;
  __pyx_type_6rabbyt_6arrays_ArrayOpMod.tp_base = __pyx_ptype_6rabbyt_6arrays__ArrayOp2;
  if (PyType_Ready(&__pyx_type_6rabbyt_6arrays_ArrayOpMod) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 625; goto __pyx_L1;}
  if (PyObject_SetAttrString(__pyx_m, "ArrayOpMod", (PyObject *)&__pyx_type_6rabbyt_6arrays_ArrayOpMod) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 625; goto __pyx_L1;}
  __pyx_ptype_6rabbyt_6arrays_ArrayOpMod = &__pyx_type_6rabbyt_6arrays_ArrayOpMod;
  __pyx_type_6rabbyt_6arrays_ArrayOpMin.tp_base = __pyx_ptype_6rabbyt_6arrays__ArrayOp2;
  if (PyType_Ready(&__pyx_type_6rabbyt_6arrays_ArrayOpMin) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 630; goto __pyx_L1;}
  if (PyObject_SetAttrString(__pyx_m, "ArrayOpMin", (PyObject *)&__pyx_type_6rabbyt_6arrays_ArrayOpMin) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 630; goto __pyx_L1;}
  __pyx_ptype_6rabbyt_6arrays_ArrayOpMin = &__pyx_type_6rabbyt_6arrays_ArrayOpMin;
  __pyx_type_6rabbyt_6arrays_ArrayOpMax.tp_base = __pyx_ptype_6rabbyt_6arrays__ArrayOp2;
  if (PyType_Ready(&__pyx_type_6rabbyt_6arrays_ArrayOpMax) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 635; goto __pyx_L1;}
  if (PyObject_SetAttrString(__pyx_m, "ArrayOpMax", (PyObject *)&__pyx_type_6rabbyt_6arrays_ArrayOpMax) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 635; goto __pyx_L1;}
  __pyx_ptype_6rabbyt_6arrays_ArrayOpMax = &__pyx_type_6rabbyt_6arrays_ArrayOpMax;

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

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

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":179 */
  __pyx_1 = PyList_New(0); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 179; goto __pyx_L1;}
  __pyx_k3 = __pyx_1;
  __pyx_1 = 0;
  __pyx_2 = PyDict_New(); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 179; goto __pyx_L1;}
  __pyx_k4 = __pyx_2;
  __pyx_2 = 0;
  __pyx_3 = PyInt_FromLong(0); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 179; goto __pyx_L1;}
  __pyx_k5 = __pyx_3;
  __pyx_3 = 0;
  Py_INCREF(Py_None);
  __pyx_k6 = Py_None;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":408 */
  __pyx_4 = PyList_New(0); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 408; goto __pyx_L1;}
  __pyx_k7 = __pyx_4;
  __pyx_4 = 0;
  __pyx_5 = PyInt_FromLong(0); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 408; goto __pyx_L1;}
  __pyx_k8 = __pyx_5;
  __pyx_5 = 0;
  __pyx_6 = PyInt_FromLong(0); if (!__pyx_6) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 408; goto __pyx_L1;}
  __pyx_k9 = __pyx_6;
  __pyx_6 = 0;

  /* "/home/mmarshall/projects/rabbyt/rabbyt/rabbyt.arrays.pyx":696 */
  return;
  __pyx_L1:;
  Py_XDECREF(__pyx_1);
  Py_XDECREF(__pyx_2);
  Py_XDECREF(__pyx_3);
  Py_XDECREF(__pyx_4);
  Py_XDECREF(__pyx_5);
  Py_XDECREF(__pyx_6);
  __Pyx_AddTraceback("rabbyt.arrays");
}

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

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

static void __Pyx_ReRaise(void) {
    PyThreadState *tstate = PyThreadState_Get();
    PyObject *type = tstate->exc_type;
    PyObject *value = tstate->exc_value;
    PyObject *tb = tstate->exc_traceback;
    Py_XINCREF(type);
    Py_XINCREF(value);
    Py_XINCREF(tb);
    PyErr_Restore(type, value, tb);
}

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

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

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

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