diff --git a/.isort.cfg b/.isort.cfg
new file mode 100644
index 0000000000000000000000000000000000000000..cbdece3111e9f53cddffe209dd5e1ac4930ad9c5
--- /dev/null
+++ b/.isort.cfg
@@ -0,0 +1,4 @@
+[settings]
+line_length=100
+balanced_wrapping=True
+multi_line_output=4
diff --git a/MANIFEST.in b/MANIFEST.in
index ff301d6837b1c0023b2a89ffb9839eac0a4e9db3..f32d4f3d17079502cccd556699d845504908e52a 100644
--- a/MANIFEST.in
+++ b/MANIFEST.in
@@ -1,2 +1,3 @@
 include README.md
 include COPYING.txt
+include RELEASE-VERSION
diff --git a/conftest.py b/conftest.py
index 5a7ce065a9888d02faf36c9d9f3c3c279dce865d..1502422ee5245b5cbcd8dad216e4ef68b36f97d1 100644
--- a/conftest.py
+++ b/conftest.py
@@ -89,6 +89,7 @@ class IPyNbTest(pytest.Item):
         self.code = code
         self.add_marker('notebook')
 
+    @pytest.mark.filterwarnings("ignore:IPython.core.inputsplitter is deprecated")
     def runtest(self):
         global_dict = {'get_ipython': lambda: IPythonMockup(),
                        'is_test_run': True}
diff --git a/doc/notebooks/demo_wave_equation.ipynb b/doc/notebooks/demo_wave_equation.ipynb
index f8c842997197e27cd393b25860ce84eb88373f8a..a4d5a9ff7c1cf5df33b83d3d48c3272f214a4d39 100644
--- a/doc/notebooks/demo_wave_equation.ipynb
+++ b/doc/notebooks/demo_wave_equation.ipynb
@@ -65,9 +65,9 @@
    "outputs": [
     {
      "data": {
-      "image/png": "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\n",
+      "image/png": "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\n",
       "text/latex": [
-       "$\\displaystyle \\frac{{{u^{(0)}}_{(0,0)}} - 2 {{u^{(1)}}_{(0,0)}} + {{u^{(2)}}_{(0,0)}}}{dt^{2}} = \\frac{{{u^{(1)}}_{(-1,0)}} + {{u^{(1)}}_{(0,-1)}} - 4 {{u^{(1)}}_{(0,0)}} + {{u^{(1)}}_{(0,1)}} + {{u^{(1)}}_{(1,0)}}}{dx^{2}}$"
+       "$$\\frac{{{u^{(0)}}_{(0,0)}} - 2 {{u^{(1)}}_{(0,0)}} + {{u^{(2)}}_{(0,0)}}}{dt^{2}} = \\frac{{{u^{(1)}}_{(-1,0)}} + {{u^{(1)}}_{(0,-1)}} - 4 {{u^{(1)}}_{(0,0)}} + {{u^{(1)}}_{(0,1)}} + {{u^{(1)}}_{(1,0)}}}{dx^{2}}$$"
       ],
       "text/plain": [
        "u_0_C - 2â‹…u_1_C + u_2_C   u_1_W + u_1_S - 4â‹…u_1_C + u_1_N + u_1_E\n",
@@ -110,9 +110,9 @@
    "outputs": [
     {
      "data": {
-      "image/png": "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\n",
+      "image/png": "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\n",
       "text/latex": [
-       "$\\displaystyle {{u^{(2)}}_{(0,0)}} \\leftarrow \\frac{{{u^{(1)}}_{(-1,0)}} dt^{2} + {{u^{(1)}}_{(0,-1)}} dt^{2} - 4 {{u^{(1)}}_{(0,0)}} dt^{2} + {{u^{(1)}}_{(0,1)}} dt^{2} + {{u^{(1)}}_{(1,0)}} dt^{2} + dx^{2} \\left(- {{u^{(0)}}_{(0,0)}} + 2 {{u^{(1)}}_{(0,0)}}\\right)}{dx^{2}}$"
+       "$${{u^{(2)}}_{(0,0)}} \\leftarrow \\frac{{{u^{(1)}}_{(-1,0)}} dt^{2} + {{u^{(1)}}_{(0,-1)}} dt^{2} - 4 {{u^{(1)}}_{(0,0)}} dt^{2} + {{u^{(1)}}_{(0,1)}} dt^{2} + {{u^{(1)}}_{(1,0)}} dt^{2} + dx^{2} \\left(- {{u^{(0)}}_{(0,0)}} + 2 {{u^{(1)}}_{(0,0)}}\\right)}{dx^{2}}$$"
       ],
       "text/plain": [
        "                 2           2             2           2           2     2    \n",
@@ -253,6 +253,7 @@
        "</pre></div>\n"
       ],
       "text/plain": [
+       "\n",
        "FUNC_PREFIX void kernel(double * RESTRICT const _data_u0, double * RESTRICT const _data_u1, double * RESTRICT _data_u2)\n",
        "{\n",
        "   for (int ctr_0 = 1; ctr_0 < 59; ctr_0 += 1)\n",
@@ -382,7 +383,7 @@
      "data": {
       "text/html": [
        "<video controls width=\"80%\">\n",
-       " <source src=\"data:video/x-m4v;base64,AAAAIGZ0eXBpc29tAAACAGlzb21pc28yYXZjMW1wNDEAAAAIZnJlZQACqyRtZGF0AAACcgYF//9u3EXpvebZSLeWLNgg2SPu73gyNjQgLSBjb3JlIDE1MiByMjg1NCBlOWE1OTAzIC0gSC4yNjQvTVBFRy00IEFWQyBjb2RlYyAtIENvcHlsZWZ0IDIwMDMtMjAxNyAtIGh0dHA6Ly93d3cudmlkZW9sYW4ub3JnL3gyNjQuaHRtbCAtIG9wdGlvbnM6IGNhYmFjPTAgcmVmPTMgZGVibG9jaz0xOjA6MCBhbmFseXNlPTB4MToweDExMSBtZT1oZXggc3VibWU9NyBwc3k9MSBwc3lfcmQ9MS4wMDowLjAwIG1peGVkX3JlZj0xIG1lX3JhbmdlPTE2IGNocm9tYV9tZT0xIHRyZWxsaXM9MSA4eDhkY3Q9MCBjcW09MCBkZWFkem9uZT0yMSwxMSBmYXN0X3Bza2lwPTEgY2hyb21hX3FwX29mZnNldD0tMiB0aHJlYWRzPTEzIGxvb2thaGVhZF90aHJlYWRzPTIgc2xpY2VkX3RocmVhZHM9MCBucj0wIGRlY2ltYXRlPTEgaW50ZXJsYWNlZD0wIGJsdXJheV9jb21wYXQ9MCBjb25zdHJhaW5lZF9pbnRyYT0wIGJmcmFtZXM9MCB3ZWlnaHRwPTAga2V5aW50PTI1MCBrZXlpbnRfbWluPTI1IHNjZW5lY3V0PTQwIGludHJhX3JlZnJlc2g9MCByY19sb29rYWhlYWQ9NDAgcmM9Y3JmIG1idHJlZT0xIGNyZj0yMy4wIHFjb21wPTAuNjAgcXBtaW49MCBxcG1heD02OSBxcHN0ZXA9NCBpcF9yYXRpbz0xLjQwIGFxPTE6MS4wMACAAABjL2WIhAvyYoAAqcScnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX//94IRGDb8tZf/c78KivAQNBjueLhc//3FB+FYy0Hbb8xBHmv///Ct1CksaaFsaK9MIEM6Z/6/4V3nkJJf//hXjHnEceaHU//9YV5SS7VR9S11111111111111111111111111111111111111111111111111111111111///wQiODb9/913eFRGAzW5J6DnaT+EG37v/3d/4zlxKe/7nfh/Em4AYM1Qzj4uJf3O8xprebv//wkdfc+H//FiOi8D6TM6vIvwEj1vz/7hgsKk1BXLKmjVe/oH/w+XrnXJCt+/HqIf+HwoACleNLJnZ//8P+EinJGI1NQpKf6//h6bGv//8VyEksmGI1//8Oyc1MAYvU6+v+s+FM8F6//4Jy5rxho3/8PwrZaXD2WeS///4VqUljTKr/8/qMEJcAEcHTCJtOL9f//+FeOMlzXcQSkv//WFeNNDsy3UI1111111111111111111111111111111111111111111111//33eFRmCESc805KP/77+MJy4Db9Pv8e8P8SbACvc8p2HhuXNdiecLTifnuO4//DwlJH0D//hMVr76mV9PAuSifn//u8K+AJvmFCpoxMaXkLAXJY3L/2uIPxZKhM2LgkeZUG13lHdYqtyw+KomCxkjmsBdKub8//Hd3f++AkFlN+CLOhd+diRmVzzCB5uG+/zP/f9r3cf/EwIgS3JBN/yUNtvWSTDcqzdTKbX+5TMp4cP/CRePeCy50As90fAcP/xRMJQefXHokAG/ouNdb8i9DhD//CVgUXLiPAbnT1Dc6ev6xWOH8Jcd9BZOqO8kEvno///CXDeqeqhrlAcXJRRc/4ePiuqihpnT1wizEqzbFtg8BbMmIx+4+v4BAOFacZZOy3hp1T1Jb7//gGAcKzoxBgoueOxEBudPX/8AwXhWG509fh3LYuuWGr5b/4BgEK9LP9hvVPVuEYVMwHUYYuf/gGIQrygouVzXNgufSpr/8FzwQF0OKLfKFY6FP//Br3MOI7c3DOPiv59Pv/j5gReoJoMqXyhKWPLf/xXGA/8UIUdZcAEZuvvUxrBryBuZLOVOJH1Uf/4eKQg///+EuGMtFsGOMv/4eJ9MaaOAzZn6//4IYEeuAQNM5Djv45PT/G49B7//8K+gx5r3ya6//DXhWag219V7///4IeGMt///hU+B1Jk8lmoAEUK9mrb7/4jngg7CTV2KPrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr//93hURwaX7oMYa//e4whUdLngEtimKjqaoCkJD33fx8Jnx30X777v/8PR30Xh//4kURxGqfni9E/35JTOwM///GCHgJBZJvwQWdC787/7uDviyKkz83C7QJ+7UnewYu1toBCIp+BwU2EWA/+AO+/svBHvGGWTf1AgyIc1guSs3UPWfLX8V/dxdyEP4nANtNkTBgF0q5vyLCltd4CCzoSvzhYpkp6h//Mpu///D0QJzcB/w/y7vF8dlMHZTB2UgCtZr34Gr/JDEK+gj3g3JWbqlCexG/4A93HGeAK0zJG/Ayyb+oEGRDmvmwF0qc3433+Z/8cnd+PvBxlIiZyF35wUVcXD7UAk+YTp/zGHTP/9wf9FYufABgGH+EqIwXmsO2yjw3OnqG46evwXXCHDiuCvloLJzoyLjX5YQGMcXovGEzxDAB/wlzp43PMXPBgouSgKFzwXAP4RRc0aeomVN+WPmuWIg6xiQXcz/X8MQ4s23Odkv95qC59D0S//AMAAIVhWXJQHFz4CGw0syu6ao09dvz/wDVeFYbnT1Wtep1wst05e0f/AMAhUuN6P9hpyU9dQRg8dx9w+T/+UZ8mwq+eG4NL5hwi9L+AfX4z+dnijfZ1+4ISwAHjiH/wkCKoqm16dlg3qnr/xH/4ShvVPVo/wYWRB1Ef//Dx0dLMNzp6+tE6htjUapicZZ6/AEJENyI78X+CL9iv/cA6myr+8RJAepryYmNMvuD1OF8r84vc6FbUqAwDSZtTwtHcCQAZf//1JxA4xHYMaa5FGdB6S4EYSymGrdMJh/Vy/+vVRHY8uD3ctT3ASp8k0+BR+Nf/zD7Vf7nQG6fBKTtn//AACMElbEj8189Q3qnr4FcmYBoo0fLZiR+/+UFPkNBlS+fiwLQGHgZJf/8F8AhWq9a/wOt8tvwDTo/3/8AwCFSZTNVBHlGLk+R/bwDAIwqlB6OT/wkGnqDcdzzGfJ+cYwVWjpOi0DosVF/6r/7j7/4f/CgUrRIn8aZkpg6KUlN7OEL//CQRP1/v2u6wD9vhMMQAO90kQtgrb/TSDPV55AFaNoSx4dUTZFHhtNwSx4raKHa6lrrrrrrrrrrrrrrrrrrrrrrrr//+8EIjBpfqD/+734VFcBgACZhQnC4XP/3F/8JeXNItO8Yf+KNLmAFba9Tsa0TWifnwsRwn51SYyQj///Cg6aDE/MLE4n5hYmifm5f/4hu8Km4Ba2EhuDCxSQ5rgJBZTfgC6Vdvxfr7n/8R3fjPAhBFF4CLOhd+cJFIV8zjz8Cn5uP/3e7wD+JgwUJHFKZT4ObJysbkAj3gGdreDpk+xuSwt+QWsn/Bxu//wlBBkRzWAulXb8/b6/ma5+geIdMAi/7qLwbR/AbHuOT/m1pm/UDBkQzNf/wi74dNAhVcwEqfAsPZBl3j8F9k59Gpp6Af5e2W9+c63op/zFQRMy5tzIwFpAfsf3dgcca4qKCMp1MFVaM6D7agYbPZW4Nu1gsvbhu+J0Poo35laPyoKHyZNSwoN2AcQel4O7v5aiKwR7wCWrgNna+Duo8gwaBPwk/z8HQyL6j86vxNBBP0fwOY+npM0A3rr4vx5VXV2P+xSC1fGkyAHFDkfF/8B/n6iG1nklinqCjPKAKEI0bE95DCB6wRfWI/8HuDsKicDEO4nM9ZmDSmn8wCQWpvwWW2U+O3fNPz/4O7kD+/TwBN8wp00Eok2EZgEGZU9QIJrEU9U9VwAPmfcMBAf4nmYMu0/hHlz0bCQQgfNT5b8Aw/HiuUBhchu6eti4bjp6mU5iin4Y8C3ZM/BfwgHF+iytyILuZnZc7x4DTkf7//AMA4VlM1KCi58oChcpZ5f/4BgvCsNMdPUPc18xZW4RRnQueL/+AcIV9gNDU09cBFwonqv/kYGLnD/AMQhXlAULl14TAfPoPc1/+C/BAXR+W+c5f8AAP+KGC7yw1blvEWMcETlT15zrzr+P/+EqDLFBi58oJFzF4+v8OKIEwXPppLrH/C65b4AGF5VvS3+8nd5v/Ct94ae5pAPJNgCYO/KAepZsEgqdJO/VIYvon7xzfUgwP6EB+bAOBxwgg6xUPRg0xj4BVSbngDTAahWI7/KbuTvGUfINgEj9ewcNmGNSf8WK+RwNAr97anXyfXjt83Jc2swMwwgRr5YY67YHw+n4brXYACzwv+uPqKhE8/w/ukxwOr+I/PBt+N+aNgo+r8D1uW/C36eBNm8g/4kNw/z6e6JdLWWo0tllwi4V8nEhqNTqtJyxH/7OPcB8gP3sInkI8P4I3EUXg8BDvvj+wE5m4C8FKKBrB9teuNTqJu8amqm93IQqgXiAAcfxzjG9/zggof05Iv/9TepLHv+G/F9XseIQezv0FfS/gDRhFH5Gz9Qr40qbDHCPiLefo5GQewOvTOAZG+7w+74BDtOxK/u5ije5AQQizIqdfBbjJloDR8f4EAWNBrP/qeAMO/gBlV9Yn82FP5TT/m+wkGnqAKA3RI/apoyRT4f8A1wqfDc6eqXLa32WCP/h/4UBEdBaZ0sVW5YqcSPlSxI6N3n4f/4Sqrcsln+/DeVPVQ1///8JQx5TWUBhc+6wGmOnr/r4fwkYozX2i5Gu5Zf7//2ii6UJ/sN6p6wKCeT8xENI5XA7RfuBLyZ5v+AYAP+K8YOj6hu6euG509QBrkLUrkZ7778n+IgL+LFCLavS58qoPYpzTvoSvmAu/AxIvepSYGmc5gsQUjkvfAoLdTMf5//XgNGcSay4AGu0LTlVmVChiZNjzBKyFLSuRnACNokzH0bdcFR7AwSuTe+OoVgNegby8AlHHJjR2S3/7aYa6lyJqRv3/B0jXxjBELz++AvyfRlXr3taTZuZtz18bN8J/3oyYSPkccrHzk6+x/3+6TCVh74ohbJh/+13TJmF2KQ9JtoAd23GxOYqKibTG/8UEtdddddddddddddddddddddddfw//hMKRQdaf8P0+LEQsi5PEYTt5g3fdreI88PfO7Dv//u8K+AJvmFHTRlAbryF4TksbkfSmDuUcYQV6YNXpmLrTAR7wD2s9Sq+W8DHyv84I1co47/evKJ/47u7/xPhItTfgu2Tn1g7aP9iBduCt9/93uE/+EoEIii8DgpsIsfgvUzdRRtu5v/IQ//CLKioSHrxq9M00n+F5In5+AkFkm/P/i+7wrxJZwlnpAgzKnrAE3zCjpoEC5uA/8HGDv2RD3nH6/BHvAJcuAwajOTpcCs0npNi3pl9TDtct/+Lxcf7x3BxQuagFK5vyAhEpzBouRMzzv/ACHSzZE74JfsrQb30ARCtrgvQ+BGFDUay4bm7kTu6uROedG/9tsmbr18EuiXjVmWeAFvKVwyhEN38D+3kuGOdEt3AoAJi+YThnc0YNJT//sWOeSV7Vt4NTCEDF5sG4wgj6xngaaA3FaaUf6o2H3dzIcB8A57HGfcVe0bdviD7rLZmjtmuE3o61CTgMIAAgCEFIOP8Or82ZgcMb/jV2JbCcVUpI4YS4bnqS5vdCQSvTAFG+AfK/mxdR8fpNO6nH8aacqqq3gpOxVzBE1PMwXx05GOVGNZBE0BpLoDBJzo4C/jB9X/8d9z/67vZ2Iyqa7odXXF3oblocuiP5wWf9b3maf7nX5QZAK42jZ4joDA5cI/s7f4D7ISnSedq1R1GqG5KK+IQEmFIDd5zPwEQKegPe3h39VK6EgA8dl+yR+4/CUhhAHuIKHwNfyM2/BuNYA0ToK/GmgO4xlPr0D3/Oqi4WPPB7Xge5MhN3TLN2sGQ/RhPfuc9ARVHD0aJoImaCzGZwbkip2v83TXa7n/C/CJGYQAnMbgNfYLvp/wjnHJ8Co79/YNVf8LPcAQkRjJlfkb/M1EnLbN2Y6/PcOnMY40ZxvwhP9eflty3/AMK4zbsQHRdpZ5gRFyJPX3YD3o+4Aks9gpjqy91I/Lf+WAwyAd0NL5+CILAqL5ggAGAVE4Zi3P+pj+FYxJy2ODTON+Mv7Aei9aV+cLRdpPX//8K8EvlNYOQdQ+7HFEQDosXT1/D/nGE4/w0w9PVscAhzWx1///5OEB/+EjGfUSz7o99hKA+fXj//4ShvVPUoxc+UBQuR1Ef+EP+KgNMOT1Dc6evlPmR9Ou4kLH8ASFy4t3jT8AwCHQsdt04ywbyp6u4adU9UU+uABLyVtpMAR3qw/6N7TAz2BKTCJmXAY5FJwDEUK42cFIncm95JMoKLkA/n0CYOuwAs5IzZP9XsfUOkwquZ/iW2voNnxrKst3DJYEA0VQb4xpUlBudYJgz9wQTbGjpHHnIALujk+ziHLQ9ealKjfn1h+HHpGLrnCqMzJfeDOlKp++JOBB5R8ewjpSx+eBG9DT/dY8J3n2P6lV2JdV3MN+IS0BkAS+BE3PwZFYcr48ahb9bqGJ6sipfk0W6qMtZWwkwTPSO+dJnnAAQN/7DrfsfE9UOIkYCb0R/+9Q2UN5/Kr7oy3XJcyUTgpCcgQhld54AyY4faeAmeKK8CEmYRuQEqgQIGxEMnRYvxo08XeU55zAyYBGVB9nMZSEC+vqH4Jf4CMKNkbDgZ7/rdnVZnU5O4xNRXi2TJeAZrmsVv/qGyPgC7TUzSUONX+uY9LhCRiCAJxCcAzwlFa8X82GcFWAyF3X/2wzN+YOb79Rq+WXsvAXaYENzhuDr7chEjMIErE4JUnHr+AhrGxjOn/w/sJFG9H+w3qnr6ouSgouf+4D/bcOrZGg09faBaPkj4NBMe/lXAxWmMYxd0zqvgEf4mNNcLL6cnGW0s/2G9U9Y/4BgH/CXUNSgoucoKLlhrgGC/8VwGmOnqH813Y4/4HWfLTf/AYQjGX9nAqC1J+fsJQHz64yy08x/MIMqdlTMlP/8AwDhUhRRcuI8JBp6gCbCSycUqGjHaNonHv+CkPxZBoaojnBKGLpPz9cW1mHc4X+NJOWdpgdTg0cODRnb8wAOb5EjH0ZTzUBJaOeYfiOAqEKwLMgykVUQa99+FWbS6eWgAi9g546dJ6jwIk8Bz1jOu74AYzITf/x4Qj4NGGQmxR+qf95BgFHC7P/X/BAXhmIqd52iNV//4anAB4SBdmoI666666666666666666666666/8ApuPYe4R7H4LWmb9QMFIjM12m8//4PcfhHFYCQWrfgH5RueuOv5gVt9FPvBY2VPVLMZPz7GYGBvI53fl/8PQM27cDWf//44zUoIwG4lPAHOYovCUGEiNR4iZtnBWpacY33/NxcH4VKZ7HgYW1/wiGxlsTQCiwdkWawF0lO35/47u4jHxPAFaZiyvwUzOQun86aRulkb/21Zmfe5fu56gf3i//4kgybZI7gcTi8jMLhwElnhvVXa/xbbUi/KMJHHFKdw//vBCfCPY8BNsy2n8U/4PcnjxGNXpngaSt5QYmMWY6Kxn7sCQWpvwP95Iyk+03oCf6AGEJEYQSuTguVscBfBuL8ZFKzxJijywAC+V7xIr/9ABCm6sCPhsPx+JzEo3/YMcuxakp5kzWUt+82AdgGBiwACBGiSPX/AFFLIDOY6L/v9nIhH/qJ4fGWODwWnFuJfcAW0XcPhxFoQ3lo2WO4dXT+IWja7eUNwgrGxLUVvCbr48v58wSdHP2+XZVXVZY2Eg6G4kzlDxeRE8b+Xgqrh03TxqWSWLkc8Wrzb19RrqsV1ImRViAhUMMzOdoNxsBj+H09ULLTIjfjr83Pt65FeKuYwAwXBC4QBaRNX9H8uQzBLKGxf4TsDqtE59fzAJqJyd3WtfewgEZnz8gT659oCbG19oaGrc1NP0Dm/t+Od9xVa65mSk9ITNzN9rprmjI//5A7qdrZP5vPcd1/fOEpoIJSH8CYYSjcf6gAp+glHVNzfXd0B+JnN1SP5muAclzlGPb/ADdvdMc87+o8XFsItgggFIFilphvarkxwd9kwil9BXcNFYDvDW7JmQQm7oeHV278OuAcOnFf4owJEQIG234gapp+avh7z+g1BTSyQ/My5TZZaorbCPNRw34qxV/+o+BPM0I8t5FpoYb3v5iOdDzpj8vbSqP6uGFUO9/wUqWHq/R92mQPnL0xPfweGPVeCFvA54h00THeYyEEfQPWblgsG1CtLK73p+4mR/KSBDG1TK6WHUpefRLsAwBQ4QhwOhdpZ5gRFyJPW2ZbF4HvR9wOQOofd3+ljS8AXG3fwCABh/44oiAdFi6evBELF09SN65sgt4KZqdvhb4hc0enDtfU/AP/jFOWxwaZzfjI/sDoXbWeYERcmnryUZo7my2ydc+t6fgEQqEJPyR2gPej7guHLbtRjGIQh9nw9f5EoenrezMBI9fbbvB9PNoETjntDraozXsvqewIBIQoQBOc3AIh6CZd1wBmSXgZ3d1kWrs13Fy+ErDTgKzyiYw9ROOlGDVe9r65ek4HjZ/+pIDtK++GmBoOEBkAY+E0evDgBL+S0Az9+k+8xgar8t2Bnd2l40vwJr6ZWuJDQKuaJukCd93q5xB//tpP+/3cOwF7Idgj8Lzye3kf3HhOkV+JLqfrD2Ylgl6Tb4+BE2n4N/a36f/kwb0WL7Xaq+PVWcg7gntQGW7+EooKAfbnGfCXhpoP9j6v1dZNgo111WTSc9V2/4I/yO8CHWsv7jEpEmp3/0DsX1oNV8/5Fqc1MBzfhJbVH6Ly68IXB+Ez4fgNfhiCEEWmBDt4HZ+o68T3m5XMi85O5gJOYxgI9ABb9ecEuw8Hg8LgcbbzO+hmn4f/KDX4mC6GYGZi7of3+GkGtGAITR8SYWIUP0BHt+CNKsT6nu5R6CAgNnICvTeDeaCpcTK3rvTwXAuQeA1iOT+AgSw2RQkZbgZdcMQUxmCniOAMCubxze5c0tmoPPpQ15Ne6jP5vBNBsNKe0ziKfoQzg32u0NhUnC2IeG2eK2mAx65nQkoaPm9R4CyPLGwHz6zVXJ+QqrJ+efxiGv4Bvh7mrZZr57wOzOOin/+IYBwqUEqH55g04pPXwe9H3A8dx93/8AwDhWuahpjp6+GmHJ6ofsz6/9V+EYY8IahkSedb7ztRq3LBRPJ+ebM4+Qb1z0f/AcsYaNpuCWPRFmr0ucQM5EiSYMaLT/QEpA/DWm/y2WYaaSIZxdWEtIYL9xtn/wDlo7X3v/+IQkpdX5wRSnEZNm7X4ACeRoEc75qg2EyTEfMNXv1sdMZF1QuX/Y1lQUnR2f/7cP7TjBGtR45+7XmRjZ0+WEhzE8PddpNx4EohfuKtHY2sCdk59ZLP7/gLZHABq3UghST1///DxeEQiNmyNlaP//ww6h+uuuuuuuuuuuuuuuuuuuuuuuv8P8ReFA074A2tkm/BEzoXfnNW2utgS/xdyoQbu+ODFKgBk5GYo59iifCxnrKimV/5mrnN+f8/YdsEvPwdFkiF/tG4O7kX+EsBILVvwZg0u1/jt32n4JO9qeQOD0h5HPd8f/SKgZt246v8pryfmHuTMje/PiX+GDxfRj5Gth2EIPePE2ZGb/WcGRDM1gLpU5vz/xd3csZ4I94AFczFlfgpmchdP5yfe6/N1ZG/9yhZsRr57jg9gx4mC1k/zJzRDv8FBaCmMzoArTMkb8EnKGs9c9+5xkZlTO3dfSLuT/yInyCLdFvzifq/83+mTdzc4BI/XtwCzkRmwczoRrZXXchCRGEErk4SFSY3wKOZxFjJM3cn9cSAMi+S+T//7sd/Ekv7/k/gfvgxlUztG1Mv2yO3kvDuWJBbggXKcIAmGIAjUJjHr/gB3pZgzruhqoO7dWvZiBwbknBLNSWUTZn+bRyO68gM5F4UtYkz220myuU+Zw4lt+gh+x4TvMG1b+JbBdcsm/7X6jtXEF8OkSACW3XoLZ6lv6aTAG+Xo+dwkfIpuRYpgH6dIYj0A09WjqrEQEOQbMhoDJk7OZqIt9OhmTh7jYidDt/C36JH9fCSxUmXVCfgkTJNBD/ASz8ugHf2E48GZK3Vj9/4+FD4HI91MmkNtIVMCKKyzNeG74/AEHltCAUOe8Bt91sF3ocX+EzAOQb0MA797h44ibzHMZGixUVClX4J+cDe98O8oBmNxuHLCsFJ29fwjNJnkjuLiZcknHYmQCAXaGhvdX9ABbD6ONcA/vfkGM/bHFNNJ17OKr/1Q4uX6qEr3NnEyAJ/91l5Iv1NVKqoNRnzAhciDebjRn9zdmfb4QpYR3AEsXoiXN+bjvgJkeM6NgBTsPSUdXXtB3wEMXORGyHWFddVYQk1W6CJMsL5AVAkQEDxllWUM12EqF67b5NGM8NFaXfSolXZiIMg0vDMVVnsO8DDQloyGsMntfHH/w1Aq4Q7CTC7vJcaafTKL4NTlng7k0W//qEAVB3hF7khTybuIrcgPnfFoGml7Q3LwwkOAFipXd8clLOHva+ONDrEzG1n9EnfMa/X8IAtQy+0/Xw0y2CVI/LJ2XVWTSbteHlyaDmMRX4yur7mwIBGdQQBHXxOyxItqVwkByIaw0KIuM0BHS2FhGGMxrFsWx8kRXKcSJyHnEOYdBZQVR/frvs4JB1Q/VqqFu+ZeEAJw6QgAIQxQSv+hGN2+DG6wbKl4dFb2LZoPCP8hwcCGHEnTaSC79NA2alv7fLzBstjyGz2003aC2oEta4S5kHYiodCb91jN78OuaGZuUM3lQJo2ie8PuWYXj9/wwWNsoUNIPtHw5K51R53XCd+ULV5F+X+v1k30GtQSPT7vXqyfgRNz8ZKm28TqEp9hfZcAs7VWUf4j88DHr2Trz/YDhiepLDBeLoHMbfP7wm/IdVgpCucn8JRIKAofpHW+jkUR3jAbngPp7eXWYm5185OWTEuZPD8KohebmRntI93kXBAFjf9LOAQHhSj3jfmUlvnMxPFQkTmQIbwG20y4GLXBPTL70NCxWwkia56w1RKMqxbkRVQU6HjigFsbVIb0VuvRYHn3vlPwakEJsY/3w3EpP/TPyM33FB28EvjokJL0UOBMR1ni0ifPDtsIRJ8MoxUfF4EK1WToLWNDopH/rXwh/tsgkHUBFa96j06iJQJIe3vNs2SXzDceDs6qM/qA4MDGPAcmbEj4LWTXnrQB/JTtyMogM4lCsfhZ4Gtg2Fa8EtCcX/AFUA2HYODqksGhxZPXTE1hoYunqRHsRrxTIg85gAoDdT3izD/+p+AQqcYpy2ONMc78z+wRBcSJ6giFyJPX8PAMAhXghDtSawcg6x92DjLnQIgWPp64cG4Nkd8BtHYRY9JHiMPNwfFo94eJsxSp/oaHF09QYAvDkO1hu0zLN+f+MP+FB3ogIGyQU7A1AKx4PWRIWCkxqf7A5IAwsan+/5/Dh8lYQG8HPIAuEQVn1nZ861+2YQZx/4SpwAIbA55xM+EkVUhL+0UbYnVbn3v9w2NXTm5iQdRPvsjEtZiuqPm5BurCT0JLI2gnYeiASXWBOhr/uIejkEVs9jaJ/6lv/8PDT9P95fDPqFa66666666666666666666666/8P8IUDGv9YBI/XsTE5M3BvpDu7C4RhFtDjz/zaxlB8uM8hGU7fkATGZp1+8K2+SMxXh/fh5QsmfwB3G/svgj3jBayM36gQHZizWZw5U0/htWf1N/97+Li4jH+EsAVzMWV+AcooPz0p7+BTM5C6fzo4cs39Af7//8J6idEY/fWg15In+Gkr/mCT9EveI/4Pu8WLv4AOwpZzhKbXA8+B2Edwj1kAKqKGrIp8BDmgUsbz75Mi6xqU+9SfgIuTuXMFmgGCdD4e86D+ADJj/wJh3fCQ8sM89IPcNFZz36TS5E6JtbJq2jO7A15eEITHCCKt0CEdQYG11DfUCYzYYDzfR17laRDe4fIeUAQ0+mBsexcjoDggABzLZWrfCX74w5w+wY3tHlw7poCBKccIAmCKNiiJD16Wc6YHH3K/R8OON2LnHZw5d3EdZBH5D/zfMG7jA26Wq/E7TTqFVUHfVxougujRMmH36//+N/79o+sdqrw3I5+bx+UMx5o70u1Yk1sUdoqfQLXfkAiatDu1bDycJf2/Jep59hLnq+38ToQHLSFvWcEL4OB1qpDZX9iag0QjrRH0v+Q0EMyyykNKVvW+duswxXVewSBz4b9wUbKNuy0Hjpvd3Xc61HSATr4VSqBgUI2HhWeBrwVVgAAIO7YaaaNiMtdYO1ZkGIyHMJk+CEHCbS5e/+ZAJwUIJCBHVGDqr1sVryJSYHNJyAHdB31gFc2jYBQGtscQrAkpYtlSXOdCYr5p7u8KABkG+AbR6oznj7V9s8+L2FS0ZdjjCNuEMVWLDjnrgD//1tg2bXklrS1X9w+UDKbXVswv74ne4rX1SOJ57aDgkyyE2ZS/hCwEDhFAYYZbp2fuEwvQRIrz8MSvXIfhaOBeCsfxVXsorruvVyNHvLmWgJBXI5SdLLmfIzvCJQvQFcAgOcGMQ2n8uedDt0PMoHHD4AJxWBVr7RiIsyniLANAoc8oVXAbCHKGcOQxYJ50BsoOJEtTXMXnr3gYGsClbgUSGlnj47xMKdPOOAeUm/X83D0mP/LEFYprsIh/LDFZ4tC1/Ri9ovu78NyOb6vwjaif9xxcTyMxAi7WzAX/hAkxgp7wC19TwkfASDLMJH4G4P2GLbOTvjyBqG5ELeCR7GPLl4QWGsITBoCFd4cB8MQV4kKKxnxMpgGlYbivA6356ZuWN49viXZO0u0lzEn20ECo/hFAJhg1SVfbAC9dG3UR3bHe0+FKtanGK6Lfh+AKaRr3Xe/lJGZzZGMEyo2/GZfHvh5BwBYlJNcX58y0lVybv0quX1hdRD//p4nonoIYLPNpt42rduuC8PopWgIvJ+d72oEqpb99aYrRjPpDMCJoKyp1svY1FdW/9DiKxHSMX/hKPY2DN8VoD9NhRl+wa0v+uwFDUokHdpEa9fIFxPjGuTykH6iTTvzbirikRVXXUrmgh4Xr6vtRDoQHKjN3X1msNOBzc4r/q7EQd7evHd8VIRxVOM/b66wm0ZUmcDMirU5wYR2O7k2cN+ClQQK/t+WoLYy/Dzqz0Mz3KWhAhgWdSGhpEN++esDjoDEg4KPsD/fBGkhWgWoy+5FH6J+WeqNqXf++/fCpQQmf//vz/77yB03E8m+BngOUeM/LF8F8MqGGOubVcbj9fW1N97wYSQSUfPvkwNhzLX6fzev6Z4Mb0OCivgGA3JNcxqeYVMWtu92tdc6s7vlrfIzVNH7Z2IbLd0THT1VNcKOlbkrh+H2THH/8SLwxoDEqZQhai0FZyXrpo3G/GX9/GgYpKYPQ3J/AAggN8uKIGh5NPUNDdJ6+AK5hBOy2jo6L3uHgGgx+28ExLT30HpBC/hD49Wln2NRh0Md2lXv8BxqARRbktgfP9+EcfzXihVTtdrr28OAArtWxIcWFFE4GjOIxSeJIq2++VDlY/y9lhaV7NZf39gZSwOS5w8vVn4jiuqhAuzA94kY6je/wEmlXEYSdS7Ie2VTWd7nKfLTP9P+GSoyDL2zIT//6JY5kdskUv9/VIp1A3glQ68fEVf+23j6oPXKdXtX/d2K0nVvfVe9+/9/u/1BOPW2mLrrrrrrrrrrrrrrrrrrrrrrrr/R4f8Phb3CuuX/8nhTgkHKhL2Dw6hKYOoSk/ANrNT1gufGjjJb+bD/FwB8WefwAh1baTvgeNmCyDep786ojqG8X0gdhd7M0e+FAAcxjwzOGM7/i7vB/fgBFA6xTjYu+wstA3xjFT+cDxngrCSt/MEBCxEi5Tf+N9e5n8YJf73F48dxqAFF8oOv8SpcFXixUX+bCs3GQyik+/8kgpSIACwbwNQB4YyLnfl/iFCLdEub8C+p4l1lrJYAYbCAkEws5sECfc7dG36m9x/UwfwCzkjNnlHkQyupw452GCeD/WBEMC0UFthd4KvgHkZf93Htrx/ny6ubPLfLb4HTgqC/OWsS7l7XC7OOxazRuX6G8372CEJHLOP1VZDVrFL/0Hd+nfI/sL+Xy/lQc1uDsSvGKGldvj0uHwrrgqCEOyY/8YleagP0BnWkLW80KKj6jwLWpf5u7icQT1fKmISKUy3cFChicL4k872FGJHh7VYnq1owoNENWl3rghbwq0HSNk+l3hY/FzyT7Kw8VKoCpAX5+L4vQnGnb65fU6k4hIBnkG+3lhZoFvHBjCrPHehw8TjmK8iIkEC8N+4ooL1vwQnIf2EKk2IdbTqNGTnMNnLoY3VcjqBlVMDjihJeebKxH/3zR4RFECBLymI4wfvzJQGEC7QsfZ+HjfjC5+Boybug74Jrht0CzxhPLLbA4+wgTIrOJTNnkOdj9iHCKfI9RrGILJ+f7u4R5AgTBYUZt96/eB3gopDJQWuXy8fZUoIxKqUG4evg5D/63417137wOcgMDnLUBcGXDhc18CgGzD7ifymoTBTlI9VWMvfh9BCcBSBhne07rL/DFYXL//5vgaCBgERZzfidZzt/y4bL4aYCgxA9L4FTsIlnhQdXY/zywO0N5sK5Xtf+v9DiYWjfOmyzV7tt/0hlPEKuMm5N7/4ioAC4kPu/mIhx7vlGoQAI5OhBY3s5Tzp46LMPjP6Lbt/liEeQb6BuvhNYMmYgkgUriLt6uOquv/19YIFQovfEuiR3yaTQuo01//6ZUZZDQtZtFV//9B0/XZwOYxBJZNFL7YxRQPmU+m128ul2r6j/6BUYaoSk/T3ezR5b4YDr/oFd+I6Byk2D/celnia4Xzj39P/AOEyZzvP7/L6jzyAsLXMEC+Npt3rSFuq5af6Heq/a3jf69MLf7bWeO64lWQ/X22tY1l/uA8PYnTprfoONFjCECy3CtmPv81dN707z1JrX4Z/NuELKJSSqfLAfwIRsf/zaMf/+7v/EEwz+6o3o/2amnr1RclFFyQAWnMHfCA4AuFfgDzyjo/q41XvOMd2kYratKeuKNNW2Rf4/f/r9AkE5rojr+H/gjiQTnMFtvp374BgP/wlNanqGhrSevlKag/CU1PhwALNb7IUYuQk5vizyy0L1AeehpL4A7T6S5nplpzXWIbh4DxQg1wutQFbITlR68QEphPuDr9gJOeAduYSglptPWdQVij174DyQZ54lz++EeAJ3wCiCSyma4v34AB94iCpjiGngFkg29URJNrR//eA4Ahzy5b0JNA1IchFP9afBJjrE6AJf7f/DoJFk/fDAAeqRiTTCl4W9JdqqAAewH/+gbirrIBbJt2CGSh9Puf+tsEK3oFjkqQtvd/1I9WKc1ATdrjsIkXvBFvju8NQS1111111111111111111111111/8PhwoMgAti0XI7jKXdLn+ZiD7lT58JGEQ7UGSZ6wnJEu33vn+9rft+PIRYkio9620yxfh93ixgfoRJ/J6zgXJRPyEjq35izvp8BBZVAb/7u78ZgUY6WYElic37CB5uOSiZeRmA7Sp3/n/lMVd3DAeJnK9cwrwEPa8DBc3tKx3+xGzOdVp/EoT2Ixfas1TF6J/3Hx/w0XkLvtOyytkbG36f64BDglImpaEfW5QV5aywfzTKqn4FFkX8BYpOlx1Hqvxd1d8/qwCBzKuwB+U7fkGaiRZusFsxnXzY/KXzhh2s9AfAm20u+Go0Sz7Ht9P/1hCCDMdaJ74/7v/wPOg707LCKPT/NhiHuU76YEvJl/awwXwDWh5et+HGW1Xsqz00/Lt1CtQ/0Cum1itA+R9FXxHRS+GSFCHWLt//jGpU58d269QqFTDAsgLPWGE2+saNKfLClR/AgdLv1h446WbOnXw38/j6SRyDzkQbhuDr0sHLwSPQIEEi9fCc4LE24QU+pt5DeCj4qU2/XcjM5FnMZ5SYcj/DaDKMA3hMwJGgJmrA//L+rgf4poP8AP3eB++YPdgIHplm1oOiQQmx8PhrgnEdWn7h9OG+PMyQ0zJzMSRfIyCp5ABeEpOt2x7JFGAtwH0EI0eXrliD4D98CIHyBIs8aaOPoApRh1/itslxIXJVhNMzN3KfQgQJg3+cMgTtMCd3fhiCEXgQ/jYGQYP8MwompAbW8K4+zPatgVawZZ6+4vOYEYGJk5cJCK/yCf4pEAH4+BCEhVgo44yfcJkZdl2L64UeLXXEcZpQTI5eXwrvgSbz8U5QP/DjxERKBta7C7Rw/gkm4zwfeoVJZOSmp5N8B1RsJevy9sppSgdFGg/BvhCJo33ujUcauHnVaOQMpuYyfoBQi4IQ4B+CXY4luXyXzfm/AlKZOVFspVd18F1UuT3HvqEFwG5gtvExw2yZM3W30/qsshwUZB/NfAb1wlp7VayvBKiJJGXZdhZi7baX/DAKrCHTj8lp4azSZ3NQKvMO5OAmY8e8WxPf/EPoN+uG756cSaEZcTMg6LdsQ79x8fobnvkJa8d2DVy/CmX9d1/toFRgUxKVYq/Twupv7bf/i2RENENbCOawypa8m//gpjdIm9vDK//9OrjLjNuUz/1l93jydbwhZV1SsW2//h+EIBQgmoMV4Ahe1V3uR9as2bBp9Ymvxe736/pZs5sXdkPssNTctmvnoDeqesW//j8K9lgqWamOxEJBp6//9RhUuGmdPWcd9wD4/6E1S5M5KliR8I+vKliR2qeGAf/CRL7LL/eG8qerCXgGAf/CRQGPFNZQGFz6WeUNManr8A1wh/CU5JALfWILLnRdl2pr56PDEI/xMVEif4Nr2uNjKIVFO2Kh5qDjEbiR3xoZyU/BcF8hLYrNYAd0xhKJHQmgZ5U/3qtRjPyhf77SpOxo2CfwRce20niOp6QAAgAR4o0zfU3//moebRnAArxBO61PjML2PWnykZv/+BkhH9xGd/8/D/3/qAF5Ie8lgARuDnnIoNl1Tfv37aRWpbmdf+vHc0i4Ta+CmaYSFOQRJ6vAJqYx8mapXb3x6yBO6p8ZB/+z360jN+9v6Z2aMoxPhwuRm7sc2e//AkqX1ZrPOvYiMnTEsfyIANeN4tgAQ2QOeaUSg2fbZZ/3qJame6fXCgnrrrrrrrrrrrrrrrrrrrrrrrrr//58PhLgJd8Z393eTkUo+EhmcHiMzUBMpz3AQiUcwJH3pfPV3UF3//4nulXUmj8O1zUyfEp4+K8YPEp0iT/w/77vCvASDq34LO2U+YINlT1Ii+53/J3B3GnheSJ+aoSPwIRFFmAEnZenQkHJNfuAyxSgXlOe7eX+L3B/9CeNRcSZtnRirN+gEg6t+Cy21PjfF8/Mf8/3fMQ/8VBG1T1hJz4fiU0XB3PBcon+F5RPz//ju6CvASCyjfhiBciafzoCQdTfiesbljrbfnf4O+7hQyUFCRyHvsBa3M3BhJb2U8Aa2r/zc+KG9kMgrACuE/Z+LkL/9BLjwc3NQGVzkQCRYopsBxfEmZ5383fD/pQqVpU/9dd1/IImQbGGwWZMGvpkYutMw4f90CcIr+XMACpB3BF0xg/5Oy3gSX8rP8GeKTbqc6C/YBuf09n1+O9cPElUvUA7Tlm5pGWbfF/VNIHg7j7vDsn0CLQLz6ANvY0+XJzmeBZTfzHRE23pp//3q+l57wXXLPwOTmuE6ItTu+R5asAL4/YyQ67AtaKlyfz24LjmKKZVPNXI+4OP9ZyQAhJY5I/CUs0jf386pXcW9rb9+Bi0XbT1B70fdweDqH3B2T6icOo7cdaofuHct8EWgSz6Dk5qCVug1VLoxepn3Nvp8hA6qiqQ3WTkM2c+uA1bv/IPyAcyVAl/PZAUBziEWl//jTJu23RM08uPOoBx6jXA/xCZuwP/+gS7z/yefUH/9tb4D//jLn1uD/cAidNXW/m78bY6/BAtxll+fRV0500XQbwm4P98YfTPg65eu5I2wPwvhW4OvZbD8L60HRqERfnbNuAP61TMkZvoHQ38ZSpcSxxJeJOhzDmlm4manSZIJPkaqpB4D/1YHV8AT7aTPwrmnvbKKKZ4TPg2JDV75rgy3ooP0BP74154GBUQMoeCafsB33dBCVLh6MmP2bkc5ngZGGUBOOoz0VuNrq6/NR4OW2rvZ5DcHX7wHFzBLMAZmq8f9L6rA//wiFBAcRoQDh16f6mhpP/EzKysYABCI+ETA/f9WqVdeYsDXWyg9oAjrrwP3y/wAu91iwq2AYFuSGPh6mqZ+LDwiMrBMnOYgbnjkdeFT7IQhWdTqVY6pVDA6NQN/jo/vMVgHG7dYi1gzD8bDwcLMDvyZblyNLssb8GFVjQl1AnCCNIPcCr68O5rxo19NDA9X4Jnzf26SDbhC8taYHOhWOBQI49wk5Spe/lUJyEdbEHZTBKNDzdbzmxJgFtV9q1OP9gYriWjG630/Gq87e+zR4qIhUI/dhwtSlXjzHj/DsXIAJ717n8w+YbH1febgDLAVjneLZt8AcBGoNCtoZki8rMbEe4HV6ORyos9vCHA5sfyXLD2KXy7cMAYg6SrA8ia/A65qDvlFI/hvxQz4auVg1csLJ2HjEtRL8LogCDv9izvn7fe3wPalzXmq2anx9xtju6+LjTL+V+Qw//NwzqmFzxgSRBgGEnTIkEKxaebg7+owce+9z4Ut7r/C5VFX6WqR5wI9BqwfXoDgVQDCs2B6Ndscc37h0b4f+kcURGRE8nFwgQIGjOwWUFVxIX8zYUpz+rxy7k+n/e7l/h1nKhCern7XLQAbTYs78Bahlf/HgELwNA+khlSxI9cdORUGs3zrmURC5YAMYoZT///4oOY/7gdm50Pv8NKYEZAQczOvolzc+hAU8uyC3HjJc7GJU78OmO5sp3P4Bgv/wkVKTyhuOnr4fzUVuWwWXOiuGAf8JeNflkpP94acqeqgj4BgH/FEygouR1EcBuOnqHua/HacF8hCAQi5cUINm455wYE7tZuRYyYk+AN5U9f/4BAFDFmgewMSLT/YVELhXkBQEi5qihfgUFCHtl8lv23ooFFD1I8gdQ+4A4j0pHunr/+Pwj4V+AFsLOWsR8AcAAoMkmWBmAJkshilL34AcyzIJiXnGqFh4sUk98S5v///6sA1wrABPmAK7UyoFd+B4WpgWO2fLg9CS8vIvzblfHACnXAlgMc0Asngm/HfvssjbmMWOO/f6gtrrrrrrrrrrrrrrrrrrrrrrrrrr4N7s+/jASYCTsTm/mHBcXozAAhTlpvyA9uOPwX/O7vBKAXiYWmifkCy4WeApSqPM/F+4ALBIKbEZhPWNy/2lMkjpP1jVtMvCX/4J8db353P+BCJRzP/i93xeBa4n5gtNafnGouJM2zjMbSafaASLU34IL7aflO/vNb4H/u7vy4nwR7xgy3bwcEBsSQKE6ss39C9ct/s73j/xWAQ5lsaBmdyIMG374pGVwdpV3/ijIlnygoSO5nceP/w8Jb7nvzwS///SjRhA5cmdVRfTuiUwWubOWA9J6GV+d/wffWFfxl2Dw7j7rk19CWpzPhAAwxe/eAil0ZQzvv5BOa+AJSzoSp/OnlZv6wXP3e79nLjJAYo5aA40Y4r8uqm5YAqwrL0ScfACbNpMeOgPWXp/mvI9ZjvvgxuDvCQ39c503DXL/79//E8LZAT5oqfzg9unpxAB+lPhiQu+igReqvMxLQpfhJQfAX/fd1/9ygDkMWmZwgwss78lELPrPNZxQH5GJct94D2hlizB7ty3///0FYIhcmnqGhpNPXwSDtSaweDqH3f//qNBWCKTp6giFipPX2xBW5YAPVLDNiJ+AvmDbLOnx/0i4uOMtUzjfkQTnM/8AJq5jNi1wglhv84YS4OHfgLOx9DI6fzgnRFqd3wSIkLh2NNfQZO7/04hTxSPzhaLkk9QylRjMhbxw4/iM5tnD70fcISDzf6wqkS5OX/ve1t7fjffNwBj4HUPuBELPJ6/4IixdPUTfpnGNT1CvGw+AfiNoX76vgUD24ahx5w92mWwhLgM2RZcwRb94Mblnvjj1NQUyq/iv4tQCzxwDlrT94h9m9b5VU+CAvRAhSY43G3UAGHwuKyouf0u1qgamhIaJfT9TqgoO45tb7kdZcD5jaYVLKKl6JSry263Yh9uHD8Ed1r/J2W/fCEtpNq8Mokzg50DDJRLKSltMh6cs+hdl9Vc6oIVBEUVgE4VGm4gg9dN+AZV3q0frLuW7ZnDGL8dZG19wHADcDDpLF8HwJl+aDqUtHGcmaqv/TTr8I17MAXvvnD/nf2BpnOY5vPz/Ag/jK7AzIJCuBnRMzTIA1lrFIaFKrb+LqJj6V8Nqc6UtUcX8OZfIQ0jQB6jfTou8EXj8X+V/oYSWQMtNMhnD+HsIL4n0Ctl/x5j579PmplU9GEBJmpv4h6dBCOfnkFM5kQXOY1veB3nbEHiCAFGUKzkLPXZW5Z5vm0VX2BueAighygq8flAK25wadc9DgWjCzCzDwC+dLuoDDiAQewHPq6gmQV2Mflk4y4cHwW4A4r/hm4ATtD/B7+HEtrHLkjD5keLKNepl8yVUprxmgQZFXhjXcBrKuNIztXJAAHFNxd9YKaWiqiHnvTsL2XWAno2uwJQK25Dwd45bn84zeVch+2BpA0PQ/oNRrGoTd0yox755LWSypF+7vu+Xl4LKJipalWirkYBeh2zJmb9GICHifDsNIIS32QYDniFIhggWsAvCJLG/8EkdsEEE+x/fEXGRO4qb/l0r9P8CAXfZ3gj3gA1FLlmL/7QCcks8DpZCoy1LaEANKwhQ0J7OnT8AtfgME28TT4/Skn4ejiY2KlzJzEshe4yeOxQBhZX0sMH3ZD4bAI1bbhPfDcRyzAX5/PTLevcHRoV9y7D3wSAK3C7PSAGb/WbBsBrypav8aBnI0RkYExEF2CChmCHGqDopIGkGBetCI96f/u7v/VMqnqCIXJp64CMbbSY+KURg8HWPuEAVWVWfkIXkVm/QW4940ifzrwvrbfveFwdjTWZB1D7gXwRCzyeoIixdPU1hd3H64YmAlEhqZFX4KV8RpNvTL0zPPvhgv4JLX118awejkflzEXcz5o2MiZaT6//ha0WXPG2CGjOOZuPKzBELmk9Q8k1LcIYB/wltAkHWs0geDuPuaLQERZZPUWixdPWGqj96u99LqBiTluZn1HGjOb8AN6jMiZ8kkPyZ3EVzP4BPGkHxLj8gP5orl298a3835vhJBcbj33wKDwlDwAP1TajId96pH5WNYKfgXeTQAqVP5hWSkCZU/mBn70APvMb/3Su56P7WHr6+LJnp8OGhy6eofzXxinLSJBOOYPW+W/w/hCvDSyp6hoaknraBL5TWDx3H3f/AAwhW1NmnqGlD09UcOXNRMXqZ+HVVCLxmBl8Rh77/AJHMKKmiBUElJ+TgNQnM1GjXm9ytKP4YLFlz0/988AEF6Vut/98fs3wmMgciKeVP9gPIgr42EuAJBcnHm8Okk1mwmh2eOMv3fVx0zhr7+rOCh/8JF+cDK8gGnQoOl8fQCUzFLCdsqxfDngH/4SJpow2nE9V3N/3/1pGmJ92V5/D/qjhpcVEdAw6glrrrrrrrrrrrrrrrrrrrrrrrrrrwoPy3dyhUEUBILU35bxZ8/BN+xTwblDf1//d3GHxOFyUT8gj3gduRI0am48GxDzyA3IqQm8FOEVuSzGA2Epg73f/4SgEnYoqfwcWWRnQeCZTnuruv6Yf48V5/z000n+C5JafnwjHhcdP/T/8YC44eKEXwshcnjBYu0/AchidLd/UQDEQcbve6IGW74D2jHJMztafxw2LZebwCyGs+g4dmokBsayRhylu/iAfre78Yf8AHYrmGJS64ApwiPIkFe/2Dib0BPF++M54axtYJX1/jikYGys/P/i7XEVy9/B58x9DI735wTkyXbz3wBWUxtcOSHDWzjKtdvP9/b8DfdPn4M41dzfjVMcV+fFqep7wRC5JPW//+NwP5oUsSyvfDo+Oz1f1GfdAlF62nr/BOly4HIH2Puw40+gOtYEs9L/9dcTQQubT1BCHbpr8HIHSH3Aik6ev4cLxqDzEst9TEf3e4HQtTpPWA/39M9IqJHLYDg0Msz8IT/cAMxttLH34VhVZ58v8FYAzwkifzuP7vdy3wOp4G89INDWk9cHIH0PuAUg560q/AJv9fXx2JVa03hWGqY/feTHUdAB8JagDiotSZzvn/74u/HxRM2I2U3WAUAGW1Ky+IAOyvjBQt9CgKJhZ9P5owzMwIdSW8MDTOcz+7lf/Hi4XD9hLcvwQYkc35B/nLIEQuTT18oU1B+CU1P///CscHEQDpIPT14aGLp6iYvpnEFzmQD4Lhq8Yfau7fn88Rjg0YcV+CUnlT14CoCNE3+aXyFIBE+iLoPnmwwDwF3inao3jvy+nq/A6BLRqnrGhSBa/ACHVmyTvgc7Ks6f1lFIAD0Xfr6Q4AVeVW/zB6w08JDf1sCy8BGfnEE5r7qzu9eFSA5B1j7mAFC5ARjbaTHw4B6yq3+YAaj1lqRHVPvNqF/ucce8aG/rjA0bNxU0YGjNuKmDHzJy0XP4SmgCcJ48zop/AZ2pPRViqxWCKqZO3k6Al2rpkUpr30T3AMfV8dt/5dPAeMcejSQRmBCJhHC0Yofdm78GgfqJ6LAxtc48A1seFaqkdRgi6hldMVkphNdJGGWRjNlq9rhbd7JlkGewz0BgGiAfBnDpMyz1rfpp8egrphC4oEf63ysDLfnBb04fTXwJGB7Px+X9KBzgEKVrMBf1wTbH+CEB/LROS+rr/k1PpQJ3m4lQQoUSZ5wkeIpw1F+X+OMfrJvbzBzjMjWbuT4GCXLENymQaQZ/qvLgffPqpfwKNWP5DdTMyxuVM1uxtxo2t+MT1N3R3CTxiv55EvMCYoxh56M34g4FKB0jFhnGmY4By/AqY4AMW29E+q0x/4i96uSsNefMg7uU4+Zp/cmve03+rCMmPdIEN4+7ZSzMK5ihf1ALIUNEuvKOZnjv9lKMil+TIZnfFB4TcmUwQov4nfv7Zohdr+dgdrHZTe4iIdC/1Fr2KKJm/C7jEHE31JfmlPYcehgLcJKHacX+ADijdiQ7se9hW/yJPcwAAfhAAIZjQgndsOhhUAMdWPonPLZgTDZLUBufxBzckiZ3lH/4e/e8D/JXGYp37QgqYbs/zELEroGxrYZgpVZ/b8+w03OYveW/DbXPQGhqaevhAnUUIkiFLygTLcGHICZx6/9y//4soL+CXymsHgdQ+7zZU9QRCxdPX//XUeFYec1B5k5bAcaMcV+XNlzoA6LtpPN8B/13ILPA4NM5vz+qPPoEUwaz6/BEXbT1A0jUyPMwhxvYNMf7g3IKO6m8dAMAZouLuu4ckmoJDsSa/B4OofcCJI6euARoo/MFdfAAdlcxmxa4LOP1DZ0/nU9/jcSYHxBc0CDCzyvyDSiR2NwBXB8v8JQRFi6eubAGBn+gBA3VM774ATAXLGnT+cFuayeSfwWI0teX5f/hItxt0zPd8GJQS0Sp6wXA1o/178WQfjTWDkB1j7v9f+K4HSWdPWCIJBanrgmupDEjliC3gcGRjivz/n/+MKyFvwHQS0Sp6/BELk09QQgfqTWAihLGUyFvlBXq61hOX7/d/93cReM/ACHVtpO+BCA/WmsB2Lw4jTamYA5su78gwlActsNUvlkRErgAe739/93i4iqpMhsR44HrJ5/kFr1qtP4AbTMkb8orh9JJt/jfFvfnjFG0BlJMDMp3a/8AgdJdvIUByHC+8AEF5VvSf/+oEnBSb6lGFGh+/+/qkJNcxx8u4/d3cHjuLKY3gMISeqfnf6JYpPVzJQA5jY2463KXfYxUEJfU9zyRzvwIHTAhO1CzJbtgNHIoC5sxPCJf/mp5iAaZmgK9ru/NFuMcbniJQuXpuc9//LjWA+F3vl/hKDwdx9wASifwB4sMHBSBv/9xgeOQbricRtXqs1LXfqt80BWcHRcygoXST/UiGMGQiZlX1+A/zf/sBhi9G8ddSAhQR/7QznwAEg/WCNblf6uYn4MNS1MeS73spIeIYFTUX6hVI0//OALFHdb4RE2VhbSTTu/dfvnDIAAQEx5C1EHU0AIWCyd1KFxQBvrrrrrrrrrrrrrrrrrrrrrrrrrrrjoQBCmX57lh9/p+nwdMAixFKk/kOn6hy5M73BOLc8yJxaev/AMNYzu+imsHg7j7tLPKRTORYaAHB93s7pPACKWpE/zh8B3H3f4SRpOb4DzmkYxjMQBWjGTO/BWSJI0n857W3t+frUXG79wRSOnqCIsVJ6+l1CJlgEx2NEccDCARZq8jd/AX4a5iOn84Hs4UiWN/nh/DXZnseB/73eP/CXADMbbSY+CrdYOHVyYd3aX/ocA9ZVb/MNwHeExv6zIm0sPOBKal4y+HhFFCTqjHHrjxqhIBQLIlCSj5PXz5qAYWP9QHHSPT8xxkY4r8/1D4YBwrao1jvwQIS02j87/FoXNJ6g5D6H3f/wCAArwrByAfY+4DqWdPXgLSIZTWPwDoJKfT1gP9/TAQuBvZxiJu+xucKWJd3vn/Ad34z8AHdFY1ZFH066ftAP4inyCLT+cgA09lNLveDBYzxWtEf+m8i6xrXvlECWmSes2FsFrxfd3/2TCKZxvwcCpdDOZ51nMyfCku+CvMdzjwqQODRo2OrC+mz9/zA4fg5B1D7igChc/BEFi6eoaGF09bvj+vxMG5k9sEqJvoXoT4Uev9SH0G6ZyV3Pf+A48np+d/U//hKggs8nrZxeZ9UTLY4NGc34teW4j/94rgimDWfQcizXByDqH3FAFC58AMxs2Sx8JAqvUk8f67u7yvgdFn1nmDQ4unrgt9YbmAjG20jHwD1mWKG/reR6zHbfOAF/v+j8G6sOFNwH/vB3/74AZjbaWPhAFVlVn5QzG21Y+B7mThSVf5WF9G37/mnIDb0qL/EELmSev5nSNZhA6h933eT+OK92QHrFb/QD3MnCkq/wP4h6NtN8wfzZU9QRaBLPrw5HmoPMjlrAcaMc78iIfXDAIVL4gJxzBIhLRKnrwRC5tPUEIP1Jr4QDwDALgOMhljvyIC45n+IRLTaPzhaC5tPX/ByA+x9wIks578DiCSi1PXVD/g93pwch9D7gcgPofd4IydPUSgkouT1/gB6gnLY1T/sDoAM+Nai/AAh1b0u+CsFXn3i/zcGdU3D74EqpVdXchf4oFxGLyLkFvqTmUbwIkvNG/f8h7E6QYFE0k7lE43Eb+9s280Rv8FAO9cmmPjy+EAOxwj5AJE4E76ChsmmB3jE06weAZzUhk3MxblQioTSqqM3itJuYcZGkPAo317mvv+e6v6APBpZYsV1Ao+dRt1O9TsIDikDWn79CAxesAn79rfIse8+HBAUAroaUQkpwJ28c2/uBj0t/xbbiSTT/q6EmPVLSMpcHVciLNXwmO+ZFsVuWCV5aPP/+b9AV3dAI7rQepuDqv5wJBZMs8nWKIn9SKYv4Fc6FhGUxEdH2pxtt9LkpxVxNxd1wrjgE4WzA9PdIJp44OrlQBdQ717ridZqXmbf+6kJEUSfp039aFK+Jm037Ak3lbaaNzofIkVmwE+tOwALozhSw0ByRGUVp9eAJjY1yAdwG7+SvsTi7kXJN93szzvYAXN2LHKZez7H0kO5AAic3oJqtTXvgPAT2v8Eb3AYAAH+BwACQkhgK62AI3nhM+g3dIEz6A3CQXIZi+fMh//w0LAD68iI+GdN/3gV0NNxvwhM/YHQvSSesNA8knqEAAjtNCCjEvElIWRAD+3r/bf///xiuCEP1JrByB1D7sEUnT1BEFjpPXwAilcYzIW+B58x9DI7353rni7v76FioxJy3gEj9exBbwD1LcA8ir+TAHNlnfkGIgysCzZmUYBjWSfx/93u//v8HYKvZ2tvge4c+JDf1gIxs2SY+dAVeVWM8sx31mzfveDj4AH0ZmJ/OMIOofd+ZB1D7gRSOnr93KP9U7iBmUUd8qHrNt+/P8av8EQWOk9VsbkFvAxTlrHBpjivyuPAb/4/jIDjRjivyII55n/gdJ4G89IOFo1wQgPxprB4O4+7//9xKL0mnrBELk09fByO4+4HIOsfd+B0LV5PWCIWPJ65o2MBPt9/9evXxeL7myp6gJ1OJH/n5AVzUHmJZawHGjHFfmFloZUQzp/OA/mRF07e+AA7K4xiYmukPhrWEr3vzn+/78Drvu78tb+ICc54C8ihyPYC3kAIdWbJO+CcMltg0zffzEX2pHh2fRBJZ2ngsr//gApgxCssSm0knfALgBXOYAomsLEGMHf+u43qMncncrMOFu2RnkHrlSzf1oT4U15Szf7/vwFjKm/IBPZMAWWZQFCJM4AodITLhTRVtvzuMPFGYy4ns/N13s/Ntu+sBWKAqdkoKpX//usRAKDVCLfn3wf+93+Q9/2GwIabcQ6K++A0cjgqLtBT0iP4ACmNhKt7SGNvgMhXhC21PINLDO/cSURjVNzlq/8eNUvxvQjQl9UdUGeFrv8OwAEyIZXQRmJeljE+RmIjKc6kGU9aruUfD+E/GDxxHKuJzvzddtjtdVW3wf/tphOEUukNFktNhxD40gJ9/+AGY29LMwBbQECdgZytUiOeh3kfAd/WwkoY9nq//+zm+30gGzhrYPIqq87f9togJqRktYLxTx+/f/MPCH4T/GeAA1grRVpRyz38HsGBtmRjr9oRz/f//jA2/+EsCSMlYjQqiiV2//3/mHTBXikbR1Ru/f5/i22B/v+w/UL+uuuuuuuuuuuuuuuuuuuuuuuuuuuvtj/+EgpABcy4AOODSYWf6z4iCAPOyQZzioAECM0XiIcfO//qP+oWQbAhuk/Df1h9mQiqz88PmQinQr8hK3M9yPIcWlvwI4AAgCkeEADZI81z8ABBHOYRX7vwTBhR//4xkFQluJRmMv5Dy7//CXAk+YlT/mAlbE83kF2IehgbXBB0UF+ICglGLEGJO35HAAgF90gPSGoObuhv67jxU+H3G7iC5zBUAgyrF2iHHzpj69o+F9kjx+fRTwzP1N/hlPptMffchoxwuLfhIzZm/1/8f/9w8pqDw6h93lBi5DQ5dPXyoCBF2KwN9YhQVpsZ6/84AEBfKkB6QD+AOWkNGv/6/1VXuGmOnqJj9M4i5zPmy7oIpqeYVAIIqxOIhx85qQCw9G/r/jQNgpDbqbwVSQ6uYTEH8A0AoJEYkTJcz3AMAju/fDQ1tPUEvlNeDw7j7gDiS8bRT4AFWkR9IGNbUHZ6FlT+c7AEGXYq0EfOexAE9BON/WHlFTt+H9/RABB/UB9yAEBdYM7uARD/Wy4ifLjM8OhRsU9i/ABLRjJn/wP41zMptnPY4opH4fctw7TwCYAEMyz8kOPnCoAQMqxuop/OHGhrO/M5ZOWYkKpH4Ycy3yu43+AfZwP5kFrEs73xxbZvb8BeQXlYDxAlo1S/ONuSM1g/jyAfY+4oAoFn/+PVeLz+BxMsBPPSBUMeP9fB42eWwHGQyx34IaNxzP+EA1CFeIEEtEqH5x1C5s/1wBDgX0vRWeDgEH+u3DPN/9xdxW44yM4341THFfn+JES1pPWCILm09fgA7orMxIo+A3jP+YENjb+uI+oYLW+98PALvIrjP9AhzMXsJJd8fMUqPwu+5Pu7yl7gcj8SzOByA+x9wA10VmZI75wAusiuI/0HUyzAWIE3HREvwPGZisId/vvC+szH73rwt1mx+94FBff+Li+P/CUQBKUkyvwCHNgUhGlffEw0CbpkMsV+bg71Yz9O+DK3wHEjwGWelKMf/wl/w04oL1ByB8h92DIHahmsDiElPJ6/6h8O+DELFz/UBx0j0/Pa+1FnN+fHGhrHfgtI8p7//+AMIA7wrA6BLTaesHL4+4AjUXMMam3VC8GtrDUn3+4HID5D7gJLgYRqb5mAwiLlfkH/i4YgoRnwAfkUbhhIffSAACwRIxQHUB22wlI9cCkIVEULvFf7/Py5/hooCF8GGsyzsq/xKnvWs73coxH7veHpCeuJpvZgkRUs52wZUAB+NUAcYGllSY499/+4HFHgN56RuGtDPXBAj3PTWGQdYZ3f/+tzxqstbeDeoglomT1qhSBa/gdCSlk9YIgseT1wjKen5tf/w+glBCA/CTWCgA2oZr8DiJKeT1gxBY+f6/r1/3dRAh5PpgPEXcwQ03OZE/fHg78iue//81U09UELkk9f+ASXpY88WHr0nwEfSG/oJTQBPgDexsZ0bP4DO7nrVarB3vjkM+1dPi1khjheosHP6wtzQx7WawCdq2Jdh95NbW/ODl9NkvxvW/fgbeNZv6hSNrD5RFc/wgEhDhdkV6YBLKQfc8+K1zwWGwr/irqSrj13xz6XJ4SMLVnO5D8DXjbD2gQ/P8MXmyQx8bLVI/8KB0wCD9LCtA4gIymmJHTx24Y6r/W3BiUO+i/A+/HPx+TM18JN8kbIfTiD0834sHEpoeen73YSd+5KJMuXVPYQAM1b+JPjsByEFnPgEdZgppcf/+AUFStAMtT93/GG2wQ6DQU+etQHACgwY/FBYBaz1PAUi22Hi0xnx7jwd3EuI4yeAC1GbsEQdbN2AxS3rtv7/4YOWr/59mPmbf/gN4/PoPKa4Pxc1AIeYUXYICPJASKKlEKBeIFTleOD+WD+cpdqj7j7//vetDRA0xxZglEtJp6/wOgvTaesHJtH3fiIHsQuMzw+QjB4nv8AA/IUfxwkPvodAAbjW4yKtP8AicMp8uFUjgUzLk+7vKXiYOQD6H3A6nHlAQ6v6vvwgCpZd9/gHQSUXJ6wcKyy1DmZfwpv/smV1mZz3qicqZn63gw93G7//CUAuRvowwitwHuZCSyPUe8fRZxvw2tyz2tm9+Bi0EptPUC4BpNf80h//4S/FkD8aawcgOsfdgdElWT1gdBJT6ev1w+AcXxF9TFty0lvA4DM5Y78/qvPoDoEtEyev/+AM4C7wrGkUC1ByB8h9wBjq20jvmACpdFR+QZA7hncA8F2UEpr8gVceXxTPfznFtt+/P8QB7+M+ABzyluYY1N74RAdYJCTM4D1Zv4K5Xvg6AEzHBZwyAVqLOb8WRDcNEeOMhrHfgCaZhkRsotqR+73+41d7EEPeBUGrUtT+DBrentwKId0s31kAJa1//pMwjCD5wQxOye+A4PRQDM9RJsnP9gANRkEqSXlMJvgFwFcsB33GCvUf/7SpADC1FNEYgza6AYeY2OHZSXelRd3KPieUv0Ye2nrgCg+aEfFDhGG37RFTUAjpkhqhFL/WCs4D/clBkk//+6hCMZMynQtt7OYoZjriepOJy/f7bfA/i77jH9oqCVAIBV/SkCNsr8BJyHBb3Ys4dhd/0caUU0DXi2INdr/VWCYMoFFQXgANkzaIkY1Rv8KhIatBS/Zb0cuX94Q8EHRAHR0lMYlmqHyAEBKYocNQjukCk714WMSlbeM4k4d3zCsAAQEA45QcbPgJfHw/8jMRGU5+wyFr7xQZMDmnNSi0Drgpoh8RqUR8MbpGtCQpwc9zWDGq0jfpIbf/w90UENv+kPUqxmHwDZAV3BBJPEU7/faDCErYasbJFa97d/OI1crlLHlC9dddddddddddddddddddddddddddddddfCm3/hIKVAcBFH0LsgA4YRfqJZcr4iH7yAeAAoqAXD8QCIQQx3SjDaLzg1Ctdfx1AKPlsNYADB9ylDLci1iKEDvmgwjLpbUx/MEKf/pAzcI6m6Qths0GC1SDWw2/f/3+AByhMOpSuPPh/fenIOPjwuFJpcCIWLrpkOxUf2gQyjzUe35nBuG////D4SD5iIcXlvyFA2IFP4mvP+H//iiCgBIWm1T+cNwBAy7GYA19f+OgEsXNTOccAAgH+CAHr/4CXy0HV/XxzC4CUcVdqn84oAIGVYvQ31/8IDbMWzt1r2kzTSvgJIrD6de1AhaKHdKyAAEAVQD3uD4hgDAHi0wDYZzTx0fHfZCNktx5OECEuUj/6iYLnVyVQhq//r6vu//wl9TJiV0/0JTr86N/7eHbDc38wrAEDLsZiIcfOmXtvZ8DYcCtCcaNZwACAL9FAPXj//xX/A9AA+amaQDYAQZVj8Aa+uS3gQ0znMFQgBJQfpT+c5GrCE6x+eHw0YUnGvz31H8P3dyzBELtp66S8zqaweDuPu8JD0iCvpo+FYAgy7MyQ4+d/jcEGTYqxv6zgAEF9EgPS/16/6vdY+hMqb8vyJzUYpy2JATnMBgAQC/BBmsB4CY3HqX535QAQEVY3A31xFTN6AWD1PGT5mmn+m0P2itWv/mn9RVxv78heyBEXaT1wJkBW53H5BfuAUrp4BWmP3MSjl5FlKjSfznIaMOTj348AsWtTf1E+vG5FYAgZdisRDj5whCs7MZz+ouP/vAE3ZhZ00CAlaL1fnKCP6pMgvm9Bbp/OEGKO35Kwz6TzRv0z8oABAL8ESA84P7DSqQ39fEXcwVACBFWN1EOPnRQBsPLE0Xr/U8cWcPnijg0ZxvwWi9Se+vQXsCmP/1sGB0L02nrBC+pr///8KwcgfY+4bceXwOgWp0nrQsVyC3j/qENwhWMSctjgyZxvyuPAbAG8wKy/MD+0C7bDmBruPef/dxccZarc341TDivz+lABekt2MSl3xUDsZj/GiQACP95hk33EQOsJHmZwaEU1edfRhC1KlfnIwMLJ6wC4O9yVfiYlTyp6wOhekk9YWoT1RIansUAB8JUkYBk5xWbBUD3sjDWrv1hqmbvvDEgXweYSy3BxEV/+EigjjGNEViaT7lFIZZHFZPvn+fIC2ZD5kctgODIM+K/MIYB/oJfpRPesA8QJaJUvzs3A0mf6ggR7jpr4BgH+hXBhAdhDNYHEJKeT14HQSU+nrCMp6fm1Fub8/1/AhAHdCye1xxoxxX4LU+nvBGkn2MSG3yIAFhkjFABuwVl5NOPwewLlQjm/mqJUtzthiXwu4COI0/ADMbNkmPuOAXeVWM8g6My5QfsTRDpDkMysqwA5F399rvlha8CZ+cQFY1/oL3fVf04C0iG5EV+B4e6oQjm2c4tt+34AYTkjXRZb4Xy0/HzJy2A4yMcV+KizlsEQuaT1DQNJp6///vna/2qzm/BxoxxX5/4OQfY+4HgdQ+7A6LV5PWCIWPJ6//rhiYlJ5U9YIguaT18EvimsHIDrH3fmjYy32vWP7vc2VPUJyZI/8vyyyQGJOWgOMhliPzgQtdnwtQT3tensD3DnhIb+ucfW73fv1VuWBEFzaeuGhpNPUBxQF+hQPPQATys2SY+gidZOrL83HbrN/3wOCrmiXLj3/ve1/t+f/vdx6YvZMPg/cN9F7wcjS4mdf4AD9KfGCh76EgOb3QPwQzVH5KvueDP3AAoHREI1MV5oIwR7wASLaCSd3QjubAAEAugwKRO/U1FCN2bIUek99eoFi7yD3fO2zamBK0y3/gA6Mw0SaWIQTHwHgCuLgc+SBDCr//7qWQAAgCBTVNn5e/wCcOcPbai1gmJHfnwUkT8D12gDgLUPxCUd95D1UmTdFIZ28PJ3F8BD8JYCwPiYifikmh2iPAJchgRxVxKKX3793+/9WFZwB9mTgVBH//u1FGNTJmcfF98Ch48f/h4I3eRCpGIxDdoH/66gFX32FsABGPxxRmZUtRbuGeEMEdvG2WsykSa+IgaUZ0NdqCdj/g+NnhFGnZMJLc+wEUu2wkRyMv96kiQDZshAKPszYw05jlE9KNvoEQ8XHTIdio+4jMcKUVPm7XuG8C//4eCnGPAb1UgVCdytyv+4HR2mDKb3DNm7fBhqFRQBvrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrv9df//8PivwAGaRpifKRXZZBDf/wkMsALGcD2umJxh/3ayDCTUwpMuQbn7vuAO23gKGxdeeY+xhN2yHFMdhIYnxbJvIt/+9/72Z+zZv3hqF7///pBCKgAYXqt9b+rWnabT8cwCAb7CGAAiDheQBqdiyxkfHcIIcthLUOMIVHf+H4EEIu0Tp4xy//wesFaNunWYSXqf7tLMLetCrIn///VYH9dwUXNWrwoJJFMh3fKoYJaa61/7+P29vzb//33uG/HxH//4DLrTsmah/8f//CQ6FGjDk4TXhhGGWFT8f43AECLsdQDX1mdAL0Njj9f//N+OoXQAAgH8gD7gHxAebdJnK/GwAgyrE4A19YL0MG6bF8hW+AUpxD7Wyfc4C5SlKqvzAAsYNsQkXSCEpEBGglBAyxYjfRKhf+uf4C4NQJr7a1Y67u7//8PXcf/hLhJ4weYhgre37f3sKZDqb+k5GjHHxb8mAdEHfTT4X4zkbgCEXZFAa+sdAQZdirR/zv//wl/zgAQvxwD1gwACAL5EgPS/A0BMTnT/WKgBAyrG4iHHzvXLh+4kFzmCWzuh05TadBz0Nl6eDbSnqGgamnr8hsrIzRnxyGjCk49+f4oBz2dU/nDcAQIuxVgNfX/8OEA41uCT5TWDw7j7vNBp6giFi6eviElMCYznOAAQD+RID0vwC94D1pK9+cDYG40T9h0lzPeCChi0RS3lrf52uEFq4i/dLiFvjPqIaNzmcPaPSb8MYKXBr85qjBFP5URH/0DgUl7FTbMqpThyGjDm41+RI2NVMrA6h1QZ4euFYAgZdjKTDj53dxcR/7wAym2Ys98BfwVuapLqKWwki/4F9vQsqfzhZijnuAQYXhLPr/G4gCWg3G/rQAAgH9wH3cB8IBZ10mcobACGVZvAa+u8V1/qEXB8OWmoxTlsSCccwVAgyJF4in85yzEQ6kfg9b5YERdpPU0V9HH/8PwqJBoeRLPMCED9aa/wwgOoM7gOIkpdPX//9QvCsEQsfT1ArT042otzflp+xxkN878B6KewLHC19X/3B34VwAh1b0u+EAA7BE7jxSiBxNTlW+8GwB5Zd4v8CxpmXCf/3qEHyBumctq5/rwEHe9R42Ygt4EDTOcwB2jMk35AeMeRlT+dmLMAb2CtlyBfewTpLru+H9qkW23seAG12U35AG5QxlXcPLMUT+/zY0R/tA0AXxXBSZKHKRT/yDwEQOzuL9xSmgJbE+IC6hRCjnO7KWBG5nC1oEs+vACNbMgknF91f/+AAwO0RXJTGaWCMFQZBAARgSYQ/k/9L98f57SAAIBIMCppr7tIWJlzbFPj99/xg8dy/iZBOagA3ssocTuSOoAAeFCY6LT93sOZe00xMF59M4bUf0M8fAZAF8WgpckCloq/8hQADlA9SxND2ACBm2KsBr63wZRPwPnd0P/3OyYdMARBp6F5/+P9/77/siMkgx6bEHrgYKH/gAJITbqWAOCE9qwG/0dAq+tyyhz1cyEeM8ADWHFO6p89v4kM/uTOisP+EgwAArI7EXONrWL8E7GxaFkW5+cfHdKDLRDOeTtZV77EMcgqvuViUs/4YlCKzcOJGb/83/3EsqQjj5VPX7xBqDnTSm6G7ypVX7mXiU4X800lQyG8Nd9dddddddddddddddddddddddddddddddddddddddddddddd94a669gEB//CQWAWPMYAi1Orzg2HO8DqB3oUgcsn/VZZDD8gqDt6nuWEEK4zMMOoXrr+PQVGjdhrAcAAoAUFEUwAFswKUFrUQCasrf8ZGAjJTA0vGZT+N8rKkIouVTU+ABsmP4zZzlMJng0T40UochFAqEQw9EGoFMmlFi0a87/3ucy8SlH3NNe8MkN+//w/+Egp4cjYhxeXXn3IaMOXj34JABCNsjJ6//9P3GyAcBBk2ItPWBoBOuSmZ36AAQH8gD7gEoMavqn87BxND3a+L3/wAFgIR/5hJKJtQYf/yg0sBTijViex88QkCs21iIfI3VQ33dY8PwlBsGBmTHj0pXvvER+DHraxBm/bgLlKUqlfldPptY+hhbTF5V+8yXpheHIaMcfFvxoZmZv9S9r/8JefKgIEXYrA31h6grTJTPOwBrmhbldNvvgcSleLMkRXf+0iQosTQp4vfXf//hLMAAGDhYnFuX/8cYHMU0suN9fnwak/AdgAAjeFq1TIyxhwqezv7kP/naCfPHOMdOg/gAIaipSrSoMMCM9qK2IDyRcKqxN37vCQXkrwq54JzxzfWFPUEqeyiX5QzwgwQ/4SC3Q8YXyEI2BpSL/1/2C4EFxtrHhKOvCa/YMDbMjHSNoRz/fw/UL+uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuvhA0/+Egt4ZAIK2eEZpWtVWvoeiCaJDisoBV9S7//DZABEaA6aV6gGX/7w1C4a67666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666668AAAF2kGaOBfgFC5gpw9TAIzwl1hIQUQTwhae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\" type=\"video/mp4\">\n",
+       " <source src=\"data:video/x-m4v;base64,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EI/8wklE2oMP/5QaWApxRqxPY+eISBWbaxEPkbqob7useH4Sg2DAzJjx6Ur33iI/Bj1tYgzftwFylKVSvyun02sfQwtpi8q/eZL0wvDkNGOPi340MzM3+pe1/+EvPlQECLsVgb6w9QVpkpnnYA1zQtyum33wOJSvFmSIrv/aRIUWJoU8Xvrv//wlmAADBwsTi3L/+OMDmKaWXG+vz4NSfgOwAARvC1apkZYw4VPZ39yH/ztBPnjnGOnQfwAENRUpVpUGGBGe1FbEB5IuFVYm793hILyV4Vc8E545vrCnqCVPZRL8oZ4QYIf8JBboeML5CEbA0pF/6/7BcCC421jwlHXhNfsGBtmRjpG0I5/v4fqF/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXwgaf/CQW8MgEFbPCM0rWqrX0PRBNEhxWUAq+pd//hsgAiNAdNK9QDL/94ahcNdd9dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddeAAAAErEGaOBfgFB5Qlh4y2BJ4osB1pJkHFyTIOLkmQcXJME83OSAdcpYCA3UmA5epb+5nqXytcX5MwHeUsR2p5Hkzc2doeyxi43SBYqwhAkfks8fbSZqhF/j5dZObwRvTMuTDWV9xG6cpII2o5muL8mYDrlLG+nw64l4Cu5/o9YqLDGW+HGWSMtWNRiRjw80cv+FuUKssGbxY75ROHssDrlLEkycojAGt61Hv9kAIXm5/6FNO6T/L/9lACVpU9q8/4JXY1iwhlIjz8Gy/NC56sujhu6rHFFwfPPKRxSnyaX6LVWkvSi2WDf78v+zh4SU+IjxgX5gnh/HGZrm4eyzy5OQ6uqtKCGzQhaej4n0gQhaG9o/Wg6JrfPxEo3DLJmuxYD/Usjy3+bD1MvXXYgCkb767z/h8v9+Q868BV6Si7hvK+RYnl+xa8SFDjE5KGayRPnLH/RWU1EU3nzvp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\" type=\"video/mp4\">\n",
        " Your browser does not support the video tag.\n",
        "</video>"
       ],
@@ -396,7 +397,7 @@
     }
    ],
    "source": [
-    "ani = plt.surface_plot_animation(run)\n",
+    "ani = plt.surface_plot_animation(run, zlim=(-1, 1))\n",
     "ps.jupyter.display_as_html_video(ani)"
    ]
   },
@@ -427,7 +428,7 @@
      "data": {
       "text/html": [
        "<video controls width=\"80%\">\n",
-       " <source src=\"data:video/x-m4v;base64,AAAAIGZ0eXBpc29tAAACAGlzb21pc28yYXZjMW1wNDEAAAAIZnJlZQACqyRtZGF0AAACcgYF//9u3EXpvebZSLeWLNgg2SPu73gyNjQgLSBjb3JlIDE1MiByMjg1NCBlOWE1OTAzIC0gSC4yNjQvTVBFRy00IEFWQyBjb2RlYyAtIENvcHlsZWZ0IDIwMDMtMjAxNyAtIGh0dHA6Ly93d3cudmlkZW9sYW4ub3JnL3gyNjQuaHRtbCAtIG9wdGlvbnM6IGNhYmFjPTAgcmVmPTMgZGVibG9jaz0xOjA6MCBhbmFseXNlPTB4MToweDExMSBtZT1oZXggc3VibWU9NyBwc3k9MSBwc3lfcmQ9MS4wMDowLjAwIG1peGVkX3JlZj0xIG1lX3JhbmdlPTE2IGNocm9tYV9tZT0xIHRyZWxsaXM9MSA4eDhkY3Q9MCBjcW09MCBkZWFkem9uZT0yMSwxMSBmYXN0X3Bza2lwPTEgY2hyb21hX3FwX29mZnNldD0tMiB0aHJlYWRzPTEzIGxvb2thaGVhZF90aHJlYWRzPTIgc2xpY2VkX3RocmVhZHM9MCBucj0wIGRlY2ltYXRlPTEgaW50ZXJsYWNlZD0wIGJsdXJheV9jb21wYXQ9MCBjb25zdHJhaW5lZF9pbnRyYT0wIGJmcmFtZXM9MCB3ZWlnaHRwPTAga2V5aW50PTI1MCBrZXlpbnRfbWluPTI1IHNjZW5lY3V0PTQwIGludHJhX3JlZnJlc2g9MCByY19sb29rYWhlYWQ9NDAgcmM9Y3JmIG1idHJlZT0xIGNyZj0yMy4wIHFjb21wPTAuNjAgcXBtaW49MCBxcG1heD02OSBxcHN0ZXA9NCBpcF9yYXRpbz0xLjQwIGFxPTE6MS4wMACAAABjL2WIhAvyYoAAqcScnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX//94IRGDb8tZf/c78KivAQNBjueLhc//3FB+FYy0Hbb8xBHmv///Ct1CksaaFsaK9MIEM6Z/6/4V3nkJJf//hXjHnEceaHU//9YV5SS7VR9S11111111111111111111111111111111111111111111111111111111111///wQiODb9/913eFRGAzW5J6DnaT+EG37v/3d/4zlxKe/7nfh/Em4AYM1Qzj4uJf3O8xprebv//wkdfc+H//FiOi8D6TM6vIvwEj1vz/7hgsKk1BXLKmjVe/oH/w+XrnXJCt+/HqIf+HwoACleNLJnZ//8P+EinJGI1NQpKf6//h6bGv//8VyEksmGI1//8Oyc1MAYvU6+v+s+FM8F6//4Jy5rxho3/8PwrZaXD2WeS///4VqUljTKr/8/qMEJcAEcHTCJtOL9f//+FeOMlzXcQSkv//WFeNNDsy3UI1111111111111111111111111111111111111111111111//33eFRmCESc805KP/77+MJy4Db9Pv8e8P8SbACvc8p2HhuXNdiecLTifnuO4//DwlJH0D//hMVr76mV9PAuSifn//u8K+AJvmFCpoxMaXkLAXJY3L/2uIPxZKhM2LgkeZUG13lHdYqtyw+KomCxkjmsBdKub8//Hd3f++AkFlN+CLOhd+diRmVzzCB5uG+/zP/f9r3cf/EwIgS3JBN/yUNtvWSTDcqzdTKbX+5TMp4cP/CRePeCy50As90fAcP/xRMJQefXHokAG/ouNdb8i9DhD//CVgUXLiPAbnT1Dc6ev6xWOH8Jcd9BZOqO8kEvno///CXDeqeqhrlAcXJRRc/4ePiuqihpnT1wizEqzbFtg8BbMmIx+4+v4BAOFacZZOy3hp1T1Jb7//gGAcKzoxBgoueOxEBudPX/8AwXhWG509fh3LYuuWGr5b/4BgEK9LP9hvVPVuEYVMwHUYYuf/gGIQrygouVzXNgufSpr/8FzwQF0OKLfKFY6FP//Br3MOI7c3DOPiv59Pv/j5gReoJoMqXyhKWPLf/xXGA/8UIUdZcAEZuvvUxrBryBuZLOVOJH1Uf/4eKQg///+EuGMtFsGOMv/4eJ9MaaOAzZn6//4IYEeuAQN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8E7GxaFkW5+cfHdKDLRDOeTtZV77EMcgqvuViUs/4YlCKzcOJGb/83/3EsqQjj5VPX7xBqDnTSm6G7ypVX7mXiU4X800lQyG8Nd9dddddddddddddddddddddddddddddddddddddddddddddd94a669gEB//CQWAWPMYAi1Orzg2HO8DqB3oUgcsn/VZZDD8gqDt6nuWEEK4zMMOoXrr+PQVGjdhrAcAAoAUFEUwAFswKUFrUQCasrf8ZGAjJTA0vGZT+N8rKkIouVTU+ABsmP4zZzlMJng0T40UochFAqEQw9EGoFMmlFi0a87/3ucy8SlH3NNe8MkN+//w/+Egp4cjYhxeXXn3IaMOXj34JABCNsjJ6//9P3GyAcBBk2ItPWBoBOuSmZ36AAQH8gD7gEoMavqn87BxND3a+L3/wAFgIR/5hJKJtQYf/yg0sBTijViex88QkCs21iIfI3VQ33dY8PwlBsGBmTHj0pXvvER+DHraxBm/bgLlKUqlfldPptY+hhbTF5V+8yXpheHIaMcfFvxoZmZv9S9r/8JefKgIEXYrA31h6grTJTPOwBrmhbldNvvgcSleLMkRXf+0iQosTQp4vfXf//hLMAAGDhYnFuX/8cYHMU0suN9fnwak/AdgAAjeFq1TIyxhwqezv7kP/naCfPHOMdOg/gAIaipSrSoMMCM9qK2IDyRcKqxN37vCQXkrwq54JzxzfWFPUEqeyiX5QzwgwQ/4SC3Q8YXyEI2BpSL/1/2C4EFxtrHhKOvCa/YMDbMjHSNoRz/fw/UL+uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuvhA0/+Egt4ZAIK2eEZpWtVWvoeiCaJDisoBV9S7//DZABEaA6aV6gGX/7w1C4a67666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666668AAAF2kGaOBfgFC5gpw9TAIzwl1hIQUQTwhae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\" type=\"video/mp4\">\n",
+       " <source src=\"data:video/x-m4v;base64,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EI/8wklE2oMP/5QaWApxRqxPY+eISBWbaxEPkbqob7useH4Sg2DAzJjx6Ur33iI/Bj1tYgzftwFylKVSvyun02sfQwtpi8q/eZL0wvDkNGOPi340MzM3+pe1/+EvPlQECLsVgb6w9QVpkpnnYA1zQtyum33wOJSvFmSIrv/aRIUWJoU8Xvrv//wlmAADBwsTi3L/+OMDmKaWXG+vz4NSfgOwAARvC1apkZYw4VPZ39yH/ztBPnjnGOnQfwAENRUpVpUGGBGe1FbEB5IuFVYm793hILyV4Vc8E545vrCnqCVPZRL8oZ4QYIf8JBboeML5CEbA0pF/6/7BcCC421jwlHXhNfsGBtmRjpG0I5/v4fqF/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXwgaf/CQW8MgEFbPCM0rWqrX0PRBNEhxWUAq+pd//hsgAiNAdNK9QDL/94ahcNdd9dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddeAAAAErEGaOBfgFB5Qlh4y2BJ4osB1pJkHFyTIOLkmQcXJME83OSAdcpYCA3UmA5epb+5nqXytcX5MwHeUsR2p5Hkzc2doeyxi43SBYqwhAkfks8fbSZqhF/j5dZObwRvTMuTDWV9xG6cpII2o5muL8mYDrlLG+nw64l4Cu5/o9YqLDGW+HGWSMtWNRiRjw80cv+FuUKssGbxY75ROHssDrlLEkycojAGt61Hv9kAIXm5/6FNO6T/L/9lACVpU9q8/4JXY1iwhlIjz8Gy/NC56sujhu6rHFFwfPPKRxSnyaX6LVWkvSi2WDf78v+zh4SU+IjxgX5gnh/HGZrm4eyzy5OQ6uqtKCGzQhaej4n0gQhaG9o/Wg6JrfPxEo3DLJmuxYD/Usjy3+bD1MvXXYgCkb767z/h8v9+Q868BV6Si7hvK+RYnl+xa8SFDjE5KGayRPnLH/RWU1EU3nzvp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\" type=\"video/mp4\">\n",
        " Your browser does not support the video tag.\n",
        "</video>"
       ],
@@ -465,7 +466,7 @@
     "            u_arrays[0], u_arrays[1], u_arrays[2] = u_arrays[1], u_arrays[2], u_arrays[0]\n",
     "        return u_arrays[2]\n",
     "    \n",
-    "    ani = plt.surface_plot_animation(run_LLVM)\n",
+    "    ani = plt.surface_plot_animation(run_LLVM, zlim=(-1, 1))\n",
     "    assert np.isfinite(np.max(u_arrays[2]))\n",
     "ps.jupyter.display_as_html_video(ani)"
    ]
@@ -584,6 +585,7 @@
        "</pre></div>\n"
       ],
       "text/plain": [
+       "\n",
        "FUNC_PREFIX __launch_bounds__(256) void kernel(double * RESTRICT const _data_u0, double * RESTRICT const _data_u1, double * RESTRICT _data_u2)\n",
        "{\n",
        "   if (blockDim.x*blockIdx.x + threadIdx.x + 1 < 59 && blockDim.y*blockIdx.y + threadIdx.y + 1 < 69)\n",
@@ -679,7 +681,7 @@
    "name": "python",
    "nbconvert_exporter": "python",
    "pygments_lexer": "ipython3",
-   "version": "3.6.8"
+   "version": "3.7.2"
   }
  },
  "nbformat": 4,
diff --git a/pystencils/__init__.py b/pystencils/__init__.py
index 8095205da7bd50b610f299d096916524b1a787f1..a7e21703b48c7398da8be6f609f0f3123f7822d1 100644
--- a/pystencils/__init__.py
+++ b/pystencils/__init__.py
@@ -1,18 +1,17 @@
 """Module to generate stencil kernels in C or CUDA using sympy expressions and call them as Python functions"""
 from . import sympy_gmpy_bug_workaround  # NOQA
-from .field import Field, FieldType, fields
+from . import fd
+from . import stencil as stencil
+from .assignment import Assignment, assignment_from_stencil
 from .data_types import TypedSymbol
-from .slicing import make_slice
-from .kernelcreation import create_kernel, create_indexed_kernel, create_staggered_kernel
+from .datahandling import create_data_handling
 from .display_utils import show_code, to_dot
+from .field import Field, FieldType, fields
+from .kernel_decorator import kernel
+from .kernelcreation import create_indexed_kernel, create_kernel, create_staggered_kernel
 from .simp import AssignmentCollection
-from .assignment import Assignment, assignment_from_stencil
+from .slicing import make_slice
 from .sympyextensions import SymbolCreator
-from .datahandling import create_data_handling
-from .kernel_decorator import kernel
-from . import fd
-from . import stencil as stencil
-
 
 __all__ = ['Field', 'FieldType', 'fields',
            'TypedSymbol',
diff --git a/pystencils/assignment.py b/pystencils/assignment.py
index 757413abd5e8555c47f6343a7553ac64b0a40dc7..45a95d41ecd643618a3d3b6b4a8a9aa0455a2a02 100644
--- a/pystencils/assignment.py
+++ b/pystencils/assignment.py
@@ -1,4 +1,5 @@
 # -*- coding: utf-8 -*-
+import numpy as np
 import sympy as sp
 from sympy.printing.latex import LatexPrinter
 
@@ -6,7 +7,6 @@ try:
     from sympy.codegen.ast import Assignment
 except ImportError:
     Assignment = None
-import numpy as np
 
 __all__ = ['Assignment', 'assignment_from_stencil']
 
@@ -84,7 +84,7 @@ def assignment_from_stencil(stencil_array, input_field, output_field,
         >>> assignment_from_stencil(stencil, f[1, 0], g[2, 0])
         Assignment(g_2E, 3*f_C + 6*f_SE + 4*f_E + 2*f_NE + 5*f_2E)
     """
-    from pystencils import Field
+    from pystencils.field import Field
 
     stencil_array = np.array(stencil_array)
     if order == 'visual':
diff --git a/pystencils/astnodes.py b/pystencils/astnodes.py
index c0472f984c88fbb76eb86ea4fec8f6526e7079d4..a6215923d21c32c20338eacf4330350f889aee43 100644
--- a/pystencils/astnodes.py
+++ b/pystencils/astnodes.py
@@ -6,8 +6,7 @@ import sympy as sp
 
 from pystencils.data_types import TypedSymbol, cast_func, create_type
 from pystencils.field import Field
-from pystencils.kernelparameters import (FieldPointerSymbol, FieldShapeSymbol,
-                                         FieldStrideSymbol)
+from pystencils.kernelparameters import FieldPointerSymbol, FieldShapeSymbol, FieldStrideSymbol
 from pystencils.sympyextensions import fast_subs
 
 NodeOrExpr = Union['Node', sp.Expr]
@@ -163,18 +162,30 @@ class KernelFunction(Node):
         def field_name(self):
             return self.fields[0].name
 
-    def __init__(self, body, ghost_layers=None, function_name="kernel", backend=""):
+    def __init__(self, body, target, backend, compile_function, ghost_layers, function_name="kernel"):
         super(KernelFunction, self).__init__()
         self._body = body
         body.parent = self
         self.function_name = function_name
         self._body.parent = self
-        self.compile = None
         self.ghost_layers = ghost_layers
+        self._target = target
+        self._backend = backend
         # these variables are assumed to be global, so no automatic parameter is generated for them
         self.global_variables = set()
-        self.backend = backend
         self.instruction_set = None  # used in `vectorize` function to tell the backend which i.s. (SSE,AVX) to use
+        # function that compiles the node to a Python callable, is set by the backends
+        self._compile_function = compile_function
+
+    @property
+    def target(self):
+        """Currently either 'cpu' or 'gpu' """
+        return self._target
+
+    @property
+    def backend(self):
+        """Backend for generating the code e.g. 'llvm', 'c', 'cuda' """
+        return self._backend
 
     @property
     def symbols_defined(self):
@@ -195,7 +206,7 @@ class KernelFunction(Node):
 
     @property
     def args(self):
-        return [self._body]
+        return self._body,
 
     @property
     def fields_accessed(self) -> Set['ResolvedFieldAccess']:
@@ -232,6 +243,11 @@ class KernelFunction(Node):
         params = [p.symbol for p in self.get_parameters()]
         return '{0} {1}({2})'.format(type(self).__name__, self.function_name, params)
 
+    def compile(self, *args, **kwargs):
+        if self._compile_function is None:
+            raise ValueError("No compile-function provided for this KernelFunction node")
+        return self._compile_function(self, *args, **kwargs)
+
 
 class SkipIteration(Node):
     @property
diff --git a/pystencils/backends/cbackend.py b/pystencils/backends/cbackend.py
index 9cab5a26d463425f3be3892dac8bfd5969411078..88c68b7ea85b796081589ed642e81d1738716b39 100644
--- a/pystencils/backends/cbackend.py
+++ b/pystencils/backends/cbackend.py
@@ -6,18 +6,15 @@ import sympy as sp
 from sympy.core import S
 from sympy.printing.ccode import C89CodePrinter
 
-from pystencils.astnodes import (DestructuringBindingsForFieldClass,
-                                 KernelFunction, Node)
+from pystencils.astnodes import DestructuringBindingsForFieldClass, KernelFunction, Node
 from pystencils.cpu.vectorization import vec_all, vec_any
-from pystencils.data_types import (PointerType, VectorType, address_of,
-                                   cast_func, create_type,
-                                   get_type_of_expression,
-                                   reinterpret_cast_func, vector_memory_access)
-from pystencils.fast_approximation import (fast_division, fast_inv_sqrt,
-                                           fast_sqrt)
-from pystencils.integer_functions import (bit_shift_left, bit_shift_right,
-                                          bitwise_and, bitwise_or, bitwise_xor,
-                                          int_div, int_power_of_2, modulo_ceil)
+from pystencils.data_types import (
+    PointerType, VectorType, address_of, cast_func, create_type, get_type_of_expression,
+    reinterpret_cast_func, vector_memory_access)
+from pystencils.fast_approximation import fast_division, fast_inv_sqrt, fast_sqrt
+from pystencils.integer_functions import (
+    bit_shift_left, bit_shift_right, bitwise_and, bitwise_or, bitwise_xor,
+    int_div, int_power_of_2, modulo_ceil)
 from pystencils.kernelparameters import FieldPointerSymbol
 
 try:
diff --git a/pystencils/backends/dot.py b/pystencils/backends/dot.py
index bfec9cfdb2a7d9a32285b0a967b47980be78f907..64610c47af6148d6008780ba80530d678e518486 100644
--- a/pystencils/backends/dot.py
+++ b/pystencils/backends/dot.py
@@ -1,6 +1,6 @@
-from sympy.printing.printer import Printer
-from graphviz import Digraph, lang
 import graphviz
+from graphviz import Digraph, lang
+from sympy.printing.printer import Printer
 
 
 # noinspection PyPep8Naming
diff --git a/pystencils/boundaries/__init__.py b/pystencils/boundaries/__init__.py
index cf94f330fbf384d075886aca1abd8aaf05dc29f0..890ea208333197804ae8b44ee147b68113ed4d99 100644
--- a/pystencils/boundaries/__init__.py
+++ b/pystencils/boundaries/__init__.py
@@ -1,5 +1,5 @@
+from pystencils.boundaries.boundaryconditions import Dirichlet, Neumann
 from pystencils.boundaries.boundaryhandling import BoundaryHandling
-from pystencils.boundaries.boundaryconditions import Neumann, Dirichlet
 from pystencils.boundaries.inkernel import add_neumann_boundary
 
 __all__ = ['BoundaryHandling', 'Neumann', 'Dirichlet', 'add_neumann_boundary']
diff --git a/pystencils/boundaries/boundaryconditions.py b/pystencils/boundaries/boundaryconditions.py
index 10870c4cd5cd999b05fbc3dd72cb9de6710c25a6..39338634a51cae5bfc782efaae2ac69ca523152e 100644
--- a/pystencils/boundaries/boundaryconditions.py
+++ b/pystencils/boundaries/boundaryconditions.py
@@ -1,4 +1,5 @@
-from typing import List, Tuple, Any
+from typing import Any, List, Tuple
+
 from pystencils import Assignment
 from pystencils.boundaries.boundaryhandling import BoundaryOffsetInfo
 from pystencils.data_types import create_type
diff --git a/pystencils/boundaries/boundaryhandling.py b/pystencils/boundaries/boundaryhandling.py
index 384c10d4ff30b0ad983fac2dabd28a72df54a979..d258de4b3e5e7d5b85c69d0910ea384b77ecd110 100644
--- a/pystencils/boundaries/boundaryhandling.py
+++ b/pystencils/boundaries/boundaryhandling.py
@@ -1,11 +1,14 @@
 import numpy as np
 import sympy as sp
+
+from pystencils import create_indexed_kernel
 from pystencils.assignment import Assignment
-from pystencils import Field, TypedSymbol, create_indexed_kernel
 from pystencils.backends.cbackend import CustomCodeNode
-from pystencils.boundaries.createindexlist import numpy_data_type_for_boundary_object, create_boundary_index_array
+from pystencils.boundaries.createindexlist import (
+    create_boundary_index_array, numpy_data_type_for_boundary_object)
 from pystencils.cache import memorycache
-from pystencils.data_types import create_type
+from pystencils.data_types import TypedSymbol, create_type
+from pystencils.field import Field
 from pystencils.kernelparameters import FieldPointerSymbol
 
 DEFAULT_FLAG_TYPE = np.uint32
diff --git a/pystencils/boundaries/createindexlist.py b/pystencils/boundaries/createindexlist.py
index d039e16cba92c8d01f539ff56de74fcb0644d774..a0ee87f3b25960550d72a85a9a2ddf5cfca99ce7 100644
--- a/pystencils/boundaries/createindexlist.py
+++ b/pystencils/boundaries/createindexlist.py
@@ -1,19 +1,28 @@
-import numpy as np
 import itertools
 import warnings
 
-try:
-    import pyximport
+import numpy as np
 
-    pyximport.install(language_level=3)
+try:
+    # Try to import right away - assume compiled code is available
+    # compile with: python setup.py build_ext --inplace --use-cython
     from pystencils.boundaries.createindexlistcython import create_boundary_neighbor_index_list_2d, \
         create_boundary_neighbor_index_list_3d, create_boundary_cell_index_list_2d, create_boundary_cell_index_list_3d
 
     cython_funcs_available = True
-except Exception:
-    cython_funcs_available = False
-    create_boundary_index_list_2d = None
-    create_boundary_index_list_3d = None
+except ImportError:
+    try:
+        # If not, try development mode and import via pyximport
+        import pyximport
+
+        pyximport.install(language_level=3)
+        cython_funcs_available = True
+    except ImportError:
+        cython_funcs_available = False
+    if cython_funcs_available:
+        from pystencils.boundaries.createindexlistcython import create_boundary_neighbor_index_list_2d, \
+            create_boundary_neighbor_index_list_3d, create_boundary_cell_index_list_2d, \
+            create_boundary_cell_index_list_3d
 
 boundary_index_array_coordinate_names = ["x", "y", "z"]
 direction_member_name = "dir"
diff --git a/pystencils/boundaries/createindexlistcython.c b/pystencils/boundaries/createindexlistcython.c
new file mode 100644
index 0000000000000000000000000000000000000000..2feba8354753aba9910da0fd65b6c3750a47b816
--- /dev/null
+++ b/pystencils/boundaries/createindexlistcython.c
@@ -0,0 +1,41083 @@
+/* Generated by Cython 0.29.5 */
+
+/* BEGIN: Cython Metadata
+{
+    "distutils": {
+        "language": "c",
+        "name": "pystencils.boundaries.createindexlistcython",
+        "sources": [
+            "pystencils/boundaries/createindexlistcython.pyx"
+        ]
+    },
+    "module_name": "pystencils.boundaries.createindexlistcython"
+}
+END: Cython Metadata */
+
+#define PY_SSIZE_T_CLEAN
+#include "Python.h"
+#ifndef Py_PYTHON_H
+    #error Python headers needed to compile C extensions, please install development version of Python.
+#elif PY_VERSION_HEX < 0x02060000 || (0x03000000 <= PY_VERSION_HEX && PY_VERSION_HEX < 0x03030000)
+    #error Cython requires Python 2.6+ or Python 3.3+.
+#else
+#define CYTHON_ABI "0_29_5"
+#define CYTHON_HEX_VERSION 0x001D05F0
+#define CYTHON_FUTURE_DIVISION 1
+#include <stddef.h>
+#ifndef offsetof
+  #define offsetof(type, member) ( (size_t) & ((type*)0) -> member )
+#endif
+#if !defined(WIN32) && !defined(MS_WINDOWS)
+  #ifndef __stdcall
+    #define __stdcall
+  #endif
+  #ifndef __cdecl
+    #define __cdecl
+  #endif
+  #ifndef __fastcall
+    #define __fastcall
+  #endif
+#endif
+#ifndef DL_IMPORT
+  #define DL_IMPORT(t) t
+#endif
+#ifndef DL_EXPORT
+  #define DL_EXPORT(t) t
+#endif
+#define __PYX_COMMA ,
+#ifndef HAVE_LONG_LONG
+  #if PY_VERSION_HEX >= 0x02070000
+    #define HAVE_LONG_LONG
+  #endif
+#endif
+#ifndef PY_LONG_LONG
+  #define PY_LONG_LONG LONG_LONG
+#endif
+#ifndef Py_HUGE_VAL
+  #define Py_HUGE_VAL HUGE_VAL
+#endif
+#ifdef PYPY_VERSION
+  #define CYTHON_COMPILING_IN_PYPY 1
+  #define CYTHON_COMPILING_IN_PYSTON 0
+  #define CYTHON_COMPILING_IN_CPYTHON 0
+  #undef CYTHON_USE_TYPE_SLOTS
+  #define CYTHON_USE_TYPE_SLOTS 0
+  #undef CYTHON_USE_PYTYPE_LOOKUP
+  #define CYTHON_USE_PYTYPE_LOOKUP 0
+  #if PY_VERSION_HEX < 0x03050000
+    #undef CYTHON_USE_ASYNC_SLOTS
+    #define CYTHON_USE_ASYNC_SLOTS 0
+  #elif !defined(CYTHON_USE_ASYNC_SLOTS)
+    #define CYTHON_USE_ASYNC_SLOTS 1
+  #endif
+  #undef CYTHON_USE_PYLIST_INTERNALS
+  #define CYTHON_USE_PYLIST_INTERNALS 0
+  #undef CYTHON_USE_UNICODE_INTERNALS
+  #define CYTHON_USE_UNICODE_INTERNALS 0
+  #undef CYTHON_USE_UNICODE_WRITER
+  #define CYTHON_USE_UNICODE_WRITER 0
+  #undef CYTHON_USE_PYLONG_INTERNALS
+  #define CYTHON_USE_PYLONG_INTERNALS 0
+  #undef CYTHON_AVOID_BORROWED_REFS
+  #define CYTHON_AVOID_BORROWED_REFS 1
+  #undef CYTHON_ASSUME_SAFE_MACROS
+  #define CYTHON_ASSUME_SAFE_MACROS 0
+  #undef CYTHON_UNPACK_METHODS
+  #define CYTHON_UNPACK_METHODS 0
+  #undef CYTHON_FAST_THREAD_STATE
+  #define CYTHON_FAST_THREAD_STATE 0
+  #undef CYTHON_FAST_PYCALL
+  #define CYTHON_FAST_PYCALL 0
+  #undef CYTHON_PEP489_MULTI_PHASE_INIT
+  #define CYTHON_PEP489_MULTI_PHASE_INIT 0
+  #undef CYTHON_USE_TP_FINALIZE
+  #define CYTHON_USE_TP_FINALIZE 0
+  #undef CYTHON_USE_DICT_VERSIONS
+  #define CYTHON_USE_DICT_VERSIONS 0
+  #undef CYTHON_USE_EXC_INFO_STACK
+  #define CYTHON_USE_EXC_INFO_STACK 0
+#elif defined(PYSTON_VERSION)
+  #define CYTHON_COMPILING_IN_PYPY 0
+  #define CYTHON_COMPILING_IN_PYSTON 1
+  #define CYTHON_COMPILING_IN_CPYTHON 0
+  #ifndef CYTHON_USE_TYPE_SLOTS
+    #define CYTHON_USE_TYPE_SLOTS 1
+  #endif
+  #undef CYTHON_USE_PYTYPE_LOOKUP
+  #define CYTHON_USE_PYTYPE_LOOKUP 0
+  #undef CYTHON_USE_ASYNC_SLOTS
+  #define CYTHON_USE_ASYNC_SLOTS 0
+  #undef CYTHON_USE_PYLIST_INTERNALS
+  #define CYTHON_USE_PYLIST_INTERNALS 0
+  #ifndef CYTHON_USE_UNICODE_INTERNALS
+    #define CYTHON_USE_UNICODE_INTERNALS 1
+  #endif
+  #undef CYTHON_USE_UNICODE_WRITER
+  #define CYTHON_USE_UNICODE_WRITER 0
+  #undef CYTHON_USE_PYLONG_INTERNALS
+  #define CYTHON_USE_PYLONG_INTERNALS 0
+  #ifndef CYTHON_AVOID_BORROWED_REFS
+    #define CYTHON_AVOID_BORROWED_REFS 0
+  #endif
+  #ifndef CYTHON_ASSUME_SAFE_MACROS
+    #define CYTHON_ASSUME_SAFE_MACROS 1
+  #endif
+  #ifndef CYTHON_UNPACK_METHODS
+    #define CYTHON_UNPACK_METHODS 1
+  #endif
+  #undef CYTHON_FAST_THREAD_STATE
+  #define CYTHON_FAST_THREAD_STATE 0
+  #undef CYTHON_FAST_PYCALL
+  #define CYTHON_FAST_PYCALL 0
+  #undef CYTHON_PEP489_MULTI_PHASE_INIT
+  #define CYTHON_PEP489_MULTI_PHASE_INIT 0
+  #undef CYTHON_USE_TP_FINALIZE
+  #define CYTHON_USE_TP_FINALIZE 0
+  #undef CYTHON_USE_DICT_VERSIONS
+  #define CYTHON_USE_DICT_VERSIONS 0
+  #undef CYTHON_USE_EXC_INFO_STACK
+  #define CYTHON_USE_EXC_INFO_STACK 0
+#else
+  #define CYTHON_COMPILING_IN_PYPY 0
+  #define CYTHON_COMPILING_IN_PYSTON 0
+  #define CYTHON_COMPILING_IN_CPYTHON 1
+  #ifndef CYTHON_USE_TYPE_SLOTS
+    #define CYTHON_USE_TYPE_SLOTS 1
+  #endif
+  #if PY_VERSION_HEX < 0x02070000
+    #undef CYTHON_USE_PYTYPE_LOOKUP
+    #define CYTHON_USE_PYTYPE_LOOKUP 0
+  #elif !defined(CYTHON_USE_PYTYPE_LOOKUP)
+    #define CYTHON_USE_PYTYPE_LOOKUP 1
+  #endif
+  #if PY_MAJOR_VERSION < 3
+    #undef CYTHON_USE_ASYNC_SLOTS
+    #define CYTHON_USE_ASYNC_SLOTS 0
+  #elif !defined(CYTHON_USE_ASYNC_SLOTS)
+    #define CYTHON_USE_ASYNC_SLOTS 1
+  #endif
+  #if PY_VERSION_HEX < 0x02070000
+    #undef CYTHON_USE_PYLONG_INTERNALS
+    #define CYTHON_USE_PYLONG_INTERNALS 0
+  #elif !defined(CYTHON_USE_PYLONG_INTERNALS)
+    #define CYTHON_USE_PYLONG_INTERNALS 1
+  #endif
+  #ifndef CYTHON_USE_PYLIST_INTERNALS
+    #define CYTHON_USE_PYLIST_INTERNALS 1
+  #endif
+  #ifndef CYTHON_USE_UNICODE_INTERNALS
+    #define CYTHON_USE_UNICODE_INTERNALS 1
+  #endif
+  #if PY_VERSION_HEX < 0x030300F0
+    #undef CYTHON_USE_UNICODE_WRITER
+    #define CYTHON_USE_UNICODE_WRITER 0
+  #elif !defined(CYTHON_USE_UNICODE_WRITER)
+    #define CYTHON_USE_UNICODE_WRITER 1
+  #endif
+  #ifndef CYTHON_AVOID_BORROWED_REFS
+    #define CYTHON_AVOID_BORROWED_REFS 0
+  #endif
+  #ifndef CYTHON_ASSUME_SAFE_MACROS
+    #define CYTHON_ASSUME_SAFE_MACROS 1
+  #endif
+  #ifndef CYTHON_UNPACK_METHODS
+    #define CYTHON_UNPACK_METHODS 1
+  #endif
+  #ifndef CYTHON_FAST_THREAD_STATE
+    #define CYTHON_FAST_THREAD_STATE 1
+  #endif
+  #ifndef CYTHON_FAST_PYCALL
+    #define CYTHON_FAST_PYCALL 1
+  #endif
+  #ifndef CYTHON_PEP489_MULTI_PHASE_INIT
+    #define CYTHON_PEP489_MULTI_PHASE_INIT (PY_VERSION_HEX >= 0x03050000)
+  #endif
+  #ifndef CYTHON_USE_TP_FINALIZE
+    #define CYTHON_USE_TP_FINALIZE (PY_VERSION_HEX >= 0x030400a1)
+  #endif
+  #ifndef CYTHON_USE_DICT_VERSIONS
+    #define CYTHON_USE_DICT_VERSIONS (PY_VERSION_HEX >= 0x030600B1)
+  #endif
+  #ifndef CYTHON_USE_EXC_INFO_STACK
+    #define CYTHON_USE_EXC_INFO_STACK (PY_VERSION_HEX >= 0x030700A3)
+  #endif
+#endif
+#if !defined(CYTHON_FAST_PYCCALL)
+#define CYTHON_FAST_PYCCALL  (CYTHON_FAST_PYCALL && PY_VERSION_HEX >= 0x030600B1)
+#endif
+#if CYTHON_USE_PYLONG_INTERNALS
+  #include "longintrepr.h"
+  #undef SHIFT
+  #undef BASE
+  #undef MASK
+  #ifdef SIZEOF_VOID_P
+    enum { __pyx_check_sizeof_voidp = 1 / (int)(SIZEOF_VOID_P == sizeof(void*)) };
+  #endif
+#endif
+#ifndef __has_attribute
+  #define __has_attribute(x) 0
+#endif
+#ifndef __has_cpp_attribute
+  #define __has_cpp_attribute(x) 0
+#endif
+#ifndef CYTHON_RESTRICT
+  #if defined(__GNUC__)
+    #define CYTHON_RESTRICT __restrict__
+  #elif defined(_MSC_VER) && _MSC_VER >= 1400
+    #define CYTHON_RESTRICT __restrict
+  #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+    #define CYTHON_RESTRICT restrict
+  #else
+    #define CYTHON_RESTRICT
+  #endif
+#endif
+#ifndef CYTHON_UNUSED
+# if defined(__GNUC__)
+#   if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4))
+#     define CYTHON_UNUSED __attribute__ ((__unused__))
+#   else
+#     define CYTHON_UNUSED
+#   endif
+# elif defined(__ICC) || (defined(__INTEL_COMPILER) && !defined(_MSC_VER))
+#   define CYTHON_UNUSED __attribute__ ((__unused__))
+# else
+#   define CYTHON_UNUSED
+# endif
+#endif
+#ifndef CYTHON_MAYBE_UNUSED_VAR
+#  if defined(__cplusplus)
+     template<class T> void CYTHON_MAYBE_UNUSED_VAR( const T& ) { }
+#  else
+#    define CYTHON_MAYBE_UNUSED_VAR(x) (void)(x)
+#  endif
+#endif
+#ifndef CYTHON_NCP_UNUSED
+# if CYTHON_COMPILING_IN_CPYTHON
+#  define CYTHON_NCP_UNUSED
+# else
+#  define CYTHON_NCP_UNUSED CYTHON_UNUSED
+# endif
+#endif
+#define __Pyx_void_to_None(void_result) ((void)(void_result), Py_INCREF(Py_None), Py_None)
+#ifdef _MSC_VER
+    #ifndef _MSC_STDINT_H_
+        #if _MSC_VER < 1300
+           typedef unsigned char     uint8_t;
+           typedef unsigned int      uint32_t;
+        #else
+           typedef unsigned __int8   uint8_t;
+           typedef unsigned __int32  uint32_t;
+        #endif
+    #endif
+#else
+   #include <stdint.h>
+#endif
+#ifndef CYTHON_FALLTHROUGH
+  #if defined(__cplusplus) && __cplusplus >= 201103L
+    #if __has_cpp_attribute(fallthrough)
+      #define CYTHON_FALLTHROUGH [[fallthrough]]
+    #elif __has_cpp_attribute(clang::fallthrough)
+      #define CYTHON_FALLTHROUGH [[clang::fallthrough]]
+    #elif __has_cpp_attribute(gnu::fallthrough)
+      #define CYTHON_FALLTHROUGH [[gnu::fallthrough]]
+    #endif
+  #endif
+  #ifndef CYTHON_FALLTHROUGH
+    #if __has_attribute(fallthrough)
+      #define CYTHON_FALLTHROUGH __attribute__((fallthrough))
+    #else
+      #define CYTHON_FALLTHROUGH
+    #endif
+  #endif
+  #if defined(__clang__ ) && defined(__apple_build_version__)
+    #if __apple_build_version__ < 7000000
+      #undef  CYTHON_FALLTHROUGH
+      #define CYTHON_FALLTHROUGH
+    #endif
+  #endif
+#endif
+
+#ifndef CYTHON_INLINE
+  #if defined(__clang__)
+    #define CYTHON_INLINE __inline__ __attribute__ ((__unused__))
+  #elif defined(__GNUC__)
+    #define CYTHON_INLINE __inline__
+  #elif defined(_MSC_VER)
+    #define CYTHON_INLINE __inline
+  #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+    #define CYTHON_INLINE inline
+  #else
+    #define CYTHON_INLINE
+  #endif
+#endif
+
+#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x02070600 && !defined(Py_OptimizeFlag)
+  #define Py_OptimizeFlag 0
+#endif
+#define __PYX_BUILD_PY_SSIZE_T "n"
+#define CYTHON_FORMAT_SSIZE_T "z"
+#if PY_MAJOR_VERSION < 3
+  #define __Pyx_BUILTIN_MODULE_NAME "__builtin__"
+  #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\
+          PyCode_New(a+k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)
+  #define __Pyx_DefaultClassType PyClass_Type
+#else
+  #define __Pyx_BUILTIN_MODULE_NAME "builtins"
+  #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\
+          PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)
+  #define __Pyx_DefaultClassType PyType_Type
+#endif
+#ifndef Py_TPFLAGS_CHECKTYPES
+  #define Py_TPFLAGS_CHECKTYPES 0
+#endif
+#ifndef Py_TPFLAGS_HAVE_INDEX
+  #define Py_TPFLAGS_HAVE_INDEX 0
+#endif
+#ifndef Py_TPFLAGS_HAVE_NEWBUFFER
+  #define Py_TPFLAGS_HAVE_NEWBUFFER 0
+#endif
+#ifndef Py_TPFLAGS_HAVE_FINALIZE
+  #define Py_TPFLAGS_HAVE_FINALIZE 0
+#endif
+#ifndef METH_STACKLESS
+  #define METH_STACKLESS 0
+#endif
+#if PY_VERSION_HEX <= 0x030700A3 || !defined(METH_FASTCALL)
+  #ifndef METH_FASTCALL
+     #define METH_FASTCALL 0x80
+  #endif
+  typedef PyObject *(*__Pyx_PyCFunctionFast) (PyObject *self, PyObject *const *args, Py_ssize_t nargs);
+  typedef PyObject *(*__Pyx_PyCFunctionFastWithKeywords) (PyObject *self, PyObject *const *args,
+                                                          Py_ssize_t nargs, PyObject *kwnames);
+#else
+  #define __Pyx_PyCFunctionFast _PyCFunctionFast
+  #define __Pyx_PyCFunctionFastWithKeywords _PyCFunctionFastWithKeywords
+#endif
+#if CYTHON_FAST_PYCCALL
+#define __Pyx_PyFastCFunction_Check(func)\
+    ((PyCFunction_Check(func) && (METH_FASTCALL == (PyCFunction_GET_FLAGS(func) & ~(METH_CLASS | METH_STATIC | METH_COEXIST | METH_KEYWORDS | METH_STACKLESS)))))
+#else
+#define __Pyx_PyFastCFunction_Check(func) 0
+#endif
+#if CYTHON_COMPILING_IN_PYPY && !defined(PyObject_Malloc)
+  #define PyObject_Malloc(s)   PyMem_Malloc(s)
+  #define PyObject_Free(p)     PyMem_Free(p)
+  #define PyObject_Realloc(p)  PyMem_Realloc(p)
+#endif
+#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030400A1
+  #define PyMem_RawMalloc(n)           PyMem_Malloc(n)
+  #define PyMem_RawRealloc(p, n)       PyMem_Realloc(p, n)
+  #define PyMem_RawFree(p)             PyMem_Free(p)
+#endif
+#if CYTHON_COMPILING_IN_PYSTON
+  #define __Pyx_PyCode_HasFreeVars(co)  PyCode_HasFreeVars(co)
+  #define __Pyx_PyFrame_SetLineNumber(frame, lineno) PyFrame_SetLineNumber(frame, lineno)
+#else
+  #define __Pyx_PyCode_HasFreeVars(co)  (PyCode_GetNumFree(co) > 0)
+  #define __Pyx_PyFrame_SetLineNumber(frame, lineno)  (frame)->f_lineno = (lineno)
+#endif
+#if !CYTHON_FAST_THREAD_STATE || PY_VERSION_HEX < 0x02070000
+  #define __Pyx_PyThreadState_Current PyThreadState_GET()
+#elif PY_VERSION_HEX >= 0x03060000
+  #define __Pyx_PyThreadState_Current _PyThreadState_UncheckedGet()
+#elif PY_VERSION_HEX >= 0x03000000
+  #define __Pyx_PyThreadState_Current PyThreadState_GET()
+#else
+  #define __Pyx_PyThreadState_Current _PyThreadState_Current
+#endif
+#if PY_VERSION_HEX < 0x030700A2 && !defined(PyThread_tss_create) && !defined(Py_tss_NEEDS_INIT)
+#include "pythread.h"
+#define Py_tss_NEEDS_INIT 0
+typedef int Py_tss_t;
+static CYTHON_INLINE int PyThread_tss_create(Py_tss_t *key) {
+  *key = PyThread_create_key();
+  return 0;
+}
+static CYTHON_INLINE Py_tss_t * PyThread_tss_alloc(void) {
+  Py_tss_t *key = (Py_tss_t *)PyObject_Malloc(sizeof(Py_tss_t));
+  *key = Py_tss_NEEDS_INIT;
+  return key;
+}
+static CYTHON_INLINE void PyThread_tss_free(Py_tss_t *key) {
+  PyObject_Free(key);
+}
+static CYTHON_INLINE int PyThread_tss_is_created(Py_tss_t *key) {
+  return *key != Py_tss_NEEDS_INIT;
+}
+static CYTHON_INLINE void PyThread_tss_delete(Py_tss_t *key) {
+  PyThread_delete_key(*key);
+  *key = Py_tss_NEEDS_INIT;
+}
+static CYTHON_INLINE int PyThread_tss_set(Py_tss_t *key, void *value) {
+  return PyThread_set_key_value(*key, value);
+}
+static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) {
+  return PyThread_get_key_value(*key);
+}
+#endif
+#if CYTHON_COMPILING_IN_CPYTHON || defined(_PyDict_NewPresized)
+#define __Pyx_PyDict_NewPresized(n)  ((n <= 8) ? PyDict_New() : _PyDict_NewPresized(n))
+#else
+#define __Pyx_PyDict_NewPresized(n)  PyDict_New()
+#endif
+#if PY_MAJOR_VERSION >= 3 || CYTHON_FUTURE_DIVISION
+  #define __Pyx_PyNumber_Divide(x,y)         PyNumber_TrueDivide(x,y)
+  #define __Pyx_PyNumber_InPlaceDivide(x,y)  PyNumber_InPlaceTrueDivide(x,y)
+#else
+  #define __Pyx_PyNumber_Divide(x,y)         PyNumber_Divide(x,y)
+  #define __Pyx_PyNumber_InPlaceDivide(x,y)  PyNumber_InPlaceDivide(x,y)
+#endif
+#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030500A1 && CYTHON_USE_UNICODE_INTERNALS
+#define __Pyx_PyDict_GetItemStr(dict, name)  _PyDict_GetItem_KnownHash(dict, name, ((PyASCIIObject *) name)->hash)
+#else
+#define __Pyx_PyDict_GetItemStr(dict, name)  PyDict_GetItem(dict, name)
+#endif
+#if PY_VERSION_HEX > 0x03030000 && defined(PyUnicode_KIND)
+  #define CYTHON_PEP393_ENABLED 1
+  #define __Pyx_PyUnicode_READY(op)       (likely(PyUnicode_IS_READY(op)) ?\
+                                              0 : _PyUnicode_Ready((PyObject *)(op)))
+  #define __Pyx_PyUnicode_GET_LENGTH(u)   PyUnicode_GET_LENGTH(u)
+  #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_READ_CHAR(u, i)
+  #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u)   PyUnicode_MAX_CHAR_VALUE(u)
+  #define __Pyx_PyUnicode_KIND(u)         PyUnicode_KIND(u)
+  #define __Pyx_PyUnicode_DATA(u)         PyUnicode_DATA(u)
+  #define __Pyx_PyUnicode_READ(k, d, i)   PyUnicode_READ(k, d, i)
+  #define __Pyx_PyUnicode_WRITE(k, d, i, ch)  PyUnicode_WRITE(k, d, i, ch)
+  #define __Pyx_PyUnicode_IS_TRUE(u)      (0 != (likely(PyUnicode_IS_READY(u)) ? PyUnicode_GET_LENGTH(u) : PyUnicode_GET_SIZE(u)))
+#else
+  #define CYTHON_PEP393_ENABLED 0
+  #define PyUnicode_1BYTE_KIND  1
+  #define PyUnicode_2BYTE_KIND  2
+  #define PyUnicode_4BYTE_KIND  4
+  #define __Pyx_PyUnicode_READY(op)       (0)
+  #define __Pyx_PyUnicode_GET_LENGTH(u)   PyUnicode_GET_SIZE(u)
+  #define __Pyx_PyUnicode_READ_CHAR(u, i) ((Py_UCS4)(PyUnicode_AS_UNICODE(u)[i]))
+  #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u)   ((sizeof(Py_UNICODE) == 2) ? 65535 : 1114111)
+  #define __Pyx_PyUnicode_KIND(u)         (sizeof(Py_UNICODE))
+  #define __Pyx_PyUnicode_DATA(u)         ((void*)PyUnicode_AS_UNICODE(u))
+  #define __Pyx_PyUnicode_READ(k, d, i)   ((void)(k), (Py_UCS4)(((Py_UNICODE*)d)[i]))
+  #define __Pyx_PyUnicode_WRITE(k, d, i, ch)  (((void)(k)), ((Py_UNICODE*)d)[i] = ch)
+  #define __Pyx_PyUnicode_IS_TRUE(u)      (0 != PyUnicode_GET_SIZE(u))
+#endif
+#if CYTHON_COMPILING_IN_PYPY
+  #define __Pyx_PyUnicode_Concat(a, b)      PyNumber_Add(a, b)
+  #define __Pyx_PyUnicode_ConcatSafe(a, b)  PyNumber_Add(a, b)
+#else
+  #define __Pyx_PyUnicode_Concat(a, b)      PyUnicode_Concat(a, b)
+  #define __Pyx_PyUnicode_ConcatSafe(a, b)  ((unlikely((a) == Py_None) || unlikely((b) == Py_None)) ?\
+      PyNumber_Add(a, b) : __Pyx_PyUnicode_Concat(a, b))
+#endif
+#if CYTHON_COMPILING_IN_PYPY && !defined(PyUnicode_Contains)
+  #define PyUnicode_Contains(u, s)  PySequence_Contains(u, s)
+#endif
+#if CYTHON_COMPILING_IN_PYPY && !defined(PyByteArray_Check)
+  #define PyByteArray_Check(obj)  PyObject_TypeCheck(obj, &PyByteArray_Type)
+#endif
+#if CYTHON_COMPILING_IN_PYPY && !defined(PyObject_Format)
+  #define PyObject_Format(obj, fmt)  PyObject_CallMethod(obj, "__format__", "O", fmt)
+#endif
+#define __Pyx_PyString_FormatSafe(a, b)   ((unlikely((a) == Py_None || (PyString_Check(b) && !PyString_CheckExact(b)))) ? PyNumber_Remainder(a, b) : __Pyx_PyString_Format(a, b))
+#define __Pyx_PyUnicode_FormatSafe(a, b)  ((unlikely((a) == Py_None || (PyUnicode_Check(b) && !PyUnicode_CheckExact(b)))) ? PyNumber_Remainder(a, b) : PyUnicode_Format(a, b))
+#if PY_MAJOR_VERSION >= 3
+  #define __Pyx_PyString_Format(a, b)  PyUnicode_Format(a, b)
+#else
+  #define __Pyx_PyString_Format(a, b)  PyString_Format(a, b)
+#endif
+#if PY_MAJOR_VERSION < 3 && !defined(PyObject_ASCII)
+  #define PyObject_ASCII(o)            PyObject_Repr(o)
+#endif
+#if PY_MAJOR_VERSION >= 3
+  #define PyBaseString_Type            PyUnicode_Type
+  #define PyStringObject               PyUnicodeObject
+  #define PyString_Type                PyUnicode_Type
+  #define PyString_Check               PyUnicode_Check
+  #define PyString_CheckExact          PyUnicode_CheckExact
+  #define PyObject_Unicode             PyObject_Str
+#endif
+#if PY_MAJOR_VERSION >= 3
+  #define __Pyx_PyBaseString_Check(obj) PyUnicode_Check(obj)
+  #define __Pyx_PyBaseString_CheckExact(obj) PyUnicode_CheckExact(obj)
+#else
+  #define __Pyx_PyBaseString_Check(obj) (PyString_Check(obj) || PyUnicode_Check(obj))
+  #define __Pyx_PyBaseString_CheckExact(obj) (PyString_CheckExact(obj) || PyUnicode_CheckExact(obj))
+#endif
+#ifndef PySet_CheckExact
+  #define PySet_CheckExact(obj)        (Py_TYPE(obj) == &PySet_Type)
+#endif
+#if CYTHON_ASSUME_SAFE_MACROS
+  #define __Pyx_PySequence_SIZE(seq)  Py_SIZE(seq)
+#else
+  #define __Pyx_PySequence_SIZE(seq)  PySequence_Size(seq)
+#endif
+#if PY_MAJOR_VERSION >= 3
+  #define PyIntObject                  PyLongObject
+  #define PyInt_Type                   PyLong_Type
+  #define PyInt_Check(op)              PyLong_Check(op)
+  #define PyInt_CheckExact(op)         PyLong_CheckExact(op)
+  #define PyInt_FromString             PyLong_FromString
+  #define PyInt_FromUnicode            PyLong_FromUnicode
+  #define PyInt_FromLong               PyLong_FromLong
+  #define PyInt_FromSize_t             PyLong_FromSize_t
+  #define PyInt_FromSsize_t            PyLong_FromSsize_t
+  #define PyInt_AsLong                 PyLong_AsLong
+  #define PyInt_AS_LONG                PyLong_AS_LONG
+  #define PyInt_AsSsize_t              PyLong_AsSsize_t
+  #define PyInt_AsUnsignedLongMask     PyLong_AsUnsignedLongMask
+  #define PyInt_AsUnsignedLongLongMask PyLong_AsUnsignedLongLongMask
+  #define PyNumber_Int                 PyNumber_Long
+#endif
+#if PY_MAJOR_VERSION >= 3
+  #define PyBoolObject                 PyLongObject
+#endif
+#if PY_MAJOR_VERSION >= 3 && CYTHON_COMPILING_IN_PYPY
+  #ifndef PyUnicode_InternFromString
+    #define PyUnicode_InternFromString(s) PyUnicode_FromString(s)
+  #endif
+#endif
+#if PY_VERSION_HEX < 0x030200A4
+  typedef long Py_hash_t;
+  #define __Pyx_PyInt_FromHash_t PyInt_FromLong
+  #define __Pyx_PyInt_AsHash_t   PyInt_AsLong
+#else
+  #define __Pyx_PyInt_FromHash_t PyInt_FromSsize_t
+  #define __Pyx_PyInt_AsHash_t   PyInt_AsSsize_t
+#endif
+#if PY_MAJOR_VERSION >= 3
+  #define __Pyx_PyMethod_New(func, self, klass) ((self) ? PyMethod_New(func, self) : (Py_INCREF(func), func))
+#else
+  #define __Pyx_PyMethod_New(func, self, klass) PyMethod_New(func, self, klass)
+#endif
+#if CYTHON_USE_ASYNC_SLOTS
+  #if PY_VERSION_HEX >= 0x030500B1
+    #define __Pyx_PyAsyncMethodsStruct PyAsyncMethods
+    #define __Pyx_PyType_AsAsync(obj) (Py_TYPE(obj)->tp_as_async)
+  #else
+    #define __Pyx_PyType_AsAsync(obj) ((__Pyx_PyAsyncMethodsStruct*) (Py_TYPE(obj)->tp_reserved))
+  #endif
+#else
+  #define __Pyx_PyType_AsAsync(obj) NULL
+#endif
+#ifndef __Pyx_PyAsyncMethodsStruct
+    typedef struct {
+        unaryfunc am_await;
+        unaryfunc am_aiter;
+        unaryfunc am_anext;
+    } __Pyx_PyAsyncMethodsStruct;
+#endif
+
+#if defined(WIN32) || defined(MS_WINDOWS)
+  #define _USE_MATH_DEFINES
+#endif
+#include <math.h>
+#ifdef NAN
+#define __PYX_NAN() ((float) NAN)
+#else
+static CYTHON_INLINE float __PYX_NAN() {
+  float value;
+  memset(&value, 0xFF, sizeof(value));
+  return value;
+}
+#endif
+#if defined(__CYGWIN__) && defined(_LDBL_EQ_DBL)
+#define __Pyx_truncl trunc
+#else
+#define __Pyx_truncl truncl
+#endif
+
+
+#define __PYX_ERR(f_index, lineno, Ln_error) \
+{ \
+  __pyx_filename = __pyx_f[f_index]; __pyx_lineno = lineno; __pyx_clineno = __LINE__; goto Ln_error; \
+}
+
+#ifndef __PYX_EXTERN_C
+  #ifdef __cplusplus
+    #define __PYX_EXTERN_C extern "C"
+  #else
+    #define __PYX_EXTERN_C extern
+  #endif
+#endif
+
+#define __PYX_HAVE__pystencils__boundaries__createindexlistcython
+#define __PYX_HAVE_API__pystencils__boundaries__createindexlistcython
+/* Early includes */
+#include "pythread.h"
+#include <string.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include "pystate.h"
+#ifdef _OPENMP
+#include <omp.h>
+#endif /* _OPENMP */
+
+#if defined(PYREX_WITHOUT_ASSERTIONS) && !defined(CYTHON_WITHOUT_ASSERTIONS)
+#define CYTHON_WITHOUT_ASSERTIONS
+#endif
+
+typedef struct {PyObject **p; const char *s; const Py_ssize_t n; const char* encoding;
+                const char is_unicode; const char is_str; const char intern; } __Pyx_StringTabEntry;
+
+#define __PYX_DEFAULT_STRING_ENCODING_IS_ASCII 0
+#define __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT 0
+#define __PYX_DEFAULT_STRING_ENCODING ""
+#define __Pyx_PyObject_FromString __Pyx_PyBytes_FromString
+#define __Pyx_PyObject_FromStringAndSize __Pyx_PyBytes_FromStringAndSize
+#define __Pyx_uchar_cast(c) ((unsigned char)c)
+#define __Pyx_long_cast(x) ((long)x)
+#define __Pyx_fits_Py_ssize_t(v, type, is_signed)  (\
+    (sizeof(type) < sizeof(Py_ssize_t))  ||\
+    (sizeof(type) > sizeof(Py_ssize_t) &&\
+          likely(v < (type)PY_SSIZE_T_MAX ||\
+                 v == (type)PY_SSIZE_T_MAX)  &&\
+          (!is_signed || likely(v > (type)PY_SSIZE_T_MIN ||\
+                                v == (type)PY_SSIZE_T_MIN)))  ||\
+    (sizeof(type) == sizeof(Py_ssize_t) &&\
+          (is_signed || likely(v < (type)PY_SSIZE_T_MAX ||\
+                               v == (type)PY_SSIZE_T_MAX)))  )
+static CYTHON_INLINE int __Pyx_is_valid_index(Py_ssize_t i, Py_ssize_t limit) {
+    return (size_t) i < (size_t) limit;
+}
+#if defined (__cplusplus) && __cplusplus >= 201103L
+    #include <cstdlib>
+    #define __Pyx_sst_abs(value) std::abs(value)
+#elif SIZEOF_INT >= SIZEOF_SIZE_T
+    #define __Pyx_sst_abs(value) abs(value)
+#elif SIZEOF_LONG >= SIZEOF_SIZE_T
+    #define __Pyx_sst_abs(value) labs(value)
+#elif defined (_MSC_VER)
+    #define __Pyx_sst_abs(value) ((Py_ssize_t)_abs64(value))
+#elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+    #define __Pyx_sst_abs(value) llabs(value)
+#elif defined (__GNUC__)
+    #define __Pyx_sst_abs(value) __builtin_llabs(value)
+#else
+    #define __Pyx_sst_abs(value) ((value<0) ? -value : value)
+#endif
+static CYTHON_INLINE const char* __Pyx_PyObject_AsString(PyObject*);
+static CYTHON_INLINE const char* __Pyx_PyObject_AsStringAndSize(PyObject*, Py_ssize_t* length);
+#define __Pyx_PyByteArray_FromString(s) PyByteArray_FromStringAndSize((const char*)s, strlen((const char*)s))
+#define __Pyx_PyByteArray_FromStringAndSize(s, l) PyByteArray_FromStringAndSize((const char*)s, l)
+#define __Pyx_PyBytes_FromString        PyBytes_FromString
+#define __Pyx_PyBytes_FromStringAndSize PyBytes_FromStringAndSize
+static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char*);
+#if PY_MAJOR_VERSION < 3
+    #define __Pyx_PyStr_FromString        __Pyx_PyBytes_FromString
+    #define __Pyx_PyStr_FromStringAndSize __Pyx_PyBytes_FromStringAndSize
+#else
+    #define __Pyx_PyStr_FromString        __Pyx_PyUnicode_FromString
+    #define __Pyx_PyStr_FromStringAndSize __Pyx_PyUnicode_FromStringAndSize
+#endif
+#define __Pyx_PyBytes_AsWritableString(s)     ((char*) PyBytes_AS_STRING(s))
+#define __Pyx_PyBytes_AsWritableSString(s)    ((signed char*) PyBytes_AS_STRING(s))
+#define __Pyx_PyBytes_AsWritableUString(s)    ((unsigned char*) PyBytes_AS_STRING(s))
+#define __Pyx_PyBytes_AsString(s)     ((const char*) PyBytes_AS_STRING(s))
+#define __Pyx_PyBytes_AsSString(s)    ((const signed char*) PyBytes_AS_STRING(s))
+#define __Pyx_PyBytes_AsUString(s)    ((const unsigned char*) PyBytes_AS_STRING(s))
+#define __Pyx_PyObject_AsWritableString(s)    ((char*) __Pyx_PyObject_AsString(s))
+#define __Pyx_PyObject_AsWritableSString(s)    ((signed char*) __Pyx_PyObject_AsString(s))
+#define __Pyx_PyObject_AsWritableUString(s)    ((unsigned char*) __Pyx_PyObject_AsString(s))
+#define __Pyx_PyObject_AsSString(s)    ((const signed char*) __Pyx_PyObject_AsString(s))
+#define __Pyx_PyObject_AsUString(s)    ((const unsigned char*) __Pyx_PyObject_AsString(s))
+#define __Pyx_PyObject_FromCString(s)  __Pyx_PyObject_FromString((const char*)s)
+#define __Pyx_PyBytes_FromCString(s)   __Pyx_PyBytes_FromString((const char*)s)
+#define __Pyx_PyByteArray_FromCString(s)   __Pyx_PyByteArray_FromString((const char*)s)
+#define __Pyx_PyStr_FromCString(s)     __Pyx_PyStr_FromString((const char*)s)
+#define __Pyx_PyUnicode_FromCString(s) __Pyx_PyUnicode_FromString((const char*)s)
+static CYTHON_INLINE size_t __Pyx_Py_UNICODE_strlen(const Py_UNICODE *u) {
+    const Py_UNICODE *u_end = u;
+    while (*u_end++) ;
+    return (size_t)(u_end - u - 1);
+}
+#define __Pyx_PyUnicode_FromUnicode(u)       PyUnicode_FromUnicode(u, __Pyx_Py_UNICODE_strlen(u))
+#define __Pyx_PyUnicode_FromUnicodeAndLength PyUnicode_FromUnicode
+#define __Pyx_PyUnicode_AsUnicode            PyUnicode_AsUnicode
+#define __Pyx_NewRef(obj) (Py_INCREF(obj), obj)
+#define __Pyx_Owned_Py_None(b) __Pyx_NewRef(Py_None)
+static CYTHON_INLINE PyObject * __Pyx_PyBool_FromLong(long b);
+static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject*);
+static CYTHON_INLINE int __Pyx_PyObject_IsTrueAndDecref(PyObject*);
+static CYTHON_INLINE PyObject* __Pyx_PyNumber_IntOrLong(PyObject* x);
+#define __Pyx_PySequence_Tuple(obj)\
+    (likely(PyTuple_CheckExact(obj)) ? __Pyx_NewRef(obj) : PySequence_Tuple(obj))
+static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject*);
+static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t);
+#if CYTHON_ASSUME_SAFE_MACROS
+#define __pyx_PyFloat_AsDouble(x) (PyFloat_CheckExact(x) ? PyFloat_AS_DOUBLE(x) : PyFloat_AsDouble(x))
+#else
+#define __pyx_PyFloat_AsDouble(x) PyFloat_AsDouble(x)
+#endif
+#define __pyx_PyFloat_AsFloat(x) ((float) __pyx_PyFloat_AsDouble(x))
+#if PY_MAJOR_VERSION >= 3
+#define __Pyx_PyNumber_Int(x) (PyLong_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Long(x))
+#else
+#define __Pyx_PyNumber_Int(x) (PyInt_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Int(x))
+#endif
+#define __Pyx_PyNumber_Float(x) (PyFloat_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Float(x))
+#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII
+static int __Pyx_sys_getdefaultencoding_not_ascii;
+static int __Pyx_init_sys_getdefaultencoding_params(void) {
+    PyObject* sys;
+    PyObject* default_encoding = NULL;
+    PyObject* ascii_chars_u = NULL;
+    PyObject* ascii_chars_b = NULL;
+    const char* default_encoding_c;
+    sys = PyImport_ImportModule("sys");
+    if (!sys) goto bad;
+    default_encoding = PyObject_CallMethod(sys, (char*) "getdefaultencoding", NULL);
+    Py_DECREF(sys);
+    if (!default_encoding) goto bad;
+    default_encoding_c = PyBytes_AsString(default_encoding);
+    if (!default_encoding_c) goto bad;
+    if (strcmp(default_encoding_c, "ascii") == 0) {
+        __Pyx_sys_getdefaultencoding_not_ascii = 0;
+    } else {
+        char ascii_chars[128];
+        int c;
+        for (c = 0; c < 128; c++) {
+            ascii_chars[c] = c;
+        }
+        __Pyx_sys_getdefaultencoding_not_ascii = 1;
+        ascii_chars_u = PyUnicode_DecodeASCII(ascii_chars, 128, NULL);
+        if (!ascii_chars_u) goto bad;
+        ascii_chars_b = PyUnicode_AsEncodedString(ascii_chars_u, default_encoding_c, NULL);
+        if (!ascii_chars_b || !PyBytes_Check(ascii_chars_b) || memcmp(ascii_chars, PyBytes_AS_STRING(ascii_chars_b), 128) != 0) {
+            PyErr_Format(
+                PyExc_ValueError,
+                "This module compiled with c_string_encoding=ascii, but default encoding '%.200s' is not a superset of ascii.",
+                default_encoding_c);
+            goto bad;
+        }
+        Py_DECREF(ascii_chars_u);
+        Py_DECREF(ascii_chars_b);
+    }
+    Py_DECREF(default_encoding);
+    return 0;
+bad:
+    Py_XDECREF(default_encoding);
+    Py_XDECREF(ascii_chars_u);
+    Py_XDECREF(ascii_chars_b);
+    return -1;
+}
+#endif
+#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT && PY_MAJOR_VERSION >= 3
+#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_DecodeUTF8(c_str, size, NULL)
+#else
+#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_Decode(c_str, size, __PYX_DEFAULT_STRING_ENCODING, NULL)
+#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT
+static char* __PYX_DEFAULT_STRING_ENCODING;
+static int __Pyx_init_sys_getdefaultencoding_params(void) {
+    PyObject* sys;
+    PyObject* default_encoding = NULL;
+    char* default_encoding_c;
+    sys = PyImport_ImportModule("sys");
+    if (!sys) goto bad;
+    default_encoding = PyObject_CallMethod(sys, (char*) (const char*) "getdefaultencoding", NULL);
+    Py_DECREF(sys);
+    if (!default_encoding) goto bad;
+    default_encoding_c = PyBytes_AsString(default_encoding);
+    if (!default_encoding_c) goto bad;
+    __PYX_DEFAULT_STRING_ENCODING = (char*) malloc(strlen(default_encoding_c) + 1);
+    if (!__PYX_DEFAULT_STRING_ENCODING) goto bad;
+    strcpy(__PYX_DEFAULT_STRING_ENCODING, default_encoding_c);
+    Py_DECREF(default_encoding);
+    return 0;
+bad:
+    Py_XDECREF(default_encoding);
+    return -1;
+}
+#endif
+#endif
+
+
+/* Test for GCC > 2.95 */
+#if defined(__GNUC__)     && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))
+  #define likely(x)   __builtin_expect(!!(x), 1)
+  #define unlikely(x) __builtin_expect(!!(x), 0)
+#else /* !__GNUC__ or GCC < 2.95 */
+  #define likely(x)   (x)
+  #define unlikely(x) (x)
+#endif /* __GNUC__ */
+static CYTHON_INLINE void __Pyx_pretend_to_initialize(void* ptr) { (void)ptr; }
+
+static PyObject *__pyx_m = NULL;
+static PyObject *__pyx_d;
+static PyObject *__pyx_b;
+static PyObject *__pyx_cython_runtime = NULL;
+static PyObject *__pyx_empty_tuple;
+static PyObject *__pyx_empty_bytes;
+static PyObject *__pyx_empty_unicode;
+static int __pyx_lineno;
+static int __pyx_clineno = 0;
+static const char * __pyx_cfilenm= __FILE__;
+static const char *__pyx_filename;
+
+
+static const char *__pyx_f[] = {
+  "pystencils/boundaries/createindexlistcython.pyx",
+  "stringsource",
+};
+/* BufferFormatStructs.proto */
+#define IS_UNSIGNED(type) (((type) -1) > 0)
+struct __Pyx_StructField_;
+#define __PYX_BUF_FLAGS_PACKED_STRUCT (1 << 0)
+typedef struct {
+  const char* name;
+  struct __Pyx_StructField_* fields;
+  size_t size;
+  size_t arraysize[8];
+  int ndim;
+  char typegroup;
+  char is_unsigned;
+  int flags;
+} __Pyx_TypeInfo;
+typedef struct __Pyx_StructField_ {
+  __Pyx_TypeInfo* type;
+  const char* name;
+  size_t offset;
+} __Pyx_StructField;
+typedef struct {
+  __Pyx_StructField* field;
+  size_t parent_offset;
+} __Pyx_BufFmt_StackElem;
+typedef struct {
+  __Pyx_StructField root;
+  __Pyx_BufFmt_StackElem* head;
+  size_t fmt_offset;
+  size_t new_count, enc_count;
+  size_t struct_alignment;
+  int is_complex;
+  char enc_type;
+  char new_packmode;
+  char enc_packmode;
+  char is_valid_array;
+} __Pyx_BufFmt_Context;
+
+/* ForceInitThreads.proto */
+#ifndef __PYX_FORCE_INIT_THREADS
+  #define __PYX_FORCE_INIT_THREADS 0
+#endif
+
+/* NoFastGil.proto */
+#define __Pyx_PyGILState_Ensure PyGILState_Ensure
+#define __Pyx_PyGILState_Release PyGILState_Release
+#define __Pyx_FastGIL_Remember()
+#define __Pyx_FastGIL_Forget()
+#define __Pyx_FastGilFuncInit()
+
+/* Atomics.proto */
+#include <pythread.h>
+#ifndef CYTHON_ATOMICS
+    #define CYTHON_ATOMICS 1
+#endif
+#define __pyx_atomic_int_type int
+#if CYTHON_ATOMICS && __GNUC__ >= 4 && (__GNUC_MINOR__ > 1 ||\
+                    (__GNUC_MINOR__ == 1 && __GNUC_PATCHLEVEL >= 2)) &&\
+                    !defined(__i386__)
+    #define __pyx_atomic_incr_aligned(value, lock) __sync_fetch_and_add(value, 1)
+    #define __pyx_atomic_decr_aligned(value, lock) __sync_fetch_and_sub(value, 1)
+    #ifdef __PYX_DEBUG_ATOMICS
+        #warning "Using GNU atomics"
+    #endif
+#elif CYTHON_ATOMICS && defined(_MSC_VER) && 0
+    #include <Windows.h>
+    #undef __pyx_atomic_int_type
+    #define __pyx_atomic_int_type LONG
+    #define __pyx_atomic_incr_aligned(value, lock) InterlockedIncrement(value)
+    #define __pyx_atomic_decr_aligned(value, lock) InterlockedDecrement(value)
+    #ifdef __PYX_DEBUG_ATOMICS
+        #pragma message ("Using MSVC atomics")
+    #endif
+#elif CYTHON_ATOMICS && (defined(__ICC) || defined(__INTEL_COMPILER)) && 0
+    #define __pyx_atomic_incr_aligned(value, lock) _InterlockedIncrement(value)
+    #define __pyx_atomic_decr_aligned(value, lock) _InterlockedDecrement(value)
+    #ifdef __PYX_DEBUG_ATOMICS
+        #warning "Using Intel atomics"
+    #endif
+#else
+    #undef CYTHON_ATOMICS
+    #define CYTHON_ATOMICS 0
+    #ifdef __PYX_DEBUG_ATOMICS
+        #warning "Not using atomics"
+    #endif
+#endif
+typedef volatile __pyx_atomic_int_type __pyx_atomic_int;
+#if CYTHON_ATOMICS
+    #define __pyx_add_acquisition_count(memview)\
+             __pyx_atomic_incr_aligned(__pyx_get_slice_count_pointer(memview), memview->lock)
+    #define __pyx_sub_acquisition_count(memview)\
+            __pyx_atomic_decr_aligned(__pyx_get_slice_count_pointer(memview), memview->lock)
+#else
+    #define __pyx_add_acquisition_count(memview)\
+            __pyx_add_acquisition_count_locked(__pyx_get_slice_count_pointer(memview), memview->lock)
+    #define __pyx_sub_acquisition_count(memview)\
+            __pyx_sub_acquisition_count_locked(__pyx_get_slice_count_pointer(memview), memview->lock)
+#endif
+
+/* MemviewSliceStruct.proto */
+struct __pyx_memoryview_obj;
+typedef struct {
+  struct __pyx_memoryview_obj *memview;
+  char *data;
+  Py_ssize_t shape[8];
+  Py_ssize_t strides[8];
+  Py_ssize_t suboffsets[8];
+} __Pyx_memviewslice;
+#define __Pyx_MemoryView_Len(m)  (m.shape[0])
+
+
+/*--- Type declarations ---*/
+struct __pyx_array_obj;
+struct __pyx_MemviewEnum_obj;
+struct __pyx_memoryview_obj;
+struct __pyx_memoryviewslice_obj;
+
+/* "View.MemoryView":105
+ * 
+ * @cname("__pyx_array")
+ * cdef class array:             # <<<<<<<<<<<<<<
+ * 
+ *     cdef:
+ */
+struct __pyx_array_obj {
+  PyObject_HEAD
+  struct __pyx_vtabstruct_array *__pyx_vtab;
+  char *data;
+  Py_ssize_t len;
+  char *format;
+  int ndim;
+  Py_ssize_t *_shape;
+  Py_ssize_t *_strides;
+  Py_ssize_t itemsize;
+  PyObject *mode;
+  PyObject *_format;
+  void (*callback_free_data)(void *);
+  int free_data;
+  int dtype_is_object;
+};
+
+
+/* "View.MemoryView":279
+ * 
+ * @cname('__pyx_MemviewEnum')
+ * cdef class Enum(object):             # <<<<<<<<<<<<<<
+ *     cdef object name
+ *     def __init__(self, name):
+ */
+struct __pyx_MemviewEnum_obj {
+  PyObject_HEAD
+  PyObject *name;
+};
+
+
+/* "View.MemoryView":330
+ * 
+ * @cname('__pyx_memoryview')
+ * cdef class memoryview(object):             # <<<<<<<<<<<<<<
+ * 
+ *     cdef object obj
+ */
+struct __pyx_memoryview_obj {
+  PyObject_HEAD
+  struct __pyx_vtabstruct_memoryview *__pyx_vtab;
+  PyObject *obj;
+  PyObject *_size;
+  PyObject *_array_interface;
+  PyThread_type_lock lock;
+  __pyx_atomic_int acquisition_count[2];
+  __pyx_atomic_int *acquisition_count_aligned_p;
+  Py_buffer view;
+  int flags;
+  int dtype_is_object;
+  __Pyx_TypeInfo *typeinfo;
+};
+
+
+/* "View.MemoryView":961
+ * 
+ * @cname('__pyx_memoryviewslice')
+ * cdef class _memoryviewslice(memoryview):             # <<<<<<<<<<<<<<
+ *     "Internal class for passing memoryview slices to Python"
+ * 
+ */
+struct __pyx_memoryviewslice_obj {
+  struct __pyx_memoryview_obj __pyx_base;
+  __Pyx_memviewslice from_slice;
+  PyObject *from_object;
+  PyObject *(*to_object_func)(char *);
+  int (*to_dtype_func)(char *, PyObject *);
+};
+
+
+
+/* "View.MemoryView":105
+ * 
+ * @cname("__pyx_array")
+ * cdef class array:             # <<<<<<<<<<<<<<
+ * 
+ *     cdef:
+ */
+
+struct __pyx_vtabstruct_array {
+  PyObject *(*get_memview)(struct __pyx_array_obj *);
+};
+static struct __pyx_vtabstruct_array *__pyx_vtabptr_array;
+
+
+/* "View.MemoryView":330
+ * 
+ * @cname('__pyx_memoryview')
+ * cdef class memoryview(object):             # <<<<<<<<<<<<<<
+ * 
+ *     cdef object obj
+ */
+
+struct __pyx_vtabstruct_memoryview {
+  char *(*get_item_pointer)(struct __pyx_memoryview_obj *, PyObject *);
+  PyObject *(*is_slice)(struct __pyx_memoryview_obj *, PyObject *);
+  PyObject *(*setitem_slice_assignment)(struct __pyx_memoryview_obj *, PyObject *, PyObject *);
+  PyObject *(*setitem_slice_assign_scalar)(struct __pyx_memoryview_obj *, struct __pyx_memoryview_obj *, PyObject *);
+  PyObject *(*setitem_indexed)(struct __pyx_memoryview_obj *, PyObject *, PyObject *);
+  PyObject *(*convert_item_to_object)(struct __pyx_memoryview_obj *, char *);
+  PyObject *(*assign_item_from_object)(struct __pyx_memoryview_obj *, char *, PyObject *);
+};
+static struct __pyx_vtabstruct_memoryview *__pyx_vtabptr_memoryview;
+
+
+/* "View.MemoryView":961
+ * 
+ * @cname('__pyx_memoryviewslice')
+ * cdef class _memoryviewslice(memoryview):             # <<<<<<<<<<<<<<
+ *     "Internal class for passing memoryview slices to Python"
+ * 
+ */
+
+struct __pyx_vtabstruct__memoryviewslice {
+  struct __pyx_vtabstruct_memoryview __pyx_base;
+};
+static struct __pyx_vtabstruct__memoryviewslice *__pyx_vtabptr__memoryviewslice;
+
+/* --- Runtime support code (head) --- */
+/* Refnanny.proto */
+#ifndef CYTHON_REFNANNY
+  #define CYTHON_REFNANNY 0
+#endif
+#if CYTHON_REFNANNY
+  typedef struct {
+    void (*INCREF)(void*, PyObject*, int);
+    void (*DECREF)(void*, PyObject*, int);
+    void (*GOTREF)(void*, PyObject*, int);
+    void (*GIVEREF)(void*, PyObject*, int);
+    void* (*SetupContext)(const char*, int, const char*);
+    void (*FinishContext)(void**);
+  } __Pyx_RefNannyAPIStruct;
+  static __Pyx_RefNannyAPIStruct *__Pyx_RefNanny = NULL;
+  static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname);
+  #define __Pyx_RefNannyDeclarations void *__pyx_refnanny = NULL;
+#ifdef WITH_THREAD
+  #define __Pyx_RefNannySetupContext(name, acquire_gil)\
+          if (acquire_gil) {\
+              PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();\
+              __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__);\
+              PyGILState_Release(__pyx_gilstate_save);\
+          } else {\
+              __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__);\
+          }
+#else
+  #define __Pyx_RefNannySetupContext(name, acquire_gil)\
+          __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__)
+#endif
+  #define __Pyx_RefNannyFinishContext()\
+          __Pyx_RefNanny->FinishContext(&__pyx_refnanny)
+  #define __Pyx_INCREF(r)  __Pyx_RefNanny->INCREF(__pyx_refnanny, (PyObject *)(r), __LINE__)
+  #define __Pyx_DECREF(r)  __Pyx_RefNanny->DECREF(__pyx_refnanny, (PyObject *)(r), __LINE__)
+  #define __Pyx_GOTREF(r)  __Pyx_RefNanny->GOTREF(__pyx_refnanny, (PyObject *)(r), __LINE__)
+  #define __Pyx_GIVEREF(r) __Pyx_RefNanny->GIVEREF(__pyx_refnanny, (PyObject *)(r), __LINE__)
+  #define __Pyx_XINCREF(r)  do { if((r) != NULL) {__Pyx_INCREF(r); }} while(0)
+  #define __Pyx_XDECREF(r)  do { if((r) != NULL) {__Pyx_DECREF(r); }} while(0)
+  #define __Pyx_XGOTREF(r)  do { if((r) != NULL) {__Pyx_GOTREF(r); }} while(0)
+  #define __Pyx_XGIVEREF(r) do { if((r) != NULL) {__Pyx_GIVEREF(r);}} while(0)
+#else
+  #define __Pyx_RefNannyDeclarations
+  #define __Pyx_RefNannySetupContext(name, acquire_gil)
+  #define __Pyx_RefNannyFinishContext()
+  #define __Pyx_INCREF(r) Py_INCREF(r)
+  #define __Pyx_DECREF(r) Py_DECREF(r)
+  #define __Pyx_GOTREF(r)
+  #define __Pyx_GIVEREF(r)
+  #define __Pyx_XINCREF(r) Py_XINCREF(r)
+  #define __Pyx_XDECREF(r) Py_XDECREF(r)
+  #define __Pyx_XGOTREF(r)
+  #define __Pyx_XGIVEREF(r)
+#endif
+#define __Pyx_XDECREF_SET(r, v) do {\
+        PyObject *tmp = (PyObject *) r;\
+        r = v; __Pyx_XDECREF(tmp);\
+    } while (0)
+#define __Pyx_DECREF_SET(r, v) do {\
+        PyObject *tmp = (PyObject *) r;\
+        r = v; __Pyx_DECREF(tmp);\
+    } while (0)
+#define __Pyx_CLEAR(r)    do { PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);} while(0)
+#define __Pyx_XCLEAR(r)   do { if((r) != NULL) {PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);}} while(0)
+
+/* PyObjectGetAttrStr.proto */
+#if CYTHON_USE_TYPE_SLOTS
+static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name);
+#else
+#define __Pyx_PyObject_GetAttrStr(o,n) PyObject_GetAttr(o,n)
+#endif
+
+/* GetBuiltinName.proto */
+static PyObject *__Pyx_GetBuiltinName(PyObject *name);
+
+/* RaiseArgTupleInvalid.proto */
+static void __Pyx_RaiseArgtupleInvalid(const char* func_name, int exact,
+    Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found);
+
+/* RaiseDoubleKeywords.proto */
+static void __Pyx_RaiseDoubleKeywordsError(const char* func_name, PyObject* kw_name);
+
+/* ParseKeywords.proto */
+static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject **argnames[],\
+    PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args,\
+    const char* function_name);
+
+/* PyDictContains.proto */
+static CYTHON_INLINE int __Pyx_PyDict_ContainsTF(PyObject* item, PyObject* dict, int eq) {
+    int result = PyDict_Contains(dict, item);
+    return unlikely(result < 0) ? result : (result == (eq == Py_EQ));
+}
+
+/* DictGetItem.proto */
+#if PY_MAJOR_VERSION >= 3 && !CYTHON_COMPILING_IN_PYPY
+static PyObject *__Pyx_PyDict_GetItem(PyObject *d, PyObject* key);
+#define __Pyx_PyObject_Dict_GetItem(obj, name)\
+    (likely(PyDict_CheckExact(obj)) ?\
+     __Pyx_PyDict_GetItem(obj, name) : PyObject_GetItem(obj, name))
+#else
+#define __Pyx_PyDict_GetItem(d, key) PyObject_GetItem(d, key)
+#define __Pyx_PyObject_Dict_GetItem(obj, name)  PyObject_GetItem(obj, name)
+#endif
+
+/* PyCFunctionFastCall.proto */
+#if CYTHON_FAST_PYCCALL
+static CYTHON_INLINE PyObject *__Pyx_PyCFunction_FastCall(PyObject *func, PyObject **args, Py_ssize_t nargs);
+#else
+#define __Pyx_PyCFunction_FastCall(func, args, nargs)  (assert(0), NULL)
+#endif
+
+/* PyFunctionFastCall.proto */
+#if CYTHON_FAST_PYCALL
+#define __Pyx_PyFunction_FastCall(func, args, nargs)\
+    __Pyx_PyFunction_FastCallDict((func), (args), (nargs), NULL)
+#if 1 || PY_VERSION_HEX < 0x030600B1
+static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args, int nargs, PyObject *kwargs);
+#else
+#define __Pyx_PyFunction_FastCallDict(func, args, nargs, kwargs) _PyFunction_FastCallDict(func, args, nargs, kwargs)
+#endif
+#define __Pyx_BUILD_ASSERT_EXPR(cond)\
+    (sizeof(char [1 - 2*!(cond)]) - 1)
+#ifndef Py_MEMBER_SIZE
+#define Py_MEMBER_SIZE(type, member) sizeof(((type *)0)->member)
+#endif
+  static size_t __pyx_pyframe_localsplus_offset = 0;
+  #include "frameobject.h"
+  #define __Pxy_PyFrame_Initialize_Offsets()\
+    ((void)__Pyx_BUILD_ASSERT_EXPR(sizeof(PyFrameObject) == offsetof(PyFrameObject, f_localsplus) + Py_MEMBER_SIZE(PyFrameObject, f_localsplus)),\
+     (void)(__pyx_pyframe_localsplus_offset = ((size_t)PyFrame_Type.tp_basicsize) - Py_MEMBER_SIZE(PyFrameObject, f_localsplus)))
+  #define __Pyx_PyFrame_GetLocalsplus(frame)\
+    (assert(__pyx_pyframe_localsplus_offset), (PyObject **)(((char *)(frame)) + __pyx_pyframe_localsplus_offset))
+#endif
+
+/* PyObjectCall.proto */
+#if CYTHON_COMPILING_IN_CPYTHON
+static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw);
+#else
+#define __Pyx_PyObject_Call(func, arg, kw) PyObject_Call(func, arg, kw)
+#endif
+
+/* PyObjectCallMethO.proto */
+#if CYTHON_COMPILING_IN_CPYTHON
+static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg);
+#endif
+
+/* PyObjectCallOneArg.proto */
+static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg);
+
+/* PyThreadStateGet.proto */
+#if CYTHON_FAST_THREAD_STATE
+#define __Pyx_PyThreadState_declare  PyThreadState *__pyx_tstate;
+#define __Pyx_PyThreadState_assign  __pyx_tstate = __Pyx_PyThreadState_Current;
+#define __Pyx_PyErr_Occurred()  __pyx_tstate->curexc_type
+#else
+#define __Pyx_PyThreadState_declare
+#define __Pyx_PyThreadState_assign
+#define __Pyx_PyErr_Occurred()  PyErr_Occurred()
+#endif
+
+/* PyErrFetchRestore.proto */
+#if CYTHON_FAST_THREAD_STATE
+#define __Pyx_PyErr_Clear() __Pyx_ErrRestore(NULL, NULL, NULL)
+#define __Pyx_ErrRestoreWithState(type, value, tb)  __Pyx_ErrRestoreInState(PyThreadState_GET(), type, value, tb)
+#define __Pyx_ErrFetchWithState(type, value, tb)    __Pyx_ErrFetchInState(PyThreadState_GET(), type, value, tb)
+#define __Pyx_ErrRestore(type, value, tb)  __Pyx_ErrRestoreInState(__pyx_tstate, type, value, tb)
+#define __Pyx_ErrFetch(type, value, tb)    __Pyx_ErrFetchInState(__pyx_tstate, type, value, tb)
+static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb);
+static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb);
+#if CYTHON_COMPILING_IN_CPYTHON
+#define __Pyx_PyErr_SetNone(exc) (Py_INCREF(exc), __Pyx_ErrRestore((exc), NULL, NULL))
+#else
+#define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc)
+#endif
+#else
+#define __Pyx_PyErr_Clear() PyErr_Clear()
+#define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc)
+#define __Pyx_ErrRestoreWithState(type, value, tb)  PyErr_Restore(type, value, tb)
+#define __Pyx_ErrFetchWithState(type, value, tb)  PyErr_Fetch(type, value, tb)
+#define __Pyx_ErrRestoreInState(tstate, type, value, tb)  PyErr_Restore(type, value, tb)
+#define __Pyx_ErrFetchInState(tstate, type, value, tb)  PyErr_Fetch(type, value, tb)
+#define __Pyx_ErrRestore(type, value, tb)  PyErr_Restore(type, value, tb)
+#define __Pyx_ErrFetch(type, value, tb)  PyErr_Fetch(type, value, tb)
+#endif
+
+/* RaiseException.proto */
+static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause);
+
+/* UnicodeAsUCS4.proto */
+static CYTHON_INLINE Py_UCS4 __Pyx_PyUnicode_AsPy_UCS4(PyObject*);
+
+/* object_ord.proto */
+#if PY_MAJOR_VERSION >= 3
+#define __Pyx_PyObject_Ord(c)\
+    (likely(PyUnicode_Check(c)) ? (long)__Pyx_PyUnicode_AsPy_UCS4(c) : __Pyx__PyObject_Ord(c))
+#else
+#define __Pyx_PyObject_Ord(c) __Pyx__PyObject_Ord(c)
+#endif
+static long __Pyx__PyObject_Ord(PyObject* c);
+
+/* SetItemInt.proto */
+#define __Pyx_SetItemInt(o, i, v, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\
+    (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\
+    __Pyx_SetItemInt_Fast(o, (Py_ssize_t)i, v, is_list, wraparound, boundscheck) :\
+    (is_list ? (PyErr_SetString(PyExc_IndexError, "list assignment index out of range"), -1) :\
+               __Pyx_SetItemInt_Generic(o, to_py_func(i), v)))
+static int __Pyx_SetItemInt_Generic(PyObject *o, PyObject *j, PyObject *v);
+static CYTHON_INLINE int __Pyx_SetItemInt_Fast(PyObject *o, Py_ssize_t i, PyObject *v,
+                                               int is_list, int wraparound, int boundscheck);
+
+/* IterFinish.proto */
+static CYTHON_INLINE int __Pyx_IterFinish(void);
+
+/* PyObjectCallNoArg.proto */
+#if CYTHON_COMPILING_IN_CPYTHON
+static CYTHON_INLINE PyObject* __Pyx_PyObject_CallNoArg(PyObject *func);
+#else
+#define __Pyx_PyObject_CallNoArg(func) __Pyx_PyObject_Call(func, __pyx_empty_tuple, NULL)
+#endif
+
+/* PyObjectGetMethod.proto */
+static int __Pyx_PyObject_GetMethod(PyObject *obj, PyObject *name, PyObject **method);
+
+/* PyObjectCallMethod0.proto */
+static PyObject* __Pyx_PyObject_CallMethod0(PyObject* obj, PyObject* method_name);
+
+/* RaiseNeedMoreValuesToUnpack.proto */
+static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index);
+
+/* RaiseTooManyValuesToUnpack.proto */
+static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected);
+
+/* UnpackItemEndCheck.proto */
+static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected);
+
+/* RaiseNoneIterError.proto */
+static CYTHON_INLINE void __Pyx_RaiseNoneNotIterableError(void);
+
+/* UnpackTupleError.proto */
+static void __Pyx_UnpackTupleError(PyObject *, Py_ssize_t index);
+
+/* UnpackTuple2.proto */
+#define __Pyx_unpack_tuple2(tuple, value1, value2, is_tuple, has_known_size, decref_tuple)\
+    (likely(is_tuple || PyTuple_Check(tuple)) ?\
+        (likely(has_known_size || PyTuple_GET_SIZE(tuple) == 2) ?\
+            __Pyx_unpack_tuple2_exact(tuple, value1, value2, decref_tuple) :\
+            (__Pyx_UnpackTupleError(tuple, 2), -1)) :\
+        __Pyx_unpack_tuple2_generic(tuple, value1, value2, has_known_size, decref_tuple))
+static CYTHON_INLINE int __Pyx_unpack_tuple2_exact(
+    PyObject* tuple, PyObject** value1, PyObject** value2, int decref_tuple);
+static int __Pyx_unpack_tuple2_generic(
+    PyObject* tuple, PyObject** value1, PyObject** value2, int has_known_size, int decref_tuple);
+
+/* dict_iter.proto */
+static CYTHON_INLINE PyObject* __Pyx_dict_iterator(PyObject* dict, int is_dict, PyObject* method_name,
+                                                   Py_ssize_t* p_orig_length, int* p_is_dict);
+static CYTHON_INLINE int __Pyx_dict_iter_next(PyObject* dict_or_iter, Py_ssize_t orig_length, Py_ssize_t* ppos,
+                                              PyObject** pkey, PyObject** pvalue, PyObject** pitem, int is_dict);
+
+/* PyObjectCall2Args.proto */
+static CYTHON_UNUSED PyObject* __Pyx_PyObject_Call2Args(PyObject* function, PyObject* arg1, PyObject* arg2);
+
+/* GetItemInt.proto */
+#define __Pyx_GetItemInt(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\
+    (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\
+    __Pyx_GetItemInt_Fast(o, (Py_ssize_t)i, is_list, wraparound, boundscheck) :\
+    (is_list ? (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL) :\
+               __Pyx_GetItemInt_Generic(o, to_py_func(i))))
+#define __Pyx_GetItemInt_List(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\
+    (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\
+    __Pyx_GetItemInt_List_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) :\
+    (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL))
+static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i,
+                                                              int wraparound, int boundscheck);
+#define __Pyx_GetItemInt_Tuple(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\
+    (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\
+    __Pyx_GetItemInt_Tuple_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) :\
+    (PyErr_SetString(PyExc_IndexError, "tuple index out of range"), (PyObject*)NULL))
+static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i,
+                                                              int wraparound, int boundscheck);
+static PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j);
+static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i,
+                                                     int is_list, int wraparound, int boundscheck);
+
+/* ListAppend.proto */
+#if CYTHON_USE_PYLIST_INTERNALS && CYTHON_ASSUME_SAFE_MACROS
+static CYTHON_INLINE int __Pyx_PyList_Append(PyObject* list, PyObject* x) {
+    PyListObject* L = (PyListObject*) list;
+    Py_ssize_t len = Py_SIZE(list);
+    if (likely(L->allocated > len) & likely(len > (L->allocated >> 1))) {
+        Py_INCREF(x);
+        PyList_SET_ITEM(list, len, x);
+        Py_SIZE(list) = len+1;
+        return 0;
+    }
+    return PyList_Append(list, x);
+}
+#else
+#define __Pyx_PyList_Append(L,x) PyList_Append(L,x)
+#endif
+
+/* IsLittleEndian.proto */
+static CYTHON_INLINE int __Pyx_Is_Little_Endian(void);
+
+/* BufferFormatCheck.proto */
+static const char* __Pyx_BufFmt_CheckString(__Pyx_BufFmt_Context* ctx, const char* ts);
+static void __Pyx_BufFmt_Init(__Pyx_BufFmt_Context* ctx,
+                              __Pyx_BufFmt_StackElem* stack,
+                              __Pyx_TypeInfo* type);
+
+/* BufferGetAndValidate.proto */
+#define __Pyx_GetBufferAndValidate(buf, obj, dtype, flags, nd, cast, stack)\
+    ((obj == Py_None || obj == NULL) ?\
+    (__Pyx_ZeroBuffer(buf), 0) :\
+    __Pyx__GetBufferAndValidate(buf, obj, dtype, flags, nd, cast, stack))
+static int  __Pyx__GetBufferAndValidate(Py_buffer* buf, PyObject* obj,
+    __Pyx_TypeInfo* dtype, int flags, int nd, int cast, __Pyx_BufFmt_StackElem* stack);
+static void __Pyx_ZeroBuffer(Py_buffer* buf);
+static CYTHON_INLINE void __Pyx_SafeReleaseBuffer(Py_buffer* info);
+static Py_ssize_t __Pyx_minusones[] = { -1, -1, -1, -1, -1, -1, -1, -1 };
+static Py_ssize_t __Pyx_zeros[] = { 0, 0, 0, 0, 0, 0, 0, 0 };
+
+#define __Pyx_BufPtrFull2d(type, buf, i0, s0, o0, i1, s1, o1) (type)(__Pyx_BufPtrFull2d_imp(buf, i0, s0, o0, i1, s1, o1))
+static CYTHON_INLINE void* __Pyx_BufPtrFull2d_imp(void* buf, Py_ssize_t i0, Py_ssize_t s0, Py_ssize_t o0, Py_ssize_t i1, Py_ssize_t s1, Py_ssize_t o1);
+#define __Pyx_BufPtrFull3d(type, buf, i0, s0, o0, i1, s1, o1, i2, s2, o2) (type)(__Pyx_BufPtrFull3d_imp(buf, i0, s0, o0, i1, s1, o1, i2, s2, o2))
+static CYTHON_INLINE void* __Pyx_BufPtrFull3d_imp(void* buf, Py_ssize_t i0, Py_ssize_t s0, Py_ssize_t o0, Py_ssize_t i1, Py_ssize_t s1, Py_ssize_t o1, Py_ssize_t i2, Py_ssize_t s2, Py_ssize_t o2);
+/* ArgTypeTest.proto */
+#define __Pyx_ArgTypeTest(obj, type, none_allowed, name, exact)\
+    ((likely((Py_TYPE(obj) == type) | (none_allowed && (obj == Py_None)))) ? 1 :\
+        __Pyx__ArgTypeTest(obj, type, name, exact))
+static int __Pyx__ArgTypeTest(PyObject *obj, PyTypeObject *type, const char *name, int exact);
+
+/* IncludeStringH.proto */
+#include <string.h>
+
+/* BytesEquals.proto */
+static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals);
+
+/* UnicodeEquals.proto */
+static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals);
+
+/* StrEquals.proto */
+#if PY_MAJOR_VERSION >= 3
+#define __Pyx_PyString_Equals __Pyx_PyUnicode_Equals
+#else
+#define __Pyx_PyString_Equals __Pyx_PyBytes_Equals
+#endif
+
+/* None.proto */
+static CYTHON_INLINE Py_ssize_t __Pyx_div_Py_ssize_t(Py_ssize_t, Py_ssize_t);
+
+/* UnaryNegOverflows.proto */
+#define UNARY_NEG_WOULD_OVERFLOW(x)\
+        (((x) < 0) & ((unsigned long)(x) == 0-(unsigned long)(x)))
+
+static CYTHON_UNUSED int __pyx_array_getbuffer(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /*proto*/
+static PyObject *__pyx_array_get_memview(struct __pyx_array_obj *); /*proto*/
+/* GetAttr.proto */
+static CYTHON_INLINE PyObject *__Pyx_GetAttr(PyObject *, PyObject *);
+
+/* ObjectGetItem.proto */
+#if CYTHON_USE_TYPE_SLOTS
+static CYTHON_INLINE PyObject *__Pyx_PyObject_GetItem(PyObject *obj, PyObject* key);
+#else
+#define __Pyx_PyObject_GetItem(obj, key)  PyObject_GetItem(obj, key)
+#endif
+
+/* decode_c_string_utf16.proto */
+static CYTHON_INLINE PyObject *__Pyx_PyUnicode_DecodeUTF16(const char *s, Py_ssize_t size, const char *errors) {
+    int byteorder = 0;
+    return PyUnicode_DecodeUTF16(s, size, errors, &byteorder);
+}
+static CYTHON_INLINE PyObject *__Pyx_PyUnicode_DecodeUTF16LE(const char *s, Py_ssize_t size, const char *errors) {
+    int byteorder = -1;
+    return PyUnicode_DecodeUTF16(s, size, errors, &byteorder);
+}
+static CYTHON_INLINE PyObject *__Pyx_PyUnicode_DecodeUTF16BE(const char *s, Py_ssize_t size, const char *errors) {
+    int byteorder = 1;
+    return PyUnicode_DecodeUTF16(s, size, errors, &byteorder);
+}
+
+/* decode_c_string.proto */
+static CYTHON_INLINE PyObject* __Pyx_decode_c_string(
+         const char* cstring, Py_ssize_t start, Py_ssize_t stop,
+         const char* encoding, const char* errors,
+         PyObject* (*decode_func)(const char *s, Py_ssize_t size, const char *errors));
+
+/* PyErrExceptionMatches.proto */
+#if CYTHON_FAST_THREAD_STATE
+#define __Pyx_PyErr_ExceptionMatches(err) __Pyx_PyErr_ExceptionMatchesInState(__pyx_tstate, err)
+static CYTHON_INLINE int __Pyx_PyErr_ExceptionMatchesInState(PyThreadState* tstate, PyObject* err);
+#else
+#define __Pyx_PyErr_ExceptionMatches(err)  PyErr_ExceptionMatches(err)
+#endif
+
+/* GetAttr3.proto */
+static CYTHON_INLINE PyObject *__Pyx_GetAttr3(PyObject *, PyObject *, PyObject *);
+
+/* PyDictVersioning.proto */
+#if CYTHON_USE_DICT_VERSIONS
+#define __PYX_DICT_VERSION_INIT  ((PY_UINT64_T) -1)
+#define __PYX_GET_DICT_VERSION(dict)  (((PyDictObject*)(dict))->ma_version_tag)
+#define __PYX_UPDATE_DICT_CACHE(dict, value, cache_var, version_var)\
+    (version_var) = __PYX_GET_DICT_VERSION(dict);\
+    (cache_var) = (value);
+#define __PYX_PY_DICT_LOOKUP_IF_MODIFIED(VAR, DICT, LOOKUP) {\
+    static PY_UINT64_T __pyx_dict_version = 0;\
+    static PyObject *__pyx_dict_cached_value = NULL;\
+    if (likely(__PYX_GET_DICT_VERSION(DICT) == __pyx_dict_version)) {\
+        (VAR) = __pyx_dict_cached_value;\
+    } else {\
+        (VAR) = __pyx_dict_cached_value = (LOOKUP);\
+        __pyx_dict_version = __PYX_GET_DICT_VERSION(DICT);\
+    }\
+}
+static CYTHON_INLINE PY_UINT64_T __Pyx_get_tp_dict_version(PyObject *obj);
+static CYTHON_INLINE PY_UINT64_T __Pyx_get_object_dict_version(PyObject *obj);
+static CYTHON_INLINE int __Pyx_object_dict_version_matches(PyObject* obj, PY_UINT64_T tp_dict_version, PY_UINT64_T obj_dict_version);
+#else
+#define __PYX_GET_DICT_VERSION(dict)  (0)
+#define __PYX_UPDATE_DICT_CACHE(dict, value, cache_var, version_var)
+#define __PYX_PY_DICT_LOOKUP_IF_MODIFIED(VAR, DICT, LOOKUP)  (VAR) = (LOOKUP);
+#endif
+
+/* GetModuleGlobalName.proto */
+#if CYTHON_USE_DICT_VERSIONS
+#define __Pyx_GetModuleGlobalName(var, name)  {\
+    static PY_UINT64_T __pyx_dict_version = 0;\
+    static PyObject *__pyx_dict_cached_value = NULL;\
+    (var) = (likely(__pyx_dict_version == __PYX_GET_DICT_VERSION(__pyx_d))) ?\
+        (likely(__pyx_dict_cached_value) ? __Pyx_NewRef(__pyx_dict_cached_value) : __Pyx_GetBuiltinName(name)) :\
+        __Pyx__GetModuleGlobalName(name, &__pyx_dict_version, &__pyx_dict_cached_value);\
+}
+#define __Pyx_GetModuleGlobalNameUncached(var, name)  {\
+    PY_UINT64_T __pyx_dict_version;\
+    PyObject *__pyx_dict_cached_value;\
+    (var) = __Pyx__GetModuleGlobalName(name, &__pyx_dict_version, &__pyx_dict_cached_value);\
+}
+static PyObject *__Pyx__GetModuleGlobalName(PyObject *name, PY_UINT64_T *dict_version, PyObject **dict_cached_value);
+#else
+#define __Pyx_GetModuleGlobalName(var, name)  (var) = __Pyx__GetModuleGlobalName(name)
+#define __Pyx_GetModuleGlobalNameUncached(var, name)  (var) = __Pyx__GetModuleGlobalName(name)
+static CYTHON_INLINE PyObject *__Pyx__GetModuleGlobalName(PyObject *name);
+#endif
+
+/* ExtTypeTest.proto */
+static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type);
+
+/* GetTopmostException.proto */
+#if CYTHON_USE_EXC_INFO_STACK
+static _PyErr_StackItem * __Pyx_PyErr_GetTopmostException(PyThreadState *tstate);
+#endif
+
+/* SaveResetException.proto */
+#if CYTHON_FAST_THREAD_STATE
+#define __Pyx_ExceptionSave(type, value, tb)  __Pyx__ExceptionSave(__pyx_tstate, type, value, tb)
+static CYTHON_INLINE void __Pyx__ExceptionSave(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb);
+#define __Pyx_ExceptionReset(type, value, tb)  __Pyx__ExceptionReset(__pyx_tstate, type, value, tb)
+static CYTHON_INLINE void __Pyx__ExceptionReset(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb);
+#else
+#define __Pyx_ExceptionSave(type, value, tb)   PyErr_GetExcInfo(type, value, tb)
+#define __Pyx_ExceptionReset(type, value, tb)  PyErr_SetExcInfo(type, value, tb)
+#endif
+
+/* GetException.proto */
+#if CYTHON_FAST_THREAD_STATE
+#define __Pyx_GetException(type, value, tb)  __Pyx__GetException(__pyx_tstate, type, value, tb)
+static int __Pyx__GetException(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb);
+#else
+static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb);
+#endif
+
+/* SwapException.proto */
+#if CYTHON_FAST_THREAD_STATE
+#define __Pyx_ExceptionSwap(type, value, tb)  __Pyx__ExceptionSwap(__pyx_tstate, type, value, tb)
+static CYTHON_INLINE void __Pyx__ExceptionSwap(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb);
+#else
+static CYTHON_INLINE void __Pyx_ExceptionSwap(PyObject **type, PyObject **value, PyObject **tb);
+#endif
+
+/* Import.proto */
+static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level);
+
+/* FastTypeChecks.proto */
+#if CYTHON_COMPILING_IN_CPYTHON
+#define __Pyx_TypeCheck(obj, type) __Pyx_IsSubtype(Py_TYPE(obj), (PyTypeObject *)type)
+static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b);
+static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches(PyObject *err, PyObject *type);
+static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches2(PyObject *err, PyObject *type1, PyObject *type2);
+#else
+#define __Pyx_TypeCheck(obj, type) PyObject_TypeCheck(obj, (PyTypeObject *)type)
+#define __Pyx_PyErr_GivenExceptionMatches(err, type) PyErr_GivenExceptionMatches(err, type)
+#define __Pyx_PyErr_GivenExceptionMatches2(err, type1, type2) (PyErr_GivenExceptionMatches(err, type1) || PyErr_GivenExceptionMatches(err, type2))
+#endif
+#define __Pyx_PyException_Check(obj) __Pyx_TypeCheck(obj, PyExc_Exception)
+
+static CYTHON_UNUSED int __pyx_memoryview_getbuffer(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /*proto*/
+/* ListCompAppend.proto */
+#if CYTHON_USE_PYLIST_INTERNALS && CYTHON_ASSUME_SAFE_MACROS
+static CYTHON_INLINE int __Pyx_ListComp_Append(PyObject* list, PyObject* x) {
+    PyListObject* L = (PyListObject*) list;
+    Py_ssize_t len = Py_SIZE(list);
+    if (likely(L->allocated > len)) {
+        Py_INCREF(x);
+        PyList_SET_ITEM(list, len, x);
+        Py_SIZE(list) = len+1;
+        return 0;
+    }
+    return PyList_Append(list, x);
+}
+#else
+#define __Pyx_ListComp_Append(L,x) PyList_Append(L,x)
+#endif
+
+/* PyIntBinop.proto */
+#if !CYTHON_COMPILING_IN_PYPY
+static PyObject* __Pyx_PyInt_AddObjC(PyObject *op1, PyObject *op2, long intval, int inplace, int zerodivision_check);
+#else
+#define __Pyx_PyInt_AddObjC(op1, op2, intval, inplace, zerodivision_check)\
+    (inplace ? PyNumber_InPlaceAdd(op1, op2) : PyNumber_Add(op1, op2))
+#endif
+
+/* ListExtend.proto */
+static CYTHON_INLINE int __Pyx_PyList_Extend(PyObject* L, PyObject* v) {
+#if CYTHON_COMPILING_IN_CPYTHON
+    PyObject* none = _PyList_Extend((PyListObject*)L, v);
+    if (unlikely(!none))
+        return -1;
+    Py_DECREF(none);
+    return 0;
+#else
+    return PyList_SetSlice(L, PY_SSIZE_T_MAX, PY_SSIZE_T_MAX, v);
+#endif
+}
+
+/* None.proto */
+static CYTHON_INLINE void __Pyx_RaiseUnboundLocalError(const char *varname);
+
+/* None.proto */
+static CYTHON_INLINE long __Pyx_div_long(long, long);
+
+/* WriteUnraisableException.proto */
+static void __Pyx_WriteUnraisable(const char *name, int clineno,
+                                  int lineno, const char *filename,
+                                  int full_traceback, int nogil);
+
+/* ImportFrom.proto */
+static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name);
+
+/* HasAttr.proto */
+static CYTHON_INLINE int __Pyx_HasAttr(PyObject *, PyObject *);
+
+/* PyObject_GenericGetAttrNoDict.proto */
+#if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000
+static CYTHON_INLINE PyObject* __Pyx_PyObject_GenericGetAttrNoDict(PyObject* obj, PyObject* attr_name);
+#else
+#define __Pyx_PyObject_GenericGetAttrNoDict PyObject_GenericGetAttr
+#endif
+
+/* PyObject_GenericGetAttr.proto */
+#if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000
+static PyObject* __Pyx_PyObject_GenericGetAttr(PyObject* obj, PyObject* attr_name);
+#else
+#define __Pyx_PyObject_GenericGetAttr PyObject_GenericGetAttr
+#endif
+
+/* SetVTable.proto */
+static int __Pyx_SetVtable(PyObject *dict, void *vtable);
+
+/* SetupReduce.proto */
+static int __Pyx_setup_reduce(PyObject* type_obj);
+
+/* FetchCommonType.proto */
+static PyTypeObject* __Pyx_FetchCommonType(PyTypeObject* type);
+
+/* CythonFunction.proto */
+#define __Pyx_CyFunction_USED 1
+#define __Pyx_CYFUNCTION_STATICMETHOD  0x01
+#define __Pyx_CYFUNCTION_CLASSMETHOD   0x02
+#define __Pyx_CYFUNCTION_CCLASS        0x04
+#define __Pyx_CyFunction_GetClosure(f)\
+    (((__pyx_CyFunctionObject *) (f))->func_closure)
+#define __Pyx_CyFunction_GetClassObj(f)\
+    (((__pyx_CyFunctionObject *) (f))->func_classobj)
+#define __Pyx_CyFunction_Defaults(type, f)\
+    ((type *)(((__pyx_CyFunctionObject *) (f))->defaults))
+#define __Pyx_CyFunction_SetDefaultsGetter(f, g)\
+    ((__pyx_CyFunctionObject *) (f))->defaults_getter = (g)
+typedef struct {
+    PyCFunctionObject func;
+#if PY_VERSION_HEX < 0x030500A0
+    PyObject *func_weakreflist;
+#endif
+    PyObject *func_dict;
+    PyObject *func_name;
+    PyObject *func_qualname;
+    PyObject *func_doc;
+    PyObject *func_globals;
+    PyObject *func_code;
+    PyObject *func_closure;
+    PyObject *func_classobj;
+    void *defaults;
+    int defaults_pyobjects;
+    int flags;
+    PyObject *defaults_tuple;
+    PyObject *defaults_kwdict;
+    PyObject *(*defaults_getter)(PyObject *);
+    PyObject *func_annotations;
+} __pyx_CyFunctionObject;
+static PyTypeObject *__pyx_CyFunctionType = 0;
+#define __Pyx_CyFunction_Check(obj)  (__Pyx_TypeCheck(obj, __pyx_CyFunctionType))
+#define __Pyx_CyFunction_NewEx(ml, flags, qualname, self, module, globals, code)\
+    __Pyx_CyFunction_New(__pyx_CyFunctionType, ml, flags, qualname, self, module, globals, code)
+static PyObject *__Pyx_CyFunction_New(PyTypeObject *, PyMethodDef *ml,
+                                      int flags, PyObject* qualname,
+                                      PyObject *self,
+                                      PyObject *module, PyObject *globals,
+                                      PyObject* code);
+static CYTHON_INLINE void *__Pyx_CyFunction_InitDefaults(PyObject *m,
+                                                         size_t size,
+                                                         int pyobjects);
+static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsTuple(PyObject *m,
+                                                            PyObject *tuple);
+static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsKwDict(PyObject *m,
+                                                             PyObject *dict);
+static CYTHON_INLINE void __Pyx_CyFunction_SetAnnotationsDict(PyObject *m,
+                                                              PyObject *dict);
+static int __pyx_CyFunction_init(void);
+
+/* FusedFunction.proto */
+typedef struct {
+    __pyx_CyFunctionObject func;
+    PyObject *__signatures__;
+    PyObject *type;
+    PyObject *self;
+} __pyx_FusedFunctionObject;
+#define __pyx_FusedFunction_NewEx(ml, flags, qualname, self, module, globals, code)\
+        __pyx_FusedFunction_New(__pyx_FusedFunctionType, ml, flags, qualname, self, module, globals, code)
+static PyObject *__pyx_FusedFunction_New(PyTypeObject *type,
+                                         PyMethodDef *ml, int flags,
+                                         PyObject *qualname, PyObject *self,
+                                         PyObject *module, PyObject *globals,
+                                         PyObject *code);
+static int __pyx_FusedFunction_clear(__pyx_FusedFunctionObject *self);
+static PyTypeObject *__pyx_FusedFunctionType = NULL;
+static int __pyx_FusedFunction_init(void);
+#define __Pyx_FusedFunction_USED
+
+/* CLineInTraceback.proto */
+#ifdef CYTHON_CLINE_IN_TRACEBACK
+#define __Pyx_CLineForTraceback(tstate, c_line)  (((CYTHON_CLINE_IN_TRACEBACK)) ? c_line : 0)
+#else
+static int __Pyx_CLineForTraceback(PyThreadState *tstate, int c_line);
+#endif
+
+/* CodeObjectCache.proto */
+typedef struct {
+    PyCodeObject* code_object;
+    int code_line;
+} __Pyx_CodeObjectCacheEntry;
+struct __Pyx_CodeObjectCache {
+    int count;
+    int max_count;
+    __Pyx_CodeObjectCacheEntry* entries;
+};
+static struct __Pyx_CodeObjectCache __pyx_code_cache = {0,0,NULL};
+static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line);
+static PyCodeObject *__pyx_find_code_object(int code_line);
+static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object);
+
+/* AddTraceback.proto */
+static void __Pyx_AddTraceback(const char *funcname, int c_line,
+                               int py_line, const char *filename);
+
+#if PY_MAJOR_VERSION < 3
+    static int __Pyx_GetBuffer(PyObject *obj, Py_buffer *view, int flags);
+    static void __Pyx_ReleaseBuffer(Py_buffer *view);
+#else
+    #define __Pyx_GetBuffer PyObject_GetBuffer
+    #define __Pyx_ReleaseBuffer PyBuffer_Release
+#endif
+
+
+/* BufferStructDeclare.proto */
+typedef struct {
+  Py_ssize_t shape, strides, suboffsets;
+} __Pyx_Buf_DimInfo;
+typedef struct {
+  size_t refcount;
+  Py_buffer pybuffer;
+} __Pyx_Buffer;
+typedef struct {
+  __Pyx_Buffer *rcbuffer;
+  char *data;
+  __Pyx_Buf_DimInfo diminfo[8];
+} __Pyx_LocalBuf_ND;
+
+/* MemviewSliceIsContig.proto */
+static int __pyx_memviewslice_is_contig(const __Pyx_memviewslice mvs, char order, int ndim);
+
+/* OverlappingSlices.proto */
+static int __pyx_slices_overlap(__Pyx_memviewslice *slice1,
+                                __Pyx_memviewslice *slice2,
+                                int ndim, size_t itemsize);
+
+/* Capsule.proto */
+static CYTHON_INLINE PyObject *__pyx_capsule_create(void *p, const char *sig);
+
+/* TypeInfoCompare.proto */
+static int __pyx_typeinfo_cmp(__Pyx_TypeInfo *a, __Pyx_TypeInfo *b);
+
+/* MemviewSliceValidateAndInit.proto */
+static int __Pyx_ValidateAndInit_memviewslice(
+                int *axes_specs,
+                int c_or_f_flag,
+                int buf_flags,
+                int ndim,
+                __Pyx_TypeInfo *dtype,
+                __Pyx_BufFmt_StackElem stack[],
+                __Pyx_memviewslice *memviewslice,
+                PyObject *original_obj);
+
+/* ObjectToMemviewSlice.proto */
+static CYTHON_INLINE __Pyx_memviewslice __Pyx_PyObject_to_MemoryviewSlice_dsds_short(PyObject *, int writable_flag);
+
+/* ObjectToMemviewSlice.proto */
+static CYTHON_INLINE __Pyx_memviewslice __Pyx_PyObject_to_MemoryviewSlice_dsds_int(PyObject *, int writable_flag);
+
+/* ObjectToMemviewSlice.proto */
+static CYTHON_INLINE __Pyx_memviewslice __Pyx_PyObject_to_MemoryviewSlice_dsds_long(PyObject *, int writable_flag);
+
+/* ObjectToMemviewSlice.proto */
+static CYTHON_INLINE __Pyx_memviewslice __Pyx_PyObject_to_MemoryviewSlice_dsds_PY_LONG_LONG(PyObject *, int writable_flag);
+
+/* ObjectToMemviewSlice.proto */
+static CYTHON_INLINE __Pyx_memviewslice __Pyx_PyObject_to_MemoryviewSlice_dsds_unsigned_short(PyObject *, int writable_flag);
+
+/* ObjectToMemviewSlice.proto */
+static CYTHON_INLINE __Pyx_memviewslice __Pyx_PyObject_to_MemoryviewSlice_dsds_unsigned_int(PyObject *, int writable_flag);
+
+/* ObjectToMemviewSlice.proto */
+static CYTHON_INLINE __Pyx_memviewslice __Pyx_PyObject_to_MemoryviewSlice_dsds_unsigned_long(PyObject *, int writable_flag);
+
+/* ObjectToMemviewSlice.proto */
+static CYTHON_INLINE __Pyx_memviewslice __Pyx_PyObject_to_MemoryviewSlice_dsdsds_short(PyObject *, int writable_flag);
+
+/* ObjectToMemviewSlice.proto */
+static CYTHON_INLINE __Pyx_memviewslice __Pyx_PyObject_to_MemoryviewSlice_dsdsds_int(PyObject *, int writable_flag);
+
+/* ObjectToMemviewSlice.proto */
+static CYTHON_INLINE __Pyx_memviewslice __Pyx_PyObject_to_MemoryviewSlice_dsdsds_long(PyObject *, int writable_flag);
+
+/* ObjectToMemviewSlice.proto */
+static CYTHON_INLINE __Pyx_memviewslice __Pyx_PyObject_to_MemoryviewSlice_dsdsds_PY_LONG_LONG(PyObject *, int writable_flag);
+
+/* ObjectToMemviewSlice.proto */
+static CYTHON_INLINE __Pyx_memviewslice __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_short(PyObject *, int writable_flag);
+
+/* ObjectToMemviewSlice.proto */
+static CYTHON_INLINE __Pyx_memviewslice __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_int(PyObject *, int writable_flag);
+
+/* ObjectToMemviewSlice.proto */
+static CYTHON_INLINE __Pyx_memviewslice __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_long(PyObject *, int writable_flag);
+
+/* CIntToPy.proto */
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value);
+
+/* CIntToPy.proto */
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value);
+
+/* MemviewSliceCopyTemplate.proto */
+static __Pyx_memviewslice
+__pyx_memoryview_copy_new_contig(const __Pyx_memviewslice *from_mvs,
+                                 const char *mode, int ndim,
+                                 size_t sizeof_dtype, int contig_flag,
+                                 int dtype_is_object);
+
+/* MemviewSliceInit.proto */
+#define __Pyx_BUF_MAX_NDIMS %(BUF_MAX_NDIMS)d
+#define __Pyx_MEMVIEW_DIRECT   1
+#define __Pyx_MEMVIEW_PTR      2
+#define __Pyx_MEMVIEW_FULL     4
+#define __Pyx_MEMVIEW_CONTIG   8
+#define __Pyx_MEMVIEW_STRIDED  16
+#define __Pyx_MEMVIEW_FOLLOW   32
+#define __Pyx_IS_C_CONTIG 1
+#define __Pyx_IS_F_CONTIG 2
+static int __Pyx_init_memviewslice(
+                struct __pyx_memoryview_obj *memview,
+                int ndim,
+                __Pyx_memviewslice *memviewslice,
+                int memview_is_new_reference);
+static CYTHON_INLINE int __pyx_add_acquisition_count_locked(
+    __pyx_atomic_int *acquisition_count, PyThread_type_lock lock);
+static CYTHON_INLINE int __pyx_sub_acquisition_count_locked(
+    __pyx_atomic_int *acquisition_count, PyThread_type_lock lock);
+#define __pyx_get_slice_count_pointer(memview) (memview->acquisition_count_aligned_p)
+#define __pyx_get_slice_count(memview) (*__pyx_get_slice_count_pointer(memview))
+#define __PYX_INC_MEMVIEW(slice, have_gil) __Pyx_INC_MEMVIEW(slice, have_gil, __LINE__)
+#define __PYX_XDEC_MEMVIEW(slice, have_gil) __Pyx_XDEC_MEMVIEW(slice, have_gil, __LINE__)
+static CYTHON_INLINE void __Pyx_INC_MEMVIEW(__Pyx_memviewslice *, int, int);
+static CYTHON_INLINE void __Pyx_XDEC_MEMVIEW(__Pyx_memviewslice *, int, int);
+
+/* CIntFromPy.proto */
+static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *);
+
+/* CIntFromPy.proto */
+static CYTHON_INLINE short __Pyx_PyInt_As_short(PyObject *);
+
+/* CIntFromPy.proto */
+static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *);
+
+/* CIntFromPy.proto */
+static CYTHON_INLINE PY_LONG_LONG __Pyx_PyInt_As_PY_LONG_LONG(PyObject *);
+
+/* CIntFromPy.proto */
+static CYTHON_INLINE unsigned short __Pyx_PyInt_As_unsigned_short(PyObject *);
+
+/* CIntFromPy.proto */
+static CYTHON_INLINE unsigned int __Pyx_PyInt_As_unsigned_int(PyObject *);
+
+/* CIntFromPy.proto */
+static CYTHON_INLINE unsigned long __Pyx_PyInt_As_unsigned_long(PyObject *);
+
+/* BytesContains.proto */
+static CYTHON_INLINE int __Pyx_BytesContains(PyObject* bytes, char character);
+
+/* ImportNumPyArray.proto */
+static PyObject *__pyx_numpy_ndarray = NULL;
+static PyObject* __Pyx_ImportNumPyArrayTypeIfAvailable(void);
+
+/* CIntFromPy.proto */
+static CYTHON_INLINE char __Pyx_PyInt_As_char(PyObject *);
+
+/* CheckBinaryVersion.proto */
+static int __Pyx_check_binary_version(void);
+
+/* InitStrings.proto */
+static int __Pyx_InitStrings(__Pyx_StringTabEntry *t);
+
+static PyObject *__pyx_array_get_memview(struct __pyx_array_obj *__pyx_v_self); /* proto*/
+static char *__pyx_memoryview_get_item_pointer(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_index); /* proto*/
+static PyObject *__pyx_memoryview_is_slice(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_obj); /* proto*/
+static PyObject *__pyx_memoryview_setitem_slice_assignment(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_dst, PyObject *__pyx_v_src); /* proto*/
+static PyObject *__pyx_memoryview_setitem_slice_assign_scalar(struct __pyx_memoryview_obj *__pyx_v_self, struct __pyx_memoryview_obj *__pyx_v_dst, PyObject *__pyx_v_value); /* proto*/
+static PyObject *__pyx_memoryview_setitem_indexed(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_index, PyObject *__pyx_v_value); /* proto*/
+static PyObject *__pyx_memoryview_convert_item_to_object(struct __pyx_memoryview_obj *__pyx_v_self, char *__pyx_v_itemp); /* proto*/
+static PyObject *__pyx_memoryview_assign_item_from_object(struct __pyx_memoryview_obj *__pyx_v_self, char *__pyx_v_itemp, PyObject *__pyx_v_value); /* proto*/
+static PyObject *__pyx_memoryviewslice_convert_item_to_object(struct __pyx_memoryviewslice_obj *__pyx_v_self, char *__pyx_v_itemp); /* proto*/
+static PyObject *__pyx_memoryviewslice_assign_item_from_object(struct __pyx_memoryviewslice_obj *__pyx_v_self, char *__pyx_v_itemp, PyObject *__pyx_v_value); /* proto*/
+
+/* Module declarations from 'cython' */
+
+/* Module declarations from 'pystencils.boundaries.createindexlistcython' */
+static PyTypeObject *__pyx_array_type = 0;
+static PyTypeObject *__pyx_MemviewEnum_type = 0;
+static PyTypeObject *__pyx_memoryview_type = 0;
+static PyTypeObject *__pyx_memoryviewslice_type = 0;
+static PyObject *generic = 0;
+static PyObject *strided = 0;
+static PyObject *indirect = 0;
+static PyObject *contiguous = 0;
+static PyObject *indirect_contiguous = 0;
+static int __pyx_memoryview_thread_locks_used;
+static PyThread_type_lock __pyx_memoryview_thread_locks[8];
+static struct __pyx_array_obj *__pyx_array_new(PyObject *, Py_ssize_t, char *, char *, char *); /*proto*/
+static void *__pyx_align_pointer(void *, size_t); /*proto*/
+static PyObject *__pyx_memoryview_new(PyObject *, int, int, __Pyx_TypeInfo *); /*proto*/
+static CYTHON_INLINE int __pyx_memoryview_check(PyObject *); /*proto*/
+static PyObject *_unellipsify(PyObject *, int); /*proto*/
+static PyObject *assert_direct_dimensions(Py_ssize_t *, int); /*proto*/
+static struct __pyx_memoryview_obj *__pyx_memview_slice(struct __pyx_memoryview_obj *, PyObject *); /*proto*/
+static int __pyx_memoryview_slice_memviewslice(__Pyx_memviewslice *, Py_ssize_t, Py_ssize_t, Py_ssize_t, int, int, int *, Py_ssize_t, Py_ssize_t, Py_ssize_t, int, int, int, int); /*proto*/
+static char *__pyx_pybuffer_index(Py_buffer *, char *, Py_ssize_t, Py_ssize_t); /*proto*/
+static int __pyx_memslice_transpose(__Pyx_memviewslice *); /*proto*/
+static PyObject *__pyx_memoryview_fromslice(__Pyx_memviewslice, int, PyObject *(*)(char *), int (*)(char *, PyObject *), int); /*proto*/
+static __Pyx_memviewslice *__pyx_memoryview_get_slice_from_memoryview(struct __pyx_memoryview_obj *, __Pyx_memviewslice *); /*proto*/
+static void __pyx_memoryview_slice_copy(struct __pyx_memoryview_obj *, __Pyx_memviewslice *); /*proto*/
+static PyObject *__pyx_memoryview_copy_object(struct __pyx_memoryview_obj *); /*proto*/
+static PyObject *__pyx_memoryview_copy_object_from_slice(struct __pyx_memoryview_obj *, __Pyx_memviewslice *); /*proto*/
+static Py_ssize_t abs_py_ssize_t(Py_ssize_t); /*proto*/
+static char __pyx_get_best_slice_order(__Pyx_memviewslice *, int); /*proto*/
+static void _copy_strided_to_strided(char *, Py_ssize_t *, char *, Py_ssize_t *, Py_ssize_t *, Py_ssize_t *, int, size_t); /*proto*/
+static void copy_strided_to_strided(__Pyx_memviewslice *, __Pyx_memviewslice *, int, size_t); /*proto*/
+static Py_ssize_t __pyx_memoryview_slice_get_size(__Pyx_memviewslice *, int); /*proto*/
+static Py_ssize_t __pyx_fill_contig_strides_array(Py_ssize_t *, Py_ssize_t *, Py_ssize_t, int, char); /*proto*/
+static void *__pyx_memoryview_copy_data_to_temp(__Pyx_memviewslice *, __Pyx_memviewslice *, char, int); /*proto*/
+static int __pyx_memoryview_err_extents(int, Py_ssize_t, Py_ssize_t); /*proto*/
+static int __pyx_memoryview_err_dim(PyObject *, char *, int); /*proto*/
+static int __pyx_memoryview_err(PyObject *, char *); /*proto*/
+static int __pyx_memoryview_copy_contents(__Pyx_memviewslice, __Pyx_memviewslice, int, int, int); /*proto*/
+static void __pyx_memoryview_broadcast_leading(__Pyx_memviewslice *, int, int); /*proto*/
+static void __pyx_memoryview_refcount_copying(__Pyx_memviewslice *, int, int, int); /*proto*/
+static void __pyx_memoryview_refcount_objects_in_slice_with_gil(char *, Py_ssize_t *, Py_ssize_t *, int, int); /*proto*/
+static void __pyx_memoryview_refcount_objects_in_slice(char *, Py_ssize_t *, Py_ssize_t *, int, int); /*proto*/
+static void __pyx_memoryview_slice_assign_scalar(__Pyx_memviewslice *, int, size_t, void *, int); /*proto*/
+static void __pyx_memoryview__slice_assign_scalar(char *, Py_ssize_t *, Py_ssize_t *, int, size_t, void *); /*proto*/
+static PyObject *__pyx_unpickle_Enum__set_state(struct __pyx_MemviewEnum_obj *, PyObject *); /*proto*/
+static __Pyx_TypeInfo __Pyx_TypeInfo_short = { "short", NULL, sizeof(short), { 0 }, 0, IS_UNSIGNED(short) ? 'U' : 'I', IS_UNSIGNED(short), 0 };
+static __Pyx_TypeInfo __Pyx_TypeInfo_int = { "int", NULL, sizeof(int), { 0 }, 0, IS_UNSIGNED(int) ? 'U' : 'I', IS_UNSIGNED(int), 0 };
+static __Pyx_TypeInfo __Pyx_TypeInfo_long = { "long", NULL, sizeof(long), { 0 }, 0, IS_UNSIGNED(long) ? 'U' : 'I', IS_UNSIGNED(long), 0 };
+static __Pyx_TypeInfo __Pyx_TypeInfo_PY_LONG_LONG = { "long long", NULL, sizeof(PY_LONG_LONG), { 0 }, 0, IS_UNSIGNED(PY_LONG_LONG) ? 'U' : 'I', IS_UNSIGNED(PY_LONG_LONG), 0 };
+static __Pyx_TypeInfo __Pyx_TypeInfo_unsigned_short = { "unsigned short", NULL, sizeof(unsigned short), { 0 }, 0, IS_UNSIGNED(unsigned short) ? 'U' : 'I', IS_UNSIGNED(unsigned short), 0 };
+static __Pyx_TypeInfo __Pyx_TypeInfo_unsigned_int = { "unsigned int", NULL, sizeof(unsigned int), { 0 }, 0, IS_UNSIGNED(unsigned int) ? 'U' : 'I', IS_UNSIGNED(unsigned int), 0 };
+static __Pyx_TypeInfo __Pyx_TypeInfo_unsigned_long = { "unsigned long", NULL, sizeof(unsigned long), { 0 }, 0, IS_UNSIGNED(unsigned long) ? 'U' : 'I', IS_UNSIGNED(unsigned long), 0 };
+#define __Pyx_MODULE_NAME "pystencils.boundaries.createindexlistcython"
+extern int __pyx_module_is_main_pystencils__boundaries__createindexlistcython;
+int __pyx_module_is_main_pystencils__boundaries__createindexlistcython = 0;
+
+/* Implementation of 'pystencils.boundaries.createindexlistcython' */
+static PyObject *__pyx_builtin_TypeError;
+static PyObject *__pyx_builtin_range;
+static PyObject *__pyx_builtin_ValueError;
+static PyObject *__pyx_builtin_MemoryError;
+static PyObject *__pyx_builtin_enumerate;
+static PyObject *__pyx_builtin_Ellipsis;
+static PyObject *__pyx_builtin_id;
+static PyObject *__pyx_builtin_IndexError;
+static const char __pyx_k_[] = "()";
+static const char __pyx_k_O[] = "O";
+static const char __pyx_k_c[] = "c";
+static const char __pyx_k_s[] = "s";
+static const char __pyx_k_x[] = "x";
+static const char __pyx_k_y[] = "y";
+static const char __pyx_k_z[] = "z";
+static const char __pyx_k__2[] = "|";
+static const char __pyx_k_dx[] = "dx";
+static const char __pyx_k_dy[] = "dy";
+static const char __pyx_k_dz[] = "dz";
+static const char __pyx_k_id[] = "id";
+static const char __pyx_k_xs[] = "xs";
+static const char __pyx_k_ys[] = "ys";
+static const char __pyx_k_zs[] = "zs";
+static const char __pyx_k_int[] = "int";
+static const char __pyx_k_new[] = "__new__";
+static const char __pyx_k_obj[] = "obj";
+static const char __pyx_k_args[] = "args";
+static const char __pyx_k_base[] = "base";
+static const char __pyx_k_dict[] = "__dict__";
+static const char __pyx_k_kind[] = "kind";
+static const char __pyx_k_long[] = "long";
+static const char __pyx_k_main[] = "__main__";
+static const char __pyx_k_mode[] = "mode";
+static const char __pyx_k_name[] = "name";
+static const char __pyx_k_ndim[] = "ndim";
+static const char __pyx_k_pack[] = "pack";
+static const char __pyx_k_size[] = "size";
+static const char __pyx_k_step[] = "step";
+static const char __pyx_k_stop[] = "stop";
+static const char __pyx_k_test[] = "__test__";
+static const char __pyx_k_ASCII[] = "ASCII";
+static const char __pyx_k_class[] = "__class__";
+static const char __pyx_k_dtype[] = "dtype";
+static const char __pyx_k_error[] = "error";
+static const char __pyx_k_flags[] = "flags";
+static const char __pyx_k_numpy[] = "numpy";
+static const char __pyx_k_range[] = "range";
+static const char __pyx_k_shape[] = "shape";
+static const char __pyx_k_short[] = "short";
+static const char __pyx_k_split[] = "split";
+static const char __pyx_k_start[] = "start";
+static const char __pyx_k_strip[] = "strip";
+static const char __pyx_k_dirIdx[] = "dirIdx";
+static const char __pyx_k_encode[] = "encode";
+static const char __pyx_k_format[] = "format";
+static const char __pyx_k_import[] = "__import__";
+static const char __pyx_k_kwargs[] = "kwargs";
+static const char __pyx_k_name_2[] = "__name__";
+static const char __pyx_k_pickle[] = "pickle";
+static const char __pyx_k_reduce[] = "__reduce__";
+static const char __pyx_k_struct[] = "struct";
+static const char __pyx_k_unpack[] = "unpack";
+static const char __pyx_k_update[] = "update";
+static const char __pyx_k_fortran[] = "fortran";
+static const char __pyx_k_memview[] = "memview";
+static const char __pyx_k_stencil[] = "stencil";
+static const char __pyx_k_Ellipsis[] = "Ellipsis";
+static const char __pyx_k_defaults[] = "defaults";
+static const char __pyx_k_getstate[] = "__getstate__";
+static const char __pyx_k_itemsize[] = "itemsize";
+static const char __pyx_k_pyx_type[] = "__pyx_type";
+static const char __pyx_k_setstate[] = "__setstate__";
+static const char __pyx_k_Something[] = "Something";
+static const char __pyx_k_TypeError[] = "TypeError";
+static const char __pyx_k_enumerate[] = "enumerate";
+static const char __pyx_k_long_long[] = "long long";
+static const char __pyx_k_pyx_state[] = "__pyx_state";
+static const char __pyx_k_reduce_ex[] = "__reduce_ex__";
+static const char __pyx_k_IndexError[] = "IndexError";
+static const char __pyx_k_ValueError[] = "ValueError";
+static const char __pyx_k_WORKAROUND[] = "WORKAROUND";
+static const char __pyx_k_flag_field[] = "flag_field";
+static const char __pyx_k_fluid_mask[] = "fluid_mask";
+static const char __pyx_k_pyx_result[] = "__pyx_result";
+static const char __pyx_k_pyx_vtable[] = "__pyx_vtable__";
+static const char __pyx_k_signatures[] = "signatures";
+static const char __pyx_k_MemoryError[] = "MemoryError";
+static const char __pyx_k_PickleError[] = "PickleError";
+static const char __pyx_k_single_link[] = "single_link";
+static const char __pyx_k_pyx_checksum[] = "__pyx_checksum";
+static const char __pyx_k_stringsource[] = "stringsource";
+static const char __pyx_k_unsigned_int[] = "unsigned int";
+static const char __pyx_k_boundary_mask[] = "boundary_mask";
+static const char __pyx_k_pyx_getbuffer[] = "__pyx_getbuffer";
+static const char __pyx_k_reduce_cython[] = "__reduce_cython__";
+static const char __pyx_k_unsigned_long[] = "unsigned long";
+static const char __pyx_k_num_directions[] = "num_directions";
+static const char __pyx_k_unsigned_short[] = "unsigned short";
+static const char __pyx_k_View_MemoryView[] = "View.MemoryView";
+static const char __pyx_k_allocate_buffer[] = "allocate_buffer";
+static const char __pyx_k_dtype_is_object[] = "dtype_is_object";
+static const char __pyx_k_pyx_PickleError[] = "__pyx_PickleError";
+static const char __pyx_k_setstate_cython[] = "__setstate_cython__";
+static const char __pyx_k_pyx_unpickle_Enum[] = "__pyx_unpickle_Enum";
+static const char __pyx_k_cline_in_traceback[] = "cline_in_traceback";
+static const char __pyx_k_nr_of_ghost_layers[] = "nr_of_ghost_layers";
+static const char __pyx_k_strided_and_direct[] = "<strided and direct>";
+static const char __pyx_k_boundary_index_list[] = "boundary_index_list";
+static const char __pyx_k_strided_and_indirect[] = "<strided and indirect>";
+static const char __pyx_k_contiguous_and_direct[] = "<contiguous and direct>";
+static const char __pyx_k_MemoryView_of_r_object[] = "<MemoryView of %r object>";
+static const char __pyx_k_MemoryView_of_r_at_0x_x[] = "<MemoryView of %r at 0x%x>";
+static const char __pyx_k_contiguous_and_indirect[] = "<contiguous and indirect>";
+static const char __pyx_k_Cannot_index_with_type_s[] = "Cannot index with type '%s'";
+static const char __pyx_k_Invalid_shape_in_axis_d_d[] = "Invalid shape in axis %d: %d.";
+static const char __pyx_k_No_matching_signature_found[] = "No matching signature found";
+static const char __pyx_k_itemsize_0_for_cython_array[] = "itemsize <= 0 for cython.array";
+static const char __pyx_k_unable_to_allocate_array_data[] = "unable to allocate array data.";
+static const char __pyx_k_strided_and_direct_or_indirect[] = "<strided and direct or indirect>";
+static const char __pyx_k_create_boundary_cell_index_list[] = "create_boundary_cell_index_list_2d";
+static const char __pyx_k_Buffer_view_does_not_expose_stri[] = "Buffer view does not expose strides";
+static const char __pyx_k_Can_only_create_a_buffer_that_is[] = "Can only create a buffer that is contiguous in memory.";
+static const char __pyx_k_Cannot_assign_to_read_only_memor[] = "Cannot assign to read-only memoryview";
+static const char __pyx_k_Cannot_create_writable_memory_vi[] = "Cannot create writable memory view from read-only memoryview";
+static const char __pyx_k_Empty_shape_tuple_for_cython_arr[] = "Empty shape tuple for cython.array";
+static const char __pyx_k_Expected_at_least_d_argument_s_g[] = "Expected at least %d argument%s, got %d";
+static const char __pyx_k_Function_call_with_ambiguous_arg[] = "Function call with ambiguous argument types";
+static const char __pyx_k_Incompatible_checksums_s_vs_0xb0[] = "Incompatible checksums (%s vs 0xb068931 = (name))";
+static const char __pyx_k_Indirect_dimensions_not_supporte[] = "Indirect dimensions not supported";
+static const char __pyx_k_Invalid_mode_expected_c_or_fortr[] = "Invalid mode, expected 'c' or 'fortran', got %s";
+static const char __pyx_k_Out_of_bounds_on_buffer_access_a[] = "Out of bounds on buffer access (axis %d)";
+static const char __pyx_k_Unable_to_convert_item_to_object[] = "Unable to convert item to object";
+static const char __pyx_k_create_boundary_neighbor_index_l[] = "create_boundary_neighbor_index_list_2d";
+static const char __pyx_k_got_differing_extents_in_dimensi[] = "got differing extents in dimension %d (got %d and %d)";
+static const char __pyx_k_no_default___reduce___due_to_non[] = "no default __reduce__ due to non-trivial __cinit__";
+static const char __pyx_k_pystencils_boundaries_createinde[] = "pystencils/boundaries/createindexlistcython.pyx";
+static const char __pyx_k_unable_to_allocate_shape_and_str[] = "unable to allocate shape and strides.";
+static const char __pyx_k_create_boundary_cell_index_list_2[] = "create_boundary_cell_index_list_3d";
+static const char __pyx_k_create_boundary_neighbor_index_l_2[] = "create_boundary_neighbor_index_list_3d";
+static const char __pyx_k_pystencils_boundaries_createinde_2[] = "pystencils.boundaries.createindexlistcython";
+static PyObject *__pyx_kp_s_;
+static PyObject *__pyx_n_s_ASCII;
+static PyObject *__pyx_kp_s_Buffer_view_does_not_expose_stri;
+static PyObject *__pyx_kp_s_Can_only_create_a_buffer_that_is;
+static PyObject *__pyx_kp_s_Cannot_assign_to_read_only_memor;
+static PyObject *__pyx_kp_s_Cannot_create_writable_memory_vi;
+static PyObject *__pyx_kp_s_Cannot_index_with_type_s;
+static PyObject *__pyx_n_s_Ellipsis;
+static PyObject *__pyx_kp_s_Empty_shape_tuple_for_cython_arr;
+static PyObject *__pyx_kp_s_Expected_at_least_d_argument_s_g;
+static PyObject *__pyx_kp_s_Function_call_with_ambiguous_arg;
+static PyObject *__pyx_kp_s_Incompatible_checksums_s_vs_0xb0;
+static PyObject *__pyx_n_s_IndexError;
+static PyObject *__pyx_kp_s_Indirect_dimensions_not_supporte;
+static PyObject *__pyx_kp_s_Invalid_mode_expected_c_or_fortr;
+static PyObject *__pyx_kp_s_Invalid_shape_in_axis_d_d;
+static PyObject *__pyx_n_s_MemoryError;
+static PyObject *__pyx_kp_s_MemoryView_of_r_at_0x_x;
+static PyObject *__pyx_kp_s_MemoryView_of_r_object;
+static PyObject *__pyx_kp_s_No_matching_signature_found;
+static PyObject *__pyx_n_b_O;
+static PyObject *__pyx_kp_s_Out_of_bounds_on_buffer_access_a;
+static PyObject *__pyx_n_s_PickleError;
+static PyObject *__pyx_n_u_Something;
+static PyObject *__pyx_n_s_TypeError;
+static PyObject *__pyx_kp_s_Unable_to_convert_item_to_object;
+static PyObject *__pyx_n_s_ValueError;
+static PyObject *__pyx_n_s_View_MemoryView;
+static PyObject *__pyx_n_s_WORKAROUND;
+static PyObject *__pyx_kp_s__2;
+static PyObject *__pyx_n_s_allocate_buffer;
+static PyObject *__pyx_n_s_args;
+static PyObject *__pyx_n_s_base;
+static PyObject *__pyx_n_s_boundary_index_list;
+static PyObject *__pyx_n_s_boundary_mask;
+static PyObject *__pyx_n_s_c;
+static PyObject *__pyx_n_u_c;
+static PyObject *__pyx_n_s_class;
+static PyObject *__pyx_n_s_cline_in_traceback;
+static PyObject *__pyx_kp_s_contiguous_and_direct;
+static PyObject *__pyx_kp_s_contiguous_and_indirect;
+static PyObject *__pyx_n_s_create_boundary_cell_index_list;
+static PyObject *__pyx_n_s_create_boundary_cell_index_list_2;
+static PyObject *__pyx_n_s_create_boundary_neighbor_index_l;
+static PyObject *__pyx_n_s_create_boundary_neighbor_index_l_2;
+static PyObject *__pyx_n_s_defaults;
+static PyObject *__pyx_n_s_dict;
+static PyObject *__pyx_n_s_dirIdx;
+static PyObject *__pyx_n_s_dtype;
+static PyObject *__pyx_n_s_dtype_is_object;
+static PyObject *__pyx_n_s_dx;
+static PyObject *__pyx_n_s_dy;
+static PyObject *__pyx_n_s_dz;
+static PyObject *__pyx_n_s_encode;
+static PyObject *__pyx_n_s_enumerate;
+static PyObject *__pyx_n_s_error;
+static PyObject *__pyx_n_s_flag_field;
+static PyObject *__pyx_n_s_flags;
+static PyObject *__pyx_n_s_fluid_mask;
+static PyObject *__pyx_n_s_format;
+static PyObject *__pyx_n_s_fortran;
+static PyObject *__pyx_n_u_fortran;
+static PyObject *__pyx_n_s_getstate;
+static PyObject *__pyx_kp_s_got_differing_extents_in_dimensi;
+static PyObject *__pyx_n_s_id;
+static PyObject *__pyx_n_s_import;
+static PyObject *__pyx_n_s_int;
+static PyObject *__pyx_n_s_itemsize;
+static PyObject *__pyx_kp_s_itemsize_0_for_cython_array;
+static PyObject *__pyx_n_s_kind;
+static PyObject *__pyx_n_s_kwargs;
+static PyObject *__pyx_n_s_long;
+static PyObject *__pyx_kp_s_long_long;
+static PyObject *__pyx_n_s_main;
+static PyObject *__pyx_n_s_memview;
+static PyObject *__pyx_n_s_mode;
+static PyObject *__pyx_n_s_name;
+static PyObject *__pyx_n_s_name_2;
+static PyObject *__pyx_n_s_ndim;
+static PyObject *__pyx_n_s_new;
+static PyObject *__pyx_kp_s_no_default___reduce___due_to_non;
+static PyObject *__pyx_n_s_nr_of_ghost_layers;
+static PyObject *__pyx_n_s_num_directions;
+static PyObject *__pyx_n_s_numpy;
+static PyObject *__pyx_n_s_obj;
+static PyObject *__pyx_n_s_pack;
+static PyObject *__pyx_n_s_pickle;
+static PyObject *__pyx_kp_s_pystencils_boundaries_createinde;
+static PyObject *__pyx_n_s_pystencils_boundaries_createinde_2;
+static PyObject *__pyx_n_s_pyx_PickleError;
+static PyObject *__pyx_n_s_pyx_checksum;
+static PyObject *__pyx_n_s_pyx_getbuffer;
+static PyObject *__pyx_n_s_pyx_result;
+static PyObject *__pyx_n_s_pyx_state;
+static PyObject *__pyx_n_s_pyx_type;
+static PyObject *__pyx_n_s_pyx_unpickle_Enum;
+static PyObject *__pyx_n_s_pyx_vtable;
+static PyObject *__pyx_n_s_range;
+static PyObject *__pyx_n_s_reduce;
+static PyObject *__pyx_n_s_reduce_cython;
+static PyObject *__pyx_n_s_reduce_ex;
+static PyObject *__pyx_n_s_s;
+static PyObject *__pyx_n_s_setstate;
+static PyObject *__pyx_n_s_setstate_cython;
+static PyObject *__pyx_n_s_shape;
+static PyObject *__pyx_n_s_short;
+static PyObject *__pyx_n_s_signatures;
+static PyObject *__pyx_n_s_single_link;
+static PyObject *__pyx_n_s_size;
+static PyObject *__pyx_n_s_split;
+static PyObject *__pyx_n_s_start;
+static PyObject *__pyx_n_s_stencil;
+static PyObject *__pyx_n_s_step;
+static PyObject *__pyx_n_s_stop;
+static PyObject *__pyx_kp_s_strided_and_direct;
+static PyObject *__pyx_kp_s_strided_and_direct_or_indirect;
+static PyObject *__pyx_kp_s_strided_and_indirect;
+static PyObject *__pyx_kp_s_stringsource;
+static PyObject *__pyx_n_s_strip;
+static PyObject *__pyx_n_s_struct;
+static PyObject *__pyx_n_s_test;
+static PyObject *__pyx_kp_s_unable_to_allocate_array_data;
+static PyObject *__pyx_kp_s_unable_to_allocate_shape_and_str;
+static PyObject *__pyx_n_s_unpack;
+static PyObject *__pyx_kp_s_unsigned_int;
+static PyObject *__pyx_kp_s_unsigned_long;
+static PyObject *__pyx_kp_s_unsigned_short;
+static PyObject *__pyx_n_s_update;
+static PyObject *__pyx_n_s_x;
+static PyObject *__pyx_n_s_xs;
+static PyObject *__pyx_n_s_y;
+static PyObject *__pyx_n_s_ys;
+static PyObject *__pyx_n_s_z;
+static PyObject *__pyx_n_s_zs;
+static PyObject *__pyx_pf_10pystencils_10boundaries_21createindexlistcython_create_boundary_neighbor_index_list_2d(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_signatures, PyObject *__pyx_v_args, PyObject *__pyx_v_kwargs, CYTHON_UNUSED PyObject *__pyx_v_defaults); /* proto */
+static PyObject *__pyx_pf_10pystencils_10boundaries_21createindexlistcython_8create_boundary_neighbor_index_list_2d(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_flag_field, int __pyx_v_nr_of_ghost_layers, short __pyx_v_boundary_mask, short __pyx_v_fluid_mask, PyObject *__pyx_v_stencil, int __pyx_v_single_link); /* proto */
+static PyObject *__pyx_pf_10pystencils_10boundaries_21createindexlistcython_10create_boundary_neighbor_index_list_2d(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_flag_field, int __pyx_v_nr_of_ghost_layers, int __pyx_v_boundary_mask, int __pyx_v_fluid_mask, PyObject *__pyx_v_stencil, int __pyx_v_single_link); /* proto */
+static PyObject *__pyx_pf_10pystencils_10boundaries_21createindexlistcython_12create_boundary_neighbor_index_list_2d(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_flag_field, int __pyx_v_nr_of_ghost_layers, long __pyx_v_boundary_mask, long __pyx_v_fluid_mask, PyObject *__pyx_v_stencil, int __pyx_v_single_link); /* proto */
+static PyObject *__pyx_pf_10pystencils_10boundaries_21createindexlistcython_14create_boundary_neighbor_index_list_2d(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_flag_field, int __pyx_v_nr_of_ghost_layers, PY_LONG_LONG __pyx_v_boundary_mask, PY_LONG_LONG __pyx_v_fluid_mask, PyObject *__pyx_v_stencil, int __pyx_v_single_link); /* proto */
+static PyObject *__pyx_pf_10pystencils_10boundaries_21createindexlistcython_16create_boundary_neighbor_index_list_2d(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_flag_field, int __pyx_v_nr_of_ghost_layers, unsigned short __pyx_v_boundary_mask, unsigned short __pyx_v_fluid_mask, PyObject *__pyx_v_stencil, int __pyx_v_single_link); /* proto */
+static PyObject *__pyx_pf_10pystencils_10boundaries_21createindexlistcython_18create_boundary_neighbor_index_list_2d(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_flag_field, int __pyx_v_nr_of_ghost_layers, unsigned int __pyx_v_boundary_mask, unsigned int __pyx_v_fluid_mask, PyObject *__pyx_v_stencil, int __pyx_v_single_link); /* proto */
+static PyObject *__pyx_pf_10pystencils_10boundaries_21createindexlistcython_20create_boundary_neighbor_index_list_2d(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_flag_field, int __pyx_v_nr_of_ghost_layers, unsigned long __pyx_v_boundary_mask, unsigned long __pyx_v_fluid_mask, PyObject *__pyx_v_stencil, int __pyx_v_single_link); /* proto */
+static PyObject *__pyx_pf_10pystencils_10boundaries_21createindexlistcython_2create_boundary_neighbor_index_list_3d(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_signatures, PyObject *__pyx_v_args, PyObject *__pyx_v_kwargs, CYTHON_UNUSED PyObject *__pyx_v_defaults); /* proto */
+static PyObject *__pyx_pf_10pystencils_10boundaries_21createindexlistcython_24create_boundary_neighbor_index_list_3d(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_flag_field, int __pyx_v_nr_of_ghost_layers, short __pyx_v_boundary_mask, short __pyx_v_fluid_mask, PyObject *__pyx_v_stencil, int __pyx_v_single_link); /* proto */
+static PyObject *__pyx_pf_10pystencils_10boundaries_21createindexlistcython_26create_boundary_neighbor_index_list_3d(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_flag_field, int __pyx_v_nr_of_ghost_layers, int __pyx_v_boundary_mask, int __pyx_v_fluid_mask, PyObject *__pyx_v_stencil, int __pyx_v_single_link); /* proto */
+static PyObject *__pyx_pf_10pystencils_10boundaries_21createindexlistcython_28create_boundary_neighbor_index_list_3d(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_flag_field, int __pyx_v_nr_of_ghost_layers, long __pyx_v_boundary_mask, long __pyx_v_fluid_mask, PyObject *__pyx_v_stencil, int __pyx_v_single_link); /* proto */
+static PyObject *__pyx_pf_10pystencils_10boundaries_21createindexlistcython_30create_boundary_neighbor_index_list_3d(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_flag_field, int __pyx_v_nr_of_ghost_layers, PY_LONG_LONG __pyx_v_boundary_mask, PY_LONG_LONG __pyx_v_fluid_mask, PyObject *__pyx_v_stencil, int __pyx_v_single_link); /* proto */
+static PyObject *__pyx_pf_10pystencils_10boundaries_21createindexlistcython_32create_boundary_neighbor_index_list_3d(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_flag_field, int __pyx_v_nr_of_ghost_layers, unsigned short __pyx_v_boundary_mask, unsigned short __pyx_v_fluid_mask, PyObject *__pyx_v_stencil, int __pyx_v_single_link); /* proto */
+static PyObject *__pyx_pf_10pystencils_10boundaries_21createindexlistcython_34create_boundary_neighbor_index_list_3d(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_flag_field, int __pyx_v_nr_of_ghost_layers, unsigned int __pyx_v_boundary_mask, unsigned int __pyx_v_fluid_mask, PyObject *__pyx_v_stencil, int __pyx_v_single_link); /* proto */
+static PyObject *__pyx_pf_10pystencils_10boundaries_21createindexlistcython_36create_boundary_neighbor_index_list_3d(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_flag_field, int __pyx_v_nr_of_ghost_layers, unsigned long __pyx_v_boundary_mask, unsigned long __pyx_v_fluid_mask, PyObject *__pyx_v_stencil, int __pyx_v_single_link); /* proto */
+static PyObject *__pyx_pf_10pystencils_10boundaries_21createindexlistcython_4create_boundary_cell_index_list_2d(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_signatures, PyObject *__pyx_v_args, PyObject *__pyx_v_kwargs, CYTHON_UNUSED PyObject *__pyx_v_defaults); /* proto */
+static PyObject *__pyx_pf_10pystencils_10boundaries_21createindexlistcython_40create_boundary_cell_index_list_2d(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_flag_field, short __pyx_v_boundary_mask, short __pyx_v_fluid_mask, PyObject *__pyx_v_stencil, int __pyx_v_single_link); /* proto */
+static PyObject *__pyx_pf_10pystencils_10boundaries_21createindexlistcython_42create_boundary_cell_index_list_2d(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_flag_field, int __pyx_v_boundary_mask, int __pyx_v_fluid_mask, PyObject *__pyx_v_stencil, int __pyx_v_single_link); /* proto */
+static PyObject *__pyx_pf_10pystencils_10boundaries_21createindexlistcython_44create_boundary_cell_index_list_2d(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_flag_field, long __pyx_v_boundary_mask, long __pyx_v_fluid_mask, PyObject *__pyx_v_stencil, int __pyx_v_single_link); /* proto */
+static PyObject *__pyx_pf_10pystencils_10boundaries_21createindexlistcython_46create_boundary_cell_index_list_2d(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_flag_field, PY_LONG_LONG __pyx_v_boundary_mask, PY_LONG_LONG __pyx_v_fluid_mask, PyObject *__pyx_v_stencil, int __pyx_v_single_link); /* proto */
+static PyObject *__pyx_pf_10pystencils_10boundaries_21createindexlistcython_48create_boundary_cell_index_list_2d(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_flag_field, unsigned short __pyx_v_boundary_mask, unsigned short __pyx_v_fluid_mask, PyObject *__pyx_v_stencil, int __pyx_v_single_link); /* proto */
+static PyObject *__pyx_pf_10pystencils_10boundaries_21createindexlistcython_50create_boundary_cell_index_list_2d(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_flag_field, unsigned int __pyx_v_boundary_mask, unsigned int __pyx_v_fluid_mask, PyObject *__pyx_v_stencil, int __pyx_v_single_link); /* proto */
+static PyObject *__pyx_pf_10pystencils_10boundaries_21createindexlistcython_52create_boundary_cell_index_list_2d(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_flag_field, unsigned long __pyx_v_boundary_mask, unsigned long __pyx_v_fluid_mask, PyObject *__pyx_v_stencil, int __pyx_v_single_link); /* proto */
+static PyObject *__pyx_pf_10pystencils_10boundaries_21createindexlistcython_6create_boundary_cell_index_list_3d(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_signatures, PyObject *__pyx_v_args, PyObject *__pyx_v_kwargs, CYTHON_UNUSED PyObject *__pyx_v_defaults); /* proto */
+static PyObject *__pyx_pf_10pystencils_10boundaries_21createindexlistcython_56create_boundary_cell_index_list_3d(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_flag_field, short __pyx_v_boundary_mask, short __pyx_v_fluid_mask, PyObject *__pyx_v_stencil, int __pyx_v_single_link); /* proto */
+static PyObject *__pyx_pf_10pystencils_10boundaries_21createindexlistcython_58create_boundary_cell_index_list_3d(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_flag_field, int __pyx_v_boundary_mask, int __pyx_v_fluid_mask, PyObject *__pyx_v_stencil, int __pyx_v_single_link); /* proto */
+static PyObject *__pyx_pf_10pystencils_10boundaries_21createindexlistcython_60create_boundary_cell_index_list_3d(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_flag_field, long __pyx_v_boundary_mask, long __pyx_v_fluid_mask, PyObject *__pyx_v_stencil, int __pyx_v_single_link); /* proto */
+static PyObject *__pyx_pf_10pystencils_10boundaries_21createindexlistcython_62create_boundary_cell_index_list_3d(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_flag_field, PY_LONG_LONG __pyx_v_boundary_mask, PY_LONG_LONG __pyx_v_fluid_mask, PyObject *__pyx_v_stencil, int __pyx_v_single_link); /* proto */
+static PyObject *__pyx_pf_10pystencils_10boundaries_21createindexlistcython_64create_boundary_cell_index_list_3d(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_flag_field, unsigned short __pyx_v_boundary_mask, unsigned short __pyx_v_fluid_mask, PyObject *__pyx_v_stencil, int __pyx_v_single_link); /* proto */
+static PyObject *__pyx_pf_10pystencils_10boundaries_21createindexlistcython_66create_boundary_cell_index_list_3d(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_flag_field, unsigned int __pyx_v_boundary_mask, unsigned int __pyx_v_fluid_mask, PyObject *__pyx_v_stencil, int __pyx_v_single_link); /* proto */
+static PyObject *__pyx_pf_10pystencils_10boundaries_21createindexlistcython_68create_boundary_cell_index_list_3d(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_flag_field, unsigned long __pyx_v_boundary_mask, unsigned long __pyx_v_fluid_mask, PyObject *__pyx_v_stencil, int __pyx_v_single_link); /* proto */
+static int __pyx_array___pyx_pf_15View_dot_MemoryView_5array___cinit__(struct __pyx_array_obj *__pyx_v_self, PyObject *__pyx_v_shape, Py_ssize_t __pyx_v_itemsize, PyObject *__pyx_v_format, PyObject *__pyx_v_mode, int __pyx_v_allocate_buffer); /* proto */
+static int __pyx_array___pyx_pf_15View_dot_MemoryView_5array_2__getbuffer__(struct __pyx_array_obj *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /* proto */
+static void __pyx_array___pyx_pf_15View_dot_MemoryView_5array_4__dealloc__(struct __pyx_array_obj *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_15View_dot_MemoryView_5array_7memview___get__(struct __pyx_array_obj *__pyx_v_self); /* proto */
+static Py_ssize_t __pyx_array___pyx_pf_15View_dot_MemoryView_5array_6__len__(struct __pyx_array_obj *__pyx_v_self); /* proto */
+static PyObject *__pyx_array___pyx_pf_15View_dot_MemoryView_5array_8__getattr__(struct __pyx_array_obj *__pyx_v_self, PyObject *__pyx_v_attr); /* proto */
+static PyObject *__pyx_array___pyx_pf_15View_dot_MemoryView_5array_10__getitem__(struct __pyx_array_obj *__pyx_v_self, PyObject *__pyx_v_item); /* proto */
+static int __pyx_array___pyx_pf_15View_dot_MemoryView_5array_12__setitem__(struct __pyx_array_obj *__pyx_v_self, PyObject *__pyx_v_item, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf___pyx_array___reduce_cython__(CYTHON_UNUSED struct __pyx_array_obj *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf___pyx_array_2__setstate_cython__(CYTHON_UNUSED struct __pyx_array_obj *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
+static int __pyx_MemviewEnum___pyx_pf_15View_dot_MemoryView_4Enum___init__(struct __pyx_MemviewEnum_obj *__pyx_v_self, PyObject *__pyx_v_name); /* proto */
+static PyObject *__pyx_MemviewEnum___pyx_pf_15View_dot_MemoryView_4Enum_2__repr__(struct __pyx_MemviewEnum_obj *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf___pyx_MemviewEnum___reduce_cython__(struct __pyx_MemviewEnum_obj *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf___pyx_MemviewEnum_2__setstate_cython__(struct __pyx_MemviewEnum_obj *__pyx_v_self, PyObject *__pyx_v___pyx_state); /* proto */
+static int __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview___cinit__(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_obj, int __pyx_v_flags, int __pyx_v_dtype_is_object); /* proto */
+static void __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_2__dealloc__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */
+static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_4__getitem__(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_index); /* proto */
+static int __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_6__setitem__(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_index, PyObject *__pyx_v_value); /* proto */
+static int __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_8__getbuffer__(struct __pyx_memoryview_obj *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /* proto */
+static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_1T___get__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_4base___get__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_5shape___get__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_7strides___get__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_10suboffsets___get__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_4ndim___get__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_8itemsize___get__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_6nbytes___get__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_4size___get__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */
+static Py_ssize_t __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_10__len__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */
+static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_12__repr__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */
+static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_14__str__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */
+static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_16is_c_contig(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */
+static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_18is_f_contig(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */
+static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_20copy(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */
+static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_22copy_fortran(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf___pyx_memoryview___reduce_cython__(CYTHON_UNUSED struct __pyx_memoryview_obj *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf___pyx_memoryview_2__setstate_cython__(CYTHON_UNUSED struct __pyx_memoryview_obj *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
+static void __pyx_memoryviewslice___pyx_pf_15View_dot_MemoryView_16_memoryviewslice___dealloc__(struct __pyx_memoryviewslice_obj *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_15View_dot_MemoryView_16_memoryviewslice_4base___get__(struct __pyx_memoryviewslice_obj *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf___pyx_memoryviewslice___reduce_cython__(CYTHON_UNUSED struct __pyx_memoryviewslice_obj *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf___pyx_memoryviewslice_2__setstate_cython__(CYTHON_UNUSED struct __pyx_memoryviewslice_obj *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
+static PyObject *__pyx_pf_15View_dot_MemoryView___pyx_unpickle_Enum(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state); /* proto */
+static PyObject *__pyx_tp_new_array(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_Enum(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_memoryview(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new__memoryviewslice(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_int_0;
+static PyObject *__pyx_int_1;
+static PyObject *__pyx_int_5;
+static PyObject *__pyx_int_6;
+static PyObject *__pyx_int_184977713;
+static PyObject *__pyx_int_neg_1;
+static PyObject *__pyx_tuple__3;
+static PyObject *__pyx_tuple__4;
+static PyObject *__pyx_tuple__5;
+static PyObject *__pyx_tuple__6;
+static PyObject *__pyx_tuple__7;
+static PyObject *__pyx_tuple__8;
+static PyObject *__pyx_tuple__9;
+static PyObject *__pyx_slice__19;
+static PyObject *__pyx_tuple__10;
+static PyObject *__pyx_tuple__11;
+static PyObject *__pyx_tuple__12;
+static PyObject *__pyx_tuple__13;
+static PyObject *__pyx_tuple__14;
+static PyObject *__pyx_tuple__15;
+static PyObject *__pyx_tuple__16;
+static PyObject *__pyx_tuple__17;
+static PyObject *__pyx_tuple__18;
+static PyObject *__pyx_tuple__20;
+static PyObject *__pyx_tuple__21;
+static PyObject *__pyx_tuple__22;
+static PyObject *__pyx_tuple__23;
+static PyObject *__pyx_tuple__25;
+static PyObject *__pyx_tuple__27;
+static PyObject *__pyx_tuple__29;
+static PyObject *__pyx_tuple__31;
+static PyObject *__pyx_tuple__32;
+static PyObject *__pyx_tuple__33;
+static PyObject *__pyx_tuple__34;
+static PyObject *__pyx_tuple__35;
+static PyObject *__pyx_tuple__36;
+static PyObject *__pyx_codeobj__24;
+static PyObject *__pyx_codeobj__26;
+static PyObject *__pyx_codeobj__28;
+static PyObject *__pyx_codeobj__30;
+static PyObject *__pyx_codeobj__37;
+/* Late includes */
+
+/* "pystencils/boundaries/createindexlistcython.pyx":19
+ * @cython.boundscheck(False) # turn off bounds-checking for entire function
+ * @cython.wraparound(False)  # turn off negative index wrapping for entire function
+ * def create_boundary_neighbor_index_list_2d(object[IntegerType, ndim=2] flag_field,             # <<<<<<<<<<<<<<
+ *                                            int nr_of_ghost_layers, IntegerType boundary_mask, IntegerType fluid_mask,
+ *                                            object[int, ndim=2] stencil, int single_link):
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_10pystencils_10boundaries_21createindexlistcython_1create_boundary_neighbor_index_list_2d(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyMethodDef __pyx_mdef_10pystencils_10boundaries_21createindexlistcython_1create_boundary_neighbor_index_list_2d = {"create_boundary_neighbor_index_list_2d", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_10pystencils_10boundaries_21createindexlistcython_1create_boundary_neighbor_index_list_2d, METH_VARARGS|METH_KEYWORDS, 0};
+static PyObject *__pyx_pw_10pystencils_10boundaries_21createindexlistcython_1create_boundary_neighbor_index_list_2d(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_signatures = 0;
+  PyObject *__pyx_v_args = 0;
+  PyObject *__pyx_v_kwargs = 0;
+  CYTHON_UNUSED PyObject *__pyx_v_defaults = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__pyx_fused_cpdef (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_signatures,&__pyx_n_s_args,&__pyx_n_s_kwargs,&__pyx_n_s_defaults,0};
+    PyObject* values[4] = {0,0,0,0};
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
+        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_signatures)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
+        case  1:
+        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_args)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("__pyx_fused_cpdef", 1, 4, 4, 1); __PYX_ERR(0, 19, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  2:
+        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_kwargs)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("__pyx_fused_cpdef", 1, 4, 4, 2); __PYX_ERR(0, 19, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  3:
+        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_defaults)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("__pyx_fused_cpdef", 1, 4, 4, 3); __PYX_ERR(0, 19, __pyx_L3_error)
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__pyx_fused_cpdef") < 0)) __PYX_ERR(0, 19, __pyx_L3_error)
+      }
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 4) {
+      goto __pyx_L5_argtuple_error;
+    } else {
+      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+      values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+    }
+    __pyx_v_signatures = values[0];
+    __pyx_v_args = values[1];
+    __pyx_v_kwargs = values[2];
+    __pyx_v_defaults = values[3];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("__pyx_fused_cpdef", 1, 4, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 19, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("pystencils.boundaries.createindexlistcython.__pyx_fused_cpdef", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_10pystencils_10boundaries_21createindexlistcython_create_boundary_neighbor_index_list_2d(__pyx_self, __pyx_v_signatures, __pyx_v_args, __pyx_v_kwargs, __pyx_v_defaults);
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_10pystencils_10boundaries_21createindexlistcython_create_boundary_neighbor_index_list_2d(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_signatures, PyObject *__pyx_v_args, PyObject *__pyx_v_kwargs, CYTHON_UNUSED PyObject *__pyx_v_defaults) {
+  PyObject *__pyx_v_dest_sig = NULL;
+  Py_ssize_t __pyx_v_i;
+  PyTypeObject *__pyx_v_ndarray = 0;
+  __Pyx_memviewslice __pyx_v_memslice;
+  Py_ssize_t __pyx_v_itemsize;
+  int __pyx_v_dtype_signed;
+  char __pyx_v_kind;
+  int __pyx_v_short_is_signed;
+  int __pyx_v_int_is_signed;
+  int __pyx_v_long_is_signed;
+  int __pyx_v_long_long_is_signed;
+  int __pyx_v_unsigned_short_is_signed;
+  int __pyx_v_unsigned_int_is_signed;
+  int __pyx_v_unsigned_long_is_signed;
+  PyObject *__pyx_v_arg = NULL;
+  PyObject *__pyx_v_dtype = NULL;
+  PyObject *__pyx_v_arg_base = NULL;
+  PyObject *__pyx_v_candidates = NULL;
+  PyObject *__pyx_v_sig = NULL;
+  int __pyx_v_match_found;
+  PyObject *__pyx_v_src_sig = NULL;
+  PyObject *__pyx_v_dst_type = NULL;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_2;
+  int __pyx_t_3;
+  int __pyx_t_4;
+  Py_ssize_t __pyx_t_5;
+  PyObject *__pyx_t_6 = NULL;
+  long __pyx_t_7;
+  __Pyx_memviewslice __pyx_t_8;
+  Py_ssize_t __pyx_t_9;
+  int __pyx_t_10;
+  int __pyx_t_11;
+  PyObject *__pyx_t_12 = NULL;
+  PyObject *__pyx_t_13 = NULL;
+  PyObject *__pyx_t_14 = NULL;
+  Py_ssize_t __pyx_t_15;
+  Py_ssize_t __pyx_t_16;
+  Py_ssize_t __pyx_t_17;
+  int __pyx_t_18;
+  __Pyx_RefNannySetupContext("create_boundary_neighbor_index_list_2d", 0);
+  __Pyx_INCREF(__pyx_v_kwargs);
+  __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 19, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_INCREF(Py_None);
+  __Pyx_GIVEREF(Py_None);
+  PyList_SET_ITEM(__pyx_t_1, 0, Py_None);
+  __pyx_v_dest_sig = ((PyObject*)__pyx_t_1);
+  __pyx_t_1 = 0;
+  __pyx_t_3 = (__pyx_v_kwargs != Py_None);
+  __pyx_t_4 = (__pyx_t_3 != 0);
+  if (__pyx_t_4) {
+  } else {
+    __pyx_t_2 = __pyx_t_4;
+    goto __pyx_L4_bool_binop_done;
+  }
+  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_v_kwargs); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 19, __pyx_L1_error)
+  __pyx_t_3 = ((!__pyx_t_4) != 0);
+  __pyx_t_2 = __pyx_t_3;
+  __pyx_L4_bool_binop_done:;
+  if (__pyx_t_2) {
+    __Pyx_INCREF(Py_None);
+    __Pyx_DECREF_SET(__pyx_v_kwargs, Py_None);
+  }
+  __pyx_t_1 = ((PyObject *)__Pyx_ImportNumPyArrayTypeIfAvailable()); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 19, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_ndarray = ((PyTypeObject*)__pyx_t_1);
+  __pyx_t_1 = 0;
+  __pyx_v_itemsize = -1L;
+  __pyx_v_short_is_signed = (!((((short)-1L) > 0) != 0));
+  __pyx_v_int_is_signed = (!((((int)-1L) > 0) != 0));
+  __pyx_v_long_is_signed = (!((((long)-1L) > 0) != 0));
+  __pyx_v_long_long_is_signed = (!((((PY_LONG_LONG)-1L) > 0) != 0));
+  __pyx_v_unsigned_short_is_signed = (!((((unsigned short)-1L) > 0) != 0));
+  __pyx_v_unsigned_int_is_signed = (!((((unsigned int)-1L) > 0) != 0));
+  __pyx_v_unsigned_long_is_signed = (!((((unsigned long)-1L) > 0) != 0));
+  if (unlikely(__pyx_v_args == Py_None)) {
+    PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
+    __PYX_ERR(0, 19, __pyx_L1_error)
+  }
+  __pyx_t_5 = PyTuple_GET_SIZE(((PyObject*)__pyx_v_args)); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(0, 19, __pyx_L1_error)
+  __pyx_t_2 = ((0 < __pyx_t_5) != 0);
+  if (__pyx_t_2) {
+    if (unlikely(__pyx_v_args == Py_None)) {
+      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
+      __PYX_ERR(0, 19, __pyx_L1_error)
+    }
+    __pyx_t_1 = PyTuple_GET_ITEM(((PyObject*)__pyx_v_args), 0);
+    __Pyx_INCREF(__pyx_t_1);
+    __pyx_v_arg = __pyx_t_1;
+    __pyx_t_1 = 0;
+    goto __pyx_L6;
+  }
+  __pyx_t_3 = (__pyx_v_kwargs != Py_None);
+  __pyx_t_4 = (__pyx_t_3 != 0);
+  if (__pyx_t_4) {
+  } else {
+    __pyx_t_2 = __pyx_t_4;
+    goto __pyx_L7_bool_binop_done;
+  }
+  if (unlikely(__pyx_v_kwargs == Py_None)) {
+    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
+    __PYX_ERR(0, 19, __pyx_L1_error)
+  }
+  __pyx_t_4 = (__Pyx_PyDict_ContainsTF(__pyx_n_s_flag_field, ((PyObject*)__pyx_v_kwargs), Py_EQ)); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 19, __pyx_L1_error)
+  __pyx_t_3 = (__pyx_t_4 != 0);
+  __pyx_t_2 = __pyx_t_3;
+  __pyx_L7_bool_binop_done:;
+  if (__pyx_t_2) {
+    if (unlikely(__pyx_v_kwargs == Py_None)) {
+      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
+      __PYX_ERR(0, 19, __pyx_L1_error)
+    }
+    __pyx_t_1 = __Pyx_PyDict_GetItem(((PyObject*)__pyx_v_kwargs), __pyx_n_s_flag_field); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 19, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_1);
+    __pyx_v_arg = __pyx_t_1;
+    __pyx_t_1 = 0;
+    goto __pyx_L6;
+  }
+  /*else*/ {
+    if (unlikely(__pyx_v_args == Py_None)) {
+      PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
+      __PYX_ERR(0, 19, __pyx_L1_error)
+    }
+    __pyx_t_5 = PyTuple_GET_SIZE(((PyObject*)__pyx_v_args)); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(0, 19, __pyx_L1_error)
+    __pyx_t_1 = PyInt_FromSsize_t(__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 19, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_1);
+    __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 19, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_6);
+    __Pyx_INCREF(__pyx_int_6);
+    __Pyx_GIVEREF(__pyx_int_6);
+    PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_int_6);
+    __Pyx_INCREF(__pyx_n_s_s);
+    __Pyx_GIVEREF(__pyx_n_s_s);
+    PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_n_s_s);
+    __Pyx_GIVEREF(__pyx_t_1);
+    PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_t_1);
+    __pyx_t_1 = 0;
+    __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_Expected_at_least_d_argument_s_g, __pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 19, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_1);
+    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+    __pyx_t_6 = __Pyx_PyObject_CallOneArg(__pyx_builtin_TypeError, __pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 19, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_6);
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __Pyx_Raise(__pyx_t_6, 0, 0, 0);
+    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+    __PYX_ERR(0, 19, __pyx_L1_error)
+  }
+  __pyx_L6:;
+  while (1) {
+    __pyx_t_2 = (__pyx_v_ndarray != ((PyTypeObject*)Py_None));
+    __pyx_t_3 = (__pyx_t_2 != 0);
+    if (__pyx_t_3) {
+      __pyx_t_3 = __Pyx_TypeCheck(__pyx_v_arg, __pyx_v_ndarray); 
+      __pyx_t_2 = (__pyx_t_3 != 0);
+      if (__pyx_t_2) {
+        __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_dtype); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 19, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_6);
+        __pyx_v_dtype = __pyx_t_6;
+        __pyx_t_6 = 0;
+        goto __pyx_L12;
+      }
+      __pyx_t_2 = __pyx_memoryview_check(__pyx_v_arg); 
+      __pyx_t_3 = (__pyx_t_2 != 0);
+      if (__pyx_t_3) {
+        __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_base); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 19, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_6);
+        __pyx_v_arg_base = __pyx_t_6;
+        __pyx_t_6 = 0;
+        __pyx_t_3 = __Pyx_TypeCheck(__pyx_v_arg_base, __pyx_v_ndarray); 
+        __pyx_t_2 = (__pyx_t_3 != 0);
+        if (__pyx_t_2) {
+          __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg_base, __pyx_n_s_dtype); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 19, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_6);
+          __pyx_v_dtype = __pyx_t_6;
+          __pyx_t_6 = 0;
+          goto __pyx_L13;
+        }
+        /*else*/ {
+          __Pyx_INCREF(Py_None);
+          __pyx_v_dtype = Py_None;
+        }
+        __pyx_L13:;
+        goto __pyx_L12;
+      }
+      /*else*/ {
+        __Pyx_INCREF(Py_None);
+        __pyx_v_dtype = Py_None;
+      }
+      __pyx_L12:;
+      __pyx_v_itemsize = -1L;
+      __pyx_t_2 = (__pyx_v_dtype != Py_None);
+      __pyx_t_3 = (__pyx_t_2 != 0);
+      if (__pyx_t_3) {
+        __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_dtype, __pyx_n_s_itemsize); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 19, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_6);
+        __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_6); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 19, __pyx_L1_error)
+        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+        __pyx_v_itemsize = __pyx_t_5;
+        __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_dtype, __pyx_n_s_kind); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 19, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_6);
+        __pyx_t_7 = __Pyx_PyObject_Ord(__pyx_t_6); if (unlikely(__pyx_t_7 == ((long)(long)(Py_UCS4)-1))) __PYX_ERR(0, 19, __pyx_L1_error)
+        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+        __pyx_v_kind = __pyx_t_7;
+        __pyx_v_dtype_signed = (__pyx_v_kind == 'i');
+        switch (__pyx_v_kind) {
+          case 'i':
+          case 'u':
+          __pyx_t_2 = (((sizeof(short)) == __pyx_v_itemsize) != 0);
+          if (__pyx_t_2) {
+          } else {
+            __pyx_t_3 = __pyx_t_2;
+            goto __pyx_L16_bool_binop_done;
+          }
+          __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_ndim); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 19, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_6);
+          __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_6); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 19, __pyx_L1_error)
+          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+          __pyx_t_2 = ((((Py_ssize_t)__pyx_t_5) == 2) != 0);
+          if (__pyx_t_2) {
+          } else {
+            __pyx_t_3 = __pyx_t_2;
+            goto __pyx_L16_bool_binop_done;
+          }
+          __pyx_t_2 = ((!((__pyx_v_short_is_signed ^ __pyx_v_dtype_signed) != 0)) != 0);
+          __pyx_t_3 = __pyx_t_2;
+          __pyx_L16_bool_binop_done:;
+          if (__pyx_t_3) {
+            if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_n_s_short, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 19, __pyx_L1_error)
+            goto __pyx_L10_break;
+          }
+          __pyx_t_2 = (((sizeof(int)) == __pyx_v_itemsize) != 0);
+          if (__pyx_t_2) {
+          } else {
+            __pyx_t_3 = __pyx_t_2;
+            goto __pyx_L20_bool_binop_done;
+          }
+          __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_ndim); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 19, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_6);
+          __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_6); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 19, __pyx_L1_error)
+          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+          __pyx_t_2 = ((((Py_ssize_t)__pyx_t_5) == 2) != 0);
+          if (__pyx_t_2) {
+          } else {
+            __pyx_t_3 = __pyx_t_2;
+            goto __pyx_L20_bool_binop_done;
+          }
+          __pyx_t_2 = ((!((__pyx_v_int_is_signed ^ __pyx_v_dtype_signed) != 0)) != 0);
+          __pyx_t_3 = __pyx_t_2;
+          __pyx_L20_bool_binop_done:;
+          if (__pyx_t_3) {
+            if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_n_s_int, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 19, __pyx_L1_error)
+            goto __pyx_L10_break;
+          }
+          __pyx_t_2 = (((sizeof(long)) == __pyx_v_itemsize) != 0);
+          if (__pyx_t_2) {
+          } else {
+            __pyx_t_3 = __pyx_t_2;
+            goto __pyx_L24_bool_binop_done;
+          }
+          __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_ndim); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 19, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_6);
+          __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_6); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 19, __pyx_L1_error)
+          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+          __pyx_t_2 = ((((Py_ssize_t)__pyx_t_5) == 2) != 0);
+          if (__pyx_t_2) {
+          } else {
+            __pyx_t_3 = __pyx_t_2;
+            goto __pyx_L24_bool_binop_done;
+          }
+          __pyx_t_2 = ((!((__pyx_v_long_is_signed ^ __pyx_v_dtype_signed) != 0)) != 0);
+          __pyx_t_3 = __pyx_t_2;
+          __pyx_L24_bool_binop_done:;
+          if (__pyx_t_3) {
+            if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_n_s_long, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 19, __pyx_L1_error)
+            goto __pyx_L10_break;
+          }
+          __pyx_t_2 = (((sizeof(PY_LONG_LONG)) == __pyx_v_itemsize) != 0);
+          if (__pyx_t_2) {
+          } else {
+            __pyx_t_3 = __pyx_t_2;
+            goto __pyx_L28_bool_binop_done;
+          }
+          __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_ndim); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 19, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_6);
+          __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_6); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 19, __pyx_L1_error)
+          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+          __pyx_t_2 = ((((Py_ssize_t)__pyx_t_5) == 2) != 0);
+          if (__pyx_t_2) {
+          } else {
+            __pyx_t_3 = __pyx_t_2;
+            goto __pyx_L28_bool_binop_done;
+          }
+          __pyx_t_2 = ((!((__pyx_v_long_long_is_signed ^ __pyx_v_dtype_signed) != 0)) != 0);
+          __pyx_t_3 = __pyx_t_2;
+          __pyx_L28_bool_binop_done:;
+          if (__pyx_t_3) {
+            if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_kp_s_long_long, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 19, __pyx_L1_error)
+            goto __pyx_L10_break;
+          }
+          __pyx_t_2 = (((sizeof(unsigned short)) == __pyx_v_itemsize) != 0);
+          if (__pyx_t_2) {
+          } else {
+            __pyx_t_3 = __pyx_t_2;
+            goto __pyx_L32_bool_binop_done;
+          }
+          __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_ndim); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 19, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_6);
+          __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_6); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 19, __pyx_L1_error)
+          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+          __pyx_t_2 = ((((Py_ssize_t)__pyx_t_5) == 2) != 0);
+          if (__pyx_t_2) {
+          } else {
+            __pyx_t_3 = __pyx_t_2;
+            goto __pyx_L32_bool_binop_done;
+          }
+          __pyx_t_2 = ((!((__pyx_v_unsigned_short_is_signed ^ __pyx_v_dtype_signed) != 0)) != 0);
+          __pyx_t_3 = __pyx_t_2;
+          __pyx_L32_bool_binop_done:;
+          if (__pyx_t_3) {
+            if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_kp_s_unsigned_short, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 19, __pyx_L1_error)
+            goto __pyx_L10_break;
+          }
+          __pyx_t_2 = (((sizeof(unsigned int)) == __pyx_v_itemsize) != 0);
+          if (__pyx_t_2) {
+          } else {
+            __pyx_t_3 = __pyx_t_2;
+            goto __pyx_L36_bool_binop_done;
+          }
+          __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_ndim); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 19, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_6);
+          __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_6); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 19, __pyx_L1_error)
+          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+          __pyx_t_2 = ((((Py_ssize_t)__pyx_t_5) == 2) != 0);
+          if (__pyx_t_2) {
+          } else {
+            __pyx_t_3 = __pyx_t_2;
+            goto __pyx_L36_bool_binop_done;
+          }
+          __pyx_t_2 = ((!((__pyx_v_unsigned_int_is_signed ^ __pyx_v_dtype_signed) != 0)) != 0);
+          __pyx_t_3 = __pyx_t_2;
+          __pyx_L36_bool_binop_done:;
+          if (__pyx_t_3) {
+            if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_kp_s_unsigned_int, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 19, __pyx_L1_error)
+            goto __pyx_L10_break;
+          }
+          __pyx_t_2 = (((sizeof(unsigned long)) == __pyx_v_itemsize) != 0);
+          if (__pyx_t_2) {
+          } else {
+            __pyx_t_3 = __pyx_t_2;
+            goto __pyx_L40_bool_binop_done;
+          }
+          __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_ndim); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 19, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_6);
+          __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_6); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 19, __pyx_L1_error)
+          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+          __pyx_t_2 = ((((Py_ssize_t)__pyx_t_5) == 2) != 0);
+          if (__pyx_t_2) {
+          } else {
+            __pyx_t_3 = __pyx_t_2;
+            goto __pyx_L40_bool_binop_done;
+          }
+          __pyx_t_2 = ((!((__pyx_v_unsigned_long_is_signed ^ __pyx_v_dtype_signed) != 0)) != 0);
+          __pyx_t_3 = __pyx_t_2;
+          __pyx_L40_bool_binop_done:;
+          if (__pyx_t_3) {
+            if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_kp_s_unsigned_long, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 19, __pyx_L1_error)
+            goto __pyx_L10_break;
+          }
+          break;
+          case 'f':
+          break;
+          case 'c':
+          break;
+          case 'O':
+          break;
+          default: break;
+        }
+      }
+    }
+    __pyx_t_2 = ((__pyx_v_itemsize == -1L) != 0);
+    if (!__pyx_t_2) {
+    } else {
+      __pyx_t_3 = __pyx_t_2;
+      goto __pyx_L44_bool_binop_done;
+    }
+    __pyx_t_2 = ((__pyx_v_itemsize == (sizeof(short))) != 0);
+    __pyx_t_3 = __pyx_t_2;
+    __pyx_L44_bool_binop_done:;
+    if (__pyx_t_3) {
+      __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_dsds_short(__pyx_v_arg, 0); 
+      __pyx_v_memslice = __pyx_t_8;
+      __pyx_t_3 = (__pyx_v_memslice.memview != 0);
+      if (__pyx_t_3) {
+        __PYX_XDEC_MEMVIEW((&__pyx_v_memslice), 1); 
+        if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_n_s_short, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 19, __pyx_L1_error)
+        goto __pyx_L10_break;
+      }
+      /*else*/ {
+        PyErr_Clear(); 
+      }
+    }
+    __pyx_t_2 = ((__pyx_v_itemsize == -1L) != 0);
+    if (!__pyx_t_2) {
+    } else {
+      __pyx_t_3 = __pyx_t_2;
+      goto __pyx_L48_bool_binop_done;
+    }
+    __pyx_t_2 = ((__pyx_v_itemsize == (sizeof(int))) != 0);
+    __pyx_t_3 = __pyx_t_2;
+    __pyx_L48_bool_binop_done:;
+    if (__pyx_t_3) {
+      __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_dsds_int(__pyx_v_arg, 0); 
+      __pyx_v_memslice = __pyx_t_8;
+      __pyx_t_3 = (__pyx_v_memslice.memview != 0);
+      if (__pyx_t_3) {
+        __PYX_XDEC_MEMVIEW((&__pyx_v_memslice), 1); 
+        if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_n_s_int, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 19, __pyx_L1_error)
+        goto __pyx_L10_break;
+      }
+      /*else*/ {
+        PyErr_Clear(); 
+      }
+    }
+    __pyx_t_2 = ((__pyx_v_itemsize == -1L) != 0);
+    if (!__pyx_t_2) {
+    } else {
+      __pyx_t_3 = __pyx_t_2;
+      goto __pyx_L52_bool_binop_done;
+    }
+    __pyx_t_2 = ((__pyx_v_itemsize == (sizeof(long))) != 0);
+    __pyx_t_3 = __pyx_t_2;
+    __pyx_L52_bool_binop_done:;
+    if (__pyx_t_3) {
+      __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_dsds_long(__pyx_v_arg, 0); 
+      __pyx_v_memslice = __pyx_t_8;
+      __pyx_t_3 = (__pyx_v_memslice.memview != 0);
+      if (__pyx_t_3) {
+        __PYX_XDEC_MEMVIEW((&__pyx_v_memslice), 1); 
+        if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_n_s_long, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 19, __pyx_L1_error)
+        goto __pyx_L10_break;
+      }
+      /*else*/ {
+        PyErr_Clear(); 
+      }
+    }
+    __pyx_t_2 = ((__pyx_v_itemsize == -1L) != 0);
+    if (!__pyx_t_2) {
+    } else {
+      __pyx_t_3 = __pyx_t_2;
+      goto __pyx_L56_bool_binop_done;
+    }
+    __pyx_t_2 = ((__pyx_v_itemsize == (sizeof(PY_LONG_LONG))) != 0);
+    __pyx_t_3 = __pyx_t_2;
+    __pyx_L56_bool_binop_done:;
+    if (__pyx_t_3) {
+      __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_dsds_PY_LONG_LONG(__pyx_v_arg, 0); 
+      __pyx_v_memslice = __pyx_t_8;
+      __pyx_t_3 = (__pyx_v_memslice.memview != 0);
+      if (__pyx_t_3) {
+        __PYX_XDEC_MEMVIEW((&__pyx_v_memslice), 1); 
+        if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_kp_s_long_long, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 19, __pyx_L1_error)
+        goto __pyx_L10_break;
+      }
+      /*else*/ {
+        PyErr_Clear(); 
+      }
+    }
+    __pyx_t_2 = ((__pyx_v_itemsize == -1L) != 0);
+    if (!__pyx_t_2) {
+    } else {
+      __pyx_t_3 = __pyx_t_2;
+      goto __pyx_L60_bool_binop_done;
+    }
+    __pyx_t_2 = ((__pyx_v_itemsize == (sizeof(unsigned short))) != 0);
+    __pyx_t_3 = __pyx_t_2;
+    __pyx_L60_bool_binop_done:;
+    if (__pyx_t_3) {
+      __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_dsds_unsigned_short(__pyx_v_arg, 0); 
+      __pyx_v_memslice = __pyx_t_8;
+      __pyx_t_3 = (__pyx_v_memslice.memview != 0);
+      if (__pyx_t_3) {
+        __PYX_XDEC_MEMVIEW((&__pyx_v_memslice), 1); 
+        if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_kp_s_unsigned_short, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 19, __pyx_L1_error)
+        goto __pyx_L10_break;
+      }
+      /*else*/ {
+        PyErr_Clear(); 
+      }
+    }
+    __pyx_t_2 = ((__pyx_v_itemsize == -1L) != 0);
+    if (!__pyx_t_2) {
+    } else {
+      __pyx_t_3 = __pyx_t_2;
+      goto __pyx_L64_bool_binop_done;
+    }
+    __pyx_t_2 = ((__pyx_v_itemsize == (sizeof(unsigned int))) != 0);
+    __pyx_t_3 = __pyx_t_2;
+    __pyx_L64_bool_binop_done:;
+    if (__pyx_t_3) {
+      __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_dsds_unsigned_int(__pyx_v_arg, 0); 
+      __pyx_v_memslice = __pyx_t_8;
+      __pyx_t_3 = (__pyx_v_memslice.memview != 0);
+      if (__pyx_t_3) {
+        __PYX_XDEC_MEMVIEW((&__pyx_v_memslice), 1); 
+        if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_kp_s_unsigned_int, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 19, __pyx_L1_error)
+        goto __pyx_L10_break;
+      }
+      /*else*/ {
+        PyErr_Clear(); 
+      }
+    }
+    __pyx_t_2 = ((__pyx_v_itemsize == -1L) != 0);
+    if (!__pyx_t_2) {
+    } else {
+      __pyx_t_3 = __pyx_t_2;
+      goto __pyx_L68_bool_binop_done;
+    }
+    __pyx_t_2 = ((__pyx_v_itemsize == (sizeof(unsigned long))) != 0);
+    __pyx_t_3 = __pyx_t_2;
+    __pyx_L68_bool_binop_done:;
+    if (__pyx_t_3) {
+      __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_dsds_unsigned_long(__pyx_v_arg, 0); 
+      __pyx_v_memslice = __pyx_t_8;
+      __pyx_t_3 = (__pyx_v_memslice.memview != 0);
+      if (__pyx_t_3) {
+        __PYX_XDEC_MEMVIEW((&__pyx_v_memslice), 1); 
+        if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_kp_s_unsigned_long, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 19, __pyx_L1_error)
+        goto __pyx_L10_break;
+      }
+      /*else*/ {
+        PyErr_Clear(); 
+      }
+    }
+    if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, Py_None, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 19, __pyx_L1_error)
+    goto __pyx_L10_break;
+  }
+  __pyx_L10_break:;
+  __pyx_t_6 = PyList_New(0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 19, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_6);
+  __pyx_v_candidates = ((PyObject*)__pyx_t_6);
+  __pyx_t_6 = 0;
+  __pyx_t_5 = 0;
+  if (unlikely(__pyx_v_signatures == Py_None)) {
+    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
+    __PYX_ERR(0, 19, __pyx_L1_error)
+  }
+  __pyx_t_1 = __Pyx_dict_iterator(((PyObject*)__pyx_v_signatures), 1, ((PyObject *)NULL), (&__pyx_t_9), (&__pyx_t_10)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 19, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_6);
+  __pyx_t_6 = __pyx_t_1;
+  __pyx_t_1 = 0;
+  while (1) {
+    __pyx_t_11 = __Pyx_dict_iter_next(__pyx_t_6, __pyx_t_9, &__pyx_t_5, &__pyx_t_1, NULL, NULL, __pyx_t_10);
+    if (unlikely(__pyx_t_11 == 0)) break;
+    if (unlikely(__pyx_t_11 == -1)) __PYX_ERR(0, 19, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_1);
+    __Pyx_XDECREF_SET(__pyx_v_sig, __pyx_t_1);
+    __pyx_t_1 = 0;
+    __pyx_v_match_found = 0;
+    __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_v_sig, __pyx_n_s_strip); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 19, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_13);
+    __pyx_t_14 = NULL;
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_13))) {
+      __pyx_t_14 = PyMethod_GET_SELF(__pyx_t_13);
+      if (likely(__pyx_t_14)) {
+        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13);
+        __Pyx_INCREF(__pyx_t_14);
+        __Pyx_INCREF(function);
+        __Pyx_DECREF_SET(__pyx_t_13, function);
+      }
+    }
+    __pyx_t_12 = (__pyx_t_14) ? __Pyx_PyObject_Call2Args(__pyx_t_13, __pyx_t_14, __pyx_kp_s_) : __Pyx_PyObject_CallOneArg(__pyx_t_13, __pyx_kp_s_);
+    __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
+    if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 19, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_12);
+    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+    __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_n_s_split); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 19, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_13);
+    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
+    __pyx_t_12 = NULL;
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_13))) {
+      __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_13);
+      if (likely(__pyx_t_12)) {
+        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13);
+        __Pyx_INCREF(__pyx_t_12);
+        __Pyx_INCREF(function);
+        __Pyx_DECREF_SET(__pyx_t_13, function);
+      }
+    }
+    __pyx_t_1 = (__pyx_t_12) ? __Pyx_PyObject_Call2Args(__pyx_t_13, __pyx_t_12, __pyx_kp_s__2) : __Pyx_PyObject_CallOneArg(__pyx_t_13, __pyx_kp_s__2);
+    __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
+    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 19, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_1);
+    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+    __Pyx_XDECREF_SET(__pyx_v_src_sig, __pyx_t_1);
+    __pyx_t_1 = 0;
+    __pyx_t_15 = PyList_GET_SIZE(__pyx_v_dest_sig); if (unlikely(__pyx_t_15 == ((Py_ssize_t)-1))) __PYX_ERR(0, 19, __pyx_L1_error)
+    __pyx_t_16 = __pyx_t_15;
+    for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) {
+      __pyx_v_i = __pyx_t_17;
+      __pyx_t_1 = PyList_GET_ITEM(__pyx_v_dest_sig, __pyx_v_i);
+      __Pyx_INCREF(__pyx_t_1);
+      __Pyx_XDECREF_SET(__pyx_v_dst_type, __pyx_t_1);
+      __pyx_t_1 = 0;
+      __pyx_t_3 = (__pyx_v_dst_type != Py_None);
+      __pyx_t_2 = (__pyx_t_3 != 0);
+      if (__pyx_t_2) {
+        __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_src_sig, __pyx_v_i, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 19, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_1);
+        __pyx_t_13 = PyObject_RichCompare(__pyx_t_1, __pyx_v_dst_type, Py_EQ); __Pyx_XGOTREF(__pyx_t_13); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 19, __pyx_L1_error)
+        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+        __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_13); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 19, __pyx_L1_error)
+        __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+        if (__pyx_t_2) {
+          __pyx_v_match_found = 1;
+          goto __pyx_L76;
+        }
+        /*else*/ {
+          __pyx_v_match_found = 0;
+          goto __pyx_L74_break;
+        }
+        __pyx_L76:;
+      }
+    }
+    __pyx_L74_break:;
+    __pyx_t_2 = (__pyx_v_match_found != 0);
+    if (__pyx_t_2) {
+      __pyx_t_18 = __Pyx_PyList_Append(__pyx_v_candidates, __pyx_v_sig); if (unlikely(__pyx_t_18 == ((int)-1))) __PYX_ERR(0, 19, __pyx_L1_error)
+    }
+  }
+  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+  __pyx_t_2 = (PyList_GET_SIZE(__pyx_v_candidates) != 0);
+  __pyx_t_3 = ((!__pyx_t_2) != 0);
+  if (__pyx_t_3) {
+    __pyx_t_6 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__3, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 19, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_6);
+    __Pyx_Raise(__pyx_t_6, 0, 0, 0);
+    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+    __PYX_ERR(0, 19, __pyx_L1_error)
+  }
+  __pyx_t_9 = PyList_GET_SIZE(__pyx_v_candidates); if (unlikely(__pyx_t_9 == ((Py_ssize_t)-1))) __PYX_ERR(0, 19, __pyx_L1_error)
+  __pyx_t_3 = ((__pyx_t_9 > 1) != 0);
+  if (__pyx_t_3) {
+    __pyx_t_6 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__4, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 19, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_6);
+    __Pyx_Raise(__pyx_t_6, 0, 0, 0);
+    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+    __PYX_ERR(0, 19, __pyx_L1_error)
+  }
+  /*else*/ {
+    __Pyx_XDECREF(__pyx_r);
+    if (unlikely(__pyx_v_signatures == Py_None)) {
+      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
+      __PYX_ERR(0, 19, __pyx_L1_error)
+    }
+    __pyx_t_6 = __Pyx_PyDict_GetItem(((PyObject*)__pyx_v_signatures), PyList_GET_ITEM(__pyx_v_candidates, 0)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 19, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_6);
+    __pyx_r = __pyx_t_6;
+    __pyx_t_6 = 0;
+    goto __pyx_L0;
+  }
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_6);
+  __Pyx_XDECREF(__pyx_t_12);
+  __Pyx_XDECREF(__pyx_t_13);
+  __Pyx_XDECREF(__pyx_t_14);
+  __Pyx_AddTraceback("pystencils.boundaries.createindexlistcython.__pyx_fused_cpdef", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XDECREF(__pyx_v_dest_sig);
+  __Pyx_XDECREF(__pyx_v_ndarray);
+  __Pyx_XDECREF(__pyx_v_arg);
+  __Pyx_XDECREF(__pyx_v_dtype);
+  __Pyx_XDECREF(__pyx_v_arg_base);
+  __Pyx_XDECREF(__pyx_v_candidates);
+  __Pyx_XDECREF(__pyx_v_sig);
+  __Pyx_XDECREF(__pyx_v_src_sig);
+  __Pyx_XDECREF(__pyx_v_dst_type);
+  __Pyx_XDECREF(__pyx_v_kwargs);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static PyObject *__pyx_fuse_0__pyx_pw_10pystencils_10boundaries_21createindexlistcython_9create_boundary_neighbor_index_list_2d(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyMethodDef __pyx_fuse_0__pyx_mdef_10pystencils_10boundaries_21createindexlistcython_9create_boundary_neighbor_index_list_2d = {"__pyx_fuse_0create_boundary_neighbor_index_list_2d", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_fuse_0__pyx_pw_10pystencils_10boundaries_21createindexlistcython_9create_boundary_neighbor_index_list_2d, METH_VARARGS|METH_KEYWORDS, 0};
+static PyObject *__pyx_fuse_0__pyx_pw_10pystencils_10boundaries_21createindexlistcython_9create_boundary_neighbor_index_list_2d(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_flag_field = 0;
+  int __pyx_v_nr_of_ghost_layers;
+  short __pyx_v_boundary_mask;
+  short __pyx_v_fluid_mask;
+  PyObject *__pyx_v_stencil = 0;
+  int __pyx_v_single_link;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("create_boundary_neighbor_index_list_2d (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_flag_field,&__pyx_n_s_nr_of_ghost_layers,&__pyx_n_s_boundary_mask,&__pyx_n_s_fluid_mask,&__pyx_n_s_stencil,&__pyx_n_s_single_link,0};
+    PyObject* values[6] = {0,0,0,0,0,0};
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
+        CYTHON_FALLTHROUGH;
+        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+        CYTHON_FALLTHROUGH;
+        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
+        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_flag_field)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
+        case  1:
+        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_nr_of_ghost_layers)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_neighbor_index_list_2d", 1, 6, 6, 1); __PYX_ERR(0, 19, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  2:
+        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_boundary_mask)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_neighbor_index_list_2d", 1, 6, 6, 2); __PYX_ERR(0, 19, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  3:
+        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_fluid_mask)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_neighbor_index_list_2d", 1, 6, 6, 3); __PYX_ERR(0, 19, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  4:
+        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_stencil)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_neighbor_index_list_2d", 1, 6, 6, 4); __PYX_ERR(0, 19, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  5:
+        if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_single_link)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_neighbor_index_list_2d", 1, 6, 6, 5); __PYX_ERR(0, 19, __pyx_L3_error)
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "create_boundary_neighbor_index_list_2d") < 0)) __PYX_ERR(0, 19, __pyx_L3_error)
+      }
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 6) {
+      goto __pyx_L5_argtuple_error;
+    } else {
+      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+      values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+      values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+      values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
+    }
+    __pyx_v_flag_field = ((PyObject *)values[0]);
+    __pyx_v_nr_of_ghost_layers = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_nr_of_ghost_layers == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 20, __pyx_L3_error)
+    __pyx_v_boundary_mask = __Pyx_PyInt_As_short(values[2]); if (unlikely((__pyx_v_boundary_mask == (short)-1) && PyErr_Occurred())) __PYX_ERR(0, 20, __pyx_L3_error)
+    __pyx_v_fluid_mask = __Pyx_PyInt_As_short(values[3]); if (unlikely((__pyx_v_fluid_mask == (short)-1) && PyErr_Occurred())) __PYX_ERR(0, 20, __pyx_L3_error)
+    __pyx_v_stencil = ((PyObject *)values[4]);
+    __pyx_v_single_link = __Pyx_PyInt_As_int(values[5]); if (unlikely((__pyx_v_single_link == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 21, __pyx_L3_error)
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("create_boundary_neighbor_index_list_2d", 1, 6, 6, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 19, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("pystencils.boundaries.createindexlistcython.create_boundary_neighbor_index_list_2d", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_10pystencils_10boundaries_21createindexlistcython_8create_boundary_neighbor_index_list_2d(__pyx_self, __pyx_v_flag_field, __pyx_v_nr_of_ghost_layers, __pyx_v_boundary_mask, __pyx_v_fluid_mask, __pyx_v_stencil, __pyx_v_single_link);
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_10pystencils_10boundaries_21createindexlistcython_8create_boundary_neighbor_index_list_2d(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_flag_field, int __pyx_v_nr_of_ghost_layers, short __pyx_v_boundary_mask, short __pyx_v_fluid_mask, PyObject *__pyx_v_stencil, int __pyx_v_single_link) {
+  int __pyx_v_xs;
+  int __pyx_v_ys;
+  int __pyx_v_x;
+  int __pyx_v_y;
+  int __pyx_v_dirIdx;
+  int __pyx_v_num_directions;
+  int __pyx_v_dx;
+  int __pyx_v_dy;
+  PyObject *__pyx_v_boundary_index_list = NULL;
+  __Pyx_LocalBuf_ND __pyx_pybuffernd_flag_field;
+  __Pyx_Buffer __pyx_pybuffer_flag_field;
+  __Pyx_LocalBuf_ND __pyx_pybuffernd_stencil;
+  __Pyx_Buffer __pyx_pybuffer_stencil;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
+  PyObject *(*__pyx_t_5)(PyObject *);
+  int __pyx_t_6;
+  int __pyx_t_7;
+  int __pyx_t_8;
+  int __pyx_t_9;
+  int __pyx_t_10;
+  int __pyx_t_11;
+  Py_ssize_t __pyx_t_12;
+  Py_ssize_t __pyx_t_13;
+  int __pyx_t_14;
+  int __pyx_t_15;
+  int __pyx_t_16;
+  int __pyx_t_17;
+  Py_ssize_t __pyx_t_18;
+  Py_ssize_t __pyx_t_19;
+  Py_ssize_t __pyx_t_20;
+  Py_ssize_t __pyx_t_21;
+  Py_ssize_t __pyx_t_22;
+  Py_ssize_t __pyx_t_23;
+  int __pyx_t_24;
+  __Pyx_RefNannySetupContext("__pyx_fuse_0create_boundary_neighbor_index_list_2d", 0);
+  __pyx_pybuffer_flag_field.pybuffer.buf = NULL;
+  __pyx_pybuffer_flag_field.refcount = 0;
+  __pyx_pybuffernd_flag_field.data = NULL;
+  __pyx_pybuffernd_flag_field.rcbuffer = &__pyx_pybuffer_flag_field;
+  __pyx_pybuffer_stencil.pybuffer.buf = NULL;
+  __pyx_pybuffer_stencil.refcount = 0;
+  __pyx_pybuffernd_stencil.data = NULL;
+  __pyx_pybuffernd_stencil.rcbuffer = &__pyx_pybuffer_stencil;
+  {
+    __Pyx_BufFmt_StackElem __pyx_stack[1];
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_flag_field.rcbuffer->pybuffer, (PyObject*)__pyx_v_flag_field, &__Pyx_TypeInfo_short, PyBUF_FORMAT| PyBUF_INDIRECT, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 19, __pyx_L1_error)
+  }
+  __pyx_pybuffernd_flag_field.diminfo[0].strides = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_flag_field.diminfo[0].shape = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_flag_field.diminfo[0].suboffsets = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.suboffsets[0]; __pyx_pybuffernd_flag_field.diminfo[1].strides = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_flag_field.diminfo[1].shape = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_flag_field.diminfo[1].suboffsets = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.suboffsets[1];
+  {
+    __Pyx_BufFmt_StackElem __pyx_stack[1];
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_stencil.rcbuffer->pybuffer, (PyObject*)__pyx_v_stencil, &__Pyx_TypeInfo_int, PyBUF_FORMAT| PyBUF_INDIRECT, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 19, __pyx_L1_error)
+  }
+  __pyx_pybuffernd_stencil.diminfo[0].strides = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_stencil.diminfo[0].shape = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_stencil.diminfo[0].suboffsets = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.suboffsets[0]; __pyx_pybuffernd_stencil.diminfo[1].strides = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_stencil.diminfo[1].shape = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_stencil.diminfo[1].suboffsets = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.suboffsets[1];
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":25
+ *     cdef int dirIdx, num_directions, dx, dy
+ * 
+ *     xs, ys = flag_field.shape             # <<<<<<<<<<<<<<
+ *     boundary_index_list = []
+ *     num_directions = stencil.shape[0]
+ */
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_flag_field), __pyx_n_s_shape); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 25, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) {
+    PyObject* sequence = __pyx_t_1;
+    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
+    if (unlikely(size != 2)) {
+      if (size > 2) __Pyx_RaiseTooManyValuesError(2);
+      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
+      __PYX_ERR(0, 25, __pyx_L1_error)
+    }
+    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+    if (likely(PyTuple_CheckExact(sequence))) {
+      __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
+      __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); 
+    } else {
+      __pyx_t_2 = PyList_GET_ITEM(sequence, 0); 
+      __pyx_t_3 = PyList_GET_ITEM(sequence, 1); 
+    }
+    __Pyx_INCREF(__pyx_t_2);
+    __Pyx_INCREF(__pyx_t_3);
+    #else
+    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 25, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_2);
+    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 25, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    #endif
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  } else {
+    Py_ssize_t index = -1;
+    __pyx_t_4 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 25, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __pyx_t_5 = Py_TYPE(__pyx_t_4)->tp_iternext;
+    index = 0; __pyx_t_2 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_2)) goto __pyx_L3_unpacking_failed;
+    __Pyx_GOTREF(__pyx_t_2);
+    index = 1; __pyx_t_3 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_3)) goto __pyx_L3_unpacking_failed;
+    __Pyx_GOTREF(__pyx_t_3);
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_5(__pyx_t_4), 2) < 0) __PYX_ERR(0, 25, __pyx_L1_error)
+    __pyx_t_5 = NULL;
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    goto __pyx_L4_unpacking_done;
+    __pyx_L3_unpacking_failed:;
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    __pyx_t_5 = NULL;
+    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
+    __PYX_ERR(0, 25, __pyx_L1_error)
+    __pyx_L4_unpacking_done:;
+  }
+  __pyx_t_6 = __Pyx_PyInt_As_int(__pyx_t_2); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 25, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_7 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 25, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __pyx_v_xs = __pyx_t_6;
+  __pyx_v_ys = __pyx_t_7;
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":26
+ * 
+ *     xs, ys = flag_field.shape
+ *     boundary_index_list = []             # <<<<<<<<<<<<<<
+ *     num_directions = stencil.shape[0]
+ * 
+ */
+  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 26, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_boundary_index_list = ((PyObject*)__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":27
+ *     xs, ys = flag_field.shape
+ *     boundary_index_list = []
+ *     num_directions = stencil.shape[0]             # <<<<<<<<<<<<<<
+ * 
+ *     for y in range(nr_of_ghost_layers, ys - nr_of_ghost_layers):
+ */
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_stencil), __pyx_n_s_shape); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 27, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_3 = __Pyx_GetItemInt(__pyx_t_1, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 27, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_7 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 27, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __pyx_v_num_directions = __pyx_t_7;
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":29
+ *     num_directions = stencil.shape[0]
+ * 
+ *     for y in range(nr_of_ghost_layers, ys - nr_of_ghost_layers):             # <<<<<<<<<<<<<<
+ *         for x in range(nr_of_ghost_layers, xs - nr_of_ghost_layers):
+ *             if flag_field[x, y] & fluid_mask:
+ */
+  __pyx_t_7 = (__pyx_v_ys - __pyx_v_nr_of_ghost_layers);
+  __pyx_t_6 = __pyx_t_7;
+  for (__pyx_t_8 = __pyx_v_nr_of_ghost_layers; __pyx_t_8 < __pyx_t_6; __pyx_t_8+=1) {
+    __pyx_v_y = __pyx_t_8;
+
+    /* "pystencils/boundaries/createindexlistcython.pyx":30
+ * 
+ *     for y in range(nr_of_ghost_layers, ys - nr_of_ghost_layers):
+ *         for x in range(nr_of_ghost_layers, xs - nr_of_ghost_layers):             # <<<<<<<<<<<<<<
+ *             if flag_field[x, y] & fluid_mask:
+ *                 for dirIdx in range(num_directions):
+ */
+    __pyx_t_9 = (__pyx_v_xs - __pyx_v_nr_of_ghost_layers);
+    __pyx_t_10 = __pyx_t_9;
+    for (__pyx_t_11 = __pyx_v_nr_of_ghost_layers; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {
+      __pyx_v_x = __pyx_t_11;
+
+      /* "pystencils/boundaries/createindexlistcython.pyx":31
+ *     for y in range(nr_of_ghost_layers, ys - nr_of_ghost_layers):
+ *         for x in range(nr_of_ghost_layers, xs - nr_of_ghost_layers):
+ *             if flag_field[x, y] & fluid_mask:             # <<<<<<<<<<<<<<
+ *                 for dirIdx in range(num_directions):
+ *                     dx = stencil[dirIdx,0]
+ */
+      __pyx_t_12 = __pyx_v_x;
+      __pyx_t_13 = __pyx_v_y;
+      __pyx_t_14 = (((*__Pyx_BufPtrFull2d(short *, __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_flag_field.diminfo[0].strides, __pyx_pybuffernd_flag_field.diminfo[0].suboffsets, __pyx_t_13, __pyx_pybuffernd_flag_field.diminfo[1].strides, __pyx_pybuffernd_flag_field.diminfo[1].suboffsets)) & __pyx_v_fluid_mask) != 0);
+      if (__pyx_t_14) {
+
+        /* "pystencils/boundaries/createindexlistcython.pyx":32
+ *         for x in range(nr_of_ghost_layers, xs - nr_of_ghost_layers):
+ *             if flag_field[x, y] & fluid_mask:
+ *                 for dirIdx in range(num_directions):             # <<<<<<<<<<<<<<
+ *                     dx = stencil[dirIdx,0]
+ *                     dy = stencil[dirIdx,1]
+ */
+        __pyx_t_15 = __pyx_v_num_directions;
+        __pyx_t_16 = __pyx_t_15;
+        for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) {
+          __pyx_v_dirIdx = __pyx_t_17;
+
+          /* "pystencils/boundaries/createindexlistcython.pyx":33
+ *             if flag_field[x, y] & fluid_mask:
+ *                 for dirIdx in range(num_directions):
+ *                     dx = stencil[dirIdx,0]             # <<<<<<<<<<<<<<
+ *                     dy = stencil[dirIdx,1]
+ *                     if flag_field[x + dx, y + dy] & boundary_mask:
+ */
+          __pyx_t_18 = __pyx_v_dirIdx;
+          __pyx_t_19 = 0;
+          __pyx_v_dx = (*__Pyx_BufPtrFull2d(int *, __pyx_pybuffernd_stencil.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_stencil.diminfo[0].strides, __pyx_pybuffernd_stencil.diminfo[0].suboffsets, __pyx_t_19, __pyx_pybuffernd_stencil.diminfo[1].strides, __pyx_pybuffernd_stencil.diminfo[1].suboffsets));
+
+          /* "pystencils/boundaries/createindexlistcython.pyx":34
+ *                 for dirIdx in range(num_directions):
+ *                     dx = stencil[dirIdx,0]
+ *                     dy = stencil[dirIdx,1]             # <<<<<<<<<<<<<<
+ *                     if flag_field[x + dx, y + dy] & boundary_mask:
+ *                         boundary_index_list.append((x,y, dirIdx))
+ */
+          __pyx_t_20 = __pyx_v_dirIdx;
+          __pyx_t_21 = 1;
+          __pyx_v_dy = (*__Pyx_BufPtrFull2d(int *, __pyx_pybuffernd_stencil.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_stencil.diminfo[0].strides, __pyx_pybuffernd_stencil.diminfo[0].suboffsets, __pyx_t_21, __pyx_pybuffernd_stencil.diminfo[1].strides, __pyx_pybuffernd_stencil.diminfo[1].suboffsets));
+
+          /* "pystencils/boundaries/createindexlistcython.pyx":35
+ *                     dx = stencil[dirIdx,0]
+ *                     dy = stencil[dirIdx,1]
+ *                     if flag_field[x + dx, y + dy] & boundary_mask:             # <<<<<<<<<<<<<<
+ *                         boundary_index_list.append((x,y, dirIdx))
+ *                         if single_link:
+ */
+          __pyx_t_22 = (__pyx_v_x + __pyx_v_dx);
+          __pyx_t_23 = (__pyx_v_y + __pyx_v_dy);
+          __pyx_t_14 = (((*__Pyx_BufPtrFull2d(short *, __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_flag_field.diminfo[0].strides, __pyx_pybuffernd_flag_field.diminfo[0].suboffsets, __pyx_t_23, __pyx_pybuffernd_flag_field.diminfo[1].strides, __pyx_pybuffernd_flag_field.diminfo[1].suboffsets)) & __pyx_v_boundary_mask) != 0);
+          if (__pyx_t_14) {
+
+            /* "pystencils/boundaries/createindexlistcython.pyx":36
+ *                     dy = stencil[dirIdx,1]
+ *                     if flag_field[x + dx, y + dy] & boundary_mask:
+ *                         boundary_index_list.append((x,y, dirIdx))             # <<<<<<<<<<<<<<
+ *                         if single_link:
+ *                             break
+ */
+            __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_x); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 36, __pyx_L1_error)
+            __Pyx_GOTREF(__pyx_t_3);
+            __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_y); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 36, __pyx_L1_error)
+            __Pyx_GOTREF(__pyx_t_1);
+            __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_dirIdx); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 36, __pyx_L1_error)
+            __Pyx_GOTREF(__pyx_t_2);
+            __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 36, __pyx_L1_error)
+            __Pyx_GOTREF(__pyx_t_4);
+            __Pyx_GIVEREF(__pyx_t_3);
+            PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3);
+            __Pyx_GIVEREF(__pyx_t_1);
+            PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_1);
+            __Pyx_GIVEREF(__pyx_t_2);
+            PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_t_2);
+            __pyx_t_3 = 0;
+            __pyx_t_1 = 0;
+            __pyx_t_2 = 0;
+            __pyx_t_24 = __Pyx_PyList_Append(__pyx_v_boundary_index_list, __pyx_t_4); if (unlikely(__pyx_t_24 == ((int)-1))) __PYX_ERR(0, 36, __pyx_L1_error)
+            __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+
+            /* "pystencils/boundaries/createindexlistcython.pyx":37
+ *                     if flag_field[x + dx, y + dy] & boundary_mask:
+ *                         boundary_index_list.append((x,y, dirIdx))
+ *                         if single_link:             # <<<<<<<<<<<<<<
+ *                             break
+ *     return boundary_index_list
+ */
+            __pyx_t_14 = (__pyx_v_single_link != 0);
+            if (__pyx_t_14) {
+
+              /* "pystencils/boundaries/createindexlistcython.pyx":38
+ *                         boundary_index_list.append((x,y, dirIdx))
+ *                         if single_link:
+ *                             break             # <<<<<<<<<<<<<<
+ *     return boundary_index_list
+ * 
+ */
+              goto __pyx_L11_break;
+
+              /* "pystencils/boundaries/createindexlistcython.pyx":37
+ *                     if flag_field[x + dx, y + dy] & boundary_mask:
+ *                         boundary_index_list.append((x,y, dirIdx))
+ *                         if single_link:             # <<<<<<<<<<<<<<
+ *                             break
+ *     return boundary_index_list
+ */
+            }
+
+            /* "pystencils/boundaries/createindexlistcython.pyx":35
+ *                     dx = stencil[dirIdx,0]
+ *                     dy = stencil[dirIdx,1]
+ *                     if flag_field[x + dx, y + dy] & boundary_mask:             # <<<<<<<<<<<<<<
+ *                         boundary_index_list.append((x,y, dirIdx))
+ *                         if single_link:
+ */
+          }
+        }
+        __pyx_L11_break:;
+
+        /* "pystencils/boundaries/createindexlistcython.pyx":31
+ *     for y in range(nr_of_ghost_layers, ys - nr_of_ghost_layers):
+ *         for x in range(nr_of_ghost_layers, xs - nr_of_ghost_layers):
+ *             if flag_field[x, y] & fluid_mask:             # <<<<<<<<<<<<<<
+ *                 for dirIdx in range(num_directions):
+ *                     dx = stencil[dirIdx,0]
+ */
+      }
+    }
+  }
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":39
+ *                         if single_link:
+ *                             break
+ *     return boundary_index_list             # <<<<<<<<<<<<<<
+ * 
+ * 
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(__pyx_v_boundary_index_list);
+  __pyx_r = __pyx_v_boundary_index_list;
+  goto __pyx_L0;
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":19
+ * @cython.boundscheck(False) # turn off bounds-checking for entire function
+ * @cython.wraparound(False)  # turn off negative index wrapping for entire function
+ * def create_boundary_neighbor_index_list_2d(object[IntegerType, ndim=2] flag_field,             # <<<<<<<<<<<<<<
+ *                                            int nr_of_ghost_layers, IntegerType boundary_mask, IntegerType fluid_mask,
+ *                                            object[int, ndim=2] stencil, int single_link):
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_4);
+  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
+    __Pyx_PyThreadState_declare
+    __Pyx_PyThreadState_assign
+    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
+    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_flag_field.rcbuffer->pybuffer);
+    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_stencil.rcbuffer->pybuffer);
+  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
+  __Pyx_AddTraceback("pystencils.boundaries.createindexlistcython.create_boundary_neighbor_index_list_2d", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  goto __pyx_L2;
+  __pyx_L0:;
+  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_flag_field.rcbuffer->pybuffer);
+  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_stencil.rcbuffer->pybuffer);
+  __pyx_L2:;
+  __Pyx_XDECREF(__pyx_v_boundary_index_list);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static PyObject *__pyx_fuse_1__pyx_pw_10pystencils_10boundaries_21createindexlistcython_11create_boundary_neighbor_index_list_2d(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyMethodDef __pyx_fuse_1__pyx_mdef_10pystencils_10boundaries_21createindexlistcython_11create_boundary_neighbor_index_list_2d = {"__pyx_fuse_1create_boundary_neighbor_index_list_2d", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_fuse_1__pyx_pw_10pystencils_10boundaries_21createindexlistcython_11create_boundary_neighbor_index_list_2d, METH_VARARGS|METH_KEYWORDS, 0};
+static PyObject *__pyx_fuse_1__pyx_pw_10pystencils_10boundaries_21createindexlistcython_11create_boundary_neighbor_index_list_2d(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_flag_field = 0;
+  int __pyx_v_nr_of_ghost_layers;
+  int __pyx_v_boundary_mask;
+  int __pyx_v_fluid_mask;
+  PyObject *__pyx_v_stencil = 0;
+  int __pyx_v_single_link;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("create_boundary_neighbor_index_list_2d (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_flag_field,&__pyx_n_s_nr_of_ghost_layers,&__pyx_n_s_boundary_mask,&__pyx_n_s_fluid_mask,&__pyx_n_s_stencil,&__pyx_n_s_single_link,0};
+    PyObject* values[6] = {0,0,0,0,0,0};
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
+        CYTHON_FALLTHROUGH;
+        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+        CYTHON_FALLTHROUGH;
+        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
+        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_flag_field)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
+        case  1:
+        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_nr_of_ghost_layers)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_neighbor_index_list_2d", 1, 6, 6, 1); __PYX_ERR(0, 19, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  2:
+        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_boundary_mask)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_neighbor_index_list_2d", 1, 6, 6, 2); __PYX_ERR(0, 19, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  3:
+        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_fluid_mask)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_neighbor_index_list_2d", 1, 6, 6, 3); __PYX_ERR(0, 19, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  4:
+        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_stencil)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_neighbor_index_list_2d", 1, 6, 6, 4); __PYX_ERR(0, 19, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  5:
+        if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_single_link)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_neighbor_index_list_2d", 1, 6, 6, 5); __PYX_ERR(0, 19, __pyx_L3_error)
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "create_boundary_neighbor_index_list_2d") < 0)) __PYX_ERR(0, 19, __pyx_L3_error)
+      }
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 6) {
+      goto __pyx_L5_argtuple_error;
+    } else {
+      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+      values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+      values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+      values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
+    }
+    __pyx_v_flag_field = ((PyObject *)values[0]);
+    __pyx_v_nr_of_ghost_layers = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_nr_of_ghost_layers == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 20, __pyx_L3_error)
+    __pyx_v_boundary_mask = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_boundary_mask == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 20, __pyx_L3_error)
+    __pyx_v_fluid_mask = __Pyx_PyInt_As_int(values[3]); if (unlikely((__pyx_v_fluid_mask == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 20, __pyx_L3_error)
+    __pyx_v_stencil = ((PyObject *)values[4]);
+    __pyx_v_single_link = __Pyx_PyInt_As_int(values[5]); if (unlikely((__pyx_v_single_link == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 21, __pyx_L3_error)
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("create_boundary_neighbor_index_list_2d", 1, 6, 6, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 19, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("pystencils.boundaries.createindexlistcython.create_boundary_neighbor_index_list_2d", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_10pystencils_10boundaries_21createindexlistcython_10create_boundary_neighbor_index_list_2d(__pyx_self, __pyx_v_flag_field, __pyx_v_nr_of_ghost_layers, __pyx_v_boundary_mask, __pyx_v_fluid_mask, __pyx_v_stencil, __pyx_v_single_link);
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_10pystencils_10boundaries_21createindexlistcython_10create_boundary_neighbor_index_list_2d(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_flag_field, int __pyx_v_nr_of_ghost_layers, int __pyx_v_boundary_mask, int __pyx_v_fluid_mask, PyObject *__pyx_v_stencil, int __pyx_v_single_link) {
+  int __pyx_v_xs;
+  int __pyx_v_ys;
+  int __pyx_v_x;
+  int __pyx_v_y;
+  int __pyx_v_dirIdx;
+  int __pyx_v_num_directions;
+  int __pyx_v_dx;
+  int __pyx_v_dy;
+  PyObject *__pyx_v_boundary_index_list = NULL;
+  __Pyx_LocalBuf_ND __pyx_pybuffernd_flag_field;
+  __Pyx_Buffer __pyx_pybuffer_flag_field;
+  __Pyx_LocalBuf_ND __pyx_pybuffernd_stencil;
+  __Pyx_Buffer __pyx_pybuffer_stencil;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
+  PyObject *(*__pyx_t_5)(PyObject *);
+  int __pyx_t_6;
+  int __pyx_t_7;
+  int __pyx_t_8;
+  int __pyx_t_9;
+  int __pyx_t_10;
+  int __pyx_t_11;
+  Py_ssize_t __pyx_t_12;
+  Py_ssize_t __pyx_t_13;
+  int __pyx_t_14;
+  int __pyx_t_15;
+  int __pyx_t_16;
+  int __pyx_t_17;
+  Py_ssize_t __pyx_t_18;
+  Py_ssize_t __pyx_t_19;
+  Py_ssize_t __pyx_t_20;
+  Py_ssize_t __pyx_t_21;
+  Py_ssize_t __pyx_t_22;
+  Py_ssize_t __pyx_t_23;
+  int __pyx_t_24;
+  __Pyx_RefNannySetupContext("__pyx_fuse_1create_boundary_neighbor_index_list_2d", 0);
+  __pyx_pybuffer_flag_field.pybuffer.buf = NULL;
+  __pyx_pybuffer_flag_field.refcount = 0;
+  __pyx_pybuffernd_flag_field.data = NULL;
+  __pyx_pybuffernd_flag_field.rcbuffer = &__pyx_pybuffer_flag_field;
+  __pyx_pybuffer_stencil.pybuffer.buf = NULL;
+  __pyx_pybuffer_stencil.refcount = 0;
+  __pyx_pybuffernd_stencil.data = NULL;
+  __pyx_pybuffernd_stencil.rcbuffer = &__pyx_pybuffer_stencil;
+  {
+    __Pyx_BufFmt_StackElem __pyx_stack[1];
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_flag_field.rcbuffer->pybuffer, (PyObject*)__pyx_v_flag_field, &__Pyx_TypeInfo_int, PyBUF_FORMAT| PyBUF_INDIRECT, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 19, __pyx_L1_error)
+  }
+  __pyx_pybuffernd_flag_field.diminfo[0].strides = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_flag_field.diminfo[0].shape = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_flag_field.diminfo[0].suboffsets = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.suboffsets[0]; __pyx_pybuffernd_flag_field.diminfo[1].strides = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_flag_field.diminfo[1].shape = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_flag_field.diminfo[1].suboffsets = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.suboffsets[1];
+  {
+    __Pyx_BufFmt_StackElem __pyx_stack[1];
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_stencil.rcbuffer->pybuffer, (PyObject*)__pyx_v_stencil, &__Pyx_TypeInfo_int, PyBUF_FORMAT| PyBUF_INDIRECT, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 19, __pyx_L1_error)
+  }
+  __pyx_pybuffernd_stencil.diminfo[0].strides = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_stencil.diminfo[0].shape = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_stencil.diminfo[0].suboffsets = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.suboffsets[0]; __pyx_pybuffernd_stencil.diminfo[1].strides = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_stencil.diminfo[1].shape = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_stencil.diminfo[1].suboffsets = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.suboffsets[1];
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":25
+ *     cdef int dirIdx, num_directions, dx, dy
+ * 
+ *     xs, ys = flag_field.shape             # <<<<<<<<<<<<<<
+ *     boundary_index_list = []
+ *     num_directions = stencil.shape[0]
+ */
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_flag_field), __pyx_n_s_shape); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 25, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) {
+    PyObject* sequence = __pyx_t_1;
+    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
+    if (unlikely(size != 2)) {
+      if (size > 2) __Pyx_RaiseTooManyValuesError(2);
+      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
+      __PYX_ERR(0, 25, __pyx_L1_error)
+    }
+    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+    if (likely(PyTuple_CheckExact(sequence))) {
+      __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
+      __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); 
+    } else {
+      __pyx_t_2 = PyList_GET_ITEM(sequence, 0); 
+      __pyx_t_3 = PyList_GET_ITEM(sequence, 1); 
+    }
+    __Pyx_INCREF(__pyx_t_2);
+    __Pyx_INCREF(__pyx_t_3);
+    #else
+    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 25, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_2);
+    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 25, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    #endif
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  } else {
+    Py_ssize_t index = -1;
+    __pyx_t_4 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 25, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __pyx_t_5 = Py_TYPE(__pyx_t_4)->tp_iternext;
+    index = 0; __pyx_t_2 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_2)) goto __pyx_L3_unpacking_failed;
+    __Pyx_GOTREF(__pyx_t_2);
+    index = 1; __pyx_t_3 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_3)) goto __pyx_L3_unpacking_failed;
+    __Pyx_GOTREF(__pyx_t_3);
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_5(__pyx_t_4), 2) < 0) __PYX_ERR(0, 25, __pyx_L1_error)
+    __pyx_t_5 = NULL;
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    goto __pyx_L4_unpacking_done;
+    __pyx_L3_unpacking_failed:;
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    __pyx_t_5 = NULL;
+    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
+    __PYX_ERR(0, 25, __pyx_L1_error)
+    __pyx_L4_unpacking_done:;
+  }
+  __pyx_t_6 = __Pyx_PyInt_As_int(__pyx_t_2); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 25, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_7 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 25, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __pyx_v_xs = __pyx_t_6;
+  __pyx_v_ys = __pyx_t_7;
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":26
+ * 
+ *     xs, ys = flag_field.shape
+ *     boundary_index_list = []             # <<<<<<<<<<<<<<
+ *     num_directions = stencil.shape[0]
+ * 
+ */
+  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 26, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_boundary_index_list = ((PyObject*)__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":27
+ *     xs, ys = flag_field.shape
+ *     boundary_index_list = []
+ *     num_directions = stencil.shape[0]             # <<<<<<<<<<<<<<
+ * 
+ *     for y in range(nr_of_ghost_layers, ys - nr_of_ghost_layers):
+ */
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_stencil), __pyx_n_s_shape); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 27, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_3 = __Pyx_GetItemInt(__pyx_t_1, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 27, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_7 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 27, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __pyx_v_num_directions = __pyx_t_7;
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":29
+ *     num_directions = stencil.shape[0]
+ * 
+ *     for y in range(nr_of_ghost_layers, ys - nr_of_ghost_layers):             # <<<<<<<<<<<<<<
+ *         for x in range(nr_of_ghost_layers, xs - nr_of_ghost_layers):
+ *             if flag_field[x, y] & fluid_mask:
+ */
+  __pyx_t_7 = (__pyx_v_ys - __pyx_v_nr_of_ghost_layers);
+  __pyx_t_6 = __pyx_t_7;
+  for (__pyx_t_8 = __pyx_v_nr_of_ghost_layers; __pyx_t_8 < __pyx_t_6; __pyx_t_8+=1) {
+    __pyx_v_y = __pyx_t_8;
+
+    /* "pystencils/boundaries/createindexlistcython.pyx":30
+ * 
+ *     for y in range(nr_of_ghost_layers, ys - nr_of_ghost_layers):
+ *         for x in range(nr_of_ghost_layers, xs - nr_of_ghost_layers):             # <<<<<<<<<<<<<<
+ *             if flag_field[x, y] & fluid_mask:
+ *                 for dirIdx in range(num_directions):
+ */
+    __pyx_t_9 = (__pyx_v_xs - __pyx_v_nr_of_ghost_layers);
+    __pyx_t_10 = __pyx_t_9;
+    for (__pyx_t_11 = __pyx_v_nr_of_ghost_layers; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {
+      __pyx_v_x = __pyx_t_11;
+
+      /* "pystencils/boundaries/createindexlistcython.pyx":31
+ *     for y in range(nr_of_ghost_layers, ys - nr_of_ghost_layers):
+ *         for x in range(nr_of_ghost_layers, xs - nr_of_ghost_layers):
+ *             if flag_field[x, y] & fluid_mask:             # <<<<<<<<<<<<<<
+ *                 for dirIdx in range(num_directions):
+ *                     dx = stencil[dirIdx,0]
+ */
+      __pyx_t_12 = __pyx_v_x;
+      __pyx_t_13 = __pyx_v_y;
+      __pyx_t_14 = (((*__Pyx_BufPtrFull2d(int *, __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_flag_field.diminfo[0].strides, __pyx_pybuffernd_flag_field.diminfo[0].suboffsets, __pyx_t_13, __pyx_pybuffernd_flag_field.diminfo[1].strides, __pyx_pybuffernd_flag_field.diminfo[1].suboffsets)) & __pyx_v_fluid_mask) != 0);
+      if (__pyx_t_14) {
+
+        /* "pystencils/boundaries/createindexlistcython.pyx":32
+ *         for x in range(nr_of_ghost_layers, xs - nr_of_ghost_layers):
+ *             if flag_field[x, y] & fluid_mask:
+ *                 for dirIdx in range(num_directions):             # <<<<<<<<<<<<<<
+ *                     dx = stencil[dirIdx,0]
+ *                     dy = stencil[dirIdx,1]
+ */
+        __pyx_t_15 = __pyx_v_num_directions;
+        __pyx_t_16 = __pyx_t_15;
+        for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) {
+          __pyx_v_dirIdx = __pyx_t_17;
+
+          /* "pystencils/boundaries/createindexlistcython.pyx":33
+ *             if flag_field[x, y] & fluid_mask:
+ *                 for dirIdx in range(num_directions):
+ *                     dx = stencil[dirIdx,0]             # <<<<<<<<<<<<<<
+ *                     dy = stencil[dirIdx,1]
+ *                     if flag_field[x + dx, y + dy] & boundary_mask:
+ */
+          __pyx_t_18 = __pyx_v_dirIdx;
+          __pyx_t_19 = 0;
+          __pyx_v_dx = (*__Pyx_BufPtrFull2d(int *, __pyx_pybuffernd_stencil.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_stencil.diminfo[0].strides, __pyx_pybuffernd_stencil.diminfo[0].suboffsets, __pyx_t_19, __pyx_pybuffernd_stencil.diminfo[1].strides, __pyx_pybuffernd_stencil.diminfo[1].suboffsets));
+
+          /* "pystencils/boundaries/createindexlistcython.pyx":34
+ *                 for dirIdx in range(num_directions):
+ *                     dx = stencil[dirIdx,0]
+ *                     dy = stencil[dirIdx,1]             # <<<<<<<<<<<<<<
+ *                     if flag_field[x + dx, y + dy] & boundary_mask:
+ *                         boundary_index_list.append((x,y, dirIdx))
+ */
+          __pyx_t_20 = __pyx_v_dirIdx;
+          __pyx_t_21 = 1;
+          __pyx_v_dy = (*__Pyx_BufPtrFull2d(int *, __pyx_pybuffernd_stencil.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_stencil.diminfo[0].strides, __pyx_pybuffernd_stencil.diminfo[0].suboffsets, __pyx_t_21, __pyx_pybuffernd_stencil.diminfo[1].strides, __pyx_pybuffernd_stencil.diminfo[1].suboffsets));
+
+          /* "pystencils/boundaries/createindexlistcython.pyx":35
+ *                     dx = stencil[dirIdx,0]
+ *                     dy = stencil[dirIdx,1]
+ *                     if flag_field[x + dx, y + dy] & boundary_mask:             # <<<<<<<<<<<<<<
+ *                         boundary_index_list.append((x,y, dirIdx))
+ *                         if single_link:
+ */
+          __pyx_t_22 = (__pyx_v_x + __pyx_v_dx);
+          __pyx_t_23 = (__pyx_v_y + __pyx_v_dy);
+          __pyx_t_14 = (((*__Pyx_BufPtrFull2d(int *, __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_flag_field.diminfo[0].strides, __pyx_pybuffernd_flag_field.diminfo[0].suboffsets, __pyx_t_23, __pyx_pybuffernd_flag_field.diminfo[1].strides, __pyx_pybuffernd_flag_field.diminfo[1].suboffsets)) & __pyx_v_boundary_mask) != 0);
+          if (__pyx_t_14) {
+
+            /* "pystencils/boundaries/createindexlistcython.pyx":36
+ *                     dy = stencil[dirIdx,1]
+ *                     if flag_field[x + dx, y + dy] & boundary_mask:
+ *                         boundary_index_list.append((x,y, dirIdx))             # <<<<<<<<<<<<<<
+ *                         if single_link:
+ *                             break
+ */
+            __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_x); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 36, __pyx_L1_error)
+            __Pyx_GOTREF(__pyx_t_3);
+            __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_y); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 36, __pyx_L1_error)
+            __Pyx_GOTREF(__pyx_t_1);
+            __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_dirIdx); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 36, __pyx_L1_error)
+            __Pyx_GOTREF(__pyx_t_2);
+            __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 36, __pyx_L1_error)
+            __Pyx_GOTREF(__pyx_t_4);
+            __Pyx_GIVEREF(__pyx_t_3);
+            PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3);
+            __Pyx_GIVEREF(__pyx_t_1);
+            PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_1);
+            __Pyx_GIVEREF(__pyx_t_2);
+            PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_t_2);
+            __pyx_t_3 = 0;
+            __pyx_t_1 = 0;
+            __pyx_t_2 = 0;
+            __pyx_t_24 = __Pyx_PyList_Append(__pyx_v_boundary_index_list, __pyx_t_4); if (unlikely(__pyx_t_24 == ((int)-1))) __PYX_ERR(0, 36, __pyx_L1_error)
+            __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+
+            /* "pystencils/boundaries/createindexlistcython.pyx":37
+ *                     if flag_field[x + dx, y + dy] & boundary_mask:
+ *                         boundary_index_list.append((x,y, dirIdx))
+ *                         if single_link:             # <<<<<<<<<<<<<<
+ *                             break
+ *     return boundary_index_list
+ */
+            __pyx_t_14 = (__pyx_v_single_link != 0);
+            if (__pyx_t_14) {
+
+              /* "pystencils/boundaries/createindexlistcython.pyx":38
+ *                         boundary_index_list.append((x,y, dirIdx))
+ *                         if single_link:
+ *                             break             # <<<<<<<<<<<<<<
+ *     return boundary_index_list
+ * 
+ */
+              goto __pyx_L11_break;
+
+              /* "pystencils/boundaries/createindexlistcython.pyx":37
+ *                     if flag_field[x + dx, y + dy] & boundary_mask:
+ *                         boundary_index_list.append((x,y, dirIdx))
+ *                         if single_link:             # <<<<<<<<<<<<<<
+ *                             break
+ *     return boundary_index_list
+ */
+            }
+
+            /* "pystencils/boundaries/createindexlistcython.pyx":35
+ *                     dx = stencil[dirIdx,0]
+ *                     dy = stencil[dirIdx,1]
+ *                     if flag_field[x + dx, y + dy] & boundary_mask:             # <<<<<<<<<<<<<<
+ *                         boundary_index_list.append((x,y, dirIdx))
+ *                         if single_link:
+ */
+          }
+        }
+        __pyx_L11_break:;
+
+        /* "pystencils/boundaries/createindexlistcython.pyx":31
+ *     for y in range(nr_of_ghost_layers, ys - nr_of_ghost_layers):
+ *         for x in range(nr_of_ghost_layers, xs - nr_of_ghost_layers):
+ *             if flag_field[x, y] & fluid_mask:             # <<<<<<<<<<<<<<
+ *                 for dirIdx in range(num_directions):
+ *                     dx = stencil[dirIdx,0]
+ */
+      }
+    }
+  }
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":39
+ *                         if single_link:
+ *                             break
+ *     return boundary_index_list             # <<<<<<<<<<<<<<
+ * 
+ * 
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(__pyx_v_boundary_index_list);
+  __pyx_r = __pyx_v_boundary_index_list;
+  goto __pyx_L0;
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":19
+ * @cython.boundscheck(False) # turn off bounds-checking for entire function
+ * @cython.wraparound(False)  # turn off negative index wrapping for entire function
+ * def create_boundary_neighbor_index_list_2d(object[IntegerType, ndim=2] flag_field,             # <<<<<<<<<<<<<<
+ *                                            int nr_of_ghost_layers, IntegerType boundary_mask, IntegerType fluid_mask,
+ *                                            object[int, ndim=2] stencil, int single_link):
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_4);
+  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
+    __Pyx_PyThreadState_declare
+    __Pyx_PyThreadState_assign
+    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
+    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_flag_field.rcbuffer->pybuffer);
+    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_stencil.rcbuffer->pybuffer);
+  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
+  __Pyx_AddTraceback("pystencils.boundaries.createindexlistcython.create_boundary_neighbor_index_list_2d", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  goto __pyx_L2;
+  __pyx_L0:;
+  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_flag_field.rcbuffer->pybuffer);
+  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_stencil.rcbuffer->pybuffer);
+  __pyx_L2:;
+  __Pyx_XDECREF(__pyx_v_boundary_index_list);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static PyObject *__pyx_fuse_2__pyx_pw_10pystencils_10boundaries_21createindexlistcython_13create_boundary_neighbor_index_list_2d(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyMethodDef __pyx_fuse_2__pyx_mdef_10pystencils_10boundaries_21createindexlistcython_13create_boundary_neighbor_index_list_2d = {"__pyx_fuse_2create_boundary_neighbor_index_list_2d", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_fuse_2__pyx_pw_10pystencils_10boundaries_21createindexlistcython_13create_boundary_neighbor_index_list_2d, METH_VARARGS|METH_KEYWORDS, 0};
+static PyObject *__pyx_fuse_2__pyx_pw_10pystencils_10boundaries_21createindexlistcython_13create_boundary_neighbor_index_list_2d(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_flag_field = 0;
+  int __pyx_v_nr_of_ghost_layers;
+  long __pyx_v_boundary_mask;
+  long __pyx_v_fluid_mask;
+  PyObject *__pyx_v_stencil = 0;
+  int __pyx_v_single_link;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("create_boundary_neighbor_index_list_2d (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_flag_field,&__pyx_n_s_nr_of_ghost_layers,&__pyx_n_s_boundary_mask,&__pyx_n_s_fluid_mask,&__pyx_n_s_stencil,&__pyx_n_s_single_link,0};
+    PyObject* values[6] = {0,0,0,0,0,0};
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
+        CYTHON_FALLTHROUGH;
+        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+        CYTHON_FALLTHROUGH;
+        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
+        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_flag_field)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
+        case  1:
+        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_nr_of_ghost_layers)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_neighbor_index_list_2d", 1, 6, 6, 1); __PYX_ERR(0, 19, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  2:
+        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_boundary_mask)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_neighbor_index_list_2d", 1, 6, 6, 2); __PYX_ERR(0, 19, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  3:
+        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_fluid_mask)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_neighbor_index_list_2d", 1, 6, 6, 3); __PYX_ERR(0, 19, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  4:
+        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_stencil)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_neighbor_index_list_2d", 1, 6, 6, 4); __PYX_ERR(0, 19, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  5:
+        if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_single_link)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_neighbor_index_list_2d", 1, 6, 6, 5); __PYX_ERR(0, 19, __pyx_L3_error)
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "create_boundary_neighbor_index_list_2d") < 0)) __PYX_ERR(0, 19, __pyx_L3_error)
+      }
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 6) {
+      goto __pyx_L5_argtuple_error;
+    } else {
+      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+      values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+      values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+      values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
+    }
+    __pyx_v_flag_field = ((PyObject *)values[0]);
+    __pyx_v_nr_of_ghost_layers = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_nr_of_ghost_layers == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 20, __pyx_L3_error)
+    __pyx_v_boundary_mask = __Pyx_PyInt_As_long(values[2]); if (unlikely((__pyx_v_boundary_mask == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 20, __pyx_L3_error)
+    __pyx_v_fluid_mask = __Pyx_PyInt_As_long(values[3]); if (unlikely((__pyx_v_fluid_mask == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 20, __pyx_L3_error)
+    __pyx_v_stencil = ((PyObject *)values[4]);
+    __pyx_v_single_link = __Pyx_PyInt_As_int(values[5]); if (unlikely((__pyx_v_single_link == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 21, __pyx_L3_error)
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("create_boundary_neighbor_index_list_2d", 1, 6, 6, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 19, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("pystencils.boundaries.createindexlistcython.create_boundary_neighbor_index_list_2d", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_10pystencils_10boundaries_21createindexlistcython_12create_boundary_neighbor_index_list_2d(__pyx_self, __pyx_v_flag_field, __pyx_v_nr_of_ghost_layers, __pyx_v_boundary_mask, __pyx_v_fluid_mask, __pyx_v_stencil, __pyx_v_single_link);
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_10pystencils_10boundaries_21createindexlistcython_12create_boundary_neighbor_index_list_2d(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_flag_field, int __pyx_v_nr_of_ghost_layers, long __pyx_v_boundary_mask, long __pyx_v_fluid_mask, PyObject *__pyx_v_stencil, int __pyx_v_single_link) {
+  int __pyx_v_xs;
+  int __pyx_v_ys;
+  int __pyx_v_x;
+  int __pyx_v_y;
+  int __pyx_v_dirIdx;
+  int __pyx_v_num_directions;
+  int __pyx_v_dx;
+  int __pyx_v_dy;
+  PyObject *__pyx_v_boundary_index_list = NULL;
+  __Pyx_LocalBuf_ND __pyx_pybuffernd_flag_field;
+  __Pyx_Buffer __pyx_pybuffer_flag_field;
+  __Pyx_LocalBuf_ND __pyx_pybuffernd_stencil;
+  __Pyx_Buffer __pyx_pybuffer_stencil;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
+  PyObject *(*__pyx_t_5)(PyObject *);
+  int __pyx_t_6;
+  int __pyx_t_7;
+  int __pyx_t_8;
+  int __pyx_t_9;
+  int __pyx_t_10;
+  int __pyx_t_11;
+  Py_ssize_t __pyx_t_12;
+  Py_ssize_t __pyx_t_13;
+  int __pyx_t_14;
+  int __pyx_t_15;
+  int __pyx_t_16;
+  int __pyx_t_17;
+  Py_ssize_t __pyx_t_18;
+  Py_ssize_t __pyx_t_19;
+  Py_ssize_t __pyx_t_20;
+  Py_ssize_t __pyx_t_21;
+  Py_ssize_t __pyx_t_22;
+  Py_ssize_t __pyx_t_23;
+  int __pyx_t_24;
+  __Pyx_RefNannySetupContext("__pyx_fuse_2create_boundary_neighbor_index_list_2d", 0);
+  __pyx_pybuffer_flag_field.pybuffer.buf = NULL;
+  __pyx_pybuffer_flag_field.refcount = 0;
+  __pyx_pybuffernd_flag_field.data = NULL;
+  __pyx_pybuffernd_flag_field.rcbuffer = &__pyx_pybuffer_flag_field;
+  __pyx_pybuffer_stencil.pybuffer.buf = NULL;
+  __pyx_pybuffer_stencil.refcount = 0;
+  __pyx_pybuffernd_stencil.data = NULL;
+  __pyx_pybuffernd_stencil.rcbuffer = &__pyx_pybuffer_stencil;
+  {
+    __Pyx_BufFmt_StackElem __pyx_stack[1];
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_flag_field.rcbuffer->pybuffer, (PyObject*)__pyx_v_flag_field, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_INDIRECT, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 19, __pyx_L1_error)
+  }
+  __pyx_pybuffernd_flag_field.diminfo[0].strides = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_flag_field.diminfo[0].shape = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_flag_field.diminfo[0].suboffsets = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.suboffsets[0]; __pyx_pybuffernd_flag_field.diminfo[1].strides = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_flag_field.diminfo[1].shape = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_flag_field.diminfo[1].suboffsets = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.suboffsets[1];
+  {
+    __Pyx_BufFmt_StackElem __pyx_stack[1];
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_stencil.rcbuffer->pybuffer, (PyObject*)__pyx_v_stencil, &__Pyx_TypeInfo_int, PyBUF_FORMAT| PyBUF_INDIRECT, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 19, __pyx_L1_error)
+  }
+  __pyx_pybuffernd_stencil.diminfo[0].strides = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_stencil.diminfo[0].shape = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_stencil.diminfo[0].suboffsets = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.suboffsets[0]; __pyx_pybuffernd_stencil.diminfo[1].strides = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_stencil.diminfo[1].shape = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_stencil.diminfo[1].suboffsets = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.suboffsets[1];
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":25
+ *     cdef int dirIdx, num_directions, dx, dy
+ * 
+ *     xs, ys = flag_field.shape             # <<<<<<<<<<<<<<
+ *     boundary_index_list = []
+ *     num_directions = stencil.shape[0]
+ */
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_flag_field), __pyx_n_s_shape); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 25, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) {
+    PyObject* sequence = __pyx_t_1;
+    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
+    if (unlikely(size != 2)) {
+      if (size > 2) __Pyx_RaiseTooManyValuesError(2);
+      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
+      __PYX_ERR(0, 25, __pyx_L1_error)
+    }
+    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+    if (likely(PyTuple_CheckExact(sequence))) {
+      __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
+      __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); 
+    } else {
+      __pyx_t_2 = PyList_GET_ITEM(sequence, 0); 
+      __pyx_t_3 = PyList_GET_ITEM(sequence, 1); 
+    }
+    __Pyx_INCREF(__pyx_t_2);
+    __Pyx_INCREF(__pyx_t_3);
+    #else
+    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 25, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_2);
+    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 25, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    #endif
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  } else {
+    Py_ssize_t index = -1;
+    __pyx_t_4 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 25, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __pyx_t_5 = Py_TYPE(__pyx_t_4)->tp_iternext;
+    index = 0; __pyx_t_2 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_2)) goto __pyx_L3_unpacking_failed;
+    __Pyx_GOTREF(__pyx_t_2);
+    index = 1; __pyx_t_3 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_3)) goto __pyx_L3_unpacking_failed;
+    __Pyx_GOTREF(__pyx_t_3);
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_5(__pyx_t_4), 2) < 0) __PYX_ERR(0, 25, __pyx_L1_error)
+    __pyx_t_5 = NULL;
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    goto __pyx_L4_unpacking_done;
+    __pyx_L3_unpacking_failed:;
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    __pyx_t_5 = NULL;
+    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
+    __PYX_ERR(0, 25, __pyx_L1_error)
+    __pyx_L4_unpacking_done:;
+  }
+  __pyx_t_6 = __Pyx_PyInt_As_int(__pyx_t_2); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 25, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_7 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 25, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __pyx_v_xs = __pyx_t_6;
+  __pyx_v_ys = __pyx_t_7;
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":26
+ * 
+ *     xs, ys = flag_field.shape
+ *     boundary_index_list = []             # <<<<<<<<<<<<<<
+ *     num_directions = stencil.shape[0]
+ * 
+ */
+  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 26, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_boundary_index_list = ((PyObject*)__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":27
+ *     xs, ys = flag_field.shape
+ *     boundary_index_list = []
+ *     num_directions = stencil.shape[0]             # <<<<<<<<<<<<<<
+ * 
+ *     for y in range(nr_of_ghost_layers, ys - nr_of_ghost_layers):
+ */
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_stencil), __pyx_n_s_shape); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 27, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_3 = __Pyx_GetItemInt(__pyx_t_1, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 27, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_7 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 27, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __pyx_v_num_directions = __pyx_t_7;
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":29
+ *     num_directions = stencil.shape[0]
+ * 
+ *     for y in range(nr_of_ghost_layers, ys - nr_of_ghost_layers):             # <<<<<<<<<<<<<<
+ *         for x in range(nr_of_ghost_layers, xs - nr_of_ghost_layers):
+ *             if flag_field[x, y] & fluid_mask:
+ */
+  __pyx_t_7 = (__pyx_v_ys - __pyx_v_nr_of_ghost_layers);
+  __pyx_t_6 = __pyx_t_7;
+  for (__pyx_t_8 = __pyx_v_nr_of_ghost_layers; __pyx_t_8 < __pyx_t_6; __pyx_t_8+=1) {
+    __pyx_v_y = __pyx_t_8;
+
+    /* "pystencils/boundaries/createindexlistcython.pyx":30
+ * 
+ *     for y in range(nr_of_ghost_layers, ys - nr_of_ghost_layers):
+ *         for x in range(nr_of_ghost_layers, xs - nr_of_ghost_layers):             # <<<<<<<<<<<<<<
+ *             if flag_field[x, y] & fluid_mask:
+ *                 for dirIdx in range(num_directions):
+ */
+    __pyx_t_9 = (__pyx_v_xs - __pyx_v_nr_of_ghost_layers);
+    __pyx_t_10 = __pyx_t_9;
+    for (__pyx_t_11 = __pyx_v_nr_of_ghost_layers; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {
+      __pyx_v_x = __pyx_t_11;
+
+      /* "pystencils/boundaries/createindexlistcython.pyx":31
+ *     for y in range(nr_of_ghost_layers, ys - nr_of_ghost_layers):
+ *         for x in range(nr_of_ghost_layers, xs - nr_of_ghost_layers):
+ *             if flag_field[x, y] & fluid_mask:             # <<<<<<<<<<<<<<
+ *                 for dirIdx in range(num_directions):
+ *                     dx = stencil[dirIdx,0]
+ */
+      __pyx_t_12 = __pyx_v_x;
+      __pyx_t_13 = __pyx_v_y;
+      __pyx_t_14 = (((*__Pyx_BufPtrFull2d(long *, __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_flag_field.diminfo[0].strides, __pyx_pybuffernd_flag_field.diminfo[0].suboffsets, __pyx_t_13, __pyx_pybuffernd_flag_field.diminfo[1].strides, __pyx_pybuffernd_flag_field.diminfo[1].suboffsets)) & __pyx_v_fluid_mask) != 0);
+      if (__pyx_t_14) {
+
+        /* "pystencils/boundaries/createindexlistcython.pyx":32
+ *         for x in range(nr_of_ghost_layers, xs - nr_of_ghost_layers):
+ *             if flag_field[x, y] & fluid_mask:
+ *                 for dirIdx in range(num_directions):             # <<<<<<<<<<<<<<
+ *                     dx = stencil[dirIdx,0]
+ *                     dy = stencil[dirIdx,1]
+ */
+        __pyx_t_15 = __pyx_v_num_directions;
+        __pyx_t_16 = __pyx_t_15;
+        for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) {
+          __pyx_v_dirIdx = __pyx_t_17;
+
+          /* "pystencils/boundaries/createindexlistcython.pyx":33
+ *             if flag_field[x, y] & fluid_mask:
+ *                 for dirIdx in range(num_directions):
+ *                     dx = stencil[dirIdx,0]             # <<<<<<<<<<<<<<
+ *                     dy = stencil[dirIdx,1]
+ *                     if flag_field[x + dx, y + dy] & boundary_mask:
+ */
+          __pyx_t_18 = __pyx_v_dirIdx;
+          __pyx_t_19 = 0;
+          __pyx_v_dx = (*__Pyx_BufPtrFull2d(int *, __pyx_pybuffernd_stencil.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_stencil.diminfo[0].strides, __pyx_pybuffernd_stencil.diminfo[0].suboffsets, __pyx_t_19, __pyx_pybuffernd_stencil.diminfo[1].strides, __pyx_pybuffernd_stencil.diminfo[1].suboffsets));
+
+          /* "pystencils/boundaries/createindexlistcython.pyx":34
+ *                 for dirIdx in range(num_directions):
+ *                     dx = stencil[dirIdx,0]
+ *                     dy = stencil[dirIdx,1]             # <<<<<<<<<<<<<<
+ *                     if flag_field[x + dx, y + dy] & boundary_mask:
+ *                         boundary_index_list.append((x,y, dirIdx))
+ */
+          __pyx_t_20 = __pyx_v_dirIdx;
+          __pyx_t_21 = 1;
+          __pyx_v_dy = (*__Pyx_BufPtrFull2d(int *, __pyx_pybuffernd_stencil.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_stencil.diminfo[0].strides, __pyx_pybuffernd_stencil.diminfo[0].suboffsets, __pyx_t_21, __pyx_pybuffernd_stencil.diminfo[1].strides, __pyx_pybuffernd_stencil.diminfo[1].suboffsets));
+
+          /* "pystencils/boundaries/createindexlistcython.pyx":35
+ *                     dx = stencil[dirIdx,0]
+ *                     dy = stencil[dirIdx,1]
+ *                     if flag_field[x + dx, y + dy] & boundary_mask:             # <<<<<<<<<<<<<<
+ *                         boundary_index_list.append((x,y, dirIdx))
+ *                         if single_link:
+ */
+          __pyx_t_22 = (__pyx_v_x + __pyx_v_dx);
+          __pyx_t_23 = (__pyx_v_y + __pyx_v_dy);
+          __pyx_t_14 = (((*__Pyx_BufPtrFull2d(long *, __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_flag_field.diminfo[0].strides, __pyx_pybuffernd_flag_field.diminfo[0].suboffsets, __pyx_t_23, __pyx_pybuffernd_flag_field.diminfo[1].strides, __pyx_pybuffernd_flag_field.diminfo[1].suboffsets)) & __pyx_v_boundary_mask) != 0);
+          if (__pyx_t_14) {
+
+            /* "pystencils/boundaries/createindexlistcython.pyx":36
+ *                     dy = stencil[dirIdx,1]
+ *                     if flag_field[x + dx, y + dy] & boundary_mask:
+ *                         boundary_index_list.append((x,y, dirIdx))             # <<<<<<<<<<<<<<
+ *                         if single_link:
+ *                             break
+ */
+            __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_x); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 36, __pyx_L1_error)
+            __Pyx_GOTREF(__pyx_t_3);
+            __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_y); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 36, __pyx_L1_error)
+            __Pyx_GOTREF(__pyx_t_1);
+            __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_dirIdx); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 36, __pyx_L1_error)
+            __Pyx_GOTREF(__pyx_t_2);
+            __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 36, __pyx_L1_error)
+            __Pyx_GOTREF(__pyx_t_4);
+            __Pyx_GIVEREF(__pyx_t_3);
+            PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3);
+            __Pyx_GIVEREF(__pyx_t_1);
+            PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_1);
+            __Pyx_GIVEREF(__pyx_t_2);
+            PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_t_2);
+            __pyx_t_3 = 0;
+            __pyx_t_1 = 0;
+            __pyx_t_2 = 0;
+            __pyx_t_24 = __Pyx_PyList_Append(__pyx_v_boundary_index_list, __pyx_t_4); if (unlikely(__pyx_t_24 == ((int)-1))) __PYX_ERR(0, 36, __pyx_L1_error)
+            __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+
+            /* "pystencils/boundaries/createindexlistcython.pyx":37
+ *                     if flag_field[x + dx, y + dy] & boundary_mask:
+ *                         boundary_index_list.append((x,y, dirIdx))
+ *                         if single_link:             # <<<<<<<<<<<<<<
+ *                             break
+ *     return boundary_index_list
+ */
+            __pyx_t_14 = (__pyx_v_single_link != 0);
+            if (__pyx_t_14) {
+
+              /* "pystencils/boundaries/createindexlistcython.pyx":38
+ *                         boundary_index_list.append((x,y, dirIdx))
+ *                         if single_link:
+ *                             break             # <<<<<<<<<<<<<<
+ *     return boundary_index_list
+ * 
+ */
+              goto __pyx_L11_break;
+
+              /* "pystencils/boundaries/createindexlistcython.pyx":37
+ *                     if flag_field[x + dx, y + dy] & boundary_mask:
+ *                         boundary_index_list.append((x,y, dirIdx))
+ *                         if single_link:             # <<<<<<<<<<<<<<
+ *                             break
+ *     return boundary_index_list
+ */
+            }
+
+            /* "pystencils/boundaries/createindexlistcython.pyx":35
+ *                     dx = stencil[dirIdx,0]
+ *                     dy = stencil[dirIdx,1]
+ *                     if flag_field[x + dx, y + dy] & boundary_mask:             # <<<<<<<<<<<<<<
+ *                         boundary_index_list.append((x,y, dirIdx))
+ *                         if single_link:
+ */
+          }
+        }
+        __pyx_L11_break:;
+
+        /* "pystencils/boundaries/createindexlistcython.pyx":31
+ *     for y in range(nr_of_ghost_layers, ys - nr_of_ghost_layers):
+ *         for x in range(nr_of_ghost_layers, xs - nr_of_ghost_layers):
+ *             if flag_field[x, y] & fluid_mask:             # <<<<<<<<<<<<<<
+ *                 for dirIdx in range(num_directions):
+ *                     dx = stencil[dirIdx,0]
+ */
+      }
+    }
+  }
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":39
+ *                         if single_link:
+ *                             break
+ *     return boundary_index_list             # <<<<<<<<<<<<<<
+ * 
+ * 
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(__pyx_v_boundary_index_list);
+  __pyx_r = __pyx_v_boundary_index_list;
+  goto __pyx_L0;
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":19
+ * @cython.boundscheck(False) # turn off bounds-checking for entire function
+ * @cython.wraparound(False)  # turn off negative index wrapping for entire function
+ * def create_boundary_neighbor_index_list_2d(object[IntegerType, ndim=2] flag_field,             # <<<<<<<<<<<<<<
+ *                                            int nr_of_ghost_layers, IntegerType boundary_mask, IntegerType fluid_mask,
+ *                                            object[int, ndim=2] stencil, int single_link):
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_4);
+  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
+    __Pyx_PyThreadState_declare
+    __Pyx_PyThreadState_assign
+    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
+    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_flag_field.rcbuffer->pybuffer);
+    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_stencil.rcbuffer->pybuffer);
+  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
+  __Pyx_AddTraceback("pystencils.boundaries.createindexlistcython.create_boundary_neighbor_index_list_2d", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  goto __pyx_L2;
+  __pyx_L0:;
+  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_flag_field.rcbuffer->pybuffer);
+  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_stencil.rcbuffer->pybuffer);
+  __pyx_L2:;
+  __Pyx_XDECREF(__pyx_v_boundary_index_list);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static PyObject *__pyx_fuse_3__pyx_pw_10pystencils_10boundaries_21createindexlistcython_15create_boundary_neighbor_index_list_2d(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyMethodDef __pyx_fuse_3__pyx_mdef_10pystencils_10boundaries_21createindexlistcython_15create_boundary_neighbor_index_list_2d = {"__pyx_fuse_3create_boundary_neighbor_index_list_2d", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_fuse_3__pyx_pw_10pystencils_10boundaries_21createindexlistcython_15create_boundary_neighbor_index_list_2d, METH_VARARGS|METH_KEYWORDS, 0};
+static PyObject *__pyx_fuse_3__pyx_pw_10pystencils_10boundaries_21createindexlistcython_15create_boundary_neighbor_index_list_2d(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_flag_field = 0;
+  int __pyx_v_nr_of_ghost_layers;
+  PY_LONG_LONG __pyx_v_boundary_mask;
+  PY_LONG_LONG __pyx_v_fluid_mask;
+  PyObject *__pyx_v_stencil = 0;
+  int __pyx_v_single_link;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("create_boundary_neighbor_index_list_2d (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_flag_field,&__pyx_n_s_nr_of_ghost_layers,&__pyx_n_s_boundary_mask,&__pyx_n_s_fluid_mask,&__pyx_n_s_stencil,&__pyx_n_s_single_link,0};
+    PyObject* values[6] = {0,0,0,0,0,0};
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
+        CYTHON_FALLTHROUGH;
+        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+        CYTHON_FALLTHROUGH;
+        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
+        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_flag_field)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
+        case  1:
+        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_nr_of_ghost_layers)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_neighbor_index_list_2d", 1, 6, 6, 1); __PYX_ERR(0, 19, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  2:
+        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_boundary_mask)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_neighbor_index_list_2d", 1, 6, 6, 2); __PYX_ERR(0, 19, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  3:
+        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_fluid_mask)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_neighbor_index_list_2d", 1, 6, 6, 3); __PYX_ERR(0, 19, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  4:
+        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_stencil)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_neighbor_index_list_2d", 1, 6, 6, 4); __PYX_ERR(0, 19, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  5:
+        if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_single_link)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_neighbor_index_list_2d", 1, 6, 6, 5); __PYX_ERR(0, 19, __pyx_L3_error)
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "create_boundary_neighbor_index_list_2d") < 0)) __PYX_ERR(0, 19, __pyx_L3_error)
+      }
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 6) {
+      goto __pyx_L5_argtuple_error;
+    } else {
+      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+      values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+      values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+      values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
+    }
+    __pyx_v_flag_field = ((PyObject *)values[0]);
+    __pyx_v_nr_of_ghost_layers = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_nr_of_ghost_layers == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 20, __pyx_L3_error)
+    __pyx_v_boundary_mask = __Pyx_PyInt_As_PY_LONG_LONG(values[2]); if (unlikely((__pyx_v_boundary_mask == (PY_LONG_LONG)-1) && PyErr_Occurred())) __PYX_ERR(0, 20, __pyx_L3_error)
+    __pyx_v_fluid_mask = __Pyx_PyInt_As_PY_LONG_LONG(values[3]); if (unlikely((__pyx_v_fluid_mask == (PY_LONG_LONG)-1) && PyErr_Occurred())) __PYX_ERR(0, 20, __pyx_L3_error)
+    __pyx_v_stencil = ((PyObject *)values[4]);
+    __pyx_v_single_link = __Pyx_PyInt_As_int(values[5]); if (unlikely((__pyx_v_single_link == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 21, __pyx_L3_error)
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("create_boundary_neighbor_index_list_2d", 1, 6, 6, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 19, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("pystencils.boundaries.createindexlistcython.create_boundary_neighbor_index_list_2d", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_10pystencils_10boundaries_21createindexlistcython_14create_boundary_neighbor_index_list_2d(__pyx_self, __pyx_v_flag_field, __pyx_v_nr_of_ghost_layers, __pyx_v_boundary_mask, __pyx_v_fluid_mask, __pyx_v_stencil, __pyx_v_single_link);
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_10pystencils_10boundaries_21createindexlistcython_14create_boundary_neighbor_index_list_2d(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_flag_field, int __pyx_v_nr_of_ghost_layers, PY_LONG_LONG __pyx_v_boundary_mask, PY_LONG_LONG __pyx_v_fluid_mask, PyObject *__pyx_v_stencil, int __pyx_v_single_link) {
+  int __pyx_v_xs;
+  int __pyx_v_ys;
+  int __pyx_v_x;
+  int __pyx_v_y;
+  int __pyx_v_dirIdx;
+  int __pyx_v_num_directions;
+  int __pyx_v_dx;
+  int __pyx_v_dy;
+  PyObject *__pyx_v_boundary_index_list = NULL;
+  __Pyx_LocalBuf_ND __pyx_pybuffernd_flag_field;
+  __Pyx_Buffer __pyx_pybuffer_flag_field;
+  __Pyx_LocalBuf_ND __pyx_pybuffernd_stencil;
+  __Pyx_Buffer __pyx_pybuffer_stencil;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
+  PyObject *(*__pyx_t_5)(PyObject *);
+  int __pyx_t_6;
+  int __pyx_t_7;
+  int __pyx_t_8;
+  int __pyx_t_9;
+  int __pyx_t_10;
+  int __pyx_t_11;
+  Py_ssize_t __pyx_t_12;
+  Py_ssize_t __pyx_t_13;
+  int __pyx_t_14;
+  int __pyx_t_15;
+  int __pyx_t_16;
+  int __pyx_t_17;
+  Py_ssize_t __pyx_t_18;
+  Py_ssize_t __pyx_t_19;
+  Py_ssize_t __pyx_t_20;
+  Py_ssize_t __pyx_t_21;
+  Py_ssize_t __pyx_t_22;
+  Py_ssize_t __pyx_t_23;
+  int __pyx_t_24;
+  __Pyx_RefNannySetupContext("__pyx_fuse_3create_boundary_neighbor_index_list_2d", 0);
+  __pyx_pybuffer_flag_field.pybuffer.buf = NULL;
+  __pyx_pybuffer_flag_field.refcount = 0;
+  __pyx_pybuffernd_flag_field.data = NULL;
+  __pyx_pybuffernd_flag_field.rcbuffer = &__pyx_pybuffer_flag_field;
+  __pyx_pybuffer_stencil.pybuffer.buf = NULL;
+  __pyx_pybuffer_stencil.refcount = 0;
+  __pyx_pybuffernd_stencil.data = NULL;
+  __pyx_pybuffernd_stencil.rcbuffer = &__pyx_pybuffer_stencil;
+  {
+    __Pyx_BufFmt_StackElem __pyx_stack[1];
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_flag_field.rcbuffer->pybuffer, (PyObject*)__pyx_v_flag_field, &__Pyx_TypeInfo_PY_LONG_LONG, PyBUF_FORMAT| PyBUF_INDIRECT, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 19, __pyx_L1_error)
+  }
+  __pyx_pybuffernd_flag_field.diminfo[0].strides = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_flag_field.diminfo[0].shape = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_flag_field.diminfo[0].suboffsets = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.suboffsets[0]; __pyx_pybuffernd_flag_field.diminfo[1].strides = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_flag_field.diminfo[1].shape = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_flag_field.diminfo[1].suboffsets = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.suboffsets[1];
+  {
+    __Pyx_BufFmt_StackElem __pyx_stack[1];
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_stencil.rcbuffer->pybuffer, (PyObject*)__pyx_v_stencil, &__Pyx_TypeInfo_int, PyBUF_FORMAT| PyBUF_INDIRECT, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 19, __pyx_L1_error)
+  }
+  __pyx_pybuffernd_stencil.diminfo[0].strides = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_stencil.diminfo[0].shape = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_stencil.diminfo[0].suboffsets = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.suboffsets[0]; __pyx_pybuffernd_stencil.diminfo[1].strides = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_stencil.diminfo[1].shape = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_stencil.diminfo[1].suboffsets = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.suboffsets[1];
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":25
+ *     cdef int dirIdx, num_directions, dx, dy
+ * 
+ *     xs, ys = flag_field.shape             # <<<<<<<<<<<<<<
+ *     boundary_index_list = []
+ *     num_directions = stencil.shape[0]
+ */
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_flag_field), __pyx_n_s_shape); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 25, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) {
+    PyObject* sequence = __pyx_t_1;
+    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
+    if (unlikely(size != 2)) {
+      if (size > 2) __Pyx_RaiseTooManyValuesError(2);
+      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
+      __PYX_ERR(0, 25, __pyx_L1_error)
+    }
+    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+    if (likely(PyTuple_CheckExact(sequence))) {
+      __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
+      __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); 
+    } else {
+      __pyx_t_2 = PyList_GET_ITEM(sequence, 0); 
+      __pyx_t_3 = PyList_GET_ITEM(sequence, 1); 
+    }
+    __Pyx_INCREF(__pyx_t_2);
+    __Pyx_INCREF(__pyx_t_3);
+    #else
+    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 25, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_2);
+    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 25, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    #endif
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  } else {
+    Py_ssize_t index = -1;
+    __pyx_t_4 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 25, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __pyx_t_5 = Py_TYPE(__pyx_t_4)->tp_iternext;
+    index = 0; __pyx_t_2 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_2)) goto __pyx_L3_unpacking_failed;
+    __Pyx_GOTREF(__pyx_t_2);
+    index = 1; __pyx_t_3 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_3)) goto __pyx_L3_unpacking_failed;
+    __Pyx_GOTREF(__pyx_t_3);
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_5(__pyx_t_4), 2) < 0) __PYX_ERR(0, 25, __pyx_L1_error)
+    __pyx_t_5 = NULL;
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    goto __pyx_L4_unpacking_done;
+    __pyx_L3_unpacking_failed:;
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    __pyx_t_5 = NULL;
+    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
+    __PYX_ERR(0, 25, __pyx_L1_error)
+    __pyx_L4_unpacking_done:;
+  }
+  __pyx_t_6 = __Pyx_PyInt_As_int(__pyx_t_2); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 25, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_7 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 25, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __pyx_v_xs = __pyx_t_6;
+  __pyx_v_ys = __pyx_t_7;
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":26
+ * 
+ *     xs, ys = flag_field.shape
+ *     boundary_index_list = []             # <<<<<<<<<<<<<<
+ *     num_directions = stencil.shape[0]
+ * 
+ */
+  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 26, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_boundary_index_list = ((PyObject*)__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":27
+ *     xs, ys = flag_field.shape
+ *     boundary_index_list = []
+ *     num_directions = stencil.shape[0]             # <<<<<<<<<<<<<<
+ * 
+ *     for y in range(nr_of_ghost_layers, ys - nr_of_ghost_layers):
+ */
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_stencil), __pyx_n_s_shape); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 27, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_3 = __Pyx_GetItemInt(__pyx_t_1, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 27, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_7 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 27, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __pyx_v_num_directions = __pyx_t_7;
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":29
+ *     num_directions = stencil.shape[0]
+ * 
+ *     for y in range(nr_of_ghost_layers, ys - nr_of_ghost_layers):             # <<<<<<<<<<<<<<
+ *         for x in range(nr_of_ghost_layers, xs - nr_of_ghost_layers):
+ *             if flag_field[x, y] & fluid_mask:
+ */
+  __pyx_t_7 = (__pyx_v_ys - __pyx_v_nr_of_ghost_layers);
+  __pyx_t_6 = __pyx_t_7;
+  for (__pyx_t_8 = __pyx_v_nr_of_ghost_layers; __pyx_t_8 < __pyx_t_6; __pyx_t_8+=1) {
+    __pyx_v_y = __pyx_t_8;
+
+    /* "pystencils/boundaries/createindexlistcython.pyx":30
+ * 
+ *     for y in range(nr_of_ghost_layers, ys - nr_of_ghost_layers):
+ *         for x in range(nr_of_ghost_layers, xs - nr_of_ghost_layers):             # <<<<<<<<<<<<<<
+ *             if flag_field[x, y] & fluid_mask:
+ *                 for dirIdx in range(num_directions):
+ */
+    __pyx_t_9 = (__pyx_v_xs - __pyx_v_nr_of_ghost_layers);
+    __pyx_t_10 = __pyx_t_9;
+    for (__pyx_t_11 = __pyx_v_nr_of_ghost_layers; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {
+      __pyx_v_x = __pyx_t_11;
+
+      /* "pystencils/boundaries/createindexlistcython.pyx":31
+ *     for y in range(nr_of_ghost_layers, ys - nr_of_ghost_layers):
+ *         for x in range(nr_of_ghost_layers, xs - nr_of_ghost_layers):
+ *             if flag_field[x, y] & fluid_mask:             # <<<<<<<<<<<<<<
+ *                 for dirIdx in range(num_directions):
+ *                     dx = stencil[dirIdx,0]
+ */
+      __pyx_t_12 = __pyx_v_x;
+      __pyx_t_13 = __pyx_v_y;
+      __pyx_t_14 = (((*__Pyx_BufPtrFull2d(PY_LONG_LONG *, __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_flag_field.diminfo[0].strides, __pyx_pybuffernd_flag_field.diminfo[0].suboffsets, __pyx_t_13, __pyx_pybuffernd_flag_field.diminfo[1].strides, __pyx_pybuffernd_flag_field.diminfo[1].suboffsets)) & __pyx_v_fluid_mask) != 0);
+      if (__pyx_t_14) {
+
+        /* "pystencils/boundaries/createindexlistcython.pyx":32
+ *         for x in range(nr_of_ghost_layers, xs - nr_of_ghost_layers):
+ *             if flag_field[x, y] & fluid_mask:
+ *                 for dirIdx in range(num_directions):             # <<<<<<<<<<<<<<
+ *                     dx = stencil[dirIdx,0]
+ *                     dy = stencil[dirIdx,1]
+ */
+        __pyx_t_15 = __pyx_v_num_directions;
+        __pyx_t_16 = __pyx_t_15;
+        for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) {
+          __pyx_v_dirIdx = __pyx_t_17;
+
+          /* "pystencils/boundaries/createindexlistcython.pyx":33
+ *             if flag_field[x, y] & fluid_mask:
+ *                 for dirIdx in range(num_directions):
+ *                     dx = stencil[dirIdx,0]             # <<<<<<<<<<<<<<
+ *                     dy = stencil[dirIdx,1]
+ *                     if flag_field[x + dx, y + dy] & boundary_mask:
+ */
+          __pyx_t_18 = __pyx_v_dirIdx;
+          __pyx_t_19 = 0;
+          __pyx_v_dx = (*__Pyx_BufPtrFull2d(int *, __pyx_pybuffernd_stencil.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_stencil.diminfo[0].strides, __pyx_pybuffernd_stencil.diminfo[0].suboffsets, __pyx_t_19, __pyx_pybuffernd_stencil.diminfo[1].strides, __pyx_pybuffernd_stencil.diminfo[1].suboffsets));
+
+          /* "pystencils/boundaries/createindexlistcython.pyx":34
+ *                 for dirIdx in range(num_directions):
+ *                     dx = stencil[dirIdx,0]
+ *                     dy = stencil[dirIdx,1]             # <<<<<<<<<<<<<<
+ *                     if flag_field[x + dx, y + dy] & boundary_mask:
+ *                         boundary_index_list.append((x,y, dirIdx))
+ */
+          __pyx_t_20 = __pyx_v_dirIdx;
+          __pyx_t_21 = 1;
+          __pyx_v_dy = (*__Pyx_BufPtrFull2d(int *, __pyx_pybuffernd_stencil.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_stencil.diminfo[0].strides, __pyx_pybuffernd_stencil.diminfo[0].suboffsets, __pyx_t_21, __pyx_pybuffernd_stencil.diminfo[1].strides, __pyx_pybuffernd_stencil.diminfo[1].suboffsets));
+
+          /* "pystencils/boundaries/createindexlistcython.pyx":35
+ *                     dx = stencil[dirIdx,0]
+ *                     dy = stencil[dirIdx,1]
+ *                     if flag_field[x + dx, y + dy] & boundary_mask:             # <<<<<<<<<<<<<<
+ *                         boundary_index_list.append((x,y, dirIdx))
+ *                         if single_link:
+ */
+          __pyx_t_22 = (__pyx_v_x + __pyx_v_dx);
+          __pyx_t_23 = (__pyx_v_y + __pyx_v_dy);
+          __pyx_t_14 = (((*__Pyx_BufPtrFull2d(PY_LONG_LONG *, __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_flag_field.diminfo[0].strides, __pyx_pybuffernd_flag_field.diminfo[0].suboffsets, __pyx_t_23, __pyx_pybuffernd_flag_field.diminfo[1].strides, __pyx_pybuffernd_flag_field.diminfo[1].suboffsets)) & __pyx_v_boundary_mask) != 0);
+          if (__pyx_t_14) {
+
+            /* "pystencils/boundaries/createindexlistcython.pyx":36
+ *                     dy = stencil[dirIdx,1]
+ *                     if flag_field[x + dx, y + dy] & boundary_mask:
+ *                         boundary_index_list.append((x,y, dirIdx))             # <<<<<<<<<<<<<<
+ *                         if single_link:
+ *                             break
+ */
+            __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_x); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 36, __pyx_L1_error)
+            __Pyx_GOTREF(__pyx_t_3);
+            __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_y); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 36, __pyx_L1_error)
+            __Pyx_GOTREF(__pyx_t_1);
+            __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_dirIdx); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 36, __pyx_L1_error)
+            __Pyx_GOTREF(__pyx_t_2);
+            __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 36, __pyx_L1_error)
+            __Pyx_GOTREF(__pyx_t_4);
+            __Pyx_GIVEREF(__pyx_t_3);
+            PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3);
+            __Pyx_GIVEREF(__pyx_t_1);
+            PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_1);
+            __Pyx_GIVEREF(__pyx_t_2);
+            PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_t_2);
+            __pyx_t_3 = 0;
+            __pyx_t_1 = 0;
+            __pyx_t_2 = 0;
+            __pyx_t_24 = __Pyx_PyList_Append(__pyx_v_boundary_index_list, __pyx_t_4); if (unlikely(__pyx_t_24 == ((int)-1))) __PYX_ERR(0, 36, __pyx_L1_error)
+            __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+
+            /* "pystencils/boundaries/createindexlistcython.pyx":37
+ *                     if flag_field[x + dx, y + dy] & boundary_mask:
+ *                         boundary_index_list.append((x,y, dirIdx))
+ *                         if single_link:             # <<<<<<<<<<<<<<
+ *                             break
+ *     return boundary_index_list
+ */
+            __pyx_t_14 = (__pyx_v_single_link != 0);
+            if (__pyx_t_14) {
+
+              /* "pystencils/boundaries/createindexlistcython.pyx":38
+ *                         boundary_index_list.append((x,y, dirIdx))
+ *                         if single_link:
+ *                             break             # <<<<<<<<<<<<<<
+ *     return boundary_index_list
+ * 
+ */
+              goto __pyx_L11_break;
+
+              /* "pystencils/boundaries/createindexlistcython.pyx":37
+ *                     if flag_field[x + dx, y + dy] & boundary_mask:
+ *                         boundary_index_list.append((x,y, dirIdx))
+ *                         if single_link:             # <<<<<<<<<<<<<<
+ *                             break
+ *     return boundary_index_list
+ */
+            }
+
+            /* "pystencils/boundaries/createindexlistcython.pyx":35
+ *                     dx = stencil[dirIdx,0]
+ *                     dy = stencil[dirIdx,1]
+ *                     if flag_field[x + dx, y + dy] & boundary_mask:             # <<<<<<<<<<<<<<
+ *                         boundary_index_list.append((x,y, dirIdx))
+ *                         if single_link:
+ */
+          }
+        }
+        __pyx_L11_break:;
+
+        /* "pystencils/boundaries/createindexlistcython.pyx":31
+ *     for y in range(nr_of_ghost_layers, ys - nr_of_ghost_layers):
+ *         for x in range(nr_of_ghost_layers, xs - nr_of_ghost_layers):
+ *             if flag_field[x, y] & fluid_mask:             # <<<<<<<<<<<<<<
+ *                 for dirIdx in range(num_directions):
+ *                     dx = stencil[dirIdx,0]
+ */
+      }
+    }
+  }
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":39
+ *                         if single_link:
+ *                             break
+ *     return boundary_index_list             # <<<<<<<<<<<<<<
+ * 
+ * 
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(__pyx_v_boundary_index_list);
+  __pyx_r = __pyx_v_boundary_index_list;
+  goto __pyx_L0;
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":19
+ * @cython.boundscheck(False) # turn off bounds-checking for entire function
+ * @cython.wraparound(False)  # turn off negative index wrapping for entire function
+ * def create_boundary_neighbor_index_list_2d(object[IntegerType, ndim=2] flag_field,             # <<<<<<<<<<<<<<
+ *                                            int nr_of_ghost_layers, IntegerType boundary_mask, IntegerType fluid_mask,
+ *                                            object[int, ndim=2] stencil, int single_link):
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_4);
+  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
+    __Pyx_PyThreadState_declare
+    __Pyx_PyThreadState_assign
+    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
+    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_flag_field.rcbuffer->pybuffer);
+    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_stencil.rcbuffer->pybuffer);
+  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
+  __Pyx_AddTraceback("pystencils.boundaries.createindexlistcython.create_boundary_neighbor_index_list_2d", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  goto __pyx_L2;
+  __pyx_L0:;
+  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_flag_field.rcbuffer->pybuffer);
+  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_stencil.rcbuffer->pybuffer);
+  __pyx_L2:;
+  __Pyx_XDECREF(__pyx_v_boundary_index_list);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static PyObject *__pyx_fuse_4__pyx_pw_10pystencils_10boundaries_21createindexlistcython_17create_boundary_neighbor_index_list_2d(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyMethodDef __pyx_fuse_4__pyx_mdef_10pystencils_10boundaries_21createindexlistcython_17create_boundary_neighbor_index_list_2d = {"__pyx_fuse_4create_boundary_neighbor_index_list_2d", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_fuse_4__pyx_pw_10pystencils_10boundaries_21createindexlistcython_17create_boundary_neighbor_index_list_2d, METH_VARARGS|METH_KEYWORDS, 0};
+static PyObject *__pyx_fuse_4__pyx_pw_10pystencils_10boundaries_21createindexlistcython_17create_boundary_neighbor_index_list_2d(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_flag_field = 0;
+  int __pyx_v_nr_of_ghost_layers;
+  unsigned short __pyx_v_boundary_mask;
+  unsigned short __pyx_v_fluid_mask;
+  PyObject *__pyx_v_stencil = 0;
+  int __pyx_v_single_link;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("create_boundary_neighbor_index_list_2d (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_flag_field,&__pyx_n_s_nr_of_ghost_layers,&__pyx_n_s_boundary_mask,&__pyx_n_s_fluid_mask,&__pyx_n_s_stencil,&__pyx_n_s_single_link,0};
+    PyObject* values[6] = {0,0,0,0,0,0};
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
+        CYTHON_FALLTHROUGH;
+        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+        CYTHON_FALLTHROUGH;
+        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
+        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_flag_field)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
+        case  1:
+        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_nr_of_ghost_layers)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_neighbor_index_list_2d", 1, 6, 6, 1); __PYX_ERR(0, 19, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  2:
+        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_boundary_mask)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_neighbor_index_list_2d", 1, 6, 6, 2); __PYX_ERR(0, 19, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  3:
+        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_fluid_mask)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_neighbor_index_list_2d", 1, 6, 6, 3); __PYX_ERR(0, 19, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  4:
+        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_stencil)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_neighbor_index_list_2d", 1, 6, 6, 4); __PYX_ERR(0, 19, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  5:
+        if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_single_link)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_neighbor_index_list_2d", 1, 6, 6, 5); __PYX_ERR(0, 19, __pyx_L3_error)
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "create_boundary_neighbor_index_list_2d") < 0)) __PYX_ERR(0, 19, __pyx_L3_error)
+      }
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 6) {
+      goto __pyx_L5_argtuple_error;
+    } else {
+      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+      values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+      values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+      values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
+    }
+    __pyx_v_flag_field = ((PyObject *)values[0]);
+    __pyx_v_nr_of_ghost_layers = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_nr_of_ghost_layers == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 20, __pyx_L3_error)
+    __pyx_v_boundary_mask = __Pyx_PyInt_As_unsigned_short(values[2]); if (unlikely((__pyx_v_boundary_mask == (unsigned short)-1) && PyErr_Occurred())) __PYX_ERR(0, 20, __pyx_L3_error)
+    __pyx_v_fluid_mask = __Pyx_PyInt_As_unsigned_short(values[3]); if (unlikely((__pyx_v_fluid_mask == (unsigned short)-1) && PyErr_Occurred())) __PYX_ERR(0, 20, __pyx_L3_error)
+    __pyx_v_stencil = ((PyObject *)values[4]);
+    __pyx_v_single_link = __Pyx_PyInt_As_int(values[5]); if (unlikely((__pyx_v_single_link == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 21, __pyx_L3_error)
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("create_boundary_neighbor_index_list_2d", 1, 6, 6, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 19, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("pystencils.boundaries.createindexlistcython.create_boundary_neighbor_index_list_2d", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_10pystencils_10boundaries_21createindexlistcython_16create_boundary_neighbor_index_list_2d(__pyx_self, __pyx_v_flag_field, __pyx_v_nr_of_ghost_layers, __pyx_v_boundary_mask, __pyx_v_fluid_mask, __pyx_v_stencil, __pyx_v_single_link);
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_10pystencils_10boundaries_21createindexlistcython_16create_boundary_neighbor_index_list_2d(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_flag_field, int __pyx_v_nr_of_ghost_layers, unsigned short __pyx_v_boundary_mask, unsigned short __pyx_v_fluid_mask, PyObject *__pyx_v_stencil, int __pyx_v_single_link) {
+  int __pyx_v_xs;
+  int __pyx_v_ys;
+  int __pyx_v_x;
+  int __pyx_v_y;
+  int __pyx_v_dirIdx;
+  int __pyx_v_num_directions;
+  int __pyx_v_dx;
+  int __pyx_v_dy;
+  PyObject *__pyx_v_boundary_index_list = NULL;
+  __Pyx_LocalBuf_ND __pyx_pybuffernd_flag_field;
+  __Pyx_Buffer __pyx_pybuffer_flag_field;
+  __Pyx_LocalBuf_ND __pyx_pybuffernd_stencil;
+  __Pyx_Buffer __pyx_pybuffer_stencil;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
+  PyObject *(*__pyx_t_5)(PyObject *);
+  int __pyx_t_6;
+  int __pyx_t_7;
+  int __pyx_t_8;
+  int __pyx_t_9;
+  int __pyx_t_10;
+  int __pyx_t_11;
+  Py_ssize_t __pyx_t_12;
+  Py_ssize_t __pyx_t_13;
+  int __pyx_t_14;
+  int __pyx_t_15;
+  int __pyx_t_16;
+  int __pyx_t_17;
+  Py_ssize_t __pyx_t_18;
+  Py_ssize_t __pyx_t_19;
+  Py_ssize_t __pyx_t_20;
+  Py_ssize_t __pyx_t_21;
+  Py_ssize_t __pyx_t_22;
+  Py_ssize_t __pyx_t_23;
+  int __pyx_t_24;
+  __Pyx_RefNannySetupContext("__pyx_fuse_4create_boundary_neighbor_index_list_2d", 0);
+  __pyx_pybuffer_flag_field.pybuffer.buf = NULL;
+  __pyx_pybuffer_flag_field.refcount = 0;
+  __pyx_pybuffernd_flag_field.data = NULL;
+  __pyx_pybuffernd_flag_field.rcbuffer = &__pyx_pybuffer_flag_field;
+  __pyx_pybuffer_stencil.pybuffer.buf = NULL;
+  __pyx_pybuffer_stencil.refcount = 0;
+  __pyx_pybuffernd_stencil.data = NULL;
+  __pyx_pybuffernd_stencil.rcbuffer = &__pyx_pybuffer_stencil;
+  {
+    __Pyx_BufFmt_StackElem __pyx_stack[1];
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_flag_field.rcbuffer->pybuffer, (PyObject*)__pyx_v_flag_field, &__Pyx_TypeInfo_unsigned_short, PyBUF_FORMAT| PyBUF_INDIRECT, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 19, __pyx_L1_error)
+  }
+  __pyx_pybuffernd_flag_field.diminfo[0].strides = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_flag_field.diminfo[0].shape = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_flag_field.diminfo[0].suboffsets = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.suboffsets[0]; __pyx_pybuffernd_flag_field.diminfo[1].strides = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_flag_field.diminfo[1].shape = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_flag_field.diminfo[1].suboffsets = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.suboffsets[1];
+  {
+    __Pyx_BufFmt_StackElem __pyx_stack[1];
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_stencil.rcbuffer->pybuffer, (PyObject*)__pyx_v_stencil, &__Pyx_TypeInfo_int, PyBUF_FORMAT| PyBUF_INDIRECT, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 19, __pyx_L1_error)
+  }
+  __pyx_pybuffernd_stencil.diminfo[0].strides = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_stencil.diminfo[0].shape = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_stencil.diminfo[0].suboffsets = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.suboffsets[0]; __pyx_pybuffernd_stencil.diminfo[1].strides = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_stencil.diminfo[1].shape = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_stencil.diminfo[1].suboffsets = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.suboffsets[1];
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":25
+ *     cdef int dirIdx, num_directions, dx, dy
+ * 
+ *     xs, ys = flag_field.shape             # <<<<<<<<<<<<<<
+ *     boundary_index_list = []
+ *     num_directions = stencil.shape[0]
+ */
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_flag_field), __pyx_n_s_shape); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 25, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) {
+    PyObject* sequence = __pyx_t_1;
+    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
+    if (unlikely(size != 2)) {
+      if (size > 2) __Pyx_RaiseTooManyValuesError(2);
+      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
+      __PYX_ERR(0, 25, __pyx_L1_error)
+    }
+    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+    if (likely(PyTuple_CheckExact(sequence))) {
+      __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
+      __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); 
+    } else {
+      __pyx_t_2 = PyList_GET_ITEM(sequence, 0); 
+      __pyx_t_3 = PyList_GET_ITEM(sequence, 1); 
+    }
+    __Pyx_INCREF(__pyx_t_2);
+    __Pyx_INCREF(__pyx_t_3);
+    #else
+    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 25, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_2);
+    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 25, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    #endif
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  } else {
+    Py_ssize_t index = -1;
+    __pyx_t_4 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 25, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __pyx_t_5 = Py_TYPE(__pyx_t_4)->tp_iternext;
+    index = 0; __pyx_t_2 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_2)) goto __pyx_L3_unpacking_failed;
+    __Pyx_GOTREF(__pyx_t_2);
+    index = 1; __pyx_t_3 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_3)) goto __pyx_L3_unpacking_failed;
+    __Pyx_GOTREF(__pyx_t_3);
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_5(__pyx_t_4), 2) < 0) __PYX_ERR(0, 25, __pyx_L1_error)
+    __pyx_t_5 = NULL;
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    goto __pyx_L4_unpacking_done;
+    __pyx_L3_unpacking_failed:;
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    __pyx_t_5 = NULL;
+    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
+    __PYX_ERR(0, 25, __pyx_L1_error)
+    __pyx_L4_unpacking_done:;
+  }
+  __pyx_t_6 = __Pyx_PyInt_As_int(__pyx_t_2); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 25, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_7 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 25, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __pyx_v_xs = __pyx_t_6;
+  __pyx_v_ys = __pyx_t_7;
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":26
+ * 
+ *     xs, ys = flag_field.shape
+ *     boundary_index_list = []             # <<<<<<<<<<<<<<
+ *     num_directions = stencil.shape[0]
+ * 
+ */
+  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 26, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_boundary_index_list = ((PyObject*)__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":27
+ *     xs, ys = flag_field.shape
+ *     boundary_index_list = []
+ *     num_directions = stencil.shape[0]             # <<<<<<<<<<<<<<
+ * 
+ *     for y in range(nr_of_ghost_layers, ys - nr_of_ghost_layers):
+ */
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_stencil), __pyx_n_s_shape); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 27, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_3 = __Pyx_GetItemInt(__pyx_t_1, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 27, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_7 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 27, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __pyx_v_num_directions = __pyx_t_7;
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":29
+ *     num_directions = stencil.shape[0]
+ * 
+ *     for y in range(nr_of_ghost_layers, ys - nr_of_ghost_layers):             # <<<<<<<<<<<<<<
+ *         for x in range(nr_of_ghost_layers, xs - nr_of_ghost_layers):
+ *             if flag_field[x, y] & fluid_mask:
+ */
+  __pyx_t_7 = (__pyx_v_ys - __pyx_v_nr_of_ghost_layers);
+  __pyx_t_6 = __pyx_t_7;
+  for (__pyx_t_8 = __pyx_v_nr_of_ghost_layers; __pyx_t_8 < __pyx_t_6; __pyx_t_8+=1) {
+    __pyx_v_y = __pyx_t_8;
+
+    /* "pystencils/boundaries/createindexlistcython.pyx":30
+ * 
+ *     for y in range(nr_of_ghost_layers, ys - nr_of_ghost_layers):
+ *         for x in range(nr_of_ghost_layers, xs - nr_of_ghost_layers):             # <<<<<<<<<<<<<<
+ *             if flag_field[x, y] & fluid_mask:
+ *                 for dirIdx in range(num_directions):
+ */
+    __pyx_t_9 = (__pyx_v_xs - __pyx_v_nr_of_ghost_layers);
+    __pyx_t_10 = __pyx_t_9;
+    for (__pyx_t_11 = __pyx_v_nr_of_ghost_layers; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {
+      __pyx_v_x = __pyx_t_11;
+
+      /* "pystencils/boundaries/createindexlistcython.pyx":31
+ *     for y in range(nr_of_ghost_layers, ys - nr_of_ghost_layers):
+ *         for x in range(nr_of_ghost_layers, xs - nr_of_ghost_layers):
+ *             if flag_field[x, y] & fluid_mask:             # <<<<<<<<<<<<<<
+ *                 for dirIdx in range(num_directions):
+ *                     dx = stencil[dirIdx,0]
+ */
+      __pyx_t_12 = __pyx_v_x;
+      __pyx_t_13 = __pyx_v_y;
+      __pyx_t_14 = (((*__Pyx_BufPtrFull2d(unsigned short *, __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_flag_field.diminfo[0].strides, __pyx_pybuffernd_flag_field.diminfo[0].suboffsets, __pyx_t_13, __pyx_pybuffernd_flag_field.diminfo[1].strides, __pyx_pybuffernd_flag_field.diminfo[1].suboffsets)) & __pyx_v_fluid_mask) != 0);
+      if (__pyx_t_14) {
+
+        /* "pystencils/boundaries/createindexlistcython.pyx":32
+ *         for x in range(nr_of_ghost_layers, xs - nr_of_ghost_layers):
+ *             if flag_field[x, y] & fluid_mask:
+ *                 for dirIdx in range(num_directions):             # <<<<<<<<<<<<<<
+ *                     dx = stencil[dirIdx,0]
+ *                     dy = stencil[dirIdx,1]
+ */
+        __pyx_t_15 = __pyx_v_num_directions;
+        __pyx_t_16 = __pyx_t_15;
+        for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) {
+          __pyx_v_dirIdx = __pyx_t_17;
+
+          /* "pystencils/boundaries/createindexlistcython.pyx":33
+ *             if flag_field[x, y] & fluid_mask:
+ *                 for dirIdx in range(num_directions):
+ *                     dx = stencil[dirIdx,0]             # <<<<<<<<<<<<<<
+ *                     dy = stencil[dirIdx,1]
+ *                     if flag_field[x + dx, y + dy] & boundary_mask:
+ */
+          __pyx_t_18 = __pyx_v_dirIdx;
+          __pyx_t_19 = 0;
+          __pyx_v_dx = (*__Pyx_BufPtrFull2d(int *, __pyx_pybuffernd_stencil.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_stencil.diminfo[0].strides, __pyx_pybuffernd_stencil.diminfo[0].suboffsets, __pyx_t_19, __pyx_pybuffernd_stencil.diminfo[1].strides, __pyx_pybuffernd_stencil.diminfo[1].suboffsets));
+
+          /* "pystencils/boundaries/createindexlistcython.pyx":34
+ *                 for dirIdx in range(num_directions):
+ *                     dx = stencil[dirIdx,0]
+ *                     dy = stencil[dirIdx,1]             # <<<<<<<<<<<<<<
+ *                     if flag_field[x + dx, y + dy] & boundary_mask:
+ *                         boundary_index_list.append((x,y, dirIdx))
+ */
+          __pyx_t_20 = __pyx_v_dirIdx;
+          __pyx_t_21 = 1;
+          __pyx_v_dy = (*__Pyx_BufPtrFull2d(int *, __pyx_pybuffernd_stencil.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_stencil.diminfo[0].strides, __pyx_pybuffernd_stencil.diminfo[0].suboffsets, __pyx_t_21, __pyx_pybuffernd_stencil.diminfo[1].strides, __pyx_pybuffernd_stencil.diminfo[1].suboffsets));
+
+          /* "pystencils/boundaries/createindexlistcython.pyx":35
+ *                     dx = stencil[dirIdx,0]
+ *                     dy = stencil[dirIdx,1]
+ *                     if flag_field[x + dx, y + dy] & boundary_mask:             # <<<<<<<<<<<<<<
+ *                         boundary_index_list.append((x,y, dirIdx))
+ *                         if single_link:
+ */
+          __pyx_t_22 = (__pyx_v_x + __pyx_v_dx);
+          __pyx_t_23 = (__pyx_v_y + __pyx_v_dy);
+          __pyx_t_14 = (((*__Pyx_BufPtrFull2d(unsigned short *, __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_flag_field.diminfo[0].strides, __pyx_pybuffernd_flag_field.diminfo[0].suboffsets, __pyx_t_23, __pyx_pybuffernd_flag_field.diminfo[1].strides, __pyx_pybuffernd_flag_field.diminfo[1].suboffsets)) & __pyx_v_boundary_mask) != 0);
+          if (__pyx_t_14) {
+
+            /* "pystencils/boundaries/createindexlistcython.pyx":36
+ *                     dy = stencil[dirIdx,1]
+ *                     if flag_field[x + dx, y + dy] & boundary_mask:
+ *                         boundary_index_list.append((x,y, dirIdx))             # <<<<<<<<<<<<<<
+ *                         if single_link:
+ *                             break
+ */
+            __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_x); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 36, __pyx_L1_error)
+            __Pyx_GOTREF(__pyx_t_3);
+            __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_y); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 36, __pyx_L1_error)
+            __Pyx_GOTREF(__pyx_t_1);
+            __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_dirIdx); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 36, __pyx_L1_error)
+            __Pyx_GOTREF(__pyx_t_2);
+            __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 36, __pyx_L1_error)
+            __Pyx_GOTREF(__pyx_t_4);
+            __Pyx_GIVEREF(__pyx_t_3);
+            PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3);
+            __Pyx_GIVEREF(__pyx_t_1);
+            PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_1);
+            __Pyx_GIVEREF(__pyx_t_2);
+            PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_t_2);
+            __pyx_t_3 = 0;
+            __pyx_t_1 = 0;
+            __pyx_t_2 = 0;
+            __pyx_t_24 = __Pyx_PyList_Append(__pyx_v_boundary_index_list, __pyx_t_4); if (unlikely(__pyx_t_24 == ((int)-1))) __PYX_ERR(0, 36, __pyx_L1_error)
+            __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+
+            /* "pystencils/boundaries/createindexlistcython.pyx":37
+ *                     if flag_field[x + dx, y + dy] & boundary_mask:
+ *                         boundary_index_list.append((x,y, dirIdx))
+ *                         if single_link:             # <<<<<<<<<<<<<<
+ *                             break
+ *     return boundary_index_list
+ */
+            __pyx_t_14 = (__pyx_v_single_link != 0);
+            if (__pyx_t_14) {
+
+              /* "pystencils/boundaries/createindexlistcython.pyx":38
+ *                         boundary_index_list.append((x,y, dirIdx))
+ *                         if single_link:
+ *                             break             # <<<<<<<<<<<<<<
+ *     return boundary_index_list
+ * 
+ */
+              goto __pyx_L11_break;
+
+              /* "pystencils/boundaries/createindexlistcython.pyx":37
+ *                     if flag_field[x + dx, y + dy] & boundary_mask:
+ *                         boundary_index_list.append((x,y, dirIdx))
+ *                         if single_link:             # <<<<<<<<<<<<<<
+ *                             break
+ *     return boundary_index_list
+ */
+            }
+
+            /* "pystencils/boundaries/createindexlistcython.pyx":35
+ *                     dx = stencil[dirIdx,0]
+ *                     dy = stencil[dirIdx,1]
+ *                     if flag_field[x + dx, y + dy] & boundary_mask:             # <<<<<<<<<<<<<<
+ *                         boundary_index_list.append((x,y, dirIdx))
+ *                         if single_link:
+ */
+          }
+        }
+        __pyx_L11_break:;
+
+        /* "pystencils/boundaries/createindexlistcython.pyx":31
+ *     for y in range(nr_of_ghost_layers, ys - nr_of_ghost_layers):
+ *         for x in range(nr_of_ghost_layers, xs - nr_of_ghost_layers):
+ *             if flag_field[x, y] & fluid_mask:             # <<<<<<<<<<<<<<
+ *                 for dirIdx in range(num_directions):
+ *                     dx = stencil[dirIdx,0]
+ */
+      }
+    }
+  }
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":39
+ *                         if single_link:
+ *                             break
+ *     return boundary_index_list             # <<<<<<<<<<<<<<
+ * 
+ * 
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(__pyx_v_boundary_index_list);
+  __pyx_r = __pyx_v_boundary_index_list;
+  goto __pyx_L0;
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":19
+ * @cython.boundscheck(False) # turn off bounds-checking for entire function
+ * @cython.wraparound(False)  # turn off negative index wrapping for entire function
+ * def create_boundary_neighbor_index_list_2d(object[IntegerType, ndim=2] flag_field,             # <<<<<<<<<<<<<<
+ *                                            int nr_of_ghost_layers, IntegerType boundary_mask, IntegerType fluid_mask,
+ *                                            object[int, ndim=2] stencil, int single_link):
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_4);
+  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
+    __Pyx_PyThreadState_declare
+    __Pyx_PyThreadState_assign
+    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
+    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_flag_field.rcbuffer->pybuffer);
+    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_stencil.rcbuffer->pybuffer);
+  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
+  __Pyx_AddTraceback("pystencils.boundaries.createindexlistcython.create_boundary_neighbor_index_list_2d", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  goto __pyx_L2;
+  __pyx_L0:;
+  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_flag_field.rcbuffer->pybuffer);
+  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_stencil.rcbuffer->pybuffer);
+  __pyx_L2:;
+  __Pyx_XDECREF(__pyx_v_boundary_index_list);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static PyObject *__pyx_fuse_5__pyx_pw_10pystencils_10boundaries_21createindexlistcython_19create_boundary_neighbor_index_list_2d(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyMethodDef __pyx_fuse_5__pyx_mdef_10pystencils_10boundaries_21createindexlistcython_19create_boundary_neighbor_index_list_2d = {"__pyx_fuse_5create_boundary_neighbor_index_list_2d", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_fuse_5__pyx_pw_10pystencils_10boundaries_21createindexlistcython_19create_boundary_neighbor_index_list_2d, METH_VARARGS|METH_KEYWORDS, 0};
+static PyObject *__pyx_fuse_5__pyx_pw_10pystencils_10boundaries_21createindexlistcython_19create_boundary_neighbor_index_list_2d(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_flag_field = 0;
+  int __pyx_v_nr_of_ghost_layers;
+  unsigned int __pyx_v_boundary_mask;
+  unsigned int __pyx_v_fluid_mask;
+  PyObject *__pyx_v_stencil = 0;
+  int __pyx_v_single_link;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("create_boundary_neighbor_index_list_2d (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_flag_field,&__pyx_n_s_nr_of_ghost_layers,&__pyx_n_s_boundary_mask,&__pyx_n_s_fluid_mask,&__pyx_n_s_stencil,&__pyx_n_s_single_link,0};
+    PyObject* values[6] = {0,0,0,0,0,0};
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
+        CYTHON_FALLTHROUGH;
+        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+        CYTHON_FALLTHROUGH;
+        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
+        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_flag_field)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
+        case  1:
+        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_nr_of_ghost_layers)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_neighbor_index_list_2d", 1, 6, 6, 1); __PYX_ERR(0, 19, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  2:
+        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_boundary_mask)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_neighbor_index_list_2d", 1, 6, 6, 2); __PYX_ERR(0, 19, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  3:
+        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_fluid_mask)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_neighbor_index_list_2d", 1, 6, 6, 3); __PYX_ERR(0, 19, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  4:
+        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_stencil)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_neighbor_index_list_2d", 1, 6, 6, 4); __PYX_ERR(0, 19, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  5:
+        if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_single_link)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_neighbor_index_list_2d", 1, 6, 6, 5); __PYX_ERR(0, 19, __pyx_L3_error)
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "create_boundary_neighbor_index_list_2d") < 0)) __PYX_ERR(0, 19, __pyx_L3_error)
+      }
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 6) {
+      goto __pyx_L5_argtuple_error;
+    } else {
+      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+      values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+      values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+      values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
+    }
+    __pyx_v_flag_field = ((PyObject *)values[0]);
+    __pyx_v_nr_of_ghost_layers = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_nr_of_ghost_layers == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 20, __pyx_L3_error)
+    __pyx_v_boundary_mask = __Pyx_PyInt_As_unsigned_int(values[2]); if (unlikely((__pyx_v_boundary_mask == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(0, 20, __pyx_L3_error)
+    __pyx_v_fluid_mask = __Pyx_PyInt_As_unsigned_int(values[3]); if (unlikely((__pyx_v_fluid_mask == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(0, 20, __pyx_L3_error)
+    __pyx_v_stencil = ((PyObject *)values[4]);
+    __pyx_v_single_link = __Pyx_PyInt_As_int(values[5]); if (unlikely((__pyx_v_single_link == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 21, __pyx_L3_error)
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("create_boundary_neighbor_index_list_2d", 1, 6, 6, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 19, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("pystencils.boundaries.createindexlistcython.create_boundary_neighbor_index_list_2d", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_10pystencils_10boundaries_21createindexlistcython_18create_boundary_neighbor_index_list_2d(__pyx_self, __pyx_v_flag_field, __pyx_v_nr_of_ghost_layers, __pyx_v_boundary_mask, __pyx_v_fluid_mask, __pyx_v_stencil, __pyx_v_single_link);
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_10pystencils_10boundaries_21createindexlistcython_18create_boundary_neighbor_index_list_2d(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_flag_field, int __pyx_v_nr_of_ghost_layers, unsigned int __pyx_v_boundary_mask, unsigned int __pyx_v_fluid_mask, PyObject *__pyx_v_stencil, int __pyx_v_single_link) {
+  int __pyx_v_xs;
+  int __pyx_v_ys;
+  int __pyx_v_x;
+  int __pyx_v_y;
+  int __pyx_v_dirIdx;
+  int __pyx_v_num_directions;
+  int __pyx_v_dx;
+  int __pyx_v_dy;
+  PyObject *__pyx_v_boundary_index_list = NULL;
+  __Pyx_LocalBuf_ND __pyx_pybuffernd_flag_field;
+  __Pyx_Buffer __pyx_pybuffer_flag_field;
+  __Pyx_LocalBuf_ND __pyx_pybuffernd_stencil;
+  __Pyx_Buffer __pyx_pybuffer_stencil;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
+  PyObject *(*__pyx_t_5)(PyObject *);
+  int __pyx_t_6;
+  int __pyx_t_7;
+  int __pyx_t_8;
+  int __pyx_t_9;
+  int __pyx_t_10;
+  int __pyx_t_11;
+  Py_ssize_t __pyx_t_12;
+  Py_ssize_t __pyx_t_13;
+  int __pyx_t_14;
+  int __pyx_t_15;
+  int __pyx_t_16;
+  int __pyx_t_17;
+  Py_ssize_t __pyx_t_18;
+  Py_ssize_t __pyx_t_19;
+  Py_ssize_t __pyx_t_20;
+  Py_ssize_t __pyx_t_21;
+  Py_ssize_t __pyx_t_22;
+  Py_ssize_t __pyx_t_23;
+  int __pyx_t_24;
+  __Pyx_RefNannySetupContext("__pyx_fuse_5create_boundary_neighbor_index_list_2d", 0);
+  __pyx_pybuffer_flag_field.pybuffer.buf = NULL;
+  __pyx_pybuffer_flag_field.refcount = 0;
+  __pyx_pybuffernd_flag_field.data = NULL;
+  __pyx_pybuffernd_flag_field.rcbuffer = &__pyx_pybuffer_flag_field;
+  __pyx_pybuffer_stencil.pybuffer.buf = NULL;
+  __pyx_pybuffer_stencil.refcount = 0;
+  __pyx_pybuffernd_stencil.data = NULL;
+  __pyx_pybuffernd_stencil.rcbuffer = &__pyx_pybuffer_stencil;
+  {
+    __Pyx_BufFmt_StackElem __pyx_stack[1];
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_flag_field.rcbuffer->pybuffer, (PyObject*)__pyx_v_flag_field, &__Pyx_TypeInfo_unsigned_int, PyBUF_FORMAT| PyBUF_INDIRECT, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 19, __pyx_L1_error)
+  }
+  __pyx_pybuffernd_flag_field.diminfo[0].strides = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_flag_field.diminfo[0].shape = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_flag_field.diminfo[0].suboffsets = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.suboffsets[0]; __pyx_pybuffernd_flag_field.diminfo[1].strides = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_flag_field.diminfo[1].shape = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_flag_field.diminfo[1].suboffsets = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.suboffsets[1];
+  {
+    __Pyx_BufFmt_StackElem __pyx_stack[1];
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_stencil.rcbuffer->pybuffer, (PyObject*)__pyx_v_stencil, &__Pyx_TypeInfo_int, PyBUF_FORMAT| PyBUF_INDIRECT, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 19, __pyx_L1_error)
+  }
+  __pyx_pybuffernd_stencil.diminfo[0].strides = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_stencil.diminfo[0].shape = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_stencil.diminfo[0].suboffsets = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.suboffsets[0]; __pyx_pybuffernd_stencil.diminfo[1].strides = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_stencil.diminfo[1].shape = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_stencil.diminfo[1].suboffsets = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.suboffsets[1];
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":25
+ *     cdef int dirIdx, num_directions, dx, dy
+ * 
+ *     xs, ys = flag_field.shape             # <<<<<<<<<<<<<<
+ *     boundary_index_list = []
+ *     num_directions = stencil.shape[0]
+ */
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_flag_field), __pyx_n_s_shape); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 25, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) {
+    PyObject* sequence = __pyx_t_1;
+    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
+    if (unlikely(size != 2)) {
+      if (size > 2) __Pyx_RaiseTooManyValuesError(2);
+      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
+      __PYX_ERR(0, 25, __pyx_L1_error)
+    }
+    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+    if (likely(PyTuple_CheckExact(sequence))) {
+      __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
+      __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); 
+    } else {
+      __pyx_t_2 = PyList_GET_ITEM(sequence, 0); 
+      __pyx_t_3 = PyList_GET_ITEM(sequence, 1); 
+    }
+    __Pyx_INCREF(__pyx_t_2);
+    __Pyx_INCREF(__pyx_t_3);
+    #else
+    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 25, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_2);
+    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 25, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    #endif
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  } else {
+    Py_ssize_t index = -1;
+    __pyx_t_4 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 25, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __pyx_t_5 = Py_TYPE(__pyx_t_4)->tp_iternext;
+    index = 0; __pyx_t_2 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_2)) goto __pyx_L3_unpacking_failed;
+    __Pyx_GOTREF(__pyx_t_2);
+    index = 1; __pyx_t_3 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_3)) goto __pyx_L3_unpacking_failed;
+    __Pyx_GOTREF(__pyx_t_3);
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_5(__pyx_t_4), 2) < 0) __PYX_ERR(0, 25, __pyx_L1_error)
+    __pyx_t_5 = NULL;
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    goto __pyx_L4_unpacking_done;
+    __pyx_L3_unpacking_failed:;
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    __pyx_t_5 = NULL;
+    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
+    __PYX_ERR(0, 25, __pyx_L1_error)
+    __pyx_L4_unpacking_done:;
+  }
+  __pyx_t_6 = __Pyx_PyInt_As_int(__pyx_t_2); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 25, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_7 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 25, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __pyx_v_xs = __pyx_t_6;
+  __pyx_v_ys = __pyx_t_7;
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":26
+ * 
+ *     xs, ys = flag_field.shape
+ *     boundary_index_list = []             # <<<<<<<<<<<<<<
+ *     num_directions = stencil.shape[0]
+ * 
+ */
+  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 26, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_boundary_index_list = ((PyObject*)__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":27
+ *     xs, ys = flag_field.shape
+ *     boundary_index_list = []
+ *     num_directions = stencil.shape[0]             # <<<<<<<<<<<<<<
+ * 
+ *     for y in range(nr_of_ghost_layers, ys - nr_of_ghost_layers):
+ */
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_stencil), __pyx_n_s_shape); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 27, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_3 = __Pyx_GetItemInt(__pyx_t_1, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 27, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_7 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 27, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __pyx_v_num_directions = __pyx_t_7;
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":29
+ *     num_directions = stencil.shape[0]
+ * 
+ *     for y in range(nr_of_ghost_layers, ys - nr_of_ghost_layers):             # <<<<<<<<<<<<<<
+ *         for x in range(nr_of_ghost_layers, xs - nr_of_ghost_layers):
+ *             if flag_field[x, y] & fluid_mask:
+ */
+  __pyx_t_7 = (__pyx_v_ys - __pyx_v_nr_of_ghost_layers);
+  __pyx_t_6 = __pyx_t_7;
+  for (__pyx_t_8 = __pyx_v_nr_of_ghost_layers; __pyx_t_8 < __pyx_t_6; __pyx_t_8+=1) {
+    __pyx_v_y = __pyx_t_8;
+
+    /* "pystencils/boundaries/createindexlistcython.pyx":30
+ * 
+ *     for y in range(nr_of_ghost_layers, ys - nr_of_ghost_layers):
+ *         for x in range(nr_of_ghost_layers, xs - nr_of_ghost_layers):             # <<<<<<<<<<<<<<
+ *             if flag_field[x, y] & fluid_mask:
+ *                 for dirIdx in range(num_directions):
+ */
+    __pyx_t_9 = (__pyx_v_xs - __pyx_v_nr_of_ghost_layers);
+    __pyx_t_10 = __pyx_t_9;
+    for (__pyx_t_11 = __pyx_v_nr_of_ghost_layers; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {
+      __pyx_v_x = __pyx_t_11;
+
+      /* "pystencils/boundaries/createindexlistcython.pyx":31
+ *     for y in range(nr_of_ghost_layers, ys - nr_of_ghost_layers):
+ *         for x in range(nr_of_ghost_layers, xs - nr_of_ghost_layers):
+ *             if flag_field[x, y] & fluid_mask:             # <<<<<<<<<<<<<<
+ *                 for dirIdx in range(num_directions):
+ *                     dx = stencil[dirIdx,0]
+ */
+      __pyx_t_12 = __pyx_v_x;
+      __pyx_t_13 = __pyx_v_y;
+      __pyx_t_14 = (((*__Pyx_BufPtrFull2d(unsigned int *, __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_flag_field.diminfo[0].strides, __pyx_pybuffernd_flag_field.diminfo[0].suboffsets, __pyx_t_13, __pyx_pybuffernd_flag_field.diminfo[1].strides, __pyx_pybuffernd_flag_field.diminfo[1].suboffsets)) & __pyx_v_fluid_mask) != 0);
+      if (__pyx_t_14) {
+
+        /* "pystencils/boundaries/createindexlistcython.pyx":32
+ *         for x in range(nr_of_ghost_layers, xs - nr_of_ghost_layers):
+ *             if flag_field[x, y] & fluid_mask:
+ *                 for dirIdx in range(num_directions):             # <<<<<<<<<<<<<<
+ *                     dx = stencil[dirIdx,0]
+ *                     dy = stencil[dirIdx,1]
+ */
+        __pyx_t_15 = __pyx_v_num_directions;
+        __pyx_t_16 = __pyx_t_15;
+        for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) {
+          __pyx_v_dirIdx = __pyx_t_17;
+
+          /* "pystencils/boundaries/createindexlistcython.pyx":33
+ *             if flag_field[x, y] & fluid_mask:
+ *                 for dirIdx in range(num_directions):
+ *                     dx = stencil[dirIdx,0]             # <<<<<<<<<<<<<<
+ *                     dy = stencil[dirIdx,1]
+ *                     if flag_field[x + dx, y + dy] & boundary_mask:
+ */
+          __pyx_t_18 = __pyx_v_dirIdx;
+          __pyx_t_19 = 0;
+          __pyx_v_dx = (*__Pyx_BufPtrFull2d(int *, __pyx_pybuffernd_stencil.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_stencil.diminfo[0].strides, __pyx_pybuffernd_stencil.diminfo[0].suboffsets, __pyx_t_19, __pyx_pybuffernd_stencil.diminfo[1].strides, __pyx_pybuffernd_stencil.diminfo[1].suboffsets));
+
+          /* "pystencils/boundaries/createindexlistcython.pyx":34
+ *                 for dirIdx in range(num_directions):
+ *                     dx = stencil[dirIdx,0]
+ *                     dy = stencil[dirIdx,1]             # <<<<<<<<<<<<<<
+ *                     if flag_field[x + dx, y + dy] & boundary_mask:
+ *                         boundary_index_list.append((x,y, dirIdx))
+ */
+          __pyx_t_20 = __pyx_v_dirIdx;
+          __pyx_t_21 = 1;
+          __pyx_v_dy = (*__Pyx_BufPtrFull2d(int *, __pyx_pybuffernd_stencil.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_stencil.diminfo[0].strides, __pyx_pybuffernd_stencil.diminfo[0].suboffsets, __pyx_t_21, __pyx_pybuffernd_stencil.diminfo[1].strides, __pyx_pybuffernd_stencil.diminfo[1].suboffsets));
+
+          /* "pystencils/boundaries/createindexlistcython.pyx":35
+ *                     dx = stencil[dirIdx,0]
+ *                     dy = stencil[dirIdx,1]
+ *                     if flag_field[x + dx, y + dy] & boundary_mask:             # <<<<<<<<<<<<<<
+ *                         boundary_index_list.append((x,y, dirIdx))
+ *                         if single_link:
+ */
+          __pyx_t_22 = (__pyx_v_x + __pyx_v_dx);
+          __pyx_t_23 = (__pyx_v_y + __pyx_v_dy);
+          __pyx_t_14 = (((*__Pyx_BufPtrFull2d(unsigned int *, __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_flag_field.diminfo[0].strides, __pyx_pybuffernd_flag_field.diminfo[0].suboffsets, __pyx_t_23, __pyx_pybuffernd_flag_field.diminfo[1].strides, __pyx_pybuffernd_flag_field.diminfo[1].suboffsets)) & __pyx_v_boundary_mask) != 0);
+          if (__pyx_t_14) {
+
+            /* "pystencils/boundaries/createindexlistcython.pyx":36
+ *                     dy = stencil[dirIdx,1]
+ *                     if flag_field[x + dx, y + dy] & boundary_mask:
+ *                         boundary_index_list.append((x,y, dirIdx))             # <<<<<<<<<<<<<<
+ *                         if single_link:
+ *                             break
+ */
+            __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_x); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 36, __pyx_L1_error)
+            __Pyx_GOTREF(__pyx_t_3);
+            __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_y); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 36, __pyx_L1_error)
+            __Pyx_GOTREF(__pyx_t_1);
+            __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_dirIdx); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 36, __pyx_L1_error)
+            __Pyx_GOTREF(__pyx_t_2);
+            __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 36, __pyx_L1_error)
+            __Pyx_GOTREF(__pyx_t_4);
+            __Pyx_GIVEREF(__pyx_t_3);
+            PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3);
+            __Pyx_GIVEREF(__pyx_t_1);
+            PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_1);
+            __Pyx_GIVEREF(__pyx_t_2);
+            PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_t_2);
+            __pyx_t_3 = 0;
+            __pyx_t_1 = 0;
+            __pyx_t_2 = 0;
+            __pyx_t_24 = __Pyx_PyList_Append(__pyx_v_boundary_index_list, __pyx_t_4); if (unlikely(__pyx_t_24 == ((int)-1))) __PYX_ERR(0, 36, __pyx_L1_error)
+            __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+
+            /* "pystencils/boundaries/createindexlistcython.pyx":37
+ *                     if flag_field[x + dx, y + dy] & boundary_mask:
+ *                         boundary_index_list.append((x,y, dirIdx))
+ *                         if single_link:             # <<<<<<<<<<<<<<
+ *                             break
+ *     return boundary_index_list
+ */
+            __pyx_t_14 = (__pyx_v_single_link != 0);
+            if (__pyx_t_14) {
+
+              /* "pystencils/boundaries/createindexlistcython.pyx":38
+ *                         boundary_index_list.append((x,y, dirIdx))
+ *                         if single_link:
+ *                             break             # <<<<<<<<<<<<<<
+ *     return boundary_index_list
+ * 
+ */
+              goto __pyx_L11_break;
+
+              /* "pystencils/boundaries/createindexlistcython.pyx":37
+ *                     if flag_field[x + dx, y + dy] & boundary_mask:
+ *                         boundary_index_list.append((x,y, dirIdx))
+ *                         if single_link:             # <<<<<<<<<<<<<<
+ *                             break
+ *     return boundary_index_list
+ */
+            }
+
+            /* "pystencils/boundaries/createindexlistcython.pyx":35
+ *                     dx = stencil[dirIdx,0]
+ *                     dy = stencil[dirIdx,1]
+ *                     if flag_field[x + dx, y + dy] & boundary_mask:             # <<<<<<<<<<<<<<
+ *                         boundary_index_list.append((x,y, dirIdx))
+ *                         if single_link:
+ */
+          }
+        }
+        __pyx_L11_break:;
+
+        /* "pystencils/boundaries/createindexlistcython.pyx":31
+ *     for y in range(nr_of_ghost_layers, ys - nr_of_ghost_layers):
+ *         for x in range(nr_of_ghost_layers, xs - nr_of_ghost_layers):
+ *             if flag_field[x, y] & fluid_mask:             # <<<<<<<<<<<<<<
+ *                 for dirIdx in range(num_directions):
+ *                     dx = stencil[dirIdx,0]
+ */
+      }
+    }
+  }
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":39
+ *                         if single_link:
+ *                             break
+ *     return boundary_index_list             # <<<<<<<<<<<<<<
+ * 
+ * 
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(__pyx_v_boundary_index_list);
+  __pyx_r = __pyx_v_boundary_index_list;
+  goto __pyx_L0;
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":19
+ * @cython.boundscheck(False) # turn off bounds-checking for entire function
+ * @cython.wraparound(False)  # turn off negative index wrapping for entire function
+ * def create_boundary_neighbor_index_list_2d(object[IntegerType, ndim=2] flag_field,             # <<<<<<<<<<<<<<
+ *                                            int nr_of_ghost_layers, IntegerType boundary_mask, IntegerType fluid_mask,
+ *                                            object[int, ndim=2] stencil, int single_link):
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_4);
+  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
+    __Pyx_PyThreadState_declare
+    __Pyx_PyThreadState_assign
+    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
+    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_flag_field.rcbuffer->pybuffer);
+    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_stencil.rcbuffer->pybuffer);
+  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
+  __Pyx_AddTraceback("pystencils.boundaries.createindexlistcython.create_boundary_neighbor_index_list_2d", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  goto __pyx_L2;
+  __pyx_L0:;
+  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_flag_field.rcbuffer->pybuffer);
+  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_stencil.rcbuffer->pybuffer);
+  __pyx_L2:;
+  __Pyx_XDECREF(__pyx_v_boundary_index_list);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static PyObject *__pyx_fuse_6__pyx_pw_10pystencils_10boundaries_21createindexlistcython_21create_boundary_neighbor_index_list_2d(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyMethodDef __pyx_fuse_6__pyx_mdef_10pystencils_10boundaries_21createindexlistcython_21create_boundary_neighbor_index_list_2d = {"__pyx_fuse_6create_boundary_neighbor_index_list_2d", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_fuse_6__pyx_pw_10pystencils_10boundaries_21createindexlistcython_21create_boundary_neighbor_index_list_2d, METH_VARARGS|METH_KEYWORDS, 0};
+static PyObject *__pyx_fuse_6__pyx_pw_10pystencils_10boundaries_21createindexlistcython_21create_boundary_neighbor_index_list_2d(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_flag_field = 0;
+  int __pyx_v_nr_of_ghost_layers;
+  unsigned long __pyx_v_boundary_mask;
+  unsigned long __pyx_v_fluid_mask;
+  PyObject *__pyx_v_stencil = 0;
+  int __pyx_v_single_link;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("create_boundary_neighbor_index_list_2d (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_flag_field,&__pyx_n_s_nr_of_ghost_layers,&__pyx_n_s_boundary_mask,&__pyx_n_s_fluid_mask,&__pyx_n_s_stencil,&__pyx_n_s_single_link,0};
+    PyObject* values[6] = {0,0,0,0,0,0};
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
+        CYTHON_FALLTHROUGH;
+        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+        CYTHON_FALLTHROUGH;
+        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
+        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_flag_field)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
+        case  1:
+        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_nr_of_ghost_layers)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_neighbor_index_list_2d", 1, 6, 6, 1); __PYX_ERR(0, 19, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  2:
+        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_boundary_mask)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_neighbor_index_list_2d", 1, 6, 6, 2); __PYX_ERR(0, 19, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  3:
+        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_fluid_mask)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_neighbor_index_list_2d", 1, 6, 6, 3); __PYX_ERR(0, 19, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  4:
+        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_stencil)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_neighbor_index_list_2d", 1, 6, 6, 4); __PYX_ERR(0, 19, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  5:
+        if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_single_link)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_neighbor_index_list_2d", 1, 6, 6, 5); __PYX_ERR(0, 19, __pyx_L3_error)
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "create_boundary_neighbor_index_list_2d") < 0)) __PYX_ERR(0, 19, __pyx_L3_error)
+      }
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 6) {
+      goto __pyx_L5_argtuple_error;
+    } else {
+      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+      values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+      values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+      values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
+    }
+    __pyx_v_flag_field = ((PyObject *)values[0]);
+    __pyx_v_nr_of_ghost_layers = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_nr_of_ghost_layers == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 20, __pyx_L3_error)
+    __pyx_v_boundary_mask = __Pyx_PyInt_As_unsigned_long(values[2]); if (unlikely((__pyx_v_boundary_mask == (unsigned long)-1) && PyErr_Occurred())) __PYX_ERR(0, 20, __pyx_L3_error)
+    __pyx_v_fluid_mask = __Pyx_PyInt_As_unsigned_long(values[3]); if (unlikely((__pyx_v_fluid_mask == (unsigned long)-1) && PyErr_Occurred())) __PYX_ERR(0, 20, __pyx_L3_error)
+    __pyx_v_stencil = ((PyObject *)values[4]);
+    __pyx_v_single_link = __Pyx_PyInt_As_int(values[5]); if (unlikely((__pyx_v_single_link == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 21, __pyx_L3_error)
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("create_boundary_neighbor_index_list_2d", 1, 6, 6, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 19, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("pystencils.boundaries.createindexlistcython.create_boundary_neighbor_index_list_2d", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_10pystencils_10boundaries_21createindexlistcython_20create_boundary_neighbor_index_list_2d(__pyx_self, __pyx_v_flag_field, __pyx_v_nr_of_ghost_layers, __pyx_v_boundary_mask, __pyx_v_fluid_mask, __pyx_v_stencil, __pyx_v_single_link);
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_10pystencils_10boundaries_21createindexlistcython_20create_boundary_neighbor_index_list_2d(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_flag_field, int __pyx_v_nr_of_ghost_layers, unsigned long __pyx_v_boundary_mask, unsigned long __pyx_v_fluid_mask, PyObject *__pyx_v_stencil, int __pyx_v_single_link) {
+  int __pyx_v_xs;
+  int __pyx_v_ys;
+  int __pyx_v_x;
+  int __pyx_v_y;
+  int __pyx_v_dirIdx;
+  int __pyx_v_num_directions;
+  int __pyx_v_dx;
+  int __pyx_v_dy;
+  PyObject *__pyx_v_boundary_index_list = NULL;
+  __Pyx_LocalBuf_ND __pyx_pybuffernd_flag_field;
+  __Pyx_Buffer __pyx_pybuffer_flag_field;
+  __Pyx_LocalBuf_ND __pyx_pybuffernd_stencil;
+  __Pyx_Buffer __pyx_pybuffer_stencil;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
+  PyObject *(*__pyx_t_5)(PyObject *);
+  int __pyx_t_6;
+  int __pyx_t_7;
+  int __pyx_t_8;
+  int __pyx_t_9;
+  int __pyx_t_10;
+  int __pyx_t_11;
+  Py_ssize_t __pyx_t_12;
+  Py_ssize_t __pyx_t_13;
+  int __pyx_t_14;
+  int __pyx_t_15;
+  int __pyx_t_16;
+  int __pyx_t_17;
+  Py_ssize_t __pyx_t_18;
+  Py_ssize_t __pyx_t_19;
+  Py_ssize_t __pyx_t_20;
+  Py_ssize_t __pyx_t_21;
+  Py_ssize_t __pyx_t_22;
+  Py_ssize_t __pyx_t_23;
+  int __pyx_t_24;
+  __Pyx_RefNannySetupContext("__pyx_fuse_6create_boundary_neighbor_index_list_2d", 0);
+  __pyx_pybuffer_flag_field.pybuffer.buf = NULL;
+  __pyx_pybuffer_flag_field.refcount = 0;
+  __pyx_pybuffernd_flag_field.data = NULL;
+  __pyx_pybuffernd_flag_field.rcbuffer = &__pyx_pybuffer_flag_field;
+  __pyx_pybuffer_stencil.pybuffer.buf = NULL;
+  __pyx_pybuffer_stencil.refcount = 0;
+  __pyx_pybuffernd_stencil.data = NULL;
+  __pyx_pybuffernd_stencil.rcbuffer = &__pyx_pybuffer_stencil;
+  {
+    __Pyx_BufFmt_StackElem __pyx_stack[1];
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_flag_field.rcbuffer->pybuffer, (PyObject*)__pyx_v_flag_field, &__Pyx_TypeInfo_unsigned_long, PyBUF_FORMAT| PyBUF_INDIRECT, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 19, __pyx_L1_error)
+  }
+  __pyx_pybuffernd_flag_field.diminfo[0].strides = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_flag_field.diminfo[0].shape = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_flag_field.diminfo[0].suboffsets = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.suboffsets[0]; __pyx_pybuffernd_flag_field.diminfo[1].strides = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_flag_field.diminfo[1].shape = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_flag_field.diminfo[1].suboffsets = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.suboffsets[1];
+  {
+    __Pyx_BufFmt_StackElem __pyx_stack[1];
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_stencil.rcbuffer->pybuffer, (PyObject*)__pyx_v_stencil, &__Pyx_TypeInfo_int, PyBUF_FORMAT| PyBUF_INDIRECT, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 19, __pyx_L1_error)
+  }
+  __pyx_pybuffernd_stencil.diminfo[0].strides = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_stencil.diminfo[0].shape = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_stencil.diminfo[0].suboffsets = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.suboffsets[0]; __pyx_pybuffernd_stencil.diminfo[1].strides = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_stencil.diminfo[1].shape = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_stencil.diminfo[1].suboffsets = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.suboffsets[1];
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":25
+ *     cdef int dirIdx, num_directions, dx, dy
+ * 
+ *     xs, ys = flag_field.shape             # <<<<<<<<<<<<<<
+ *     boundary_index_list = []
+ *     num_directions = stencil.shape[0]
+ */
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_flag_field), __pyx_n_s_shape); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 25, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) {
+    PyObject* sequence = __pyx_t_1;
+    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
+    if (unlikely(size != 2)) {
+      if (size > 2) __Pyx_RaiseTooManyValuesError(2);
+      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
+      __PYX_ERR(0, 25, __pyx_L1_error)
+    }
+    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+    if (likely(PyTuple_CheckExact(sequence))) {
+      __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
+      __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); 
+    } else {
+      __pyx_t_2 = PyList_GET_ITEM(sequence, 0); 
+      __pyx_t_3 = PyList_GET_ITEM(sequence, 1); 
+    }
+    __Pyx_INCREF(__pyx_t_2);
+    __Pyx_INCREF(__pyx_t_3);
+    #else
+    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 25, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_2);
+    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 25, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    #endif
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  } else {
+    Py_ssize_t index = -1;
+    __pyx_t_4 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 25, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __pyx_t_5 = Py_TYPE(__pyx_t_4)->tp_iternext;
+    index = 0; __pyx_t_2 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_2)) goto __pyx_L3_unpacking_failed;
+    __Pyx_GOTREF(__pyx_t_2);
+    index = 1; __pyx_t_3 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_3)) goto __pyx_L3_unpacking_failed;
+    __Pyx_GOTREF(__pyx_t_3);
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_5(__pyx_t_4), 2) < 0) __PYX_ERR(0, 25, __pyx_L1_error)
+    __pyx_t_5 = NULL;
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    goto __pyx_L4_unpacking_done;
+    __pyx_L3_unpacking_failed:;
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    __pyx_t_5 = NULL;
+    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
+    __PYX_ERR(0, 25, __pyx_L1_error)
+    __pyx_L4_unpacking_done:;
+  }
+  __pyx_t_6 = __Pyx_PyInt_As_int(__pyx_t_2); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 25, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_7 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 25, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __pyx_v_xs = __pyx_t_6;
+  __pyx_v_ys = __pyx_t_7;
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":26
+ * 
+ *     xs, ys = flag_field.shape
+ *     boundary_index_list = []             # <<<<<<<<<<<<<<
+ *     num_directions = stencil.shape[0]
+ * 
+ */
+  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 26, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_boundary_index_list = ((PyObject*)__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":27
+ *     xs, ys = flag_field.shape
+ *     boundary_index_list = []
+ *     num_directions = stencil.shape[0]             # <<<<<<<<<<<<<<
+ * 
+ *     for y in range(nr_of_ghost_layers, ys - nr_of_ghost_layers):
+ */
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_stencil), __pyx_n_s_shape); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 27, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_3 = __Pyx_GetItemInt(__pyx_t_1, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 27, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_7 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 27, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __pyx_v_num_directions = __pyx_t_7;
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":29
+ *     num_directions = stencil.shape[0]
+ * 
+ *     for y in range(nr_of_ghost_layers, ys - nr_of_ghost_layers):             # <<<<<<<<<<<<<<
+ *         for x in range(nr_of_ghost_layers, xs - nr_of_ghost_layers):
+ *             if flag_field[x, y] & fluid_mask:
+ */
+  __pyx_t_7 = (__pyx_v_ys - __pyx_v_nr_of_ghost_layers);
+  __pyx_t_6 = __pyx_t_7;
+  for (__pyx_t_8 = __pyx_v_nr_of_ghost_layers; __pyx_t_8 < __pyx_t_6; __pyx_t_8+=1) {
+    __pyx_v_y = __pyx_t_8;
+
+    /* "pystencils/boundaries/createindexlistcython.pyx":30
+ * 
+ *     for y in range(nr_of_ghost_layers, ys - nr_of_ghost_layers):
+ *         for x in range(nr_of_ghost_layers, xs - nr_of_ghost_layers):             # <<<<<<<<<<<<<<
+ *             if flag_field[x, y] & fluid_mask:
+ *                 for dirIdx in range(num_directions):
+ */
+    __pyx_t_9 = (__pyx_v_xs - __pyx_v_nr_of_ghost_layers);
+    __pyx_t_10 = __pyx_t_9;
+    for (__pyx_t_11 = __pyx_v_nr_of_ghost_layers; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {
+      __pyx_v_x = __pyx_t_11;
+
+      /* "pystencils/boundaries/createindexlistcython.pyx":31
+ *     for y in range(nr_of_ghost_layers, ys - nr_of_ghost_layers):
+ *         for x in range(nr_of_ghost_layers, xs - nr_of_ghost_layers):
+ *             if flag_field[x, y] & fluid_mask:             # <<<<<<<<<<<<<<
+ *                 for dirIdx in range(num_directions):
+ *                     dx = stencil[dirIdx,0]
+ */
+      __pyx_t_12 = __pyx_v_x;
+      __pyx_t_13 = __pyx_v_y;
+      __pyx_t_14 = (((*__Pyx_BufPtrFull2d(unsigned long *, __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_flag_field.diminfo[0].strides, __pyx_pybuffernd_flag_field.diminfo[0].suboffsets, __pyx_t_13, __pyx_pybuffernd_flag_field.diminfo[1].strides, __pyx_pybuffernd_flag_field.diminfo[1].suboffsets)) & __pyx_v_fluid_mask) != 0);
+      if (__pyx_t_14) {
+
+        /* "pystencils/boundaries/createindexlistcython.pyx":32
+ *         for x in range(nr_of_ghost_layers, xs - nr_of_ghost_layers):
+ *             if flag_field[x, y] & fluid_mask:
+ *                 for dirIdx in range(num_directions):             # <<<<<<<<<<<<<<
+ *                     dx = stencil[dirIdx,0]
+ *                     dy = stencil[dirIdx,1]
+ */
+        __pyx_t_15 = __pyx_v_num_directions;
+        __pyx_t_16 = __pyx_t_15;
+        for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) {
+          __pyx_v_dirIdx = __pyx_t_17;
+
+          /* "pystencils/boundaries/createindexlistcython.pyx":33
+ *             if flag_field[x, y] & fluid_mask:
+ *                 for dirIdx in range(num_directions):
+ *                     dx = stencil[dirIdx,0]             # <<<<<<<<<<<<<<
+ *                     dy = stencil[dirIdx,1]
+ *                     if flag_field[x + dx, y + dy] & boundary_mask:
+ */
+          __pyx_t_18 = __pyx_v_dirIdx;
+          __pyx_t_19 = 0;
+          __pyx_v_dx = (*__Pyx_BufPtrFull2d(int *, __pyx_pybuffernd_stencil.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_stencil.diminfo[0].strides, __pyx_pybuffernd_stencil.diminfo[0].suboffsets, __pyx_t_19, __pyx_pybuffernd_stencil.diminfo[1].strides, __pyx_pybuffernd_stencil.diminfo[1].suboffsets));
+
+          /* "pystencils/boundaries/createindexlistcython.pyx":34
+ *                 for dirIdx in range(num_directions):
+ *                     dx = stencil[dirIdx,0]
+ *                     dy = stencil[dirIdx,1]             # <<<<<<<<<<<<<<
+ *                     if flag_field[x + dx, y + dy] & boundary_mask:
+ *                         boundary_index_list.append((x,y, dirIdx))
+ */
+          __pyx_t_20 = __pyx_v_dirIdx;
+          __pyx_t_21 = 1;
+          __pyx_v_dy = (*__Pyx_BufPtrFull2d(int *, __pyx_pybuffernd_stencil.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_stencil.diminfo[0].strides, __pyx_pybuffernd_stencil.diminfo[0].suboffsets, __pyx_t_21, __pyx_pybuffernd_stencil.diminfo[1].strides, __pyx_pybuffernd_stencil.diminfo[1].suboffsets));
+
+          /* "pystencils/boundaries/createindexlistcython.pyx":35
+ *                     dx = stencil[dirIdx,0]
+ *                     dy = stencil[dirIdx,1]
+ *                     if flag_field[x + dx, y + dy] & boundary_mask:             # <<<<<<<<<<<<<<
+ *                         boundary_index_list.append((x,y, dirIdx))
+ *                         if single_link:
+ */
+          __pyx_t_22 = (__pyx_v_x + __pyx_v_dx);
+          __pyx_t_23 = (__pyx_v_y + __pyx_v_dy);
+          __pyx_t_14 = (((*__Pyx_BufPtrFull2d(unsigned long *, __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_flag_field.diminfo[0].strides, __pyx_pybuffernd_flag_field.diminfo[0].suboffsets, __pyx_t_23, __pyx_pybuffernd_flag_field.diminfo[1].strides, __pyx_pybuffernd_flag_field.diminfo[1].suboffsets)) & __pyx_v_boundary_mask) != 0);
+          if (__pyx_t_14) {
+
+            /* "pystencils/boundaries/createindexlistcython.pyx":36
+ *                     dy = stencil[dirIdx,1]
+ *                     if flag_field[x + dx, y + dy] & boundary_mask:
+ *                         boundary_index_list.append((x,y, dirIdx))             # <<<<<<<<<<<<<<
+ *                         if single_link:
+ *                             break
+ */
+            __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_x); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 36, __pyx_L1_error)
+            __Pyx_GOTREF(__pyx_t_3);
+            __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_y); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 36, __pyx_L1_error)
+            __Pyx_GOTREF(__pyx_t_1);
+            __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_dirIdx); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 36, __pyx_L1_error)
+            __Pyx_GOTREF(__pyx_t_2);
+            __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 36, __pyx_L1_error)
+            __Pyx_GOTREF(__pyx_t_4);
+            __Pyx_GIVEREF(__pyx_t_3);
+            PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3);
+            __Pyx_GIVEREF(__pyx_t_1);
+            PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_1);
+            __Pyx_GIVEREF(__pyx_t_2);
+            PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_t_2);
+            __pyx_t_3 = 0;
+            __pyx_t_1 = 0;
+            __pyx_t_2 = 0;
+            __pyx_t_24 = __Pyx_PyList_Append(__pyx_v_boundary_index_list, __pyx_t_4); if (unlikely(__pyx_t_24 == ((int)-1))) __PYX_ERR(0, 36, __pyx_L1_error)
+            __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+
+            /* "pystencils/boundaries/createindexlistcython.pyx":37
+ *                     if flag_field[x + dx, y + dy] & boundary_mask:
+ *                         boundary_index_list.append((x,y, dirIdx))
+ *                         if single_link:             # <<<<<<<<<<<<<<
+ *                             break
+ *     return boundary_index_list
+ */
+            __pyx_t_14 = (__pyx_v_single_link != 0);
+            if (__pyx_t_14) {
+
+              /* "pystencils/boundaries/createindexlistcython.pyx":38
+ *                         boundary_index_list.append((x,y, dirIdx))
+ *                         if single_link:
+ *                             break             # <<<<<<<<<<<<<<
+ *     return boundary_index_list
+ * 
+ */
+              goto __pyx_L11_break;
+
+              /* "pystencils/boundaries/createindexlistcython.pyx":37
+ *                     if flag_field[x + dx, y + dy] & boundary_mask:
+ *                         boundary_index_list.append((x,y, dirIdx))
+ *                         if single_link:             # <<<<<<<<<<<<<<
+ *                             break
+ *     return boundary_index_list
+ */
+            }
+
+            /* "pystencils/boundaries/createindexlistcython.pyx":35
+ *                     dx = stencil[dirIdx,0]
+ *                     dy = stencil[dirIdx,1]
+ *                     if flag_field[x + dx, y + dy] & boundary_mask:             # <<<<<<<<<<<<<<
+ *                         boundary_index_list.append((x,y, dirIdx))
+ *                         if single_link:
+ */
+          }
+        }
+        __pyx_L11_break:;
+
+        /* "pystencils/boundaries/createindexlistcython.pyx":31
+ *     for y in range(nr_of_ghost_layers, ys - nr_of_ghost_layers):
+ *         for x in range(nr_of_ghost_layers, xs - nr_of_ghost_layers):
+ *             if flag_field[x, y] & fluid_mask:             # <<<<<<<<<<<<<<
+ *                 for dirIdx in range(num_directions):
+ *                     dx = stencil[dirIdx,0]
+ */
+      }
+    }
+  }
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":39
+ *                         if single_link:
+ *                             break
+ *     return boundary_index_list             # <<<<<<<<<<<<<<
+ * 
+ * 
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(__pyx_v_boundary_index_list);
+  __pyx_r = __pyx_v_boundary_index_list;
+  goto __pyx_L0;
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":19
+ * @cython.boundscheck(False) # turn off bounds-checking for entire function
+ * @cython.wraparound(False)  # turn off negative index wrapping for entire function
+ * def create_boundary_neighbor_index_list_2d(object[IntegerType, ndim=2] flag_field,             # <<<<<<<<<<<<<<
+ *                                            int nr_of_ghost_layers, IntegerType boundary_mask, IntegerType fluid_mask,
+ *                                            object[int, ndim=2] stencil, int single_link):
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_4);
+  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
+    __Pyx_PyThreadState_declare
+    __Pyx_PyThreadState_assign
+    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
+    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_flag_field.rcbuffer->pybuffer);
+    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_stencil.rcbuffer->pybuffer);
+  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
+  __Pyx_AddTraceback("pystencils.boundaries.createindexlistcython.create_boundary_neighbor_index_list_2d", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  goto __pyx_L2;
+  __pyx_L0:;
+  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_flag_field.rcbuffer->pybuffer);
+  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_stencil.rcbuffer->pybuffer);
+  __pyx_L2:;
+  __Pyx_XDECREF(__pyx_v_boundary_index_list);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "pystencils/boundaries/createindexlistcython.pyx":44
+ * @cython.boundscheck(False) # turn off bounds-checking for entire function
+ * @cython.wraparound(False)  # turn off negative index wrapping for entire function
+ * def create_boundary_neighbor_index_list_3d(object[IntegerType, ndim=3] flag_field,             # <<<<<<<<<<<<<<
+ *                                            int nr_of_ghost_layers, IntegerType boundary_mask, IntegerType fluid_mask,
+ *                                            object[int, ndim=2] stencil, int single_link):
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_10pystencils_10boundaries_21createindexlistcython_3create_boundary_neighbor_index_list_3d(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyMethodDef __pyx_mdef_10pystencils_10boundaries_21createindexlistcython_3create_boundary_neighbor_index_list_3d = {"create_boundary_neighbor_index_list_3d", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_10pystencils_10boundaries_21createindexlistcython_3create_boundary_neighbor_index_list_3d, METH_VARARGS|METH_KEYWORDS, 0};
+static PyObject *__pyx_pw_10pystencils_10boundaries_21createindexlistcython_3create_boundary_neighbor_index_list_3d(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_signatures = 0;
+  PyObject *__pyx_v_args = 0;
+  PyObject *__pyx_v_kwargs = 0;
+  CYTHON_UNUSED PyObject *__pyx_v_defaults = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__pyx_fused_cpdef (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_signatures,&__pyx_n_s_args,&__pyx_n_s_kwargs,&__pyx_n_s_defaults,0};
+    PyObject* values[4] = {0,0,0,0};
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
+        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_signatures)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
+        case  1:
+        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_args)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("__pyx_fused_cpdef", 1, 4, 4, 1); __PYX_ERR(0, 44, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  2:
+        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_kwargs)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("__pyx_fused_cpdef", 1, 4, 4, 2); __PYX_ERR(0, 44, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  3:
+        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_defaults)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("__pyx_fused_cpdef", 1, 4, 4, 3); __PYX_ERR(0, 44, __pyx_L3_error)
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__pyx_fused_cpdef") < 0)) __PYX_ERR(0, 44, __pyx_L3_error)
+      }
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 4) {
+      goto __pyx_L5_argtuple_error;
+    } else {
+      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+      values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+    }
+    __pyx_v_signatures = values[0];
+    __pyx_v_args = values[1];
+    __pyx_v_kwargs = values[2];
+    __pyx_v_defaults = values[3];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("__pyx_fused_cpdef", 1, 4, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 44, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("pystencils.boundaries.createindexlistcython.__pyx_fused_cpdef", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_10pystencils_10boundaries_21createindexlistcython_2create_boundary_neighbor_index_list_3d(__pyx_self, __pyx_v_signatures, __pyx_v_args, __pyx_v_kwargs, __pyx_v_defaults);
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_10pystencils_10boundaries_21createindexlistcython_2create_boundary_neighbor_index_list_3d(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_signatures, PyObject *__pyx_v_args, PyObject *__pyx_v_kwargs, CYTHON_UNUSED PyObject *__pyx_v_defaults) {
+  PyObject *__pyx_v_dest_sig = NULL;
+  Py_ssize_t __pyx_v_i;
+  PyTypeObject *__pyx_v_ndarray = 0;
+  __Pyx_memviewslice __pyx_v_memslice;
+  Py_ssize_t __pyx_v_itemsize;
+  int __pyx_v_dtype_signed;
+  char __pyx_v_kind;
+  int __pyx_v_short_is_signed;
+  int __pyx_v_int_is_signed;
+  int __pyx_v_long_is_signed;
+  int __pyx_v_long_long_is_signed;
+  int __pyx_v_unsigned_short_is_signed;
+  int __pyx_v_unsigned_int_is_signed;
+  int __pyx_v_unsigned_long_is_signed;
+  PyObject *__pyx_v_arg = NULL;
+  PyObject *__pyx_v_dtype = NULL;
+  PyObject *__pyx_v_arg_base = NULL;
+  PyObject *__pyx_v_candidates = NULL;
+  PyObject *__pyx_v_sig = NULL;
+  int __pyx_v_match_found;
+  PyObject *__pyx_v_src_sig = NULL;
+  PyObject *__pyx_v_dst_type = NULL;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_2;
+  int __pyx_t_3;
+  int __pyx_t_4;
+  Py_ssize_t __pyx_t_5;
+  PyObject *__pyx_t_6 = NULL;
+  long __pyx_t_7;
+  __Pyx_memviewslice __pyx_t_8;
+  Py_ssize_t __pyx_t_9;
+  int __pyx_t_10;
+  int __pyx_t_11;
+  PyObject *__pyx_t_12 = NULL;
+  PyObject *__pyx_t_13 = NULL;
+  PyObject *__pyx_t_14 = NULL;
+  Py_ssize_t __pyx_t_15;
+  Py_ssize_t __pyx_t_16;
+  Py_ssize_t __pyx_t_17;
+  int __pyx_t_18;
+  __Pyx_RefNannySetupContext("create_boundary_neighbor_index_list_3d", 0);
+  __Pyx_INCREF(__pyx_v_kwargs);
+  __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 44, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_INCREF(Py_None);
+  __Pyx_GIVEREF(Py_None);
+  PyList_SET_ITEM(__pyx_t_1, 0, Py_None);
+  __pyx_v_dest_sig = ((PyObject*)__pyx_t_1);
+  __pyx_t_1 = 0;
+  __pyx_t_3 = (__pyx_v_kwargs != Py_None);
+  __pyx_t_4 = (__pyx_t_3 != 0);
+  if (__pyx_t_4) {
+  } else {
+    __pyx_t_2 = __pyx_t_4;
+    goto __pyx_L4_bool_binop_done;
+  }
+  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_v_kwargs); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 44, __pyx_L1_error)
+  __pyx_t_3 = ((!__pyx_t_4) != 0);
+  __pyx_t_2 = __pyx_t_3;
+  __pyx_L4_bool_binop_done:;
+  if (__pyx_t_2) {
+    __Pyx_INCREF(Py_None);
+    __Pyx_DECREF_SET(__pyx_v_kwargs, Py_None);
+  }
+  __pyx_t_1 = ((PyObject *)__Pyx_ImportNumPyArrayTypeIfAvailable()); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 44, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_ndarray = ((PyTypeObject*)__pyx_t_1);
+  __pyx_t_1 = 0;
+  __pyx_v_itemsize = -1L;
+  __pyx_v_short_is_signed = (!((((short)-1L) > 0) != 0));
+  __pyx_v_int_is_signed = (!((((int)-1L) > 0) != 0));
+  __pyx_v_long_is_signed = (!((((long)-1L) > 0) != 0));
+  __pyx_v_long_long_is_signed = (!((((PY_LONG_LONG)-1L) > 0) != 0));
+  __pyx_v_unsigned_short_is_signed = (!((((unsigned short)-1L) > 0) != 0));
+  __pyx_v_unsigned_int_is_signed = (!((((unsigned int)-1L) > 0) != 0));
+  __pyx_v_unsigned_long_is_signed = (!((((unsigned long)-1L) > 0) != 0));
+  if (unlikely(__pyx_v_args == Py_None)) {
+    PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
+    __PYX_ERR(0, 44, __pyx_L1_error)
+  }
+  __pyx_t_5 = PyTuple_GET_SIZE(((PyObject*)__pyx_v_args)); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(0, 44, __pyx_L1_error)
+  __pyx_t_2 = ((0 < __pyx_t_5) != 0);
+  if (__pyx_t_2) {
+    if (unlikely(__pyx_v_args == Py_None)) {
+      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
+      __PYX_ERR(0, 44, __pyx_L1_error)
+    }
+    __pyx_t_1 = PyTuple_GET_ITEM(((PyObject*)__pyx_v_args), 0);
+    __Pyx_INCREF(__pyx_t_1);
+    __pyx_v_arg = __pyx_t_1;
+    __pyx_t_1 = 0;
+    goto __pyx_L6;
+  }
+  __pyx_t_3 = (__pyx_v_kwargs != Py_None);
+  __pyx_t_4 = (__pyx_t_3 != 0);
+  if (__pyx_t_4) {
+  } else {
+    __pyx_t_2 = __pyx_t_4;
+    goto __pyx_L7_bool_binop_done;
+  }
+  if (unlikely(__pyx_v_kwargs == Py_None)) {
+    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
+    __PYX_ERR(0, 44, __pyx_L1_error)
+  }
+  __pyx_t_4 = (__Pyx_PyDict_ContainsTF(__pyx_n_s_flag_field, ((PyObject*)__pyx_v_kwargs), Py_EQ)); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 44, __pyx_L1_error)
+  __pyx_t_3 = (__pyx_t_4 != 0);
+  __pyx_t_2 = __pyx_t_3;
+  __pyx_L7_bool_binop_done:;
+  if (__pyx_t_2) {
+    if (unlikely(__pyx_v_kwargs == Py_None)) {
+      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
+      __PYX_ERR(0, 44, __pyx_L1_error)
+    }
+    __pyx_t_1 = __Pyx_PyDict_GetItem(((PyObject*)__pyx_v_kwargs), __pyx_n_s_flag_field); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 44, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_1);
+    __pyx_v_arg = __pyx_t_1;
+    __pyx_t_1 = 0;
+    goto __pyx_L6;
+  }
+  /*else*/ {
+    if (unlikely(__pyx_v_args == Py_None)) {
+      PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
+      __PYX_ERR(0, 44, __pyx_L1_error)
+    }
+    __pyx_t_5 = PyTuple_GET_SIZE(((PyObject*)__pyx_v_args)); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(0, 44, __pyx_L1_error)
+    __pyx_t_1 = PyInt_FromSsize_t(__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 44, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_1);
+    __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 44, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_6);
+    __Pyx_INCREF(__pyx_int_6);
+    __Pyx_GIVEREF(__pyx_int_6);
+    PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_int_6);
+    __Pyx_INCREF(__pyx_n_s_s);
+    __Pyx_GIVEREF(__pyx_n_s_s);
+    PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_n_s_s);
+    __Pyx_GIVEREF(__pyx_t_1);
+    PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_t_1);
+    __pyx_t_1 = 0;
+    __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_Expected_at_least_d_argument_s_g, __pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 44, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_1);
+    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+    __pyx_t_6 = __Pyx_PyObject_CallOneArg(__pyx_builtin_TypeError, __pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 44, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_6);
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __Pyx_Raise(__pyx_t_6, 0, 0, 0);
+    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+    __PYX_ERR(0, 44, __pyx_L1_error)
+  }
+  __pyx_L6:;
+  while (1) {
+    __pyx_t_2 = (__pyx_v_ndarray != ((PyTypeObject*)Py_None));
+    __pyx_t_3 = (__pyx_t_2 != 0);
+    if (__pyx_t_3) {
+      __pyx_t_3 = __Pyx_TypeCheck(__pyx_v_arg, __pyx_v_ndarray); 
+      __pyx_t_2 = (__pyx_t_3 != 0);
+      if (__pyx_t_2) {
+        __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_dtype); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 44, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_6);
+        __pyx_v_dtype = __pyx_t_6;
+        __pyx_t_6 = 0;
+        goto __pyx_L12;
+      }
+      __pyx_t_2 = __pyx_memoryview_check(__pyx_v_arg); 
+      __pyx_t_3 = (__pyx_t_2 != 0);
+      if (__pyx_t_3) {
+        __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_base); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 44, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_6);
+        __pyx_v_arg_base = __pyx_t_6;
+        __pyx_t_6 = 0;
+        __pyx_t_3 = __Pyx_TypeCheck(__pyx_v_arg_base, __pyx_v_ndarray); 
+        __pyx_t_2 = (__pyx_t_3 != 0);
+        if (__pyx_t_2) {
+          __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg_base, __pyx_n_s_dtype); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 44, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_6);
+          __pyx_v_dtype = __pyx_t_6;
+          __pyx_t_6 = 0;
+          goto __pyx_L13;
+        }
+        /*else*/ {
+          __Pyx_INCREF(Py_None);
+          __pyx_v_dtype = Py_None;
+        }
+        __pyx_L13:;
+        goto __pyx_L12;
+      }
+      /*else*/ {
+        __Pyx_INCREF(Py_None);
+        __pyx_v_dtype = Py_None;
+      }
+      __pyx_L12:;
+      __pyx_v_itemsize = -1L;
+      __pyx_t_2 = (__pyx_v_dtype != Py_None);
+      __pyx_t_3 = (__pyx_t_2 != 0);
+      if (__pyx_t_3) {
+        __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_dtype, __pyx_n_s_itemsize); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 44, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_6);
+        __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_6); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 44, __pyx_L1_error)
+        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+        __pyx_v_itemsize = __pyx_t_5;
+        __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_dtype, __pyx_n_s_kind); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 44, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_6);
+        __pyx_t_7 = __Pyx_PyObject_Ord(__pyx_t_6); if (unlikely(__pyx_t_7 == ((long)(long)(Py_UCS4)-1))) __PYX_ERR(0, 44, __pyx_L1_error)
+        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+        __pyx_v_kind = __pyx_t_7;
+        __pyx_v_dtype_signed = (__pyx_v_kind == 'i');
+        switch (__pyx_v_kind) {
+          case 'i':
+          case 'u':
+          __pyx_t_2 = (((sizeof(short)) == __pyx_v_itemsize) != 0);
+          if (__pyx_t_2) {
+          } else {
+            __pyx_t_3 = __pyx_t_2;
+            goto __pyx_L16_bool_binop_done;
+          }
+          __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_ndim); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 44, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_6);
+          __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_6); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 44, __pyx_L1_error)
+          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+          __pyx_t_2 = ((((Py_ssize_t)__pyx_t_5) == 3) != 0);
+          if (__pyx_t_2) {
+          } else {
+            __pyx_t_3 = __pyx_t_2;
+            goto __pyx_L16_bool_binop_done;
+          }
+          __pyx_t_2 = ((!((__pyx_v_short_is_signed ^ __pyx_v_dtype_signed) != 0)) != 0);
+          __pyx_t_3 = __pyx_t_2;
+          __pyx_L16_bool_binop_done:;
+          if (__pyx_t_3) {
+            if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_n_s_short, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 44, __pyx_L1_error)
+            goto __pyx_L10_break;
+          }
+          __pyx_t_2 = (((sizeof(int)) == __pyx_v_itemsize) != 0);
+          if (__pyx_t_2) {
+          } else {
+            __pyx_t_3 = __pyx_t_2;
+            goto __pyx_L20_bool_binop_done;
+          }
+          __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_ndim); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 44, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_6);
+          __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_6); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 44, __pyx_L1_error)
+          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+          __pyx_t_2 = ((((Py_ssize_t)__pyx_t_5) == 3) != 0);
+          if (__pyx_t_2) {
+          } else {
+            __pyx_t_3 = __pyx_t_2;
+            goto __pyx_L20_bool_binop_done;
+          }
+          __pyx_t_2 = ((!((__pyx_v_int_is_signed ^ __pyx_v_dtype_signed) != 0)) != 0);
+          __pyx_t_3 = __pyx_t_2;
+          __pyx_L20_bool_binop_done:;
+          if (__pyx_t_3) {
+            if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_n_s_int, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 44, __pyx_L1_error)
+            goto __pyx_L10_break;
+          }
+          __pyx_t_2 = (((sizeof(long)) == __pyx_v_itemsize) != 0);
+          if (__pyx_t_2) {
+          } else {
+            __pyx_t_3 = __pyx_t_2;
+            goto __pyx_L24_bool_binop_done;
+          }
+          __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_ndim); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 44, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_6);
+          __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_6); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 44, __pyx_L1_error)
+          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+          __pyx_t_2 = ((((Py_ssize_t)__pyx_t_5) == 3) != 0);
+          if (__pyx_t_2) {
+          } else {
+            __pyx_t_3 = __pyx_t_2;
+            goto __pyx_L24_bool_binop_done;
+          }
+          __pyx_t_2 = ((!((__pyx_v_long_is_signed ^ __pyx_v_dtype_signed) != 0)) != 0);
+          __pyx_t_3 = __pyx_t_2;
+          __pyx_L24_bool_binop_done:;
+          if (__pyx_t_3) {
+            if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_n_s_long, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 44, __pyx_L1_error)
+            goto __pyx_L10_break;
+          }
+          __pyx_t_2 = (((sizeof(PY_LONG_LONG)) == __pyx_v_itemsize) != 0);
+          if (__pyx_t_2) {
+          } else {
+            __pyx_t_3 = __pyx_t_2;
+            goto __pyx_L28_bool_binop_done;
+          }
+          __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_ndim); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 44, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_6);
+          __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_6); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 44, __pyx_L1_error)
+          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+          __pyx_t_2 = ((((Py_ssize_t)__pyx_t_5) == 3) != 0);
+          if (__pyx_t_2) {
+          } else {
+            __pyx_t_3 = __pyx_t_2;
+            goto __pyx_L28_bool_binop_done;
+          }
+          __pyx_t_2 = ((!((__pyx_v_long_long_is_signed ^ __pyx_v_dtype_signed) != 0)) != 0);
+          __pyx_t_3 = __pyx_t_2;
+          __pyx_L28_bool_binop_done:;
+          if (__pyx_t_3) {
+            if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_kp_s_long_long, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 44, __pyx_L1_error)
+            goto __pyx_L10_break;
+          }
+          __pyx_t_2 = (((sizeof(unsigned short)) == __pyx_v_itemsize) != 0);
+          if (__pyx_t_2) {
+          } else {
+            __pyx_t_3 = __pyx_t_2;
+            goto __pyx_L32_bool_binop_done;
+          }
+          __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_ndim); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 44, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_6);
+          __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_6); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 44, __pyx_L1_error)
+          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+          __pyx_t_2 = ((((Py_ssize_t)__pyx_t_5) == 3) != 0);
+          if (__pyx_t_2) {
+          } else {
+            __pyx_t_3 = __pyx_t_2;
+            goto __pyx_L32_bool_binop_done;
+          }
+          __pyx_t_2 = ((!((__pyx_v_unsigned_short_is_signed ^ __pyx_v_dtype_signed) != 0)) != 0);
+          __pyx_t_3 = __pyx_t_2;
+          __pyx_L32_bool_binop_done:;
+          if (__pyx_t_3) {
+            if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_kp_s_unsigned_short, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 44, __pyx_L1_error)
+            goto __pyx_L10_break;
+          }
+          __pyx_t_2 = (((sizeof(unsigned int)) == __pyx_v_itemsize) != 0);
+          if (__pyx_t_2) {
+          } else {
+            __pyx_t_3 = __pyx_t_2;
+            goto __pyx_L36_bool_binop_done;
+          }
+          __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_ndim); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 44, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_6);
+          __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_6); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 44, __pyx_L1_error)
+          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+          __pyx_t_2 = ((((Py_ssize_t)__pyx_t_5) == 3) != 0);
+          if (__pyx_t_2) {
+          } else {
+            __pyx_t_3 = __pyx_t_2;
+            goto __pyx_L36_bool_binop_done;
+          }
+          __pyx_t_2 = ((!((__pyx_v_unsigned_int_is_signed ^ __pyx_v_dtype_signed) != 0)) != 0);
+          __pyx_t_3 = __pyx_t_2;
+          __pyx_L36_bool_binop_done:;
+          if (__pyx_t_3) {
+            if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_kp_s_unsigned_int, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 44, __pyx_L1_error)
+            goto __pyx_L10_break;
+          }
+          __pyx_t_2 = (((sizeof(unsigned long)) == __pyx_v_itemsize) != 0);
+          if (__pyx_t_2) {
+          } else {
+            __pyx_t_3 = __pyx_t_2;
+            goto __pyx_L40_bool_binop_done;
+          }
+          __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_ndim); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 44, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_6);
+          __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_6); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 44, __pyx_L1_error)
+          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+          __pyx_t_2 = ((((Py_ssize_t)__pyx_t_5) == 3) != 0);
+          if (__pyx_t_2) {
+          } else {
+            __pyx_t_3 = __pyx_t_2;
+            goto __pyx_L40_bool_binop_done;
+          }
+          __pyx_t_2 = ((!((__pyx_v_unsigned_long_is_signed ^ __pyx_v_dtype_signed) != 0)) != 0);
+          __pyx_t_3 = __pyx_t_2;
+          __pyx_L40_bool_binop_done:;
+          if (__pyx_t_3) {
+            if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_kp_s_unsigned_long, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 44, __pyx_L1_error)
+            goto __pyx_L10_break;
+          }
+          break;
+          case 'f':
+          break;
+          case 'c':
+          break;
+          case 'O':
+          break;
+          default: break;
+        }
+      }
+    }
+    __pyx_t_2 = ((__pyx_v_itemsize == -1L) != 0);
+    if (!__pyx_t_2) {
+    } else {
+      __pyx_t_3 = __pyx_t_2;
+      goto __pyx_L44_bool_binop_done;
+    }
+    __pyx_t_2 = ((__pyx_v_itemsize == (sizeof(short))) != 0);
+    __pyx_t_3 = __pyx_t_2;
+    __pyx_L44_bool_binop_done:;
+    if (__pyx_t_3) {
+      __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_short(__pyx_v_arg, 0); 
+      __pyx_v_memslice = __pyx_t_8;
+      __pyx_t_3 = (__pyx_v_memslice.memview != 0);
+      if (__pyx_t_3) {
+        __PYX_XDEC_MEMVIEW((&__pyx_v_memslice), 1); 
+        if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_n_s_short, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 44, __pyx_L1_error)
+        goto __pyx_L10_break;
+      }
+      /*else*/ {
+        PyErr_Clear(); 
+      }
+    }
+    __pyx_t_2 = ((__pyx_v_itemsize == -1L) != 0);
+    if (!__pyx_t_2) {
+    } else {
+      __pyx_t_3 = __pyx_t_2;
+      goto __pyx_L48_bool_binop_done;
+    }
+    __pyx_t_2 = ((__pyx_v_itemsize == (sizeof(int))) != 0);
+    __pyx_t_3 = __pyx_t_2;
+    __pyx_L48_bool_binop_done:;
+    if (__pyx_t_3) {
+      __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_int(__pyx_v_arg, 0); 
+      __pyx_v_memslice = __pyx_t_8;
+      __pyx_t_3 = (__pyx_v_memslice.memview != 0);
+      if (__pyx_t_3) {
+        __PYX_XDEC_MEMVIEW((&__pyx_v_memslice), 1); 
+        if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_n_s_int, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 44, __pyx_L1_error)
+        goto __pyx_L10_break;
+      }
+      /*else*/ {
+        PyErr_Clear(); 
+      }
+    }
+    __pyx_t_2 = ((__pyx_v_itemsize == -1L) != 0);
+    if (!__pyx_t_2) {
+    } else {
+      __pyx_t_3 = __pyx_t_2;
+      goto __pyx_L52_bool_binop_done;
+    }
+    __pyx_t_2 = ((__pyx_v_itemsize == (sizeof(long))) != 0);
+    __pyx_t_3 = __pyx_t_2;
+    __pyx_L52_bool_binop_done:;
+    if (__pyx_t_3) {
+      __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_long(__pyx_v_arg, 0); 
+      __pyx_v_memslice = __pyx_t_8;
+      __pyx_t_3 = (__pyx_v_memslice.memview != 0);
+      if (__pyx_t_3) {
+        __PYX_XDEC_MEMVIEW((&__pyx_v_memslice), 1); 
+        if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_n_s_long, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 44, __pyx_L1_error)
+        goto __pyx_L10_break;
+      }
+      /*else*/ {
+        PyErr_Clear(); 
+      }
+    }
+    __pyx_t_2 = ((__pyx_v_itemsize == -1L) != 0);
+    if (!__pyx_t_2) {
+    } else {
+      __pyx_t_3 = __pyx_t_2;
+      goto __pyx_L56_bool_binop_done;
+    }
+    __pyx_t_2 = ((__pyx_v_itemsize == (sizeof(PY_LONG_LONG))) != 0);
+    __pyx_t_3 = __pyx_t_2;
+    __pyx_L56_bool_binop_done:;
+    if (__pyx_t_3) {
+      __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_PY_LONG_LONG(__pyx_v_arg, 0); 
+      __pyx_v_memslice = __pyx_t_8;
+      __pyx_t_3 = (__pyx_v_memslice.memview != 0);
+      if (__pyx_t_3) {
+        __PYX_XDEC_MEMVIEW((&__pyx_v_memslice), 1); 
+        if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_kp_s_long_long, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 44, __pyx_L1_error)
+        goto __pyx_L10_break;
+      }
+      /*else*/ {
+        PyErr_Clear(); 
+      }
+    }
+    __pyx_t_2 = ((__pyx_v_itemsize == -1L) != 0);
+    if (!__pyx_t_2) {
+    } else {
+      __pyx_t_3 = __pyx_t_2;
+      goto __pyx_L60_bool_binop_done;
+    }
+    __pyx_t_2 = ((__pyx_v_itemsize == (sizeof(unsigned short))) != 0);
+    __pyx_t_3 = __pyx_t_2;
+    __pyx_L60_bool_binop_done:;
+    if (__pyx_t_3) {
+      __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_short(__pyx_v_arg, 0); 
+      __pyx_v_memslice = __pyx_t_8;
+      __pyx_t_3 = (__pyx_v_memslice.memview != 0);
+      if (__pyx_t_3) {
+        __PYX_XDEC_MEMVIEW((&__pyx_v_memslice), 1); 
+        if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_kp_s_unsigned_short, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 44, __pyx_L1_error)
+        goto __pyx_L10_break;
+      }
+      /*else*/ {
+        PyErr_Clear(); 
+      }
+    }
+    __pyx_t_2 = ((__pyx_v_itemsize == -1L) != 0);
+    if (!__pyx_t_2) {
+    } else {
+      __pyx_t_3 = __pyx_t_2;
+      goto __pyx_L64_bool_binop_done;
+    }
+    __pyx_t_2 = ((__pyx_v_itemsize == (sizeof(unsigned int))) != 0);
+    __pyx_t_3 = __pyx_t_2;
+    __pyx_L64_bool_binop_done:;
+    if (__pyx_t_3) {
+      __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_int(__pyx_v_arg, 0); 
+      __pyx_v_memslice = __pyx_t_8;
+      __pyx_t_3 = (__pyx_v_memslice.memview != 0);
+      if (__pyx_t_3) {
+        __PYX_XDEC_MEMVIEW((&__pyx_v_memslice), 1); 
+        if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_kp_s_unsigned_int, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 44, __pyx_L1_error)
+        goto __pyx_L10_break;
+      }
+      /*else*/ {
+        PyErr_Clear(); 
+      }
+    }
+    __pyx_t_2 = ((__pyx_v_itemsize == -1L) != 0);
+    if (!__pyx_t_2) {
+    } else {
+      __pyx_t_3 = __pyx_t_2;
+      goto __pyx_L68_bool_binop_done;
+    }
+    __pyx_t_2 = ((__pyx_v_itemsize == (sizeof(unsigned long))) != 0);
+    __pyx_t_3 = __pyx_t_2;
+    __pyx_L68_bool_binop_done:;
+    if (__pyx_t_3) {
+      __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_long(__pyx_v_arg, 0); 
+      __pyx_v_memslice = __pyx_t_8;
+      __pyx_t_3 = (__pyx_v_memslice.memview != 0);
+      if (__pyx_t_3) {
+        __PYX_XDEC_MEMVIEW((&__pyx_v_memslice), 1); 
+        if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_kp_s_unsigned_long, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 44, __pyx_L1_error)
+        goto __pyx_L10_break;
+      }
+      /*else*/ {
+        PyErr_Clear(); 
+      }
+    }
+    if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, Py_None, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 44, __pyx_L1_error)
+    goto __pyx_L10_break;
+  }
+  __pyx_L10_break:;
+  __pyx_t_6 = PyList_New(0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 44, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_6);
+  __pyx_v_candidates = ((PyObject*)__pyx_t_6);
+  __pyx_t_6 = 0;
+  __pyx_t_5 = 0;
+  if (unlikely(__pyx_v_signatures == Py_None)) {
+    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
+    __PYX_ERR(0, 44, __pyx_L1_error)
+  }
+  __pyx_t_1 = __Pyx_dict_iterator(((PyObject*)__pyx_v_signatures), 1, ((PyObject *)NULL), (&__pyx_t_9), (&__pyx_t_10)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 44, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_6);
+  __pyx_t_6 = __pyx_t_1;
+  __pyx_t_1 = 0;
+  while (1) {
+    __pyx_t_11 = __Pyx_dict_iter_next(__pyx_t_6, __pyx_t_9, &__pyx_t_5, &__pyx_t_1, NULL, NULL, __pyx_t_10);
+    if (unlikely(__pyx_t_11 == 0)) break;
+    if (unlikely(__pyx_t_11 == -1)) __PYX_ERR(0, 44, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_1);
+    __Pyx_XDECREF_SET(__pyx_v_sig, __pyx_t_1);
+    __pyx_t_1 = 0;
+    __pyx_v_match_found = 0;
+    __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_v_sig, __pyx_n_s_strip); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 44, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_13);
+    __pyx_t_14 = NULL;
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_13))) {
+      __pyx_t_14 = PyMethod_GET_SELF(__pyx_t_13);
+      if (likely(__pyx_t_14)) {
+        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13);
+        __Pyx_INCREF(__pyx_t_14);
+        __Pyx_INCREF(function);
+        __Pyx_DECREF_SET(__pyx_t_13, function);
+      }
+    }
+    __pyx_t_12 = (__pyx_t_14) ? __Pyx_PyObject_Call2Args(__pyx_t_13, __pyx_t_14, __pyx_kp_s_) : __Pyx_PyObject_CallOneArg(__pyx_t_13, __pyx_kp_s_);
+    __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
+    if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 44, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_12);
+    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+    __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_n_s_split); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 44, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_13);
+    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
+    __pyx_t_12 = NULL;
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_13))) {
+      __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_13);
+      if (likely(__pyx_t_12)) {
+        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13);
+        __Pyx_INCREF(__pyx_t_12);
+        __Pyx_INCREF(function);
+        __Pyx_DECREF_SET(__pyx_t_13, function);
+      }
+    }
+    __pyx_t_1 = (__pyx_t_12) ? __Pyx_PyObject_Call2Args(__pyx_t_13, __pyx_t_12, __pyx_kp_s__2) : __Pyx_PyObject_CallOneArg(__pyx_t_13, __pyx_kp_s__2);
+    __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
+    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 44, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_1);
+    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+    __Pyx_XDECREF_SET(__pyx_v_src_sig, __pyx_t_1);
+    __pyx_t_1 = 0;
+    __pyx_t_15 = PyList_GET_SIZE(__pyx_v_dest_sig); if (unlikely(__pyx_t_15 == ((Py_ssize_t)-1))) __PYX_ERR(0, 44, __pyx_L1_error)
+    __pyx_t_16 = __pyx_t_15;
+    for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) {
+      __pyx_v_i = __pyx_t_17;
+      __pyx_t_1 = PyList_GET_ITEM(__pyx_v_dest_sig, __pyx_v_i);
+      __Pyx_INCREF(__pyx_t_1);
+      __Pyx_XDECREF_SET(__pyx_v_dst_type, __pyx_t_1);
+      __pyx_t_1 = 0;
+      __pyx_t_3 = (__pyx_v_dst_type != Py_None);
+      __pyx_t_2 = (__pyx_t_3 != 0);
+      if (__pyx_t_2) {
+        __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_src_sig, __pyx_v_i, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 44, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_1);
+        __pyx_t_13 = PyObject_RichCompare(__pyx_t_1, __pyx_v_dst_type, Py_EQ); __Pyx_XGOTREF(__pyx_t_13); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 44, __pyx_L1_error)
+        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+        __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_13); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 44, __pyx_L1_error)
+        __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+        if (__pyx_t_2) {
+          __pyx_v_match_found = 1;
+          goto __pyx_L76;
+        }
+        /*else*/ {
+          __pyx_v_match_found = 0;
+          goto __pyx_L74_break;
+        }
+        __pyx_L76:;
+      }
+    }
+    __pyx_L74_break:;
+    __pyx_t_2 = (__pyx_v_match_found != 0);
+    if (__pyx_t_2) {
+      __pyx_t_18 = __Pyx_PyList_Append(__pyx_v_candidates, __pyx_v_sig); if (unlikely(__pyx_t_18 == ((int)-1))) __PYX_ERR(0, 44, __pyx_L1_error)
+    }
+  }
+  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+  __pyx_t_2 = (PyList_GET_SIZE(__pyx_v_candidates) != 0);
+  __pyx_t_3 = ((!__pyx_t_2) != 0);
+  if (__pyx_t_3) {
+    __pyx_t_6 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__3, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 44, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_6);
+    __Pyx_Raise(__pyx_t_6, 0, 0, 0);
+    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+    __PYX_ERR(0, 44, __pyx_L1_error)
+  }
+  __pyx_t_9 = PyList_GET_SIZE(__pyx_v_candidates); if (unlikely(__pyx_t_9 == ((Py_ssize_t)-1))) __PYX_ERR(0, 44, __pyx_L1_error)
+  __pyx_t_3 = ((__pyx_t_9 > 1) != 0);
+  if (__pyx_t_3) {
+    __pyx_t_6 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__4, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 44, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_6);
+    __Pyx_Raise(__pyx_t_6, 0, 0, 0);
+    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+    __PYX_ERR(0, 44, __pyx_L1_error)
+  }
+  /*else*/ {
+    __Pyx_XDECREF(__pyx_r);
+    if (unlikely(__pyx_v_signatures == Py_None)) {
+      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
+      __PYX_ERR(0, 44, __pyx_L1_error)
+    }
+    __pyx_t_6 = __Pyx_PyDict_GetItem(((PyObject*)__pyx_v_signatures), PyList_GET_ITEM(__pyx_v_candidates, 0)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 44, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_6);
+    __pyx_r = __pyx_t_6;
+    __pyx_t_6 = 0;
+    goto __pyx_L0;
+  }
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_6);
+  __Pyx_XDECREF(__pyx_t_12);
+  __Pyx_XDECREF(__pyx_t_13);
+  __Pyx_XDECREF(__pyx_t_14);
+  __Pyx_AddTraceback("pystencils.boundaries.createindexlistcython.__pyx_fused_cpdef", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XDECREF(__pyx_v_dest_sig);
+  __Pyx_XDECREF(__pyx_v_ndarray);
+  __Pyx_XDECREF(__pyx_v_arg);
+  __Pyx_XDECREF(__pyx_v_dtype);
+  __Pyx_XDECREF(__pyx_v_arg_base);
+  __Pyx_XDECREF(__pyx_v_candidates);
+  __Pyx_XDECREF(__pyx_v_sig);
+  __Pyx_XDECREF(__pyx_v_src_sig);
+  __Pyx_XDECREF(__pyx_v_dst_type);
+  __Pyx_XDECREF(__pyx_v_kwargs);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static PyObject *__pyx_fuse_0__pyx_pw_10pystencils_10boundaries_21createindexlistcython_25create_boundary_neighbor_index_list_3d(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyMethodDef __pyx_fuse_0__pyx_mdef_10pystencils_10boundaries_21createindexlistcython_25create_boundary_neighbor_index_list_3d = {"__pyx_fuse_0create_boundary_neighbor_index_list_3d", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_fuse_0__pyx_pw_10pystencils_10boundaries_21createindexlistcython_25create_boundary_neighbor_index_list_3d, METH_VARARGS|METH_KEYWORDS, 0};
+static PyObject *__pyx_fuse_0__pyx_pw_10pystencils_10boundaries_21createindexlistcython_25create_boundary_neighbor_index_list_3d(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_flag_field = 0;
+  int __pyx_v_nr_of_ghost_layers;
+  short __pyx_v_boundary_mask;
+  short __pyx_v_fluid_mask;
+  PyObject *__pyx_v_stencil = 0;
+  int __pyx_v_single_link;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("create_boundary_neighbor_index_list_3d (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_flag_field,&__pyx_n_s_nr_of_ghost_layers,&__pyx_n_s_boundary_mask,&__pyx_n_s_fluid_mask,&__pyx_n_s_stencil,&__pyx_n_s_single_link,0};
+    PyObject* values[6] = {0,0,0,0,0,0};
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
+        CYTHON_FALLTHROUGH;
+        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+        CYTHON_FALLTHROUGH;
+        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
+        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_flag_field)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
+        case  1:
+        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_nr_of_ghost_layers)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_neighbor_index_list_3d", 1, 6, 6, 1); __PYX_ERR(0, 44, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  2:
+        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_boundary_mask)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_neighbor_index_list_3d", 1, 6, 6, 2); __PYX_ERR(0, 44, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  3:
+        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_fluid_mask)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_neighbor_index_list_3d", 1, 6, 6, 3); __PYX_ERR(0, 44, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  4:
+        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_stencil)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_neighbor_index_list_3d", 1, 6, 6, 4); __PYX_ERR(0, 44, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  5:
+        if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_single_link)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_neighbor_index_list_3d", 1, 6, 6, 5); __PYX_ERR(0, 44, __pyx_L3_error)
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "create_boundary_neighbor_index_list_3d") < 0)) __PYX_ERR(0, 44, __pyx_L3_error)
+      }
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 6) {
+      goto __pyx_L5_argtuple_error;
+    } else {
+      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+      values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+      values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+      values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
+    }
+    __pyx_v_flag_field = ((PyObject *)values[0]);
+    __pyx_v_nr_of_ghost_layers = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_nr_of_ghost_layers == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 45, __pyx_L3_error)
+    __pyx_v_boundary_mask = __Pyx_PyInt_As_short(values[2]); if (unlikely((__pyx_v_boundary_mask == (short)-1) && PyErr_Occurred())) __PYX_ERR(0, 45, __pyx_L3_error)
+    __pyx_v_fluid_mask = __Pyx_PyInt_As_short(values[3]); if (unlikely((__pyx_v_fluid_mask == (short)-1) && PyErr_Occurred())) __PYX_ERR(0, 45, __pyx_L3_error)
+    __pyx_v_stencil = ((PyObject *)values[4]);
+    __pyx_v_single_link = __Pyx_PyInt_As_int(values[5]); if (unlikely((__pyx_v_single_link == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 46, __pyx_L3_error)
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("create_boundary_neighbor_index_list_3d", 1, 6, 6, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 44, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("pystencils.boundaries.createindexlistcython.create_boundary_neighbor_index_list_3d", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_10pystencils_10boundaries_21createindexlistcython_24create_boundary_neighbor_index_list_3d(__pyx_self, __pyx_v_flag_field, __pyx_v_nr_of_ghost_layers, __pyx_v_boundary_mask, __pyx_v_fluid_mask, __pyx_v_stencil, __pyx_v_single_link);
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_10pystencils_10boundaries_21createindexlistcython_24create_boundary_neighbor_index_list_3d(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_flag_field, int __pyx_v_nr_of_ghost_layers, short __pyx_v_boundary_mask, short __pyx_v_fluid_mask, PyObject *__pyx_v_stencil, int __pyx_v_single_link) {
+  int __pyx_v_xs;
+  int __pyx_v_ys;
+  int __pyx_v_zs;
+  int __pyx_v_x;
+  int __pyx_v_y;
+  int __pyx_v_z;
+  int __pyx_v_dirIdx;
+  int __pyx_v_num_directions;
+  int __pyx_v_dx;
+  int __pyx_v_dy;
+  int __pyx_v_dz;
+  PyObject *__pyx_v_boundary_index_list = NULL;
+  __Pyx_LocalBuf_ND __pyx_pybuffernd_flag_field;
+  __Pyx_Buffer __pyx_pybuffer_flag_field;
+  __Pyx_LocalBuf_ND __pyx_pybuffernd_stencil;
+  __Pyx_Buffer __pyx_pybuffer_stencil;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
+  PyObject *__pyx_t_5 = NULL;
+  PyObject *(*__pyx_t_6)(PyObject *);
+  int __pyx_t_7;
+  int __pyx_t_8;
+  int __pyx_t_9;
+  int __pyx_t_10;
+  int __pyx_t_11;
+  int __pyx_t_12;
+  int __pyx_t_13;
+  int __pyx_t_14;
+  int __pyx_t_15;
+  Py_ssize_t __pyx_t_16;
+  Py_ssize_t __pyx_t_17;
+  Py_ssize_t __pyx_t_18;
+  int __pyx_t_19;
+  int __pyx_t_20;
+  int __pyx_t_21;
+  int __pyx_t_22;
+  Py_ssize_t __pyx_t_23;
+  Py_ssize_t __pyx_t_24;
+  Py_ssize_t __pyx_t_25;
+  Py_ssize_t __pyx_t_26;
+  Py_ssize_t __pyx_t_27;
+  Py_ssize_t __pyx_t_28;
+  Py_ssize_t __pyx_t_29;
+  Py_ssize_t __pyx_t_30;
+  Py_ssize_t __pyx_t_31;
+  int __pyx_t_32;
+  __Pyx_RefNannySetupContext("__pyx_fuse_0create_boundary_neighbor_index_list_3d", 0);
+  __pyx_pybuffer_flag_field.pybuffer.buf = NULL;
+  __pyx_pybuffer_flag_field.refcount = 0;
+  __pyx_pybuffernd_flag_field.data = NULL;
+  __pyx_pybuffernd_flag_field.rcbuffer = &__pyx_pybuffer_flag_field;
+  __pyx_pybuffer_stencil.pybuffer.buf = NULL;
+  __pyx_pybuffer_stencil.refcount = 0;
+  __pyx_pybuffernd_stencil.data = NULL;
+  __pyx_pybuffernd_stencil.rcbuffer = &__pyx_pybuffer_stencil;
+  {
+    __Pyx_BufFmt_StackElem __pyx_stack[1];
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_flag_field.rcbuffer->pybuffer, (PyObject*)__pyx_v_flag_field, &__Pyx_TypeInfo_short, PyBUF_FORMAT| PyBUF_INDIRECT, 3, 0, __pyx_stack) == -1)) __PYX_ERR(0, 44, __pyx_L1_error)
+  }
+  __pyx_pybuffernd_flag_field.diminfo[0].strides = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_flag_field.diminfo[0].shape = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_flag_field.diminfo[0].suboffsets = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.suboffsets[0]; __pyx_pybuffernd_flag_field.diminfo[1].strides = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_flag_field.diminfo[1].shape = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_flag_field.diminfo[1].suboffsets = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.suboffsets[1]; __pyx_pybuffernd_flag_field.diminfo[2].strides = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_flag_field.diminfo[2].shape = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.shape[2]; __pyx_pybuffernd_flag_field.diminfo[2].suboffsets = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.suboffsets[2];
+  {
+    __Pyx_BufFmt_StackElem __pyx_stack[1];
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_stencil.rcbuffer->pybuffer, (PyObject*)__pyx_v_stencil, &__Pyx_TypeInfo_int, PyBUF_FORMAT| PyBUF_INDIRECT, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 44, __pyx_L1_error)
+  }
+  __pyx_pybuffernd_stencil.diminfo[0].strides = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_stencil.diminfo[0].shape = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_stencil.diminfo[0].suboffsets = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.suboffsets[0]; __pyx_pybuffernd_stencil.diminfo[1].strides = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_stencil.diminfo[1].shape = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_stencil.diminfo[1].suboffsets = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.suboffsets[1];
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":50
+ *     cdef int dirIdx, num_directions, dx, dy, dz
+ * 
+ *     xs, ys, zs = flag_field.shape             # <<<<<<<<<<<<<<
+ *     boundary_index_list = []
+ *     num_directions = stencil.shape[0]
+ */
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_flag_field), __pyx_n_s_shape); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 50, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) {
+    PyObject* sequence = __pyx_t_1;
+    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
+    if (unlikely(size != 3)) {
+      if (size > 3) __Pyx_RaiseTooManyValuesError(3);
+      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
+      __PYX_ERR(0, 50, __pyx_L1_error)
+    }
+    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+    if (likely(PyTuple_CheckExact(sequence))) {
+      __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
+      __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); 
+      __pyx_t_4 = PyTuple_GET_ITEM(sequence, 2); 
+    } else {
+      __pyx_t_2 = PyList_GET_ITEM(sequence, 0); 
+      __pyx_t_3 = PyList_GET_ITEM(sequence, 1); 
+      __pyx_t_4 = PyList_GET_ITEM(sequence, 2); 
+    }
+    __Pyx_INCREF(__pyx_t_2);
+    __Pyx_INCREF(__pyx_t_3);
+    __Pyx_INCREF(__pyx_t_4);
+    #else
+    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 50, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_2);
+    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 50, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    __pyx_t_4 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 50, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
+    #endif
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  } else {
+    Py_ssize_t index = -1;
+    __pyx_t_5 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 50, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_5);
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __pyx_t_6 = Py_TYPE(__pyx_t_5)->tp_iternext;
+    index = 0; __pyx_t_2 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_2)) goto __pyx_L3_unpacking_failed;
+    __Pyx_GOTREF(__pyx_t_2);
+    index = 1; __pyx_t_3 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_3)) goto __pyx_L3_unpacking_failed;
+    __Pyx_GOTREF(__pyx_t_3);
+    index = 2; __pyx_t_4 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_4)) goto __pyx_L3_unpacking_failed;
+    __Pyx_GOTREF(__pyx_t_4);
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_5), 3) < 0) __PYX_ERR(0, 50, __pyx_L1_error)
+    __pyx_t_6 = NULL;
+    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+    goto __pyx_L4_unpacking_done;
+    __pyx_L3_unpacking_failed:;
+    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+    __pyx_t_6 = NULL;
+    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
+    __PYX_ERR(0, 50, __pyx_L1_error)
+    __pyx_L4_unpacking_done:;
+  }
+  __pyx_t_7 = __Pyx_PyInt_As_int(__pyx_t_2); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 50, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_8 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_8 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 50, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __pyx_t_9 = __Pyx_PyInt_As_int(__pyx_t_4); if (unlikely((__pyx_t_9 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 50, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __pyx_v_xs = __pyx_t_7;
+  __pyx_v_ys = __pyx_t_8;
+  __pyx_v_zs = __pyx_t_9;
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":51
+ * 
+ *     xs, ys, zs = flag_field.shape
+ *     boundary_index_list = []             # <<<<<<<<<<<<<<
+ *     num_directions = stencil.shape[0]
+ * 
+ */
+  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 51, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_boundary_index_list = ((PyObject*)__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":52
+ *     xs, ys, zs = flag_field.shape
+ *     boundary_index_list = []
+ *     num_directions = stencil.shape[0]             # <<<<<<<<<<<<<<
+ * 
+ *     for z in range(nr_of_ghost_layers, zs - nr_of_ghost_layers):
+ */
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_stencil), __pyx_n_s_shape); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 52, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_4 = __Pyx_GetItemInt(__pyx_t_1, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 52, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_9 = __Pyx_PyInt_As_int(__pyx_t_4); if (unlikely((__pyx_t_9 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 52, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __pyx_v_num_directions = __pyx_t_9;
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":54
+ *     num_directions = stencil.shape[0]
+ * 
+ *     for z in range(nr_of_ghost_layers, zs - nr_of_ghost_layers):             # <<<<<<<<<<<<<<
+ *         for y in range(nr_of_ghost_layers, ys - nr_of_ghost_layers):
+ *             for x in range(nr_of_ghost_layers, xs - nr_of_ghost_layers):
+ */
+  __pyx_t_9 = (__pyx_v_zs - __pyx_v_nr_of_ghost_layers);
+  __pyx_t_8 = __pyx_t_9;
+  for (__pyx_t_7 = __pyx_v_nr_of_ghost_layers; __pyx_t_7 < __pyx_t_8; __pyx_t_7+=1) {
+    __pyx_v_z = __pyx_t_7;
+
+    /* "pystencils/boundaries/createindexlistcython.pyx":55
+ * 
+ *     for z in range(nr_of_ghost_layers, zs - nr_of_ghost_layers):
+ *         for y in range(nr_of_ghost_layers, ys - nr_of_ghost_layers):             # <<<<<<<<<<<<<<
+ *             for x in range(nr_of_ghost_layers, xs - nr_of_ghost_layers):
+ *                 if flag_field[x, y, z] & fluid_mask:
+ */
+    __pyx_t_10 = (__pyx_v_ys - __pyx_v_nr_of_ghost_layers);
+    __pyx_t_11 = __pyx_t_10;
+    for (__pyx_t_12 = __pyx_v_nr_of_ghost_layers; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) {
+      __pyx_v_y = __pyx_t_12;
+
+      /* "pystencils/boundaries/createindexlistcython.pyx":56
+ *     for z in range(nr_of_ghost_layers, zs - nr_of_ghost_layers):
+ *         for y in range(nr_of_ghost_layers, ys - nr_of_ghost_layers):
+ *             for x in range(nr_of_ghost_layers, xs - nr_of_ghost_layers):             # <<<<<<<<<<<<<<
+ *                 if flag_field[x, y, z] & fluid_mask:
+ *                     for dirIdx in range(num_directions):
+ */
+      __pyx_t_13 = (__pyx_v_xs - __pyx_v_nr_of_ghost_layers);
+      __pyx_t_14 = __pyx_t_13;
+      for (__pyx_t_15 = __pyx_v_nr_of_ghost_layers; __pyx_t_15 < __pyx_t_14; __pyx_t_15+=1) {
+        __pyx_v_x = __pyx_t_15;
+
+        /* "pystencils/boundaries/createindexlistcython.pyx":57
+ *         for y in range(nr_of_ghost_layers, ys - nr_of_ghost_layers):
+ *             for x in range(nr_of_ghost_layers, xs - nr_of_ghost_layers):
+ *                 if flag_field[x, y, z] & fluid_mask:             # <<<<<<<<<<<<<<
+ *                     for dirIdx in range(num_directions):
+ *                         dx = stencil[dirIdx,0]
+ */
+        __pyx_t_16 = __pyx_v_x;
+        __pyx_t_17 = __pyx_v_y;
+        __pyx_t_18 = __pyx_v_z;
+        __pyx_t_19 = (((*__Pyx_BufPtrFull3d(short *, __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.buf, __pyx_t_16, __pyx_pybuffernd_flag_field.diminfo[0].strides, __pyx_pybuffernd_flag_field.diminfo[0].suboffsets, __pyx_t_17, __pyx_pybuffernd_flag_field.diminfo[1].strides, __pyx_pybuffernd_flag_field.diminfo[1].suboffsets, __pyx_t_18, __pyx_pybuffernd_flag_field.diminfo[2].strides, __pyx_pybuffernd_flag_field.diminfo[2].suboffsets)) & __pyx_v_fluid_mask) != 0);
+        if (__pyx_t_19) {
+
+          /* "pystencils/boundaries/createindexlistcython.pyx":58
+ *             for x in range(nr_of_ghost_layers, xs - nr_of_ghost_layers):
+ *                 if flag_field[x, y, z] & fluid_mask:
+ *                     for dirIdx in range(num_directions):             # <<<<<<<<<<<<<<
+ *                         dx = stencil[dirIdx,0]
+ *                         dy = stencil[dirIdx,1]
+ */
+          __pyx_t_20 = __pyx_v_num_directions;
+          __pyx_t_21 = __pyx_t_20;
+          for (__pyx_t_22 = 0; __pyx_t_22 < __pyx_t_21; __pyx_t_22+=1) {
+            __pyx_v_dirIdx = __pyx_t_22;
+
+            /* "pystencils/boundaries/createindexlistcython.pyx":59
+ *                 if flag_field[x, y, z] & fluid_mask:
+ *                     for dirIdx in range(num_directions):
+ *                         dx = stencil[dirIdx,0]             # <<<<<<<<<<<<<<
+ *                         dy = stencil[dirIdx,1]
+ *                         dz = stencil[dirIdx,2]
+ */
+            __pyx_t_23 = __pyx_v_dirIdx;
+            __pyx_t_24 = 0;
+            __pyx_v_dx = (*__Pyx_BufPtrFull2d(int *, __pyx_pybuffernd_stencil.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_stencil.diminfo[0].strides, __pyx_pybuffernd_stencil.diminfo[0].suboffsets, __pyx_t_24, __pyx_pybuffernd_stencil.diminfo[1].strides, __pyx_pybuffernd_stencil.diminfo[1].suboffsets));
+
+            /* "pystencils/boundaries/createindexlistcython.pyx":60
+ *                     for dirIdx in range(num_directions):
+ *                         dx = stencil[dirIdx,0]
+ *                         dy = stencil[dirIdx,1]             # <<<<<<<<<<<<<<
+ *                         dz = stencil[dirIdx,2]
+ *                         if flag_field[x + dx, y + dy, z + dz] & boundary_mask:
+ */
+            __pyx_t_25 = __pyx_v_dirIdx;
+            __pyx_t_26 = 1;
+            __pyx_v_dy = (*__Pyx_BufPtrFull2d(int *, __pyx_pybuffernd_stencil.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_stencil.diminfo[0].strides, __pyx_pybuffernd_stencil.diminfo[0].suboffsets, __pyx_t_26, __pyx_pybuffernd_stencil.diminfo[1].strides, __pyx_pybuffernd_stencil.diminfo[1].suboffsets));
+
+            /* "pystencils/boundaries/createindexlistcython.pyx":61
+ *                         dx = stencil[dirIdx,0]
+ *                         dy = stencil[dirIdx,1]
+ *                         dz = stencil[dirIdx,2]             # <<<<<<<<<<<<<<
+ *                         if flag_field[x + dx, y + dy, z + dz] & boundary_mask:
+ *                             boundary_index_list.append((x,y,z, dirIdx))
+ */
+            __pyx_t_27 = __pyx_v_dirIdx;
+            __pyx_t_28 = 2;
+            __pyx_v_dz = (*__Pyx_BufPtrFull2d(int *, __pyx_pybuffernd_stencil.rcbuffer->pybuffer.buf, __pyx_t_27, __pyx_pybuffernd_stencil.diminfo[0].strides, __pyx_pybuffernd_stencil.diminfo[0].suboffsets, __pyx_t_28, __pyx_pybuffernd_stencil.diminfo[1].strides, __pyx_pybuffernd_stencil.diminfo[1].suboffsets));
+
+            /* "pystencils/boundaries/createindexlistcython.pyx":62
+ *                         dy = stencil[dirIdx,1]
+ *                         dz = stencil[dirIdx,2]
+ *                         if flag_field[x + dx, y + dy, z + dz] & boundary_mask:             # <<<<<<<<<<<<<<
+ *                             boundary_index_list.append((x,y,z, dirIdx))
+ *                             if single_link:
+ */
+            __pyx_t_29 = (__pyx_v_x + __pyx_v_dx);
+            __pyx_t_30 = (__pyx_v_y + __pyx_v_dy);
+            __pyx_t_31 = (__pyx_v_z + __pyx_v_dz);
+            __pyx_t_19 = (((*__Pyx_BufPtrFull3d(short *, __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.buf, __pyx_t_29, __pyx_pybuffernd_flag_field.diminfo[0].strides, __pyx_pybuffernd_flag_field.diminfo[0].suboffsets, __pyx_t_30, __pyx_pybuffernd_flag_field.diminfo[1].strides, __pyx_pybuffernd_flag_field.diminfo[1].suboffsets, __pyx_t_31, __pyx_pybuffernd_flag_field.diminfo[2].strides, __pyx_pybuffernd_flag_field.diminfo[2].suboffsets)) & __pyx_v_boundary_mask) != 0);
+            if (__pyx_t_19) {
+
+              /* "pystencils/boundaries/createindexlistcython.pyx":63
+ *                         dz = stencil[dirIdx,2]
+ *                         if flag_field[x + dx, y + dy, z + dz] & boundary_mask:
+ *                             boundary_index_list.append((x,y,z, dirIdx))             # <<<<<<<<<<<<<<
+ *                             if single_link:
+ *                                 break
+ */
+              __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_x); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 63, __pyx_L1_error)
+              __Pyx_GOTREF(__pyx_t_4);
+              __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_y); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 63, __pyx_L1_error)
+              __Pyx_GOTREF(__pyx_t_1);
+              __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_z); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 63, __pyx_L1_error)
+              __Pyx_GOTREF(__pyx_t_3);
+              __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_dirIdx); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 63, __pyx_L1_error)
+              __Pyx_GOTREF(__pyx_t_2);
+              __pyx_t_5 = PyTuple_New(4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 63, __pyx_L1_error)
+              __Pyx_GOTREF(__pyx_t_5);
+              __Pyx_GIVEREF(__pyx_t_4);
+              PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4);
+              __Pyx_GIVEREF(__pyx_t_1);
+              PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_1);
+              __Pyx_GIVEREF(__pyx_t_3);
+              PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_t_3);
+              __Pyx_GIVEREF(__pyx_t_2);
+              PyTuple_SET_ITEM(__pyx_t_5, 3, __pyx_t_2);
+              __pyx_t_4 = 0;
+              __pyx_t_1 = 0;
+              __pyx_t_3 = 0;
+              __pyx_t_2 = 0;
+              __pyx_t_32 = __Pyx_PyList_Append(__pyx_v_boundary_index_list, __pyx_t_5); if (unlikely(__pyx_t_32 == ((int)-1))) __PYX_ERR(0, 63, __pyx_L1_error)
+              __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+              /* "pystencils/boundaries/createindexlistcython.pyx":64
+ *                         if flag_field[x + dx, y + dy, z + dz] & boundary_mask:
+ *                             boundary_index_list.append((x,y,z, dirIdx))
+ *                             if single_link:             # <<<<<<<<<<<<<<
+ *                                 break
+ *     return boundary_index_list
+ */
+              __pyx_t_19 = (__pyx_v_single_link != 0);
+              if (__pyx_t_19) {
+
+                /* "pystencils/boundaries/createindexlistcython.pyx":65
+ *                             boundary_index_list.append((x,y,z, dirIdx))
+ *                             if single_link:
+ *                                 break             # <<<<<<<<<<<<<<
+ *     return boundary_index_list
+ * 
+ */
+                goto __pyx_L13_break;
+
+                /* "pystencils/boundaries/createindexlistcython.pyx":64
+ *                         if flag_field[x + dx, y + dy, z + dz] & boundary_mask:
+ *                             boundary_index_list.append((x,y,z, dirIdx))
+ *                             if single_link:             # <<<<<<<<<<<<<<
+ *                                 break
+ *     return boundary_index_list
+ */
+              }
+
+              /* "pystencils/boundaries/createindexlistcython.pyx":62
+ *                         dy = stencil[dirIdx,1]
+ *                         dz = stencil[dirIdx,2]
+ *                         if flag_field[x + dx, y + dy, z + dz] & boundary_mask:             # <<<<<<<<<<<<<<
+ *                             boundary_index_list.append((x,y,z, dirIdx))
+ *                             if single_link:
+ */
+            }
+          }
+          __pyx_L13_break:;
+
+          /* "pystencils/boundaries/createindexlistcython.pyx":57
+ *         for y in range(nr_of_ghost_layers, ys - nr_of_ghost_layers):
+ *             for x in range(nr_of_ghost_layers, xs - nr_of_ghost_layers):
+ *                 if flag_field[x, y, z] & fluid_mask:             # <<<<<<<<<<<<<<
+ *                     for dirIdx in range(num_directions):
+ *                         dx = stencil[dirIdx,0]
+ */
+        }
+      }
+    }
+  }
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":66
+ *                             if single_link:
+ *                                 break
+ *     return boundary_index_list             # <<<<<<<<<<<<<<
+ * 
+ * 
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(__pyx_v_boundary_index_list);
+  __pyx_r = __pyx_v_boundary_index_list;
+  goto __pyx_L0;
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":44
+ * @cython.boundscheck(False) # turn off bounds-checking for entire function
+ * @cython.wraparound(False)  # turn off negative index wrapping for entire function
+ * def create_boundary_neighbor_index_list_3d(object[IntegerType, ndim=3] flag_field,             # <<<<<<<<<<<<<<
+ *                                            int nr_of_ghost_layers, IntegerType boundary_mask, IntegerType fluid_mask,
+ *                                            object[int, ndim=2] stencil, int single_link):
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_XDECREF(__pyx_t_5);
+  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
+    __Pyx_PyThreadState_declare
+    __Pyx_PyThreadState_assign
+    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
+    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_flag_field.rcbuffer->pybuffer);
+    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_stencil.rcbuffer->pybuffer);
+  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
+  __Pyx_AddTraceback("pystencils.boundaries.createindexlistcython.create_boundary_neighbor_index_list_3d", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  goto __pyx_L2;
+  __pyx_L0:;
+  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_flag_field.rcbuffer->pybuffer);
+  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_stencil.rcbuffer->pybuffer);
+  __pyx_L2:;
+  __Pyx_XDECREF(__pyx_v_boundary_index_list);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static PyObject *__pyx_fuse_1__pyx_pw_10pystencils_10boundaries_21createindexlistcython_27create_boundary_neighbor_index_list_3d(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyMethodDef __pyx_fuse_1__pyx_mdef_10pystencils_10boundaries_21createindexlistcython_27create_boundary_neighbor_index_list_3d = {"__pyx_fuse_1create_boundary_neighbor_index_list_3d", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_fuse_1__pyx_pw_10pystencils_10boundaries_21createindexlistcython_27create_boundary_neighbor_index_list_3d, METH_VARARGS|METH_KEYWORDS, 0};
+static PyObject *__pyx_fuse_1__pyx_pw_10pystencils_10boundaries_21createindexlistcython_27create_boundary_neighbor_index_list_3d(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_flag_field = 0;
+  int __pyx_v_nr_of_ghost_layers;
+  int __pyx_v_boundary_mask;
+  int __pyx_v_fluid_mask;
+  PyObject *__pyx_v_stencil = 0;
+  int __pyx_v_single_link;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("create_boundary_neighbor_index_list_3d (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_flag_field,&__pyx_n_s_nr_of_ghost_layers,&__pyx_n_s_boundary_mask,&__pyx_n_s_fluid_mask,&__pyx_n_s_stencil,&__pyx_n_s_single_link,0};
+    PyObject* values[6] = {0,0,0,0,0,0};
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
+        CYTHON_FALLTHROUGH;
+        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+        CYTHON_FALLTHROUGH;
+        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
+        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_flag_field)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
+        case  1:
+        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_nr_of_ghost_layers)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_neighbor_index_list_3d", 1, 6, 6, 1); __PYX_ERR(0, 44, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  2:
+        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_boundary_mask)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_neighbor_index_list_3d", 1, 6, 6, 2); __PYX_ERR(0, 44, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  3:
+        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_fluid_mask)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_neighbor_index_list_3d", 1, 6, 6, 3); __PYX_ERR(0, 44, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  4:
+        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_stencil)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_neighbor_index_list_3d", 1, 6, 6, 4); __PYX_ERR(0, 44, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  5:
+        if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_single_link)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_neighbor_index_list_3d", 1, 6, 6, 5); __PYX_ERR(0, 44, __pyx_L3_error)
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "create_boundary_neighbor_index_list_3d") < 0)) __PYX_ERR(0, 44, __pyx_L3_error)
+      }
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 6) {
+      goto __pyx_L5_argtuple_error;
+    } else {
+      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+      values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+      values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+      values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
+    }
+    __pyx_v_flag_field = ((PyObject *)values[0]);
+    __pyx_v_nr_of_ghost_layers = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_nr_of_ghost_layers == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 45, __pyx_L3_error)
+    __pyx_v_boundary_mask = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_boundary_mask == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 45, __pyx_L3_error)
+    __pyx_v_fluid_mask = __Pyx_PyInt_As_int(values[3]); if (unlikely((__pyx_v_fluid_mask == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 45, __pyx_L3_error)
+    __pyx_v_stencil = ((PyObject *)values[4]);
+    __pyx_v_single_link = __Pyx_PyInt_As_int(values[5]); if (unlikely((__pyx_v_single_link == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 46, __pyx_L3_error)
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("create_boundary_neighbor_index_list_3d", 1, 6, 6, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 44, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("pystencils.boundaries.createindexlistcython.create_boundary_neighbor_index_list_3d", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_10pystencils_10boundaries_21createindexlistcython_26create_boundary_neighbor_index_list_3d(__pyx_self, __pyx_v_flag_field, __pyx_v_nr_of_ghost_layers, __pyx_v_boundary_mask, __pyx_v_fluid_mask, __pyx_v_stencil, __pyx_v_single_link);
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_10pystencils_10boundaries_21createindexlistcython_26create_boundary_neighbor_index_list_3d(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_flag_field, int __pyx_v_nr_of_ghost_layers, int __pyx_v_boundary_mask, int __pyx_v_fluid_mask, PyObject *__pyx_v_stencil, int __pyx_v_single_link) {
+  int __pyx_v_xs;
+  int __pyx_v_ys;
+  int __pyx_v_zs;
+  int __pyx_v_x;
+  int __pyx_v_y;
+  int __pyx_v_z;
+  int __pyx_v_dirIdx;
+  int __pyx_v_num_directions;
+  int __pyx_v_dx;
+  int __pyx_v_dy;
+  int __pyx_v_dz;
+  PyObject *__pyx_v_boundary_index_list = NULL;
+  __Pyx_LocalBuf_ND __pyx_pybuffernd_flag_field;
+  __Pyx_Buffer __pyx_pybuffer_flag_field;
+  __Pyx_LocalBuf_ND __pyx_pybuffernd_stencil;
+  __Pyx_Buffer __pyx_pybuffer_stencil;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
+  PyObject *__pyx_t_5 = NULL;
+  PyObject *(*__pyx_t_6)(PyObject *);
+  int __pyx_t_7;
+  int __pyx_t_8;
+  int __pyx_t_9;
+  int __pyx_t_10;
+  int __pyx_t_11;
+  int __pyx_t_12;
+  int __pyx_t_13;
+  int __pyx_t_14;
+  int __pyx_t_15;
+  Py_ssize_t __pyx_t_16;
+  Py_ssize_t __pyx_t_17;
+  Py_ssize_t __pyx_t_18;
+  int __pyx_t_19;
+  int __pyx_t_20;
+  int __pyx_t_21;
+  int __pyx_t_22;
+  Py_ssize_t __pyx_t_23;
+  Py_ssize_t __pyx_t_24;
+  Py_ssize_t __pyx_t_25;
+  Py_ssize_t __pyx_t_26;
+  Py_ssize_t __pyx_t_27;
+  Py_ssize_t __pyx_t_28;
+  Py_ssize_t __pyx_t_29;
+  Py_ssize_t __pyx_t_30;
+  Py_ssize_t __pyx_t_31;
+  int __pyx_t_32;
+  __Pyx_RefNannySetupContext("__pyx_fuse_1create_boundary_neighbor_index_list_3d", 0);
+  __pyx_pybuffer_flag_field.pybuffer.buf = NULL;
+  __pyx_pybuffer_flag_field.refcount = 0;
+  __pyx_pybuffernd_flag_field.data = NULL;
+  __pyx_pybuffernd_flag_field.rcbuffer = &__pyx_pybuffer_flag_field;
+  __pyx_pybuffer_stencil.pybuffer.buf = NULL;
+  __pyx_pybuffer_stencil.refcount = 0;
+  __pyx_pybuffernd_stencil.data = NULL;
+  __pyx_pybuffernd_stencil.rcbuffer = &__pyx_pybuffer_stencil;
+  {
+    __Pyx_BufFmt_StackElem __pyx_stack[1];
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_flag_field.rcbuffer->pybuffer, (PyObject*)__pyx_v_flag_field, &__Pyx_TypeInfo_int, PyBUF_FORMAT| PyBUF_INDIRECT, 3, 0, __pyx_stack) == -1)) __PYX_ERR(0, 44, __pyx_L1_error)
+  }
+  __pyx_pybuffernd_flag_field.diminfo[0].strides = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_flag_field.diminfo[0].shape = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_flag_field.diminfo[0].suboffsets = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.suboffsets[0]; __pyx_pybuffernd_flag_field.diminfo[1].strides = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_flag_field.diminfo[1].shape = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_flag_field.diminfo[1].suboffsets = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.suboffsets[1]; __pyx_pybuffernd_flag_field.diminfo[2].strides = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_flag_field.diminfo[2].shape = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.shape[2]; __pyx_pybuffernd_flag_field.diminfo[2].suboffsets = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.suboffsets[2];
+  {
+    __Pyx_BufFmt_StackElem __pyx_stack[1];
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_stencil.rcbuffer->pybuffer, (PyObject*)__pyx_v_stencil, &__Pyx_TypeInfo_int, PyBUF_FORMAT| PyBUF_INDIRECT, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 44, __pyx_L1_error)
+  }
+  __pyx_pybuffernd_stencil.diminfo[0].strides = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_stencil.diminfo[0].shape = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_stencil.diminfo[0].suboffsets = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.suboffsets[0]; __pyx_pybuffernd_stencil.diminfo[1].strides = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_stencil.diminfo[1].shape = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_stencil.diminfo[1].suboffsets = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.suboffsets[1];
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":50
+ *     cdef int dirIdx, num_directions, dx, dy, dz
+ * 
+ *     xs, ys, zs = flag_field.shape             # <<<<<<<<<<<<<<
+ *     boundary_index_list = []
+ *     num_directions = stencil.shape[0]
+ */
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_flag_field), __pyx_n_s_shape); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 50, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) {
+    PyObject* sequence = __pyx_t_1;
+    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
+    if (unlikely(size != 3)) {
+      if (size > 3) __Pyx_RaiseTooManyValuesError(3);
+      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
+      __PYX_ERR(0, 50, __pyx_L1_error)
+    }
+    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+    if (likely(PyTuple_CheckExact(sequence))) {
+      __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
+      __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); 
+      __pyx_t_4 = PyTuple_GET_ITEM(sequence, 2); 
+    } else {
+      __pyx_t_2 = PyList_GET_ITEM(sequence, 0); 
+      __pyx_t_3 = PyList_GET_ITEM(sequence, 1); 
+      __pyx_t_4 = PyList_GET_ITEM(sequence, 2); 
+    }
+    __Pyx_INCREF(__pyx_t_2);
+    __Pyx_INCREF(__pyx_t_3);
+    __Pyx_INCREF(__pyx_t_4);
+    #else
+    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 50, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_2);
+    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 50, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    __pyx_t_4 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 50, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
+    #endif
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  } else {
+    Py_ssize_t index = -1;
+    __pyx_t_5 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 50, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_5);
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __pyx_t_6 = Py_TYPE(__pyx_t_5)->tp_iternext;
+    index = 0; __pyx_t_2 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_2)) goto __pyx_L3_unpacking_failed;
+    __Pyx_GOTREF(__pyx_t_2);
+    index = 1; __pyx_t_3 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_3)) goto __pyx_L3_unpacking_failed;
+    __Pyx_GOTREF(__pyx_t_3);
+    index = 2; __pyx_t_4 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_4)) goto __pyx_L3_unpacking_failed;
+    __Pyx_GOTREF(__pyx_t_4);
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_5), 3) < 0) __PYX_ERR(0, 50, __pyx_L1_error)
+    __pyx_t_6 = NULL;
+    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+    goto __pyx_L4_unpacking_done;
+    __pyx_L3_unpacking_failed:;
+    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+    __pyx_t_6 = NULL;
+    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
+    __PYX_ERR(0, 50, __pyx_L1_error)
+    __pyx_L4_unpacking_done:;
+  }
+  __pyx_t_7 = __Pyx_PyInt_As_int(__pyx_t_2); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 50, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_8 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_8 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 50, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __pyx_t_9 = __Pyx_PyInt_As_int(__pyx_t_4); if (unlikely((__pyx_t_9 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 50, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __pyx_v_xs = __pyx_t_7;
+  __pyx_v_ys = __pyx_t_8;
+  __pyx_v_zs = __pyx_t_9;
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":51
+ * 
+ *     xs, ys, zs = flag_field.shape
+ *     boundary_index_list = []             # <<<<<<<<<<<<<<
+ *     num_directions = stencil.shape[0]
+ * 
+ */
+  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 51, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_boundary_index_list = ((PyObject*)__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":52
+ *     xs, ys, zs = flag_field.shape
+ *     boundary_index_list = []
+ *     num_directions = stencil.shape[0]             # <<<<<<<<<<<<<<
+ * 
+ *     for z in range(nr_of_ghost_layers, zs - nr_of_ghost_layers):
+ */
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_stencil), __pyx_n_s_shape); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 52, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_4 = __Pyx_GetItemInt(__pyx_t_1, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 52, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_9 = __Pyx_PyInt_As_int(__pyx_t_4); if (unlikely((__pyx_t_9 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 52, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __pyx_v_num_directions = __pyx_t_9;
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":54
+ *     num_directions = stencil.shape[0]
+ * 
+ *     for z in range(nr_of_ghost_layers, zs - nr_of_ghost_layers):             # <<<<<<<<<<<<<<
+ *         for y in range(nr_of_ghost_layers, ys - nr_of_ghost_layers):
+ *             for x in range(nr_of_ghost_layers, xs - nr_of_ghost_layers):
+ */
+  __pyx_t_9 = (__pyx_v_zs - __pyx_v_nr_of_ghost_layers);
+  __pyx_t_8 = __pyx_t_9;
+  for (__pyx_t_7 = __pyx_v_nr_of_ghost_layers; __pyx_t_7 < __pyx_t_8; __pyx_t_7+=1) {
+    __pyx_v_z = __pyx_t_7;
+
+    /* "pystencils/boundaries/createindexlistcython.pyx":55
+ * 
+ *     for z in range(nr_of_ghost_layers, zs - nr_of_ghost_layers):
+ *         for y in range(nr_of_ghost_layers, ys - nr_of_ghost_layers):             # <<<<<<<<<<<<<<
+ *             for x in range(nr_of_ghost_layers, xs - nr_of_ghost_layers):
+ *                 if flag_field[x, y, z] & fluid_mask:
+ */
+    __pyx_t_10 = (__pyx_v_ys - __pyx_v_nr_of_ghost_layers);
+    __pyx_t_11 = __pyx_t_10;
+    for (__pyx_t_12 = __pyx_v_nr_of_ghost_layers; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) {
+      __pyx_v_y = __pyx_t_12;
+
+      /* "pystencils/boundaries/createindexlistcython.pyx":56
+ *     for z in range(nr_of_ghost_layers, zs - nr_of_ghost_layers):
+ *         for y in range(nr_of_ghost_layers, ys - nr_of_ghost_layers):
+ *             for x in range(nr_of_ghost_layers, xs - nr_of_ghost_layers):             # <<<<<<<<<<<<<<
+ *                 if flag_field[x, y, z] & fluid_mask:
+ *                     for dirIdx in range(num_directions):
+ */
+      __pyx_t_13 = (__pyx_v_xs - __pyx_v_nr_of_ghost_layers);
+      __pyx_t_14 = __pyx_t_13;
+      for (__pyx_t_15 = __pyx_v_nr_of_ghost_layers; __pyx_t_15 < __pyx_t_14; __pyx_t_15+=1) {
+        __pyx_v_x = __pyx_t_15;
+
+        /* "pystencils/boundaries/createindexlistcython.pyx":57
+ *         for y in range(nr_of_ghost_layers, ys - nr_of_ghost_layers):
+ *             for x in range(nr_of_ghost_layers, xs - nr_of_ghost_layers):
+ *                 if flag_field[x, y, z] & fluid_mask:             # <<<<<<<<<<<<<<
+ *                     for dirIdx in range(num_directions):
+ *                         dx = stencil[dirIdx,0]
+ */
+        __pyx_t_16 = __pyx_v_x;
+        __pyx_t_17 = __pyx_v_y;
+        __pyx_t_18 = __pyx_v_z;
+        __pyx_t_19 = (((*__Pyx_BufPtrFull3d(int *, __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.buf, __pyx_t_16, __pyx_pybuffernd_flag_field.diminfo[0].strides, __pyx_pybuffernd_flag_field.diminfo[0].suboffsets, __pyx_t_17, __pyx_pybuffernd_flag_field.diminfo[1].strides, __pyx_pybuffernd_flag_field.diminfo[1].suboffsets, __pyx_t_18, __pyx_pybuffernd_flag_field.diminfo[2].strides, __pyx_pybuffernd_flag_field.diminfo[2].suboffsets)) & __pyx_v_fluid_mask) != 0);
+        if (__pyx_t_19) {
+
+          /* "pystencils/boundaries/createindexlistcython.pyx":58
+ *             for x in range(nr_of_ghost_layers, xs - nr_of_ghost_layers):
+ *                 if flag_field[x, y, z] & fluid_mask:
+ *                     for dirIdx in range(num_directions):             # <<<<<<<<<<<<<<
+ *                         dx = stencil[dirIdx,0]
+ *                         dy = stencil[dirIdx,1]
+ */
+          __pyx_t_20 = __pyx_v_num_directions;
+          __pyx_t_21 = __pyx_t_20;
+          for (__pyx_t_22 = 0; __pyx_t_22 < __pyx_t_21; __pyx_t_22+=1) {
+            __pyx_v_dirIdx = __pyx_t_22;
+
+            /* "pystencils/boundaries/createindexlistcython.pyx":59
+ *                 if flag_field[x, y, z] & fluid_mask:
+ *                     for dirIdx in range(num_directions):
+ *                         dx = stencil[dirIdx,0]             # <<<<<<<<<<<<<<
+ *                         dy = stencil[dirIdx,1]
+ *                         dz = stencil[dirIdx,2]
+ */
+            __pyx_t_23 = __pyx_v_dirIdx;
+            __pyx_t_24 = 0;
+            __pyx_v_dx = (*__Pyx_BufPtrFull2d(int *, __pyx_pybuffernd_stencil.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_stencil.diminfo[0].strides, __pyx_pybuffernd_stencil.diminfo[0].suboffsets, __pyx_t_24, __pyx_pybuffernd_stencil.diminfo[1].strides, __pyx_pybuffernd_stencil.diminfo[1].suboffsets));
+
+            /* "pystencils/boundaries/createindexlistcython.pyx":60
+ *                     for dirIdx in range(num_directions):
+ *                         dx = stencil[dirIdx,0]
+ *                         dy = stencil[dirIdx,1]             # <<<<<<<<<<<<<<
+ *                         dz = stencil[dirIdx,2]
+ *                         if flag_field[x + dx, y + dy, z + dz] & boundary_mask:
+ */
+            __pyx_t_25 = __pyx_v_dirIdx;
+            __pyx_t_26 = 1;
+            __pyx_v_dy = (*__Pyx_BufPtrFull2d(int *, __pyx_pybuffernd_stencil.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_stencil.diminfo[0].strides, __pyx_pybuffernd_stencil.diminfo[0].suboffsets, __pyx_t_26, __pyx_pybuffernd_stencil.diminfo[1].strides, __pyx_pybuffernd_stencil.diminfo[1].suboffsets));
+
+            /* "pystencils/boundaries/createindexlistcython.pyx":61
+ *                         dx = stencil[dirIdx,0]
+ *                         dy = stencil[dirIdx,1]
+ *                         dz = stencil[dirIdx,2]             # <<<<<<<<<<<<<<
+ *                         if flag_field[x + dx, y + dy, z + dz] & boundary_mask:
+ *                             boundary_index_list.append((x,y,z, dirIdx))
+ */
+            __pyx_t_27 = __pyx_v_dirIdx;
+            __pyx_t_28 = 2;
+            __pyx_v_dz = (*__Pyx_BufPtrFull2d(int *, __pyx_pybuffernd_stencil.rcbuffer->pybuffer.buf, __pyx_t_27, __pyx_pybuffernd_stencil.diminfo[0].strides, __pyx_pybuffernd_stencil.diminfo[0].suboffsets, __pyx_t_28, __pyx_pybuffernd_stencil.diminfo[1].strides, __pyx_pybuffernd_stencil.diminfo[1].suboffsets));
+
+            /* "pystencils/boundaries/createindexlistcython.pyx":62
+ *                         dy = stencil[dirIdx,1]
+ *                         dz = stencil[dirIdx,2]
+ *                         if flag_field[x + dx, y + dy, z + dz] & boundary_mask:             # <<<<<<<<<<<<<<
+ *                             boundary_index_list.append((x,y,z, dirIdx))
+ *                             if single_link:
+ */
+            __pyx_t_29 = (__pyx_v_x + __pyx_v_dx);
+            __pyx_t_30 = (__pyx_v_y + __pyx_v_dy);
+            __pyx_t_31 = (__pyx_v_z + __pyx_v_dz);
+            __pyx_t_19 = (((*__Pyx_BufPtrFull3d(int *, __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.buf, __pyx_t_29, __pyx_pybuffernd_flag_field.diminfo[0].strides, __pyx_pybuffernd_flag_field.diminfo[0].suboffsets, __pyx_t_30, __pyx_pybuffernd_flag_field.diminfo[1].strides, __pyx_pybuffernd_flag_field.diminfo[1].suboffsets, __pyx_t_31, __pyx_pybuffernd_flag_field.diminfo[2].strides, __pyx_pybuffernd_flag_field.diminfo[2].suboffsets)) & __pyx_v_boundary_mask) != 0);
+            if (__pyx_t_19) {
+
+              /* "pystencils/boundaries/createindexlistcython.pyx":63
+ *                         dz = stencil[dirIdx,2]
+ *                         if flag_field[x + dx, y + dy, z + dz] & boundary_mask:
+ *                             boundary_index_list.append((x,y,z, dirIdx))             # <<<<<<<<<<<<<<
+ *                             if single_link:
+ *                                 break
+ */
+              __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_x); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 63, __pyx_L1_error)
+              __Pyx_GOTREF(__pyx_t_4);
+              __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_y); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 63, __pyx_L1_error)
+              __Pyx_GOTREF(__pyx_t_1);
+              __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_z); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 63, __pyx_L1_error)
+              __Pyx_GOTREF(__pyx_t_3);
+              __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_dirIdx); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 63, __pyx_L1_error)
+              __Pyx_GOTREF(__pyx_t_2);
+              __pyx_t_5 = PyTuple_New(4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 63, __pyx_L1_error)
+              __Pyx_GOTREF(__pyx_t_5);
+              __Pyx_GIVEREF(__pyx_t_4);
+              PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4);
+              __Pyx_GIVEREF(__pyx_t_1);
+              PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_1);
+              __Pyx_GIVEREF(__pyx_t_3);
+              PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_t_3);
+              __Pyx_GIVEREF(__pyx_t_2);
+              PyTuple_SET_ITEM(__pyx_t_5, 3, __pyx_t_2);
+              __pyx_t_4 = 0;
+              __pyx_t_1 = 0;
+              __pyx_t_3 = 0;
+              __pyx_t_2 = 0;
+              __pyx_t_32 = __Pyx_PyList_Append(__pyx_v_boundary_index_list, __pyx_t_5); if (unlikely(__pyx_t_32 == ((int)-1))) __PYX_ERR(0, 63, __pyx_L1_error)
+              __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+              /* "pystencils/boundaries/createindexlistcython.pyx":64
+ *                         if flag_field[x + dx, y + dy, z + dz] & boundary_mask:
+ *                             boundary_index_list.append((x,y,z, dirIdx))
+ *                             if single_link:             # <<<<<<<<<<<<<<
+ *                                 break
+ *     return boundary_index_list
+ */
+              __pyx_t_19 = (__pyx_v_single_link != 0);
+              if (__pyx_t_19) {
+
+                /* "pystencils/boundaries/createindexlistcython.pyx":65
+ *                             boundary_index_list.append((x,y,z, dirIdx))
+ *                             if single_link:
+ *                                 break             # <<<<<<<<<<<<<<
+ *     return boundary_index_list
+ * 
+ */
+                goto __pyx_L13_break;
+
+                /* "pystencils/boundaries/createindexlistcython.pyx":64
+ *                         if flag_field[x + dx, y + dy, z + dz] & boundary_mask:
+ *                             boundary_index_list.append((x,y,z, dirIdx))
+ *                             if single_link:             # <<<<<<<<<<<<<<
+ *                                 break
+ *     return boundary_index_list
+ */
+              }
+
+              /* "pystencils/boundaries/createindexlistcython.pyx":62
+ *                         dy = stencil[dirIdx,1]
+ *                         dz = stencil[dirIdx,2]
+ *                         if flag_field[x + dx, y + dy, z + dz] & boundary_mask:             # <<<<<<<<<<<<<<
+ *                             boundary_index_list.append((x,y,z, dirIdx))
+ *                             if single_link:
+ */
+            }
+          }
+          __pyx_L13_break:;
+
+          /* "pystencils/boundaries/createindexlistcython.pyx":57
+ *         for y in range(nr_of_ghost_layers, ys - nr_of_ghost_layers):
+ *             for x in range(nr_of_ghost_layers, xs - nr_of_ghost_layers):
+ *                 if flag_field[x, y, z] & fluid_mask:             # <<<<<<<<<<<<<<
+ *                     for dirIdx in range(num_directions):
+ *                         dx = stencil[dirIdx,0]
+ */
+        }
+      }
+    }
+  }
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":66
+ *                             if single_link:
+ *                                 break
+ *     return boundary_index_list             # <<<<<<<<<<<<<<
+ * 
+ * 
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(__pyx_v_boundary_index_list);
+  __pyx_r = __pyx_v_boundary_index_list;
+  goto __pyx_L0;
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":44
+ * @cython.boundscheck(False) # turn off bounds-checking for entire function
+ * @cython.wraparound(False)  # turn off negative index wrapping for entire function
+ * def create_boundary_neighbor_index_list_3d(object[IntegerType, ndim=3] flag_field,             # <<<<<<<<<<<<<<
+ *                                            int nr_of_ghost_layers, IntegerType boundary_mask, IntegerType fluid_mask,
+ *                                            object[int, ndim=2] stencil, int single_link):
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_XDECREF(__pyx_t_5);
+  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
+    __Pyx_PyThreadState_declare
+    __Pyx_PyThreadState_assign
+    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
+    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_flag_field.rcbuffer->pybuffer);
+    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_stencil.rcbuffer->pybuffer);
+  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
+  __Pyx_AddTraceback("pystencils.boundaries.createindexlistcython.create_boundary_neighbor_index_list_3d", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  goto __pyx_L2;
+  __pyx_L0:;
+  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_flag_field.rcbuffer->pybuffer);
+  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_stencil.rcbuffer->pybuffer);
+  __pyx_L2:;
+  __Pyx_XDECREF(__pyx_v_boundary_index_list);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static PyObject *__pyx_fuse_2__pyx_pw_10pystencils_10boundaries_21createindexlistcython_29create_boundary_neighbor_index_list_3d(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyMethodDef __pyx_fuse_2__pyx_mdef_10pystencils_10boundaries_21createindexlistcython_29create_boundary_neighbor_index_list_3d = {"__pyx_fuse_2create_boundary_neighbor_index_list_3d", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_fuse_2__pyx_pw_10pystencils_10boundaries_21createindexlistcython_29create_boundary_neighbor_index_list_3d, METH_VARARGS|METH_KEYWORDS, 0};
+static PyObject *__pyx_fuse_2__pyx_pw_10pystencils_10boundaries_21createindexlistcython_29create_boundary_neighbor_index_list_3d(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_flag_field = 0;
+  int __pyx_v_nr_of_ghost_layers;
+  long __pyx_v_boundary_mask;
+  long __pyx_v_fluid_mask;
+  PyObject *__pyx_v_stencil = 0;
+  int __pyx_v_single_link;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("create_boundary_neighbor_index_list_3d (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_flag_field,&__pyx_n_s_nr_of_ghost_layers,&__pyx_n_s_boundary_mask,&__pyx_n_s_fluid_mask,&__pyx_n_s_stencil,&__pyx_n_s_single_link,0};
+    PyObject* values[6] = {0,0,0,0,0,0};
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
+        CYTHON_FALLTHROUGH;
+        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+        CYTHON_FALLTHROUGH;
+        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
+        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_flag_field)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
+        case  1:
+        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_nr_of_ghost_layers)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_neighbor_index_list_3d", 1, 6, 6, 1); __PYX_ERR(0, 44, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  2:
+        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_boundary_mask)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_neighbor_index_list_3d", 1, 6, 6, 2); __PYX_ERR(0, 44, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  3:
+        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_fluid_mask)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_neighbor_index_list_3d", 1, 6, 6, 3); __PYX_ERR(0, 44, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  4:
+        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_stencil)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_neighbor_index_list_3d", 1, 6, 6, 4); __PYX_ERR(0, 44, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  5:
+        if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_single_link)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_neighbor_index_list_3d", 1, 6, 6, 5); __PYX_ERR(0, 44, __pyx_L3_error)
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "create_boundary_neighbor_index_list_3d") < 0)) __PYX_ERR(0, 44, __pyx_L3_error)
+      }
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 6) {
+      goto __pyx_L5_argtuple_error;
+    } else {
+      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+      values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+      values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+      values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
+    }
+    __pyx_v_flag_field = ((PyObject *)values[0]);
+    __pyx_v_nr_of_ghost_layers = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_nr_of_ghost_layers == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 45, __pyx_L3_error)
+    __pyx_v_boundary_mask = __Pyx_PyInt_As_long(values[2]); if (unlikely((__pyx_v_boundary_mask == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 45, __pyx_L3_error)
+    __pyx_v_fluid_mask = __Pyx_PyInt_As_long(values[3]); if (unlikely((__pyx_v_fluid_mask == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 45, __pyx_L3_error)
+    __pyx_v_stencil = ((PyObject *)values[4]);
+    __pyx_v_single_link = __Pyx_PyInt_As_int(values[5]); if (unlikely((__pyx_v_single_link == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 46, __pyx_L3_error)
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("create_boundary_neighbor_index_list_3d", 1, 6, 6, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 44, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("pystencils.boundaries.createindexlistcython.create_boundary_neighbor_index_list_3d", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_10pystencils_10boundaries_21createindexlistcython_28create_boundary_neighbor_index_list_3d(__pyx_self, __pyx_v_flag_field, __pyx_v_nr_of_ghost_layers, __pyx_v_boundary_mask, __pyx_v_fluid_mask, __pyx_v_stencil, __pyx_v_single_link);
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_10pystencils_10boundaries_21createindexlistcython_28create_boundary_neighbor_index_list_3d(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_flag_field, int __pyx_v_nr_of_ghost_layers, long __pyx_v_boundary_mask, long __pyx_v_fluid_mask, PyObject *__pyx_v_stencil, int __pyx_v_single_link) {
+  int __pyx_v_xs;
+  int __pyx_v_ys;
+  int __pyx_v_zs;
+  int __pyx_v_x;
+  int __pyx_v_y;
+  int __pyx_v_z;
+  int __pyx_v_dirIdx;
+  int __pyx_v_num_directions;
+  int __pyx_v_dx;
+  int __pyx_v_dy;
+  int __pyx_v_dz;
+  PyObject *__pyx_v_boundary_index_list = NULL;
+  __Pyx_LocalBuf_ND __pyx_pybuffernd_flag_field;
+  __Pyx_Buffer __pyx_pybuffer_flag_field;
+  __Pyx_LocalBuf_ND __pyx_pybuffernd_stencil;
+  __Pyx_Buffer __pyx_pybuffer_stencil;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
+  PyObject *__pyx_t_5 = NULL;
+  PyObject *(*__pyx_t_6)(PyObject *);
+  int __pyx_t_7;
+  int __pyx_t_8;
+  int __pyx_t_9;
+  int __pyx_t_10;
+  int __pyx_t_11;
+  int __pyx_t_12;
+  int __pyx_t_13;
+  int __pyx_t_14;
+  int __pyx_t_15;
+  Py_ssize_t __pyx_t_16;
+  Py_ssize_t __pyx_t_17;
+  Py_ssize_t __pyx_t_18;
+  int __pyx_t_19;
+  int __pyx_t_20;
+  int __pyx_t_21;
+  int __pyx_t_22;
+  Py_ssize_t __pyx_t_23;
+  Py_ssize_t __pyx_t_24;
+  Py_ssize_t __pyx_t_25;
+  Py_ssize_t __pyx_t_26;
+  Py_ssize_t __pyx_t_27;
+  Py_ssize_t __pyx_t_28;
+  Py_ssize_t __pyx_t_29;
+  Py_ssize_t __pyx_t_30;
+  Py_ssize_t __pyx_t_31;
+  int __pyx_t_32;
+  __Pyx_RefNannySetupContext("__pyx_fuse_2create_boundary_neighbor_index_list_3d", 0);
+  __pyx_pybuffer_flag_field.pybuffer.buf = NULL;
+  __pyx_pybuffer_flag_field.refcount = 0;
+  __pyx_pybuffernd_flag_field.data = NULL;
+  __pyx_pybuffernd_flag_field.rcbuffer = &__pyx_pybuffer_flag_field;
+  __pyx_pybuffer_stencil.pybuffer.buf = NULL;
+  __pyx_pybuffer_stencil.refcount = 0;
+  __pyx_pybuffernd_stencil.data = NULL;
+  __pyx_pybuffernd_stencil.rcbuffer = &__pyx_pybuffer_stencil;
+  {
+    __Pyx_BufFmt_StackElem __pyx_stack[1];
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_flag_field.rcbuffer->pybuffer, (PyObject*)__pyx_v_flag_field, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_INDIRECT, 3, 0, __pyx_stack) == -1)) __PYX_ERR(0, 44, __pyx_L1_error)
+  }
+  __pyx_pybuffernd_flag_field.diminfo[0].strides = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_flag_field.diminfo[0].shape = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_flag_field.diminfo[0].suboffsets = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.suboffsets[0]; __pyx_pybuffernd_flag_field.diminfo[1].strides = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_flag_field.diminfo[1].shape = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_flag_field.diminfo[1].suboffsets = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.suboffsets[1]; __pyx_pybuffernd_flag_field.diminfo[2].strides = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_flag_field.diminfo[2].shape = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.shape[2]; __pyx_pybuffernd_flag_field.diminfo[2].suboffsets = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.suboffsets[2];
+  {
+    __Pyx_BufFmt_StackElem __pyx_stack[1];
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_stencil.rcbuffer->pybuffer, (PyObject*)__pyx_v_stencil, &__Pyx_TypeInfo_int, PyBUF_FORMAT| PyBUF_INDIRECT, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 44, __pyx_L1_error)
+  }
+  __pyx_pybuffernd_stencil.diminfo[0].strides = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_stencil.diminfo[0].shape = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_stencil.diminfo[0].suboffsets = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.suboffsets[0]; __pyx_pybuffernd_stencil.diminfo[1].strides = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_stencil.diminfo[1].shape = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_stencil.diminfo[1].suboffsets = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.suboffsets[1];
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":50
+ *     cdef int dirIdx, num_directions, dx, dy, dz
+ * 
+ *     xs, ys, zs = flag_field.shape             # <<<<<<<<<<<<<<
+ *     boundary_index_list = []
+ *     num_directions = stencil.shape[0]
+ */
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_flag_field), __pyx_n_s_shape); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 50, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) {
+    PyObject* sequence = __pyx_t_1;
+    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
+    if (unlikely(size != 3)) {
+      if (size > 3) __Pyx_RaiseTooManyValuesError(3);
+      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
+      __PYX_ERR(0, 50, __pyx_L1_error)
+    }
+    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+    if (likely(PyTuple_CheckExact(sequence))) {
+      __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
+      __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); 
+      __pyx_t_4 = PyTuple_GET_ITEM(sequence, 2); 
+    } else {
+      __pyx_t_2 = PyList_GET_ITEM(sequence, 0); 
+      __pyx_t_3 = PyList_GET_ITEM(sequence, 1); 
+      __pyx_t_4 = PyList_GET_ITEM(sequence, 2); 
+    }
+    __Pyx_INCREF(__pyx_t_2);
+    __Pyx_INCREF(__pyx_t_3);
+    __Pyx_INCREF(__pyx_t_4);
+    #else
+    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 50, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_2);
+    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 50, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    __pyx_t_4 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 50, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
+    #endif
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  } else {
+    Py_ssize_t index = -1;
+    __pyx_t_5 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 50, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_5);
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __pyx_t_6 = Py_TYPE(__pyx_t_5)->tp_iternext;
+    index = 0; __pyx_t_2 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_2)) goto __pyx_L3_unpacking_failed;
+    __Pyx_GOTREF(__pyx_t_2);
+    index = 1; __pyx_t_3 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_3)) goto __pyx_L3_unpacking_failed;
+    __Pyx_GOTREF(__pyx_t_3);
+    index = 2; __pyx_t_4 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_4)) goto __pyx_L3_unpacking_failed;
+    __Pyx_GOTREF(__pyx_t_4);
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_5), 3) < 0) __PYX_ERR(0, 50, __pyx_L1_error)
+    __pyx_t_6 = NULL;
+    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+    goto __pyx_L4_unpacking_done;
+    __pyx_L3_unpacking_failed:;
+    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+    __pyx_t_6 = NULL;
+    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
+    __PYX_ERR(0, 50, __pyx_L1_error)
+    __pyx_L4_unpacking_done:;
+  }
+  __pyx_t_7 = __Pyx_PyInt_As_int(__pyx_t_2); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 50, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_8 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_8 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 50, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __pyx_t_9 = __Pyx_PyInt_As_int(__pyx_t_4); if (unlikely((__pyx_t_9 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 50, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __pyx_v_xs = __pyx_t_7;
+  __pyx_v_ys = __pyx_t_8;
+  __pyx_v_zs = __pyx_t_9;
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":51
+ * 
+ *     xs, ys, zs = flag_field.shape
+ *     boundary_index_list = []             # <<<<<<<<<<<<<<
+ *     num_directions = stencil.shape[0]
+ * 
+ */
+  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 51, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_boundary_index_list = ((PyObject*)__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":52
+ *     xs, ys, zs = flag_field.shape
+ *     boundary_index_list = []
+ *     num_directions = stencil.shape[0]             # <<<<<<<<<<<<<<
+ * 
+ *     for z in range(nr_of_ghost_layers, zs - nr_of_ghost_layers):
+ */
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_stencil), __pyx_n_s_shape); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 52, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_4 = __Pyx_GetItemInt(__pyx_t_1, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 52, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_9 = __Pyx_PyInt_As_int(__pyx_t_4); if (unlikely((__pyx_t_9 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 52, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __pyx_v_num_directions = __pyx_t_9;
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":54
+ *     num_directions = stencil.shape[0]
+ * 
+ *     for z in range(nr_of_ghost_layers, zs - nr_of_ghost_layers):             # <<<<<<<<<<<<<<
+ *         for y in range(nr_of_ghost_layers, ys - nr_of_ghost_layers):
+ *             for x in range(nr_of_ghost_layers, xs - nr_of_ghost_layers):
+ */
+  __pyx_t_9 = (__pyx_v_zs - __pyx_v_nr_of_ghost_layers);
+  __pyx_t_8 = __pyx_t_9;
+  for (__pyx_t_7 = __pyx_v_nr_of_ghost_layers; __pyx_t_7 < __pyx_t_8; __pyx_t_7+=1) {
+    __pyx_v_z = __pyx_t_7;
+
+    /* "pystencils/boundaries/createindexlistcython.pyx":55
+ * 
+ *     for z in range(nr_of_ghost_layers, zs - nr_of_ghost_layers):
+ *         for y in range(nr_of_ghost_layers, ys - nr_of_ghost_layers):             # <<<<<<<<<<<<<<
+ *             for x in range(nr_of_ghost_layers, xs - nr_of_ghost_layers):
+ *                 if flag_field[x, y, z] & fluid_mask:
+ */
+    __pyx_t_10 = (__pyx_v_ys - __pyx_v_nr_of_ghost_layers);
+    __pyx_t_11 = __pyx_t_10;
+    for (__pyx_t_12 = __pyx_v_nr_of_ghost_layers; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) {
+      __pyx_v_y = __pyx_t_12;
+
+      /* "pystencils/boundaries/createindexlistcython.pyx":56
+ *     for z in range(nr_of_ghost_layers, zs - nr_of_ghost_layers):
+ *         for y in range(nr_of_ghost_layers, ys - nr_of_ghost_layers):
+ *             for x in range(nr_of_ghost_layers, xs - nr_of_ghost_layers):             # <<<<<<<<<<<<<<
+ *                 if flag_field[x, y, z] & fluid_mask:
+ *                     for dirIdx in range(num_directions):
+ */
+      __pyx_t_13 = (__pyx_v_xs - __pyx_v_nr_of_ghost_layers);
+      __pyx_t_14 = __pyx_t_13;
+      for (__pyx_t_15 = __pyx_v_nr_of_ghost_layers; __pyx_t_15 < __pyx_t_14; __pyx_t_15+=1) {
+        __pyx_v_x = __pyx_t_15;
+
+        /* "pystencils/boundaries/createindexlistcython.pyx":57
+ *         for y in range(nr_of_ghost_layers, ys - nr_of_ghost_layers):
+ *             for x in range(nr_of_ghost_layers, xs - nr_of_ghost_layers):
+ *                 if flag_field[x, y, z] & fluid_mask:             # <<<<<<<<<<<<<<
+ *                     for dirIdx in range(num_directions):
+ *                         dx = stencil[dirIdx,0]
+ */
+        __pyx_t_16 = __pyx_v_x;
+        __pyx_t_17 = __pyx_v_y;
+        __pyx_t_18 = __pyx_v_z;
+        __pyx_t_19 = (((*__Pyx_BufPtrFull3d(long *, __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.buf, __pyx_t_16, __pyx_pybuffernd_flag_field.diminfo[0].strides, __pyx_pybuffernd_flag_field.diminfo[0].suboffsets, __pyx_t_17, __pyx_pybuffernd_flag_field.diminfo[1].strides, __pyx_pybuffernd_flag_field.diminfo[1].suboffsets, __pyx_t_18, __pyx_pybuffernd_flag_field.diminfo[2].strides, __pyx_pybuffernd_flag_field.diminfo[2].suboffsets)) & __pyx_v_fluid_mask) != 0);
+        if (__pyx_t_19) {
+
+          /* "pystencils/boundaries/createindexlistcython.pyx":58
+ *             for x in range(nr_of_ghost_layers, xs - nr_of_ghost_layers):
+ *                 if flag_field[x, y, z] & fluid_mask:
+ *                     for dirIdx in range(num_directions):             # <<<<<<<<<<<<<<
+ *                         dx = stencil[dirIdx,0]
+ *                         dy = stencil[dirIdx,1]
+ */
+          __pyx_t_20 = __pyx_v_num_directions;
+          __pyx_t_21 = __pyx_t_20;
+          for (__pyx_t_22 = 0; __pyx_t_22 < __pyx_t_21; __pyx_t_22+=1) {
+            __pyx_v_dirIdx = __pyx_t_22;
+
+            /* "pystencils/boundaries/createindexlistcython.pyx":59
+ *                 if flag_field[x, y, z] & fluid_mask:
+ *                     for dirIdx in range(num_directions):
+ *                         dx = stencil[dirIdx,0]             # <<<<<<<<<<<<<<
+ *                         dy = stencil[dirIdx,1]
+ *                         dz = stencil[dirIdx,2]
+ */
+            __pyx_t_23 = __pyx_v_dirIdx;
+            __pyx_t_24 = 0;
+            __pyx_v_dx = (*__Pyx_BufPtrFull2d(int *, __pyx_pybuffernd_stencil.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_stencil.diminfo[0].strides, __pyx_pybuffernd_stencil.diminfo[0].suboffsets, __pyx_t_24, __pyx_pybuffernd_stencil.diminfo[1].strides, __pyx_pybuffernd_stencil.diminfo[1].suboffsets));
+
+            /* "pystencils/boundaries/createindexlistcython.pyx":60
+ *                     for dirIdx in range(num_directions):
+ *                         dx = stencil[dirIdx,0]
+ *                         dy = stencil[dirIdx,1]             # <<<<<<<<<<<<<<
+ *                         dz = stencil[dirIdx,2]
+ *                         if flag_field[x + dx, y + dy, z + dz] & boundary_mask:
+ */
+            __pyx_t_25 = __pyx_v_dirIdx;
+            __pyx_t_26 = 1;
+            __pyx_v_dy = (*__Pyx_BufPtrFull2d(int *, __pyx_pybuffernd_stencil.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_stencil.diminfo[0].strides, __pyx_pybuffernd_stencil.diminfo[0].suboffsets, __pyx_t_26, __pyx_pybuffernd_stencil.diminfo[1].strides, __pyx_pybuffernd_stencil.diminfo[1].suboffsets));
+
+            /* "pystencils/boundaries/createindexlistcython.pyx":61
+ *                         dx = stencil[dirIdx,0]
+ *                         dy = stencil[dirIdx,1]
+ *                         dz = stencil[dirIdx,2]             # <<<<<<<<<<<<<<
+ *                         if flag_field[x + dx, y + dy, z + dz] & boundary_mask:
+ *                             boundary_index_list.append((x,y,z, dirIdx))
+ */
+            __pyx_t_27 = __pyx_v_dirIdx;
+            __pyx_t_28 = 2;
+            __pyx_v_dz = (*__Pyx_BufPtrFull2d(int *, __pyx_pybuffernd_stencil.rcbuffer->pybuffer.buf, __pyx_t_27, __pyx_pybuffernd_stencil.diminfo[0].strides, __pyx_pybuffernd_stencil.diminfo[0].suboffsets, __pyx_t_28, __pyx_pybuffernd_stencil.diminfo[1].strides, __pyx_pybuffernd_stencil.diminfo[1].suboffsets));
+
+            /* "pystencils/boundaries/createindexlistcython.pyx":62
+ *                         dy = stencil[dirIdx,1]
+ *                         dz = stencil[dirIdx,2]
+ *                         if flag_field[x + dx, y + dy, z + dz] & boundary_mask:             # <<<<<<<<<<<<<<
+ *                             boundary_index_list.append((x,y,z, dirIdx))
+ *                             if single_link:
+ */
+            __pyx_t_29 = (__pyx_v_x + __pyx_v_dx);
+            __pyx_t_30 = (__pyx_v_y + __pyx_v_dy);
+            __pyx_t_31 = (__pyx_v_z + __pyx_v_dz);
+            __pyx_t_19 = (((*__Pyx_BufPtrFull3d(long *, __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.buf, __pyx_t_29, __pyx_pybuffernd_flag_field.diminfo[0].strides, __pyx_pybuffernd_flag_field.diminfo[0].suboffsets, __pyx_t_30, __pyx_pybuffernd_flag_field.diminfo[1].strides, __pyx_pybuffernd_flag_field.diminfo[1].suboffsets, __pyx_t_31, __pyx_pybuffernd_flag_field.diminfo[2].strides, __pyx_pybuffernd_flag_field.diminfo[2].suboffsets)) & __pyx_v_boundary_mask) != 0);
+            if (__pyx_t_19) {
+
+              /* "pystencils/boundaries/createindexlistcython.pyx":63
+ *                         dz = stencil[dirIdx,2]
+ *                         if flag_field[x + dx, y + dy, z + dz] & boundary_mask:
+ *                             boundary_index_list.append((x,y,z, dirIdx))             # <<<<<<<<<<<<<<
+ *                             if single_link:
+ *                                 break
+ */
+              __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_x); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 63, __pyx_L1_error)
+              __Pyx_GOTREF(__pyx_t_4);
+              __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_y); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 63, __pyx_L1_error)
+              __Pyx_GOTREF(__pyx_t_1);
+              __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_z); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 63, __pyx_L1_error)
+              __Pyx_GOTREF(__pyx_t_3);
+              __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_dirIdx); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 63, __pyx_L1_error)
+              __Pyx_GOTREF(__pyx_t_2);
+              __pyx_t_5 = PyTuple_New(4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 63, __pyx_L1_error)
+              __Pyx_GOTREF(__pyx_t_5);
+              __Pyx_GIVEREF(__pyx_t_4);
+              PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4);
+              __Pyx_GIVEREF(__pyx_t_1);
+              PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_1);
+              __Pyx_GIVEREF(__pyx_t_3);
+              PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_t_3);
+              __Pyx_GIVEREF(__pyx_t_2);
+              PyTuple_SET_ITEM(__pyx_t_5, 3, __pyx_t_2);
+              __pyx_t_4 = 0;
+              __pyx_t_1 = 0;
+              __pyx_t_3 = 0;
+              __pyx_t_2 = 0;
+              __pyx_t_32 = __Pyx_PyList_Append(__pyx_v_boundary_index_list, __pyx_t_5); if (unlikely(__pyx_t_32 == ((int)-1))) __PYX_ERR(0, 63, __pyx_L1_error)
+              __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+              /* "pystencils/boundaries/createindexlistcython.pyx":64
+ *                         if flag_field[x + dx, y + dy, z + dz] & boundary_mask:
+ *                             boundary_index_list.append((x,y,z, dirIdx))
+ *                             if single_link:             # <<<<<<<<<<<<<<
+ *                                 break
+ *     return boundary_index_list
+ */
+              __pyx_t_19 = (__pyx_v_single_link != 0);
+              if (__pyx_t_19) {
+
+                /* "pystencils/boundaries/createindexlistcython.pyx":65
+ *                             boundary_index_list.append((x,y,z, dirIdx))
+ *                             if single_link:
+ *                                 break             # <<<<<<<<<<<<<<
+ *     return boundary_index_list
+ * 
+ */
+                goto __pyx_L13_break;
+
+                /* "pystencils/boundaries/createindexlistcython.pyx":64
+ *                         if flag_field[x + dx, y + dy, z + dz] & boundary_mask:
+ *                             boundary_index_list.append((x,y,z, dirIdx))
+ *                             if single_link:             # <<<<<<<<<<<<<<
+ *                                 break
+ *     return boundary_index_list
+ */
+              }
+
+              /* "pystencils/boundaries/createindexlistcython.pyx":62
+ *                         dy = stencil[dirIdx,1]
+ *                         dz = stencil[dirIdx,2]
+ *                         if flag_field[x + dx, y + dy, z + dz] & boundary_mask:             # <<<<<<<<<<<<<<
+ *                             boundary_index_list.append((x,y,z, dirIdx))
+ *                             if single_link:
+ */
+            }
+          }
+          __pyx_L13_break:;
+
+          /* "pystencils/boundaries/createindexlistcython.pyx":57
+ *         for y in range(nr_of_ghost_layers, ys - nr_of_ghost_layers):
+ *             for x in range(nr_of_ghost_layers, xs - nr_of_ghost_layers):
+ *                 if flag_field[x, y, z] & fluid_mask:             # <<<<<<<<<<<<<<
+ *                     for dirIdx in range(num_directions):
+ *                         dx = stencil[dirIdx,0]
+ */
+        }
+      }
+    }
+  }
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":66
+ *                             if single_link:
+ *                                 break
+ *     return boundary_index_list             # <<<<<<<<<<<<<<
+ * 
+ * 
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(__pyx_v_boundary_index_list);
+  __pyx_r = __pyx_v_boundary_index_list;
+  goto __pyx_L0;
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":44
+ * @cython.boundscheck(False) # turn off bounds-checking for entire function
+ * @cython.wraparound(False)  # turn off negative index wrapping for entire function
+ * def create_boundary_neighbor_index_list_3d(object[IntegerType, ndim=3] flag_field,             # <<<<<<<<<<<<<<
+ *                                            int nr_of_ghost_layers, IntegerType boundary_mask, IntegerType fluid_mask,
+ *                                            object[int, ndim=2] stencil, int single_link):
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_XDECREF(__pyx_t_5);
+  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
+    __Pyx_PyThreadState_declare
+    __Pyx_PyThreadState_assign
+    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
+    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_flag_field.rcbuffer->pybuffer);
+    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_stencil.rcbuffer->pybuffer);
+  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
+  __Pyx_AddTraceback("pystencils.boundaries.createindexlistcython.create_boundary_neighbor_index_list_3d", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  goto __pyx_L2;
+  __pyx_L0:;
+  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_flag_field.rcbuffer->pybuffer);
+  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_stencil.rcbuffer->pybuffer);
+  __pyx_L2:;
+  __Pyx_XDECREF(__pyx_v_boundary_index_list);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static PyObject *__pyx_fuse_3__pyx_pw_10pystencils_10boundaries_21createindexlistcython_31create_boundary_neighbor_index_list_3d(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyMethodDef __pyx_fuse_3__pyx_mdef_10pystencils_10boundaries_21createindexlistcython_31create_boundary_neighbor_index_list_3d = {"__pyx_fuse_3create_boundary_neighbor_index_list_3d", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_fuse_3__pyx_pw_10pystencils_10boundaries_21createindexlistcython_31create_boundary_neighbor_index_list_3d, METH_VARARGS|METH_KEYWORDS, 0};
+static PyObject *__pyx_fuse_3__pyx_pw_10pystencils_10boundaries_21createindexlistcython_31create_boundary_neighbor_index_list_3d(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_flag_field = 0;
+  int __pyx_v_nr_of_ghost_layers;
+  PY_LONG_LONG __pyx_v_boundary_mask;
+  PY_LONG_LONG __pyx_v_fluid_mask;
+  PyObject *__pyx_v_stencil = 0;
+  int __pyx_v_single_link;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("create_boundary_neighbor_index_list_3d (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_flag_field,&__pyx_n_s_nr_of_ghost_layers,&__pyx_n_s_boundary_mask,&__pyx_n_s_fluid_mask,&__pyx_n_s_stencil,&__pyx_n_s_single_link,0};
+    PyObject* values[6] = {0,0,0,0,0,0};
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
+        CYTHON_FALLTHROUGH;
+        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+        CYTHON_FALLTHROUGH;
+        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
+        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_flag_field)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
+        case  1:
+        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_nr_of_ghost_layers)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_neighbor_index_list_3d", 1, 6, 6, 1); __PYX_ERR(0, 44, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  2:
+        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_boundary_mask)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_neighbor_index_list_3d", 1, 6, 6, 2); __PYX_ERR(0, 44, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  3:
+        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_fluid_mask)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_neighbor_index_list_3d", 1, 6, 6, 3); __PYX_ERR(0, 44, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  4:
+        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_stencil)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_neighbor_index_list_3d", 1, 6, 6, 4); __PYX_ERR(0, 44, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  5:
+        if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_single_link)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_neighbor_index_list_3d", 1, 6, 6, 5); __PYX_ERR(0, 44, __pyx_L3_error)
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "create_boundary_neighbor_index_list_3d") < 0)) __PYX_ERR(0, 44, __pyx_L3_error)
+      }
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 6) {
+      goto __pyx_L5_argtuple_error;
+    } else {
+      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+      values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+      values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+      values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
+    }
+    __pyx_v_flag_field = ((PyObject *)values[0]);
+    __pyx_v_nr_of_ghost_layers = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_nr_of_ghost_layers == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 45, __pyx_L3_error)
+    __pyx_v_boundary_mask = __Pyx_PyInt_As_PY_LONG_LONG(values[2]); if (unlikely((__pyx_v_boundary_mask == (PY_LONG_LONG)-1) && PyErr_Occurred())) __PYX_ERR(0, 45, __pyx_L3_error)
+    __pyx_v_fluid_mask = __Pyx_PyInt_As_PY_LONG_LONG(values[3]); if (unlikely((__pyx_v_fluid_mask == (PY_LONG_LONG)-1) && PyErr_Occurred())) __PYX_ERR(0, 45, __pyx_L3_error)
+    __pyx_v_stencil = ((PyObject *)values[4]);
+    __pyx_v_single_link = __Pyx_PyInt_As_int(values[5]); if (unlikely((__pyx_v_single_link == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 46, __pyx_L3_error)
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("create_boundary_neighbor_index_list_3d", 1, 6, 6, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 44, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("pystencils.boundaries.createindexlistcython.create_boundary_neighbor_index_list_3d", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_10pystencils_10boundaries_21createindexlistcython_30create_boundary_neighbor_index_list_3d(__pyx_self, __pyx_v_flag_field, __pyx_v_nr_of_ghost_layers, __pyx_v_boundary_mask, __pyx_v_fluid_mask, __pyx_v_stencil, __pyx_v_single_link);
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_10pystencils_10boundaries_21createindexlistcython_30create_boundary_neighbor_index_list_3d(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_flag_field, int __pyx_v_nr_of_ghost_layers, PY_LONG_LONG __pyx_v_boundary_mask, PY_LONG_LONG __pyx_v_fluid_mask, PyObject *__pyx_v_stencil, int __pyx_v_single_link) {
+  int __pyx_v_xs;
+  int __pyx_v_ys;
+  int __pyx_v_zs;
+  int __pyx_v_x;
+  int __pyx_v_y;
+  int __pyx_v_z;
+  int __pyx_v_dirIdx;
+  int __pyx_v_num_directions;
+  int __pyx_v_dx;
+  int __pyx_v_dy;
+  int __pyx_v_dz;
+  PyObject *__pyx_v_boundary_index_list = NULL;
+  __Pyx_LocalBuf_ND __pyx_pybuffernd_flag_field;
+  __Pyx_Buffer __pyx_pybuffer_flag_field;
+  __Pyx_LocalBuf_ND __pyx_pybuffernd_stencil;
+  __Pyx_Buffer __pyx_pybuffer_stencil;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
+  PyObject *__pyx_t_5 = NULL;
+  PyObject *(*__pyx_t_6)(PyObject *);
+  int __pyx_t_7;
+  int __pyx_t_8;
+  int __pyx_t_9;
+  int __pyx_t_10;
+  int __pyx_t_11;
+  int __pyx_t_12;
+  int __pyx_t_13;
+  int __pyx_t_14;
+  int __pyx_t_15;
+  Py_ssize_t __pyx_t_16;
+  Py_ssize_t __pyx_t_17;
+  Py_ssize_t __pyx_t_18;
+  int __pyx_t_19;
+  int __pyx_t_20;
+  int __pyx_t_21;
+  int __pyx_t_22;
+  Py_ssize_t __pyx_t_23;
+  Py_ssize_t __pyx_t_24;
+  Py_ssize_t __pyx_t_25;
+  Py_ssize_t __pyx_t_26;
+  Py_ssize_t __pyx_t_27;
+  Py_ssize_t __pyx_t_28;
+  Py_ssize_t __pyx_t_29;
+  Py_ssize_t __pyx_t_30;
+  Py_ssize_t __pyx_t_31;
+  int __pyx_t_32;
+  __Pyx_RefNannySetupContext("__pyx_fuse_3create_boundary_neighbor_index_list_3d", 0);
+  __pyx_pybuffer_flag_field.pybuffer.buf = NULL;
+  __pyx_pybuffer_flag_field.refcount = 0;
+  __pyx_pybuffernd_flag_field.data = NULL;
+  __pyx_pybuffernd_flag_field.rcbuffer = &__pyx_pybuffer_flag_field;
+  __pyx_pybuffer_stencil.pybuffer.buf = NULL;
+  __pyx_pybuffer_stencil.refcount = 0;
+  __pyx_pybuffernd_stencil.data = NULL;
+  __pyx_pybuffernd_stencil.rcbuffer = &__pyx_pybuffer_stencil;
+  {
+    __Pyx_BufFmt_StackElem __pyx_stack[1];
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_flag_field.rcbuffer->pybuffer, (PyObject*)__pyx_v_flag_field, &__Pyx_TypeInfo_PY_LONG_LONG, PyBUF_FORMAT| PyBUF_INDIRECT, 3, 0, __pyx_stack) == -1)) __PYX_ERR(0, 44, __pyx_L1_error)
+  }
+  __pyx_pybuffernd_flag_field.diminfo[0].strides = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_flag_field.diminfo[0].shape = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_flag_field.diminfo[0].suboffsets = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.suboffsets[0]; __pyx_pybuffernd_flag_field.diminfo[1].strides = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_flag_field.diminfo[1].shape = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_flag_field.diminfo[1].suboffsets = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.suboffsets[1]; __pyx_pybuffernd_flag_field.diminfo[2].strides = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_flag_field.diminfo[2].shape = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.shape[2]; __pyx_pybuffernd_flag_field.diminfo[2].suboffsets = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.suboffsets[2];
+  {
+    __Pyx_BufFmt_StackElem __pyx_stack[1];
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_stencil.rcbuffer->pybuffer, (PyObject*)__pyx_v_stencil, &__Pyx_TypeInfo_int, PyBUF_FORMAT| PyBUF_INDIRECT, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 44, __pyx_L1_error)
+  }
+  __pyx_pybuffernd_stencil.diminfo[0].strides = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_stencil.diminfo[0].shape = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_stencil.diminfo[0].suboffsets = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.suboffsets[0]; __pyx_pybuffernd_stencil.diminfo[1].strides = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_stencil.diminfo[1].shape = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_stencil.diminfo[1].suboffsets = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.suboffsets[1];
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":50
+ *     cdef int dirIdx, num_directions, dx, dy, dz
+ * 
+ *     xs, ys, zs = flag_field.shape             # <<<<<<<<<<<<<<
+ *     boundary_index_list = []
+ *     num_directions = stencil.shape[0]
+ */
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_flag_field), __pyx_n_s_shape); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 50, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) {
+    PyObject* sequence = __pyx_t_1;
+    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
+    if (unlikely(size != 3)) {
+      if (size > 3) __Pyx_RaiseTooManyValuesError(3);
+      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
+      __PYX_ERR(0, 50, __pyx_L1_error)
+    }
+    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+    if (likely(PyTuple_CheckExact(sequence))) {
+      __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
+      __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); 
+      __pyx_t_4 = PyTuple_GET_ITEM(sequence, 2); 
+    } else {
+      __pyx_t_2 = PyList_GET_ITEM(sequence, 0); 
+      __pyx_t_3 = PyList_GET_ITEM(sequence, 1); 
+      __pyx_t_4 = PyList_GET_ITEM(sequence, 2); 
+    }
+    __Pyx_INCREF(__pyx_t_2);
+    __Pyx_INCREF(__pyx_t_3);
+    __Pyx_INCREF(__pyx_t_4);
+    #else
+    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 50, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_2);
+    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 50, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    __pyx_t_4 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 50, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
+    #endif
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  } else {
+    Py_ssize_t index = -1;
+    __pyx_t_5 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 50, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_5);
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __pyx_t_6 = Py_TYPE(__pyx_t_5)->tp_iternext;
+    index = 0; __pyx_t_2 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_2)) goto __pyx_L3_unpacking_failed;
+    __Pyx_GOTREF(__pyx_t_2);
+    index = 1; __pyx_t_3 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_3)) goto __pyx_L3_unpacking_failed;
+    __Pyx_GOTREF(__pyx_t_3);
+    index = 2; __pyx_t_4 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_4)) goto __pyx_L3_unpacking_failed;
+    __Pyx_GOTREF(__pyx_t_4);
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_5), 3) < 0) __PYX_ERR(0, 50, __pyx_L1_error)
+    __pyx_t_6 = NULL;
+    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+    goto __pyx_L4_unpacking_done;
+    __pyx_L3_unpacking_failed:;
+    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+    __pyx_t_6 = NULL;
+    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
+    __PYX_ERR(0, 50, __pyx_L1_error)
+    __pyx_L4_unpacking_done:;
+  }
+  __pyx_t_7 = __Pyx_PyInt_As_int(__pyx_t_2); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 50, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_8 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_8 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 50, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __pyx_t_9 = __Pyx_PyInt_As_int(__pyx_t_4); if (unlikely((__pyx_t_9 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 50, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __pyx_v_xs = __pyx_t_7;
+  __pyx_v_ys = __pyx_t_8;
+  __pyx_v_zs = __pyx_t_9;
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":51
+ * 
+ *     xs, ys, zs = flag_field.shape
+ *     boundary_index_list = []             # <<<<<<<<<<<<<<
+ *     num_directions = stencil.shape[0]
+ * 
+ */
+  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 51, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_boundary_index_list = ((PyObject*)__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":52
+ *     xs, ys, zs = flag_field.shape
+ *     boundary_index_list = []
+ *     num_directions = stencil.shape[0]             # <<<<<<<<<<<<<<
+ * 
+ *     for z in range(nr_of_ghost_layers, zs - nr_of_ghost_layers):
+ */
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_stencil), __pyx_n_s_shape); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 52, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_4 = __Pyx_GetItemInt(__pyx_t_1, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 52, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_9 = __Pyx_PyInt_As_int(__pyx_t_4); if (unlikely((__pyx_t_9 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 52, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __pyx_v_num_directions = __pyx_t_9;
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":54
+ *     num_directions = stencil.shape[0]
+ * 
+ *     for z in range(nr_of_ghost_layers, zs - nr_of_ghost_layers):             # <<<<<<<<<<<<<<
+ *         for y in range(nr_of_ghost_layers, ys - nr_of_ghost_layers):
+ *             for x in range(nr_of_ghost_layers, xs - nr_of_ghost_layers):
+ */
+  __pyx_t_9 = (__pyx_v_zs - __pyx_v_nr_of_ghost_layers);
+  __pyx_t_8 = __pyx_t_9;
+  for (__pyx_t_7 = __pyx_v_nr_of_ghost_layers; __pyx_t_7 < __pyx_t_8; __pyx_t_7+=1) {
+    __pyx_v_z = __pyx_t_7;
+
+    /* "pystencils/boundaries/createindexlistcython.pyx":55
+ * 
+ *     for z in range(nr_of_ghost_layers, zs - nr_of_ghost_layers):
+ *         for y in range(nr_of_ghost_layers, ys - nr_of_ghost_layers):             # <<<<<<<<<<<<<<
+ *             for x in range(nr_of_ghost_layers, xs - nr_of_ghost_layers):
+ *                 if flag_field[x, y, z] & fluid_mask:
+ */
+    __pyx_t_10 = (__pyx_v_ys - __pyx_v_nr_of_ghost_layers);
+    __pyx_t_11 = __pyx_t_10;
+    for (__pyx_t_12 = __pyx_v_nr_of_ghost_layers; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) {
+      __pyx_v_y = __pyx_t_12;
+
+      /* "pystencils/boundaries/createindexlistcython.pyx":56
+ *     for z in range(nr_of_ghost_layers, zs - nr_of_ghost_layers):
+ *         for y in range(nr_of_ghost_layers, ys - nr_of_ghost_layers):
+ *             for x in range(nr_of_ghost_layers, xs - nr_of_ghost_layers):             # <<<<<<<<<<<<<<
+ *                 if flag_field[x, y, z] & fluid_mask:
+ *                     for dirIdx in range(num_directions):
+ */
+      __pyx_t_13 = (__pyx_v_xs - __pyx_v_nr_of_ghost_layers);
+      __pyx_t_14 = __pyx_t_13;
+      for (__pyx_t_15 = __pyx_v_nr_of_ghost_layers; __pyx_t_15 < __pyx_t_14; __pyx_t_15+=1) {
+        __pyx_v_x = __pyx_t_15;
+
+        /* "pystencils/boundaries/createindexlistcython.pyx":57
+ *         for y in range(nr_of_ghost_layers, ys - nr_of_ghost_layers):
+ *             for x in range(nr_of_ghost_layers, xs - nr_of_ghost_layers):
+ *                 if flag_field[x, y, z] & fluid_mask:             # <<<<<<<<<<<<<<
+ *                     for dirIdx in range(num_directions):
+ *                         dx = stencil[dirIdx,0]
+ */
+        __pyx_t_16 = __pyx_v_x;
+        __pyx_t_17 = __pyx_v_y;
+        __pyx_t_18 = __pyx_v_z;
+        __pyx_t_19 = (((*__Pyx_BufPtrFull3d(PY_LONG_LONG *, __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.buf, __pyx_t_16, __pyx_pybuffernd_flag_field.diminfo[0].strides, __pyx_pybuffernd_flag_field.diminfo[0].suboffsets, __pyx_t_17, __pyx_pybuffernd_flag_field.diminfo[1].strides, __pyx_pybuffernd_flag_field.diminfo[1].suboffsets, __pyx_t_18, __pyx_pybuffernd_flag_field.diminfo[2].strides, __pyx_pybuffernd_flag_field.diminfo[2].suboffsets)) & __pyx_v_fluid_mask) != 0);
+        if (__pyx_t_19) {
+
+          /* "pystencils/boundaries/createindexlistcython.pyx":58
+ *             for x in range(nr_of_ghost_layers, xs - nr_of_ghost_layers):
+ *                 if flag_field[x, y, z] & fluid_mask:
+ *                     for dirIdx in range(num_directions):             # <<<<<<<<<<<<<<
+ *                         dx = stencil[dirIdx,0]
+ *                         dy = stencil[dirIdx,1]
+ */
+          __pyx_t_20 = __pyx_v_num_directions;
+          __pyx_t_21 = __pyx_t_20;
+          for (__pyx_t_22 = 0; __pyx_t_22 < __pyx_t_21; __pyx_t_22+=1) {
+            __pyx_v_dirIdx = __pyx_t_22;
+
+            /* "pystencils/boundaries/createindexlistcython.pyx":59
+ *                 if flag_field[x, y, z] & fluid_mask:
+ *                     for dirIdx in range(num_directions):
+ *                         dx = stencil[dirIdx,0]             # <<<<<<<<<<<<<<
+ *                         dy = stencil[dirIdx,1]
+ *                         dz = stencil[dirIdx,2]
+ */
+            __pyx_t_23 = __pyx_v_dirIdx;
+            __pyx_t_24 = 0;
+            __pyx_v_dx = (*__Pyx_BufPtrFull2d(int *, __pyx_pybuffernd_stencil.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_stencil.diminfo[0].strides, __pyx_pybuffernd_stencil.diminfo[0].suboffsets, __pyx_t_24, __pyx_pybuffernd_stencil.diminfo[1].strides, __pyx_pybuffernd_stencil.diminfo[1].suboffsets));
+
+            /* "pystencils/boundaries/createindexlistcython.pyx":60
+ *                     for dirIdx in range(num_directions):
+ *                         dx = stencil[dirIdx,0]
+ *                         dy = stencil[dirIdx,1]             # <<<<<<<<<<<<<<
+ *                         dz = stencil[dirIdx,2]
+ *                         if flag_field[x + dx, y + dy, z + dz] & boundary_mask:
+ */
+            __pyx_t_25 = __pyx_v_dirIdx;
+            __pyx_t_26 = 1;
+            __pyx_v_dy = (*__Pyx_BufPtrFull2d(int *, __pyx_pybuffernd_stencil.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_stencil.diminfo[0].strides, __pyx_pybuffernd_stencil.diminfo[0].suboffsets, __pyx_t_26, __pyx_pybuffernd_stencil.diminfo[1].strides, __pyx_pybuffernd_stencil.diminfo[1].suboffsets));
+
+            /* "pystencils/boundaries/createindexlistcython.pyx":61
+ *                         dx = stencil[dirIdx,0]
+ *                         dy = stencil[dirIdx,1]
+ *                         dz = stencil[dirIdx,2]             # <<<<<<<<<<<<<<
+ *                         if flag_field[x + dx, y + dy, z + dz] & boundary_mask:
+ *                             boundary_index_list.append((x,y,z, dirIdx))
+ */
+            __pyx_t_27 = __pyx_v_dirIdx;
+            __pyx_t_28 = 2;
+            __pyx_v_dz = (*__Pyx_BufPtrFull2d(int *, __pyx_pybuffernd_stencil.rcbuffer->pybuffer.buf, __pyx_t_27, __pyx_pybuffernd_stencil.diminfo[0].strides, __pyx_pybuffernd_stencil.diminfo[0].suboffsets, __pyx_t_28, __pyx_pybuffernd_stencil.diminfo[1].strides, __pyx_pybuffernd_stencil.diminfo[1].suboffsets));
+
+            /* "pystencils/boundaries/createindexlistcython.pyx":62
+ *                         dy = stencil[dirIdx,1]
+ *                         dz = stencil[dirIdx,2]
+ *                         if flag_field[x + dx, y + dy, z + dz] & boundary_mask:             # <<<<<<<<<<<<<<
+ *                             boundary_index_list.append((x,y,z, dirIdx))
+ *                             if single_link:
+ */
+            __pyx_t_29 = (__pyx_v_x + __pyx_v_dx);
+            __pyx_t_30 = (__pyx_v_y + __pyx_v_dy);
+            __pyx_t_31 = (__pyx_v_z + __pyx_v_dz);
+            __pyx_t_19 = (((*__Pyx_BufPtrFull3d(PY_LONG_LONG *, __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.buf, __pyx_t_29, __pyx_pybuffernd_flag_field.diminfo[0].strides, __pyx_pybuffernd_flag_field.diminfo[0].suboffsets, __pyx_t_30, __pyx_pybuffernd_flag_field.diminfo[1].strides, __pyx_pybuffernd_flag_field.diminfo[1].suboffsets, __pyx_t_31, __pyx_pybuffernd_flag_field.diminfo[2].strides, __pyx_pybuffernd_flag_field.diminfo[2].suboffsets)) & __pyx_v_boundary_mask) != 0);
+            if (__pyx_t_19) {
+
+              /* "pystencils/boundaries/createindexlistcython.pyx":63
+ *                         dz = stencil[dirIdx,2]
+ *                         if flag_field[x + dx, y + dy, z + dz] & boundary_mask:
+ *                             boundary_index_list.append((x,y,z, dirIdx))             # <<<<<<<<<<<<<<
+ *                             if single_link:
+ *                                 break
+ */
+              __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_x); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 63, __pyx_L1_error)
+              __Pyx_GOTREF(__pyx_t_4);
+              __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_y); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 63, __pyx_L1_error)
+              __Pyx_GOTREF(__pyx_t_1);
+              __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_z); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 63, __pyx_L1_error)
+              __Pyx_GOTREF(__pyx_t_3);
+              __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_dirIdx); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 63, __pyx_L1_error)
+              __Pyx_GOTREF(__pyx_t_2);
+              __pyx_t_5 = PyTuple_New(4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 63, __pyx_L1_error)
+              __Pyx_GOTREF(__pyx_t_5);
+              __Pyx_GIVEREF(__pyx_t_4);
+              PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4);
+              __Pyx_GIVEREF(__pyx_t_1);
+              PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_1);
+              __Pyx_GIVEREF(__pyx_t_3);
+              PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_t_3);
+              __Pyx_GIVEREF(__pyx_t_2);
+              PyTuple_SET_ITEM(__pyx_t_5, 3, __pyx_t_2);
+              __pyx_t_4 = 0;
+              __pyx_t_1 = 0;
+              __pyx_t_3 = 0;
+              __pyx_t_2 = 0;
+              __pyx_t_32 = __Pyx_PyList_Append(__pyx_v_boundary_index_list, __pyx_t_5); if (unlikely(__pyx_t_32 == ((int)-1))) __PYX_ERR(0, 63, __pyx_L1_error)
+              __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+              /* "pystencils/boundaries/createindexlistcython.pyx":64
+ *                         if flag_field[x + dx, y + dy, z + dz] & boundary_mask:
+ *                             boundary_index_list.append((x,y,z, dirIdx))
+ *                             if single_link:             # <<<<<<<<<<<<<<
+ *                                 break
+ *     return boundary_index_list
+ */
+              __pyx_t_19 = (__pyx_v_single_link != 0);
+              if (__pyx_t_19) {
+
+                /* "pystencils/boundaries/createindexlistcython.pyx":65
+ *                             boundary_index_list.append((x,y,z, dirIdx))
+ *                             if single_link:
+ *                                 break             # <<<<<<<<<<<<<<
+ *     return boundary_index_list
+ * 
+ */
+                goto __pyx_L13_break;
+
+                /* "pystencils/boundaries/createindexlistcython.pyx":64
+ *                         if flag_field[x + dx, y + dy, z + dz] & boundary_mask:
+ *                             boundary_index_list.append((x,y,z, dirIdx))
+ *                             if single_link:             # <<<<<<<<<<<<<<
+ *                                 break
+ *     return boundary_index_list
+ */
+              }
+
+              /* "pystencils/boundaries/createindexlistcython.pyx":62
+ *                         dy = stencil[dirIdx,1]
+ *                         dz = stencil[dirIdx,2]
+ *                         if flag_field[x + dx, y + dy, z + dz] & boundary_mask:             # <<<<<<<<<<<<<<
+ *                             boundary_index_list.append((x,y,z, dirIdx))
+ *                             if single_link:
+ */
+            }
+          }
+          __pyx_L13_break:;
+
+          /* "pystencils/boundaries/createindexlistcython.pyx":57
+ *         for y in range(nr_of_ghost_layers, ys - nr_of_ghost_layers):
+ *             for x in range(nr_of_ghost_layers, xs - nr_of_ghost_layers):
+ *                 if flag_field[x, y, z] & fluid_mask:             # <<<<<<<<<<<<<<
+ *                     for dirIdx in range(num_directions):
+ *                         dx = stencil[dirIdx,0]
+ */
+        }
+      }
+    }
+  }
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":66
+ *                             if single_link:
+ *                                 break
+ *     return boundary_index_list             # <<<<<<<<<<<<<<
+ * 
+ * 
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(__pyx_v_boundary_index_list);
+  __pyx_r = __pyx_v_boundary_index_list;
+  goto __pyx_L0;
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":44
+ * @cython.boundscheck(False) # turn off bounds-checking for entire function
+ * @cython.wraparound(False)  # turn off negative index wrapping for entire function
+ * def create_boundary_neighbor_index_list_3d(object[IntegerType, ndim=3] flag_field,             # <<<<<<<<<<<<<<
+ *                                            int nr_of_ghost_layers, IntegerType boundary_mask, IntegerType fluid_mask,
+ *                                            object[int, ndim=2] stencil, int single_link):
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_XDECREF(__pyx_t_5);
+  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
+    __Pyx_PyThreadState_declare
+    __Pyx_PyThreadState_assign
+    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
+    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_flag_field.rcbuffer->pybuffer);
+    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_stencil.rcbuffer->pybuffer);
+  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
+  __Pyx_AddTraceback("pystencils.boundaries.createindexlistcython.create_boundary_neighbor_index_list_3d", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  goto __pyx_L2;
+  __pyx_L0:;
+  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_flag_field.rcbuffer->pybuffer);
+  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_stencil.rcbuffer->pybuffer);
+  __pyx_L2:;
+  __Pyx_XDECREF(__pyx_v_boundary_index_list);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static PyObject *__pyx_fuse_4__pyx_pw_10pystencils_10boundaries_21createindexlistcython_33create_boundary_neighbor_index_list_3d(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyMethodDef __pyx_fuse_4__pyx_mdef_10pystencils_10boundaries_21createindexlistcython_33create_boundary_neighbor_index_list_3d = {"__pyx_fuse_4create_boundary_neighbor_index_list_3d", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_fuse_4__pyx_pw_10pystencils_10boundaries_21createindexlistcython_33create_boundary_neighbor_index_list_3d, METH_VARARGS|METH_KEYWORDS, 0};
+static PyObject *__pyx_fuse_4__pyx_pw_10pystencils_10boundaries_21createindexlistcython_33create_boundary_neighbor_index_list_3d(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_flag_field = 0;
+  int __pyx_v_nr_of_ghost_layers;
+  unsigned short __pyx_v_boundary_mask;
+  unsigned short __pyx_v_fluid_mask;
+  PyObject *__pyx_v_stencil = 0;
+  int __pyx_v_single_link;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("create_boundary_neighbor_index_list_3d (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_flag_field,&__pyx_n_s_nr_of_ghost_layers,&__pyx_n_s_boundary_mask,&__pyx_n_s_fluid_mask,&__pyx_n_s_stencil,&__pyx_n_s_single_link,0};
+    PyObject* values[6] = {0,0,0,0,0,0};
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
+        CYTHON_FALLTHROUGH;
+        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+        CYTHON_FALLTHROUGH;
+        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
+        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_flag_field)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
+        case  1:
+        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_nr_of_ghost_layers)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_neighbor_index_list_3d", 1, 6, 6, 1); __PYX_ERR(0, 44, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  2:
+        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_boundary_mask)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_neighbor_index_list_3d", 1, 6, 6, 2); __PYX_ERR(0, 44, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  3:
+        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_fluid_mask)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_neighbor_index_list_3d", 1, 6, 6, 3); __PYX_ERR(0, 44, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  4:
+        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_stencil)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_neighbor_index_list_3d", 1, 6, 6, 4); __PYX_ERR(0, 44, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  5:
+        if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_single_link)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_neighbor_index_list_3d", 1, 6, 6, 5); __PYX_ERR(0, 44, __pyx_L3_error)
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "create_boundary_neighbor_index_list_3d") < 0)) __PYX_ERR(0, 44, __pyx_L3_error)
+      }
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 6) {
+      goto __pyx_L5_argtuple_error;
+    } else {
+      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+      values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+      values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+      values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
+    }
+    __pyx_v_flag_field = ((PyObject *)values[0]);
+    __pyx_v_nr_of_ghost_layers = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_nr_of_ghost_layers == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 45, __pyx_L3_error)
+    __pyx_v_boundary_mask = __Pyx_PyInt_As_unsigned_short(values[2]); if (unlikely((__pyx_v_boundary_mask == (unsigned short)-1) && PyErr_Occurred())) __PYX_ERR(0, 45, __pyx_L3_error)
+    __pyx_v_fluid_mask = __Pyx_PyInt_As_unsigned_short(values[3]); if (unlikely((__pyx_v_fluid_mask == (unsigned short)-1) && PyErr_Occurred())) __PYX_ERR(0, 45, __pyx_L3_error)
+    __pyx_v_stencil = ((PyObject *)values[4]);
+    __pyx_v_single_link = __Pyx_PyInt_As_int(values[5]); if (unlikely((__pyx_v_single_link == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 46, __pyx_L3_error)
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("create_boundary_neighbor_index_list_3d", 1, 6, 6, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 44, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("pystencils.boundaries.createindexlistcython.create_boundary_neighbor_index_list_3d", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_10pystencils_10boundaries_21createindexlistcython_32create_boundary_neighbor_index_list_3d(__pyx_self, __pyx_v_flag_field, __pyx_v_nr_of_ghost_layers, __pyx_v_boundary_mask, __pyx_v_fluid_mask, __pyx_v_stencil, __pyx_v_single_link);
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_10pystencils_10boundaries_21createindexlistcython_32create_boundary_neighbor_index_list_3d(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_flag_field, int __pyx_v_nr_of_ghost_layers, unsigned short __pyx_v_boundary_mask, unsigned short __pyx_v_fluid_mask, PyObject *__pyx_v_stencil, int __pyx_v_single_link) {
+  int __pyx_v_xs;
+  int __pyx_v_ys;
+  int __pyx_v_zs;
+  int __pyx_v_x;
+  int __pyx_v_y;
+  int __pyx_v_z;
+  int __pyx_v_dirIdx;
+  int __pyx_v_num_directions;
+  int __pyx_v_dx;
+  int __pyx_v_dy;
+  int __pyx_v_dz;
+  PyObject *__pyx_v_boundary_index_list = NULL;
+  __Pyx_LocalBuf_ND __pyx_pybuffernd_flag_field;
+  __Pyx_Buffer __pyx_pybuffer_flag_field;
+  __Pyx_LocalBuf_ND __pyx_pybuffernd_stencil;
+  __Pyx_Buffer __pyx_pybuffer_stencil;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
+  PyObject *__pyx_t_5 = NULL;
+  PyObject *(*__pyx_t_6)(PyObject *);
+  int __pyx_t_7;
+  int __pyx_t_8;
+  int __pyx_t_9;
+  int __pyx_t_10;
+  int __pyx_t_11;
+  int __pyx_t_12;
+  int __pyx_t_13;
+  int __pyx_t_14;
+  int __pyx_t_15;
+  Py_ssize_t __pyx_t_16;
+  Py_ssize_t __pyx_t_17;
+  Py_ssize_t __pyx_t_18;
+  int __pyx_t_19;
+  int __pyx_t_20;
+  int __pyx_t_21;
+  int __pyx_t_22;
+  Py_ssize_t __pyx_t_23;
+  Py_ssize_t __pyx_t_24;
+  Py_ssize_t __pyx_t_25;
+  Py_ssize_t __pyx_t_26;
+  Py_ssize_t __pyx_t_27;
+  Py_ssize_t __pyx_t_28;
+  Py_ssize_t __pyx_t_29;
+  Py_ssize_t __pyx_t_30;
+  Py_ssize_t __pyx_t_31;
+  int __pyx_t_32;
+  __Pyx_RefNannySetupContext("__pyx_fuse_4create_boundary_neighbor_index_list_3d", 0);
+  __pyx_pybuffer_flag_field.pybuffer.buf = NULL;
+  __pyx_pybuffer_flag_field.refcount = 0;
+  __pyx_pybuffernd_flag_field.data = NULL;
+  __pyx_pybuffernd_flag_field.rcbuffer = &__pyx_pybuffer_flag_field;
+  __pyx_pybuffer_stencil.pybuffer.buf = NULL;
+  __pyx_pybuffer_stencil.refcount = 0;
+  __pyx_pybuffernd_stencil.data = NULL;
+  __pyx_pybuffernd_stencil.rcbuffer = &__pyx_pybuffer_stencil;
+  {
+    __Pyx_BufFmt_StackElem __pyx_stack[1];
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_flag_field.rcbuffer->pybuffer, (PyObject*)__pyx_v_flag_field, &__Pyx_TypeInfo_unsigned_short, PyBUF_FORMAT| PyBUF_INDIRECT, 3, 0, __pyx_stack) == -1)) __PYX_ERR(0, 44, __pyx_L1_error)
+  }
+  __pyx_pybuffernd_flag_field.diminfo[0].strides = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_flag_field.diminfo[0].shape = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_flag_field.diminfo[0].suboffsets = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.suboffsets[0]; __pyx_pybuffernd_flag_field.diminfo[1].strides = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_flag_field.diminfo[1].shape = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_flag_field.diminfo[1].suboffsets = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.suboffsets[1]; __pyx_pybuffernd_flag_field.diminfo[2].strides = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_flag_field.diminfo[2].shape = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.shape[2]; __pyx_pybuffernd_flag_field.diminfo[2].suboffsets = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.suboffsets[2];
+  {
+    __Pyx_BufFmt_StackElem __pyx_stack[1];
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_stencil.rcbuffer->pybuffer, (PyObject*)__pyx_v_stencil, &__Pyx_TypeInfo_int, PyBUF_FORMAT| PyBUF_INDIRECT, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 44, __pyx_L1_error)
+  }
+  __pyx_pybuffernd_stencil.diminfo[0].strides = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_stencil.diminfo[0].shape = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_stencil.diminfo[0].suboffsets = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.suboffsets[0]; __pyx_pybuffernd_stencil.diminfo[1].strides = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_stencil.diminfo[1].shape = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_stencil.diminfo[1].suboffsets = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.suboffsets[1];
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":50
+ *     cdef int dirIdx, num_directions, dx, dy, dz
+ * 
+ *     xs, ys, zs = flag_field.shape             # <<<<<<<<<<<<<<
+ *     boundary_index_list = []
+ *     num_directions = stencil.shape[0]
+ */
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_flag_field), __pyx_n_s_shape); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 50, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) {
+    PyObject* sequence = __pyx_t_1;
+    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
+    if (unlikely(size != 3)) {
+      if (size > 3) __Pyx_RaiseTooManyValuesError(3);
+      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
+      __PYX_ERR(0, 50, __pyx_L1_error)
+    }
+    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+    if (likely(PyTuple_CheckExact(sequence))) {
+      __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
+      __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); 
+      __pyx_t_4 = PyTuple_GET_ITEM(sequence, 2); 
+    } else {
+      __pyx_t_2 = PyList_GET_ITEM(sequence, 0); 
+      __pyx_t_3 = PyList_GET_ITEM(sequence, 1); 
+      __pyx_t_4 = PyList_GET_ITEM(sequence, 2); 
+    }
+    __Pyx_INCREF(__pyx_t_2);
+    __Pyx_INCREF(__pyx_t_3);
+    __Pyx_INCREF(__pyx_t_4);
+    #else
+    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 50, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_2);
+    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 50, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    __pyx_t_4 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 50, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
+    #endif
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  } else {
+    Py_ssize_t index = -1;
+    __pyx_t_5 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 50, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_5);
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __pyx_t_6 = Py_TYPE(__pyx_t_5)->tp_iternext;
+    index = 0; __pyx_t_2 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_2)) goto __pyx_L3_unpacking_failed;
+    __Pyx_GOTREF(__pyx_t_2);
+    index = 1; __pyx_t_3 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_3)) goto __pyx_L3_unpacking_failed;
+    __Pyx_GOTREF(__pyx_t_3);
+    index = 2; __pyx_t_4 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_4)) goto __pyx_L3_unpacking_failed;
+    __Pyx_GOTREF(__pyx_t_4);
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_5), 3) < 0) __PYX_ERR(0, 50, __pyx_L1_error)
+    __pyx_t_6 = NULL;
+    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+    goto __pyx_L4_unpacking_done;
+    __pyx_L3_unpacking_failed:;
+    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+    __pyx_t_6 = NULL;
+    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
+    __PYX_ERR(0, 50, __pyx_L1_error)
+    __pyx_L4_unpacking_done:;
+  }
+  __pyx_t_7 = __Pyx_PyInt_As_int(__pyx_t_2); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 50, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_8 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_8 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 50, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __pyx_t_9 = __Pyx_PyInt_As_int(__pyx_t_4); if (unlikely((__pyx_t_9 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 50, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __pyx_v_xs = __pyx_t_7;
+  __pyx_v_ys = __pyx_t_8;
+  __pyx_v_zs = __pyx_t_9;
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":51
+ * 
+ *     xs, ys, zs = flag_field.shape
+ *     boundary_index_list = []             # <<<<<<<<<<<<<<
+ *     num_directions = stencil.shape[0]
+ * 
+ */
+  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 51, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_boundary_index_list = ((PyObject*)__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":52
+ *     xs, ys, zs = flag_field.shape
+ *     boundary_index_list = []
+ *     num_directions = stencil.shape[0]             # <<<<<<<<<<<<<<
+ * 
+ *     for z in range(nr_of_ghost_layers, zs - nr_of_ghost_layers):
+ */
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_stencil), __pyx_n_s_shape); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 52, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_4 = __Pyx_GetItemInt(__pyx_t_1, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 52, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_9 = __Pyx_PyInt_As_int(__pyx_t_4); if (unlikely((__pyx_t_9 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 52, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __pyx_v_num_directions = __pyx_t_9;
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":54
+ *     num_directions = stencil.shape[0]
+ * 
+ *     for z in range(nr_of_ghost_layers, zs - nr_of_ghost_layers):             # <<<<<<<<<<<<<<
+ *         for y in range(nr_of_ghost_layers, ys - nr_of_ghost_layers):
+ *             for x in range(nr_of_ghost_layers, xs - nr_of_ghost_layers):
+ */
+  __pyx_t_9 = (__pyx_v_zs - __pyx_v_nr_of_ghost_layers);
+  __pyx_t_8 = __pyx_t_9;
+  for (__pyx_t_7 = __pyx_v_nr_of_ghost_layers; __pyx_t_7 < __pyx_t_8; __pyx_t_7+=1) {
+    __pyx_v_z = __pyx_t_7;
+
+    /* "pystencils/boundaries/createindexlistcython.pyx":55
+ * 
+ *     for z in range(nr_of_ghost_layers, zs - nr_of_ghost_layers):
+ *         for y in range(nr_of_ghost_layers, ys - nr_of_ghost_layers):             # <<<<<<<<<<<<<<
+ *             for x in range(nr_of_ghost_layers, xs - nr_of_ghost_layers):
+ *                 if flag_field[x, y, z] & fluid_mask:
+ */
+    __pyx_t_10 = (__pyx_v_ys - __pyx_v_nr_of_ghost_layers);
+    __pyx_t_11 = __pyx_t_10;
+    for (__pyx_t_12 = __pyx_v_nr_of_ghost_layers; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) {
+      __pyx_v_y = __pyx_t_12;
+
+      /* "pystencils/boundaries/createindexlistcython.pyx":56
+ *     for z in range(nr_of_ghost_layers, zs - nr_of_ghost_layers):
+ *         for y in range(nr_of_ghost_layers, ys - nr_of_ghost_layers):
+ *             for x in range(nr_of_ghost_layers, xs - nr_of_ghost_layers):             # <<<<<<<<<<<<<<
+ *                 if flag_field[x, y, z] & fluid_mask:
+ *                     for dirIdx in range(num_directions):
+ */
+      __pyx_t_13 = (__pyx_v_xs - __pyx_v_nr_of_ghost_layers);
+      __pyx_t_14 = __pyx_t_13;
+      for (__pyx_t_15 = __pyx_v_nr_of_ghost_layers; __pyx_t_15 < __pyx_t_14; __pyx_t_15+=1) {
+        __pyx_v_x = __pyx_t_15;
+
+        /* "pystencils/boundaries/createindexlistcython.pyx":57
+ *         for y in range(nr_of_ghost_layers, ys - nr_of_ghost_layers):
+ *             for x in range(nr_of_ghost_layers, xs - nr_of_ghost_layers):
+ *                 if flag_field[x, y, z] & fluid_mask:             # <<<<<<<<<<<<<<
+ *                     for dirIdx in range(num_directions):
+ *                         dx = stencil[dirIdx,0]
+ */
+        __pyx_t_16 = __pyx_v_x;
+        __pyx_t_17 = __pyx_v_y;
+        __pyx_t_18 = __pyx_v_z;
+        __pyx_t_19 = (((*__Pyx_BufPtrFull3d(unsigned short *, __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.buf, __pyx_t_16, __pyx_pybuffernd_flag_field.diminfo[0].strides, __pyx_pybuffernd_flag_field.diminfo[0].suboffsets, __pyx_t_17, __pyx_pybuffernd_flag_field.diminfo[1].strides, __pyx_pybuffernd_flag_field.diminfo[1].suboffsets, __pyx_t_18, __pyx_pybuffernd_flag_field.diminfo[2].strides, __pyx_pybuffernd_flag_field.diminfo[2].suboffsets)) & __pyx_v_fluid_mask) != 0);
+        if (__pyx_t_19) {
+
+          /* "pystencils/boundaries/createindexlistcython.pyx":58
+ *             for x in range(nr_of_ghost_layers, xs - nr_of_ghost_layers):
+ *                 if flag_field[x, y, z] & fluid_mask:
+ *                     for dirIdx in range(num_directions):             # <<<<<<<<<<<<<<
+ *                         dx = stencil[dirIdx,0]
+ *                         dy = stencil[dirIdx,1]
+ */
+          __pyx_t_20 = __pyx_v_num_directions;
+          __pyx_t_21 = __pyx_t_20;
+          for (__pyx_t_22 = 0; __pyx_t_22 < __pyx_t_21; __pyx_t_22+=1) {
+            __pyx_v_dirIdx = __pyx_t_22;
+
+            /* "pystencils/boundaries/createindexlistcython.pyx":59
+ *                 if flag_field[x, y, z] & fluid_mask:
+ *                     for dirIdx in range(num_directions):
+ *                         dx = stencil[dirIdx,0]             # <<<<<<<<<<<<<<
+ *                         dy = stencil[dirIdx,1]
+ *                         dz = stencil[dirIdx,2]
+ */
+            __pyx_t_23 = __pyx_v_dirIdx;
+            __pyx_t_24 = 0;
+            __pyx_v_dx = (*__Pyx_BufPtrFull2d(int *, __pyx_pybuffernd_stencil.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_stencil.diminfo[0].strides, __pyx_pybuffernd_stencil.diminfo[0].suboffsets, __pyx_t_24, __pyx_pybuffernd_stencil.diminfo[1].strides, __pyx_pybuffernd_stencil.diminfo[1].suboffsets));
+
+            /* "pystencils/boundaries/createindexlistcython.pyx":60
+ *                     for dirIdx in range(num_directions):
+ *                         dx = stencil[dirIdx,0]
+ *                         dy = stencil[dirIdx,1]             # <<<<<<<<<<<<<<
+ *                         dz = stencil[dirIdx,2]
+ *                         if flag_field[x + dx, y + dy, z + dz] & boundary_mask:
+ */
+            __pyx_t_25 = __pyx_v_dirIdx;
+            __pyx_t_26 = 1;
+            __pyx_v_dy = (*__Pyx_BufPtrFull2d(int *, __pyx_pybuffernd_stencil.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_stencil.diminfo[0].strides, __pyx_pybuffernd_stencil.diminfo[0].suboffsets, __pyx_t_26, __pyx_pybuffernd_stencil.diminfo[1].strides, __pyx_pybuffernd_stencil.diminfo[1].suboffsets));
+
+            /* "pystencils/boundaries/createindexlistcython.pyx":61
+ *                         dx = stencil[dirIdx,0]
+ *                         dy = stencil[dirIdx,1]
+ *                         dz = stencil[dirIdx,2]             # <<<<<<<<<<<<<<
+ *                         if flag_field[x + dx, y + dy, z + dz] & boundary_mask:
+ *                             boundary_index_list.append((x,y,z, dirIdx))
+ */
+            __pyx_t_27 = __pyx_v_dirIdx;
+            __pyx_t_28 = 2;
+            __pyx_v_dz = (*__Pyx_BufPtrFull2d(int *, __pyx_pybuffernd_stencil.rcbuffer->pybuffer.buf, __pyx_t_27, __pyx_pybuffernd_stencil.diminfo[0].strides, __pyx_pybuffernd_stencil.diminfo[0].suboffsets, __pyx_t_28, __pyx_pybuffernd_stencil.diminfo[1].strides, __pyx_pybuffernd_stencil.diminfo[1].suboffsets));
+
+            /* "pystencils/boundaries/createindexlistcython.pyx":62
+ *                         dy = stencil[dirIdx,1]
+ *                         dz = stencil[dirIdx,2]
+ *                         if flag_field[x + dx, y + dy, z + dz] & boundary_mask:             # <<<<<<<<<<<<<<
+ *                             boundary_index_list.append((x,y,z, dirIdx))
+ *                             if single_link:
+ */
+            __pyx_t_29 = (__pyx_v_x + __pyx_v_dx);
+            __pyx_t_30 = (__pyx_v_y + __pyx_v_dy);
+            __pyx_t_31 = (__pyx_v_z + __pyx_v_dz);
+            __pyx_t_19 = (((*__Pyx_BufPtrFull3d(unsigned short *, __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.buf, __pyx_t_29, __pyx_pybuffernd_flag_field.diminfo[0].strides, __pyx_pybuffernd_flag_field.diminfo[0].suboffsets, __pyx_t_30, __pyx_pybuffernd_flag_field.diminfo[1].strides, __pyx_pybuffernd_flag_field.diminfo[1].suboffsets, __pyx_t_31, __pyx_pybuffernd_flag_field.diminfo[2].strides, __pyx_pybuffernd_flag_field.diminfo[2].suboffsets)) & __pyx_v_boundary_mask) != 0);
+            if (__pyx_t_19) {
+
+              /* "pystencils/boundaries/createindexlistcython.pyx":63
+ *                         dz = stencil[dirIdx,2]
+ *                         if flag_field[x + dx, y + dy, z + dz] & boundary_mask:
+ *                             boundary_index_list.append((x,y,z, dirIdx))             # <<<<<<<<<<<<<<
+ *                             if single_link:
+ *                                 break
+ */
+              __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_x); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 63, __pyx_L1_error)
+              __Pyx_GOTREF(__pyx_t_4);
+              __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_y); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 63, __pyx_L1_error)
+              __Pyx_GOTREF(__pyx_t_1);
+              __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_z); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 63, __pyx_L1_error)
+              __Pyx_GOTREF(__pyx_t_3);
+              __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_dirIdx); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 63, __pyx_L1_error)
+              __Pyx_GOTREF(__pyx_t_2);
+              __pyx_t_5 = PyTuple_New(4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 63, __pyx_L1_error)
+              __Pyx_GOTREF(__pyx_t_5);
+              __Pyx_GIVEREF(__pyx_t_4);
+              PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4);
+              __Pyx_GIVEREF(__pyx_t_1);
+              PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_1);
+              __Pyx_GIVEREF(__pyx_t_3);
+              PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_t_3);
+              __Pyx_GIVEREF(__pyx_t_2);
+              PyTuple_SET_ITEM(__pyx_t_5, 3, __pyx_t_2);
+              __pyx_t_4 = 0;
+              __pyx_t_1 = 0;
+              __pyx_t_3 = 0;
+              __pyx_t_2 = 0;
+              __pyx_t_32 = __Pyx_PyList_Append(__pyx_v_boundary_index_list, __pyx_t_5); if (unlikely(__pyx_t_32 == ((int)-1))) __PYX_ERR(0, 63, __pyx_L1_error)
+              __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+              /* "pystencils/boundaries/createindexlistcython.pyx":64
+ *                         if flag_field[x + dx, y + dy, z + dz] & boundary_mask:
+ *                             boundary_index_list.append((x,y,z, dirIdx))
+ *                             if single_link:             # <<<<<<<<<<<<<<
+ *                                 break
+ *     return boundary_index_list
+ */
+              __pyx_t_19 = (__pyx_v_single_link != 0);
+              if (__pyx_t_19) {
+
+                /* "pystencils/boundaries/createindexlistcython.pyx":65
+ *                             boundary_index_list.append((x,y,z, dirIdx))
+ *                             if single_link:
+ *                                 break             # <<<<<<<<<<<<<<
+ *     return boundary_index_list
+ * 
+ */
+                goto __pyx_L13_break;
+
+                /* "pystencils/boundaries/createindexlistcython.pyx":64
+ *                         if flag_field[x + dx, y + dy, z + dz] & boundary_mask:
+ *                             boundary_index_list.append((x,y,z, dirIdx))
+ *                             if single_link:             # <<<<<<<<<<<<<<
+ *                                 break
+ *     return boundary_index_list
+ */
+              }
+
+              /* "pystencils/boundaries/createindexlistcython.pyx":62
+ *                         dy = stencil[dirIdx,1]
+ *                         dz = stencil[dirIdx,2]
+ *                         if flag_field[x + dx, y + dy, z + dz] & boundary_mask:             # <<<<<<<<<<<<<<
+ *                             boundary_index_list.append((x,y,z, dirIdx))
+ *                             if single_link:
+ */
+            }
+          }
+          __pyx_L13_break:;
+
+          /* "pystencils/boundaries/createindexlistcython.pyx":57
+ *         for y in range(nr_of_ghost_layers, ys - nr_of_ghost_layers):
+ *             for x in range(nr_of_ghost_layers, xs - nr_of_ghost_layers):
+ *                 if flag_field[x, y, z] & fluid_mask:             # <<<<<<<<<<<<<<
+ *                     for dirIdx in range(num_directions):
+ *                         dx = stencil[dirIdx,0]
+ */
+        }
+      }
+    }
+  }
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":66
+ *                             if single_link:
+ *                                 break
+ *     return boundary_index_list             # <<<<<<<<<<<<<<
+ * 
+ * 
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(__pyx_v_boundary_index_list);
+  __pyx_r = __pyx_v_boundary_index_list;
+  goto __pyx_L0;
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":44
+ * @cython.boundscheck(False) # turn off bounds-checking for entire function
+ * @cython.wraparound(False)  # turn off negative index wrapping for entire function
+ * def create_boundary_neighbor_index_list_3d(object[IntegerType, ndim=3] flag_field,             # <<<<<<<<<<<<<<
+ *                                            int nr_of_ghost_layers, IntegerType boundary_mask, IntegerType fluid_mask,
+ *                                            object[int, ndim=2] stencil, int single_link):
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_XDECREF(__pyx_t_5);
+  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
+    __Pyx_PyThreadState_declare
+    __Pyx_PyThreadState_assign
+    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
+    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_flag_field.rcbuffer->pybuffer);
+    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_stencil.rcbuffer->pybuffer);
+  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
+  __Pyx_AddTraceback("pystencils.boundaries.createindexlistcython.create_boundary_neighbor_index_list_3d", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  goto __pyx_L2;
+  __pyx_L0:;
+  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_flag_field.rcbuffer->pybuffer);
+  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_stencil.rcbuffer->pybuffer);
+  __pyx_L2:;
+  __Pyx_XDECREF(__pyx_v_boundary_index_list);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static PyObject *__pyx_fuse_5__pyx_pw_10pystencils_10boundaries_21createindexlistcython_35create_boundary_neighbor_index_list_3d(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyMethodDef __pyx_fuse_5__pyx_mdef_10pystencils_10boundaries_21createindexlistcython_35create_boundary_neighbor_index_list_3d = {"__pyx_fuse_5create_boundary_neighbor_index_list_3d", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_fuse_5__pyx_pw_10pystencils_10boundaries_21createindexlistcython_35create_boundary_neighbor_index_list_3d, METH_VARARGS|METH_KEYWORDS, 0};
+static PyObject *__pyx_fuse_5__pyx_pw_10pystencils_10boundaries_21createindexlistcython_35create_boundary_neighbor_index_list_3d(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_flag_field = 0;
+  int __pyx_v_nr_of_ghost_layers;
+  unsigned int __pyx_v_boundary_mask;
+  unsigned int __pyx_v_fluid_mask;
+  PyObject *__pyx_v_stencil = 0;
+  int __pyx_v_single_link;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("create_boundary_neighbor_index_list_3d (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_flag_field,&__pyx_n_s_nr_of_ghost_layers,&__pyx_n_s_boundary_mask,&__pyx_n_s_fluid_mask,&__pyx_n_s_stencil,&__pyx_n_s_single_link,0};
+    PyObject* values[6] = {0,0,0,0,0,0};
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
+        CYTHON_FALLTHROUGH;
+        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+        CYTHON_FALLTHROUGH;
+        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
+        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_flag_field)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
+        case  1:
+        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_nr_of_ghost_layers)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_neighbor_index_list_3d", 1, 6, 6, 1); __PYX_ERR(0, 44, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  2:
+        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_boundary_mask)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_neighbor_index_list_3d", 1, 6, 6, 2); __PYX_ERR(0, 44, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  3:
+        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_fluid_mask)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_neighbor_index_list_3d", 1, 6, 6, 3); __PYX_ERR(0, 44, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  4:
+        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_stencil)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_neighbor_index_list_3d", 1, 6, 6, 4); __PYX_ERR(0, 44, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  5:
+        if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_single_link)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_neighbor_index_list_3d", 1, 6, 6, 5); __PYX_ERR(0, 44, __pyx_L3_error)
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "create_boundary_neighbor_index_list_3d") < 0)) __PYX_ERR(0, 44, __pyx_L3_error)
+      }
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 6) {
+      goto __pyx_L5_argtuple_error;
+    } else {
+      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+      values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+      values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+      values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
+    }
+    __pyx_v_flag_field = ((PyObject *)values[0]);
+    __pyx_v_nr_of_ghost_layers = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_nr_of_ghost_layers == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 45, __pyx_L3_error)
+    __pyx_v_boundary_mask = __Pyx_PyInt_As_unsigned_int(values[2]); if (unlikely((__pyx_v_boundary_mask == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(0, 45, __pyx_L3_error)
+    __pyx_v_fluid_mask = __Pyx_PyInt_As_unsigned_int(values[3]); if (unlikely((__pyx_v_fluid_mask == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(0, 45, __pyx_L3_error)
+    __pyx_v_stencil = ((PyObject *)values[4]);
+    __pyx_v_single_link = __Pyx_PyInt_As_int(values[5]); if (unlikely((__pyx_v_single_link == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 46, __pyx_L3_error)
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("create_boundary_neighbor_index_list_3d", 1, 6, 6, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 44, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("pystencils.boundaries.createindexlistcython.create_boundary_neighbor_index_list_3d", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_10pystencils_10boundaries_21createindexlistcython_34create_boundary_neighbor_index_list_3d(__pyx_self, __pyx_v_flag_field, __pyx_v_nr_of_ghost_layers, __pyx_v_boundary_mask, __pyx_v_fluid_mask, __pyx_v_stencil, __pyx_v_single_link);
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_10pystencils_10boundaries_21createindexlistcython_34create_boundary_neighbor_index_list_3d(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_flag_field, int __pyx_v_nr_of_ghost_layers, unsigned int __pyx_v_boundary_mask, unsigned int __pyx_v_fluid_mask, PyObject *__pyx_v_stencil, int __pyx_v_single_link) {
+  int __pyx_v_xs;
+  int __pyx_v_ys;
+  int __pyx_v_zs;
+  int __pyx_v_x;
+  int __pyx_v_y;
+  int __pyx_v_z;
+  int __pyx_v_dirIdx;
+  int __pyx_v_num_directions;
+  int __pyx_v_dx;
+  int __pyx_v_dy;
+  int __pyx_v_dz;
+  PyObject *__pyx_v_boundary_index_list = NULL;
+  __Pyx_LocalBuf_ND __pyx_pybuffernd_flag_field;
+  __Pyx_Buffer __pyx_pybuffer_flag_field;
+  __Pyx_LocalBuf_ND __pyx_pybuffernd_stencil;
+  __Pyx_Buffer __pyx_pybuffer_stencil;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
+  PyObject *__pyx_t_5 = NULL;
+  PyObject *(*__pyx_t_6)(PyObject *);
+  int __pyx_t_7;
+  int __pyx_t_8;
+  int __pyx_t_9;
+  int __pyx_t_10;
+  int __pyx_t_11;
+  int __pyx_t_12;
+  int __pyx_t_13;
+  int __pyx_t_14;
+  int __pyx_t_15;
+  Py_ssize_t __pyx_t_16;
+  Py_ssize_t __pyx_t_17;
+  Py_ssize_t __pyx_t_18;
+  int __pyx_t_19;
+  int __pyx_t_20;
+  int __pyx_t_21;
+  int __pyx_t_22;
+  Py_ssize_t __pyx_t_23;
+  Py_ssize_t __pyx_t_24;
+  Py_ssize_t __pyx_t_25;
+  Py_ssize_t __pyx_t_26;
+  Py_ssize_t __pyx_t_27;
+  Py_ssize_t __pyx_t_28;
+  Py_ssize_t __pyx_t_29;
+  Py_ssize_t __pyx_t_30;
+  Py_ssize_t __pyx_t_31;
+  int __pyx_t_32;
+  __Pyx_RefNannySetupContext("__pyx_fuse_5create_boundary_neighbor_index_list_3d", 0);
+  __pyx_pybuffer_flag_field.pybuffer.buf = NULL;
+  __pyx_pybuffer_flag_field.refcount = 0;
+  __pyx_pybuffernd_flag_field.data = NULL;
+  __pyx_pybuffernd_flag_field.rcbuffer = &__pyx_pybuffer_flag_field;
+  __pyx_pybuffer_stencil.pybuffer.buf = NULL;
+  __pyx_pybuffer_stencil.refcount = 0;
+  __pyx_pybuffernd_stencil.data = NULL;
+  __pyx_pybuffernd_stencil.rcbuffer = &__pyx_pybuffer_stencil;
+  {
+    __Pyx_BufFmt_StackElem __pyx_stack[1];
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_flag_field.rcbuffer->pybuffer, (PyObject*)__pyx_v_flag_field, &__Pyx_TypeInfo_unsigned_int, PyBUF_FORMAT| PyBUF_INDIRECT, 3, 0, __pyx_stack) == -1)) __PYX_ERR(0, 44, __pyx_L1_error)
+  }
+  __pyx_pybuffernd_flag_field.diminfo[0].strides = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_flag_field.diminfo[0].shape = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_flag_field.diminfo[0].suboffsets = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.suboffsets[0]; __pyx_pybuffernd_flag_field.diminfo[1].strides = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_flag_field.diminfo[1].shape = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_flag_field.diminfo[1].suboffsets = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.suboffsets[1]; __pyx_pybuffernd_flag_field.diminfo[2].strides = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_flag_field.diminfo[2].shape = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.shape[2]; __pyx_pybuffernd_flag_field.diminfo[2].suboffsets = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.suboffsets[2];
+  {
+    __Pyx_BufFmt_StackElem __pyx_stack[1];
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_stencil.rcbuffer->pybuffer, (PyObject*)__pyx_v_stencil, &__Pyx_TypeInfo_int, PyBUF_FORMAT| PyBUF_INDIRECT, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 44, __pyx_L1_error)
+  }
+  __pyx_pybuffernd_stencil.diminfo[0].strides = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_stencil.diminfo[0].shape = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_stencil.diminfo[0].suboffsets = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.suboffsets[0]; __pyx_pybuffernd_stencil.diminfo[1].strides = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_stencil.diminfo[1].shape = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_stencil.diminfo[1].suboffsets = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.suboffsets[1];
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":50
+ *     cdef int dirIdx, num_directions, dx, dy, dz
+ * 
+ *     xs, ys, zs = flag_field.shape             # <<<<<<<<<<<<<<
+ *     boundary_index_list = []
+ *     num_directions = stencil.shape[0]
+ */
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_flag_field), __pyx_n_s_shape); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 50, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) {
+    PyObject* sequence = __pyx_t_1;
+    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
+    if (unlikely(size != 3)) {
+      if (size > 3) __Pyx_RaiseTooManyValuesError(3);
+      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
+      __PYX_ERR(0, 50, __pyx_L1_error)
+    }
+    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+    if (likely(PyTuple_CheckExact(sequence))) {
+      __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
+      __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); 
+      __pyx_t_4 = PyTuple_GET_ITEM(sequence, 2); 
+    } else {
+      __pyx_t_2 = PyList_GET_ITEM(sequence, 0); 
+      __pyx_t_3 = PyList_GET_ITEM(sequence, 1); 
+      __pyx_t_4 = PyList_GET_ITEM(sequence, 2); 
+    }
+    __Pyx_INCREF(__pyx_t_2);
+    __Pyx_INCREF(__pyx_t_3);
+    __Pyx_INCREF(__pyx_t_4);
+    #else
+    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 50, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_2);
+    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 50, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    __pyx_t_4 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 50, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
+    #endif
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  } else {
+    Py_ssize_t index = -1;
+    __pyx_t_5 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 50, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_5);
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __pyx_t_6 = Py_TYPE(__pyx_t_5)->tp_iternext;
+    index = 0; __pyx_t_2 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_2)) goto __pyx_L3_unpacking_failed;
+    __Pyx_GOTREF(__pyx_t_2);
+    index = 1; __pyx_t_3 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_3)) goto __pyx_L3_unpacking_failed;
+    __Pyx_GOTREF(__pyx_t_3);
+    index = 2; __pyx_t_4 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_4)) goto __pyx_L3_unpacking_failed;
+    __Pyx_GOTREF(__pyx_t_4);
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_5), 3) < 0) __PYX_ERR(0, 50, __pyx_L1_error)
+    __pyx_t_6 = NULL;
+    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+    goto __pyx_L4_unpacking_done;
+    __pyx_L3_unpacking_failed:;
+    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+    __pyx_t_6 = NULL;
+    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
+    __PYX_ERR(0, 50, __pyx_L1_error)
+    __pyx_L4_unpacking_done:;
+  }
+  __pyx_t_7 = __Pyx_PyInt_As_int(__pyx_t_2); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 50, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_8 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_8 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 50, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __pyx_t_9 = __Pyx_PyInt_As_int(__pyx_t_4); if (unlikely((__pyx_t_9 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 50, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __pyx_v_xs = __pyx_t_7;
+  __pyx_v_ys = __pyx_t_8;
+  __pyx_v_zs = __pyx_t_9;
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":51
+ * 
+ *     xs, ys, zs = flag_field.shape
+ *     boundary_index_list = []             # <<<<<<<<<<<<<<
+ *     num_directions = stencil.shape[0]
+ * 
+ */
+  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 51, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_boundary_index_list = ((PyObject*)__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":52
+ *     xs, ys, zs = flag_field.shape
+ *     boundary_index_list = []
+ *     num_directions = stencil.shape[0]             # <<<<<<<<<<<<<<
+ * 
+ *     for z in range(nr_of_ghost_layers, zs - nr_of_ghost_layers):
+ */
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_stencil), __pyx_n_s_shape); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 52, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_4 = __Pyx_GetItemInt(__pyx_t_1, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 52, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_9 = __Pyx_PyInt_As_int(__pyx_t_4); if (unlikely((__pyx_t_9 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 52, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __pyx_v_num_directions = __pyx_t_9;
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":54
+ *     num_directions = stencil.shape[0]
+ * 
+ *     for z in range(nr_of_ghost_layers, zs - nr_of_ghost_layers):             # <<<<<<<<<<<<<<
+ *         for y in range(nr_of_ghost_layers, ys - nr_of_ghost_layers):
+ *             for x in range(nr_of_ghost_layers, xs - nr_of_ghost_layers):
+ */
+  __pyx_t_9 = (__pyx_v_zs - __pyx_v_nr_of_ghost_layers);
+  __pyx_t_8 = __pyx_t_9;
+  for (__pyx_t_7 = __pyx_v_nr_of_ghost_layers; __pyx_t_7 < __pyx_t_8; __pyx_t_7+=1) {
+    __pyx_v_z = __pyx_t_7;
+
+    /* "pystencils/boundaries/createindexlistcython.pyx":55
+ * 
+ *     for z in range(nr_of_ghost_layers, zs - nr_of_ghost_layers):
+ *         for y in range(nr_of_ghost_layers, ys - nr_of_ghost_layers):             # <<<<<<<<<<<<<<
+ *             for x in range(nr_of_ghost_layers, xs - nr_of_ghost_layers):
+ *                 if flag_field[x, y, z] & fluid_mask:
+ */
+    __pyx_t_10 = (__pyx_v_ys - __pyx_v_nr_of_ghost_layers);
+    __pyx_t_11 = __pyx_t_10;
+    for (__pyx_t_12 = __pyx_v_nr_of_ghost_layers; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) {
+      __pyx_v_y = __pyx_t_12;
+
+      /* "pystencils/boundaries/createindexlistcython.pyx":56
+ *     for z in range(nr_of_ghost_layers, zs - nr_of_ghost_layers):
+ *         for y in range(nr_of_ghost_layers, ys - nr_of_ghost_layers):
+ *             for x in range(nr_of_ghost_layers, xs - nr_of_ghost_layers):             # <<<<<<<<<<<<<<
+ *                 if flag_field[x, y, z] & fluid_mask:
+ *                     for dirIdx in range(num_directions):
+ */
+      __pyx_t_13 = (__pyx_v_xs - __pyx_v_nr_of_ghost_layers);
+      __pyx_t_14 = __pyx_t_13;
+      for (__pyx_t_15 = __pyx_v_nr_of_ghost_layers; __pyx_t_15 < __pyx_t_14; __pyx_t_15+=1) {
+        __pyx_v_x = __pyx_t_15;
+
+        /* "pystencils/boundaries/createindexlistcython.pyx":57
+ *         for y in range(nr_of_ghost_layers, ys - nr_of_ghost_layers):
+ *             for x in range(nr_of_ghost_layers, xs - nr_of_ghost_layers):
+ *                 if flag_field[x, y, z] & fluid_mask:             # <<<<<<<<<<<<<<
+ *                     for dirIdx in range(num_directions):
+ *                         dx = stencil[dirIdx,0]
+ */
+        __pyx_t_16 = __pyx_v_x;
+        __pyx_t_17 = __pyx_v_y;
+        __pyx_t_18 = __pyx_v_z;
+        __pyx_t_19 = (((*__Pyx_BufPtrFull3d(unsigned int *, __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.buf, __pyx_t_16, __pyx_pybuffernd_flag_field.diminfo[0].strides, __pyx_pybuffernd_flag_field.diminfo[0].suboffsets, __pyx_t_17, __pyx_pybuffernd_flag_field.diminfo[1].strides, __pyx_pybuffernd_flag_field.diminfo[1].suboffsets, __pyx_t_18, __pyx_pybuffernd_flag_field.diminfo[2].strides, __pyx_pybuffernd_flag_field.diminfo[2].suboffsets)) & __pyx_v_fluid_mask) != 0);
+        if (__pyx_t_19) {
+
+          /* "pystencils/boundaries/createindexlistcython.pyx":58
+ *             for x in range(nr_of_ghost_layers, xs - nr_of_ghost_layers):
+ *                 if flag_field[x, y, z] & fluid_mask:
+ *                     for dirIdx in range(num_directions):             # <<<<<<<<<<<<<<
+ *                         dx = stencil[dirIdx,0]
+ *                         dy = stencil[dirIdx,1]
+ */
+          __pyx_t_20 = __pyx_v_num_directions;
+          __pyx_t_21 = __pyx_t_20;
+          for (__pyx_t_22 = 0; __pyx_t_22 < __pyx_t_21; __pyx_t_22+=1) {
+            __pyx_v_dirIdx = __pyx_t_22;
+
+            /* "pystencils/boundaries/createindexlistcython.pyx":59
+ *                 if flag_field[x, y, z] & fluid_mask:
+ *                     for dirIdx in range(num_directions):
+ *                         dx = stencil[dirIdx,0]             # <<<<<<<<<<<<<<
+ *                         dy = stencil[dirIdx,1]
+ *                         dz = stencil[dirIdx,2]
+ */
+            __pyx_t_23 = __pyx_v_dirIdx;
+            __pyx_t_24 = 0;
+            __pyx_v_dx = (*__Pyx_BufPtrFull2d(int *, __pyx_pybuffernd_stencil.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_stencil.diminfo[0].strides, __pyx_pybuffernd_stencil.diminfo[0].suboffsets, __pyx_t_24, __pyx_pybuffernd_stencil.diminfo[1].strides, __pyx_pybuffernd_stencil.diminfo[1].suboffsets));
+
+            /* "pystencils/boundaries/createindexlistcython.pyx":60
+ *                     for dirIdx in range(num_directions):
+ *                         dx = stencil[dirIdx,0]
+ *                         dy = stencil[dirIdx,1]             # <<<<<<<<<<<<<<
+ *                         dz = stencil[dirIdx,2]
+ *                         if flag_field[x + dx, y + dy, z + dz] & boundary_mask:
+ */
+            __pyx_t_25 = __pyx_v_dirIdx;
+            __pyx_t_26 = 1;
+            __pyx_v_dy = (*__Pyx_BufPtrFull2d(int *, __pyx_pybuffernd_stencil.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_stencil.diminfo[0].strides, __pyx_pybuffernd_stencil.diminfo[0].suboffsets, __pyx_t_26, __pyx_pybuffernd_stencil.diminfo[1].strides, __pyx_pybuffernd_stencil.diminfo[1].suboffsets));
+
+            /* "pystencils/boundaries/createindexlistcython.pyx":61
+ *                         dx = stencil[dirIdx,0]
+ *                         dy = stencil[dirIdx,1]
+ *                         dz = stencil[dirIdx,2]             # <<<<<<<<<<<<<<
+ *                         if flag_field[x + dx, y + dy, z + dz] & boundary_mask:
+ *                             boundary_index_list.append((x,y,z, dirIdx))
+ */
+            __pyx_t_27 = __pyx_v_dirIdx;
+            __pyx_t_28 = 2;
+            __pyx_v_dz = (*__Pyx_BufPtrFull2d(int *, __pyx_pybuffernd_stencil.rcbuffer->pybuffer.buf, __pyx_t_27, __pyx_pybuffernd_stencil.diminfo[0].strides, __pyx_pybuffernd_stencil.diminfo[0].suboffsets, __pyx_t_28, __pyx_pybuffernd_stencil.diminfo[1].strides, __pyx_pybuffernd_stencil.diminfo[1].suboffsets));
+
+            /* "pystencils/boundaries/createindexlistcython.pyx":62
+ *                         dy = stencil[dirIdx,1]
+ *                         dz = stencil[dirIdx,2]
+ *                         if flag_field[x + dx, y + dy, z + dz] & boundary_mask:             # <<<<<<<<<<<<<<
+ *                             boundary_index_list.append((x,y,z, dirIdx))
+ *                             if single_link:
+ */
+            __pyx_t_29 = (__pyx_v_x + __pyx_v_dx);
+            __pyx_t_30 = (__pyx_v_y + __pyx_v_dy);
+            __pyx_t_31 = (__pyx_v_z + __pyx_v_dz);
+            __pyx_t_19 = (((*__Pyx_BufPtrFull3d(unsigned int *, __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.buf, __pyx_t_29, __pyx_pybuffernd_flag_field.diminfo[0].strides, __pyx_pybuffernd_flag_field.diminfo[0].suboffsets, __pyx_t_30, __pyx_pybuffernd_flag_field.diminfo[1].strides, __pyx_pybuffernd_flag_field.diminfo[1].suboffsets, __pyx_t_31, __pyx_pybuffernd_flag_field.diminfo[2].strides, __pyx_pybuffernd_flag_field.diminfo[2].suboffsets)) & __pyx_v_boundary_mask) != 0);
+            if (__pyx_t_19) {
+
+              /* "pystencils/boundaries/createindexlistcython.pyx":63
+ *                         dz = stencil[dirIdx,2]
+ *                         if flag_field[x + dx, y + dy, z + dz] & boundary_mask:
+ *                             boundary_index_list.append((x,y,z, dirIdx))             # <<<<<<<<<<<<<<
+ *                             if single_link:
+ *                                 break
+ */
+              __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_x); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 63, __pyx_L1_error)
+              __Pyx_GOTREF(__pyx_t_4);
+              __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_y); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 63, __pyx_L1_error)
+              __Pyx_GOTREF(__pyx_t_1);
+              __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_z); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 63, __pyx_L1_error)
+              __Pyx_GOTREF(__pyx_t_3);
+              __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_dirIdx); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 63, __pyx_L1_error)
+              __Pyx_GOTREF(__pyx_t_2);
+              __pyx_t_5 = PyTuple_New(4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 63, __pyx_L1_error)
+              __Pyx_GOTREF(__pyx_t_5);
+              __Pyx_GIVEREF(__pyx_t_4);
+              PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4);
+              __Pyx_GIVEREF(__pyx_t_1);
+              PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_1);
+              __Pyx_GIVEREF(__pyx_t_3);
+              PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_t_3);
+              __Pyx_GIVEREF(__pyx_t_2);
+              PyTuple_SET_ITEM(__pyx_t_5, 3, __pyx_t_2);
+              __pyx_t_4 = 0;
+              __pyx_t_1 = 0;
+              __pyx_t_3 = 0;
+              __pyx_t_2 = 0;
+              __pyx_t_32 = __Pyx_PyList_Append(__pyx_v_boundary_index_list, __pyx_t_5); if (unlikely(__pyx_t_32 == ((int)-1))) __PYX_ERR(0, 63, __pyx_L1_error)
+              __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+              /* "pystencils/boundaries/createindexlistcython.pyx":64
+ *                         if flag_field[x + dx, y + dy, z + dz] & boundary_mask:
+ *                             boundary_index_list.append((x,y,z, dirIdx))
+ *                             if single_link:             # <<<<<<<<<<<<<<
+ *                                 break
+ *     return boundary_index_list
+ */
+              __pyx_t_19 = (__pyx_v_single_link != 0);
+              if (__pyx_t_19) {
+
+                /* "pystencils/boundaries/createindexlistcython.pyx":65
+ *                             boundary_index_list.append((x,y,z, dirIdx))
+ *                             if single_link:
+ *                                 break             # <<<<<<<<<<<<<<
+ *     return boundary_index_list
+ * 
+ */
+                goto __pyx_L13_break;
+
+                /* "pystencils/boundaries/createindexlistcython.pyx":64
+ *                         if flag_field[x + dx, y + dy, z + dz] & boundary_mask:
+ *                             boundary_index_list.append((x,y,z, dirIdx))
+ *                             if single_link:             # <<<<<<<<<<<<<<
+ *                                 break
+ *     return boundary_index_list
+ */
+              }
+
+              /* "pystencils/boundaries/createindexlistcython.pyx":62
+ *                         dy = stencil[dirIdx,1]
+ *                         dz = stencil[dirIdx,2]
+ *                         if flag_field[x + dx, y + dy, z + dz] & boundary_mask:             # <<<<<<<<<<<<<<
+ *                             boundary_index_list.append((x,y,z, dirIdx))
+ *                             if single_link:
+ */
+            }
+          }
+          __pyx_L13_break:;
+
+          /* "pystencils/boundaries/createindexlistcython.pyx":57
+ *         for y in range(nr_of_ghost_layers, ys - nr_of_ghost_layers):
+ *             for x in range(nr_of_ghost_layers, xs - nr_of_ghost_layers):
+ *                 if flag_field[x, y, z] & fluid_mask:             # <<<<<<<<<<<<<<
+ *                     for dirIdx in range(num_directions):
+ *                         dx = stencil[dirIdx,0]
+ */
+        }
+      }
+    }
+  }
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":66
+ *                             if single_link:
+ *                                 break
+ *     return boundary_index_list             # <<<<<<<<<<<<<<
+ * 
+ * 
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(__pyx_v_boundary_index_list);
+  __pyx_r = __pyx_v_boundary_index_list;
+  goto __pyx_L0;
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":44
+ * @cython.boundscheck(False) # turn off bounds-checking for entire function
+ * @cython.wraparound(False)  # turn off negative index wrapping for entire function
+ * def create_boundary_neighbor_index_list_3d(object[IntegerType, ndim=3] flag_field,             # <<<<<<<<<<<<<<
+ *                                            int nr_of_ghost_layers, IntegerType boundary_mask, IntegerType fluid_mask,
+ *                                            object[int, ndim=2] stencil, int single_link):
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_XDECREF(__pyx_t_5);
+  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
+    __Pyx_PyThreadState_declare
+    __Pyx_PyThreadState_assign
+    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
+    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_flag_field.rcbuffer->pybuffer);
+    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_stencil.rcbuffer->pybuffer);
+  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
+  __Pyx_AddTraceback("pystencils.boundaries.createindexlistcython.create_boundary_neighbor_index_list_3d", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  goto __pyx_L2;
+  __pyx_L0:;
+  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_flag_field.rcbuffer->pybuffer);
+  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_stencil.rcbuffer->pybuffer);
+  __pyx_L2:;
+  __Pyx_XDECREF(__pyx_v_boundary_index_list);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static PyObject *__pyx_fuse_6__pyx_pw_10pystencils_10boundaries_21createindexlistcython_37create_boundary_neighbor_index_list_3d(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyMethodDef __pyx_fuse_6__pyx_mdef_10pystencils_10boundaries_21createindexlistcython_37create_boundary_neighbor_index_list_3d = {"__pyx_fuse_6create_boundary_neighbor_index_list_3d", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_fuse_6__pyx_pw_10pystencils_10boundaries_21createindexlistcython_37create_boundary_neighbor_index_list_3d, METH_VARARGS|METH_KEYWORDS, 0};
+static PyObject *__pyx_fuse_6__pyx_pw_10pystencils_10boundaries_21createindexlistcython_37create_boundary_neighbor_index_list_3d(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_flag_field = 0;
+  int __pyx_v_nr_of_ghost_layers;
+  unsigned long __pyx_v_boundary_mask;
+  unsigned long __pyx_v_fluid_mask;
+  PyObject *__pyx_v_stencil = 0;
+  int __pyx_v_single_link;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("create_boundary_neighbor_index_list_3d (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_flag_field,&__pyx_n_s_nr_of_ghost_layers,&__pyx_n_s_boundary_mask,&__pyx_n_s_fluid_mask,&__pyx_n_s_stencil,&__pyx_n_s_single_link,0};
+    PyObject* values[6] = {0,0,0,0,0,0};
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
+        CYTHON_FALLTHROUGH;
+        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+        CYTHON_FALLTHROUGH;
+        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
+        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_flag_field)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
+        case  1:
+        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_nr_of_ghost_layers)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_neighbor_index_list_3d", 1, 6, 6, 1); __PYX_ERR(0, 44, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  2:
+        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_boundary_mask)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_neighbor_index_list_3d", 1, 6, 6, 2); __PYX_ERR(0, 44, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  3:
+        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_fluid_mask)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_neighbor_index_list_3d", 1, 6, 6, 3); __PYX_ERR(0, 44, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  4:
+        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_stencil)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_neighbor_index_list_3d", 1, 6, 6, 4); __PYX_ERR(0, 44, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  5:
+        if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_single_link)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_neighbor_index_list_3d", 1, 6, 6, 5); __PYX_ERR(0, 44, __pyx_L3_error)
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "create_boundary_neighbor_index_list_3d") < 0)) __PYX_ERR(0, 44, __pyx_L3_error)
+      }
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 6) {
+      goto __pyx_L5_argtuple_error;
+    } else {
+      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+      values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+      values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+      values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
+    }
+    __pyx_v_flag_field = ((PyObject *)values[0]);
+    __pyx_v_nr_of_ghost_layers = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_nr_of_ghost_layers == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 45, __pyx_L3_error)
+    __pyx_v_boundary_mask = __Pyx_PyInt_As_unsigned_long(values[2]); if (unlikely((__pyx_v_boundary_mask == (unsigned long)-1) && PyErr_Occurred())) __PYX_ERR(0, 45, __pyx_L3_error)
+    __pyx_v_fluid_mask = __Pyx_PyInt_As_unsigned_long(values[3]); if (unlikely((__pyx_v_fluid_mask == (unsigned long)-1) && PyErr_Occurred())) __PYX_ERR(0, 45, __pyx_L3_error)
+    __pyx_v_stencil = ((PyObject *)values[4]);
+    __pyx_v_single_link = __Pyx_PyInt_As_int(values[5]); if (unlikely((__pyx_v_single_link == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 46, __pyx_L3_error)
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("create_boundary_neighbor_index_list_3d", 1, 6, 6, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 44, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("pystencils.boundaries.createindexlistcython.create_boundary_neighbor_index_list_3d", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_10pystencils_10boundaries_21createindexlistcython_36create_boundary_neighbor_index_list_3d(__pyx_self, __pyx_v_flag_field, __pyx_v_nr_of_ghost_layers, __pyx_v_boundary_mask, __pyx_v_fluid_mask, __pyx_v_stencil, __pyx_v_single_link);
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_10pystencils_10boundaries_21createindexlistcython_36create_boundary_neighbor_index_list_3d(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_flag_field, int __pyx_v_nr_of_ghost_layers, unsigned long __pyx_v_boundary_mask, unsigned long __pyx_v_fluid_mask, PyObject *__pyx_v_stencil, int __pyx_v_single_link) {
+  int __pyx_v_xs;
+  int __pyx_v_ys;
+  int __pyx_v_zs;
+  int __pyx_v_x;
+  int __pyx_v_y;
+  int __pyx_v_z;
+  int __pyx_v_dirIdx;
+  int __pyx_v_num_directions;
+  int __pyx_v_dx;
+  int __pyx_v_dy;
+  int __pyx_v_dz;
+  PyObject *__pyx_v_boundary_index_list = NULL;
+  __Pyx_LocalBuf_ND __pyx_pybuffernd_flag_field;
+  __Pyx_Buffer __pyx_pybuffer_flag_field;
+  __Pyx_LocalBuf_ND __pyx_pybuffernd_stencil;
+  __Pyx_Buffer __pyx_pybuffer_stencil;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
+  PyObject *__pyx_t_5 = NULL;
+  PyObject *(*__pyx_t_6)(PyObject *);
+  int __pyx_t_7;
+  int __pyx_t_8;
+  int __pyx_t_9;
+  int __pyx_t_10;
+  int __pyx_t_11;
+  int __pyx_t_12;
+  int __pyx_t_13;
+  int __pyx_t_14;
+  int __pyx_t_15;
+  Py_ssize_t __pyx_t_16;
+  Py_ssize_t __pyx_t_17;
+  Py_ssize_t __pyx_t_18;
+  int __pyx_t_19;
+  int __pyx_t_20;
+  int __pyx_t_21;
+  int __pyx_t_22;
+  Py_ssize_t __pyx_t_23;
+  Py_ssize_t __pyx_t_24;
+  Py_ssize_t __pyx_t_25;
+  Py_ssize_t __pyx_t_26;
+  Py_ssize_t __pyx_t_27;
+  Py_ssize_t __pyx_t_28;
+  Py_ssize_t __pyx_t_29;
+  Py_ssize_t __pyx_t_30;
+  Py_ssize_t __pyx_t_31;
+  int __pyx_t_32;
+  __Pyx_RefNannySetupContext("__pyx_fuse_6create_boundary_neighbor_index_list_3d", 0);
+  __pyx_pybuffer_flag_field.pybuffer.buf = NULL;
+  __pyx_pybuffer_flag_field.refcount = 0;
+  __pyx_pybuffernd_flag_field.data = NULL;
+  __pyx_pybuffernd_flag_field.rcbuffer = &__pyx_pybuffer_flag_field;
+  __pyx_pybuffer_stencil.pybuffer.buf = NULL;
+  __pyx_pybuffer_stencil.refcount = 0;
+  __pyx_pybuffernd_stencil.data = NULL;
+  __pyx_pybuffernd_stencil.rcbuffer = &__pyx_pybuffer_stencil;
+  {
+    __Pyx_BufFmt_StackElem __pyx_stack[1];
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_flag_field.rcbuffer->pybuffer, (PyObject*)__pyx_v_flag_field, &__Pyx_TypeInfo_unsigned_long, PyBUF_FORMAT| PyBUF_INDIRECT, 3, 0, __pyx_stack) == -1)) __PYX_ERR(0, 44, __pyx_L1_error)
+  }
+  __pyx_pybuffernd_flag_field.diminfo[0].strides = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_flag_field.diminfo[0].shape = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_flag_field.diminfo[0].suboffsets = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.suboffsets[0]; __pyx_pybuffernd_flag_field.diminfo[1].strides = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_flag_field.diminfo[1].shape = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_flag_field.diminfo[1].suboffsets = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.suboffsets[1]; __pyx_pybuffernd_flag_field.diminfo[2].strides = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_flag_field.diminfo[2].shape = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.shape[2]; __pyx_pybuffernd_flag_field.diminfo[2].suboffsets = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.suboffsets[2];
+  {
+    __Pyx_BufFmt_StackElem __pyx_stack[1];
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_stencil.rcbuffer->pybuffer, (PyObject*)__pyx_v_stencil, &__Pyx_TypeInfo_int, PyBUF_FORMAT| PyBUF_INDIRECT, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 44, __pyx_L1_error)
+  }
+  __pyx_pybuffernd_stencil.diminfo[0].strides = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_stencil.diminfo[0].shape = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_stencil.diminfo[0].suboffsets = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.suboffsets[0]; __pyx_pybuffernd_stencil.diminfo[1].strides = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_stencil.diminfo[1].shape = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_stencil.diminfo[1].suboffsets = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.suboffsets[1];
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":50
+ *     cdef int dirIdx, num_directions, dx, dy, dz
+ * 
+ *     xs, ys, zs = flag_field.shape             # <<<<<<<<<<<<<<
+ *     boundary_index_list = []
+ *     num_directions = stencil.shape[0]
+ */
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_flag_field), __pyx_n_s_shape); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 50, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) {
+    PyObject* sequence = __pyx_t_1;
+    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
+    if (unlikely(size != 3)) {
+      if (size > 3) __Pyx_RaiseTooManyValuesError(3);
+      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
+      __PYX_ERR(0, 50, __pyx_L1_error)
+    }
+    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+    if (likely(PyTuple_CheckExact(sequence))) {
+      __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
+      __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); 
+      __pyx_t_4 = PyTuple_GET_ITEM(sequence, 2); 
+    } else {
+      __pyx_t_2 = PyList_GET_ITEM(sequence, 0); 
+      __pyx_t_3 = PyList_GET_ITEM(sequence, 1); 
+      __pyx_t_4 = PyList_GET_ITEM(sequence, 2); 
+    }
+    __Pyx_INCREF(__pyx_t_2);
+    __Pyx_INCREF(__pyx_t_3);
+    __Pyx_INCREF(__pyx_t_4);
+    #else
+    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 50, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_2);
+    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 50, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    __pyx_t_4 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 50, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
+    #endif
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  } else {
+    Py_ssize_t index = -1;
+    __pyx_t_5 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 50, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_5);
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __pyx_t_6 = Py_TYPE(__pyx_t_5)->tp_iternext;
+    index = 0; __pyx_t_2 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_2)) goto __pyx_L3_unpacking_failed;
+    __Pyx_GOTREF(__pyx_t_2);
+    index = 1; __pyx_t_3 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_3)) goto __pyx_L3_unpacking_failed;
+    __Pyx_GOTREF(__pyx_t_3);
+    index = 2; __pyx_t_4 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_4)) goto __pyx_L3_unpacking_failed;
+    __Pyx_GOTREF(__pyx_t_4);
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_5), 3) < 0) __PYX_ERR(0, 50, __pyx_L1_error)
+    __pyx_t_6 = NULL;
+    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+    goto __pyx_L4_unpacking_done;
+    __pyx_L3_unpacking_failed:;
+    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+    __pyx_t_6 = NULL;
+    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
+    __PYX_ERR(0, 50, __pyx_L1_error)
+    __pyx_L4_unpacking_done:;
+  }
+  __pyx_t_7 = __Pyx_PyInt_As_int(__pyx_t_2); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 50, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_8 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_8 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 50, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __pyx_t_9 = __Pyx_PyInt_As_int(__pyx_t_4); if (unlikely((__pyx_t_9 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 50, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __pyx_v_xs = __pyx_t_7;
+  __pyx_v_ys = __pyx_t_8;
+  __pyx_v_zs = __pyx_t_9;
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":51
+ * 
+ *     xs, ys, zs = flag_field.shape
+ *     boundary_index_list = []             # <<<<<<<<<<<<<<
+ *     num_directions = stencil.shape[0]
+ * 
+ */
+  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 51, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_boundary_index_list = ((PyObject*)__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":52
+ *     xs, ys, zs = flag_field.shape
+ *     boundary_index_list = []
+ *     num_directions = stencil.shape[0]             # <<<<<<<<<<<<<<
+ * 
+ *     for z in range(nr_of_ghost_layers, zs - nr_of_ghost_layers):
+ */
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_stencil), __pyx_n_s_shape); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 52, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_4 = __Pyx_GetItemInt(__pyx_t_1, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 52, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_9 = __Pyx_PyInt_As_int(__pyx_t_4); if (unlikely((__pyx_t_9 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 52, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __pyx_v_num_directions = __pyx_t_9;
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":54
+ *     num_directions = stencil.shape[0]
+ * 
+ *     for z in range(nr_of_ghost_layers, zs - nr_of_ghost_layers):             # <<<<<<<<<<<<<<
+ *         for y in range(nr_of_ghost_layers, ys - nr_of_ghost_layers):
+ *             for x in range(nr_of_ghost_layers, xs - nr_of_ghost_layers):
+ */
+  __pyx_t_9 = (__pyx_v_zs - __pyx_v_nr_of_ghost_layers);
+  __pyx_t_8 = __pyx_t_9;
+  for (__pyx_t_7 = __pyx_v_nr_of_ghost_layers; __pyx_t_7 < __pyx_t_8; __pyx_t_7+=1) {
+    __pyx_v_z = __pyx_t_7;
+
+    /* "pystencils/boundaries/createindexlistcython.pyx":55
+ * 
+ *     for z in range(nr_of_ghost_layers, zs - nr_of_ghost_layers):
+ *         for y in range(nr_of_ghost_layers, ys - nr_of_ghost_layers):             # <<<<<<<<<<<<<<
+ *             for x in range(nr_of_ghost_layers, xs - nr_of_ghost_layers):
+ *                 if flag_field[x, y, z] & fluid_mask:
+ */
+    __pyx_t_10 = (__pyx_v_ys - __pyx_v_nr_of_ghost_layers);
+    __pyx_t_11 = __pyx_t_10;
+    for (__pyx_t_12 = __pyx_v_nr_of_ghost_layers; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) {
+      __pyx_v_y = __pyx_t_12;
+
+      /* "pystencils/boundaries/createindexlistcython.pyx":56
+ *     for z in range(nr_of_ghost_layers, zs - nr_of_ghost_layers):
+ *         for y in range(nr_of_ghost_layers, ys - nr_of_ghost_layers):
+ *             for x in range(nr_of_ghost_layers, xs - nr_of_ghost_layers):             # <<<<<<<<<<<<<<
+ *                 if flag_field[x, y, z] & fluid_mask:
+ *                     for dirIdx in range(num_directions):
+ */
+      __pyx_t_13 = (__pyx_v_xs - __pyx_v_nr_of_ghost_layers);
+      __pyx_t_14 = __pyx_t_13;
+      for (__pyx_t_15 = __pyx_v_nr_of_ghost_layers; __pyx_t_15 < __pyx_t_14; __pyx_t_15+=1) {
+        __pyx_v_x = __pyx_t_15;
+
+        /* "pystencils/boundaries/createindexlistcython.pyx":57
+ *         for y in range(nr_of_ghost_layers, ys - nr_of_ghost_layers):
+ *             for x in range(nr_of_ghost_layers, xs - nr_of_ghost_layers):
+ *                 if flag_field[x, y, z] & fluid_mask:             # <<<<<<<<<<<<<<
+ *                     for dirIdx in range(num_directions):
+ *                         dx = stencil[dirIdx,0]
+ */
+        __pyx_t_16 = __pyx_v_x;
+        __pyx_t_17 = __pyx_v_y;
+        __pyx_t_18 = __pyx_v_z;
+        __pyx_t_19 = (((*__Pyx_BufPtrFull3d(unsigned long *, __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.buf, __pyx_t_16, __pyx_pybuffernd_flag_field.diminfo[0].strides, __pyx_pybuffernd_flag_field.diminfo[0].suboffsets, __pyx_t_17, __pyx_pybuffernd_flag_field.diminfo[1].strides, __pyx_pybuffernd_flag_field.diminfo[1].suboffsets, __pyx_t_18, __pyx_pybuffernd_flag_field.diminfo[2].strides, __pyx_pybuffernd_flag_field.diminfo[2].suboffsets)) & __pyx_v_fluid_mask) != 0);
+        if (__pyx_t_19) {
+
+          /* "pystencils/boundaries/createindexlistcython.pyx":58
+ *             for x in range(nr_of_ghost_layers, xs - nr_of_ghost_layers):
+ *                 if flag_field[x, y, z] & fluid_mask:
+ *                     for dirIdx in range(num_directions):             # <<<<<<<<<<<<<<
+ *                         dx = stencil[dirIdx,0]
+ *                         dy = stencil[dirIdx,1]
+ */
+          __pyx_t_20 = __pyx_v_num_directions;
+          __pyx_t_21 = __pyx_t_20;
+          for (__pyx_t_22 = 0; __pyx_t_22 < __pyx_t_21; __pyx_t_22+=1) {
+            __pyx_v_dirIdx = __pyx_t_22;
+
+            /* "pystencils/boundaries/createindexlistcython.pyx":59
+ *                 if flag_field[x, y, z] & fluid_mask:
+ *                     for dirIdx in range(num_directions):
+ *                         dx = stencil[dirIdx,0]             # <<<<<<<<<<<<<<
+ *                         dy = stencil[dirIdx,1]
+ *                         dz = stencil[dirIdx,2]
+ */
+            __pyx_t_23 = __pyx_v_dirIdx;
+            __pyx_t_24 = 0;
+            __pyx_v_dx = (*__Pyx_BufPtrFull2d(int *, __pyx_pybuffernd_stencil.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_stencil.diminfo[0].strides, __pyx_pybuffernd_stencil.diminfo[0].suboffsets, __pyx_t_24, __pyx_pybuffernd_stencil.diminfo[1].strides, __pyx_pybuffernd_stencil.diminfo[1].suboffsets));
+
+            /* "pystencils/boundaries/createindexlistcython.pyx":60
+ *                     for dirIdx in range(num_directions):
+ *                         dx = stencil[dirIdx,0]
+ *                         dy = stencil[dirIdx,1]             # <<<<<<<<<<<<<<
+ *                         dz = stencil[dirIdx,2]
+ *                         if flag_field[x + dx, y + dy, z + dz] & boundary_mask:
+ */
+            __pyx_t_25 = __pyx_v_dirIdx;
+            __pyx_t_26 = 1;
+            __pyx_v_dy = (*__Pyx_BufPtrFull2d(int *, __pyx_pybuffernd_stencil.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_stencil.diminfo[0].strides, __pyx_pybuffernd_stencil.diminfo[0].suboffsets, __pyx_t_26, __pyx_pybuffernd_stencil.diminfo[1].strides, __pyx_pybuffernd_stencil.diminfo[1].suboffsets));
+
+            /* "pystencils/boundaries/createindexlistcython.pyx":61
+ *                         dx = stencil[dirIdx,0]
+ *                         dy = stencil[dirIdx,1]
+ *                         dz = stencil[dirIdx,2]             # <<<<<<<<<<<<<<
+ *                         if flag_field[x + dx, y + dy, z + dz] & boundary_mask:
+ *                             boundary_index_list.append((x,y,z, dirIdx))
+ */
+            __pyx_t_27 = __pyx_v_dirIdx;
+            __pyx_t_28 = 2;
+            __pyx_v_dz = (*__Pyx_BufPtrFull2d(int *, __pyx_pybuffernd_stencil.rcbuffer->pybuffer.buf, __pyx_t_27, __pyx_pybuffernd_stencil.diminfo[0].strides, __pyx_pybuffernd_stencil.diminfo[0].suboffsets, __pyx_t_28, __pyx_pybuffernd_stencil.diminfo[1].strides, __pyx_pybuffernd_stencil.diminfo[1].suboffsets));
+
+            /* "pystencils/boundaries/createindexlistcython.pyx":62
+ *                         dy = stencil[dirIdx,1]
+ *                         dz = stencil[dirIdx,2]
+ *                         if flag_field[x + dx, y + dy, z + dz] & boundary_mask:             # <<<<<<<<<<<<<<
+ *                             boundary_index_list.append((x,y,z, dirIdx))
+ *                             if single_link:
+ */
+            __pyx_t_29 = (__pyx_v_x + __pyx_v_dx);
+            __pyx_t_30 = (__pyx_v_y + __pyx_v_dy);
+            __pyx_t_31 = (__pyx_v_z + __pyx_v_dz);
+            __pyx_t_19 = (((*__Pyx_BufPtrFull3d(unsigned long *, __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.buf, __pyx_t_29, __pyx_pybuffernd_flag_field.diminfo[0].strides, __pyx_pybuffernd_flag_field.diminfo[0].suboffsets, __pyx_t_30, __pyx_pybuffernd_flag_field.diminfo[1].strides, __pyx_pybuffernd_flag_field.diminfo[1].suboffsets, __pyx_t_31, __pyx_pybuffernd_flag_field.diminfo[2].strides, __pyx_pybuffernd_flag_field.diminfo[2].suboffsets)) & __pyx_v_boundary_mask) != 0);
+            if (__pyx_t_19) {
+
+              /* "pystencils/boundaries/createindexlistcython.pyx":63
+ *                         dz = stencil[dirIdx,2]
+ *                         if flag_field[x + dx, y + dy, z + dz] & boundary_mask:
+ *                             boundary_index_list.append((x,y,z, dirIdx))             # <<<<<<<<<<<<<<
+ *                             if single_link:
+ *                                 break
+ */
+              __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_x); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 63, __pyx_L1_error)
+              __Pyx_GOTREF(__pyx_t_4);
+              __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_y); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 63, __pyx_L1_error)
+              __Pyx_GOTREF(__pyx_t_1);
+              __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_z); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 63, __pyx_L1_error)
+              __Pyx_GOTREF(__pyx_t_3);
+              __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_dirIdx); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 63, __pyx_L1_error)
+              __Pyx_GOTREF(__pyx_t_2);
+              __pyx_t_5 = PyTuple_New(4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 63, __pyx_L1_error)
+              __Pyx_GOTREF(__pyx_t_5);
+              __Pyx_GIVEREF(__pyx_t_4);
+              PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4);
+              __Pyx_GIVEREF(__pyx_t_1);
+              PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_1);
+              __Pyx_GIVEREF(__pyx_t_3);
+              PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_t_3);
+              __Pyx_GIVEREF(__pyx_t_2);
+              PyTuple_SET_ITEM(__pyx_t_5, 3, __pyx_t_2);
+              __pyx_t_4 = 0;
+              __pyx_t_1 = 0;
+              __pyx_t_3 = 0;
+              __pyx_t_2 = 0;
+              __pyx_t_32 = __Pyx_PyList_Append(__pyx_v_boundary_index_list, __pyx_t_5); if (unlikely(__pyx_t_32 == ((int)-1))) __PYX_ERR(0, 63, __pyx_L1_error)
+              __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+              /* "pystencils/boundaries/createindexlistcython.pyx":64
+ *                         if flag_field[x + dx, y + dy, z + dz] & boundary_mask:
+ *                             boundary_index_list.append((x,y,z, dirIdx))
+ *                             if single_link:             # <<<<<<<<<<<<<<
+ *                                 break
+ *     return boundary_index_list
+ */
+              __pyx_t_19 = (__pyx_v_single_link != 0);
+              if (__pyx_t_19) {
+
+                /* "pystencils/boundaries/createindexlistcython.pyx":65
+ *                             boundary_index_list.append((x,y,z, dirIdx))
+ *                             if single_link:
+ *                                 break             # <<<<<<<<<<<<<<
+ *     return boundary_index_list
+ * 
+ */
+                goto __pyx_L13_break;
+
+                /* "pystencils/boundaries/createindexlistcython.pyx":64
+ *                         if flag_field[x + dx, y + dy, z + dz] & boundary_mask:
+ *                             boundary_index_list.append((x,y,z, dirIdx))
+ *                             if single_link:             # <<<<<<<<<<<<<<
+ *                                 break
+ *     return boundary_index_list
+ */
+              }
+
+              /* "pystencils/boundaries/createindexlistcython.pyx":62
+ *                         dy = stencil[dirIdx,1]
+ *                         dz = stencil[dirIdx,2]
+ *                         if flag_field[x + dx, y + dy, z + dz] & boundary_mask:             # <<<<<<<<<<<<<<
+ *                             boundary_index_list.append((x,y,z, dirIdx))
+ *                             if single_link:
+ */
+            }
+          }
+          __pyx_L13_break:;
+
+          /* "pystencils/boundaries/createindexlistcython.pyx":57
+ *         for y in range(nr_of_ghost_layers, ys - nr_of_ghost_layers):
+ *             for x in range(nr_of_ghost_layers, xs - nr_of_ghost_layers):
+ *                 if flag_field[x, y, z] & fluid_mask:             # <<<<<<<<<<<<<<
+ *                     for dirIdx in range(num_directions):
+ *                         dx = stencil[dirIdx,0]
+ */
+        }
+      }
+    }
+  }
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":66
+ *                             if single_link:
+ *                                 break
+ *     return boundary_index_list             # <<<<<<<<<<<<<<
+ * 
+ * 
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(__pyx_v_boundary_index_list);
+  __pyx_r = __pyx_v_boundary_index_list;
+  goto __pyx_L0;
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":44
+ * @cython.boundscheck(False) # turn off bounds-checking for entire function
+ * @cython.wraparound(False)  # turn off negative index wrapping for entire function
+ * def create_boundary_neighbor_index_list_3d(object[IntegerType, ndim=3] flag_field,             # <<<<<<<<<<<<<<
+ *                                            int nr_of_ghost_layers, IntegerType boundary_mask, IntegerType fluid_mask,
+ *                                            object[int, ndim=2] stencil, int single_link):
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_XDECREF(__pyx_t_5);
+  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
+    __Pyx_PyThreadState_declare
+    __Pyx_PyThreadState_assign
+    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
+    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_flag_field.rcbuffer->pybuffer);
+    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_stencil.rcbuffer->pybuffer);
+  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
+  __Pyx_AddTraceback("pystencils.boundaries.createindexlistcython.create_boundary_neighbor_index_list_3d", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  goto __pyx_L2;
+  __pyx_L0:;
+  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_flag_field.rcbuffer->pybuffer);
+  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_stencil.rcbuffer->pybuffer);
+  __pyx_L2:;
+  __Pyx_XDECREF(__pyx_v_boundary_index_list);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "pystencils/boundaries/createindexlistcython.pyx":72
+ * @cython.boundscheck(False) # turn off bounds-checking for entire function
+ * @cython.wraparound(False)  # turn off negative index wrapping for entire function
+ * def create_boundary_cell_index_list_2d(object[IntegerType, ndim=2] flag_field,             # <<<<<<<<<<<<<<
+ *                                        IntegerType boundary_mask, IntegerType fluid_mask,
+ *                                        object[int, ndim=2] stencil, int single_link):
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_10pystencils_10boundaries_21createindexlistcython_5create_boundary_cell_index_list_2d(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyMethodDef __pyx_mdef_10pystencils_10boundaries_21createindexlistcython_5create_boundary_cell_index_list_2d = {"create_boundary_cell_index_list_2d", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_10pystencils_10boundaries_21createindexlistcython_5create_boundary_cell_index_list_2d, METH_VARARGS|METH_KEYWORDS, 0};
+static PyObject *__pyx_pw_10pystencils_10boundaries_21createindexlistcython_5create_boundary_cell_index_list_2d(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_signatures = 0;
+  PyObject *__pyx_v_args = 0;
+  PyObject *__pyx_v_kwargs = 0;
+  CYTHON_UNUSED PyObject *__pyx_v_defaults = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__pyx_fused_cpdef (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_signatures,&__pyx_n_s_args,&__pyx_n_s_kwargs,&__pyx_n_s_defaults,0};
+    PyObject* values[4] = {0,0,0,0};
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
+        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_signatures)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
+        case  1:
+        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_args)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("__pyx_fused_cpdef", 1, 4, 4, 1); __PYX_ERR(0, 72, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  2:
+        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_kwargs)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("__pyx_fused_cpdef", 1, 4, 4, 2); __PYX_ERR(0, 72, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  3:
+        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_defaults)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("__pyx_fused_cpdef", 1, 4, 4, 3); __PYX_ERR(0, 72, __pyx_L3_error)
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__pyx_fused_cpdef") < 0)) __PYX_ERR(0, 72, __pyx_L3_error)
+      }
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 4) {
+      goto __pyx_L5_argtuple_error;
+    } else {
+      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+      values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+    }
+    __pyx_v_signatures = values[0];
+    __pyx_v_args = values[1];
+    __pyx_v_kwargs = values[2];
+    __pyx_v_defaults = values[3];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("__pyx_fused_cpdef", 1, 4, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 72, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("pystencils.boundaries.createindexlistcython.__pyx_fused_cpdef", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_10pystencils_10boundaries_21createindexlistcython_4create_boundary_cell_index_list_2d(__pyx_self, __pyx_v_signatures, __pyx_v_args, __pyx_v_kwargs, __pyx_v_defaults);
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_10pystencils_10boundaries_21createindexlistcython_4create_boundary_cell_index_list_2d(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_signatures, PyObject *__pyx_v_args, PyObject *__pyx_v_kwargs, CYTHON_UNUSED PyObject *__pyx_v_defaults) {
+  PyObject *__pyx_v_dest_sig = NULL;
+  Py_ssize_t __pyx_v_i;
+  PyTypeObject *__pyx_v_ndarray = 0;
+  __Pyx_memviewslice __pyx_v_memslice;
+  Py_ssize_t __pyx_v_itemsize;
+  int __pyx_v_dtype_signed;
+  char __pyx_v_kind;
+  int __pyx_v_short_is_signed;
+  int __pyx_v_int_is_signed;
+  int __pyx_v_long_is_signed;
+  int __pyx_v_long_long_is_signed;
+  int __pyx_v_unsigned_short_is_signed;
+  int __pyx_v_unsigned_int_is_signed;
+  int __pyx_v_unsigned_long_is_signed;
+  PyObject *__pyx_v_arg = NULL;
+  PyObject *__pyx_v_dtype = NULL;
+  PyObject *__pyx_v_arg_base = NULL;
+  PyObject *__pyx_v_candidates = NULL;
+  PyObject *__pyx_v_sig = NULL;
+  int __pyx_v_match_found;
+  PyObject *__pyx_v_src_sig = NULL;
+  PyObject *__pyx_v_dst_type = NULL;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_2;
+  int __pyx_t_3;
+  int __pyx_t_4;
+  Py_ssize_t __pyx_t_5;
+  PyObject *__pyx_t_6 = NULL;
+  long __pyx_t_7;
+  __Pyx_memviewslice __pyx_t_8;
+  Py_ssize_t __pyx_t_9;
+  int __pyx_t_10;
+  int __pyx_t_11;
+  PyObject *__pyx_t_12 = NULL;
+  PyObject *__pyx_t_13 = NULL;
+  PyObject *__pyx_t_14 = NULL;
+  Py_ssize_t __pyx_t_15;
+  Py_ssize_t __pyx_t_16;
+  Py_ssize_t __pyx_t_17;
+  int __pyx_t_18;
+  __Pyx_RefNannySetupContext("create_boundary_cell_index_list_2d", 0);
+  __Pyx_INCREF(__pyx_v_kwargs);
+  __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 72, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_INCREF(Py_None);
+  __Pyx_GIVEREF(Py_None);
+  PyList_SET_ITEM(__pyx_t_1, 0, Py_None);
+  __pyx_v_dest_sig = ((PyObject*)__pyx_t_1);
+  __pyx_t_1 = 0;
+  __pyx_t_3 = (__pyx_v_kwargs != Py_None);
+  __pyx_t_4 = (__pyx_t_3 != 0);
+  if (__pyx_t_4) {
+  } else {
+    __pyx_t_2 = __pyx_t_4;
+    goto __pyx_L4_bool_binop_done;
+  }
+  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_v_kwargs); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 72, __pyx_L1_error)
+  __pyx_t_3 = ((!__pyx_t_4) != 0);
+  __pyx_t_2 = __pyx_t_3;
+  __pyx_L4_bool_binop_done:;
+  if (__pyx_t_2) {
+    __Pyx_INCREF(Py_None);
+    __Pyx_DECREF_SET(__pyx_v_kwargs, Py_None);
+  }
+  __pyx_t_1 = ((PyObject *)__Pyx_ImportNumPyArrayTypeIfAvailable()); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 72, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_ndarray = ((PyTypeObject*)__pyx_t_1);
+  __pyx_t_1 = 0;
+  __pyx_v_itemsize = -1L;
+  __pyx_v_short_is_signed = (!((((short)-1L) > 0) != 0));
+  __pyx_v_int_is_signed = (!((((int)-1L) > 0) != 0));
+  __pyx_v_long_is_signed = (!((((long)-1L) > 0) != 0));
+  __pyx_v_long_long_is_signed = (!((((PY_LONG_LONG)-1L) > 0) != 0));
+  __pyx_v_unsigned_short_is_signed = (!((((unsigned short)-1L) > 0) != 0));
+  __pyx_v_unsigned_int_is_signed = (!((((unsigned int)-1L) > 0) != 0));
+  __pyx_v_unsigned_long_is_signed = (!((((unsigned long)-1L) > 0) != 0));
+  if (unlikely(__pyx_v_args == Py_None)) {
+    PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
+    __PYX_ERR(0, 72, __pyx_L1_error)
+  }
+  __pyx_t_5 = PyTuple_GET_SIZE(((PyObject*)__pyx_v_args)); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(0, 72, __pyx_L1_error)
+  __pyx_t_2 = ((0 < __pyx_t_5) != 0);
+  if (__pyx_t_2) {
+    if (unlikely(__pyx_v_args == Py_None)) {
+      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
+      __PYX_ERR(0, 72, __pyx_L1_error)
+    }
+    __pyx_t_1 = PyTuple_GET_ITEM(((PyObject*)__pyx_v_args), 0);
+    __Pyx_INCREF(__pyx_t_1);
+    __pyx_v_arg = __pyx_t_1;
+    __pyx_t_1 = 0;
+    goto __pyx_L6;
+  }
+  __pyx_t_3 = (__pyx_v_kwargs != Py_None);
+  __pyx_t_4 = (__pyx_t_3 != 0);
+  if (__pyx_t_4) {
+  } else {
+    __pyx_t_2 = __pyx_t_4;
+    goto __pyx_L7_bool_binop_done;
+  }
+  if (unlikely(__pyx_v_kwargs == Py_None)) {
+    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
+    __PYX_ERR(0, 72, __pyx_L1_error)
+  }
+  __pyx_t_4 = (__Pyx_PyDict_ContainsTF(__pyx_n_s_flag_field, ((PyObject*)__pyx_v_kwargs), Py_EQ)); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 72, __pyx_L1_error)
+  __pyx_t_3 = (__pyx_t_4 != 0);
+  __pyx_t_2 = __pyx_t_3;
+  __pyx_L7_bool_binop_done:;
+  if (__pyx_t_2) {
+    if (unlikely(__pyx_v_kwargs == Py_None)) {
+      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
+      __PYX_ERR(0, 72, __pyx_L1_error)
+    }
+    __pyx_t_1 = __Pyx_PyDict_GetItem(((PyObject*)__pyx_v_kwargs), __pyx_n_s_flag_field); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 72, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_1);
+    __pyx_v_arg = __pyx_t_1;
+    __pyx_t_1 = 0;
+    goto __pyx_L6;
+  }
+  /*else*/ {
+    if (unlikely(__pyx_v_args == Py_None)) {
+      PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
+      __PYX_ERR(0, 72, __pyx_L1_error)
+    }
+    __pyx_t_5 = PyTuple_GET_SIZE(((PyObject*)__pyx_v_args)); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(0, 72, __pyx_L1_error)
+    __pyx_t_1 = PyInt_FromSsize_t(__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 72, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_1);
+    __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 72, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_6);
+    __Pyx_INCREF(__pyx_int_5);
+    __Pyx_GIVEREF(__pyx_int_5);
+    PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_int_5);
+    __Pyx_INCREF(__pyx_n_s_s);
+    __Pyx_GIVEREF(__pyx_n_s_s);
+    PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_n_s_s);
+    __Pyx_GIVEREF(__pyx_t_1);
+    PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_t_1);
+    __pyx_t_1 = 0;
+    __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_Expected_at_least_d_argument_s_g, __pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 72, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_1);
+    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+    __pyx_t_6 = __Pyx_PyObject_CallOneArg(__pyx_builtin_TypeError, __pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 72, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_6);
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __Pyx_Raise(__pyx_t_6, 0, 0, 0);
+    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+    __PYX_ERR(0, 72, __pyx_L1_error)
+  }
+  __pyx_L6:;
+  while (1) {
+    __pyx_t_2 = (__pyx_v_ndarray != ((PyTypeObject*)Py_None));
+    __pyx_t_3 = (__pyx_t_2 != 0);
+    if (__pyx_t_3) {
+      __pyx_t_3 = __Pyx_TypeCheck(__pyx_v_arg, __pyx_v_ndarray); 
+      __pyx_t_2 = (__pyx_t_3 != 0);
+      if (__pyx_t_2) {
+        __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_dtype); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 72, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_6);
+        __pyx_v_dtype = __pyx_t_6;
+        __pyx_t_6 = 0;
+        goto __pyx_L12;
+      }
+      __pyx_t_2 = __pyx_memoryview_check(__pyx_v_arg); 
+      __pyx_t_3 = (__pyx_t_2 != 0);
+      if (__pyx_t_3) {
+        __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_base); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 72, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_6);
+        __pyx_v_arg_base = __pyx_t_6;
+        __pyx_t_6 = 0;
+        __pyx_t_3 = __Pyx_TypeCheck(__pyx_v_arg_base, __pyx_v_ndarray); 
+        __pyx_t_2 = (__pyx_t_3 != 0);
+        if (__pyx_t_2) {
+          __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg_base, __pyx_n_s_dtype); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 72, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_6);
+          __pyx_v_dtype = __pyx_t_6;
+          __pyx_t_6 = 0;
+          goto __pyx_L13;
+        }
+        /*else*/ {
+          __Pyx_INCREF(Py_None);
+          __pyx_v_dtype = Py_None;
+        }
+        __pyx_L13:;
+        goto __pyx_L12;
+      }
+      /*else*/ {
+        __Pyx_INCREF(Py_None);
+        __pyx_v_dtype = Py_None;
+      }
+      __pyx_L12:;
+      __pyx_v_itemsize = -1L;
+      __pyx_t_2 = (__pyx_v_dtype != Py_None);
+      __pyx_t_3 = (__pyx_t_2 != 0);
+      if (__pyx_t_3) {
+        __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_dtype, __pyx_n_s_itemsize); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 72, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_6);
+        __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_6); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 72, __pyx_L1_error)
+        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+        __pyx_v_itemsize = __pyx_t_5;
+        __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_dtype, __pyx_n_s_kind); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 72, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_6);
+        __pyx_t_7 = __Pyx_PyObject_Ord(__pyx_t_6); if (unlikely(__pyx_t_7 == ((long)(long)(Py_UCS4)-1))) __PYX_ERR(0, 72, __pyx_L1_error)
+        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+        __pyx_v_kind = __pyx_t_7;
+        __pyx_v_dtype_signed = (__pyx_v_kind == 'i');
+        switch (__pyx_v_kind) {
+          case 'i':
+          case 'u':
+          __pyx_t_2 = (((sizeof(short)) == __pyx_v_itemsize) != 0);
+          if (__pyx_t_2) {
+          } else {
+            __pyx_t_3 = __pyx_t_2;
+            goto __pyx_L16_bool_binop_done;
+          }
+          __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_ndim); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 72, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_6);
+          __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_6); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 72, __pyx_L1_error)
+          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+          __pyx_t_2 = ((((Py_ssize_t)__pyx_t_5) == 2) != 0);
+          if (__pyx_t_2) {
+          } else {
+            __pyx_t_3 = __pyx_t_2;
+            goto __pyx_L16_bool_binop_done;
+          }
+          __pyx_t_2 = ((!((__pyx_v_short_is_signed ^ __pyx_v_dtype_signed) != 0)) != 0);
+          __pyx_t_3 = __pyx_t_2;
+          __pyx_L16_bool_binop_done:;
+          if (__pyx_t_3) {
+            if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_n_s_short, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 72, __pyx_L1_error)
+            goto __pyx_L10_break;
+          }
+          __pyx_t_2 = (((sizeof(int)) == __pyx_v_itemsize) != 0);
+          if (__pyx_t_2) {
+          } else {
+            __pyx_t_3 = __pyx_t_2;
+            goto __pyx_L20_bool_binop_done;
+          }
+          __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_ndim); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 72, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_6);
+          __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_6); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 72, __pyx_L1_error)
+          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+          __pyx_t_2 = ((((Py_ssize_t)__pyx_t_5) == 2) != 0);
+          if (__pyx_t_2) {
+          } else {
+            __pyx_t_3 = __pyx_t_2;
+            goto __pyx_L20_bool_binop_done;
+          }
+          __pyx_t_2 = ((!((__pyx_v_int_is_signed ^ __pyx_v_dtype_signed) != 0)) != 0);
+          __pyx_t_3 = __pyx_t_2;
+          __pyx_L20_bool_binop_done:;
+          if (__pyx_t_3) {
+            if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_n_s_int, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 72, __pyx_L1_error)
+            goto __pyx_L10_break;
+          }
+          __pyx_t_2 = (((sizeof(long)) == __pyx_v_itemsize) != 0);
+          if (__pyx_t_2) {
+          } else {
+            __pyx_t_3 = __pyx_t_2;
+            goto __pyx_L24_bool_binop_done;
+          }
+          __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_ndim); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 72, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_6);
+          __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_6); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 72, __pyx_L1_error)
+          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+          __pyx_t_2 = ((((Py_ssize_t)__pyx_t_5) == 2) != 0);
+          if (__pyx_t_2) {
+          } else {
+            __pyx_t_3 = __pyx_t_2;
+            goto __pyx_L24_bool_binop_done;
+          }
+          __pyx_t_2 = ((!((__pyx_v_long_is_signed ^ __pyx_v_dtype_signed) != 0)) != 0);
+          __pyx_t_3 = __pyx_t_2;
+          __pyx_L24_bool_binop_done:;
+          if (__pyx_t_3) {
+            if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_n_s_long, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 72, __pyx_L1_error)
+            goto __pyx_L10_break;
+          }
+          __pyx_t_2 = (((sizeof(PY_LONG_LONG)) == __pyx_v_itemsize) != 0);
+          if (__pyx_t_2) {
+          } else {
+            __pyx_t_3 = __pyx_t_2;
+            goto __pyx_L28_bool_binop_done;
+          }
+          __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_ndim); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 72, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_6);
+          __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_6); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 72, __pyx_L1_error)
+          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+          __pyx_t_2 = ((((Py_ssize_t)__pyx_t_5) == 2) != 0);
+          if (__pyx_t_2) {
+          } else {
+            __pyx_t_3 = __pyx_t_2;
+            goto __pyx_L28_bool_binop_done;
+          }
+          __pyx_t_2 = ((!((__pyx_v_long_long_is_signed ^ __pyx_v_dtype_signed) != 0)) != 0);
+          __pyx_t_3 = __pyx_t_2;
+          __pyx_L28_bool_binop_done:;
+          if (__pyx_t_3) {
+            if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_kp_s_long_long, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 72, __pyx_L1_error)
+            goto __pyx_L10_break;
+          }
+          __pyx_t_2 = (((sizeof(unsigned short)) == __pyx_v_itemsize) != 0);
+          if (__pyx_t_2) {
+          } else {
+            __pyx_t_3 = __pyx_t_2;
+            goto __pyx_L32_bool_binop_done;
+          }
+          __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_ndim); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 72, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_6);
+          __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_6); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 72, __pyx_L1_error)
+          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+          __pyx_t_2 = ((((Py_ssize_t)__pyx_t_5) == 2) != 0);
+          if (__pyx_t_2) {
+          } else {
+            __pyx_t_3 = __pyx_t_2;
+            goto __pyx_L32_bool_binop_done;
+          }
+          __pyx_t_2 = ((!((__pyx_v_unsigned_short_is_signed ^ __pyx_v_dtype_signed) != 0)) != 0);
+          __pyx_t_3 = __pyx_t_2;
+          __pyx_L32_bool_binop_done:;
+          if (__pyx_t_3) {
+            if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_kp_s_unsigned_short, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 72, __pyx_L1_error)
+            goto __pyx_L10_break;
+          }
+          __pyx_t_2 = (((sizeof(unsigned int)) == __pyx_v_itemsize) != 0);
+          if (__pyx_t_2) {
+          } else {
+            __pyx_t_3 = __pyx_t_2;
+            goto __pyx_L36_bool_binop_done;
+          }
+          __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_ndim); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 72, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_6);
+          __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_6); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 72, __pyx_L1_error)
+          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+          __pyx_t_2 = ((((Py_ssize_t)__pyx_t_5) == 2) != 0);
+          if (__pyx_t_2) {
+          } else {
+            __pyx_t_3 = __pyx_t_2;
+            goto __pyx_L36_bool_binop_done;
+          }
+          __pyx_t_2 = ((!((__pyx_v_unsigned_int_is_signed ^ __pyx_v_dtype_signed) != 0)) != 0);
+          __pyx_t_3 = __pyx_t_2;
+          __pyx_L36_bool_binop_done:;
+          if (__pyx_t_3) {
+            if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_kp_s_unsigned_int, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 72, __pyx_L1_error)
+            goto __pyx_L10_break;
+          }
+          __pyx_t_2 = (((sizeof(unsigned long)) == __pyx_v_itemsize) != 0);
+          if (__pyx_t_2) {
+          } else {
+            __pyx_t_3 = __pyx_t_2;
+            goto __pyx_L40_bool_binop_done;
+          }
+          __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_ndim); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 72, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_6);
+          __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_6); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 72, __pyx_L1_error)
+          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+          __pyx_t_2 = ((((Py_ssize_t)__pyx_t_5) == 2) != 0);
+          if (__pyx_t_2) {
+          } else {
+            __pyx_t_3 = __pyx_t_2;
+            goto __pyx_L40_bool_binop_done;
+          }
+          __pyx_t_2 = ((!((__pyx_v_unsigned_long_is_signed ^ __pyx_v_dtype_signed) != 0)) != 0);
+          __pyx_t_3 = __pyx_t_2;
+          __pyx_L40_bool_binop_done:;
+          if (__pyx_t_3) {
+            if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_kp_s_unsigned_long, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 72, __pyx_L1_error)
+            goto __pyx_L10_break;
+          }
+          break;
+          case 'f':
+          break;
+          case 'c':
+          break;
+          case 'O':
+          break;
+          default: break;
+        }
+      }
+    }
+    __pyx_t_2 = ((__pyx_v_itemsize == -1L) != 0);
+    if (!__pyx_t_2) {
+    } else {
+      __pyx_t_3 = __pyx_t_2;
+      goto __pyx_L44_bool_binop_done;
+    }
+    __pyx_t_2 = ((__pyx_v_itemsize == (sizeof(short))) != 0);
+    __pyx_t_3 = __pyx_t_2;
+    __pyx_L44_bool_binop_done:;
+    if (__pyx_t_3) {
+      __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_dsds_short(__pyx_v_arg, 0); 
+      __pyx_v_memslice = __pyx_t_8;
+      __pyx_t_3 = (__pyx_v_memslice.memview != 0);
+      if (__pyx_t_3) {
+        __PYX_XDEC_MEMVIEW((&__pyx_v_memslice), 1); 
+        if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_n_s_short, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 72, __pyx_L1_error)
+        goto __pyx_L10_break;
+      }
+      /*else*/ {
+        PyErr_Clear(); 
+      }
+    }
+    __pyx_t_2 = ((__pyx_v_itemsize == -1L) != 0);
+    if (!__pyx_t_2) {
+    } else {
+      __pyx_t_3 = __pyx_t_2;
+      goto __pyx_L48_bool_binop_done;
+    }
+    __pyx_t_2 = ((__pyx_v_itemsize == (sizeof(int))) != 0);
+    __pyx_t_3 = __pyx_t_2;
+    __pyx_L48_bool_binop_done:;
+    if (__pyx_t_3) {
+      __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_dsds_int(__pyx_v_arg, 0); 
+      __pyx_v_memslice = __pyx_t_8;
+      __pyx_t_3 = (__pyx_v_memslice.memview != 0);
+      if (__pyx_t_3) {
+        __PYX_XDEC_MEMVIEW((&__pyx_v_memslice), 1); 
+        if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_n_s_int, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 72, __pyx_L1_error)
+        goto __pyx_L10_break;
+      }
+      /*else*/ {
+        PyErr_Clear(); 
+      }
+    }
+    __pyx_t_2 = ((__pyx_v_itemsize == -1L) != 0);
+    if (!__pyx_t_2) {
+    } else {
+      __pyx_t_3 = __pyx_t_2;
+      goto __pyx_L52_bool_binop_done;
+    }
+    __pyx_t_2 = ((__pyx_v_itemsize == (sizeof(long))) != 0);
+    __pyx_t_3 = __pyx_t_2;
+    __pyx_L52_bool_binop_done:;
+    if (__pyx_t_3) {
+      __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_dsds_long(__pyx_v_arg, 0); 
+      __pyx_v_memslice = __pyx_t_8;
+      __pyx_t_3 = (__pyx_v_memslice.memview != 0);
+      if (__pyx_t_3) {
+        __PYX_XDEC_MEMVIEW((&__pyx_v_memslice), 1); 
+        if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_n_s_long, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 72, __pyx_L1_error)
+        goto __pyx_L10_break;
+      }
+      /*else*/ {
+        PyErr_Clear(); 
+      }
+    }
+    __pyx_t_2 = ((__pyx_v_itemsize == -1L) != 0);
+    if (!__pyx_t_2) {
+    } else {
+      __pyx_t_3 = __pyx_t_2;
+      goto __pyx_L56_bool_binop_done;
+    }
+    __pyx_t_2 = ((__pyx_v_itemsize == (sizeof(PY_LONG_LONG))) != 0);
+    __pyx_t_3 = __pyx_t_2;
+    __pyx_L56_bool_binop_done:;
+    if (__pyx_t_3) {
+      __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_dsds_PY_LONG_LONG(__pyx_v_arg, 0); 
+      __pyx_v_memslice = __pyx_t_8;
+      __pyx_t_3 = (__pyx_v_memslice.memview != 0);
+      if (__pyx_t_3) {
+        __PYX_XDEC_MEMVIEW((&__pyx_v_memslice), 1); 
+        if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_kp_s_long_long, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 72, __pyx_L1_error)
+        goto __pyx_L10_break;
+      }
+      /*else*/ {
+        PyErr_Clear(); 
+      }
+    }
+    __pyx_t_2 = ((__pyx_v_itemsize == -1L) != 0);
+    if (!__pyx_t_2) {
+    } else {
+      __pyx_t_3 = __pyx_t_2;
+      goto __pyx_L60_bool_binop_done;
+    }
+    __pyx_t_2 = ((__pyx_v_itemsize == (sizeof(unsigned short))) != 0);
+    __pyx_t_3 = __pyx_t_2;
+    __pyx_L60_bool_binop_done:;
+    if (__pyx_t_3) {
+      __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_dsds_unsigned_short(__pyx_v_arg, 0); 
+      __pyx_v_memslice = __pyx_t_8;
+      __pyx_t_3 = (__pyx_v_memslice.memview != 0);
+      if (__pyx_t_3) {
+        __PYX_XDEC_MEMVIEW((&__pyx_v_memslice), 1); 
+        if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_kp_s_unsigned_short, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 72, __pyx_L1_error)
+        goto __pyx_L10_break;
+      }
+      /*else*/ {
+        PyErr_Clear(); 
+      }
+    }
+    __pyx_t_2 = ((__pyx_v_itemsize == -1L) != 0);
+    if (!__pyx_t_2) {
+    } else {
+      __pyx_t_3 = __pyx_t_2;
+      goto __pyx_L64_bool_binop_done;
+    }
+    __pyx_t_2 = ((__pyx_v_itemsize == (sizeof(unsigned int))) != 0);
+    __pyx_t_3 = __pyx_t_2;
+    __pyx_L64_bool_binop_done:;
+    if (__pyx_t_3) {
+      __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_dsds_unsigned_int(__pyx_v_arg, 0); 
+      __pyx_v_memslice = __pyx_t_8;
+      __pyx_t_3 = (__pyx_v_memslice.memview != 0);
+      if (__pyx_t_3) {
+        __PYX_XDEC_MEMVIEW((&__pyx_v_memslice), 1); 
+        if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_kp_s_unsigned_int, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 72, __pyx_L1_error)
+        goto __pyx_L10_break;
+      }
+      /*else*/ {
+        PyErr_Clear(); 
+      }
+    }
+    __pyx_t_2 = ((__pyx_v_itemsize == -1L) != 0);
+    if (!__pyx_t_2) {
+    } else {
+      __pyx_t_3 = __pyx_t_2;
+      goto __pyx_L68_bool_binop_done;
+    }
+    __pyx_t_2 = ((__pyx_v_itemsize == (sizeof(unsigned long))) != 0);
+    __pyx_t_3 = __pyx_t_2;
+    __pyx_L68_bool_binop_done:;
+    if (__pyx_t_3) {
+      __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_dsds_unsigned_long(__pyx_v_arg, 0); 
+      __pyx_v_memslice = __pyx_t_8;
+      __pyx_t_3 = (__pyx_v_memslice.memview != 0);
+      if (__pyx_t_3) {
+        __PYX_XDEC_MEMVIEW((&__pyx_v_memslice), 1); 
+        if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_kp_s_unsigned_long, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 72, __pyx_L1_error)
+        goto __pyx_L10_break;
+      }
+      /*else*/ {
+        PyErr_Clear(); 
+      }
+    }
+    if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, Py_None, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 72, __pyx_L1_error)
+    goto __pyx_L10_break;
+  }
+  __pyx_L10_break:;
+  __pyx_t_6 = PyList_New(0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 72, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_6);
+  __pyx_v_candidates = ((PyObject*)__pyx_t_6);
+  __pyx_t_6 = 0;
+  __pyx_t_5 = 0;
+  if (unlikely(__pyx_v_signatures == Py_None)) {
+    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
+    __PYX_ERR(0, 72, __pyx_L1_error)
+  }
+  __pyx_t_1 = __Pyx_dict_iterator(((PyObject*)__pyx_v_signatures), 1, ((PyObject *)NULL), (&__pyx_t_9), (&__pyx_t_10)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 72, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_6);
+  __pyx_t_6 = __pyx_t_1;
+  __pyx_t_1 = 0;
+  while (1) {
+    __pyx_t_11 = __Pyx_dict_iter_next(__pyx_t_6, __pyx_t_9, &__pyx_t_5, &__pyx_t_1, NULL, NULL, __pyx_t_10);
+    if (unlikely(__pyx_t_11 == 0)) break;
+    if (unlikely(__pyx_t_11 == -1)) __PYX_ERR(0, 72, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_1);
+    __Pyx_XDECREF_SET(__pyx_v_sig, __pyx_t_1);
+    __pyx_t_1 = 0;
+    __pyx_v_match_found = 0;
+    __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_v_sig, __pyx_n_s_strip); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 72, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_13);
+    __pyx_t_14 = NULL;
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_13))) {
+      __pyx_t_14 = PyMethod_GET_SELF(__pyx_t_13);
+      if (likely(__pyx_t_14)) {
+        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13);
+        __Pyx_INCREF(__pyx_t_14);
+        __Pyx_INCREF(function);
+        __Pyx_DECREF_SET(__pyx_t_13, function);
+      }
+    }
+    __pyx_t_12 = (__pyx_t_14) ? __Pyx_PyObject_Call2Args(__pyx_t_13, __pyx_t_14, __pyx_kp_s_) : __Pyx_PyObject_CallOneArg(__pyx_t_13, __pyx_kp_s_);
+    __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
+    if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 72, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_12);
+    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+    __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_n_s_split); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 72, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_13);
+    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
+    __pyx_t_12 = NULL;
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_13))) {
+      __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_13);
+      if (likely(__pyx_t_12)) {
+        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13);
+        __Pyx_INCREF(__pyx_t_12);
+        __Pyx_INCREF(function);
+        __Pyx_DECREF_SET(__pyx_t_13, function);
+      }
+    }
+    __pyx_t_1 = (__pyx_t_12) ? __Pyx_PyObject_Call2Args(__pyx_t_13, __pyx_t_12, __pyx_kp_s__2) : __Pyx_PyObject_CallOneArg(__pyx_t_13, __pyx_kp_s__2);
+    __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
+    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 72, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_1);
+    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+    __Pyx_XDECREF_SET(__pyx_v_src_sig, __pyx_t_1);
+    __pyx_t_1 = 0;
+    __pyx_t_15 = PyList_GET_SIZE(__pyx_v_dest_sig); if (unlikely(__pyx_t_15 == ((Py_ssize_t)-1))) __PYX_ERR(0, 72, __pyx_L1_error)
+    __pyx_t_16 = __pyx_t_15;
+    for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) {
+      __pyx_v_i = __pyx_t_17;
+      __pyx_t_1 = PyList_GET_ITEM(__pyx_v_dest_sig, __pyx_v_i);
+      __Pyx_INCREF(__pyx_t_1);
+      __Pyx_XDECREF_SET(__pyx_v_dst_type, __pyx_t_1);
+      __pyx_t_1 = 0;
+      __pyx_t_3 = (__pyx_v_dst_type != Py_None);
+      __pyx_t_2 = (__pyx_t_3 != 0);
+      if (__pyx_t_2) {
+        __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_src_sig, __pyx_v_i, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 72, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_1);
+        __pyx_t_13 = PyObject_RichCompare(__pyx_t_1, __pyx_v_dst_type, Py_EQ); __Pyx_XGOTREF(__pyx_t_13); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 72, __pyx_L1_error)
+        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+        __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_13); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 72, __pyx_L1_error)
+        __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+        if (__pyx_t_2) {
+          __pyx_v_match_found = 1;
+          goto __pyx_L76;
+        }
+        /*else*/ {
+          __pyx_v_match_found = 0;
+          goto __pyx_L74_break;
+        }
+        __pyx_L76:;
+      }
+    }
+    __pyx_L74_break:;
+    __pyx_t_2 = (__pyx_v_match_found != 0);
+    if (__pyx_t_2) {
+      __pyx_t_18 = __Pyx_PyList_Append(__pyx_v_candidates, __pyx_v_sig); if (unlikely(__pyx_t_18 == ((int)-1))) __PYX_ERR(0, 72, __pyx_L1_error)
+    }
+  }
+  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+  __pyx_t_2 = (PyList_GET_SIZE(__pyx_v_candidates) != 0);
+  __pyx_t_3 = ((!__pyx_t_2) != 0);
+  if (__pyx_t_3) {
+    __pyx_t_6 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__3, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 72, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_6);
+    __Pyx_Raise(__pyx_t_6, 0, 0, 0);
+    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+    __PYX_ERR(0, 72, __pyx_L1_error)
+  }
+  __pyx_t_9 = PyList_GET_SIZE(__pyx_v_candidates); if (unlikely(__pyx_t_9 == ((Py_ssize_t)-1))) __PYX_ERR(0, 72, __pyx_L1_error)
+  __pyx_t_3 = ((__pyx_t_9 > 1) != 0);
+  if (__pyx_t_3) {
+    __pyx_t_6 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__4, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 72, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_6);
+    __Pyx_Raise(__pyx_t_6, 0, 0, 0);
+    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+    __PYX_ERR(0, 72, __pyx_L1_error)
+  }
+  /*else*/ {
+    __Pyx_XDECREF(__pyx_r);
+    if (unlikely(__pyx_v_signatures == Py_None)) {
+      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
+      __PYX_ERR(0, 72, __pyx_L1_error)
+    }
+    __pyx_t_6 = __Pyx_PyDict_GetItem(((PyObject*)__pyx_v_signatures), PyList_GET_ITEM(__pyx_v_candidates, 0)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 72, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_6);
+    __pyx_r = __pyx_t_6;
+    __pyx_t_6 = 0;
+    goto __pyx_L0;
+  }
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_6);
+  __Pyx_XDECREF(__pyx_t_12);
+  __Pyx_XDECREF(__pyx_t_13);
+  __Pyx_XDECREF(__pyx_t_14);
+  __Pyx_AddTraceback("pystencils.boundaries.createindexlistcython.__pyx_fused_cpdef", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XDECREF(__pyx_v_dest_sig);
+  __Pyx_XDECREF(__pyx_v_ndarray);
+  __Pyx_XDECREF(__pyx_v_arg);
+  __Pyx_XDECREF(__pyx_v_dtype);
+  __Pyx_XDECREF(__pyx_v_arg_base);
+  __Pyx_XDECREF(__pyx_v_candidates);
+  __Pyx_XDECREF(__pyx_v_sig);
+  __Pyx_XDECREF(__pyx_v_src_sig);
+  __Pyx_XDECREF(__pyx_v_dst_type);
+  __Pyx_XDECREF(__pyx_v_kwargs);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static PyObject *__pyx_fuse_0__pyx_pw_10pystencils_10boundaries_21createindexlistcython_41create_boundary_cell_index_list_2d(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyMethodDef __pyx_fuse_0__pyx_mdef_10pystencils_10boundaries_21createindexlistcython_41create_boundary_cell_index_list_2d = {"__pyx_fuse_0create_boundary_cell_index_list_2d", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_fuse_0__pyx_pw_10pystencils_10boundaries_21createindexlistcython_41create_boundary_cell_index_list_2d, METH_VARARGS|METH_KEYWORDS, 0};
+static PyObject *__pyx_fuse_0__pyx_pw_10pystencils_10boundaries_21createindexlistcython_41create_boundary_cell_index_list_2d(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_flag_field = 0;
+  short __pyx_v_boundary_mask;
+  short __pyx_v_fluid_mask;
+  PyObject *__pyx_v_stencil = 0;
+  int __pyx_v_single_link;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("create_boundary_cell_index_list_2d (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_flag_field,&__pyx_n_s_boundary_mask,&__pyx_n_s_fluid_mask,&__pyx_n_s_stencil,&__pyx_n_s_single_link,0};
+    PyObject* values[5] = {0,0,0,0,0};
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+        CYTHON_FALLTHROUGH;
+        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
+        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_flag_field)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
+        case  1:
+        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_boundary_mask)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_cell_index_list_2d", 1, 5, 5, 1); __PYX_ERR(0, 72, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  2:
+        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_fluid_mask)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_cell_index_list_2d", 1, 5, 5, 2); __PYX_ERR(0, 72, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  3:
+        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_stencil)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_cell_index_list_2d", 1, 5, 5, 3); __PYX_ERR(0, 72, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  4:
+        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_single_link)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_cell_index_list_2d", 1, 5, 5, 4); __PYX_ERR(0, 72, __pyx_L3_error)
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "create_boundary_cell_index_list_2d") < 0)) __PYX_ERR(0, 72, __pyx_L3_error)
+      }
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 5) {
+      goto __pyx_L5_argtuple_error;
+    } else {
+      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+      values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+      values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+    }
+    __pyx_v_flag_field = ((PyObject *)values[0]);
+    __pyx_v_boundary_mask = __Pyx_PyInt_As_short(values[1]); if (unlikely((__pyx_v_boundary_mask == (short)-1) && PyErr_Occurred())) __PYX_ERR(0, 73, __pyx_L3_error)
+    __pyx_v_fluid_mask = __Pyx_PyInt_As_short(values[2]); if (unlikely((__pyx_v_fluid_mask == (short)-1) && PyErr_Occurred())) __PYX_ERR(0, 73, __pyx_L3_error)
+    __pyx_v_stencil = ((PyObject *)values[3]);
+    __pyx_v_single_link = __Pyx_PyInt_As_int(values[4]); if (unlikely((__pyx_v_single_link == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 74, __pyx_L3_error)
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("create_boundary_cell_index_list_2d", 1, 5, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 72, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("pystencils.boundaries.createindexlistcython.create_boundary_cell_index_list_2d", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_10pystencils_10boundaries_21createindexlistcython_40create_boundary_cell_index_list_2d(__pyx_self, __pyx_v_flag_field, __pyx_v_boundary_mask, __pyx_v_fluid_mask, __pyx_v_stencil, __pyx_v_single_link);
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_10pystencils_10boundaries_21createindexlistcython_40create_boundary_cell_index_list_2d(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_flag_field, short __pyx_v_boundary_mask, short __pyx_v_fluid_mask, PyObject *__pyx_v_stencil, int __pyx_v_single_link) {
+  int __pyx_v_xs;
+  int __pyx_v_ys;
+  int __pyx_v_x;
+  int __pyx_v_y;
+  int __pyx_v_dirIdx;
+  int __pyx_v_num_directions;
+  int __pyx_v_dx;
+  int __pyx_v_dy;
+  PyObject *__pyx_v_boundary_index_list = NULL;
+  __Pyx_LocalBuf_ND __pyx_pybuffernd_flag_field;
+  __Pyx_Buffer __pyx_pybuffer_flag_field;
+  __Pyx_LocalBuf_ND __pyx_pybuffernd_stencil;
+  __Pyx_Buffer __pyx_pybuffer_stencil;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
+  PyObject *(*__pyx_t_5)(PyObject *);
+  int __pyx_t_6;
+  int __pyx_t_7;
+  int __pyx_t_8;
+  int __pyx_t_9;
+  int __pyx_t_10;
+  int __pyx_t_11;
+  Py_ssize_t __pyx_t_12;
+  Py_ssize_t __pyx_t_13;
+  int __pyx_t_14;
+  int __pyx_t_15;
+  int __pyx_t_16;
+  int __pyx_t_17;
+  Py_ssize_t __pyx_t_18;
+  Py_ssize_t __pyx_t_19;
+  Py_ssize_t __pyx_t_20;
+  Py_ssize_t __pyx_t_21;
+  int __pyx_t_22;
+  int __pyx_t_23;
+  int __pyx_t_24;
+  Py_ssize_t __pyx_t_25;
+  Py_ssize_t __pyx_t_26;
+  int __pyx_t_27;
+  __Pyx_RefNannySetupContext("__pyx_fuse_0create_boundary_cell_index_list_2d", 0);
+  __pyx_pybuffer_flag_field.pybuffer.buf = NULL;
+  __pyx_pybuffer_flag_field.refcount = 0;
+  __pyx_pybuffernd_flag_field.data = NULL;
+  __pyx_pybuffernd_flag_field.rcbuffer = &__pyx_pybuffer_flag_field;
+  __pyx_pybuffer_stencil.pybuffer.buf = NULL;
+  __pyx_pybuffer_stencil.refcount = 0;
+  __pyx_pybuffernd_stencil.data = NULL;
+  __pyx_pybuffernd_stencil.rcbuffer = &__pyx_pybuffer_stencil;
+  {
+    __Pyx_BufFmt_StackElem __pyx_stack[1];
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_flag_field.rcbuffer->pybuffer, (PyObject*)__pyx_v_flag_field, &__Pyx_TypeInfo_short, PyBUF_FORMAT| PyBUF_INDIRECT, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 72, __pyx_L1_error)
+  }
+  __pyx_pybuffernd_flag_field.diminfo[0].strides = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_flag_field.diminfo[0].shape = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_flag_field.diminfo[0].suboffsets = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.suboffsets[0]; __pyx_pybuffernd_flag_field.diminfo[1].strides = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_flag_field.diminfo[1].shape = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_flag_field.diminfo[1].suboffsets = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.suboffsets[1];
+  {
+    __Pyx_BufFmt_StackElem __pyx_stack[1];
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_stencil.rcbuffer->pybuffer, (PyObject*)__pyx_v_stencil, &__Pyx_TypeInfo_int, PyBUF_FORMAT| PyBUF_INDIRECT, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 72, __pyx_L1_error)
+  }
+  __pyx_pybuffernd_stencil.diminfo[0].strides = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_stencil.diminfo[0].shape = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_stencil.diminfo[0].suboffsets = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.suboffsets[0]; __pyx_pybuffernd_stencil.diminfo[1].strides = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_stencil.diminfo[1].shape = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_stencil.diminfo[1].suboffsets = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.suboffsets[1];
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":78
+ *     cdef int dirIdx, num_directions, dx, dy
+ * 
+ *     xs, ys = flag_field.shape             # <<<<<<<<<<<<<<
+ *     boundary_index_list = []
+ *     num_directions = stencil.shape[0]
+ */
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_flag_field), __pyx_n_s_shape); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 78, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) {
+    PyObject* sequence = __pyx_t_1;
+    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
+    if (unlikely(size != 2)) {
+      if (size > 2) __Pyx_RaiseTooManyValuesError(2);
+      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
+      __PYX_ERR(0, 78, __pyx_L1_error)
+    }
+    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+    if (likely(PyTuple_CheckExact(sequence))) {
+      __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
+      __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); 
+    } else {
+      __pyx_t_2 = PyList_GET_ITEM(sequence, 0); 
+      __pyx_t_3 = PyList_GET_ITEM(sequence, 1); 
+    }
+    __Pyx_INCREF(__pyx_t_2);
+    __Pyx_INCREF(__pyx_t_3);
+    #else
+    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 78, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_2);
+    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 78, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    #endif
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  } else {
+    Py_ssize_t index = -1;
+    __pyx_t_4 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 78, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __pyx_t_5 = Py_TYPE(__pyx_t_4)->tp_iternext;
+    index = 0; __pyx_t_2 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_2)) goto __pyx_L3_unpacking_failed;
+    __Pyx_GOTREF(__pyx_t_2);
+    index = 1; __pyx_t_3 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_3)) goto __pyx_L3_unpacking_failed;
+    __Pyx_GOTREF(__pyx_t_3);
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_5(__pyx_t_4), 2) < 0) __PYX_ERR(0, 78, __pyx_L1_error)
+    __pyx_t_5 = NULL;
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    goto __pyx_L4_unpacking_done;
+    __pyx_L3_unpacking_failed:;
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    __pyx_t_5 = NULL;
+    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
+    __PYX_ERR(0, 78, __pyx_L1_error)
+    __pyx_L4_unpacking_done:;
+  }
+  __pyx_t_6 = __Pyx_PyInt_As_int(__pyx_t_2); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 78, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_7 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 78, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __pyx_v_xs = __pyx_t_6;
+  __pyx_v_ys = __pyx_t_7;
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":79
+ * 
+ *     xs, ys = flag_field.shape
+ *     boundary_index_list = []             # <<<<<<<<<<<<<<
+ *     num_directions = stencil.shape[0]
+ * 
+ */
+  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 79, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_boundary_index_list = ((PyObject*)__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":80
+ *     xs, ys = flag_field.shape
+ *     boundary_index_list = []
+ *     num_directions = stencil.shape[0]             # <<<<<<<<<<<<<<
+ * 
+ *     for y in range(0, ys):
+ */
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_stencil), __pyx_n_s_shape); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 80, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_3 = __Pyx_GetItemInt(__pyx_t_1, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 80, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_7 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 80, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __pyx_v_num_directions = __pyx_t_7;
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":82
+ *     num_directions = stencil.shape[0]
+ * 
+ *     for y in range(0, ys):             # <<<<<<<<<<<<<<
+ *         for x in range(0, xs):
+ *             if flag_field[x, y] & boundary_mask:
+ */
+  __pyx_t_7 = __pyx_v_ys;
+  __pyx_t_6 = __pyx_t_7;
+  for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_6; __pyx_t_8+=1) {
+    __pyx_v_y = __pyx_t_8;
+
+    /* "pystencils/boundaries/createindexlistcython.pyx":83
+ * 
+ *     for y in range(0, ys):
+ *         for x in range(0, xs):             # <<<<<<<<<<<<<<
+ *             if flag_field[x, y] & boundary_mask:
+ *                 for dirIdx in range(num_directions):
+ */
+    __pyx_t_9 = __pyx_v_xs;
+    __pyx_t_10 = __pyx_t_9;
+    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {
+      __pyx_v_x = __pyx_t_11;
+
+      /* "pystencils/boundaries/createindexlistcython.pyx":84
+ *     for y in range(0, ys):
+ *         for x in range(0, xs):
+ *             if flag_field[x, y] & boundary_mask:             # <<<<<<<<<<<<<<
+ *                 for dirIdx in range(num_directions):
+ *                     dx = stencil[dirIdx,0]
+ */
+      __pyx_t_12 = __pyx_v_x;
+      __pyx_t_13 = __pyx_v_y;
+      __pyx_t_14 = (((*__Pyx_BufPtrFull2d(short *, __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_flag_field.diminfo[0].strides, __pyx_pybuffernd_flag_field.diminfo[0].suboffsets, __pyx_t_13, __pyx_pybuffernd_flag_field.diminfo[1].strides, __pyx_pybuffernd_flag_field.diminfo[1].suboffsets)) & __pyx_v_boundary_mask) != 0);
+      if (__pyx_t_14) {
+
+        /* "pystencils/boundaries/createindexlistcython.pyx":85
+ *         for x in range(0, xs):
+ *             if flag_field[x, y] & boundary_mask:
+ *                 for dirIdx in range(num_directions):             # <<<<<<<<<<<<<<
+ *                     dx = stencil[dirIdx,0]
+ *                     dy = stencil[dirIdx,1]
+ */
+        __pyx_t_15 = __pyx_v_num_directions;
+        __pyx_t_16 = __pyx_t_15;
+        for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) {
+          __pyx_v_dirIdx = __pyx_t_17;
+
+          /* "pystencils/boundaries/createindexlistcython.pyx":86
+ *             if flag_field[x, y] & boundary_mask:
+ *                 for dirIdx in range(num_directions):
+ *                     dx = stencil[dirIdx,0]             # <<<<<<<<<<<<<<
+ *                     dy = stencil[dirIdx,1]
+ *                     if 0 <= x + dx < xs and 0 <= y + dy < ys:
+ */
+          __pyx_t_18 = __pyx_v_dirIdx;
+          __pyx_t_19 = 0;
+          __pyx_v_dx = (*__Pyx_BufPtrFull2d(int *, __pyx_pybuffernd_stencil.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_stencil.diminfo[0].strides, __pyx_pybuffernd_stencil.diminfo[0].suboffsets, __pyx_t_19, __pyx_pybuffernd_stencil.diminfo[1].strides, __pyx_pybuffernd_stencil.diminfo[1].suboffsets));
+
+          /* "pystencils/boundaries/createindexlistcython.pyx":87
+ *                 for dirIdx in range(num_directions):
+ *                     dx = stencil[dirIdx,0]
+ *                     dy = stencil[dirIdx,1]             # <<<<<<<<<<<<<<
+ *                     if 0 <= x + dx < xs and 0 <= y + dy < ys:
+ *                         if flag_field[x + dx, y + dy] & fluid_mask:
+ */
+          __pyx_t_20 = __pyx_v_dirIdx;
+          __pyx_t_21 = 1;
+          __pyx_v_dy = (*__Pyx_BufPtrFull2d(int *, __pyx_pybuffernd_stencil.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_stencil.diminfo[0].strides, __pyx_pybuffernd_stencil.diminfo[0].suboffsets, __pyx_t_21, __pyx_pybuffernd_stencil.diminfo[1].strides, __pyx_pybuffernd_stencil.diminfo[1].suboffsets));
+
+          /* "pystencils/boundaries/createindexlistcython.pyx":88
+ *                     dx = stencil[dirIdx,0]
+ *                     dy = stencil[dirIdx,1]
+ *                     if 0 <= x + dx < xs and 0 <= y + dy < ys:             # <<<<<<<<<<<<<<
+ *                         if flag_field[x + dx, y + dy] & fluid_mask:
+ *                             boundary_index_list.append((x,y, dirIdx))
+ */
+          __pyx_t_22 = (__pyx_v_x + __pyx_v_dx);
+          __pyx_t_23 = (0 <= __pyx_t_22);
+          if (__pyx_t_23) {
+            __pyx_t_23 = (__pyx_t_22 < __pyx_v_xs);
+          }
+          __pyx_t_24 = (__pyx_t_23 != 0);
+          if (__pyx_t_24) {
+          } else {
+            __pyx_t_14 = __pyx_t_24;
+            goto __pyx_L13_bool_binop_done;
+          }
+          __pyx_t_22 = (__pyx_v_y + __pyx_v_dy);
+          __pyx_t_24 = (0 <= __pyx_t_22);
+          if (__pyx_t_24) {
+            __pyx_t_24 = (__pyx_t_22 < __pyx_v_ys);
+          }
+          __pyx_t_23 = (__pyx_t_24 != 0);
+          __pyx_t_14 = __pyx_t_23;
+          __pyx_L13_bool_binop_done:;
+          if (__pyx_t_14) {
+
+            /* "pystencils/boundaries/createindexlistcython.pyx":89
+ *                     dy = stencil[dirIdx,1]
+ *                     if 0 <= x + dx < xs and 0 <= y + dy < ys:
+ *                         if flag_field[x + dx, y + dy] & fluid_mask:             # <<<<<<<<<<<<<<
+ *                             boundary_index_list.append((x,y, dirIdx))
+ *                             if single_link:
+ */
+            __pyx_t_25 = (__pyx_v_x + __pyx_v_dx);
+            __pyx_t_26 = (__pyx_v_y + __pyx_v_dy);
+            __pyx_t_14 = (((*__Pyx_BufPtrFull2d(short *, __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_flag_field.diminfo[0].strides, __pyx_pybuffernd_flag_field.diminfo[0].suboffsets, __pyx_t_26, __pyx_pybuffernd_flag_field.diminfo[1].strides, __pyx_pybuffernd_flag_field.diminfo[1].suboffsets)) & __pyx_v_fluid_mask) != 0);
+            if (__pyx_t_14) {
+
+              /* "pystencils/boundaries/createindexlistcython.pyx":90
+ *                     if 0 <= x + dx < xs and 0 <= y + dy < ys:
+ *                         if flag_field[x + dx, y + dy] & fluid_mask:
+ *                             boundary_index_list.append((x,y, dirIdx))             # <<<<<<<<<<<<<<
+ *                             if single_link:
+ *                                 break
+ */
+              __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_x); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 90, __pyx_L1_error)
+              __Pyx_GOTREF(__pyx_t_3);
+              __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_y); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 90, __pyx_L1_error)
+              __Pyx_GOTREF(__pyx_t_1);
+              __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_dirIdx); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 90, __pyx_L1_error)
+              __Pyx_GOTREF(__pyx_t_2);
+              __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 90, __pyx_L1_error)
+              __Pyx_GOTREF(__pyx_t_4);
+              __Pyx_GIVEREF(__pyx_t_3);
+              PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3);
+              __Pyx_GIVEREF(__pyx_t_1);
+              PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_1);
+              __Pyx_GIVEREF(__pyx_t_2);
+              PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_t_2);
+              __pyx_t_3 = 0;
+              __pyx_t_1 = 0;
+              __pyx_t_2 = 0;
+              __pyx_t_27 = __Pyx_PyList_Append(__pyx_v_boundary_index_list, __pyx_t_4); if (unlikely(__pyx_t_27 == ((int)-1))) __PYX_ERR(0, 90, __pyx_L1_error)
+              __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+
+              /* "pystencils/boundaries/createindexlistcython.pyx":91
+ *                         if flag_field[x + dx, y + dy] & fluid_mask:
+ *                             boundary_index_list.append((x,y, dirIdx))
+ *                             if single_link:             # <<<<<<<<<<<<<<
+ *                                 break
+ *     return boundary_index_list
+ */
+              __pyx_t_14 = (__pyx_v_single_link != 0);
+              if (__pyx_t_14) {
+
+                /* "pystencils/boundaries/createindexlistcython.pyx":92
+ *                             boundary_index_list.append((x,y, dirIdx))
+ *                             if single_link:
+ *                                 break             # <<<<<<<<<<<<<<
+ *     return boundary_index_list
+ * 
+ */
+                goto __pyx_L11_break;
+
+                /* "pystencils/boundaries/createindexlistcython.pyx":91
+ *                         if flag_field[x + dx, y + dy] & fluid_mask:
+ *                             boundary_index_list.append((x,y, dirIdx))
+ *                             if single_link:             # <<<<<<<<<<<<<<
+ *                                 break
+ *     return boundary_index_list
+ */
+              }
+
+              /* "pystencils/boundaries/createindexlistcython.pyx":89
+ *                     dy = stencil[dirIdx,1]
+ *                     if 0 <= x + dx < xs and 0 <= y + dy < ys:
+ *                         if flag_field[x + dx, y + dy] & fluid_mask:             # <<<<<<<<<<<<<<
+ *                             boundary_index_list.append((x,y, dirIdx))
+ *                             if single_link:
+ */
+            }
+
+            /* "pystencils/boundaries/createindexlistcython.pyx":88
+ *                     dx = stencil[dirIdx,0]
+ *                     dy = stencil[dirIdx,1]
+ *                     if 0 <= x + dx < xs and 0 <= y + dy < ys:             # <<<<<<<<<<<<<<
+ *                         if flag_field[x + dx, y + dy] & fluid_mask:
+ *                             boundary_index_list.append((x,y, dirIdx))
+ */
+          }
+        }
+        __pyx_L11_break:;
+
+        /* "pystencils/boundaries/createindexlistcython.pyx":84
+ *     for y in range(0, ys):
+ *         for x in range(0, xs):
+ *             if flag_field[x, y] & boundary_mask:             # <<<<<<<<<<<<<<
+ *                 for dirIdx in range(num_directions):
+ *                     dx = stencil[dirIdx,0]
+ */
+      }
+    }
+  }
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":93
+ *                             if single_link:
+ *                                 break
+ *     return boundary_index_list             # <<<<<<<<<<<<<<
+ * 
+ * 
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(__pyx_v_boundary_index_list);
+  __pyx_r = __pyx_v_boundary_index_list;
+  goto __pyx_L0;
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":72
+ * @cython.boundscheck(False) # turn off bounds-checking for entire function
+ * @cython.wraparound(False)  # turn off negative index wrapping for entire function
+ * def create_boundary_cell_index_list_2d(object[IntegerType, ndim=2] flag_field,             # <<<<<<<<<<<<<<
+ *                                        IntegerType boundary_mask, IntegerType fluid_mask,
+ *                                        object[int, ndim=2] stencil, int single_link):
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_4);
+  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
+    __Pyx_PyThreadState_declare
+    __Pyx_PyThreadState_assign
+    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
+    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_flag_field.rcbuffer->pybuffer);
+    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_stencil.rcbuffer->pybuffer);
+  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
+  __Pyx_AddTraceback("pystencils.boundaries.createindexlistcython.create_boundary_cell_index_list_2d", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  goto __pyx_L2;
+  __pyx_L0:;
+  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_flag_field.rcbuffer->pybuffer);
+  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_stencil.rcbuffer->pybuffer);
+  __pyx_L2:;
+  __Pyx_XDECREF(__pyx_v_boundary_index_list);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static PyObject *__pyx_fuse_1__pyx_pw_10pystencils_10boundaries_21createindexlistcython_43create_boundary_cell_index_list_2d(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyMethodDef __pyx_fuse_1__pyx_mdef_10pystencils_10boundaries_21createindexlistcython_43create_boundary_cell_index_list_2d = {"__pyx_fuse_1create_boundary_cell_index_list_2d", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_fuse_1__pyx_pw_10pystencils_10boundaries_21createindexlistcython_43create_boundary_cell_index_list_2d, METH_VARARGS|METH_KEYWORDS, 0};
+static PyObject *__pyx_fuse_1__pyx_pw_10pystencils_10boundaries_21createindexlistcython_43create_boundary_cell_index_list_2d(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_flag_field = 0;
+  int __pyx_v_boundary_mask;
+  int __pyx_v_fluid_mask;
+  PyObject *__pyx_v_stencil = 0;
+  int __pyx_v_single_link;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("create_boundary_cell_index_list_2d (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_flag_field,&__pyx_n_s_boundary_mask,&__pyx_n_s_fluid_mask,&__pyx_n_s_stencil,&__pyx_n_s_single_link,0};
+    PyObject* values[5] = {0,0,0,0,0};
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+        CYTHON_FALLTHROUGH;
+        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
+        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_flag_field)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
+        case  1:
+        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_boundary_mask)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_cell_index_list_2d", 1, 5, 5, 1); __PYX_ERR(0, 72, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  2:
+        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_fluid_mask)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_cell_index_list_2d", 1, 5, 5, 2); __PYX_ERR(0, 72, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  3:
+        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_stencil)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_cell_index_list_2d", 1, 5, 5, 3); __PYX_ERR(0, 72, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  4:
+        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_single_link)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_cell_index_list_2d", 1, 5, 5, 4); __PYX_ERR(0, 72, __pyx_L3_error)
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "create_boundary_cell_index_list_2d") < 0)) __PYX_ERR(0, 72, __pyx_L3_error)
+      }
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 5) {
+      goto __pyx_L5_argtuple_error;
+    } else {
+      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+      values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+      values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+    }
+    __pyx_v_flag_field = ((PyObject *)values[0]);
+    __pyx_v_boundary_mask = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_boundary_mask == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 73, __pyx_L3_error)
+    __pyx_v_fluid_mask = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_fluid_mask == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 73, __pyx_L3_error)
+    __pyx_v_stencil = ((PyObject *)values[3]);
+    __pyx_v_single_link = __Pyx_PyInt_As_int(values[4]); if (unlikely((__pyx_v_single_link == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 74, __pyx_L3_error)
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("create_boundary_cell_index_list_2d", 1, 5, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 72, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("pystencils.boundaries.createindexlistcython.create_boundary_cell_index_list_2d", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_10pystencils_10boundaries_21createindexlistcython_42create_boundary_cell_index_list_2d(__pyx_self, __pyx_v_flag_field, __pyx_v_boundary_mask, __pyx_v_fluid_mask, __pyx_v_stencil, __pyx_v_single_link);
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_10pystencils_10boundaries_21createindexlistcython_42create_boundary_cell_index_list_2d(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_flag_field, int __pyx_v_boundary_mask, int __pyx_v_fluid_mask, PyObject *__pyx_v_stencil, int __pyx_v_single_link) {
+  int __pyx_v_xs;
+  int __pyx_v_ys;
+  int __pyx_v_x;
+  int __pyx_v_y;
+  int __pyx_v_dirIdx;
+  int __pyx_v_num_directions;
+  int __pyx_v_dx;
+  int __pyx_v_dy;
+  PyObject *__pyx_v_boundary_index_list = NULL;
+  __Pyx_LocalBuf_ND __pyx_pybuffernd_flag_field;
+  __Pyx_Buffer __pyx_pybuffer_flag_field;
+  __Pyx_LocalBuf_ND __pyx_pybuffernd_stencil;
+  __Pyx_Buffer __pyx_pybuffer_stencil;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
+  PyObject *(*__pyx_t_5)(PyObject *);
+  int __pyx_t_6;
+  int __pyx_t_7;
+  int __pyx_t_8;
+  int __pyx_t_9;
+  int __pyx_t_10;
+  int __pyx_t_11;
+  Py_ssize_t __pyx_t_12;
+  Py_ssize_t __pyx_t_13;
+  int __pyx_t_14;
+  int __pyx_t_15;
+  int __pyx_t_16;
+  int __pyx_t_17;
+  Py_ssize_t __pyx_t_18;
+  Py_ssize_t __pyx_t_19;
+  Py_ssize_t __pyx_t_20;
+  Py_ssize_t __pyx_t_21;
+  int __pyx_t_22;
+  int __pyx_t_23;
+  int __pyx_t_24;
+  Py_ssize_t __pyx_t_25;
+  Py_ssize_t __pyx_t_26;
+  int __pyx_t_27;
+  __Pyx_RefNannySetupContext("__pyx_fuse_1create_boundary_cell_index_list_2d", 0);
+  __pyx_pybuffer_flag_field.pybuffer.buf = NULL;
+  __pyx_pybuffer_flag_field.refcount = 0;
+  __pyx_pybuffernd_flag_field.data = NULL;
+  __pyx_pybuffernd_flag_field.rcbuffer = &__pyx_pybuffer_flag_field;
+  __pyx_pybuffer_stencil.pybuffer.buf = NULL;
+  __pyx_pybuffer_stencil.refcount = 0;
+  __pyx_pybuffernd_stencil.data = NULL;
+  __pyx_pybuffernd_stencil.rcbuffer = &__pyx_pybuffer_stencil;
+  {
+    __Pyx_BufFmt_StackElem __pyx_stack[1];
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_flag_field.rcbuffer->pybuffer, (PyObject*)__pyx_v_flag_field, &__Pyx_TypeInfo_int, PyBUF_FORMAT| PyBUF_INDIRECT, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 72, __pyx_L1_error)
+  }
+  __pyx_pybuffernd_flag_field.diminfo[0].strides = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_flag_field.diminfo[0].shape = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_flag_field.diminfo[0].suboffsets = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.suboffsets[0]; __pyx_pybuffernd_flag_field.diminfo[1].strides = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_flag_field.diminfo[1].shape = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_flag_field.diminfo[1].suboffsets = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.suboffsets[1];
+  {
+    __Pyx_BufFmt_StackElem __pyx_stack[1];
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_stencil.rcbuffer->pybuffer, (PyObject*)__pyx_v_stencil, &__Pyx_TypeInfo_int, PyBUF_FORMAT| PyBUF_INDIRECT, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 72, __pyx_L1_error)
+  }
+  __pyx_pybuffernd_stencil.diminfo[0].strides = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_stencil.diminfo[0].shape = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_stencil.diminfo[0].suboffsets = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.suboffsets[0]; __pyx_pybuffernd_stencil.diminfo[1].strides = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_stencil.diminfo[1].shape = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_stencil.diminfo[1].suboffsets = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.suboffsets[1];
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":78
+ *     cdef int dirIdx, num_directions, dx, dy
+ * 
+ *     xs, ys = flag_field.shape             # <<<<<<<<<<<<<<
+ *     boundary_index_list = []
+ *     num_directions = stencil.shape[0]
+ */
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_flag_field), __pyx_n_s_shape); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 78, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) {
+    PyObject* sequence = __pyx_t_1;
+    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
+    if (unlikely(size != 2)) {
+      if (size > 2) __Pyx_RaiseTooManyValuesError(2);
+      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
+      __PYX_ERR(0, 78, __pyx_L1_error)
+    }
+    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+    if (likely(PyTuple_CheckExact(sequence))) {
+      __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
+      __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); 
+    } else {
+      __pyx_t_2 = PyList_GET_ITEM(sequence, 0); 
+      __pyx_t_3 = PyList_GET_ITEM(sequence, 1); 
+    }
+    __Pyx_INCREF(__pyx_t_2);
+    __Pyx_INCREF(__pyx_t_3);
+    #else
+    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 78, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_2);
+    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 78, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    #endif
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  } else {
+    Py_ssize_t index = -1;
+    __pyx_t_4 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 78, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __pyx_t_5 = Py_TYPE(__pyx_t_4)->tp_iternext;
+    index = 0; __pyx_t_2 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_2)) goto __pyx_L3_unpacking_failed;
+    __Pyx_GOTREF(__pyx_t_2);
+    index = 1; __pyx_t_3 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_3)) goto __pyx_L3_unpacking_failed;
+    __Pyx_GOTREF(__pyx_t_3);
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_5(__pyx_t_4), 2) < 0) __PYX_ERR(0, 78, __pyx_L1_error)
+    __pyx_t_5 = NULL;
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    goto __pyx_L4_unpacking_done;
+    __pyx_L3_unpacking_failed:;
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    __pyx_t_5 = NULL;
+    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
+    __PYX_ERR(0, 78, __pyx_L1_error)
+    __pyx_L4_unpacking_done:;
+  }
+  __pyx_t_6 = __Pyx_PyInt_As_int(__pyx_t_2); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 78, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_7 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 78, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __pyx_v_xs = __pyx_t_6;
+  __pyx_v_ys = __pyx_t_7;
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":79
+ * 
+ *     xs, ys = flag_field.shape
+ *     boundary_index_list = []             # <<<<<<<<<<<<<<
+ *     num_directions = stencil.shape[0]
+ * 
+ */
+  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 79, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_boundary_index_list = ((PyObject*)__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":80
+ *     xs, ys = flag_field.shape
+ *     boundary_index_list = []
+ *     num_directions = stencil.shape[0]             # <<<<<<<<<<<<<<
+ * 
+ *     for y in range(0, ys):
+ */
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_stencil), __pyx_n_s_shape); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 80, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_3 = __Pyx_GetItemInt(__pyx_t_1, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 80, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_7 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 80, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __pyx_v_num_directions = __pyx_t_7;
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":82
+ *     num_directions = stencil.shape[0]
+ * 
+ *     for y in range(0, ys):             # <<<<<<<<<<<<<<
+ *         for x in range(0, xs):
+ *             if flag_field[x, y] & boundary_mask:
+ */
+  __pyx_t_7 = __pyx_v_ys;
+  __pyx_t_6 = __pyx_t_7;
+  for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_6; __pyx_t_8+=1) {
+    __pyx_v_y = __pyx_t_8;
+
+    /* "pystencils/boundaries/createindexlistcython.pyx":83
+ * 
+ *     for y in range(0, ys):
+ *         for x in range(0, xs):             # <<<<<<<<<<<<<<
+ *             if flag_field[x, y] & boundary_mask:
+ *                 for dirIdx in range(num_directions):
+ */
+    __pyx_t_9 = __pyx_v_xs;
+    __pyx_t_10 = __pyx_t_9;
+    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {
+      __pyx_v_x = __pyx_t_11;
+
+      /* "pystencils/boundaries/createindexlistcython.pyx":84
+ *     for y in range(0, ys):
+ *         for x in range(0, xs):
+ *             if flag_field[x, y] & boundary_mask:             # <<<<<<<<<<<<<<
+ *                 for dirIdx in range(num_directions):
+ *                     dx = stencil[dirIdx,0]
+ */
+      __pyx_t_12 = __pyx_v_x;
+      __pyx_t_13 = __pyx_v_y;
+      __pyx_t_14 = (((*__Pyx_BufPtrFull2d(int *, __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_flag_field.diminfo[0].strides, __pyx_pybuffernd_flag_field.diminfo[0].suboffsets, __pyx_t_13, __pyx_pybuffernd_flag_field.diminfo[1].strides, __pyx_pybuffernd_flag_field.diminfo[1].suboffsets)) & __pyx_v_boundary_mask) != 0);
+      if (__pyx_t_14) {
+
+        /* "pystencils/boundaries/createindexlistcython.pyx":85
+ *         for x in range(0, xs):
+ *             if flag_field[x, y] & boundary_mask:
+ *                 for dirIdx in range(num_directions):             # <<<<<<<<<<<<<<
+ *                     dx = stencil[dirIdx,0]
+ *                     dy = stencil[dirIdx,1]
+ */
+        __pyx_t_15 = __pyx_v_num_directions;
+        __pyx_t_16 = __pyx_t_15;
+        for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) {
+          __pyx_v_dirIdx = __pyx_t_17;
+
+          /* "pystencils/boundaries/createindexlistcython.pyx":86
+ *             if flag_field[x, y] & boundary_mask:
+ *                 for dirIdx in range(num_directions):
+ *                     dx = stencil[dirIdx,0]             # <<<<<<<<<<<<<<
+ *                     dy = stencil[dirIdx,1]
+ *                     if 0 <= x + dx < xs and 0 <= y + dy < ys:
+ */
+          __pyx_t_18 = __pyx_v_dirIdx;
+          __pyx_t_19 = 0;
+          __pyx_v_dx = (*__Pyx_BufPtrFull2d(int *, __pyx_pybuffernd_stencil.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_stencil.diminfo[0].strides, __pyx_pybuffernd_stencil.diminfo[0].suboffsets, __pyx_t_19, __pyx_pybuffernd_stencil.diminfo[1].strides, __pyx_pybuffernd_stencil.diminfo[1].suboffsets));
+
+          /* "pystencils/boundaries/createindexlistcython.pyx":87
+ *                 for dirIdx in range(num_directions):
+ *                     dx = stencil[dirIdx,0]
+ *                     dy = stencil[dirIdx,1]             # <<<<<<<<<<<<<<
+ *                     if 0 <= x + dx < xs and 0 <= y + dy < ys:
+ *                         if flag_field[x + dx, y + dy] & fluid_mask:
+ */
+          __pyx_t_20 = __pyx_v_dirIdx;
+          __pyx_t_21 = 1;
+          __pyx_v_dy = (*__Pyx_BufPtrFull2d(int *, __pyx_pybuffernd_stencil.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_stencil.diminfo[0].strides, __pyx_pybuffernd_stencil.diminfo[0].suboffsets, __pyx_t_21, __pyx_pybuffernd_stencil.diminfo[1].strides, __pyx_pybuffernd_stencil.diminfo[1].suboffsets));
+
+          /* "pystencils/boundaries/createindexlistcython.pyx":88
+ *                     dx = stencil[dirIdx,0]
+ *                     dy = stencil[dirIdx,1]
+ *                     if 0 <= x + dx < xs and 0 <= y + dy < ys:             # <<<<<<<<<<<<<<
+ *                         if flag_field[x + dx, y + dy] & fluid_mask:
+ *                             boundary_index_list.append((x,y, dirIdx))
+ */
+          __pyx_t_22 = (__pyx_v_x + __pyx_v_dx);
+          __pyx_t_23 = (0 <= __pyx_t_22);
+          if (__pyx_t_23) {
+            __pyx_t_23 = (__pyx_t_22 < __pyx_v_xs);
+          }
+          __pyx_t_24 = (__pyx_t_23 != 0);
+          if (__pyx_t_24) {
+          } else {
+            __pyx_t_14 = __pyx_t_24;
+            goto __pyx_L13_bool_binop_done;
+          }
+          __pyx_t_22 = (__pyx_v_y + __pyx_v_dy);
+          __pyx_t_24 = (0 <= __pyx_t_22);
+          if (__pyx_t_24) {
+            __pyx_t_24 = (__pyx_t_22 < __pyx_v_ys);
+          }
+          __pyx_t_23 = (__pyx_t_24 != 0);
+          __pyx_t_14 = __pyx_t_23;
+          __pyx_L13_bool_binop_done:;
+          if (__pyx_t_14) {
+
+            /* "pystencils/boundaries/createindexlistcython.pyx":89
+ *                     dy = stencil[dirIdx,1]
+ *                     if 0 <= x + dx < xs and 0 <= y + dy < ys:
+ *                         if flag_field[x + dx, y + dy] & fluid_mask:             # <<<<<<<<<<<<<<
+ *                             boundary_index_list.append((x,y, dirIdx))
+ *                             if single_link:
+ */
+            __pyx_t_25 = (__pyx_v_x + __pyx_v_dx);
+            __pyx_t_26 = (__pyx_v_y + __pyx_v_dy);
+            __pyx_t_14 = (((*__Pyx_BufPtrFull2d(int *, __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_flag_field.diminfo[0].strides, __pyx_pybuffernd_flag_field.diminfo[0].suboffsets, __pyx_t_26, __pyx_pybuffernd_flag_field.diminfo[1].strides, __pyx_pybuffernd_flag_field.diminfo[1].suboffsets)) & __pyx_v_fluid_mask) != 0);
+            if (__pyx_t_14) {
+
+              /* "pystencils/boundaries/createindexlistcython.pyx":90
+ *                     if 0 <= x + dx < xs and 0 <= y + dy < ys:
+ *                         if flag_field[x + dx, y + dy] & fluid_mask:
+ *                             boundary_index_list.append((x,y, dirIdx))             # <<<<<<<<<<<<<<
+ *                             if single_link:
+ *                                 break
+ */
+              __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_x); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 90, __pyx_L1_error)
+              __Pyx_GOTREF(__pyx_t_3);
+              __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_y); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 90, __pyx_L1_error)
+              __Pyx_GOTREF(__pyx_t_1);
+              __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_dirIdx); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 90, __pyx_L1_error)
+              __Pyx_GOTREF(__pyx_t_2);
+              __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 90, __pyx_L1_error)
+              __Pyx_GOTREF(__pyx_t_4);
+              __Pyx_GIVEREF(__pyx_t_3);
+              PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3);
+              __Pyx_GIVEREF(__pyx_t_1);
+              PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_1);
+              __Pyx_GIVEREF(__pyx_t_2);
+              PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_t_2);
+              __pyx_t_3 = 0;
+              __pyx_t_1 = 0;
+              __pyx_t_2 = 0;
+              __pyx_t_27 = __Pyx_PyList_Append(__pyx_v_boundary_index_list, __pyx_t_4); if (unlikely(__pyx_t_27 == ((int)-1))) __PYX_ERR(0, 90, __pyx_L1_error)
+              __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+
+              /* "pystencils/boundaries/createindexlistcython.pyx":91
+ *                         if flag_field[x + dx, y + dy] & fluid_mask:
+ *                             boundary_index_list.append((x,y, dirIdx))
+ *                             if single_link:             # <<<<<<<<<<<<<<
+ *                                 break
+ *     return boundary_index_list
+ */
+              __pyx_t_14 = (__pyx_v_single_link != 0);
+              if (__pyx_t_14) {
+
+                /* "pystencils/boundaries/createindexlistcython.pyx":92
+ *                             boundary_index_list.append((x,y, dirIdx))
+ *                             if single_link:
+ *                                 break             # <<<<<<<<<<<<<<
+ *     return boundary_index_list
+ * 
+ */
+                goto __pyx_L11_break;
+
+                /* "pystencils/boundaries/createindexlistcython.pyx":91
+ *                         if flag_field[x + dx, y + dy] & fluid_mask:
+ *                             boundary_index_list.append((x,y, dirIdx))
+ *                             if single_link:             # <<<<<<<<<<<<<<
+ *                                 break
+ *     return boundary_index_list
+ */
+              }
+
+              /* "pystencils/boundaries/createindexlistcython.pyx":89
+ *                     dy = stencil[dirIdx,1]
+ *                     if 0 <= x + dx < xs and 0 <= y + dy < ys:
+ *                         if flag_field[x + dx, y + dy] & fluid_mask:             # <<<<<<<<<<<<<<
+ *                             boundary_index_list.append((x,y, dirIdx))
+ *                             if single_link:
+ */
+            }
+
+            /* "pystencils/boundaries/createindexlistcython.pyx":88
+ *                     dx = stencil[dirIdx,0]
+ *                     dy = stencil[dirIdx,1]
+ *                     if 0 <= x + dx < xs and 0 <= y + dy < ys:             # <<<<<<<<<<<<<<
+ *                         if flag_field[x + dx, y + dy] & fluid_mask:
+ *                             boundary_index_list.append((x,y, dirIdx))
+ */
+          }
+        }
+        __pyx_L11_break:;
+
+        /* "pystencils/boundaries/createindexlistcython.pyx":84
+ *     for y in range(0, ys):
+ *         for x in range(0, xs):
+ *             if flag_field[x, y] & boundary_mask:             # <<<<<<<<<<<<<<
+ *                 for dirIdx in range(num_directions):
+ *                     dx = stencil[dirIdx,0]
+ */
+      }
+    }
+  }
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":93
+ *                             if single_link:
+ *                                 break
+ *     return boundary_index_list             # <<<<<<<<<<<<<<
+ * 
+ * 
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(__pyx_v_boundary_index_list);
+  __pyx_r = __pyx_v_boundary_index_list;
+  goto __pyx_L0;
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":72
+ * @cython.boundscheck(False) # turn off bounds-checking for entire function
+ * @cython.wraparound(False)  # turn off negative index wrapping for entire function
+ * def create_boundary_cell_index_list_2d(object[IntegerType, ndim=2] flag_field,             # <<<<<<<<<<<<<<
+ *                                        IntegerType boundary_mask, IntegerType fluid_mask,
+ *                                        object[int, ndim=2] stencil, int single_link):
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_4);
+  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
+    __Pyx_PyThreadState_declare
+    __Pyx_PyThreadState_assign
+    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
+    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_flag_field.rcbuffer->pybuffer);
+    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_stencil.rcbuffer->pybuffer);
+  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
+  __Pyx_AddTraceback("pystencils.boundaries.createindexlistcython.create_boundary_cell_index_list_2d", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  goto __pyx_L2;
+  __pyx_L0:;
+  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_flag_field.rcbuffer->pybuffer);
+  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_stencil.rcbuffer->pybuffer);
+  __pyx_L2:;
+  __Pyx_XDECREF(__pyx_v_boundary_index_list);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static PyObject *__pyx_fuse_2__pyx_pw_10pystencils_10boundaries_21createindexlistcython_45create_boundary_cell_index_list_2d(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyMethodDef __pyx_fuse_2__pyx_mdef_10pystencils_10boundaries_21createindexlistcython_45create_boundary_cell_index_list_2d = {"__pyx_fuse_2create_boundary_cell_index_list_2d", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_fuse_2__pyx_pw_10pystencils_10boundaries_21createindexlistcython_45create_boundary_cell_index_list_2d, METH_VARARGS|METH_KEYWORDS, 0};
+static PyObject *__pyx_fuse_2__pyx_pw_10pystencils_10boundaries_21createindexlistcython_45create_boundary_cell_index_list_2d(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_flag_field = 0;
+  long __pyx_v_boundary_mask;
+  long __pyx_v_fluid_mask;
+  PyObject *__pyx_v_stencil = 0;
+  int __pyx_v_single_link;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("create_boundary_cell_index_list_2d (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_flag_field,&__pyx_n_s_boundary_mask,&__pyx_n_s_fluid_mask,&__pyx_n_s_stencil,&__pyx_n_s_single_link,0};
+    PyObject* values[5] = {0,0,0,0,0};
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+        CYTHON_FALLTHROUGH;
+        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
+        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_flag_field)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
+        case  1:
+        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_boundary_mask)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_cell_index_list_2d", 1, 5, 5, 1); __PYX_ERR(0, 72, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  2:
+        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_fluid_mask)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_cell_index_list_2d", 1, 5, 5, 2); __PYX_ERR(0, 72, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  3:
+        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_stencil)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_cell_index_list_2d", 1, 5, 5, 3); __PYX_ERR(0, 72, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  4:
+        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_single_link)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_cell_index_list_2d", 1, 5, 5, 4); __PYX_ERR(0, 72, __pyx_L3_error)
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "create_boundary_cell_index_list_2d") < 0)) __PYX_ERR(0, 72, __pyx_L3_error)
+      }
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 5) {
+      goto __pyx_L5_argtuple_error;
+    } else {
+      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+      values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+      values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+    }
+    __pyx_v_flag_field = ((PyObject *)values[0]);
+    __pyx_v_boundary_mask = __Pyx_PyInt_As_long(values[1]); if (unlikely((__pyx_v_boundary_mask == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 73, __pyx_L3_error)
+    __pyx_v_fluid_mask = __Pyx_PyInt_As_long(values[2]); if (unlikely((__pyx_v_fluid_mask == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 73, __pyx_L3_error)
+    __pyx_v_stencil = ((PyObject *)values[3]);
+    __pyx_v_single_link = __Pyx_PyInt_As_int(values[4]); if (unlikely((__pyx_v_single_link == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 74, __pyx_L3_error)
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("create_boundary_cell_index_list_2d", 1, 5, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 72, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("pystencils.boundaries.createindexlistcython.create_boundary_cell_index_list_2d", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_10pystencils_10boundaries_21createindexlistcython_44create_boundary_cell_index_list_2d(__pyx_self, __pyx_v_flag_field, __pyx_v_boundary_mask, __pyx_v_fluid_mask, __pyx_v_stencil, __pyx_v_single_link);
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_10pystencils_10boundaries_21createindexlistcython_44create_boundary_cell_index_list_2d(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_flag_field, long __pyx_v_boundary_mask, long __pyx_v_fluid_mask, PyObject *__pyx_v_stencil, int __pyx_v_single_link) {
+  int __pyx_v_xs;
+  int __pyx_v_ys;
+  int __pyx_v_x;
+  int __pyx_v_y;
+  int __pyx_v_dirIdx;
+  int __pyx_v_num_directions;
+  int __pyx_v_dx;
+  int __pyx_v_dy;
+  PyObject *__pyx_v_boundary_index_list = NULL;
+  __Pyx_LocalBuf_ND __pyx_pybuffernd_flag_field;
+  __Pyx_Buffer __pyx_pybuffer_flag_field;
+  __Pyx_LocalBuf_ND __pyx_pybuffernd_stencil;
+  __Pyx_Buffer __pyx_pybuffer_stencil;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
+  PyObject *(*__pyx_t_5)(PyObject *);
+  int __pyx_t_6;
+  int __pyx_t_7;
+  int __pyx_t_8;
+  int __pyx_t_9;
+  int __pyx_t_10;
+  int __pyx_t_11;
+  Py_ssize_t __pyx_t_12;
+  Py_ssize_t __pyx_t_13;
+  int __pyx_t_14;
+  int __pyx_t_15;
+  int __pyx_t_16;
+  int __pyx_t_17;
+  Py_ssize_t __pyx_t_18;
+  Py_ssize_t __pyx_t_19;
+  Py_ssize_t __pyx_t_20;
+  Py_ssize_t __pyx_t_21;
+  int __pyx_t_22;
+  int __pyx_t_23;
+  int __pyx_t_24;
+  Py_ssize_t __pyx_t_25;
+  Py_ssize_t __pyx_t_26;
+  int __pyx_t_27;
+  __Pyx_RefNannySetupContext("__pyx_fuse_2create_boundary_cell_index_list_2d", 0);
+  __pyx_pybuffer_flag_field.pybuffer.buf = NULL;
+  __pyx_pybuffer_flag_field.refcount = 0;
+  __pyx_pybuffernd_flag_field.data = NULL;
+  __pyx_pybuffernd_flag_field.rcbuffer = &__pyx_pybuffer_flag_field;
+  __pyx_pybuffer_stencil.pybuffer.buf = NULL;
+  __pyx_pybuffer_stencil.refcount = 0;
+  __pyx_pybuffernd_stencil.data = NULL;
+  __pyx_pybuffernd_stencil.rcbuffer = &__pyx_pybuffer_stencil;
+  {
+    __Pyx_BufFmt_StackElem __pyx_stack[1];
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_flag_field.rcbuffer->pybuffer, (PyObject*)__pyx_v_flag_field, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_INDIRECT, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 72, __pyx_L1_error)
+  }
+  __pyx_pybuffernd_flag_field.diminfo[0].strides = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_flag_field.diminfo[0].shape = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_flag_field.diminfo[0].suboffsets = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.suboffsets[0]; __pyx_pybuffernd_flag_field.diminfo[1].strides = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_flag_field.diminfo[1].shape = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_flag_field.diminfo[1].suboffsets = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.suboffsets[1];
+  {
+    __Pyx_BufFmt_StackElem __pyx_stack[1];
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_stencil.rcbuffer->pybuffer, (PyObject*)__pyx_v_stencil, &__Pyx_TypeInfo_int, PyBUF_FORMAT| PyBUF_INDIRECT, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 72, __pyx_L1_error)
+  }
+  __pyx_pybuffernd_stencil.diminfo[0].strides = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_stencil.diminfo[0].shape = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_stencil.diminfo[0].suboffsets = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.suboffsets[0]; __pyx_pybuffernd_stencil.diminfo[1].strides = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_stencil.diminfo[1].shape = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_stencil.diminfo[1].suboffsets = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.suboffsets[1];
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":78
+ *     cdef int dirIdx, num_directions, dx, dy
+ * 
+ *     xs, ys = flag_field.shape             # <<<<<<<<<<<<<<
+ *     boundary_index_list = []
+ *     num_directions = stencil.shape[0]
+ */
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_flag_field), __pyx_n_s_shape); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 78, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) {
+    PyObject* sequence = __pyx_t_1;
+    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
+    if (unlikely(size != 2)) {
+      if (size > 2) __Pyx_RaiseTooManyValuesError(2);
+      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
+      __PYX_ERR(0, 78, __pyx_L1_error)
+    }
+    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+    if (likely(PyTuple_CheckExact(sequence))) {
+      __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
+      __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); 
+    } else {
+      __pyx_t_2 = PyList_GET_ITEM(sequence, 0); 
+      __pyx_t_3 = PyList_GET_ITEM(sequence, 1); 
+    }
+    __Pyx_INCREF(__pyx_t_2);
+    __Pyx_INCREF(__pyx_t_3);
+    #else
+    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 78, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_2);
+    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 78, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    #endif
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  } else {
+    Py_ssize_t index = -1;
+    __pyx_t_4 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 78, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __pyx_t_5 = Py_TYPE(__pyx_t_4)->tp_iternext;
+    index = 0; __pyx_t_2 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_2)) goto __pyx_L3_unpacking_failed;
+    __Pyx_GOTREF(__pyx_t_2);
+    index = 1; __pyx_t_3 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_3)) goto __pyx_L3_unpacking_failed;
+    __Pyx_GOTREF(__pyx_t_3);
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_5(__pyx_t_4), 2) < 0) __PYX_ERR(0, 78, __pyx_L1_error)
+    __pyx_t_5 = NULL;
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    goto __pyx_L4_unpacking_done;
+    __pyx_L3_unpacking_failed:;
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    __pyx_t_5 = NULL;
+    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
+    __PYX_ERR(0, 78, __pyx_L1_error)
+    __pyx_L4_unpacking_done:;
+  }
+  __pyx_t_6 = __Pyx_PyInt_As_int(__pyx_t_2); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 78, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_7 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 78, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __pyx_v_xs = __pyx_t_6;
+  __pyx_v_ys = __pyx_t_7;
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":79
+ * 
+ *     xs, ys = flag_field.shape
+ *     boundary_index_list = []             # <<<<<<<<<<<<<<
+ *     num_directions = stencil.shape[0]
+ * 
+ */
+  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 79, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_boundary_index_list = ((PyObject*)__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":80
+ *     xs, ys = flag_field.shape
+ *     boundary_index_list = []
+ *     num_directions = stencil.shape[0]             # <<<<<<<<<<<<<<
+ * 
+ *     for y in range(0, ys):
+ */
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_stencil), __pyx_n_s_shape); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 80, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_3 = __Pyx_GetItemInt(__pyx_t_1, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 80, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_7 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 80, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __pyx_v_num_directions = __pyx_t_7;
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":82
+ *     num_directions = stencil.shape[0]
+ * 
+ *     for y in range(0, ys):             # <<<<<<<<<<<<<<
+ *         for x in range(0, xs):
+ *             if flag_field[x, y] & boundary_mask:
+ */
+  __pyx_t_7 = __pyx_v_ys;
+  __pyx_t_6 = __pyx_t_7;
+  for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_6; __pyx_t_8+=1) {
+    __pyx_v_y = __pyx_t_8;
+
+    /* "pystencils/boundaries/createindexlistcython.pyx":83
+ * 
+ *     for y in range(0, ys):
+ *         for x in range(0, xs):             # <<<<<<<<<<<<<<
+ *             if flag_field[x, y] & boundary_mask:
+ *                 for dirIdx in range(num_directions):
+ */
+    __pyx_t_9 = __pyx_v_xs;
+    __pyx_t_10 = __pyx_t_9;
+    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {
+      __pyx_v_x = __pyx_t_11;
+
+      /* "pystencils/boundaries/createindexlistcython.pyx":84
+ *     for y in range(0, ys):
+ *         for x in range(0, xs):
+ *             if flag_field[x, y] & boundary_mask:             # <<<<<<<<<<<<<<
+ *                 for dirIdx in range(num_directions):
+ *                     dx = stencil[dirIdx,0]
+ */
+      __pyx_t_12 = __pyx_v_x;
+      __pyx_t_13 = __pyx_v_y;
+      __pyx_t_14 = (((*__Pyx_BufPtrFull2d(long *, __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_flag_field.diminfo[0].strides, __pyx_pybuffernd_flag_field.diminfo[0].suboffsets, __pyx_t_13, __pyx_pybuffernd_flag_field.diminfo[1].strides, __pyx_pybuffernd_flag_field.diminfo[1].suboffsets)) & __pyx_v_boundary_mask) != 0);
+      if (__pyx_t_14) {
+
+        /* "pystencils/boundaries/createindexlistcython.pyx":85
+ *         for x in range(0, xs):
+ *             if flag_field[x, y] & boundary_mask:
+ *                 for dirIdx in range(num_directions):             # <<<<<<<<<<<<<<
+ *                     dx = stencil[dirIdx,0]
+ *                     dy = stencil[dirIdx,1]
+ */
+        __pyx_t_15 = __pyx_v_num_directions;
+        __pyx_t_16 = __pyx_t_15;
+        for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) {
+          __pyx_v_dirIdx = __pyx_t_17;
+
+          /* "pystencils/boundaries/createindexlistcython.pyx":86
+ *             if flag_field[x, y] & boundary_mask:
+ *                 for dirIdx in range(num_directions):
+ *                     dx = stencil[dirIdx,0]             # <<<<<<<<<<<<<<
+ *                     dy = stencil[dirIdx,1]
+ *                     if 0 <= x + dx < xs and 0 <= y + dy < ys:
+ */
+          __pyx_t_18 = __pyx_v_dirIdx;
+          __pyx_t_19 = 0;
+          __pyx_v_dx = (*__Pyx_BufPtrFull2d(int *, __pyx_pybuffernd_stencil.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_stencil.diminfo[0].strides, __pyx_pybuffernd_stencil.diminfo[0].suboffsets, __pyx_t_19, __pyx_pybuffernd_stencil.diminfo[1].strides, __pyx_pybuffernd_stencil.diminfo[1].suboffsets));
+
+          /* "pystencils/boundaries/createindexlistcython.pyx":87
+ *                 for dirIdx in range(num_directions):
+ *                     dx = stencil[dirIdx,0]
+ *                     dy = stencil[dirIdx,1]             # <<<<<<<<<<<<<<
+ *                     if 0 <= x + dx < xs and 0 <= y + dy < ys:
+ *                         if flag_field[x + dx, y + dy] & fluid_mask:
+ */
+          __pyx_t_20 = __pyx_v_dirIdx;
+          __pyx_t_21 = 1;
+          __pyx_v_dy = (*__Pyx_BufPtrFull2d(int *, __pyx_pybuffernd_stencil.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_stencil.diminfo[0].strides, __pyx_pybuffernd_stencil.diminfo[0].suboffsets, __pyx_t_21, __pyx_pybuffernd_stencil.diminfo[1].strides, __pyx_pybuffernd_stencil.diminfo[1].suboffsets));
+
+          /* "pystencils/boundaries/createindexlistcython.pyx":88
+ *                     dx = stencil[dirIdx,0]
+ *                     dy = stencil[dirIdx,1]
+ *                     if 0 <= x + dx < xs and 0 <= y + dy < ys:             # <<<<<<<<<<<<<<
+ *                         if flag_field[x + dx, y + dy] & fluid_mask:
+ *                             boundary_index_list.append((x,y, dirIdx))
+ */
+          __pyx_t_22 = (__pyx_v_x + __pyx_v_dx);
+          __pyx_t_23 = (0 <= __pyx_t_22);
+          if (__pyx_t_23) {
+            __pyx_t_23 = (__pyx_t_22 < __pyx_v_xs);
+          }
+          __pyx_t_24 = (__pyx_t_23 != 0);
+          if (__pyx_t_24) {
+          } else {
+            __pyx_t_14 = __pyx_t_24;
+            goto __pyx_L13_bool_binop_done;
+          }
+          __pyx_t_22 = (__pyx_v_y + __pyx_v_dy);
+          __pyx_t_24 = (0 <= __pyx_t_22);
+          if (__pyx_t_24) {
+            __pyx_t_24 = (__pyx_t_22 < __pyx_v_ys);
+          }
+          __pyx_t_23 = (__pyx_t_24 != 0);
+          __pyx_t_14 = __pyx_t_23;
+          __pyx_L13_bool_binop_done:;
+          if (__pyx_t_14) {
+
+            /* "pystencils/boundaries/createindexlistcython.pyx":89
+ *                     dy = stencil[dirIdx,1]
+ *                     if 0 <= x + dx < xs and 0 <= y + dy < ys:
+ *                         if flag_field[x + dx, y + dy] & fluid_mask:             # <<<<<<<<<<<<<<
+ *                             boundary_index_list.append((x,y, dirIdx))
+ *                             if single_link:
+ */
+            __pyx_t_25 = (__pyx_v_x + __pyx_v_dx);
+            __pyx_t_26 = (__pyx_v_y + __pyx_v_dy);
+            __pyx_t_14 = (((*__Pyx_BufPtrFull2d(long *, __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_flag_field.diminfo[0].strides, __pyx_pybuffernd_flag_field.diminfo[0].suboffsets, __pyx_t_26, __pyx_pybuffernd_flag_field.diminfo[1].strides, __pyx_pybuffernd_flag_field.diminfo[1].suboffsets)) & __pyx_v_fluid_mask) != 0);
+            if (__pyx_t_14) {
+
+              /* "pystencils/boundaries/createindexlistcython.pyx":90
+ *                     if 0 <= x + dx < xs and 0 <= y + dy < ys:
+ *                         if flag_field[x + dx, y + dy] & fluid_mask:
+ *                             boundary_index_list.append((x,y, dirIdx))             # <<<<<<<<<<<<<<
+ *                             if single_link:
+ *                                 break
+ */
+              __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_x); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 90, __pyx_L1_error)
+              __Pyx_GOTREF(__pyx_t_3);
+              __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_y); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 90, __pyx_L1_error)
+              __Pyx_GOTREF(__pyx_t_1);
+              __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_dirIdx); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 90, __pyx_L1_error)
+              __Pyx_GOTREF(__pyx_t_2);
+              __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 90, __pyx_L1_error)
+              __Pyx_GOTREF(__pyx_t_4);
+              __Pyx_GIVEREF(__pyx_t_3);
+              PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3);
+              __Pyx_GIVEREF(__pyx_t_1);
+              PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_1);
+              __Pyx_GIVEREF(__pyx_t_2);
+              PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_t_2);
+              __pyx_t_3 = 0;
+              __pyx_t_1 = 0;
+              __pyx_t_2 = 0;
+              __pyx_t_27 = __Pyx_PyList_Append(__pyx_v_boundary_index_list, __pyx_t_4); if (unlikely(__pyx_t_27 == ((int)-1))) __PYX_ERR(0, 90, __pyx_L1_error)
+              __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+
+              /* "pystencils/boundaries/createindexlistcython.pyx":91
+ *                         if flag_field[x + dx, y + dy] & fluid_mask:
+ *                             boundary_index_list.append((x,y, dirIdx))
+ *                             if single_link:             # <<<<<<<<<<<<<<
+ *                                 break
+ *     return boundary_index_list
+ */
+              __pyx_t_14 = (__pyx_v_single_link != 0);
+              if (__pyx_t_14) {
+
+                /* "pystencils/boundaries/createindexlistcython.pyx":92
+ *                             boundary_index_list.append((x,y, dirIdx))
+ *                             if single_link:
+ *                                 break             # <<<<<<<<<<<<<<
+ *     return boundary_index_list
+ * 
+ */
+                goto __pyx_L11_break;
+
+                /* "pystencils/boundaries/createindexlistcython.pyx":91
+ *                         if flag_field[x + dx, y + dy] & fluid_mask:
+ *                             boundary_index_list.append((x,y, dirIdx))
+ *                             if single_link:             # <<<<<<<<<<<<<<
+ *                                 break
+ *     return boundary_index_list
+ */
+              }
+
+              /* "pystencils/boundaries/createindexlistcython.pyx":89
+ *                     dy = stencil[dirIdx,1]
+ *                     if 0 <= x + dx < xs and 0 <= y + dy < ys:
+ *                         if flag_field[x + dx, y + dy] & fluid_mask:             # <<<<<<<<<<<<<<
+ *                             boundary_index_list.append((x,y, dirIdx))
+ *                             if single_link:
+ */
+            }
+
+            /* "pystencils/boundaries/createindexlistcython.pyx":88
+ *                     dx = stencil[dirIdx,0]
+ *                     dy = stencil[dirIdx,1]
+ *                     if 0 <= x + dx < xs and 0 <= y + dy < ys:             # <<<<<<<<<<<<<<
+ *                         if flag_field[x + dx, y + dy] & fluid_mask:
+ *                             boundary_index_list.append((x,y, dirIdx))
+ */
+          }
+        }
+        __pyx_L11_break:;
+
+        /* "pystencils/boundaries/createindexlistcython.pyx":84
+ *     for y in range(0, ys):
+ *         for x in range(0, xs):
+ *             if flag_field[x, y] & boundary_mask:             # <<<<<<<<<<<<<<
+ *                 for dirIdx in range(num_directions):
+ *                     dx = stencil[dirIdx,0]
+ */
+      }
+    }
+  }
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":93
+ *                             if single_link:
+ *                                 break
+ *     return boundary_index_list             # <<<<<<<<<<<<<<
+ * 
+ * 
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(__pyx_v_boundary_index_list);
+  __pyx_r = __pyx_v_boundary_index_list;
+  goto __pyx_L0;
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":72
+ * @cython.boundscheck(False) # turn off bounds-checking for entire function
+ * @cython.wraparound(False)  # turn off negative index wrapping for entire function
+ * def create_boundary_cell_index_list_2d(object[IntegerType, ndim=2] flag_field,             # <<<<<<<<<<<<<<
+ *                                        IntegerType boundary_mask, IntegerType fluid_mask,
+ *                                        object[int, ndim=2] stencil, int single_link):
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_4);
+  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
+    __Pyx_PyThreadState_declare
+    __Pyx_PyThreadState_assign
+    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
+    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_flag_field.rcbuffer->pybuffer);
+    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_stencil.rcbuffer->pybuffer);
+  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
+  __Pyx_AddTraceback("pystencils.boundaries.createindexlistcython.create_boundary_cell_index_list_2d", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  goto __pyx_L2;
+  __pyx_L0:;
+  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_flag_field.rcbuffer->pybuffer);
+  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_stencil.rcbuffer->pybuffer);
+  __pyx_L2:;
+  __Pyx_XDECREF(__pyx_v_boundary_index_list);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static PyObject *__pyx_fuse_3__pyx_pw_10pystencils_10boundaries_21createindexlistcython_47create_boundary_cell_index_list_2d(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyMethodDef __pyx_fuse_3__pyx_mdef_10pystencils_10boundaries_21createindexlistcython_47create_boundary_cell_index_list_2d = {"__pyx_fuse_3create_boundary_cell_index_list_2d", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_fuse_3__pyx_pw_10pystencils_10boundaries_21createindexlistcython_47create_boundary_cell_index_list_2d, METH_VARARGS|METH_KEYWORDS, 0};
+static PyObject *__pyx_fuse_3__pyx_pw_10pystencils_10boundaries_21createindexlistcython_47create_boundary_cell_index_list_2d(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_flag_field = 0;
+  PY_LONG_LONG __pyx_v_boundary_mask;
+  PY_LONG_LONG __pyx_v_fluid_mask;
+  PyObject *__pyx_v_stencil = 0;
+  int __pyx_v_single_link;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("create_boundary_cell_index_list_2d (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_flag_field,&__pyx_n_s_boundary_mask,&__pyx_n_s_fluid_mask,&__pyx_n_s_stencil,&__pyx_n_s_single_link,0};
+    PyObject* values[5] = {0,0,0,0,0};
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+        CYTHON_FALLTHROUGH;
+        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
+        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_flag_field)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
+        case  1:
+        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_boundary_mask)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_cell_index_list_2d", 1, 5, 5, 1); __PYX_ERR(0, 72, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  2:
+        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_fluid_mask)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_cell_index_list_2d", 1, 5, 5, 2); __PYX_ERR(0, 72, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  3:
+        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_stencil)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_cell_index_list_2d", 1, 5, 5, 3); __PYX_ERR(0, 72, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  4:
+        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_single_link)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_cell_index_list_2d", 1, 5, 5, 4); __PYX_ERR(0, 72, __pyx_L3_error)
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "create_boundary_cell_index_list_2d") < 0)) __PYX_ERR(0, 72, __pyx_L3_error)
+      }
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 5) {
+      goto __pyx_L5_argtuple_error;
+    } else {
+      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+      values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+      values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+    }
+    __pyx_v_flag_field = ((PyObject *)values[0]);
+    __pyx_v_boundary_mask = __Pyx_PyInt_As_PY_LONG_LONG(values[1]); if (unlikely((__pyx_v_boundary_mask == (PY_LONG_LONG)-1) && PyErr_Occurred())) __PYX_ERR(0, 73, __pyx_L3_error)
+    __pyx_v_fluid_mask = __Pyx_PyInt_As_PY_LONG_LONG(values[2]); if (unlikely((__pyx_v_fluid_mask == (PY_LONG_LONG)-1) && PyErr_Occurred())) __PYX_ERR(0, 73, __pyx_L3_error)
+    __pyx_v_stencil = ((PyObject *)values[3]);
+    __pyx_v_single_link = __Pyx_PyInt_As_int(values[4]); if (unlikely((__pyx_v_single_link == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 74, __pyx_L3_error)
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("create_boundary_cell_index_list_2d", 1, 5, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 72, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("pystencils.boundaries.createindexlistcython.create_boundary_cell_index_list_2d", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_10pystencils_10boundaries_21createindexlistcython_46create_boundary_cell_index_list_2d(__pyx_self, __pyx_v_flag_field, __pyx_v_boundary_mask, __pyx_v_fluid_mask, __pyx_v_stencil, __pyx_v_single_link);
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_10pystencils_10boundaries_21createindexlistcython_46create_boundary_cell_index_list_2d(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_flag_field, PY_LONG_LONG __pyx_v_boundary_mask, PY_LONG_LONG __pyx_v_fluid_mask, PyObject *__pyx_v_stencil, int __pyx_v_single_link) {
+  int __pyx_v_xs;
+  int __pyx_v_ys;
+  int __pyx_v_x;
+  int __pyx_v_y;
+  int __pyx_v_dirIdx;
+  int __pyx_v_num_directions;
+  int __pyx_v_dx;
+  int __pyx_v_dy;
+  PyObject *__pyx_v_boundary_index_list = NULL;
+  __Pyx_LocalBuf_ND __pyx_pybuffernd_flag_field;
+  __Pyx_Buffer __pyx_pybuffer_flag_field;
+  __Pyx_LocalBuf_ND __pyx_pybuffernd_stencil;
+  __Pyx_Buffer __pyx_pybuffer_stencil;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
+  PyObject *(*__pyx_t_5)(PyObject *);
+  int __pyx_t_6;
+  int __pyx_t_7;
+  int __pyx_t_8;
+  int __pyx_t_9;
+  int __pyx_t_10;
+  int __pyx_t_11;
+  Py_ssize_t __pyx_t_12;
+  Py_ssize_t __pyx_t_13;
+  int __pyx_t_14;
+  int __pyx_t_15;
+  int __pyx_t_16;
+  int __pyx_t_17;
+  Py_ssize_t __pyx_t_18;
+  Py_ssize_t __pyx_t_19;
+  Py_ssize_t __pyx_t_20;
+  Py_ssize_t __pyx_t_21;
+  int __pyx_t_22;
+  int __pyx_t_23;
+  int __pyx_t_24;
+  Py_ssize_t __pyx_t_25;
+  Py_ssize_t __pyx_t_26;
+  int __pyx_t_27;
+  __Pyx_RefNannySetupContext("__pyx_fuse_3create_boundary_cell_index_list_2d", 0);
+  __pyx_pybuffer_flag_field.pybuffer.buf = NULL;
+  __pyx_pybuffer_flag_field.refcount = 0;
+  __pyx_pybuffernd_flag_field.data = NULL;
+  __pyx_pybuffernd_flag_field.rcbuffer = &__pyx_pybuffer_flag_field;
+  __pyx_pybuffer_stencil.pybuffer.buf = NULL;
+  __pyx_pybuffer_stencil.refcount = 0;
+  __pyx_pybuffernd_stencil.data = NULL;
+  __pyx_pybuffernd_stencil.rcbuffer = &__pyx_pybuffer_stencil;
+  {
+    __Pyx_BufFmt_StackElem __pyx_stack[1];
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_flag_field.rcbuffer->pybuffer, (PyObject*)__pyx_v_flag_field, &__Pyx_TypeInfo_PY_LONG_LONG, PyBUF_FORMAT| PyBUF_INDIRECT, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 72, __pyx_L1_error)
+  }
+  __pyx_pybuffernd_flag_field.diminfo[0].strides = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_flag_field.diminfo[0].shape = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_flag_field.diminfo[0].suboffsets = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.suboffsets[0]; __pyx_pybuffernd_flag_field.diminfo[1].strides = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_flag_field.diminfo[1].shape = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_flag_field.diminfo[1].suboffsets = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.suboffsets[1];
+  {
+    __Pyx_BufFmt_StackElem __pyx_stack[1];
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_stencil.rcbuffer->pybuffer, (PyObject*)__pyx_v_stencil, &__Pyx_TypeInfo_int, PyBUF_FORMAT| PyBUF_INDIRECT, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 72, __pyx_L1_error)
+  }
+  __pyx_pybuffernd_stencil.diminfo[0].strides = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_stencil.diminfo[0].shape = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_stencil.diminfo[0].suboffsets = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.suboffsets[0]; __pyx_pybuffernd_stencil.diminfo[1].strides = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_stencil.diminfo[1].shape = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_stencil.diminfo[1].suboffsets = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.suboffsets[1];
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":78
+ *     cdef int dirIdx, num_directions, dx, dy
+ * 
+ *     xs, ys = flag_field.shape             # <<<<<<<<<<<<<<
+ *     boundary_index_list = []
+ *     num_directions = stencil.shape[0]
+ */
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_flag_field), __pyx_n_s_shape); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 78, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) {
+    PyObject* sequence = __pyx_t_1;
+    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
+    if (unlikely(size != 2)) {
+      if (size > 2) __Pyx_RaiseTooManyValuesError(2);
+      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
+      __PYX_ERR(0, 78, __pyx_L1_error)
+    }
+    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+    if (likely(PyTuple_CheckExact(sequence))) {
+      __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
+      __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); 
+    } else {
+      __pyx_t_2 = PyList_GET_ITEM(sequence, 0); 
+      __pyx_t_3 = PyList_GET_ITEM(sequence, 1); 
+    }
+    __Pyx_INCREF(__pyx_t_2);
+    __Pyx_INCREF(__pyx_t_3);
+    #else
+    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 78, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_2);
+    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 78, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    #endif
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  } else {
+    Py_ssize_t index = -1;
+    __pyx_t_4 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 78, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __pyx_t_5 = Py_TYPE(__pyx_t_4)->tp_iternext;
+    index = 0; __pyx_t_2 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_2)) goto __pyx_L3_unpacking_failed;
+    __Pyx_GOTREF(__pyx_t_2);
+    index = 1; __pyx_t_3 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_3)) goto __pyx_L3_unpacking_failed;
+    __Pyx_GOTREF(__pyx_t_3);
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_5(__pyx_t_4), 2) < 0) __PYX_ERR(0, 78, __pyx_L1_error)
+    __pyx_t_5 = NULL;
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    goto __pyx_L4_unpacking_done;
+    __pyx_L3_unpacking_failed:;
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    __pyx_t_5 = NULL;
+    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
+    __PYX_ERR(0, 78, __pyx_L1_error)
+    __pyx_L4_unpacking_done:;
+  }
+  __pyx_t_6 = __Pyx_PyInt_As_int(__pyx_t_2); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 78, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_7 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 78, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __pyx_v_xs = __pyx_t_6;
+  __pyx_v_ys = __pyx_t_7;
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":79
+ * 
+ *     xs, ys = flag_field.shape
+ *     boundary_index_list = []             # <<<<<<<<<<<<<<
+ *     num_directions = stencil.shape[0]
+ * 
+ */
+  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 79, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_boundary_index_list = ((PyObject*)__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":80
+ *     xs, ys = flag_field.shape
+ *     boundary_index_list = []
+ *     num_directions = stencil.shape[0]             # <<<<<<<<<<<<<<
+ * 
+ *     for y in range(0, ys):
+ */
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_stencil), __pyx_n_s_shape); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 80, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_3 = __Pyx_GetItemInt(__pyx_t_1, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 80, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_7 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 80, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __pyx_v_num_directions = __pyx_t_7;
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":82
+ *     num_directions = stencil.shape[0]
+ * 
+ *     for y in range(0, ys):             # <<<<<<<<<<<<<<
+ *         for x in range(0, xs):
+ *             if flag_field[x, y] & boundary_mask:
+ */
+  __pyx_t_7 = __pyx_v_ys;
+  __pyx_t_6 = __pyx_t_7;
+  for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_6; __pyx_t_8+=1) {
+    __pyx_v_y = __pyx_t_8;
+
+    /* "pystencils/boundaries/createindexlistcython.pyx":83
+ * 
+ *     for y in range(0, ys):
+ *         for x in range(0, xs):             # <<<<<<<<<<<<<<
+ *             if flag_field[x, y] & boundary_mask:
+ *                 for dirIdx in range(num_directions):
+ */
+    __pyx_t_9 = __pyx_v_xs;
+    __pyx_t_10 = __pyx_t_9;
+    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {
+      __pyx_v_x = __pyx_t_11;
+
+      /* "pystencils/boundaries/createindexlistcython.pyx":84
+ *     for y in range(0, ys):
+ *         for x in range(0, xs):
+ *             if flag_field[x, y] & boundary_mask:             # <<<<<<<<<<<<<<
+ *                 for dirIdx in range(num_directions):
+ *                     dx = stencil[dirIdx,0]
+ */
+      __pyx_t_12 = __pyx_v_x;
+      __pyx_t_13 = __pyx_v_y;
+      __pyx_t_14 = (((*__Pyx_BufPtrFull2d(PY_LONG_LONG *, __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_flag_field.diminfo[0].strides, __pyx_pybuffernd_flag_field.diminfo[0].suboffsets, __pyx_t_13, __pyx_pybuffernd_flag_field.diminfo[1].strides, __pyx_pybuffernd_flag_field.diminfo[1].suboffsets)) & __pyx_v_boundary_mask) != 0);
+      if (__pyx_t_14) {
+
+        /* "pystencils/boundaries/createindexlistcython.pyx":85
+ *         for x in range(0, xs):
+ *             if flag_field[x, y] & boundary_mask:
+ *                 for dirIdx in range(num_directions):             # <<<<<<<<<<<<<<
+ *                     dx = stencil[dirIdx,0]
+ *                     dy = stencil[dirIdx,1]
+ */
+        __pyx_t_15 = __pyx_v_num_directions;
+        __pyx_t_16 = __pyx_t_15;
+        for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) {
+          __pyx_v_dirIdx = __pyx_t_17;
+
+          /* "pystencils/boundaries/createindexlistcython.pyx":86
+ *             if flag_field[x, y] & boundary_mask:
+ *                 for dirIdx in range(num_directions):
+ *                     dx = stencil[dirIdx,0]             # <<<<<<<<<<<<<<
+ *                     dy = stencil[dirIdx,1]
+ *                     if 0 <= x + dx < xs and 0 <= y + dy < ys:
+ */
+          __pyx_t_18 = __pyx_v_dirIdx;
+          __pyx_t_19 = 0;
+          __pyx_v_dx = (*__Pyx_BufPtrFull2d(int *, __pyx_pybuffernd_stencil.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_stencil.diminfo[0].strides, __pyx_pybuffernd_stencil.diminfo[0].suboffsets, __pyx_t_19, __pyx_pybuffernd_stencil.diminfo[1].strides, __pyx_pybuffernd_stencil.diminfo[1].suboffsets));
+
+          /* "pystencils/boundaries/createindexlistcython.pyx":87
+ *                 for dirIdx in range(num_directions):
+ *                     dx = stencil[dirIdx,0]
+ *                     dy = stencil[dirIdx,1]             # <<<<<<<<<<<<<<
+ *                     if 0 <= x + dx < xs and 0 <= y + dy < ys:
+ *                         if flag_field[x + dx, y + dy] & fluid_mask:
+ */
+          __pyx_t_20 = __pyx_v_dirIdx;
+          __pyx_t_21 = 1;
+          __pyx_v_dy = (*__Pyx_BufPtrFull2d(int *, __pyx_pybuffernd_stencil.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_stencil.diminfo[0].strides, __pyx_pybuffernd_stencil.diminfo[0].suboffsets, __pyx_t_21, __pyx_pybuffernd_stencil.diminfo[1].strides, __pyx_pybuffernd_stencil.diminfo[1].suboffsets));
+
+          /* "pystencils/boundaries/createindexlistcython.pyx":88
+ *                     dx = stencil[dirIdx,0]
+ *                     dy = stencil[dirIdx,1]
+ *                     if 0 <= x + dx < xs and 0 <= y + dy < ys:             # <<<<<<<<<<<<<<
+ *                         if flag_field[x + dx, y + dy] & fluid_mask:
+ *                             boundary_index_list.append((x,y, dirIdx))
+ */
+          __pyx_t_22 = (__pyx_v_x + __pyx_v_dx);
+          __pyx_t_23 = (0 <= __pyx_t_22);
+          if (__pyx_t_23) {
+            __pyx_t_23 = (__pyx_t_22 < __pyx_v_xs);
+          }
+          __pyx_t_24 = (__pyx_t_23 != 0);
+          if (__pyx_t_24) {
+          } else {
+            __pyx_t_14 = __pyx_t_24;
+            goto __pyx_L13_bool_binop_done;
+          }
+          __pyx_t_22 = (__pyx_v_y + __pyx_v_dy);
+          __pyx_t_24 = (0 <= __pyx_t_22);
+          if (__pyx_t_24) {
+            __pyx_t_24 = (__pyx_t_22 < __pyx_v_ys);
+          }
+          __pyx_t_23 = (__pyx_t_24 != 0);
+          __pyx_t_14 = __pyx_t_23;
+          __pyx_L13_bool_binop_done:;
+          if (__pyx_t_14) {
+
+            /* "pystencils/boundaries/createindexlistcython.pyx":89
+ *                     dy = stencil[dirIdx,1]
+ *                     if 0 <= x + dx < xs and 0 <= y + dy < ys:
+ *                         if flag_field[x + dx, y + dy] & fluid_mask:             # <<<<<<<<<<<<<<
+ *                             boundary_index_list.append((x,y, dirIdx))
+ *                             if single_link:
+ */
+            __pyx_t_25 = (__pyx_v_x + __pyx_v_dx);
+            __pyx_t_26 = (__pyx_v_y + __pyx_v_dy);
+            __pyx_t_14 = (((*__Pyx_BufPtrFull2d(PY_LONG_LONG *, __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_flag_field.diminfo[0].strides, __pyx_pybuffernd_flag_field.diminfo[0].suboffsets, __pyx_t_26, __pyx_pybuffernd_flag_field.diminfo[1].strides, __pyx_pybuffernd_flag_field.diminfo[1].suboffsets)) & __pyx_v_fluid_mask) != 0);
+            if (__pyx_t_14) {
+
+              /* "pystencils/boundaries/createindexlistcython.pyx":90
+ *                     if 0 <= x + dx < xs and 0 <= y + dy < ys:
+ *                         if flag_field[x + dx, y + dy] & fluid_mask:
+ *                             boundary_index_list.append((x,y, dirIdx))             # <<<<<<<<<<<<<<
+ *                             if single_link:
+ *                                 break
+ */
+              __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_x); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 90, __pyx_L1_error)
+              __Pyx_GOTREF(__pyx_t_3);
+              __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_y); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 90, __pyx_L1_error)
+              __Pyx_GOTREF(__pyx_t_1);
+              __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_dirIdx); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 90, __pyx_L1_error)
+              __Pyx_GOTREF(__pyx_t_2);
+              __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 90, __pyx_L1_error)
+              __Pyx_GOTREF(__pyx_t_4);
+              __Pyx_GIVEREF(__pyx_t_3);
+              PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3);
+              __Pyx_GIVEREF(__pyx_t_1);
+              PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_1);
+              __Pyx_GIVEREF(__pyx_t_2);
+              PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_t_2);
+              __pyx_t_3 = 0;
+              __pyx_t_1 = 0;
+              __pyx_t_2 = 0;
+              __pyx_t_27 = __Pyx_PyList_Append(__pyx_v_boundary_index_list, __pyx_t_4); if (unlikely(__pyx_t_27 == ((int)-1))) __PYX_ERR(0, 90, __pyx_L1_error)
+              __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+
+              /* "pystencils/boundaries/createindexlistcython.pyx":91
+ *                         if flag_field[x + dx, y + dy] & fluid_mask:
+ *                             boundary_index_list.append((x,y, dirIdx))
+ *                             if single_link:             # <<<<<<<<<<<<<<
+ *                                 break
+ *     return boundary_index_list
+ */
+              __pyx_t_14 = (__pyx_v_single_link != 0);
+              if (__pyx_t_14) {
+
+                /* "pystencils/boundaries/createindexlistcython.pyx":92
+ *                             boundary_index_list.append((x,y, dirIdx))
+ *                             if single_link:
+ *                                 break             # <<<<<<<<<<<<<<
+ *     return boundary_index_list
+ * 
+ */
+                goto __pyx_L11_break;
+
+                /* "pystencils/boundaries/createindexlistcython.pyx":91
+ *                         if flag_field[x + dx, y + dy] & fluid_mask:
+ *                             boundary_index_list.append((x,y, dirIdx))
+ *                             if single_link:             # <<<<<<<<<<<<<<
+ *                                 break
+ *     return boundary_index_list
+ */
+              }
+
+              /* "pystencils/boundaries/createindexlistcython.pyx":89
+ *                     dy = stencil[dirIdx,1]
+ *                     if 0 <= x + dx < xs and 0 <= y + dy < ys:
+ *                         if flag_field[x + dx, y + dy] & fluid_mask:             # <<<<<<<<<<<<<<
+ *                             boundary_index_list.append((x,y, dirIdx))
+ *                             if single_link:
+ */
+            }
+
+            /* "pystencils/boundaries/createindexlistcython.pyx":88
+ *                     dx = stencil[dirIdx,0]
+ *                     dy = stencil[dirIdx,1]
+ *                     if 0 <= x + dx < xs and 0 <= y + dy < ys:             # <<<<<<<<<<<<<<
+ *                         if flag_field[x + dx, y + dy] & fluid_mask:
+ *                             boundary_index_list.append((x,y, dirIdx))
+ */
+          }
+        }
+        __pyx_L11_break:;
+
+        /* "pystencils/boundaries/createindexlistcython.pyx":84
+ *     for y in range(0, ys):
+ *         for x in range(0, xs):
+ *             if flag_field[x, y] & boundary_mask:             # <<<<<<<<<<<<<<
+ *                 for dirIdx in range(num_directions):
+ *                     dx = stencil[dirIdx,0]
+ */
+      }
+    }
+  }
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":93
+ *                             if single_link:
+ *                                 break
+ *     return boundary_index_list             # <<<<<<<<<<<<<<
+ * 
+ * 
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(__pyx_v_boundary_index_list);
+  __pyx_r = __pyx_v_boundary_index_list;
+  goto __pyx_L0;
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":72
+ * @cython.boundscheck(False) # turn off bounds-checking for entire function
+ * @cython.wraparound(False)  # turn off negative index wrapping for entire function
+ * def create_boundary_cell_index_list_2d(object[IntegerType, ndim=2] flag_field,             # <<<<<<<<<<<<<<
+ *                                        IntegerType boundary_mask, IntegerType fluid_mask,
+ *                                        object[int, ndim=2] stencil, int single_link):
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_4);
+  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
+    __Pyx_PyThreadState_declare
+    __Pyx_PyThreadState_assign
+    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
+    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_flag_field.rcbuffer->pybuffer);
+    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_stencil.rcbuffer->pybuffer);
+  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
+  __Pyx_AddTraceback("pystencils.boundaries.createindexlistcython.create_boundary_cell_index_list_2d", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  goto __pyx_L2;
+  __pyx_L0:;
+  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_flag_field.rcbuffer->pybuffer);
+  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_stencil.rcbuffer->pybuffer);
+  __pyx_L2:;
+  __Pyx_XDECREF(__pyx_v_boundary_index_list);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static PyObject *__pyx_fuse_4__pyx_pw_10pystencils_10boundaries_21createindexlistcython_49create_boundary_cell_index_list_2d(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyMethodDef __pyx_fuse_4__pyx_mdef_10pystencils_10boundaries_21createindexlistcython_49create_boundary_cell_index_list_2d = {"__pyx_fuse_4create_boundary_cell_index_list_2d", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_fuse_4__pyx_pw_10pystencils_10boundaries_21createindexlistcython_49create_boundary_cell_index_list_2d, METH_VARARGS|METH_KEYWORDS, 0};
+static PyObject *__pyx_fuse_4__pyx_pw_10pystencils_10boundaries_21createindexlistcython_49create_boundary_cell_index_list_2d(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_flag_field = 0;
+  unsigned short __pyx_v_boundary_mask;
+  unsigned short __pyx_v_fluid_mask;
+  PyObject *__pyx_v_stencil = 0;
+  int __pyx_v_single_link;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("create_boundary_cell_index_list_2d (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_flag_field,&__pyx_n_s_boundary_mask,&__pyx_n_s_fluid_mask,&__pyx_n_s_stencil,&__pyx_n_s_single_link,0};
+    PyObject* values[5] = {0,0,0,0,0};
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+        CYTHON_FALLTHROUGH;
+        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
+        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_flag_field)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
+        case  1:
+        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_boundary_mask)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_cell_index_list_2d", 1, 5, 5, 1); __PYX_ERR(0, 72, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  2:
+        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_fluid_mask)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_cell_index_list_2d", 1, 5, 5, 2); __PYX_ERR(0, 72, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  3:
+        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_stencil)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_cell_index_list_2d", 1, 5, 5, 3); __PYX_ERR(0, 72, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  4:
+        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_single_link)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_cell_index_list_2d", 1, 5, 5, 4); __PYX_ERR(0, 72, __pyx_L3_error)
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "create_boundary_cell_index_list_2d") < 0)) __PYX_ERR(0, 72, __pyx_L3_error)
+      }
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 5) {
+      goto __pyx_L5_argtuple_error;
+    } else {
+      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+      values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+      values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+    }
+    __pyx_v_flag_field = ((PyObject *)values[0]);
+    __pyx_v_boundary_mask = __Pyx_PyInt_As_unsigned_short(values[1]); if (unlikely((__pyx_v_boundary_mask == (unsigned short)-1) && PyErr_Occurred())) __PYX_ERR(0, 73, __pyx_L3_error)
+    __pyx_v_fluid_mask = __Pyx_PyInt_As_unsigned_short(values[2]); if (unlikely((__pyx_v_fluid_mask == (unsigned short)-1) && PyErr_Occurred())) __PYX_ERR(0, 73, __pyx_L3_error)
+    __pyx_v_stencil = ((PyObject *)values[3]);
+    __pyx_v_single_link = __Pyx_PyInt_As_int(values[4]); if (unlikely((__pyx_v_single_link == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 74, __pyx_L3_error)
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("create_boundary_cell_index_list_2d", 1, 5, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 72, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("pystencils.boundaries.createindexlistcython.create_boundary_cell_index_list_2d", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_10pystencils_10boundaries_21createindexlistcython_48create_boundary_cell_index_list_2d(__pyx_self, __pyx_v_flag_field, __pyx_v_boundary_mask, __pyx_v_fluid_mask, __pyx_v_stencil, __pyx_v_single_link);
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_10pystencils_10boundaries_21createindexlistcython_48create_boundary_cell_index_list_2d(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_flag_field, unsigned short __pyx_v_boundary_mask, unsigned short __pyx_v_fluid_mask, PyObject *__pyx_v_stencil, int __pyx_v_single_link) {
+  int __pyx_v_xs;
+  int __pyx_v_ys;
+  int __pyx_v_x;
+  int __pyx_v_y;
+  int __pyx_v_dirIdx;
+  int __pyx_v_num_directions;
+  int __pyx_v_dx;
+  int __pyx_v_dy;
+  PyObject *__pyx_v_boundary_index_list = NULL;
+  __Pyx_LocalBuf_ND __pyx_pybuffernd_flag_field;
+  __Pyx_Buffer __pyx_pybuffer_flag_field;
+  __Pyx_LocalBuf_ND __pyx_pybuffernd_stencil;
+  __Pyx_Buffer __pyx_pybuffer_stencil;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
+  PyObject *(*__pyx_t_5)(PyObject *);
+  int __pyx_t_6;
+  int __pyx_t_7;
+  int __pyx_t_8;
+  int __pyx_t_9;
+  int __pyx_t_10;
+  int __pyx_t_11;
+  Py_ssize_t __pyx_t_12;
+  Py_ssize_t __pyx_t_13;
+  int __pyx_t_14;
+  int __pyx_t_15;
+  int __pyx_t_16;
+  int __pyx_t_17;
+  Py_ssize_t __pyx_t_18;
+  Py_ssize_t __pyx_t_19;
+  Py_ssize_t __pyx_t_20;
+  Py_ssize_t __pyx_t_21;
+  int __pyx_t_22;
+  int __pyx_t_23;
+  int __pyx_t_24;
+  Py_ssize_t __pyx_t_25;
+  Py_ssize_t __pyx_t_26;
+  int __pyx_t_27;
+  __Pyx_RefNannySetupContext("__pyx_fuse_4create_boundary_cell_index_list_2d", 0);
+  __pyx_pybuffer_flag_field.pybuffer.buf = NULL;
+  __pyx_pybuffer_flag_field.refcount = 0;
+  __pyx_pybuffernd_flag_field.data = NULL;
+  __pyx_pybuffernd_flag_field.rcbuffer = &__pyx_pybuffer_flag_field;
+  __pyx_pybuffer_stencil.pybuffer.buf = NULL;
+  __pyx_pybuffer_stencil.refcount = 0;
+  __pyx_pybuffernd_stencil.data = NULL;
+  __pyx_pybuffernd_stencil.rcbuffer = &__pyx_pybuffer_stencil;
+  {
+    __Pyx_BufFmt_StackElem __pyx_stack[1];
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_flag_field.rcbuffer->pybuffer, (PyObject*)__pyx_v_flag_field, &__Pyx_TypeInfo_unsigned_short, PyBUF_FORMAT| PyBUF_INDIRECT, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 72, __pyx_L1_error)
+  }
+  __pyx_pybuffernd_flag_field.diminfo[0].strides = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_flag_field.diminfo[0].shape = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_flag_field.diminfo[0].suboffsets = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.suboffsets[0]; __pyx_pybuffernd_flag_field.diminfo[1].strides = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_flag_field.diminfo[1].shape = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_flag_field.diminfo[1].suboffsets = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.suboffsets[1];
+  {
+    __Pyx_BufFmt_StackElem __pyx_stack[1];
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_stencil.rcbuffer->pybuffer, (PyObject*)__pyx_v_stencil, &__Pyx_TypeInfo_int, PyBUF_FORMAT| PyBUF_INDIRECT, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 72, __pyx_L1_error)
+  }
+  __pyx_pybuffernd_stencil.diminfo[0].strides = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_stencil.diminfo[0].shape = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_stencil.diminfo[0].suboffsets = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.suboffsets[0]; __pyx_pybuffernd_stencil.diminfo[1].strides = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_stencil.diminfo[1].shape = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_stencil.diminfo[1].suboffsets = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.suboffsets[1];
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":78
+ *     cdef int dirIdx, num_directions, dx, dy
+ * 
+ *     xs, ys = flag_field.shape             # <<<<<<<<<<<<<<
+ *     boundary_index_list = []
+ *     num_directions = stencil.shape[0]
+ */
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_flag_field), __pyx_n_s_shape); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 78, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) {
+    PyObject* sequence = __pyx_t_1;
+    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
+    if (unlikely(size != 2)) {
+      if (size > 2) __Pyx_RaiseTooManyValuesError(2);
+      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
+      __PYX_ERR(0, 78, __pyx_L1_error)
+    }
+    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+    if (likely(PyTuple_CheckExact(sequence))) {
+      __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
+      __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); 
+    } else {
+      __pyx_t_2 = PyList_GET_ITEM(sequence, 0); 
+      __pyx_t_3 = PyList_GET_ITEM(sequence, 1); 
+    }
+    __Pyx_INCREF(__pyx_t_2);
+    __Pyx_INCREF(__pyx_t_3);
+    #else
+    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 78, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_2);
+    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 78, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    #endif
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  } else {
+    Py_ssize_t index = -1;
+    __pyx_t_4 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 78, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __pyx_t_5 = Py_TYPE(__pyx_t_4)->tp_iternext;
+    index = 0; __pyx_t_2 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_2)) goto __pyx_L3_unpacking_failed;
+    __Pyx_GOTREF(__pyx_t_2);
+    index = 1; __pyx_t_3 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_3)) goto __pyx_L3_unpacking_failed;
+    __Pyx_GOTREF(__pyx_t_3);
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_5(__pyx_t_4), 2) < 0) __PYX_ERR(0, 78, __pyx_L1_error)
+    __pyx_t_5 = NULL;
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    goto __pyx_L4_unpacking_done;
+    __pyx_L3_unpacking_failed:;
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    __pyx_t_5 = NULL;
+    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
+    __PYX_ERR(0, 78, __pyx_L1_error)
+    __pyx_L4_unpacking_done:;
+  }
+  __pyx_t_6 = __Pyx_PyInt_As_int(__pyx_t_2); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 78, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_7 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 78, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __pyx_v_xs = __pyx_t_6;
+  __pyx_v_ys = __pyx_t_7;
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":79
+ * 
+ *     xs, ys = flag_field.shape
+ *     boundary_index_list = []             # <<<<<<<<<<<<<<
+ *     num_directions = stencil.shape[0]
+ * 
+ */
+  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 79, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_boundary_index_list = ((PyObject*)__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":80
+ *     xs, ys = flag_field.shape
+ *     boundary_index_list = []
+ *     num_directions = stencil.shape[0]             # <<<<<<<<<<<<<<
+ * 
+ *     for y in range(0, ys):
+ */
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_stencil), __pyx_n_s_shape); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 80, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_3 = __Pyx_GetItemInt(__pyx_t_1, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 80, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_7 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 80, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __pyx_v_num_directions = __pyx_t_7;
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":82
+ *     num_directions = stencil.shape[0]
+ * 
+ *     for y in range(0, ys):             # <<<<<<<<<<<<<<
+ *         for x in range(0, xs):
+ *             if flag_field[x, y] & boundary_mask:
+ */
+  __pyx_t_7 = __pyx_v_ys;
+  __pyx_t_6 = __pyx_t_7;
+  for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_6; __pyx_t_8+=1) {
+    __pyx_v_y = __pyx_t_8;
+
+    /* "pystencils/boundaries/createindexlistcython.pyx":83
+ * 
+ *     for y in range(0, ys):
+ *         for x in range(0, xs):             # <<<<<<<<<<<<<<
+ *             if flag_field[x, y] & boundary_mask:
+ *                 for dirIdx in range(num_directions):
+ */
+    __pyx_t_9 = __pyx_v_xs;
+    __pyx_t_10 = __pyx_t_9;
+    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {
+      __pyx_v_x = __pyx_t_11;
+
+      /* "pystencils/boundaries/createindexlistcython.pyx":84
+ *     for y in range(0, ys):
+ *         for x in range(0, xs):
+ *             if flag_field[x, y] & boundary_mask:             # <<<<<<<<<<<<<<
+ *                 for dirIdx in range(num_directions):
+ *                     dx = stencil[dirIdx,0]
+ */
+      __pyx_t_12 = __pyx_v_x;
+      __pyx_t_13 = __pyx_v_y;
+      __pyx_t_14 = (((*__Pyx_BufPtrFull2d(unsigned short *, __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_flag_field.diminfo[0].strides, __pyx_pybuffernd_flag_field.diminfo[0].suboffsets, __pyx_t_13, __pyx_pybuffernd_flag_field.diminfo[1].strides, __pyx_pybuffernd_flag_field.diminfo[1].suboffsets)) & __pyx_v_boundary_mask) != 0);
+      if (__pyx_t_14) {
+
+        /* "pystencils/boundaries/createindexlistcython.pyx":85
+ *         for x in range(0, xs):
+ *             if flag_field[x, y] & boundary_mask:
+ *                 for dirIdx in range(num_directions):             # <<<<<<<<<<<<<<
+ *                     dx = stencil[dirIdx,0]
+ *                     dy = stencil[dirIdx,1]
+ */
+        __pyx_t_15 = __pyx_v_num_directions;
+        __pyx_t_16 = __pyx_t_15;
+        for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) {
+          __pyx_v_dirIdx = __pyx_t_17;
+
+          /* "pystencils/boundaries/createindexlistcython.pyx":86
+ *             if flag_field[x, y] & boundary_mask:
+ *                 for dirIdx in range(num_directions):
+ *                     dx = stencil[dirIdx,0]             # <<<<<<<<<<<<<<
+ *                     dy = stencil[dirIdx,1]
+ *                     if 0 <= x + dx < xs and 0 <= y + dy < ys:
+ */
+          __pyx_t_18 = __pyx_v_dirIdx;
+          __pyx_t_19 = 0;
+          __pyx_v_dx = (*__Pyx_BufPtrFull2d(int *, __pyx_pybuffernd_stencil.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_stencil.diminfo[0].strides, __pyx_pybuffernd_stencil.diminfo[0].suboffsets, __pyx_t_19, __pyx_pybuffernd_stencil.diminfo[1].strides, __pyx_pybuffernd_stencil.diminfo[1].suboffsets));
+
+          /* "pystencils/boundaries/createindexlistcython.pyx":87
+ *                 for dirIdx in range(num_directions):
+ *                     dx = stencil[dirIdx,0]
+ *                     dy = stencil[dirIdx,1]             # <<<<<<<<<<<<<<
+ *                     if 0 <= x + dx < xs and 0 <= y + dy < ys:
+ *                         if flag_field[x + dx, y + dy] & fluid_mask:
+ */
+          __pyx_t_20 = __pyx_v_dirIdx;
+          __pyx_t_21 = 1;
+          __pyx_v_dy = (*__Pyx_BufPtrFull2d(int *, __pyx_pybuffernd_stencil.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_stencil.diminfo[0].strides, __pyx_pybuffernd_stencil.diminfo[0].suboffsets, __pyx_t_21, __pyx_pybuffernd_stencil.diminfo[1].strides, __pyx_pybuffernd_stencil.diminfo[1].suboffsets));
+
+          /* "pystencils/boundaries/createindexlistcython.pyx":88
+ *                     dx = stencil[dirIdx,0]
+ *                     dy = stencil[dirIdx,1]
+ *                     if 0 <= x + dx < xs and 0 <= y + dy < ys:             # <<<<<<<<<<<<<<
+ *                         if flag_field[x + dx, y + dy] & fluid_mask:
+ *                             boundary_index_list.append((x,y, dirIdx))
+ */
+          __pyx_t_22 = (__pyx_v_x + __pyx_v_dx);
+          __pyx_t_23 = (0 <= __pyx_t_22);
+          if (__pyx_t_23) {
+            __pyx_t_23 = (__pyx_t_22 < __pyx_v_xs);
+          }
+          __pyx_t_24 = (__pyx_t_23 != 0);
+          if (__pyx_t_24) {
+          } else {
+            __pyx_t_14 = __pyx_t_24;
+            goto __pyx_L13_bool_binop_done;
+          }
+          __pyx_t_22 = (__pyx_v_y + __pyx_v_dy);
+          __pyx_t_24 = (0 <= __pyx_t_22);
+          if (__pyx_t_24) {
+            __pyx_t_24 = (__pyx_t_22 < __pyx_v_ys);
+          }
+          __pyx_t_23 = (__pyx_t_24 != 0);
+          __pyx_t_14 = __pyx_t_23;
+          __pyx_L13_bool_binop_done:;
+          if (__pyx_t_14) {
+
+            /* "pystencils/boundaries/createindexlistcython.pyx":89
+ *                     dy = stencil[dirIdx,1]
+ *                     if 0 <= x + dx < xs and 0 <= y + dy < ys:
+ *                         if flag_field[x + dx, y + dy] & fluid_mask:             # <<<<<<<<<<<<<<
+ *                             boundary_index_list.append((x,y, dirIdx))
+ *                             if single_link:
+ */
+            __pyx_t_25 = (__pyx_v_x + __pyx_v_dx);
+            __pyx_t_26 = (__pyx_v_y + __pyx_v_dy);
+            __pyx_t_14 = (((*__Pyx_BufPtrFull2d(unsigned short *, __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_flag_field.diminfo[0].strides, __pyx_pybuffernd_flag_field.diminfo[0].suboffsets, __pyx_t_26, __pyx_pybuffernd_flag_field.diminfo[1].strides, __pyx_pybuffernd_flag_field.diminfo[1].suboffsets)) & __pyx_v_fluid_mask) != 0);
+            if (__pyx_t_14) {
+
+              /* "pystencils/boundaries/createindexlistcython.pyx":90
+ *                     if 0 <= x + dx < xs and 0 <= y + dy < ys:
+ *                         if flag_field[x + dx, y + dy] & fluid_mask:
+ *                             boundary_index_list.append((x,y, dirIdx))             # <<<<<<<<<<<<<<
+ *                             if single_link:
+ *                                 break
+ */
+              __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_x); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 90, __pyx_L1_error)
+              __Pyx_GOTREF(__pyx_t_3);
+              __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_y); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 90, __pyx_L1_error)
+              __Pyx_GOTREF(__pyx_t_1);
+              __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_dirIdx); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 90, __pyx_L1_error)
+              __Pyx_GOTREF(__pyx_t_2);
+              __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 90, __pyx_L1_error)
+              __Pyx_GOTREF(__pyx_t_4);
+              __Pyx_GIVEREF(__pyx_t_3);
+              PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3);
+              __Pyx_GIVEREF(__pyx_t_1);
+              PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_1);
+              __Pyx_GIVEREF(__pyx_t_2);
+              PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_t_2);
+              __pyx_t_3 = 0;
+              __pyx_t_1 = 0;
+              __pyx_t_2 = 0;
+              __pyx_t_27 = __Pyx_PyList_Append(__pyx_v_boundary_index_list, __pyx_t_4); if (unlikely(__pyx_t_27 == ((int)-1))) __PYX_ERR(0, 90, __pyx_L1_error)
+              __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+
+              /* "pystencils/boundaries/createindexlistcython.pyx":91
+ *                         if flag_field[x + dx, y + dy] & fluid_mask:
+ *                             boundary_index_list.append((x,y, dirIdx))
+ *                             if single_link:             # <<<<<<<<<<<<<<
+ *                                 break
+ *     return boundary_index_list
+ */
+              __pyx_t_14 = (__pyx_v_single_link != 0);
+              if (__pyx_t_14) {
+
+                /* "pystencils/boundaries/createindexlistcython.pyx":92
+ *                             boundary_index_list.append((x,y, dirIdx))
+ *                             if single_link:
+ *                                 break             # <<<<<<<<<<<<<<
+ *     return boundary_index_list
+ * 
+ */
+                goto __pyx_L11_break;
+
+                /* "pystencils/boundaries/createindexlistcython.pyx":91
+ *                         if flag_field[x + dx, y + dy] & fluid_mask:
+ *                             boundary_index_list.append((x,y, dirIdx))
+ *                             if single_link:             # <<<<<<<<<<<<<<
+ *                                 break
+ *     return boundary_index_list
+ */
+              }
+
+              /* "pystencils/boundaries/createindexlistcython.pyx":89
+ *                     dy = stencil[dirIdx,1]
+ *                     if 0 <= x + dx < xs and 0 <= y + dy < ys:
+ *                         if flag_field[x + dx, y + dy] & fluid_mask:             # <<<<<<<<<<<<<<
+ *                             boundary_index_list.append((x,y, dirIdx))
+ *                             if single_link:
+ */
+            }
+
+            /* "pystencils/boundaries/createindexlistcython.pyx":88
+ *                     dx = stencil[dirIdx,0]
+ *                     dy = stencil[dirIdx,1]
+ *                     if 0 <= x + dx < xs and 0 <= y + dy < ys:             # <<<<<<<<<<<<<<
+ *                         if flag_field[x + dx, y + dy] & fluid_mask:
+ *                             boundary_index_list.append((x,y, dirIdx))
+ */
+          }
+        }
+        __pyx_L11_break:;
+
+        /* "pystencils/boundaries/createindexlistcython.pyx":84
+ *     for y in range(0, ys):
+ *         for x in range(0, xs):
+ *             if flag_field[x, y] & boundary_mask:             # <<<<<<<<<<<<<<
+ *                 for dirIdx in range(num_directions):
+ *                     dx = stencil[dirIdx,0]
+ */
+      }
+    }
+  }
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":93
+ *                             if single_link:
+ *                                 break
+ *     return boundary_index_list             # <<<<<<<<<<<<<<
+ * 
+ * 
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(__pyx_v_boundary_index_list);
+  __pyx_r = __pyx_v_boundary_index_list;
+  goto __pyx_L0;
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":72
+ * @cython.boundscheck(False) # turn off bounds-checking for entire function
+ * @cython.wraparound(False)  # turn off negative index wrapping for entire function
+ * def create_boundary_cell_index_list_2d(object[IntegerType, ndim=2] flag_field,             # <<<<<<<<<<<<<<
+ *                                        IntegerType boundary_mask, IntegerType fluid_mask,
+ *                                        object[int, ndim=2] stencil, int single_link):
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_4);
+  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
+    __Pyx_PyThreadState_declare
+    __Pyx_PyThreadState_assign
+    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
+    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_flag_field.rcbuffer->pybuffer);
+    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_stencil.rcbuffer->pybuffer);
+  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
+  __Pyx_AddTraceback("pystencils.boundaries.createindexlistcython.create_boundary_cell_index_list_2d", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  goto __pyx_L2;
+  __pyx_L0:;
+  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_flag_field.rcbuffer->pybuffer);
+  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_stencil.rcbuffer->pybuffer);
+  __pyx_L2:;
+  __Pyx_XDECREF(__pyx_v_boundary_index_list);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static PyObject *__pyx_fuse_5__pyx_pw_10pystencils_10boundaries_21createindexlistcython_51create_boundary_cell_index_list_2d(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyMethodDef __pyx_fuse_5__pyx_mdef_10pystencils_10boundaries_21createindexlistcython_51create_boundary_cell_index_list_2d = {"__pyx_fuse_5create_boundary_cell_index_list_2d", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_fuse_5__pyx_pw_10pystencils_10boundaries_21createindexlistcython_51create_boundary_cell_index_list_2d, METH_VARARGS|METH_KEYWORDS, 0};
+static PyObject *__pyx_fuse_5__pyx_pw_10pystencils_10boundaries_21createindexlistcython_51create_boundary_cell_index_list_2d(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_flag_field = 0;
+  unsigned int __pyx_v_boundary_mask;
+  unsigned int __pyx_v_fluid_mask;
+  PyObject *__pyx_v_stencil = 0;
+  int __pyx_v_single_link;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("create_boundary_cell_index_list_2d (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_flag_field,&__pyx_n_s_boundary_mask,&__pyx_n_s_fluid_mask,&__pyx_n_s_stencil,&__pyx_n_s_single_link,0};
+    PyObject* values[5] = {0,0,0,0,0};
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+        CYTHON_FALLTHROUGH;
+        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
+        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_flag_field)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
+        case  1:
+        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_boundary_mask)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_cell_index_list_2d", 1, 5, 5, 1); __PYX_ERR(0, 72, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  2:
+        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_fluid_mask)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_cell_index_list_2d", 1, 5, 5, 2); __PYX_ERR(0, 72, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  3:
+        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_stencil)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_cell_index_list_2d", 1, 5, 5, 3); __PYX_ERR(0, 72, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  4:
+        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_single_link)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_cell_index_list_2d", 1, 5, 5, 4); __PYX_ERR(0, 72, __pyx_L3_error)
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "create_boundary_cell_index_list_2d") < 0)) __PYX_ERR(0, 72, __pyx_L3_error)
+      }
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 5) {
+      goto __pyx_L5_argtuple_error;
+    } else {
+      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+      values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+      values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+    }
+    __pyx_v_flag_field = ((PyObject *)values[0]);
+    __pyx_v_boundary_mask = __Pyx_PyInt_As_unsigned_int(values[1]); if (unlikely((__pyx_v_boundary_mask == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(0, 73, __pyx_L3_error)
+    __pyx_v_fluid_mask = __Pyx_PyInt_As_unsigned_int(values[2]); if (unlikely((__pyx_v_fluid_mask == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(0, 73, __pyx_L3_error)
+    __pyx_v_stencil = ((PyObject *)values[3]);
+    __pyx_v_single_link = __Pyx_PyInt_As_int(values[4]); if (unlikely((__pyx_v_single_link == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 74, __pyx_L3_error)
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("create_boundary_cell_index_list_2d", 1, 5, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 72, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("pystencils.boundaries.createindexlistcython.create_boundary_cell_index_list_2d", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_10pystencils_10boundaries_21createindexlistcython_50create_boundary_cell_index_list_2d(__pyx_self, __pyx_v_flag_field, __pyx_v_boundary_mask, __pyx_v_fluid_mask, __pyx_v_stencil, __pyx_v_single_link);
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_10pystencils_10boundaries_21createindexlistcython_50create_boundary_cell_index_list_2d(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_flag_field, unsigned int __pyx_v_boundary_mask, unsigned int __pyx_v_fluid_mask, PyObject *__pyx_v_stencil, int __pyx_v_single_link) {
+  int __pyx_v_xs;
+  int __pyx_v_ys;
+  int __pyx_v_x;
+  int __pyx_v_y;
+  int __pyx_v_dirIdx;
+  int __pyx_v_num_directions;
+  int __pyx_v_dx;
+  int __pyx_v_dy;
+  PyObject *__pyx_v_boundary_index_list = NULL;
+  __Pyx_LocalBuf_ND __pyx_pybuffernd_flag_field;
+  __Pyx_Buffer __pyx_pybuffer_flag_field;
+  __Pyx_LocalBuf_ND __pyx_pybuffernd_stencil;
+  __Pyx_Buffer __pyx_pybuffer_stencil;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
+  PyObject *(*__pyx_t_5)(PyObject *);
+  int __pyx_t_6;
+  int __pyx_t_7;
+  int __pyx_t_8;
+  int __pyx_t_9;
+  int __pyx_t_10;
+  int __pyx_t_11;
+  Py_ssize_t __pyx_t_12;
+  Py_ssize_t __pyx_t_13;
+  int __pyx_t_14;
+  int __pyx_t_15;
+  int __pyx_t_16;
+  int __pyx_t_17;
+  Py_ssize_t __pyx_t_18;
+  Py_ssize_t __pyx_t_19;
+  Py_ssize_t __pyx_t_20;
+  Py_ssize_t __pyx_t_21;
+  int __pyx_t_22;
+  int __pyx_t_23;
+  int __pyx_t_24;
+  Py_ssize_t __pyx_t_25;
+  Py_ssize_t __pyx_t_26;
+  int __pyx_t_27;
+  __Pyx_RefNannySetupContext("__pyx_fuse_5create_boundary_cell_index_list_2d", 0);
+  __pyx_pybuffer_flag_field.pybuffer.buf = NULL;
+  __pyx_pybuffer_flag_field.refcount = 0;
+  __pyx_pybuffernd_flag_field.data = NULL;
+  __pyx_pybuffernd_flag_field.rcbuffer = &__pyx_pybuffer_flag_field;
+  __pyx_pybuffer_stencil.pybuffer.buf = NULL;
+  __pyx_pybuffer_stencil.refcount = 0;
+  __pyx_pybuffernd_stencil.data = NULL;
+  __pyx_pybuffernd_stencil.rcbuffer = &__pyx_pybuffer_stencil;
+  {
+    __Pyx_BufFmt_StackElem __pyx_stack[1];
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_flag_field.rcbuffer->pybuffer, (PyObject*)__pyx_v_flag_field, &__Pyx_TypeInfo_unsigned_int, PyBUF_FORMAT| PyBUF_INDIRECT, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 72, __pyx_L1_error)
+  }
+  __pyx_pybuffernd_flag_field.diminfo[0].strides = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_flag_field.diminfo[0].shape = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_flag_field.diminfo[0].suboffsets = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.suboffsets[0]; __pyx_pybuffernd_flag_field.diminfo[1].strides = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_flag_field.diminfo[1].shape = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_flag_field.diminfo[1].suboffsets = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.suboffsets[1];
+  {
+    __Pyx_BufFmt_StackElem __pyx_stack[1];
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_stencil.rcbuffer->pybuffer, (PyObject*)__pyx_v_stencil, &__Pyx_TypeInfo_int, PyBUF_FORMAT| PyBUF_INDIRECT, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 72, __pyx_L1_error)
+  }
+  __pyx_pybuffernd_stencil.diminfo[0].strides = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_stencil.diminfo[0].shape = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_stencil.diminfo[0].suboffsets = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.suboffsets[0]; __pyx_pybuffernd_stencil.diminfo[1].strides = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_stencil.diminfo[1].shape = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_stencil.diminfo[1].suboffsets = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.suboffsets[1];
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":78
+ *     cdef int dirIdx, num_directions, dx, dy
+ * 
+ *     xs, ys = flag_field.shape             # <<<<<<<<<<<<<<
+ *     boundary_index_list = []
+ *     num_directions = stencil.shape[0]
+ */
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_flag_field), __pyx_n_s_shape); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 78, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) {
+    PyObject* sequence = __pyx_t_1;
+    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
+    if (unlikely(size != 2)) {
+      if (size > 2) __Pyx_RaiseTooManyValuesError(2);
+      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
+      __PYX_ERR(0, 78, __pyx_L1_error)
+    }
+    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+    if (likely(PyTuple_CheckExact(sequence))) {
+      __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
+      __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); 
+    } else {
+      __pyx_t_2 = PyList_GET_ITEM(sequence, 0); 
+      __pyx_t_3 = PyList_GET_ITEM(sequence, 1); 
+    }
+    __Pyx_INCREF(__pyx_t_2);
+    __Pyx_INCREF(__pyx_t_3);
+    #else
+    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 78, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_2);
+    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 78, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    #endif
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  } else {
+    Py_ssize_t index = -1;
+    __pyx_t_4 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 78, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __pyx_t_5 = Py_TYPE(__pyx_t_4)->tp_iternext;
+    index = 0; __pyx_t_2 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_2)) goto __pyx_L3_unpacking_failed;
+    __Pyx_GOTREF(__pyx_t_2);
+    index = 1; __pyx_t_3 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_3)) goto __pyx_L3_unpacking_failed;
+    __Pyx_GOTREF(__pyx_t_3);
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_5(__pyx_t_4), 2) < 0) __PYX_ERR(0, 78, __pyx_L1_error)
+    __pyx_t_5 = NULL;
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    goto __pyx_L4_unpacking_done;
+    __pyx_L3_unpacking_failed:;
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    __pyx_t_5 = NULL;
+    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
+    __PYX_ERR(0, 78, __pyx_L1_error)
+    __pyx_L4_unpacking_done:;
+  }
+  __pyx_t_6 = __Pyx_PyInt_As_int(__pyx_t_2); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 78, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_7 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 78, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __pyx_v_xs = __pyx_t_6;
+  __pyx_v_ys = __pyx_t_7;
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":79
+ * 
+ *     xs, ys = flag_field.shape
+ *     boundary_index_list = []             # <<<<<<<<<<<<<<
+ *     num_directions = stencil.shape[0]
+ * 
+ */
+  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 79, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_boundary_index_list = ((PyObject*)__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":80
+ *     xs, ys = flag_field.shape
+ *     boundary_index_list = []
+ *     num_directions = stencil.shape[0]             # <<<<<<<<<<<<<<
+ * 
+ *     for y in range(0, ys):
+ */
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_stencil), __pyx_n_s_shape); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 80, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_3 = __Pyx_GetItemInt(__pyx_t_1, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 80, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_7 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 80, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __pyx_v_num_directions = __pyx_t_7;
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":82
+ *     num_directions = stencil.shape[0]
+ * 
+ *     for y in range(0, ys):             # <<<<<<<<<<<<<<
+ *         for x in range(0, xs):
+ *             if flag_field[x, y] & boundary_mask:
+ */
+  __pyx_t_7 = __pyx_v_ys;
+  __pyx_t_6 = __pyx_t_7;
+  for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_6; __pyx_t_8+=1) {
+    __pyx_v_y = __pyx_t_8;
+
+    /* "pystencils/boundaries/createindexlistcython.pyx":83
+ * 
+ *     for y in range(0, ys):
+ *         for x in range(0, xs):             # <<<<<<<<<<<<<<
+ *             if flag_field[x, y] & boundary_mask:
+ *                 for dirIdx in range(num_directions):
+ */
+    __pyx_t_9 = __pyx_v_xs;
+    __pyx_t_10 = __pyx_t_9;
+    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {
+      __pyx_v_x = __pyx_t_11;
+
+      /* "pystencils/boundaries/createindexlistcython.pyx":84
+ *     for y in range(0, ys):
+ *         for x in range(0, xs):
+ *             if flag_field[x, y] & boundary_mask:             # <<<<<<<<<<<<<<
+ *                 for dirIdx in range(num_directions):
+ *                     dx = stencil[dirIdx,0]
+ */
+      __pyx_t_12 = __pyx_v_x;
+      __pyx_t_13 = __pyx_v_y;
+      __pyx_t_14 = (((*__Pyx_BufPtrFull2d(unsigned int *, __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_flag_field.diminfo[0].strides, __pyx_pybuffernd_flag_field.diminfo[0].suboffsets, __pyx_t_13, __pyx_pybuffernd_flag_field.diminfo[1].strides, __pyx_pybuffernd_flag_field.diminfo[1].suboffsets)) & __pyx_v_boundary_mask) != 0);
+      if (__pyx_t_14) {
+
+        /* "pystencils/boundaries/createindexlistcython.pyx":85
+ *         for x in range(0, xs):
+ *             if flag_field[x, y] & boundary_mask:
+ *                 for dirIdx in range(num_directions):             # <<<<<<<<<<<<<<
+ *                     dx = stencil[dirIdx,0]
+ *                     dy = stencil[dirIdx,1]
+ */
+        __pyx_t_15 = __pyx_v_num_directions;
+        __pyx_t_16 = __pyx_t_15;
+        for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) {
+          __pyx_v_dirIdx = __pyx_t_17;
+
+          /* "pystencils/boundaries/createindexlistcython.pyx":86
+ *             if flag_field[x, y] & boundary_mask:
+ *                 for dirIdx in range(num_directions):
+ *                     dx = stencil[dirIdx,0]             # <<<<<<<<<<<<<<
+ *                     dy = stencil[dirIdx,1]
+ *                     if 0 <= x + dx < xs and 0 <= y + dy < ys:
+ */
+          __pyx_t_18 = __pyx_v_dirIdx;
+          __pyx_t_19 = 0;
+          __pyx_v_dx = (*__Pyx_BufPtrFull2d(int *, __pyx_pybuffernd_stencil.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_stencil.diminfo[0].strides, __pyx_pybuffernd_stencil.diminfo[0].suboffsets, __pyx_t_19, __pyx_pybuffernd_stencil.diminfo[1].strides, __pyx_pybuffernd_stencil.diminfo[1].suboffsets));
+
+          /* "pystencils/boundaries/createindexlistcython.pyx":87
+ *                 for dirIdx in range(num_directions):
+ *                     dx = stencil[dirIdx,0]
+ *                     dy = stencil[dirIdx,1]             # <<<<<<<<<<<<<<
+ *                     if 0 <= x + dx < xs and 0 <= y + dy < ys:
+ *                         if flag_field[x + dx, y + dy] & fluid_mask:
+ */
+          __pyx_t_20 = __pyx_v_dirIdx;
+          __pyx_t_21 = 1;
+          __pyx_v_dy = (*__Pyx_BufPtrFull2d(int *, __pyx_pybuffernd_stencil.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_stencil.diminfo[0].strides, __pyx_pybuffernd_stencil.diminfo[0].suboffsets, __pyx_t_21, __pyx_pybuffernd_stencil.diminfo[1].strides, __pyx_pybuffernd_stencil.diminfo[1].suboffsets));
+
+          /* "pystencils/boundaries/createindexlistcython.pyx":88
+ *                     dx = stencil[dirIdx,0]
+ *                     dy = stencil[dirIdx,1]
+ *                     if 0 <= x + dx < xs and 0 <= y + dy < ys:             # <<<<<<<<<<<<<<
+ *                         if flag_field[x + dx, y + dy] & fluid_mask:
+ *                             boundary_index_list.append((x,y, dirIdx))
+ */
+          __pyx_t_22 = (__pyx_v_x + __pyx_v_dx);
+          __pyx_t_23 = (0 <= __pyx_t_22);
+          if (__pyx_t_23) {
+            __pyx_t_23 = (__pyx_t_22 < __pyx_v_xs);
+          }
+          __pyx_t_24 = (__pyx_t_23 != 0);
+          if (__pyx_t_24) {
+          } else {
+            __pyx_t_14 = __pyx_t_24;
+            goto __pyx_L13_bool_binop_done;
+          }
+          __pyx_t_22 = (__pyx_v_y + __pyx_v_dy);
+          __pyx_t_24 = (0 <= __pyx_t_22);
+          if (__pyx_t_24) {
+            __pyx_t_24 = (__pyx_t_22 < __pyx_v_ys);
+          }
+          __pyx_t_23 = (__pyx_t_24 != 0);
+          __pyx_t_14 = __pyx_t_23;
+          __pyx_L13_bool_binop_done:;
+          if (__pyx_t_14) {
+
+            /* "pystencils/boundaries/createindexlistcython.pyx":89
+ *                     dy = stencil[dirIdx,1]
+ *                     if 0 <= x + dx < xs and 0 <= y + dy < ys:
+ *                         if flag_field[x + dx, y + dy] & fluid_mask:             # <<<<<<<<<<<<<<
+ *                             boundary_index_list.append((x,y, dirIdx))
+ *                             if single_link:
+ */
+            __pyx_t_25 = (__pyx_v_x + __pyx_v_dx);
+            __pyx_t_26 = (__pyx_v_y + __pyx_v_dy);
+            __pyx_t_14 = (((*__Pyx_BufPtrFull2d(unsigned int *, __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_flag_field.diminfo[0].strides, __pyx_pybuffernd_flag_field.diminfo[0].suboffsets, __pyx_t_26, __pyx_pybuffernd_flag_field.diminfo[1].strides, __pyx_pybuffernd_flag_field.diminfo[1].suboffsets)) & __pyx_v_fluid_mask) != 0);
+            if (__pyx_t_14) {
+
+              /* "pystencils/boundaries/createindexlistcython.pyx":90
+ *                     if 0 <= x + dx < xs and 0 <= y + dy < ys:
+ *                         if flag_field[x + dx, y + dy] & fluid_mask:
+ *                             boundary_index_list.append((x,y, dirIdx))             # <<<<<<<<<<<<<<
+ *                             if single_link:
+ *                                 break
+ */
+              __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_x); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 90, __pyx_L1_error)
+              __Pyx_GOTREF(__pyx_t_3);
+              __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_y); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 90, __pyx_L1_error)
+              __Pyx_GOTREF(__pyx_t_1);
+              __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_dirIdx); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 90, __pyx_L1_error)
+              __Pyx_GOTREF(__pyx_t_2);
+              __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 90, __pyx_L1_error)
+              __Pyx_GOTREF(__pyx_t_4);
+              __Pyx_GIVEREF(__pyx_t_3);
+              PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3);
+              __Pyx_GIVEREF(__pyx_t_1);
+              PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_1);
+              __Pyx_GIVEREF(__pyx_t_2);
+              PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_t_2);
+              __pyx_t_3 = 0;
+              __pyx_t_1 = 0;
+              __pyx_t_2 = 0;
+              __pyx_t_27 = __Pyx_PyList_Append(__pyx_v_boundary_index_list, __pyx_t_4); if (unlikely(__pyx_t_27 == ((int)-1))) __PYX_ERR(0, 90, __pyx_L1_error)
+              __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+
+              /* "pystencils/boundaries/createindexlistcython.pyx":91
+ *                         if flag_field[x + dx, y + dy] & fluid_mask:
+ *                             boundary_index_list.append((x,y, dirIdx))
+ *                             if single_link:             # <<<<<<<<<<<<<<
+ *                                 break
+ *     return boundary_index_list
+ */
+              __pyx_t_14 = (__pyx_v_single_link != 0);
+              if (__pyx_t_14) {
+
+                /* "pystencils/boundaries/createindexlistcython.pyx":92
+ *                             boundary_index_list.append((x,y, dirIdx))
+ *                             if single_link:
+ *                                 break             # <<<<<<<<<<<<<<
+ *     return boundary_index_list
+ * 
+ */
+                goto __pyx_L11_break;
+
+                /* "pystencils/boundaries/createindexlistcython.pyx":91
+ *                         if flag_field[x + dx, y + dy] & fluid_mask:
+ *                             boundary_index_list.append((x,y, dirIdx))
+ *                             if single_link:             # <<<<<<<<<<<<<<
+ *                                 break
+ *     return boundary_index_list
+ */
+              }
+
+              /* "pystencils/boundaries/createindexlistcython.pyx":89
+ *                     dy = stencil[dirIdx,1]
+ *                     if 0 <= x + dx < xs and 0 <= y + dy < ys:
+ *                         if flag_field[x + dx, y + dy] & fluid_mask:             # <<<<<<<<<<<<<<
+ *                             boundary_index_list.append((x,y, dirIdx))
+ *                             if single_link:
+ */
+            }
+
+            /* "pystencils/boundaries/createindexlistcython.pyx":88
+ *                     dx = stencil[dirIdx,0]
+ *                     dy = stencil[dirIdx,1]
+ *                     if 0 <= x + dx < xs and 0 <= y + dy < ys:             # <<<<<<<<<<<<<<
+ *                         if flag_field[x + dx, y + dy] & fluid_mask:
+ *                             boundary_index_list.append((x,y, dirIdx))
+ */
+          }
+        }
+        __pyx_L11_break:;
+
+        /* "pystencils/boundaries/createindexlistcython.pyx":84
+ *     for y in range(0, ys):
+ *         for x in range(0, xs):
+ *             if flag_field[x, y] & boundary_mask:             # <<<<<<<<<<<<<<
+ *                 for dirIdx in range(num_directions):
+ *                     dx = stencil[dirIdx,0]
+ */
+      }
+    }
+  }
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":93
+ *                             if single_link:
+ *                                 break
+ *     return boundary_index_list             # <<<<<<<<<<<<<<
+ * 
+ * 
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(__pyx_v_boundary_index_list);
+  __pyx_r = __pyx_v_boundary_index_list;
+  goto __pyx_L0;
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":72
+ * @cython.boundscheck(False) # turn off bounds-checking for entire function
+ * @cython.wraparound(False)  # turn off negative index wrapping for entire function
+ * def create_boundary_cell_index_list_2d(object[IntegerType, ndim=2] flag_field,             # <<<<<<<<<<<<<<
+ *                                        IntegerType boundary_mask, IntegerType fluid_mask,
+ *                                        object[int, ndim=2] stencil, int single_link):
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_4);
+  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
+    __Pyx_PyThreadState_declare
+    __Pyx_PyThreadState_assign
+    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
+    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_flag_field.rcbuffer->pybuffer);
+    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_stencil.rcbuffer->pybuffer);
+  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
+  __Pyx_AddTraceback("pystencils.boundaries.createindexlistcython.create_boundary_cell_index_list_2d", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  goto __pyx_L2;
+  __pyx_L0:;
+  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_flag_field.rcbuffer->pybuffer);
+  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_stencil.rcbuffer->pybuffer);
+  __pyx_L2:;
+  __Pyx_XDECREF(__pyx_v_boundary_index_list);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static PyObject *__pyx_fuse_6__pyx_pw_10pystencils_10boundaries_21createindexlistcython_53create_boundary_cell_index_list_2d(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyMethodDef __pyx_fuse_6__pyx_mdef_10pystencils_10boundaries_21createindexlistcython_53create_boundary_cell_index_list_2d = {"__pyx_fuse_6create_boundary_cell_index_list_2d", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_fuse_6__pyx_pw_10pystencils_10boundaries_21createindexlistcython_53create_boundary_cell_index_list_2d, METH_VARARGS|METH_KEYWORDS, 0};
+static PyObject *__pyx_fuse_6__pyx_pw_10pystencils_10boundaries_21createindexlistcython_53create_boundary_cell_index_list_2d(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_flag_field = 0;
+  unsigned long __pyx_v_boundary_mask;
+  unsigned long __pyx_v_fluid_mask;
+  PyObject *__pyx_v_stencil = 0;
+  int __pyx_v_single_link;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("create_boundary_cell_index_list_2d (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_flag_field,&__pyx_n_s_boundary_mask,&__pyx_n_s_fluid_mask,&__pyx_n_s_stencil,&__pyx_n_s_single_link,0};
+    PyObject* values[5] = {0,0,0,0,0};
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+        CYTHON_FALLTHROUGH;
+        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
+        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_flag_field)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
+        case  1:
+        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_boundary_mask)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_cell_index_list_2d", 1, 5, 5, 1); __PYX_ERR(0, 72, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  2:
+        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_fluid_mask)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_cell_index_list_2d", 1, 5, 5, 2); __PYX_ERR(0, 72, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  3:
+        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_stencil)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_cell_index_list_2d", 1, 5, 5, 3); __PYX_ERR(0, 72, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  4:
+        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_single_link)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_cell_index_list_2d", 1, 5, 5, 4); __PYX_ERR(0, 72, __pyx_L3_error)
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "create_boundary_cell_index_list_2d") < 0)) __PYX_ERR(0, 72, __pyx_L3_error)
+      }
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 5) {
+      goto __pyx_L5_argtuple_error;
+    } else {
+      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+      values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+      values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+    }
+    __pyx_v_flag_field = ((PyObject *)values[0]);
+    __pyx_v_boundary_mask = __Pyx_PyInt_As_unsigned_long(values[1]); if (unlikely((__pyx_v_boundary_mask == (unsigned long)-1) && PyErr_Occurred())) __PYX_ERR(0, 73, __pyx_L3_error)
+    __pyx_v_fluid_mask = __Pyx_PyInt_As_unsigned_long(values[2]); if (unlikely((__pyx_v_fluid_mask == (unsigned long)-1) && PyErr_Occurred())) __PYX_ERR(0, 73, __pyx_L3_error)
+    __pyx_v_stencil = ((PyObject *)values[3]);
+    __pyx_v_single_link = __Pyx_PyInt_As_int(values[4]); if (unlikely((__pyx_v_single_link == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 74, __pyx_L3_error)
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("create_boundary_cell_index_list_2d", 1, 5, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 72, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("pystencils.boundaries.createindexlistcython.create_boundary_cell_index_list_2d", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_10pystencils_10boundaries_21createindexlistcython_52create_boundary_cell_index_list_2d(__pyx_self, __pyx_v_flag_field, __pyx_v_boundary_mask, __pyx_v_fluid_mask, __pyx_v_stencil, __pyx_v_single_link);
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_10pystencils_10boundaries_21createindexlistcython_52create_boundary_cell_index_list_2d(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_flag_field, unsigned long __pyx_v_boundary_mask, unsigned long __pyx_v_fluid_mask, PyObject *__pyx_v_stencil, int __pyx_v_single_link) {
+  int __pyx_v_xs;
+  int __pyx_v_ys;
+  int __pyx_v_x;
+  int __pyx_v_y;
+  int __pyx_v_dirIdx;
+  int __pyx_v_num_directions;
+  int __pyx_v_dx;
+  int __pyx_v_dy;
+  PyObject *__pyx_v_boundary_index_list = NULL;
+  __Pyx_LocalBuf_ND __pyx_pybuffernd_flag_field;
+  __Pyx_Buffer __pyx_pybuffer_flag_field;
+  __Pyx_LocalBuf_ND __pyx_pybuffernd_stencil;
+  __Pyx_Buffer __pyx_pybuffer_stencil;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
+  PyObject *(*__pyx_t_5)(PyObject *);
+  int __pyx_t_6;
+  int __pyx_t_7;
+  int __pyx_t_8;
+  int __pyx_t_9;
+  int __pyx_t_10;
+  int __pyx_t_11;
+  Py_ssize_t __pyx_t_12;
+  Py_ssize_t __pyx_t_13;
+  int __pyx_t_14;
+  int __pyx_t_15;
+  int __pyx_t_16;
+  int __pyx_t_17;
+  Py_ssize_t __pyx_t_18;
+  Py_ssize_t __pyx_t_19;
+  Py_ssize_t __pyx_t_20;
+  Py_ssize_t __pyx_t_21;
+  int __pyx_t_22;
+  int __pyx_t_23;
+  int __pyx_t_24;
+  Py_ssize_t __pyx_t_25;
+  Py_ssize_t __pyx_t_26;
+  int __pyx_t_27;
+  __Pyx_RefNannySetupContext("__pyx_fuse_6create_boundary_cell_index_list_2d", 0);
+  __pyx_pybuffer_flag_field.pybuffer.buf = NULL;
+  __pyx_pybuffer_flag_field.refcount = 0;
+  __pyx_pybuffernd_flag_field.data = NULL;
+  __pyx_pybuffernd_flag_field.rcbuffer = &__pyx_pybuffer_flag_field;
+  __pyx_pybuffer_stencil.pybuffer.buf = NULL;
+  __pyx_pybuffer_stencil.refcount = 0;
+  __pyx_pybuffernd_stencil.data = NULL;
+  __pyx_pybuffernd_stencil.rcbuffer = &__pyx_pybuffer_stencil;
+  {
+    __Pyx_BufFmt_StackElem __pyx_stack[1];
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_flag_field.rcbuffer->pybuffer, (PyObject*)__pyx_v_flag_field, &__Pyx_TypeInfo_unsigned_long, PyBUF_FORMAT| PyBUF_INDIRECT, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 72, __pyx_L1_error)
+  }
+  __pyx_pybuffernd_flag_field.diminfo[0].strides = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_flag_field.diminfo[0].shape = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_flag_field.diminfo[0].suboffsets = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.suboffsets[0]; __pyx_pybuffernd_flag_field.diminfo[1].strides = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_flag_field.diminfo[1].shape = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_flag_field.diminfo[1].suboffsets = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.suboffsets[1];
+  {
+    __Pyx_BufFmt_StackElem __pyx_stack[1];
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_stencil.rcbuffer->pybuffer, (PyObject*)__pyx_v_stencil, &__Pyx_TypeInfo_int, PyBUF_FORMAT| PyBUF_INDIRECT, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 72, __pyx_L1_error)
+  }
+  __pyx_pybuffernd_stencil.diminfo[0].strides = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_stencil.diminfo[0].shape = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_stencil.diminfo[0].suboffsets = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.suboffsets[0]; __pyx_pybuffernd_stencil.diminfo[1].strides = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_stencil.diminfo[1].shape = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_stencil.diminfo[1].suboffsets = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.suboffsets[1];
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":78
+ *     cdef int dirIdx, num_directions, dx, dy
+ * 
+ *     xs, ys = flag_field.shape             # <<<<<<<<<<<<<<
+ *     boundary_index_list = []
+ *     num_directions = stencil.shape[0]
+ */
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_flag_field), __pyx_n_s_shape); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 78, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) {
+    PyObject* sequence = __pyx_t_1;
+    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
+    if (unlikely(size != 2)) {
+      if (size > 2) __Pyx_RaiseTooManyValuesError(2);
+      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
+      __PYX_ERR(0, 78, __pyx_L1_error)
+    }
+    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+    if (likely(PyTuple_CheckExact(sequence))) {
+      __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
+      __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); 
+    } else {
+      __pyx_t_2 = PyList_GET_ITEM(sequence, 0); 
+      __pyx_t_3 = PyList_GET_ITEM(sequence, 1); 
+    }
+    __Pyx_INCREF(__pyx_t_2);
+    __Pyx_INCREF(__pyx_t_3);
+    #else
+    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 78, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_2);
+    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 78, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    #endif
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  } else {
+    Py_ssize_t index = -1;
+    __pyx_t_4 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 78, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __pyx_t_5 = Py_TYPE(__pyx_t_4)->tp_iternext;
+    index = 0; __pyx_t_2 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_2)) goto __pyx_L3_unpacking_failed;
+    __Pyx_GOTREF(__pyx_t_2);
+    index = 1; __pyx_t_3 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_3)) goto __pyx_L3_unpacking_failed;
+    __Pyx_GOTREF(__pyx_t_3);
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_5(__pyx_t_4), 2) < 0) __PYX_ERR(0, 78, __pyx_L1_error)
+    __pyx_t_5 = NULL;
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    goto __pyx_L4_unpacking_done;
+    __pyx_L3_unpacking_failed:;
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    __pyx_t_5 = NULL;
+    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
+    __PYX_ERR(0, 78, __pyx_L1_error)
+    __pyx_L4_unpacking_done:;
+  }
+  __pyx_t_6 = __Pyx_PyInt_As_int(__pyx_t_2); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 78, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_7 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 78, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __pyx_v_xs = __pyx_t_6;
+  __pyx_v_ys = __pyx_t_7;
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":79
+ * 
+ *     xs, ys = flag_field.shape
+ *     boundary_index_list = []             # <<<<<<<<<<<<<<
+ *     num_directions = stencil.shape[0]
+ * 
+ */
+  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 79, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_boundary_index_list = ((PyObject*)__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":80
+ *     xs, ys = flag_field.shape
+ *     boundary_index_list = []
+ *     num_directions = stencil.shape[0]             # <<<<<<<<<<<<<<
+ * 
+ *     for y in range(0, ys):
+ */
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_stencil), __pyx_n_s_shape); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 80, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_3 = __Pyx_GetItemInt(__pyx_t_1, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 80, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_7 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 80, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __pyx_v_num_directions = __pyx_t_7;
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":82
+ *     num_directions = stencil.shape[0]
+ * 
+ *     for y in range(0, ys):             # <<<<<<<<<<<<<<
+ *         for x in range(0, xs):
+ *             if flag_field[x, y] & boundary_mask:
+ */
+  __pyx_t_7 = __pyx_v_ys;
+  __pyx_t_6 = __pyx_t_7;
+  for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_6; __pyx_t_8+=1) {
+    __pyx_v_y = __pyx_t_8;
+
+    /* "pystencils/boundaries/createindexlistcython.pyx":83
+ * 
+ *     for y in range(0, ys):
+ *         for x in range(0, xs):             # <<<<<<<<<<<<<<
+ *             if flag_field[x, y] & boundary_mask:
+ *                 for dirIdx in range(num_directions):
+ */
+    __pyx_t_9 = __pyx_v_xs;
+    __pyx_t_10 = __pyx_t_9;
+    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {
+      __pyx_v_x = __pyx_t_11;
+
+      /* "pystencils/boundaries/createindexlistcython.pyx":84
+ *     for y in range(0, ys):
+ *         for x in range(0, xs):
+ *             if flag_field[x, y] & boundary_mask:             # <<<<<<<<<<<<<<
+ *                 for dirIdx in range(num_directions):
+ *                     dx = stencil[dirIdx,0]
+ */
+      __pyx_t_12 = __pyx_v_x;
+      __pyx_t_13 = __pyx_v_y;
+      __pyx_t_14 = (((*__Pyx_BufPtrFull2d(unsigned long *, __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_flag_field.diminfo[0].strides, __pyx_pybuffernd_flag_field.diminfo[0].suboffsets, __pyx_t_13, __pyx_pybuffernd_flag_field.diminfo[1].strides, __pyx_pybuffernd_flag_field.diminfo[1].suboffsets)) & __pyx_v_boundary_mask) != 0);
+      if (__pyx_t_14) {
+
+        /* "pystencils/boundaries/createindexlistcython.pyx":85
+ *         for x in range(0, xs):
+ *             if flag_field[x, y] & boundary_mask:
+ *                 for dirIdx in range(num_directions):             # <<<<<<<<<<<<<<
+ *                     dx = stencil[dirIdx,0]
+ *                     dy = stencil[dirIdx,1]
+ */
+        __pyx_t_15 = __pyx_v_num_directions;
+        __pyx_t_16 = __pyx_t_15;
+        for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) {
+          __pyx_v_dirIdx = __pyx_t_17;
+
+          /* "pystencils/boundaries/createindexlistcython.pyx":86
+ *             if flag_field[x, y] & boundary_mask:
+ *                 for dirIdx in range(num_directions):
+ *                     dx = stencil[dirIdx,0]             # <<<<<<<<<<<<<<
+ *                     dy = stencil[dirIdx,1]
+ *                     if 0 <= x + dx < xs and 0 <= y + dy < ys:
+ */
+          __pyx_t_18 = __pyx_v_dirIdx;
+          __pyx_t_19 = 0;
+          __pyx_v_dx = (*__Pyx_BufPtrFull2d(int *, __pyx_pybuffernd_stencil.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_stencil.diminfo[0].strides, __pyx_pybuffernd_stencil.diminfo[0].suboffsets, __pyx_t_19, __pyx_pybuffernd_stencil.diminfo[1].strides, __pyx_pybuffernd_stencil.diminfo[1].suboffsets));
+
+          /* "pystencils/boundaries/createindexlistcython.pyx":87
+ *                 for dirIdx in range(num_directions):
+ *                     dx = stencil[dirIdx,0]
+ *                     dy = stencil[dirIdx,1]             # <<<<<<<<<<<<<<
+ *                     if 0 <= x + dx < xs and 0 <= y + dy < ys:
+ *                         if flag_field[x + dx, y + dy] & fluid_mask:
+ */
+          __pyx_t_20 = __pyx_v_dirIdx;
+          __pyx_t_21 = 1;
+          __pyx_v_dy = (*__Pyx_BufPtrFull2d(int *, __pyx_pybuffernd_stencil.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_stencil.diminfo[0].strides, __pyx_pybuffernd_stencil.diminfo[0].suboffsets, __pyx_t_21, __pyx_pybuffernd_stencil.diminfo[1].strides, __pyx_pybuffernd_stencil.diminfo[1].suboffsets));
+
+          /* "pystencils/boundaries/createindexlistcython.pyx":88
+ *                     dx = stencil[dirIdx,0]
+ *                     dy = stencil[dirIdx,1]
+ *                     if 0 <= x + dx < xs and 0 <= y + dy < ys:             # <<<<<<<<<<<<<<
+ *                         if flag_field[x + dx, y + dy] & fluid_mask:
+ *                             boundary_index_list.append((x,y, dirIdx))
+ */
+          __pyx_t_22 = (__pyx_v_x + __pyx_v_dx);
+          __pyx_t_23 = (0 <= __pyx_t_22);
+          if (__pyx_t_23) {
+            __pyx_t_23 = (__pyx_t_22 < __pyx_v_xs);
+          }
+          __pyx_t_24 = (__pyx_t_23 != 0);
+          if (__pyx_t_24) {
+          } else {
+            __pyx_t_14 = __pyx_t_24;
+            goto __pyx_L13_bool_binop_done;
+          }
+          __pyx_t_22 = (__pyx_v_y + __pyx_v_dy);
+          __pyx_t_24 = (0 <= __pyx_t_22);
+          if (__pyx_t_24) {
+            __pyx_t_24 = (__pyx_t_22 < __pyx_v_ys);
+          }
+          __pyx_t_23 = (__pyx_t_24 != 0);
+          __pyx_t_14 = __pyx_t_23;
+          __pyx_L13_bool_binop_done:;
+          if (__pyx_t_14) {
+
+            /* "pystencils/boundaries/createindexlistcython.pyx":89
+ *                     dy = stencil[dirIdx,1]
+ *                     if 0 <= x + dx < xs and 0 <= y + dy < ys:
+ *                         if flag_field[x + dx, y + dy] & fluid_mask:             # <<<<<<<<<<<<<<
+ *                             boundary_index_list.append((x,y, dirIdx))
+ *                             if single_link:
+ */
+            __pyx_t_25 = (__pyx_v_x + __pyx_v_dx);
+            __pyx_t_26 = (__pyx_v_y + __pyx_v_dy);
+            __pyx_t_14 = (((*__Pyx_BufPtrFull2d(unsigned long *, __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_flag_field.diminfo[0].strides, __pyx_pybuffernd_flag_field.diminfo[0].suboffsets, __pyx_t_26, __pyx_pybuffernd_flag_field.diminfo[1].strides, __pyx_pybuffernd_flag_field.diminfo[1].suboffsets)) & __pyx_v_fluid_mask) != 0);
+            if (__pyx_t_14) {
+
+              /* "pystencils/boundaries/createindexlistcython.pyx":90
+ *                     if 0 <= x + dx < xs and 0 <= y + dy < ys:
+ *                         if flag_field[x + dx, y + dy] & fluid_mask:
+ *                             boundary_index_list.append((x,y, dirIdx))             # <<<<<<<<<<<<<<
+ *                             if single_link:
+ *                                 break
+ */
+              __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_x); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 90, __pyx_L1_error)
+              __Pyx_GOTREF(__pyx_t_3);
+              __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_y); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 90, __pyx_L1_error)
+              __Pyx_GOTREF(__pyx_t_1);
+              __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_dirIdx); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 90, __pyx_L1_error)
+              __Pyx_GOTREF(__pyx_t_2);
+              __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 90, __pyx_L1_error)
+              __Pyx_GOTREF(__pyx_t_4);
+              __Pyx_GIVEREF(__pyx_t_3);
+              PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3);
+              __Pyx_GIVEREF(__pyx_t_1);
+              PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_1);
+              __Pyx_GIVEREF(__pyx_t_2);
+              PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_t_2);
+              __pyx_t_3 = 0;
+              __pyx_t_1 = 0;
+              __pyx_t_2 = 0;
+              __pyx_t_27 = __Pyx_PyList_Append(__pyx_v_boundary_index_list, __pyx_t_4); if (unlikely(__pyx_t_27 == ((int)-1))) __PYX_ERR(0, 90, __pyx_L1_error)
+              __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+
+              /* "pystencils/boundaries/createindexlistcython.pyx":91
+ *                         if flag_field[x + dx, y + dy] & fluid_mask:
+ *                             boundary_index_list.append((x,y, dirIdx))
+ *                             if single_link:             # <<<<<<<<<<<<<<
+ *                                 break
+ *     return boundary_index_list
+ */
+              __pyx_t_14 = (__pyx_v_single_link != 0);
+              if (__pyx_t_14) {
+
+                /* "pystencils/boundaries/createindexlistcython.pyx":92
+ *                             boundary_index_list.append((x,y, dirIdx))
+ *                             if single_link:
+ *                                 break             # <<<<<<<<<<<<<<
+ *     return boundary_index_list
+ * 
+ */
+                goto __pyx_L11_break;
+
+                /* "pystencils/boundaries/createindexlistcython.pyx":91
+ *                         if flag_field[x + dx, y + dy] & fluid_mask:
+ *                             boundary_index_list.append((x,y, dirIdx))
+ *                             if single_link:             # <<<<<<<<<<<<<<
+ *                                 break
+ *     return boundary_index_list
+ */
+              }
+
+              /* "pystencils/boundaries/createindexlistcython.pyx":89
+ *                     dy = stencil[dirIdx,1]
+ *                     if 0 <= x + dx < xs and 0 <= y + dy < ys:
+ *                         if flag_field[x + dx, y + dy] & fluid_mask:             # <<<<<<<<<<<<<<
+ *                             boundary_index_list.append((x,y, dirIdx))
+ *                             if single_link:
+ */
+            }
+
+            /* "pystencils/boundaries/createindexlistcython.pyx":88
+ *                     dx = stencil[dirIdx,0]
+ *                     dy = stencil[dirIdx,1]
+ *                     if 0 <= x + dx < xs and 0 <= y + dy < ys:             # <<<<<<<<<<<<<<
+ *                         if flag_field[x + dx, y + dy] & fluid_mask:
+ *                             boundary_index_list.append((x,y, dirIdx))
+ */
+          }
+        }
+        __pyx_L11_break:;
+
+        /* "pystencils/boundaries/createindexlistcython.pyx":84
+ *     for y in range(0, ys):
+ *         for x in range(0, xs):
+ *             if flag_field[x, y] & boundary_mask:             # <<<<<<<<<<<<<<
+ *                 for dirIdx in range(num_directions):
+ *                     dx = stencil[dirIdx,0]
+ */
+      }
+    }
+  }
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":93
+ *                             if single_link:
+ *                                 break
+ *     return boundary_index_list             # <<<<<<<<<<<<<<
+ * 
+ * 
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(__pyx_v_boundary_index_list);
+  __pyx_r = __pyx_v_boundary_index_list;
+  goto __pyx_L0;
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":72
+ * @cython.boundscheck(False) # turn off bounds-checking for entire function
+ * @cython.wraparound(False)  # turn off negative index wrapping for entire function
+ * def create_boundary_cell_index_list_2d(object[IntegerType, ndim=2] flag_field,             # <<<<<<<<<<<<<<
+ *                                        IntegerType boundary_mask, IntegerType fluid_mask,
+ *                                        object[int, ndim=2] stencil, int single_link):
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_4);
+  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
+    __Pyx_PyThreadState_declare
+    __Pyx_PyThreadState_assign
+    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
+    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_flag_field.rcbuffer->pybuffer);
+    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_stencil.rcbuffer->pybuffer);
+  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
+  __Pyx_AddTraceback("pystencils.boundaries.createindexlistcython.create_boundary_cell_index_list_2d", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  goto __pyx_L2;
+  __pyx_L0:;
+  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_flag_field.rcbuffer->pybuffer);
+  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_stencil.rcbuffer->pybuffer);
+  __pyx_L2:;
+  __Pyx_XDECREF(__pyx_v_boundary_index_list);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "pystencils/boundaries/createindexlistcython.pyx":98
+ * @cython.boundscheck(False) # turn off bounds-checking for entire function
+ * @cython.wraparound(False)  # turn off negative index wrapping for entire function
+ * def create_boundary_cell_index_list_3d(object[IntegerType, ndim=3] flag_field,             # <<<<<<<<<<<<<<
+ *                                        IntegerType boundary_mask, IntegerType fluid_mask,
+ *                                        object[int, ndim=2] stencil, int single_link):
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_10pystencils_10boundaries_21createindexlistcython_7create_boundary_cell_index_list_3d(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyMethodDef __pyx_mdef_10pystencils_10boundaries_21createindexlistcython_7create_boundary_cell_index_list_3d = {"create_boundary_cell_index_list_3d", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_10pystencils_10boundaries_21createindexlistcython_7create_boundary_cell_index_list_3d, METH_VARARGS|METH_KEYWORDS, 0};
+static PyObject *__pyx_pw_10pystencils_10boundaries_21createindexlistcython_7create_boundary_cell_index_list_3d(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_signatures = 0;
+  PyObject *__pyx_v_args = 0;
+  PyObject *__pyx_v_kwargs = 0;
+  CYTHON_UNUSED PyObject *__pyx_v_defaults = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__pyx_fused_cpdef (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_signatures,&__pyx_n_s_args,&__pyx_n_s_kwargs,&__pyx_n_s_defaults,0};
+    PyObject* values[4] = {0,0,0,0};
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
+        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_signatures)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
+        case  1:
+        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_args)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("__pyx_fused_cpdef", 1, 4, 4, 1); __PYX_ERR(0, 98, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  2:
+        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_kwargs)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("__pyx_fused_cpdef", 1, 4, 4, 2); __PYX_ERR(0, 98, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  3:
+        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_defaults)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("__pyx_fused_cpdef", 1, 4, 4, 3); __PYX_ERR(0, 98, __pyx_L3_error)
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__pyx_fused_cpdef") < 0)) __PYX_ERR(0, 98, __pyx_L3_error)
+      }
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 4) {
+      goto __pyx_L5_argtuple_error;
+    } else {
+      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+      values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+    }
+    __pyx_v_signatures = values[0];
+    __pyx_v_args = values[1];
+    __pyx_v_kwargs = values[2];
+    __pyx_v_defaults = values[3];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("__pyx_fused_cpdef", 1, 4, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 98, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("pystencils.boundaries.createindexlistcython.__pyx_fused_cpdef", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_10pystencils_10boundaries_21createindexlistcython_6create_boundary_cell_index_list_3d(__pyx_self, __pyx_v_signatures, __pyx_v_args, __pyx_v_kwargs, __pyx_v_defaults);
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_10pystencils_10boundaries_21createindexlistcython_6create_boundary_cell_index_list_3d(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_signatures, PyObject *__pyx_v_args, PyObject *__pyx_v_kwargs, CYTHON_UNUSED PyObject *__pyx_v_defaults) {
+  PyObject *__pyx_v_dest_sig = NULL;
+  Py_ssize_t __pyx_v_i;
+  PyTypeObject *__pyx_v_ndarray = 0;
+  __Pyx_memviewslice __pyx_v_memslice;
+  Py_ssize_t __pyx_v_itemsize;
+  int __pyx_v_dtype_signed;
+  char __pyx_v_kind;
+  int __pyx_v_short_is_signed;
+  int __pyx_v_int_is_signed;
+  int __pyx_v_long_is_signed;
+  int __pyx_v_long_long_is_signed;
+  int __pyx_v_unsigned_short_is_signed;
+  int __pyx_v_unsigned_int_is_signed;
+  int __pyx_v_unsigned_long_is_signed;
+  PyObject *__pyx_v_arg = NULL;
+  PyObject *__pyx_v_dtype = NULL;
+  PyObject *__pyx_v_arg_base = NULL;
+  PyObject *__pyx_v_candidates = NULL;
+  PyObject *__pyx_v_sig = NULL;
+  int __pyx_v_match_found;
+  PyObject *__pyx_v_src_sig = NULL;
+  PyObject *__pyx_v_dst_type = NULL;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_2;
+  int __pyx_t_3;
+  int __pyx_t_4;
+  Py_ssize_t __pyx_t_5;
+  PyObject *__pyx_t_6 = NULL;
+  long __pyx_t_7;
+  __Pyx_memviewslice __pyx_t_8;
+  Py_ssize_t __pyx_t_9;
+  int __pyx_t_10;
+  int __pyx_t_11;
+  PyObject *__pyx_t_12 = NULL;
+  PyObject *__pyx_t_13 = NULL;
+  PyObject *__pyx_t_14 = NULL;
+  Py_ssize_t __pyx_t_15;
+  Py_ssize_t __pyx_t_16;
+  Py_ssize_t __pyx_t_17;
+  int __pyx_t_18;
+  __Pyx_RefNannySetupContext("create_boundary_cell_index_list_3d", 0);
+  __Pyx_INCREF(__pyx_v_kwargs);
+  __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 98, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_INCREF(Py_None);
+  __Pyx_GIVEREF(Py_None);
+  PyList_SET_ITEM(__pyx_t_1, 0, Py_None);
+  __pyx_v_dest_sig = ((PyObject*)__pyx_t_1);
+  __pyx_t_1 = 0;
+  __pyx_t_3 = (__pyx_v_kwargs != Py_None);
+  __pyx_t_4 = (__pyx_t_3 != 0);
+  if (__pyx_t_4) {
+  } else {
+    __pyx_t_2 = __pyx_t_4;
+    goto __pyx_L4_bool_binop_done;
+  }
+  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_v_kwargs); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 98, __pyx_L1_error)
+  __pyx_t_3 = ((!__pyx_t_4) != 0);
+  __pyx_t_2 = __pyx_t_3;
+  __pyx_L4_bool_binop_done:;
+  if (__pyx_t_2) {
+    __Pyx_INCREF(Py_None);
+    __Pyx_DECREF_SET(__pyx_v_kwargs, Py_None);
+  }
+  __pyx_t_1 = ((PyObject *)__Pyx_ImportNumPyArrayTypeIfAvailable()); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 98, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_ndarray = ((PyTypeObject*)__pyx_t_1);
+  __pyx_t_1 = 0;
+  __pyx_v_itemsize = -1L;
+  __pyx_v_short_is_signed = (!((((short)-1L) > 0) != 0));
+  __pyx_v_int_is_signed = (!((((int)-1L) > 0) != 0));
+  __pyx_v_long_is_signed = (!((((long)-1L) > 0) != 0));
+  __pyx_v_long_long_is_signed = (!((((PY_LONG_LONG)-1L) > 0) != 0));
+  __pyx_v_unsigned_short_is_signed = (!((((unsigned short)-1L) > 0) != 0));
+  __pyx_v_unsigned_int_is_signed = (!((((unsigned int)-1L) > 0) != 0));
+  __pyx_v_unsigned_long_is_signed = (!((((unsigned long)-1L) > 0) != 0));
+  if (unlikely(__pyx_v_args == Py_None)) {
+    PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
+    __PYX_ERR(0, 98, __pyx_L1_error)
+  }
+  __pyx_t_5 = PyTuple_GET_SIZE(((PyObject*)__pyx_v_args)); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(0, 98, __pyx_L1_error)
+  __pyx_t_2 = ((0 < __pyx_t_5) != 0);
+  if (__pyx_t_2) {
+    if (unlikely(__pyx_v_args == Py_None)) {
+      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
+      __PYX_ERR(0, 98, __pyx_L1_error)
+    }
+    __pyx_t_1 = PyTuple_GET_ITEM(((PyObject*)__pyx_v_args), 0);
+    __Pyx_INCREF(__pyx_t_1);
+    __pyx_v_arg = __pyx_t_1;
+    __pyx_t_1 = 0;
+    goto __pyx_L6;
+  }
+  __pyx_t_3 = (__pyx_v_kwargs != Py_None);
+  __pyx_t_4 = (__pyx_t_3 != 0);
+  if (__pyx_t_4) {
+  } else {
+    __pyx_t_2 = __pyx_t_4;
+    goto __pyx_L7_bool_binop_done;
+  }
+  if (unlikely(__pyx_v_kwargs == Py_None)) {
+    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
+    __PYX_ERR(0, 98, __pyx_L1_error)
+  }
+  __pyx_t_4 = (__Pyx_PyDict_ContainsTF(__pyx_n_s_flag_field, ((PyObject*)__pyx_v_kwargs), Py_EQ)); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 98, __pyx_L1_error)
+  __pyx_t_3 = (__pyx_t_4 != 0);
+  __pyx_t_2 = __pyx_t_3;
+  __pyx_L7_bool_binop_done:;
+  if (__pyx_t_2) {
+    if (unlikely(__pyx_v_kwargs == Py_None)) {
+      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
+      __PYX_ERR(0, 98, __pyx_L1_error)
+    }
+    __pyx_t_1 = __Pyx_PyDict_GetItem(((PyObject*)__pyx_v_kwargs), __pyx_n_s_flag_field); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 98, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_1);
+    __pyx_v_arg = __pyx_t_1;
+    __pyx_t_1 = 0;
+    goto __pyx_L6;
+  }
+  /*else*/ {
+    if (unlikely(__pyx_v_args == Py_None)) {
+      PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
+      __PYX_ERR(0, 98, __pyx_L1_error)
+    }
+    __pyx_t_5 = PyTuple_GET_SIZE(((PyObject*)__pyx_v_args)); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(0, 98, __pyx_L1_error)
+    __pyx_t_1 = PyInt_FromSsize_t(__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 98, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_1);
+    __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 98, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_6);
+    __Pyx_INCREF(__pyx_int_5);
+    __Pyx_GIVEREF(__pyx_int_5);
+    PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_int_5);
+    __Pyx_INCREF(__pyx_n_s_s);
+    __Pyx_GIVEREF(__pyx_n_s_s);
+    PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_n_s_s);
+    __Pyx_GIVEREF(__pyx_t_1);
+    PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_t_1);
+    __pyx_t_1 = 0;
+    __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_Expected_at_least_d_argument_s_g, __pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 98, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_1);
+    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+    __pyx_t_6 = __Pyx_PyObject_CallOneArg(__pyx_builtin_TypeError, __pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 98, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_6);
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __Pyx_Raise(__pyx_t_6, 0, 0, 0);
+    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+    __PYX_ERR(0, 98, __pyx_L1_error)
+  }
+  __pyx_L6:;
+  while (1) {
+    __pyx_t_2 = (__pyx_v_ndarray != ((PyTypeObject*)Py_None));
+    __pyx_t_3 = (__pyx_t_2 != 0);
+    if (__pyx_t_3) {
+      __pyx_t_3 = __Pyx_TypeCheck(__pyx_v_arg, __pyx_v_ndarray); 
+      __pyx_t_2 = (__pyx_t_3 != 0);
+      if (__pyx_t_2) {
+        __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_dtype); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 98, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_6);
+        __pyx_v_dtype = __pyx_t_6;
+        __pyx_t_6 = 0;
+        goto __pyx_L12;
+      }
+      __pyx_t_2 = __pyx_memoryview_check(__pyx_v_arg); 
+      __pyx_t_3 = (__pyx_t_2 != 0);
+      if (__pyx_t_3) {
+        __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_base); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 98, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_6);
+        __pyx_v_arg_base = __pyx_t_6;
+        __pyx_t_6 = 0;
+        __pyx_t_3 = __Pyx_TypeCheck(__pyx_v_arg_base, __pyx_v_ndarray); 
+        __pyx_t_2 = (__pyx_t_3 != 0);
+        if (__pyx_t_2) {
+          __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg_base, __pyx_n_s_dtype); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 98, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_6);
+          __pyx_v_dtype = __pyx_t_6;
+          __pyx_t_6 = 0;
+          goto __pyx_L13;
+        }
+        /*else*/ {
+          __Pyx_INCREF(Py_None);
+          __pyx_v_dtype = Py_None;
+        }
+        __pyx_L13:;
+        goto __pyx_L12;
+      }
+      /*else*/ {
+        __Pyx_INCREF(Py_None);
+        __pyx_v_dtype = Py_None;
+      }
+      __pyx_L12:;
+      __pyx_v_itemsize = -1L;
+      __pyx_t_2 = (__pyx_v_dtype != Py_None);
+      __pyx_t_3 = (__pyx_t_2 != 0);
+      if (__pyx_t_3) {
+        __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_dtype, __pyx_n_s_itemsize); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 98, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_6);
+        __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_6); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 98, __pyx_L1_error)
+        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+        __pyx_v_itemsize = __pyx_t_5;
+        __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_dtype, __pyx_n_s_kind); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 98, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_6);
+        __pyx_t_7 = __Pyx_PyObject_Ord(__pyx_t_6); if (unlikely(__pyx_t_7 == ((long)(long)(Py_UCS4)-1))) __PYX_ERR(0, 98, __pyx_L1_error)
+        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+        __pyx_v_kind = __pyx_t_7;
+        __pyx_v_dtype_signed = (__pyx_v_kind == 'i');
+        switch (__pyx_v_kind) {
+          case 'i':
+          case 'u':
+          __pyx_t_2 = (((sizeof(short)) == __pyx_v_itemsize) != 0);
+          if (__pyx_t_2) {
+          } else {
+            __pyx_t_3 = __pyx_t_2;
+            goto __pyx_L16_bool_binop_done;
+          }
+          __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_ndim); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 98, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_6);
+          __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_6); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 98, __pyx_L1_error)
+          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+          __pyx_t_2 = ((((Py_ssize_t)__pyx_t_5) == 3) != 0);
+          if (__pyx_t_2) {
+          } else {
+            __pyx_t_3 = __pyx_t_2;
+            goto __pyx_L16_bool_binop_done;
+          }
+          __pyx_t_2 = ((!((__pyx_v_short_is_signed ^ __pyx_v_dtype_signed) != 0)) != 0);
+          __pyx_t_3 = __pyx_t_2;
+          __pyx_L16_bool_binop_done:;
+          if (__pyx_t_3) {
+            if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_n_s_short, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 98, __pyx_L1_error)
+            goto __pyx_L10_break;
+          }
+          __pyx_t_2 = (((sizeof(int)) == __pyx_v_itemsize) != 0);
+          if (__pyx_t_2) {
+          } else {
+            __pyx_t_3 = __pyx_t_2;
+            goto __pyx_L20_bool_binop_done;
+          }
+          __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_ndim); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 98, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_6);
+          __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_6); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 98, __pyx_L1_error)
+          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+          __pyx_t_2 = ((((Py_ssize_t)__pyx_t_5) == 3) != 0);
+          if (__pyx_t_2) {
+          } else {
+            __pyx_t_3 = __pyx_t_2;
+            goto __pyx_L20_bool_binop_done;
+          }
+          __pyx_t_2 = ((!((__pyx_v_int_is_signed ^ __pyx_v_dtype_signed) != 0)) != 0);
+          __pyx_t_3 = __pyx_t_2;
+          __pyx_L20_bool_binop_done:;
+          if (__pyx_t_3) {
+            if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_n_s_int, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 98, __pyx_L1_error)
+            goto __pyx_L10_break;
+          }
+          __pyx_t_2 = (((sizeof(long)) == __pyx_v_itemsize) != 0);
+          if (__pyx_t_2) {
+          } else {
+            __pyx_t_3 = __pyx_t_2;
+            goto __pyx_L24_bool_binop_done;
+          }
+          __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_ndim); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 98, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_6);
+          __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_6); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 98, __pyx_L1_error)
+          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+          __pyx_t_2 = ((((Py_ssize_t)__pyx_t_5) == 3) != 0);
+          if (__pyx_t_2) {
+          } else {
+            __pyx_t_3 = __pyx_t_2;
+            goto __pyx_L24_bool_binop_done;
+          }
+          __pyx_t_2 = ((!((__pyx_v_long_is_signed ^ __pyx_v_dtype_signed) != 0)) != 0);
+          __pyx_t_3 = __pyx_t_2;
+          __pyx_L24_bool_binop_done:;
+          if (__pyx_t_3) {
+            if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_n_s_long, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 98, __pyx_L1_error)
+            goto __pyx_L10_break;
+          }
+          __pyx_t_2 = (((sizeof(PY_LONG_LONG)) == __pyx_v_itemsize) != 0);
+          if (__pyx_t_2) {
+          } else {
+            __pyx_t_3 = __pyx_t_2;
+            goto __pyx_L28_bool_binop_done;
+          }
+          __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_ndim); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 98, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_6);
+          __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_6); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 98, __pyx_L1_error)
+          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+          __pyx_t_2 = ((((Py_ssize_t)__pyx_t_5) == 3) != 0);
+          if (__pyx_t_2) {
+          } else {
+            __pyx_t_3 = __pyx_t_2;
+            goto __pyx_L28_bool_binop_done;
+          }
+          __pyx_t_2 = ((!((__pyx_v_long_long_is_signed ^ __pyx_v_dtype_signed) != 0)) != 0);
+          __pyx_t_3 = __pyx_t_2;
+          __pyx_L28_bool_binop_done:;
+          if (__pyx_t_3) {
+            if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_kp_s_long_long, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 98, __pyx_L1_error)
+            goto __pyx_L10_break;
+          }
+          __pyx_t_2 = (((sizeof(unsigned short)) == __pyx_v_itemsize) != 0);
+          if (__pyx_t_2) {
+          } else {
+            __pyx_t_3 = __pyx_t_2;
+            goto __pyx_L32_bool_binop_done;
+          }
+          __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_ndim); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 98, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_6);
+          __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_6); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 98, __pyx_L1_error)
+          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+          __pyx_t_2 = ((((Py_ssize_t)__pyx_t_5) == 3) != 0);
+          if (__pyx_t_2) {
+          } else {
+            __pyx_t_3 = __pyx_t_2;
+            goto __pyx_L32_bool_binop_done;
+          }
+          __pyx_t_2 = ((!((__pyx_v_unsigned_short_is_signed ^ __pyx_v_dtype_signed) != 0)) != 0);
+          __pyx_t_3 = __pyx_t_2;
+          __pyx_L32_bool_binop_done:;
+          if (__pyx_t_3) {
+            if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_kp_s_unsigned_short, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 98, __pyx_L1_error)
+            goto __pyx_L10_break;
+          }
+          __pyx_t_2 = (((sizeof(unsigned int)) == __pyx_v_itemsize) != 0);
+          if (__pyx_t_2) {
+          } else {
+            __pyx_t_3 = __pyx_t_2;
+            goto __pyx_L36_bool_binop_done;
+          }
+          __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_ndim); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 98, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_6);
+          __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_6); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 98, __pyx_L1_error)
+          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+          __pyx_t_2 = ((((Py_ssize_t)__pyx_t_5) == 3) != 0);
+          if (__pyx_t_2) {
+          } else {
+            __pyx_t_3 = __pyx_t_2;
+            goto __pyx_L36_bool_binop_done;
+          }
+          __pyx_t_2 = ((!((__pyx_v_unsigned_int_is_signed ^ __pyx_v_dtype_signed) != 0)) != 0);
+          __pyx_t_3 = __pyx_t_2;
+          __pyx_L36_bool_binop_done:;
+          if (__pyx_t_3) {
+            if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_kp_s_unsigned_int, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 98, __pyx_L1_error)
+            goto __pyx_L10_break;
+          }
+          __pyx_t_2 = (((sizeof(unsigned long)) == __pyx_v_itemsize) != 0);
+          if (__pyx_t_2) {
+          } else {
+            __pyx_t_3 = __pyx_t_2;
+            goto __pyx_L40_bool_binop_done;
+          }
+          __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_ndim); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 98, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_6);
+          __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_6); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 98, __pyx_L1_error)
+          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+          __pyx_t_2 = ((((Py_ssize_t)__pyx_t_5) == 3) != 0);
+          if (__pyx_t_2) {
+          } else {
+            __pyx_t_3 = __pyx_t_2;
+            goto __pyx_L40_bool_binop_done;
+          }
+          __pyx_t_2 = ((!((__pyx_v_unsigned_long_is_signed ^ __pyx_v_dtype_signed) != 0)) != 0);
+          __pyx_t_3 = __pyx_t_2;
+          __pyx_L40_bool_binop_done:;
+          if (__pyx_t_3) {
+            if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_kp_s_unsigned_long, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 98, __pyx_L1_error)
+            goto __pyx_L10_break;
+          }
+          break;
+          case 'f':
+          break;
+          case 'c':
+          break;
+          case 'O':
+          break;
+          default: break;
+        }
+      }
+    }
+    __pyx_t_2 = ((__pyx_v_itemsize == -1L) != 0);
+    if (!__pyx_t_2) {
+    } else {
+      __pyx_t_3 = __pyx_t_2;
+      goto __pyx_L44_bool_binop_done;
+    }
+    __pyx_t_2 = ((__pyx_v_itemsize == (sizeof(short))) != 0);
+    __pyx_t_3 = __pyx_t_2;
+    __pyx_L44_bool_binop_done:;
+    if (__pyx_t_3) {
+      __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_short(__pyx_v_arg, 0); 
+      __pyx_v_memslice = __pyx_t_8;
+      __pyx_t_3 = (__pyx_v_memslice.memview != 0);
+      if (__pyx_t_3) {
+        __PYX_XDEC_MEMVIEW((&__pyx_v_memslice), 1); 
+        if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_n_s_short, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 98, __pyx_L1_error)
+        goto __pyx_L10_break;
+      }
+      /*else*/ {
+        PyErr_Clear(); 
+      }
+    }
+    __pyx_t_2 = ((__pyx_v_itemsize == -1L) != 0);
+    if (!__pyx_t_2) {
+    } else {
+      __pyx_t_3 = __pyx_t_2;
+      goto __pyx_L48_bool_binop_done;
+    }
+    __pyx_t_2 = ((__pyx_v_itemsize == (sizeof(int))) != 0);
+    __pyx_t_3 = __pyx_t_2;
+    __pyx_L48_bool_binop_done:;
+    if (__pyx_t_3) {
+      __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_int(__pyx_v_arg, 0); 
+      __pyx_v_memslice = __pyx_t_8;
+      __pyx_t_3 = (__pyx_v_memslice.memview != 0);
+      if (__pyx_t_3) {
+        __PYX_XDEC_MEMVIEW((&__pyx_v_memslice), 1); 
+        if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_n_s_int, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 98, __pyx_L1_error)
+        goto __pyx_L10_break;
+      }
+      /*else*/ {
+        PyErr_Clear(); 
+      }
+    }
+    __pyx_t_2 = ((__pyx_v_itemsize == -1L) != 0);
+    if (!__pyx_t_2) {
+    } else {
+      __pyx_t_3 = __pyx_t_2;
+      goto __pyx_L52_bool_binop_done;
+    }
+    __pyx_t_2 = ((__pyx_v_itemsize == (sizeof(long))) != 0);
+    __pyx_t_3 = __pyx_t_2;
+    __pyx_L52_bool_binop_done:;
+    if (__pyx_t_3) {
+      __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_long(__pyx_v_arg, 0); 
+      __pyx_v_memslice = __pyx_t_8;
+      __pyx_t_3 = (__pyx_v_memslice.memview != 0);
+      if (__pyx_t_3) {
+        __PYX_XDEC_MEMVIEW((&__pyx_v_memslice), 1); 
+        if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_n_s_long, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 98, __pyx_L1_error)
+        goto __pyx_L10_break;
+      }
+      /*else*/ {
+        PyErr_Clear(); 
+      }
+    }
+    __pyx_t_2 = ((__pyx_v_itemsize == -1L) != 0);
+    if (!__pyx_t_2) {
+    } else {
+      __pyx_t_3 = __pyx_t_2;
+      goto __pyx_L56_bool_binop_done;
+    }
+    __pyx_t_2 = ((__pyx_v_itemsize == (sizeof(PY_LONG_LONG))) != 0);
+    __pyx_t_3 = __pyx_t_2;
+    __pyx_L56_bool_binop_done:;
+    if (__pyx_t_3) {
+      __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_PY_LONG_LONG(__pyx_v_arg, 0); 
+      __pyx_v_memslice = __pyx_t_8;
+      __pyx_t_3 = (__pyx_v_memslice.memview != 0);
+      if (__pyx_t_3) {
+        __PYX_XDEC_MEMVIEW((&__pyx_v_memslice), 1); 
+        if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_kp_s_long_long, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 98, __pyx_L1_error)
+        goto __pyx_L10_break;
+      }
+      /*else*/ {
+        PyErr_Clear(); 
+      }
+    }
+    __pyx_t_2 = ((__pyx_v_itemsize == -1L) != 0);
+    if (!__pyx_t_2) {
+    } else {
+      __pyx_t_3 = __pyx_t_2;
+      goto __pyx_L60_bool_binop_done;
+    }
+    __pyx_t_2 = ((__pyx_v_itemsize == (sizeof(unsigned short))) != 0);
+    __pyx_t_3 = __pyx_t_2;
+    __pyx_L60_bool_binop_done:;
+    if (__pyx_t_3) {
+      __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_short(__pyx_v_arg, 0); 
+      __pyx_v_memslice = __pyx_t_8;
+      __pyx_t_3 = (__pyx_v_memslice.memview != 0);
+      if (__pyx_t_3) {
+        __PYX_XDEC_MEMVIEW((&__pyx_v_memslice), 1); 
+        if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_kp_s_unsigned_short, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 98, __pyx_L1_error)
+        goto __pyx_L10_break;
+      }
+      /*else*/ {
+        PyErr_Clear(); 
+      }
+    }
+    __pyx_t_2 = ((__pyx_v_itemsize == -1L) != 0);
+    if (!__pyx_t_2) {
+    } else {
+      __pyx_t_3 = __pyx_t_2;
+      goto __pyx_L64_bool_binop_done;
+    }
+    __pyx_t_2 = ((__pyx_v_itemsize == (sizeof(unsigned int))) != 0);
+    __pyx_t_3 = __pyx_t_2;
+    __pyx_L64_bool_binop_done:;
+    if (__pyx_t_3) {
+      __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_int(__pyx_v_arg, 0); 
+      __pyx_v_memslice = __pyx_t_8;
+      __pyx_t_3 = (__pyx_v_memslice.memview != 0);
+      if (__pyx_t_3) {
+        __PYX_XDEC_MEMVIEW((&__pyx_v_memslice), 1); 
+        if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_kp_s_unsigned_int, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 98, __pyx_L1_error)
+        goto __pyx_L10_break;
+      }
+      /*else*/ {
+        PyErr_Clear(); 
+      }
+    }
+    __pyx_t_2 = ((__pyx_v_itemsize == -1L) != 0);
+    if (!__pyx_t_2) {
+    } else {
+      __pyx_t_3 = __pyx_t_2;
+      goto __pyx_L68_bool_binop_done;
+    }
+    __pyx_t_2 = ((__pyx_v_itemsize == (sizeof(unsigned long))) != 0);
+    __pyx_t_3 = __pyx_t_2;
+    __pyx_L68_bool_binop_done:;
+    if (__pyx_t_3) {
+      __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_long(__pyx_v_arg, 0); 
+      __pyx_v_memslice = __pyx_t_8;
+      __pyx_t_3 = (__pyx_v_memslice.memview != 0);
+      if (__pyx_t_3) {
+        __PYX_XDEC_MEMVIEW((&__pyx_v_memslice), 1); 
+        if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_kp_s_unsigned_long, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 98, __pyx_L1_error)
+        goto __pyx_L10_break;
+      }
+      /*else*/ {
+        PyErr_Clear(); 
+      }
+    }
+    if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, Py_None, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 98, __pyx_L1_error)
+    goto __pyx_L10_break;
+  }
+  __pyx_L10_break:;
+  __pyx_t_6 = PyList_New(0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 98, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_6);
+  __pyx_v_candidates = ((PyObject*)__pyx_t_6);
+  __pyx_t_6 = 0;
+  __pyx_t_5 = 0;
+  if (unlikely(__pyx_v_signatures == Py_None)) {
+    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
+    __PYX_ERR(0, 98, __pyx_L1_error)
+  }
+  __pyx_t_1 = __Pyx_dict_iterator(((PyObject*)__pyx_v_signatures), 1, ((PyObject *)NULL), (&__pyx_t_9), (&__pyx_t_10)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 98, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_6);
+  __pyx_t_6 = __pyx_t_1;
+  __pyx_t_1 = 0;
+  while (1) {
+    __pyx_t_11 = __Pyx_dict_iter_next(__pyx_t_6, __pyx_t_9, &__pyx_t_5, &__pyx_t_1, NULL, NULL, __pyx_t_10);
+    if (unlikely(__pyx_t_11 == 0)) break;
+    if (unlikely(__pyx_t_11 == -1)) __PYX_ERR(0, 98, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_1);
+    __Pyx_XDECREF_SET(__pyx_v_sig, __pyx_t_1);
+    __pyx_t_1 = 0;
+    __pyx_v_match_found = 0;
+    __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_v_sig, __pyx_n_s_strip); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 98, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_13);
+    __pyx_t_14 = NULL;
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_13))) {
+      __pyx_t_14 = PyMethod_GET_SELF(__pyx_t_13);
+      if (likely(__pyx_t_14)) {
+        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13);
+        __Pyx_INCREF(__pyx_t_14);
+        __Pyx_INCREF(function);
+        __Pyx_DECREF_SET(__pyx_t_13, function);
+      }
+    }
+    __pyx_t_12 = (__pyx_t_14) ? __Pyx_PyObject_Call2Args(__pyx_t_13, __pyx_t_14, __pyx_kp_s_) : __Pyx_PyObject_CallOneArg(__pyx_t_13, __pyx_kp_s_);
+    __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
+    if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 98, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_12);
+    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+    __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_n_s_split); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 98, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_13);
+    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
+    __pyx_t_12 = NULL;
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_13))) {
+      __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_13);
+      if (likely(__pyx_t_12)) {
+        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13);
+        __Pyx_INCREF(__pyx_t_12);
+        __Pyx_INCREF(function);
+        __Pyx_DECREF_SET(__pyx_t_13, function);
+      }
+    }
+    __pyx_t_1 = (__pyx_t_12) ? __Pyx_PyObject_Call2Args(__pyx_t_13, __pyx_t_12, __pyx_kp_s__2) : __Pyx_PyObject_CallOneArg(__pyx_t_13, __pyx_kp_s__2);
+    __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
+    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 98, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_1);
+    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+    __Pyx_XDECREF_SET(__pyx_v_src_sig, __pyx_t_1);
+    __pyx_t_1 = 0;
+    __pyx_t_15 = PyList_GET_SIZE(__pyx_v_dest_sig); if (unlikely(__pyx_t_15 == ((Py_ssize_t)-1))) __PYX_ERR(0, 98, __pyx_L1_error)
+    __pyx_t_16 = __pyx_t_15;
+    for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) {
+      __pyx_v_i = __pyx_t_17;
+      __pyx_t_1 = PyList_GET_ITEM(__pyx_v_dest_sig, __pyx_v_i);
+      __Pyx_INCREF(__pyx_t_1);
+      __Pyx_XDECREF_SET(__pyx_v_dst_type, __pyx_t_1);
+      __pyx_t_1 = 0;
+      __pyx_t_3 = (__pyx_v_dst_type != Py_None);
+      __pyx_t_2 = (__pyx_t_3 != 0);
+      if (__pyx_t_2) {
+        __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_src_sig, __pyx_v_i, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 98, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_1);
+        __pyx_t_13 = PyObject_RichCompare(__pyx_t_1, __pyx_v_dst_type, Py_EQ); __Pyx_XGOTREF(__pyx_t_13); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 98, __pyx_L1_error)
+        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+        __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_13); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 98, __pyx_L1_error)
+        __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+        if (__pyx_t_2) {
+          __pyx_v_match_found = 1;
+          goto __pyx_L76;
+        }
+        /*else*/ {
+          __pyx_v_match_found = 0;
+          goto __pyx_L74_break;
+        }
+        __pyx_L76:;
+      }
+    }
+    __pyx_L74_break:;
+    __pyx_t_2 = (__pyx_v_match_found != 0);
+    if (__pyx_t_2) {
+      __pyx_t_18 = __Pyx_PyList_Append(__pyx_v_candidates, __pyx_v_sig); if (unlikely(__pyx_t_18 == ((int)-1))) __PYX_ERR(0, 98, __pyx_L1_error)
+    }
+  }
+  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+  __pyx_t_2 = (PyList_GET_SIZE(__pyx_v_candidates) != 0);
+  __pyx_t_3 = ((!__pyx_t_2) != 0);
+  if (__pyx_t_3) {
+    __pyx_t_6 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__3, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 98, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_6);
+    __Pyx_Raise(__pyx_t_6, 0, 0, 0);
+    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+    __PYX_ERR(0, 98, __pyx_L1_error)
+  }
+  __pyx_t_9 = PyList_GET_SIZE(__pyx_v_candidates); if (unlikely(__pyx_t_9 == ((Py_ssize_t)-1))) __PYX_ERR(0, 98, __pyx_L1_error)
+  __pyx_t_3 = ((__pyx_t_9 > 1) != 0);
+  if (__pyx_t_3) {
+    __pyx_t_6 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__4, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 98, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_6);
+    __Pyx_Raise(__pyx_t_6, 0, 0, 0);
+    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+    __PYX_ERR(0, 98, __pyx_L1_error)
+  }
+  /*else*/ {
+    __Pyx_XDECREF(__pyx_r);
+    if (unlikely(__pyx_v_signatures == Py_None)) {
+      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
+      __PYX_ERR(0, 98, __pyx_L1_error)
+    }
+    __pyx_t_6 = __Pyx_PyDict_GetItem(((PyObject*)__pyx_v_signatures), PyList_GET_ITEM(__pyx_v_candidates, 0)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 98, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_6);
+    __pyx_r = __pyx_t_6;
+    __pyx_t_6 = 0;
+    goto __pyx_L0;
+  }
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_6);
+  __Pyx_XDECREF(__pyx_t_12);
+  __Pyx_XDECREF(__pyx_t_13);
+  __Pyx_XDECREF(__pyx_t_14);
+  __Pyx_AddTraceback("pystencils.boundaries.createindexlistcython.__pyx_fused_cpdef", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XDECREF(__pyx_v_dest_sig);
+  __Pyx_XDECREF(__pyx_v_ndarray);
+  __Pyx_XDECREF(__pyx_v_arg);
+  __Pyx_XDECREF(__pyx_v_dtype);
+  __Pyx_XDECREF(__pyx_v_arg_base);
+  __Pyx_XDECREF(__pyx_v_candidates);
+  __Pyx_XDECREF(__pyx_v_sig);
+  __Pyx_XDECREF(__pyx_v_src_sig);
+  __Pyx_XDECREF(__pyx_v_dst_type);
+  __Pyx_XDECREF(__pyx_v_kwargs);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static PyObject *__pyx_fuse_0__pyx_pw_10pystencils_10boundaries_21createindexlistcython_57create_boundary_cell_index_list_3d(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyMethodDef __pyx_fuse_0__pyx_mdef_10pystencils_10boundaries_21createindexlistcython_57create_boundary_cell_index_list_3d = {"__pyx_fuse_0create_boundary_cell_index_list_3d", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_fuse_0__pyx_pw_10pystencils_10boundaries_21createindexlistcython_57create_boundary_cell_index_list_3d, METH_VARARGS|METH_KEYWORDS, 0};
+static PyObject *__pyx_fuse_0__pyx_pw_10pystencils_10boundaries_21createindexlistcython_57create_boundary_cell_index_list_3d(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_flag_field = 0;
+  short __pyx_v_boundary_mask;
+  short __pyx_v_fluid_mask;
+  PyObject *__pyx_v_stencil = 0;
+  int __pyx_v_single_link;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("create_boundary_cell_index_list_3d (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_flag_field,&__pyx_n_s_boundary_mask,&__pyx_n_s_fluid_mask,&__pyx_n_s_stencil,&__pyx_n_s_single_link,0};
+    PyObject* values[5] = {0,0,0,0,0};
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+        CYTHON_FALLTHROUGH;
+        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
+        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_flag_field)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
+        case  1:
+        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_boundary_mask)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_cell_index_list_3d", 1, 5, 5, 1); __PYX_ERR(0, 98, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  2:
+        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_fluid_mask)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_cell_index_list_3d", 1, 5, 5, 2); __PYX_ERR(0, 98, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  3:
+        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_stencil)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_cell_index_list_3d", 1, 5, 5, 3); __PYX_ERR(0, 98, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  4:
+        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_single_link)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_cell_index_list_3d", 1, 5, 5, 4); __PYX_ERR(0, 98, __pyx_L3_error)
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "create_boundary_cell_index_list_3d") < 0)) __PYX_ERR(0, 98, __pyx_L3_error)
+      }
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 5) {
+      goto __pyx_L5_argtuple_error;
+    } else {
+      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+      values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+      values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+    }
+    __pyx_v_flag_field = ((PyObject *)values[0]);
+    __pyx_v_boundary_mask = __Pyx_PyInt_As_short(values[1]); if (unlikely((__pyx_v_boundary_mask == (short)-1) && PyErr_Occurred())) __PYX_ERR(0, 99, __pyx_L3_error)
+    __pyx_v_fluid_mask = __Pyx_PyInt_As_short(values[2]); if (unlikely((__pyx_v_fluid_mask == (short)-1) && PyErr_Occurred())) __PYX_ERR(0, 99, __pyx_L3_error)
+    __pyx_v_stencil = ((PyObject *)values[3]);
+    __pyx_v_single_link = __Pyx_PyInt_As_int(values[4]); if (unlikely((__pyx_v_single_link == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 100, __pyx_L3_error)
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("create_boundary_cell_index_list_3d", 1, 5, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 98, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("pystencils.boundaries.createindexlistcython.create_boundary_cell_index_list_3d", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_10pystencils_10boundaries_21createindexlistcython_56create_boundary_cell_index_list_3d(__pyx_self, __pyx_v_flag_field, __pyx_v_boundary_mask, __pyx_v_fluid_mask, __pyx_v_stencil, __pyx_v_single_link);
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_10pystencils_10boundaries_21createindexlistcython_56create_boundary_cell_index_list_3d(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_flag_field, short __pyx_v_boundary_mask, short __pyx_v_fluid_mask, PyObject *__pyx_v_stencil, int __pyx_v_single_link) {
+  int __pyx_v_xs;
+  int __pyx_v_ys;
+  int __pyx_v_zs;
+  int __pyx_v_x;
+  int __pyx_v_y;
+  int __pyx_v_z;
+  int __pyx_v_dirIdx;
+  int __pyx_v_num_directions;
+  int __pyx_v_dx;
+  int __pyx_v_dy;
+  int __pyx_v_dz;
+  PyObject *__pyx_v_boundary_index_list = NULL;
+  __Pyx_LocalBuf_ND __pyx_pybuffernd_flag_field;
+  __Pyx_Buffer __pyx_pybuffer_flag_field;
+  __Pyx_LocalBuf_ND __pyx_pybuffernd_stencil;
+  __Pyx_Buffer __pyx_pybuffer_stencil;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
+  PyObject *__pyx_t_5 = NULL;
+  PyObject *(*__pyx_t_6)(PyObject *);
+  int __pyx_t_7;
+  int __pyx_t_8;
+  int __pyx_t_9;
+  int __pyx_t_10;
+  int __pyx_t_11;
+  int __pyx_t_12;
+  int __pyx_t_13;
+  int __pyx_t_14;
+  int __pyx_t_15;
+  Py_ssize_t __pyx_t_16;
+  Py_ssize_t __pyx_t_17;
+  Py_ssize_t __pyx_t_18;
+  int __pyx_t_19;
+  int __pyx_t_20;
+  int __pyx_t_21;
+  int __pyx_t_22;
+  Py_ssize_t __pyx_t_23;
+  Py_ssize_t __pyx_t_24;
+  Py_ssize_t __pyx_t_25;
+  Py_ssize_t __pyx_t_26;
+  Py_ssize_t __pyx_t_27;
+  Py_ssize_t __pyx_t_28;
+  int __pyx_t_29;
+  int __pyx_t_30;
+  int __pyx_t_31;
+  Py_ssize_t __pyx_t_32;
+  Py_ssize_t __pyx_t_33;
+  Py_ssize_t __pyx_t_34;
+  int __pyx_t_35;
+  __Pyx_RefNannySetupContext("__pyx_fuse_0create_boundary_cell_index_list_3d", 0);
+  __pyx_pybuffer_flag_field.pybuffer.buf = NULL;
+  __pyx_pybuffer_flag_field.refcount = 0;
+  __pyx_pybuffernd_flag_field.data = NULL;
+  __pyx_pybuffernd_flag_field.rcbuffer = &__pyx_pybuffer_flag_field;
+  __pyx_pybuffer_stencil.pybuffer.buf = NULL;
+  __pyx_pybuffer_stencil.refcount = 0;
+  __pyx_pybuffernd_stencil.data = NULL;
+  __pyx_pybuffernd_stencil.rcbuffer = &__pyx_pybuffer_stencil;
+  {
+    __Pyx_BufFmt_StackElem __pyx_stack[1];
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_flag_field.rcbuffer->pybuffer, (PyObject*)__pyx_v_flag_field, &__Pyx_TypeInfo_short, PyBUF_FORMAT| PyBUF_INDIRECT, 3, 0, __pyx_stack) == -1)) __PYX_ERR(0, 98, __pyx_L1_error)
+  }
+  __pyx_pybuffernd_flag_field.diminfo[0].strides = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_flag_field.diminfo[0].shape = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_flag_field.diminfo[0].suboffsets = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.suboffsets[0]; __pyx_pybuffernd_flag_field.diminfo[1].strides = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_flag_field.diminfo[1].shape = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_flag_field.diminfo[1].suboffsets = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.suboffsets[1]; __pyx_pybuffernd_flag_field.diminfo[2].strides = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_flag_field.diminfo[2].shape = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.shape[2]; __pyx_pybuffernd_flag_field.diminfo[2].suboffsets = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.suboffsets[2];
+  {
+    __Pyx_BufFmt_StackElem __pyx_stack[1];
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_stencil.rcbuffer->pybuffer, (PyObject*)__pyx_v_stencil, &__Pyx_TypeInfo_int, PyBUF_FORMAT| PyBUF_INDIRECT, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 98, __pyx_L1_error)
+  }
+  __pyx_pybuffernd_stencil.diminfo[0].strides = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_stencil.diminfo[0].shape = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_stencil.diminfo[0].suboffsets = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.suboffsets[0]; __pyx_pybuffernd_stencil.diminfo[1].strides = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_stencil.diminfo[1].shape = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_stencil.diminfo[1].suboffsets = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.suboffsets[1];
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":104
+ *     cdef int dirIdx, num_directions, dx, dy, dz
+ * 
+ *     xs, ys, zs = flag_field.shape             # <<<<<<<<<<<<<<
+ *     boundary_index_list = []
+ *     num_directions = stencil.shape[0]
+ */
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_flag_field), __pyx_n_s_shape); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 104, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) {
+    PyObject* sequence = __pyx_t_1;
+    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
+    if (unlikely(size != 3)) {
+      if (size > 3) __Pyx_RaiseTooManyValuesError(3);
+      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
+      __PYX_ERR(0, 104, __pyx_L1_error)
+    }
+    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+    if (likely(PyTuple_CheckExact(sequence))) {
+      __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
+      __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); 
+      __pyx_t_4 = PyTuple_GET_ITEM(sequence, 2); 
+    } else {
+      __pyx_t_2 = PyList_GET_ITEM(sequence, 0); 
+      __pyx_t_3 = PyList_GET_ITEM(sequence, 1); 
+      __pyx_t_4 = PyList_GET_ITEM(sequence, 2); 
+    }
+    __Pyx_INCREF(__pyx_t_2);
+    __Pyx_INCREF(__pyx_t_3);
+    __Pyx_INCREF(__pyx_t_4);
+    #else
+    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 104, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_2);
+    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 104, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    __pyx_t_4 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 104, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
+    #endif
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  } else {
+    Py_ssize_t index = -1;
+    __pyx_t_5 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 104, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_5);
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __pyx_t_6 = Py_TYPE(__pyx_t_5)->tp_iternext;
+    index = 0; __pyx_t_2 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_2)) goto __pyx_L3_unpacking_failed;
+    __Pyx_GOTREF(__pyx_t_2);
+    index = 1; __pyx_t_3 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_3)) goto __pyx_L3_unpacking_failed;
+    __Pyx_GOTREF(__pyx_t_3);
+    index = 2; __pyx_t_4 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_4)) goto __pyx_L3_unpacking_failed;
+    __Pyx_GOTREF(__pyx_t_4);
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_5), 3) < 0) __PYX_ERR(0, 104, __pyx_L1_error)
+    __pyx_t_6 = NULL;
+    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+    goto __pyx_L4_unpacking_done;
+    __pyx_L3_unpacking_failed:;
+    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+    __pyx_t_6 = NULL;
+    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
+    __PYX_ERR(0, 104, __pyx_L1_error)
+    __pyx_L4_unpacking_done:;
+  }
+  __pyx_t_7 = __Pyx_PyInt_As_int(__pyx_t_2); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 104, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_8 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_8 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 104, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __pyx_t_9 = __Pyx_PyInt_As_int(__pyx_t_4); if (unlikely((__pyx_t_9 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 104, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __pyx_v_xs = __pyx_t_7;
+  __pyx_v_ys = __pyx_t_8;
+  __pyx_v_zs = __pyx_t_9;
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":105
+ * 
+ *     xs, ys, zs = flag_field.shape
+ *     boundary_index_list = []             # <<<<<<<<<<<<<<
+ *     num_directions = stencil.shape[0]
+ * 
+ */
+  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 105, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_boundary_index_list = ((PyObject*)__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":106
+ *     xs, ys, zs = flag_field.shape
+ *     boundary_index_list = []
+ *     num_directions = stencil.shape[0]             # <<<<<<<<<<<<<<
+ * 
+ *     for z in range(0, zs):
+ */
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_stencil), __pyx_n_s_shape); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 106, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_4 = __Pyx_GetItemInt(__pyx_t_1, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 106, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_9 = __Pyx_PyInt_As_int(__pyx_t_4); if (unlikely((__pyx_t_9 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 106, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __pyx_v_num_directions = __pyx_t_9;
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":108
+ *     num_directions = stencil.shape[0]
+ * 
+ *     for z in range(0, zs):             # <<<<<<<<<<<<<<
+ *         for y in range(0, ys):
+ *             for x in range(0, xs):
+ */
+  __pyx_t_9 = __pyx_v_zs;
+  __pyx_t_8 = __pyx_t_9;
+  for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_8; __pyx_t_7+=1) {
+    __pyx_v_z = __pyx_t_7;
+
+    /* "pystencils/boundaries/createindexlistcython.pyx":109
+ * 
+ *     for z in range(0, zs):
+ *         for y in range(0, ys):             # <<<<<<<<<<<<<<
+ *             for x in range(0, xs):
+ *                 if flag_field[x, y, z] & boundary_mask:
+ */
+    __pyx_t_10 = __pyx_v_ys;
+    __pyx_t_11 = __pyx_t_10;
+    for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) {
+      __pyx_v_y = __pyx_t_12;
+
+      /* "pystencils/boundaries/createindexlistcython.pyx":110
+ *     for z in range(0, zs):
+ *         for y in range(0, ys):
+ *             for x in range(0, xs):             # <<<<<<<<<<<<<<
+ *                 if flag_field[x, y, z] & boundary_mask:
+ *                     for dirIdx in range(num_directions):
+ */
+      __pyx_t_13 = __pyx_v_xs;
+      __pyx_t_14 = __pyx_t_13;
+      for (__pyx_t_15 = 0; __pyx_t_15 < __pyx_t_14; __pyx_t_15+=1) {
+        __pyx_v_x = __pyx_t_15;
+
+        /* "pystencils/boundaries/createindexlistcython.pyx":111
+ *         for y in range(0, ys):
+ *             for x in range(0, xs):
+ *                 if flag_field[x, y, z] & boundary_mask:             # <<<<<<<<<<<<<<
+ *                     for dirIdx in range(num_directions):
+ *                         dx = stencil[dirIdx,0]
+ */
+        __pyx_t_16 = __pyx_v_x;
+        __pyx_t_17 = __pyx_v_y;
+        __pyx_t_18 = __pyx_v_z;
+        __pyx_t_19 = (((*__Pyx_BufPtrFull3d(short *, __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.buf, __pyx_t_16, __pyx_pybuffernd_flag_field.diminfo[0].strides, __pyx_pybuffernd_flag_field.diminfo[0].suboffsets, __pyx_t_17, __pyx_pybuffernd_flag_field.diminfo[1].strides, __pyx_pybuffernd_flag_field.diminfo[1].suboffsets, __pyx_t_18, __pyx_pybuffernd_flag_field.diminfo[2].strides, __pyx_pybuffernd_flag_field.diminfo[2].suboffsets)) & __pyx_v_boundary_mask) != 0);
+        if (__pyx_t_19) {
+
+          /* "pystencils/boundaries/createindexlistcython.pyx":112
+ *             for x in range(0, xs):
+ *                 if flag_field[x, y, z] & boundary_mask:
+ *                     for dirIdx in range(num_directions):             # <<<<<<<<<<<<<<
+ *                         dx = stencil[dirIdx,0]
+ *                         dy = stencil[dirIdx,1]
+ */
+          __pyx_t_20 = __pyx_v_num_directions;
+          __pyx_t_21 = __pyx_t_20;
+          for (__pyx_t_22 = 0; __pyx_t_22 < __pyx_t_21; __pyx_t_22+=1) {
+            __pyx_v_dirIdx = __pyx_t_22;
+
+            /* "pystencils/boundaries/createindexlistcython.pyx":113
+ *                 if flag_field[x, y, z] & boundary_mask:
+ *                     for dirIdx in range(num_directions):
+ *                         dx = stencil[dirIdx,0]             # <<<<<<<<<<<<<<
+ *                         dy = stencil[dirIdx,1]
+ *                         dz = stencil[dirIdx,2]
+ */
+            __pyx_t_23 = __pyx_v_dirIdx;
+            __pyx_t_24 = 0;
+            __pyx_v_dx = (*__Pyx_BufPtrFull2d(int *, __pyx_pybuffernd_stencil.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_stencil.diminfo[0].strides, __pyx_pybuffernd_stencil.diminfo[0].suboffsets, __pyx_t_24, __pyx_pybuffernd_stencil.diminfo[1].strides, __pyx_pybuffernd_stencil.diminfo[1].suboffsets));
+
+            /* "pystencils/boundaries/createindexlistcython.pyx":114
+ *                     for dirIdx in range(num_directions):
+ *                         dx = stencil[dirIdx,0]
+ *                         dy = stencil[dirIdx,1]             # <<<<<<<<<<<<<<
+ *                         dz = stencil[dirIdx,2]
+ *                         if 0 <= x + dx < xs and 0 <= y + dy < ys and 0 <= z + dz < zs:
+ */
+            __pyx_t_25 = __pyx_v_dirIdx;
+            __pyx_t_26 = 1;
+            __pyx_v_dy = (*__Pyx_BufPtrFull2d(int *, __pyx_pybuffernd_stencil.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_stencil.diminfo[0].strides, __pyx_pybuffernd_stencil.diminfo[0].suboffsets, __pyx_t_26, __pyx_pybuffernd_stencil.diminfo[1].strides, __pyx_pybuffernd_stencil.diminfo[1].suboffsets));
+
+            /* "pystencils/boundaries/createindexlistcython.pyx":115
+ *                         dx = stencil[dirIdx,0]
+ *                         dy = stencil[dirIdx,1]
+ *                         dz = stencil[dirIdx,2]             # <<<<<<<<<<<<<<
+ *                         if 0 <= x + dx < xs and 0 <= y + dy < ys and 0 <= z + dz < zs:
+ *                             if flag_field[x + dx, y + dy, z + dz] & fluid_mask:
+ */
+            __pyx_t_27 = __pyx_v_dirIdx;
+            __pyx_t_28 = 2;
+            __pyx_v_dz = (*__Pyx_BufPtrFull2d(int *, __pyx_pybuffernd_stencil.rcbuffer->pybuffer.buf, __pyx_t_27, __pyx_pybuffernd_stencil.diminfo[0].strides, __pyx_pybuffernd_stencil.diminfo[0].suboffsets, __pyx_t_28, __pyx_pybuffernd_stencil.diminfo[1].strides, __pyx_pybuffernd_stencil.diminfo[1].suboffsets));
+
+            /* "pystencils/boundaries/createindexlistcython.pyx":116
+ *                         dy = stencil[dirIdx,1]
+ *                         dz = stencil[dirIdx,2]
+ *                         if 0 <= x + dx < xs and 0 <= y + dy < ys and 0 <= z + dz < zs:             # <<<<<<<<<<<<<<
+ *                             if flag_field[x + dx, y + dy, z + dz] & fluid_mask:
+ *                                 boundary_index_list.append((x,y,z, dirIdx))
+ */
+            __pyx_t_29 = (__pyx_v_x + __pyx_v_dx);
+            __pyx_t_30 = (0 <= __pyx_t_29);
+            if (__pyx_t_30) {
+              __pyx_t_30 = (__pyx_t_29 < __pyx_v_xs);
+            }
+            __pyx_t_31 = (__pyx_t_30 != 0);
+            if (__pyx_t_31) {
+            } else {
+              __pyx_t_19 = __pyx_t_31;
+              goto __pyx_L15_bool_binop_done;
+            }
+            __pyx_t_29 = (__pyx_v_y + __pyx_v_dy);
+            __pyx_t_31 = (0 <= __pyx_t_29);
+            if (__pyx_t_31) {
+              __pyx_t_31 = (__pyx_t_29 < __pyx_v_ys);
+            }
+            __pyx_t_30 = (__pyx_t_31 != 0);
+            if (__pyx_t_30) {
+            } else {
+              __pyx_t_19 = __pyx_t_30;
+              goto __pyx_L15_bool_binop_done;
+            }
+            __pyx_t_29 = (__pyx_v_z + __pyx_v_dz);
+            __pyx_t_30 = (0 <= __pyx_t_29);
+            if (__pyx_t_30) {
+              __pyx_t_30 = (__pyx_t_29 < __pyx_v_zs);
+            }
+            __pyx_t_31 = (__pyx_t_30 != 0);
+            __pyx_t_19 = __pyx_t_31;
+            __pyx_L15_bool_binop_done:;
+            if (__pyx_t_19) {
+
+              /* "pystencils/boundaries/createindexlistcython.pyx":117
+ *                         dz = stencil[dirIdx,2]
+ *                         if 0 <= x + dx < xs and 0 <= y + dy < ys and 0 <= z + dz < zs:
+ *                             if flag_field[x + dx, y + dy, z + dz] & fluid_mask:             # <<<<<<<<<<<<<<
+ *                                 boundary_index_list.append((x,y,z, dirIdx))
+ *                                 if single_link:
+ */
+              __pyx_t_32 = (__pyx_v_x + __pyx_v_dx);
+              __pyx_t_33 = (__pyx_v_y + __pyx_v_dy);
+              __pyx_t_34 = (__pyx_v_z + __pyx_v_dz);
+              __pyx_t_19 = (((*__Pyx_BufPtrFull3d(short *, __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.buf, __pyx_t_32, __pyx_pybuffernd_flag_field.diminfo[0].strides, __pyx_pybuffernd_flag_field.diminfo[0].suboffsets, __pyx_t_33, __pyx_pybuffernd_flag_field.diminfo[1].strides, __pyx_pybuffernd_flag_field.diminfo[1].suboffsets, __pyx_t_34, __pyx_pybuffernd_flag_field.diminfo[2].strides, __pyx_pybuffernd_flag_field.diminfo[2].suboffsets)) & __pyx_v_fluid_mask) != 0);
+              if (__pyx_t_19) {
+
+                /* "pystencils/boundaries/createindexlistcython.pyx":118
+ *                         if 0 <= x + dx < xs and 0 <= y + dy < ys and 0 <= z + dz < zs:
+ *                             if flag_field[x + dx, y + dy, z + dz] & fluid_mask:
+ *                                 boundary_index_list.append((x,y,z, dirIdx))             # <<<<<<<<<<<<<<
+ *                                 if single_link:
+ *                                     break
+ */
+                __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_x); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 118, __pyx_L1_error)
+                __Pyx_GOTREF(__pyx_t_4);
+                __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_y); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 118, __pyx_L1_error)
+                __Pyx_GOTREF(__pyx_t_1);
+                __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_z); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 118, __pyx_L1_error)
+                __Pyx_GOTREF(__pyx_t_3);
+                __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_dirIdx); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 118, __pyx_L1_error)
+                __Pyx_GOTREF(__pyx_t_2);
+                __pyx_t_5 = PyTuple_New(4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 118, __pyx_L1_error)
+                __Pyx_GOTREF(__pyx_t_5);
+                __Pyx_GIVEREF(__pyx_t_4);
+                PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4);
+                __Pyx_GIVEREF(__pyx_t_1);
+                PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_1);
+                __Pyx_GIVEREF(__pyx_t_3);
+                PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_t_3);
+                __Pyx_GIVEREF(__pyx_t_2);
+                PyTuple_SET_ITEM(__pyx_t_5, 3, __pyx_t_2);
+                __pyx_t_4 = 0;
+                __pyx_t_1 = 0;
+                __pyx_t_3 = 0;
+                __pyx_t_2 = 0;
+                __pyx_t_35 = __Pyx_PyList_Append(__pyx_v_boundary_index_list, __pyx_t_5); if (unlikely(__pyx_t_35 == ((int)-1))) __PYX_ERR(0, 118, __pyx_L1_error)
+                __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+                /* "pystencils/boundaries/createindexlistcython.pyx":119
+ *                             if flag_field[x + dx, y + dy, z + dz] & fluid_mask:
+ *                                 boundary_index_list.append((x,y,z, dirIdx))
+ *                                 if single_link:             # <<<<<<<<<<<<<<
+ *                                     break
+ *     return boundary_index_list
+ */
+                __pyx_t_19 = (__pyx_v_single_link != 0);
+                if (__pyx_t_19) {
+
+                  /* "pystencils/boundaries/createindexlistcython.pyx":120
+ *                                 boundary_index_list.append((x,y,z, dirIdx))
+ *                                 if single_link:
+ *                                     break             # <<<<<<<<<<<<<<
+ *     return boundary_index_list
+ */
+                  goto __pyx_L13_break;
+
+                  /* "pystencils/boundaries/createindexlistcython.pyx":119
+ *                             if flag_field[x + dx, y + dy, z + dz] & fluid_mask:
+ *                                 boundary_index_list.append((x,y,z, dirIdx))
+ *                                 if single_link:             # <<<<<<<<<<<<<<
+ *                                     break
+ *     return boundary_index_list
+ */
+                }
+
+                /* "pystencils/boundaries/createindexlistcython.pyx":117
+ *                         dz = stencil[dirIdx,2]
+ *                         if 0 <= x + dx < xs and 0 <= y + dy < ys and 0 <= z + dz < zs:
+ *                             if flag_field[x + dx, y + dy, z + dz] & fluid_mask:             # <<<<<<<<<<<<<<
+ *                                 boundary_index_list.append((x,y,z, dirIdx))
+ *                                 if single_link:
+ */
+              }
+
+              /* "pystencils/boundaries/createindexlistcython.pyx":116
+ *                         dy = stencil[dirIdx,1]
+ *                         dz = stencil[dirIdx,2]
+ *                         if 0 <= x + dx < xs and 0 <= y + dy < ys and 0 <= z + dz < zs:             # <<<<<<<<<<<<<<
+ *                             if flag_field[x + dx, y + dy, z + dz] & fluid_mask:
+ *                                 boundary_index_list.append((x,y,z, dirIdx))
+ */
+            }
+          }
+          __pyx_L13_break:;
+
+          /* "pystencils/boundaries/createindexlistcython.pyx":111
+ *         for y in range(0, ys):
+ *             for x in range(0, xs):
+ *                 if flag_field[x, y, z] & boundary_mask:             # <<<<<<<<<<<<<<
+ *                     for dirIdx in range(num_directions):
+ *                         dx = stencil[dirIdx,0]
+ */
+        }
+      }
+    }
+  }
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":121
+ *                                 if single_link:
+ *                                     break
+ *     return boundary_index_list             # <<<<<<<<<<<<<<
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(__pyx_v_boundary_index_list);
+  __pyx_r = __pyx_v_boundary_index_list;
+  goto __pyx_L0;
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":98
+ * @cython.boundscheck(False) # turn off bounds-checking for entire function
+ * @cython.wraparound(False)  # turn off negative index wrapping for entire function
+ * def create_boundary_cell_index_list_3d(object[IntegerType, ndim=3] flag_field,             # <<<<<<<<<<<<<<
+ *                                        IntegerType boundary_mask, IntegerType fluid_mask,
+ *                                        object[int, ndim=2] stencil, int single_link):
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_XDECREF(__pyx_t_5);
+  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
+    __Pyx_PyThreadState_declare
+    __Pyx_PyThreadState_assign
+    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
+    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_flag_field.rcbuffer->pybuffer);
+    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_stencil.rcbuffer->pybuffer);
+  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
+  __Pyx_AddTraceback("pystencils.boundaries.createindexlistcython.create_boundary_cell_index_list_3d", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  goto __pyx_L2;
+  __pyx_L0:;
+  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_flag_field.rcbuffer->pybuffer);
+  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_stencil.rcbuffer->pybuffer);
+  __pyx_L2:;
+  __Pyx_XDECREF(__pyx_v_boundary_index_list);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static PyObject *__pyx_fuse_1__pyx_pw_10pystencils_10boundaries_21createindexlistcython_59create_boundary_cell_index_list_3d(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyMethodDef __pyx_fuse_1__pyx_mdef_10pystencils_10boundaries_21createindexlistcython_59create_boundary_cell_index_list_3d = {"__pyx_fuse_1create_boundary_cell_index_list_3d", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_fuse_1__pyx_pw_10pystencils_10boundaries_21createindexlistcython_59create_boundary_cell_index_list_3d, METH_VARARGS|METH_KEYWORDS, 0};
+static PyObject *__pyx_fuse_1__pyx_pw_10pystencils_10boundaries_21createindexlistcython_59create_boundary_cell_index_list_3d(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_flag_field = 0;
+  int __pyx_v_boundary_mask;
+  int __pyx_v_fluid_mask;
+  PyObject *__pyx_v_stencil = 0;
+  int __pyx_v_single_link;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("create_boundary_cell_index_list_3d (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_flag_field,&__pyx_n_s_boundary_mask,&__pyx_n_s_fluid_mask,&__pyx_n_s_stencil,&__pyx_n_s_single_link,0};
+    PyObject* values[5] = {0,0,0,0,0};
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+        CYTHON_FALLTHROUGH;
+        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
+        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_flag_field)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
+        case  1:
+        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_boundary_mask)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_cell_index_list_3d", 1, 5, 5, 1); __PYX_ERR(0, 98, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  2:
+        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_fluid_mask)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_cell_index_list_3d", 1, 5, 5, 2); __PYX_ERR(0, 98, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  3:
+        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_stencil)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_cell_index_list_3d", 1, 5, 5, 3); __PYX_ERR(0, 98, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  4:
+        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_single_link)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_cell_index_list_3d", 1, 5, 5, 4); __PYX_ERR(0, 98, __pyx_L3_error)
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "create_boundary_cell_index_list_3d") < 0)) __PYX_ERR(0, 98, __pyx_L3_error)
+      }
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 5) {
+      goto __pyx_L5_argtuple_error;
+    } else {
+      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+      values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+      values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+    }
+    __pyx_v_flag_field = ((PyObject *)values[0]);
+    __pyx_v_boundary_mask = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_boundary_mask == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 99, __pyx_L3_error)
+    __pyx_v_fluid_mask = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_fluid_mask == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 99, __pyx_L3_error)
+    __pyx_v_stencil = ((PyObject *)values[3]);
+    __pyx_v_single_link = __Pyx_PyInt_As_int(values[4]); if (unlikely((__pyx_v_single_link == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 100, __pyx_L3_error)
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("create_boundary_cell_index_list_3d", 1, 5, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 98, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("pystencils.boundaries.createindexlistcython.create_boundary_cell_index_list_3d", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_10pystencils_10boundaries_21createindexlistcython_58create_boundary_cell_index_list_3d(__pyx_self, __pyx_v_flag_field, __pyx_v_boundary_mask, __pyx_v_fluid_mask, __pyx_v_stencil, __pyx_v_single_link);
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_10pystencils_10boundaries_21createindexlistcython_58create_boundary_cell_index_list_3d(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_flag_field, int __pyx_v_boundary_mask, int __pyx_v_fluid_mask, PyObject *__pyx_v_stencil, int __pyx_v_single_link) {
+  int __pyx_v_xs;
+  int __pyx_v_ys;
+  int __pyx_v_zs;
+  int __pyx_v_x;
+  int __pyx_v_y;
+  int __pyx_v_z;
+  int __pyx_v_dirIdx;
+  int __pyx_v_num_directions;
+  int __pyx_v_dx;
+  int __pyx_v_dy;
+  int __pyx_v_dz;
+  PyObject *__pyx_v_boundary_index_list = NULL;
+  __Pyx_LocalBuf_ND __pyx_pybuffernd_flag_field;
+  __Pyx_Buffer __pyx_pybuffer_flag_field;
+  __Pyx_LocalBuf_ND __pyx_pybuffernd_stencil;
+  __Pyx_Buffer __pyx_pybuffer_stencil;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
+  PyObject *__pyx_t_5 = NULL;
+  PyObject *(*__pyx_t_6)(PyObject *);
+  int __pyx_t_7;
+  int __pyx_t_8;
+  int __pyx_t_9;
+  int __pyx_t_10;
+  int __pyx_t_11;
+  int __pyx_t_12;
+  int __pyx_t_13;
+  int __pyx_t_14;
+  int __pyx_t_15;
+  Py_ssize_t __pyx_t_16;
+  Py_ssize_t __pyx_t_17;
+  Py_ssize_t __pyx_t_18;
+  int __pyx_t_19;
+  int __pyx_t_20;
+  int __pyx_t_21;
+  int __pyx_t_22;
+  Py_ssize_t __pyx_t_23;
+  Py_ssize_t __pyx_t_24;
+  Py_ssize_t __pyx_t_25;
+  Py_ssize_t __pyx_t_26;
+  Py_ssize_t __pyx_t_27;
+  Py_ssize_t __pyx_t_28;
+  int __pyx_t_29;
+  int __pyx_t_30;
+  int __pyx_t_31;
+  Py_ssize_t __pyx_t_32;
+  Py_ssize_t __pyx_t_33;
+  Py_ssize_t __pyx_t_34;
+  int __pyx_t_35;
+  __Pyx_RefNannySetupContext("__pyx_fuse_1create_boundary_cell_index_list_3d", 0);
+  __pyx_pybuffer_flag_field.pybuffer.buf = NULL;
+  __pyx_pybuffer_flag_field.refcount = 0;
+  __pyx_pybuffernd_flag_field.data = NULL;
+  __pyx_pybuffernd_flag_field.rcbuffer = &__pyx_pybuffer_flag_field;
+  __pyx_pybuffer_stencil.pybuffer.buf = NULL;
+  __pyx_pybuffer_stencil.refcount = 0;
+  __pyx_pybuffernd_stencil.data = NULL;
+  __pyx_pybuffernd_stencil.rcbuffer = &__pyx_pybuffer_stencil;
+  {
+    __Pyx_BufFmt_StackElem __pyx_stack[1];
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_flag_field.rcbuffer->pybuffer, (PyObject*)__pyx_v_flag_field, &__Pyx_TypeInfo_int, PyBUF_FORMAT| PyBUF_INDIRECT, 3, 0, __pyx_stack) == -1)) __PYX_ERR(0, 98, __pyx_L1_error)
+  }
+  __pyx_pybuffernd_flag_field.diminfo[0].strides = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_flag_field.diminfo[0].shape = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_flag_field.diminfo[0].suboffsets = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.suboffsets[0]; __pyx_pybuffernd_flag_field.diminfo[1].strides = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_flag_field.diminfo[1].shape = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_flag_field.diminfo[1].suboffsets = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.suboffsets[1]; __pyx_pybuffernd_flag_field.diminfo[2].strides = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_flag_field.diminfo[2].shape = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.shape[2]; __pyx_pybuffernd_flag_field.diminfo[2].suboffsets = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.suboffsets[2];
+  {
+    __Pyx_BufFmt_StackElem __pyx_stack[1];
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_stencil.rcbuffer->pybuffer, (PyObject*)__pyx_v_stencil, &__Pyx_TypeInfo_int, PyBUF_FORMAT| PyBUF_INDIRECT, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 98, __pyx_L1_error)
+  }
+  __pyx_pybuffernd_stencil.diminfo[0].strides = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_stencil.diminfo[0].shape = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_stencil.diminfo[0].suboffsets = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.suboffsets[0]; __pyx_pybuffernd_stencil.diminfo[1].strides = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_stencil.diminfo[1].shape = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_stencil.diminfo[1].suboffsets = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.suboffsets[1];
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":104
+ *     cdef int dirIdx, num_directions, dx, dy, dz
+ * 
+ *     xs, ys, zs = flag_field.shape             # <<<<<<<<<<<<<<
+ *     boundary_index_list = []
+ *     num_directions = stencil.shape[0]
+ */
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_flag_field), __pyx_n_s_shape); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 104, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) {
+    PyObject* sequence = __pyx_t_1;
+    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
+    if (unlikely(size != 3)) {
+      if (size > 3) __Pyx_RaiseTooManyValuesError(3);
+      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
+      __PYX_ERR(0, 104, __pyx_L1_error)
+    }
+    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+    if (likely(PyTuple_CheckExact(sequence))) {
+      __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
+      __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); 
+      __pyx_t_4 = PyTuple_GET_ITEM(sequence, 2); 
+    } else {
+      __pyx_t_2 = PyList_GET_ITEM(sequence, 0); 
+      __pyx_t_3 = PyList_GET_ITEM(sequence, 1); 
+      __pyx_t_4 = PyList_GET_ITEM(sequence, 2); 
+    }
+    __Pyx_INCREF(__pyx_t_2);
+    __Pyx_INCREF(__pyx_t_3);
+    __Pyx_INCREF(__pyx_t_4);
+    #else
+    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 104, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_2);
+    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 104, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    __pyx_t_4 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 104, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
+    #endif
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  } else {
+    Py_ssize_t index = -1;
+    __pyx_t_5 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 104, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_5);
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __pyx_t_6 = Py_TYPE(__pyx_t_5)->tp_iternext;
+    index = 0; __pyx_t_2 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_2)) goto __pyx_L3_unpacking_failed;
+    __Pyx_GOTREF(__pyx_t_2);
+    index = 1; __pyx_t_3 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_3)) goto __pyx_L3_unpacking_failed;
+    __Pyx_GOTREF(__pyx_t_3);
+    index = 2; __pyx_t_4 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_4)) goto __pyx_L3_unpacking_failed;
+    __Pyx_GOTREF(__pyx_t_4);
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_5), 3) < 0) __PYX_ERR(0, 104, __pyx_L1_error)
+    __pyx_t_6 = NULL;
+    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+    goto __pyx_L4_unpacking_done;
+    __pyx_L3_unpacking_failed:;
+    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+    __pyx_t_6 = NULL;
+    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
+    __PYX_ERR(0, 104, __pyx_L1_error)
+    __pyx_L4_unpacking_done:;
+  }
+  __pyx_t_7 = __Pyx_PyInt_As_int(__pyx_t_2); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 104, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_8 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_8 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 104, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __pyx_t_9 = __Pyx_PyInt_As_int(__pyx_t_4); if (unlikely((__pyx_t_9 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 104, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __pyx_v_xs = __pyx_t_7;
+  __pyx_v_ys = __pyx_t_8;
+  __pyx_v_zs = __pyx_t_9;
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":105
+ * 
+ *     xs, ys, zs = flag_field.shape
+ *     boundary_index_list = []             # <<<<<<<<<<<<<<
+ *     num_directions = stencil.shape[0]
+ * 
+ */
+  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 105, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_boundary_index_list = ((PyObject*)__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":106
+ *     xs, ys, zs = flag_field.shape
+ *     boundary_index_list = []
+ *     num_directions = stencil.shape[0]             # <<<<<<<<<<<<<<
+ * 
+ *     for z in range(0, zs):
+ */
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_stencil), __pyx_n_s_shape); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 106, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_4 = __Pyx_GetItemInt(__pyx_t_1, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 106, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_9 = __Pyx_PyInt_As_int(__pyx_t_4); if (unlikely((__pyx_t_9 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 106, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __pyx_v_num_directions = __pyx_t_9;
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":108
+ *     num_directions = stencil.shape[0]
+ * 
+ *     for z in range(0, zs):             # <<<<<<<<<<<<<<
+ *         for y in range(0, ys):
+ *             for x in range(0, xs):
+ */
+  __pyx_t_9 = __pyx_v_zs;
+  __pyx_t_8 = __pyx_t_9;
+  for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_8; __pyx_t_7+=1) {
+    __pyx_v_z = __pyx_t_7;
+
+    /* "pystencils/boundaries/createindexlistcython.pyx":109
+ * 
+ *     for z in range(0, zs):
+ *         for y in range(0, ys):             # <<<<<<<<<<<<<<
+ *             for x in range(0, xs):
+ *                 if flag_field[x, y, z] & boundary_mask:
+ */
+    __pyx_t_10 = __pyx_v_ys;
+    __pyx_t_11 = __pyx_t_10;
+    for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) {
+      __pyx_v_y = __pyx_t_12;
+
+      /* "pystencils/boundaries/createindexlistcython.pyx":110
+ *     for z in range(0, zs):
+ *         for y in range(0, ys):
+ *             for x in range(0, xs):             # <<<<<<<<<<<<<<
+ *                 if flag_field[x, y, z] & boundary_mask:
+ *                     for dirIdx in range(num_directions):
+ */
+      __pyx_t_13 = __pyx_v_xs;
+      __pyx_t_14 = __pyx_t_13;
+      for (__pyx_t_15 = 0; __pyx_t_15 < __pyx_t_14; __pyx_t_15+=1) {
+        __pyx_v_x = __pyx_t_15;
+
+        /* "pystencils/boundaries/createindexlistcython.pyx":111
+ *         for y in range(0, ys):
+ *             for x in range(0, xs):
+ *                 if flag_field[x, y, z] & boundary_mask:             # <<<<<<<<<<<<<<
+ *                     for dirIdx in range(num_directions):
+ *                         dx = stencil[dirIdx,0]
+ */
+        __pyx_t_16 = __pyx_v_x;
+        __pyx_t_17 = __pyx_v_y;
+        __pyx_t_18 = __pyx_v_z;
+        __pyx_t_19 = (((*__Pyx_BufPtrFull3d(int *, __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.buf, __pyx_t_16, __pyx_pybuffernd_flag_field.diminfo[0].strides, __pyx_pybuffernd_flag_field.diminfo[0].suboffsets, __pyx_t_17, __pyx_pybuffernd_flag_field.diminfo[1].strides, __pyx_pybuffernd_flag_field.diminfo[1].suboffsets, __pyx_t_18, __pyx_pybuffernd_flag_field.diminfo[2].strides, __pyx_pybuffernd_flag_field.diminfo[2].suboffsets)) & __pyx_v_boundary_mask) != 0);
+        if (__pyx_t_19) {
+
+          /* "pystencils/boundaries/createindexlistcython.pyx":112
+ *             for x in range(0, xs):
+ *                 if flag_field[x, y, z] & boundary_mask:
+ *                     for dirIdx in range(num_directions):             # <<<<<<<<<<<<<<
+ *                         dx = stencil[dirIdx,0]
+ *                         dy = stencil[dirIdx,1]
+ */
+          __pyx_t_20 = __pyx_v_num_directions;
+          __pyx_t_21 = __pyx_t_20;
+          for (__pyx_t_22 = 0; __pyx_t_22 < __pyx_t_21; __pyx_t_22+=1) {
+            __pyx_v_dirIdx = __pyx_t_22;
+
+            /* "pystencils/boundaries/createindexlistcython.pyx":113
+ *                 if flag_field[x, y, z] & boundary_mask:
+ *                     for dirIdx in range(num_directions):
+ *                         dx = stencil[dirIdx,0]             # <<<<<<<<<<<<<<
+ *                         dy = stencil[dirIdx,1]
+ *                         dz = stencil[dirIdx,2]
+ */
+            __pyx_t_23 = __pyx_v_dirIdx;
+            __pyx_t_24 = 0;
+            __pyx_v_dx = (*__Pyx_BufPtrFull2d(int *, __pyx_pybuffernd_stencil.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_stencil.diminfo[0].strides, __pyx_pybuffernd_stencil.diminfo[0].suboffsets, __pyx_t_24, __pyx_pybuffernd_stencil.diminfo[1].strides, __pyx_pybuffernd_stencil.diminfo[1].suboffsets));
+
+            /* "pystencils/boundaries/createindexlistcython.pyx":114
+ *                     for dirIdx in range(num_directions):
+ *                         dx = stencil[dirIdx,0]
+ *                         dy = stencil[dirIdx,1]             # <<<<<<<<<<<<<<
+ *                         dz = stencil[dirIdx,2]
+ *                         if 0 <= x + dx < xs and 0 <= y + dy < ys and 0 <= z + dz < zs:
+ */
+            __pyx_t_25 = __pyx_v_dirIdx;
+            __pyx_t_26 = 1;
+            __pyx_v_dy = (*__Pyx_BufPtrFull2d(int *, __pyx_pybuffernd_stencil.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_stencil.diminfo[0].strides, __pyx_pybuffernd_stencil.diminfo[0].suboffsets, __pyx_t_26, __pyx_pybuffernd_stencil.diminfo[1].strides, __pyx_pybuffernd_stencil.diminfo[1].suboffsets));
+
+            /* "pystencils/boundaries/createindexlistcython.pyx":115
+ *                         dx = stencil[dirIdx,0]
+ *                         dy = stencil[dirIdx,1]
+ *                         dz = stencil[dirIdx,2]             # <<<<<<<<<<<<<<
+ *                         if 0 <= x + dx < xs and 0 <= y + dy < ys and 0 <= z + dz < zs:
+ *                             if flag_field[x + dx, y + dy, z + dz] & fluid_mask:
+ */
+            __pyx_t_27 = __pyx_v_dirIdx;
+            __pyx_t_28 = 2;
+            __pyx_v_dz = (*__Pyx_BufPtrFull2d(int *, __pyx_pybuffernd_stencil.rcbuffer->pybuffer.buf, __pyx_t_27, __pyx_pybuffernd_stencil.diminfo[0].strides, __pyx_pybuffernd_stencil.diminfo[0].suboffsets, __pyx_t_28, __pyx_pybuffernd_stencil.diminfo[1].strides, __pyx_pybuffernd_stencil.diminfo[1].suboffsets));
+
+            /* "pystencils/boundaries/createindexlistcython.pyx":116
+ *                         dy = stencil[dirIdx,1]
+ *                         dz = stencil[dirIdx,2]
+ *                         if 0 <= x + dx < xs and 0 <= y + dy < ys and 0 <= z + dz < zs:             # <<<<<<<<<<<<<<
+ *                             if flag_field[x + dx, y + dy, z + dz] & fluid_mask:
+ *                                 boundary_index_list.append((x,y,z, dirIdx))
+ */
+            __pyx_t_29 = (__pyx_v_x + __pyx_v_dx);
+            __pyx_t_30 = (0 <= __pyx_t_29);
+            if (__pyx_t_30) {
+              __pyx_t_30 = (__pyx_t_29 < __pyx_v_xs);
+            }
+            __pyx_t_31 = (__pyx_t_30 != 0);
+            if (__pyx_t_31) {
+            } else {
+              __pyx_t_19 = __pyx_t_31;
+              goto __pyx_L15_bool_binop_done;
+            }
+            __pyx_t_29 = (__pyx_v_y + __pyx_v_dy);
+            __pyx_t_31 = (0 <= __pyx_t_29);
+            if (__pyx_t_31) {
+              __pyx_t_31 = (__pyx_t_29 < __pyx_v_ys);
+            }
+            __pyx_t_30 = (__pyx_t_31 != 0);
+            if (__pyx_t_30) {
+            } else {
+              __pyx_t_19 = __pyx_t_30;
+              goto __pyx_L15_bool_binop_done;
+            }
+            __pyx_t_29 = (__pyx_v_z + __pyx_v_dz);
+            __pyx_t_30 = (0 <= __pyx_t_29);
+            if (__pyx_t_30) {
+              __pyx_t_30 = (__pyx_t_29 < __pyx_v_zs);
+            }
+            __pyx_t_31 = (__pyx_t_30 != 0);
+            __pyx_t_19 = __pyx_t_31;
+            __pyx_L15_bool_binop_done:;
+            if (__pyx_t_19) {
+
+              /* "pystencils/boundaries/createindexlistcython.pyx":117
+ *                         dz = stencil[dirIdx,2]
+ *                         if 0 <= x + dx < xs and 0 <= y + dy < ys and 0 <= z + dz < zs:
+ *                             if flag_field[x + dx, y + dy, z + dz] & fluid_mask:             # <<<<<<<<<<<<<<
+ *                                 boundary_index_list.append((x,y,z, dirIdx))
+ *                                 if single_link:
+ */
+              __pyx_t_32 = (__pyx_v_x + __pyx_v_dx);
+              __pyx_t_33 = (__pyx_v_y + __pyx_v_dy);
+              __pyx_t_34 = (__pyx_v_z + __pyx_v_dz);
+              __pyx_t_19 = (((*__Pyx_BufPtrFull3d(int *, __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.buf, __pyx_t_32, __pyx_pybuffernd_flag_field.diminfo[0].strides, __pyx_pybuffernd_flag_field.diminfo[0].suboffsets, __pyx_t_33, __pyx_pybuffernd_flag_field.diminfo[1].strides, __pyx_pybuffernd_flag_field.diminfo[1].suboffsets, __pyx_t_34, __pyx_pybuffernd_flag_field.diminfo[2].strides, __pyx_pybuffernd_flag_field.diminfo[2].suboffsets)) & __pyx_v_fluid_mask) != 0);
+              if (__pyx_t_19) {
+
+                /* "pystencils/boundaries/createindexlistcython.pyx":118
+ *                         if 0 <= x + dx < xs and 0 <= y + dy < ys and 0 <= z + dz < zs:
+ *                             if flag_field[x + dx, y + dy, z + dz] & fluid_mask:
+ *                                 boundary_index_list.append((x,y,z, dirIdx))             # <<<<<<<<<<<<<<
+ *                                 if single_link:
+ *                                     break
+ */
+                __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_x); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 118, __pyx_L1_error)
+                __Pyx_GOTREF(__pyx_t_4);
+                __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_y); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 118, __pyx_L1_error)
+                __Pyx_GOTREF(__pyx_t_1);
+                __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_z); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 118, __pyx_L1_error)
+                __Pyx_GOTREF(__pyx_t_3);
+                __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_dirIdx); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 118, __pyx_L1_error)
+                __Pyx_GOTREF(__pyx_t_2);
+                __pyx_t_5 = PyTuple_New(4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 118, __pyx_L1_error)
+                __Pyx_GOTREF(__pyx_t_5);
+                __Pyx_GIVEREF(__pyx_t_4);
+                PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4);
+                __Pyx_GIVEREF(__pyx_t_1);
+                PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_1);
+                __Pyx_GIVEREF(__pyx_t_3);
+                PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_t_3);
+                __Pyx_GIVEREF(__pyx_t_2);
+                PyTuple_SET_ITEM(__pyx_t_5, 3, __pyx_t_2);
+                __pyx_t_4 = 0;
+                __pyx_t_1 = 0;
+                __pyx_t_3 = 0;
+                __pyx_t_2 = 0;
+                __pyx_t_35 = __Pyx_PyList_Append(__pyx_v_boundary_index_list, __pyx_t_5); if (unlikely(__pyx_t_35 == ((int)-1))) __PYX_ERR(0, 118, __pyx_L1_error)
+                __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+                /* "pystencils/boundaries/createindexlistcython.pyx":119
+ *                             if flag_field[x + dx, y + dy, z + dz] & fluid_mask:
+ *                                 boundary_index_list.append((x,y,z, dirIdx))
+ *                                 if single_link:             # <<<<<<<<<<<<<<
+ *                                     break
+ *     return boundary_index_list
+ */
+                __pyx_t_19 = (__pyx_v_single_link != 0);
+                if (__pyx_t_19) {
+
+                  /* "pystencils/boundaries/createindexlistcython.pyx":120
+ *                                 boundary_index_list.append((x,y,z, dirIdx))
+ *                                 if single_link:
+ *                                     break             # <<<<<<<<<<<<<<
+ *     return boundary_index_list
+ */
+                  goto __pyx_L13_break;
+
+                  /* "pystencils/boundaries/createindexlistcython.pyx":119
+ *                             if flag_field[x + dx, y + dy, z + dz] & fluid_mask:
+ *                                 boundary_index_list.append((x,y,z, dirIdx))
+ *                                 if single_link:             # <<<<<<<<<<<<<<
+ *                                     break
+ *     return boundary_index_list
+ */
+                }
+
+                /* "pystencils/boundaries/createindexlistcython.pyx":117
+ *                         dz = stencil[dirIdx,2]
+ *                         if 0 <= x + dx < xs and 0 <= y + dy < ys and 0 <= z + dz < zs:
+ *                             if flag_field[x + dx, y + dy, z + dz] & fluid_mask:             # <<<<<<<<<<<<<<
+ *                                 boundary_index_list.append((x,y,z, dirIdx))
+ *                                 if single_link:
+ */
+              }
+
+              /* "pystencils/boundaries/createindexlistcython.pyx":116
+ *                         dy = stencil[dirIdx,1]
+ *                         dz = stencil[dirIdx,2]
+ *                         if 0 <= x + dx < xs and 0 <= y + dy < ys and 0 <= z + dz < zs:             # <<<<<<<<<<<<<<
+ *                             if flag_field[x + dx, y + dy, z + dz] & fluid_mask:
+ *                                 boundary_index_list.append((x,y,z, dirIdx))
+ */
+            }
+          }
+          __pyx_L13_break:;
+
+          /* "pystencils/boundaries/createindexlistcython.pyx":111
+ *         for y in range(0, ys):
+ *             for x in range(0, xs):
+ *                 if flag_field[x, y, z] & boundary_mask:             # <<<<<<<<<<<<<<
+ *                     for dirIdx in range(num_directions):
+ *                         dx = stencil[dirIdx,0]
+ */
+        }
+      }
+    }
+  }
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":121
+ *                                 if single_link:
+ *                                     break
+ *     return boundary_index_list             # <<<<<<<<<<<<<<
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(__pyx_v_boundary_index_list);
+  __pyx_r = __pyx_v_boundary_index_list;
+  goto __pyx_L0;
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":98
+ * @cython.boundscheck(False) # turn off bounds-checking for entire function
+ * @cython.wraparound(False)  # turn off negative index wrapping for entire function
+ * def create_boundary_cell_index_list_3d(object[IntegerType, ndim=3] flag_field,             # <<<<<<<<<<<<<<
+ *                                        IntegerType boundary_mask, IntegerType fluid_mask,
+ *                                        object[int, ndim=2] stencil, int single_link):
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_XDECREF(__pyx_t_5);
+  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
+    __Pyx_PyThreadState_declare
+    __Pyx_PyThreadState_assign
+    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
+    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_flag_field.rcbuffer->pybuffer);
+    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_stencil.rcbuffer->pybuffer);
+  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
+  __Pyx_AddTraceback("pystencils.boundaries.createindexlistcython.create_boundary_cell_index_list_3d", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  goto __pyx_L2;
+  __pyx_L0:;
+  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_flag_field.rcbuffer->pybuffer);
+  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_stencil.rcbuffer->pybuffer);
+  __pyx_L2:;
+  __Pyx_XDECREF(__pyx_v_boundary_index_list);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static PyObject *__pyx_fuse_2__pyx_pw_10pystencils_10boundaries_21createindexlistcython_61create_boundary_cell_index_list_3d(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyMethodDef __pyx_fuse_2__pyx_mdef_10pystencils_10boundaries_21createindexlistcython_61create_boundary_cell_index_list_3d = {"__pyx_fuse_2create_boundary_cell_index_list_3d", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_fuse_2__pyx_pw_10pystencils_10boundaries_21createindexlistcython_61create_boundary_cell_index_list_3d, METH_VARARGS|METH_KEYWORDS, 0};
+static PyObject *__pyx_fuse_2__pyx_pw_10pystencils_10boundaries_21createindexlistcython_61create_boundary_cell_index_list_3d(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_flag_field = 0;
+  long __pyx_v_boundary_mask;
+  long __pyx_v_fluid_mask;
+  PyObject *__pyx_v_stencil = 0;
+  int __pyx_v_single_link;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("create_boundary_cell_index_list_3d (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_flag_field,&__pyx_n_s_boundary_mask,&__pyx_n_s_fluid_mask,&__pyx_n_s_stencil,&__pyx_n_s_single_link,0};
+    PyObject* values[5] = {0,0,0,0,0};
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+        CYTHON_FALLTHROUGH;
+        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
+        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_flag_field)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
+        case  1:
+        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_boundary_mask)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_cell_index_list_3d", 1, 5, 5, 1); __PYX_ERR(0, 98, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  2:
+        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_fluid_mask)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_cell_index_list_3d", 1, 5, 5, 2); __PYX_ERR(0, 98, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  3:
+        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_stencil)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_cell_index_list_3d", 1, 5, 5, 3); __PYX_ERR(0, 98, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  4:
+        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_single_link)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_cell_index_list_3d", 1, 5, 5, 4); __PYX_ERR(0, 98, __pyx_L3_error)
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "create_boundary_cell_index_list_3d") < 0)) __PYX_ERR(0, 98, __pyx_L3_error)
+      }
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 5) {
+      goto __pyx_L5_argtuple_error;
+    } else {
+      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+      values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+      values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+    }
+    __pyx_v_flag_field = ((PyObject *)values[0]);
+    __pyx_v_boundary_mask = __Pyx_PyInt_As_long(values[1]); if (unlikely((__pyx_v_boundary_mask == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 99, __pyx_L3_error)
+    __pyx_v_fluid_mask = __Pyx_PyInt_As_long(values[2]); if (unlikely((__pyx_v_fluid_mask == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 99, __pyx_L3_error)
+    __pyx_v_stencil = ((PyObject *)values[3]);
+    __pyx_v_single_link = __Pyx_PyInt_As_int(values[4]); if (unlikely((__pyx_v_single_link == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 100, __pyx_L3_error)
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("create_boundary_cell_index_list_3d", 1, 5, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 98, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("pystencils.boundaries.createindexlistcython.create_boundary_cell_index_list_3d", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_10pystencils_10boundaries_21createindexlistcython_60create_boundary_cell_index_list_3d(__pyx_self, __pyx_v_flag_field, __pyx_v_boundary_mask, __pyx_v_fluid_mask, __pyx_v_stencil, __pyx_v_single_link);
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_10pystencils_10boundaries_21createindexlistcython_60create_boundary_cell_index_list_3d(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_flag_field, long __pyx_v_boundary_mask, long __pyx_v_fluid_mask, PyObject *__pyx_v_stencil, int __pyx_v_single_link) {
+  int __pyx_v_xs;
+  int __pyx_v_ys;
+  int __pyx_v_zs;
+  int __pyx_v_x;
+  int __pyx_v_y;
+  int __pyx_v_z;
+  int __pyx_v_dirIdx;
+  int __pyx_v_num_directions;
+  int __pyx_v_dx;
+  int __pyx_v_dy;
+  int __pyx_v_dz;
+  PyObject *__pyx_v_boundary_index_list = NULL;
+  __Pyx_LocalBuf_ND __pyx_pybuffernd_flag_field;
+  __Pyx_Buffer __pyx_pybuffer_flag_field;
+  __Pyx_LocalBuf_ND __pyx_pybuffernd_stencil;
+  __Pyx_Buffer __pyx_pybuffer_stencil;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
+  PyObject *__pyx_t_5 = NULL;
+  PyObject *(*__pyx_t_6)(PyObject *);
+  int __pyx_t_7;
+  int __pyx_t_8;
+  int __pyx_t_9;
+  int __pyx_t_10;
+  int __pyx_t_11;
+  int __pyx_t_12;
+  int __pyx_t_13;
+  int __pyx_t_14;
+  int __pyx_t_15;
+  Py_ssize_t __pyx_t_16;
+  Py_ssize_t __pyx_t_17;
+  Py_ssize_t __pyx_t_18;
+  int __pyx_t_19;
+  int __pyx_t_20;
+  int __pyx_t_21;
+  int __pyx_t_22;
+  Py_ssize_t __pyx_t_23;
+  Py_ssize_t __pyx_t_24;
+  Py_ssize_t __pyx_t_25;
+  Py_ssize_t __pyx_t_26;
+  Py_ssize_t __pyx_t_27;
+  Py_ssize_t __pyx_t_28;
+  int __pyx_t_29;
+  int __pyx_t_30;
+  int __pyx_t_31;
+  Py_ssize_t __pyx_t_32;
+  Py_ssize_t __pyx_t_33;
+  Py_ssize_t __pyx_t_34;
+  int __pyx_t_35;
+  __Pyx_RefNannySetupContext("__pyx_fuse_2create_boundary_cell_index_list_3d", 0);
+  __pyx_pybuffer_flag_field.pybuffer.buf = NULL;
+  __pyx_pybuffer_flag_field.refcount = 0;
+  __pyx_pybuffernd_flag_field.data = NULL;
+  __pyx_pybuffernd_flag_field.rcbuffer = &__pyx_pybuffer_flag_field;
+  __pyx_pybuffer_stencil.pybuffer.buf = NULL;
+  __pyx_pybuffer_stencil.refcount = 0;
+  __pyx_pybuffernd_stencil.data = NULL;
+  __pyx_pybuffernd_stencil.rcbuffer = &__pyx_pybuffer_stencil;
+  {
+    __Pyx_BufFmt_StackElem __pyx_stack[1];
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_flag_field.rcbuffer->pybuffer, (PyObject*)__pyx_v_flag_field, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_INDIRECT, 3, 0, __pyx_stack) == -1)) __PYX_ERR(0, 98, __pyx_L1_error)
+  }
+  __pyx_pybuffernd_flag_field.diminfo[0].strides = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_flag_field.diminfo[0].shape = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_flag_field.diminfo[0].suboffsets = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.suboffsets[0]; __pyx_pybuffernd_flag_field.diminfo[1].strides = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_flag_field.diminfo[1].shape = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_flag_field.diminfo[1].suboffsets = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.suboffsets[1]; __pyx_pybuffernd_flag_field.diminfo[2].strides = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_flag_field.diminfo[2].shape = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.shape[2]; __pyx_pybuffernd_flag_field.diminfo[2].suboffsets = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.suboffsets[2];
+  {
+    __Pyx_BufFmt_StackElem __pyx_stack[1];
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_stencil.rcbuffer->pybuffer, (PyObject*)__pyx_v_stencil, &__Pyx_TypeInfo_int, PyBUF_FORMAT| PyBUF_INDIRECT, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 98, __pyx_L1_error)
+  }
+  __pyx_pybuffernd_stencil.diminfo[0].strides = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_stencil.diminfo[0].shape = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_stencil.diminfo[0].suboffsets = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.suboffsets[0]; __pyx_pybuffernd_stencil.diminfo[1].strides = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_stencil.diminfo[1].shape = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_stencil.diminfo[1].suboffsets = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.suboffsets[1];
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":104
+ *     cdef int dirIdx, num_directions, dx, dy, dz
+ * 
+ *     xs, ys, zs = flag_field.shape             # <<<<<<<<<<<<<<
+ *     boundary_index_list = []
+ *     num_directions = stencil.shape[0]
+ */
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_flag_field), __pyx_n_s_shape); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 104, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) {
+    PyObject* sequence = __pyx_t_1;
+    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
+    if (unlikely(size != 3)) {
+      if (size > 3) __Pyx_RaiseTooManyValuesError(3);
+      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
+      __PYX_ERR(0, 104, __pyx_L1_error)
+    }
+    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+    if (likely(PyTuple_CheckExact(sequence))) {
+      __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
+      __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); 
+      __pyx_t_4 = PyTuple_GET_ITEM(sequence, 2); 
+    } else {
+      __pyx_t_2 = PyList_GET_ITEM(sequence, 0); 
+      __pyx_t_3 = PyList_GET_ITEM(sequence, 1); 
+      __pyx_t_4 = PyList_GET_ITEM(sequence, 2); 
+    }
+    __Pyx_INCREF(__pyx_t_2);
+    __Pyx_INCREF(__pyx_t_3);
+    __Pyx_INCREF(__pyx_t_4);
+    #else
+    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 104, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_2);
+    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 104, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    __pyx_t_4 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 104, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
+    #endif
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  } else {
+    Py_ssize_t index = -1;
+    __pyx_t_5 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 104, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_5);
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __pyx_t_6 = Py_TYPE(__pyx_t_5)->tp_iternext;
+    index = 0; __pyx_t_2 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_2)) goto __pyx_L3_unpacking_failed;
+    __Pyx_GOTREF(__pyx_t_2);
+    index = 1; __pyx_t_3 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_3)) goto __pyx_L3_unpacking_failed;
+    __Pyx_GOTREF(__pyx_t_3);
+    index = 2; __pyx_t_4 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_4)) goto __pyx_L3_unpacking_failed;
+    __Pyx_GOTREF(__pyx_t_4);
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_5), 3) < 0) __PYX_ERR(0, 104, __pyx_L1_error)
+    __pyx_t_6 = NULL;
+    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+    goto __pyx_L4_unpacking_done;
+    __pyx_L3_unpacking_failed:;
+    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+    __pyx_t_6 = NULL;
+    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
+    __PYX_ERR(0, 104, __pyx_L1_error)
+    __pyx_L4_unpacking_done:;
+  }
+  __pyx_t_7 = __Pyx_PyInt_As_int(__pyx_t_2); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 104, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_8 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_8 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 104, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __pyx_t_9 = __Pyx_PyInt_As_int(__pyx_t_4); if (unlikely((__pyx_t_9 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 104, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __pyx_v_xs = __pyx_t_7;
+  __pyx_v_ys = __pyx_t_8;
+  __pyx_v_zs = __pyx_t_9;
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":105
+ * 
+ *     xs, ys, zs = flag_field.shape
+ *     boundary_index_list = []             # <<<<<<<<<<<<<<
+ *     num_directions = stencil.shape[0]
+ * 
+ */
+  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 105, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_boundary_index_list = ((PyObject*)__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":106
+ *     xs, ys, zs = flag_field.shape
+ *     boundary_index_list = []
+ *     num_directions = stencil.shape[0]             # <<<<<<<<<<<<<<
+ * 
+ *     for z in range(0, zs):
+ */
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_stencil), __pyx_n_s_shape); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 106, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_4 = __Pyx_GetItemInt(__pyx_t_1, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 106, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_9 = __Pyx_PyInt_As_int(__pyx_t_4); if (unlikely((__pyx_t_9 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 106, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __pyx_v_num_directions = __pyx_t_9;
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":108
+ *     num_directions = stencil.shape[0]
+ * 
+ *     for z in range(0, zs):             # <<<<<<<<<<<<<<
+ *         for y in range(0, ys):
+ *             for x in range(0, xs):
+ */
+  __pyx_t_9 = __pyx_v_zs;
+  __pyx_t_8 = __pyx_t_9;
+  for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_8; __pyx_t_7+=1) {
+    __pyx_v_z = __pyx_t_7;
+
+    /* "pystencils/boundaries/createindexlistcython.pyx":109
+ * 
+ *     for z in range(0, zs):
+ *         for y in range(0, ys):             # <<<<<<<<<<<<<<
+ *             for x in range(0, xs):
+ *                 if flag_field[x, y, z] & boundary_mask:
+ */
+    __pyx_t_10 = __pyx_v_ys;
+    __pyx_t_11 = __pyx_t_10;
+    for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) {
+      __pyx_v_y = __pyx_t_12;
+
+      /* "pystencils/boundaries/createindexlistcython.pyx":110
+ *     for z in range(0, zs):
+ *         for y in range(0, ys):
+ *             for x in range(0, xs):             # <<<<<<<<<<<<<<
+ *                 if flag_field[x, y, z] & boundary_mask:
+ *                     for dirIdx in range(num_directions):
+ */
+      __pyx_t_13 = __pyx_v_xs;
+      __pyx_t_14 = __pyx_t_13;
+      for (__pyx_t_15 = 0; __pyx_t_15 < __pyx_t_14; __pyx_t_15+=1) {
+        __pyx_v_x = __pyx_t_15;
+
+        /* "pystencils/boundaries/createindexlistcython.pyx":111
+ *         for y in range(0, ys):
+ *             for x in range(0, xs):
+ *                 if flag_field[x, y, z] & boundary_mask:             # <<<<<<<<<<<<<<
+ *                     for dirIdx in range(num_directions):
+ *                         dx = stencil[dirIdx,0]
+ */
+        __pyx_t_16 = __pyx_v_x;
+        __pyx_t_17 = __pyx_v_y;
+        __pyx_t_18 = __pyx_v_z;
+        __pyx_t_19 = (((*__Pyx_BufPtrFull3d(long *, __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.buf, __pyx_t_16, __pyx_pybuffernd_flag_field.diminfo[0].strides, __pyx_pybuffernd_flag_field.diminfo[0].suboffsets, __pyx_t_17, __pyx_pybuffernd_flag_field.diminfo[1].strides, __pyx_pybuffernd_flag_field.diminfo[1].suboffsets, __pyx_t_18, __pyx_pybuffernd_flag_field.diminfo[2].strides, __pyx_pybuffernd_flag_field.diminfo[2].suboffsets)) & __pyx_v_boundary_mask) != 0);
+        if (__pyx_t_19) {
+
+          /* "pystencils/boundaries/createindexlistcython.pyx":112
+ *             for x in range(0, xs):
+ *                 if flag_field[x, y, z] & boundary_mask:
+ *                     for dirIdx in range(num_directions):             # <<<<<<<<<<<<<<
+ *                         dx = stencil[dirIdx,0]
+ *                         dy = stencil[dirIdx,1]
+ */
+          __pyx_t_20 = __pyx_v_num_directions;
+          __pyx_t_21 = __pyx_t_20;
+          for (__pyx_t_22 = 0; __pyx_t_22 < __pyx_t_21; __pyx_t_22+=1) {
+            __pyx_v_dirIdx = __pyx_t_22;
+
+            /* "pystencils/boundaries/createindexlistcython.pyx":113
+ *                 if flag_field[x, y, z] & boundary_mask:
+ *                     for dirIdx in range(num_directions):
+ *                         dx = stencil[dirIdx,0]             # <<<<<<<<<<<<<<
+ *                         dy = stencil[dirIdx,1]
+ *                         dz = stencil[dirIdx,2]
+ */
+            __pyx_t_23 = __pyx_v_dirIdx;
+            __pyx_t_24 = 0;
+            __pyx_v_dx = (*__Pyx_BufPtrFull2d(int *, __pyx_pybuffernd_stencil.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_stencil.diminfo[0].strides, __pyx_pybuffernd_stencil.diminfo[0].suboffsets, __pyx_t_24, __pyx_pybuffernd_stencil.diminfo[1].strides, __pyx_pybuffernd_stencil.diminfo[1].suboffsets));
+
+            /* "pystencils/boundaries/createindexlistcython.pyx":114
+ *                     for dirIdx in range(num_directions):
+ *                         dx = stencil[dirIdx,0]
+ *                         dy = stencil[dirIdx,1]             # <<<<<<<<<<<<<<
+ *                         dz = stencil[dirIdx,2]
+ *                         if 0 <= x + dx < xs and 0 <= y + dy < ys and 0 <= z + dz < zs:
+ */
+            __pyx_t_25 = __pyx_v_dirIdx;
+            __pyx_t_26 = 1;
+            __pyx_v_dy = (*__Pyx_BufPtrFull2d(int *, __pyx_pybuffernd_stencil.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_stencil.diminfo[0].strides, __pyx_pybuffernd_stencil.diminfo[0].suboffsets, __pyx_t_26, __pyx_pybuffernd_stencil.diminfo[1].strides, __pyx_pybuffernd_stencil.diminfo[1].suboffsets));
+
+            /* "pystencils/boundaries/createindexlistcython.pyx":115
+ *                         dx = stencil[dirIdx,0]
+ *                         dy = stencil[dirIdx,1]
+ *                         dz = stencil[dirIdx,2]             # <<<<<<<<<<<<<<
+ *                         if 0 <= x + dx < xs and 0 <= y + dy < ys and 0 <= z + dz < zs:
+ *                             if flag_field[x + dx, y + dy, z + dz] & fluid_mask:
+ */
+            __pyx_t_27 = __pyx_v_dirIdx;
+            __pyx_t_28 = 2;
+            __pyx_v_dz = (*__Pyx_BufPtrFull2d(int *, __pyx_pybuffernd_stencil.rcbuffer->pybuffer.buf, __pyx_t_27, __pyx_pybuffernd_stencil.diminfo[0].strides, __pyx_pybuffernd_stencil.diminfo[0].suboffsets, __pyx_t_28, __pyx_pybuffernd_stencil.diminfo[1].strides, __pyx_pybuffernd_stencil.diminfo[1].suboffsets));
+
+            /* "pystencils/boundaries/createindexlistcython.pyx":116
+ *                         dy = stencil[dirIdx,1]
+ *                         dz = stencil[dirIdx,2]
+ *                         if 0 <= x + dx < xs and 0 <= y + dy < ys and 0 <= z + dz < zs:             # <<<<<<<<<<<<<<
+ *                             if flag_field[x + dx, y + dy, z + dz] & fluid_mask:
+ *                                 boundary_index_list.append((x,y,z, dirIdx))
+ */
+            __pyx_t_29 = (__pyx_v_x + __pyx_v_dx);
+            __pyx_t_30 = (0 <= __pyx_t_29);
+            if (__pyx_t_30) {
+              __pyx_t_30 = (__pyx_t_29 < __pyx_v_xs);
+            }
+            __pyx_t_31 = (__pyx_t_30 != 0);
+            if (__pyx_t_31) {
+            } else {
+              __pyx_t_19 = __pyx_t_31;
+              goto __pyx_L15_bool_binop_done;
+            }
+            __pyx_t_29 = (__pyx_v_y + __pyx_v_dy);
+            __pyx_t_31 = (0 <= __pyx_t_29);
+            if (__pyx_t_31) {
+              __pyx_t_31 = (__pyx_t_29 < __pyx_v_ys);
+            }
+            __pyx_t_30 = (__pyx_t_31 != 0);
+            if (__pyx_t_30) {
+            } else {
+              __pyx_t_19 = __pyx_t_30;
+              goto __pyx_L15_bool_binop_done;
+            }
+            __pyx_t_29 = (__pyx_v_z + __pyx_v_dz);
+            __pyx_t_30 = (0 <= __pyx_t_29);
+            if (__pyx_t_30) {
+              __pyx_t_30 = (__pyx_t_29 < __pyx_v_zs);
+            }
+            __pyx_t_31 = (__pyx_t_30 != 0);
+            __pyx_t_19 = __pyx_t_31;
+            __pyx_L15_bool_binop_done:;
+            if (__pyx_t_19) {
+
+              /* "pystencils/boundaries/createindexlistcython.pyx":117
+ *                         dz = stencil[dirIdx,2]
+ *                         if 0 <= x + dx < xs and 0 <= y + dy < ys and 0 <= z + dz < zs:
+ *                             if flag_field[x + dx, y + dy, z + dz] & fluid_mask:             # <<<<<<<<<<<<<<
+ *                                 boundary_index_list.append((x,y,z, dirIdx))
+ *                                 if single_link:
+ */
+              __pyx_t_32 = (__pyx_v_x + __pyx_v_dx);
+              __pyx_t_33 = (__pyx_v_y + __pyx_v_dy);
+              __pyx_t_34 = (__pyx_v_z + __pyx_v_dz);
+              __pyx_t_19 = (((*__Pyx_BufPtrFull3d(long *, __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.buf, __pyx_t_32, __pyx_pybuffernd_flag_field.diminfo[0].strides, __pyx_pybuffernd_flag_field.diminfo[0].suboffsets, __pyx_t_33, __pyx_pybuffernd_flag_field.diminfo[1].strides, __pyx_pybuffernd_flag_field.diminfo[1].suboffsets, __pyx_t_34, __pyx_pybuffernd_flag_field.diminfo[2].strides, __pyx_pybuffernd_flag_field.diminfo[2].suboffsets)) & __pyx_v_fluid_mask) != 0);
+              if (__pyx_t_19) {
+
+                /* "pystencils/boundaries/createindexlistcython.pyx":118
+ *                         if 0 <= x + dx < xs and 0 <= y + dy < ys and 0 <= z + dz < zs:
+ *                             if flag_field[x + dx, y + dy, z + dz] & fluid_mask:
+ *                                 boundary_index_list.append((x,y,z, dirIdx))             # <<<<<<<<<<<<<<
+ *                                 if single_link:
+ *                                     break
+ */
+                __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_x); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 118, __pyx_L1_error)
+                __Pyx_GOTREF(__pyx_t_4);
+                __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_y); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 118, __pyx_L1_error)
+                __Pyx_GOTREF(__pyx_t_1);
+                __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_z); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 118, __pyx_L1_error)
+                __Pyx_GOTREF(__pyx_t_3);
+                __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_dirIdx); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 118, __pyx_L1_error)
+                __Pyx_GOTREF(__pyx_t_2);
+                __pyx_t_5 = PyTuple_New(4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 118, __pyx_L1_error)
+                __Pyx_GOTREF(__pyx_t_5);
+                __Pyx_GIVEREF(__pyx_t_4);
+                PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4);
+                __Pyx_GIVEREF(__pyx_t_1);
+                PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_1);
+                __Pyx_GIVEREF(__pyx_t_3);
+                PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_t_3);
+                __Pyx_GIVEREF(__pyx_t_2);
+                PyTuple_SET_ITEM(__pyx_t_5, 3, __pyx_t_2);
+                __pyx_t_4 = 0;
+                __pyx_t_1 = 0;
+                __pyx_t_3 = 0;
+                __pyx_t_2 = 0;
+                __pyx_t_35 = __Pyx_PyList_Append(__pyx_v_boundary_index_list, __pyx_t_5); if (unlikely(__pyx_t_35 == ((int)-1))) __PYX_ERR(0, 118, __pyx_L1_error)
+                __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+                /* "pystencils/boundaries/createindexlistcython.pyx":119
+ *                             if flag_field[x + dx, y + dy, z + dz] & fluid_mask:
+ *                                 boundary_index_list.append((x,y,z, dirIdx))
+ *                                 if single_link:             # <<<<<<<<<<<<<<
+ *                                     break
+ *     return boundary_index_list
+ */
+                __pyx_t_19 = (__pyx_v_single_link != 0);
+                if (__pyx_t_19) {
+
+                  /* "pystencils/boundaries/createindexlistcython.pyx":120
+ *                                 boundary_index_list.append((x,y,z, dirIdx))
+ *                                 if single_link:
+ *                                     break             # <<<<<<<<<<<<<<
+ *     return boundary_index_list
+ */
+                  goto __pyx_L13_break;
+
+                  /* "pystencils/boundaries/createindexlistcython.pyx":119
+ *                             if flag_field[x + dx, y + dy, z + dz] & fluid_mask:
+ *                                 boundary_index_list.append((x,y,z, dirIdx))
+ *                                 if single_link:             # <<<<<<<<<<<<<<
+ *                                     break
+ *     return boundary_index_list
+ */
+                }
+
+                /* "pystencils/boundaries/createindexlistcython.pyx":117
+ *                         dz = stencil[dirIdx,2]
+ *                         if 0 <= x + dx < xs and 0 <= y + dy < ys and 0 <= z + dz < zs:
+ *                             if flag_field[x + dx, y + dy, z + dz] & fluid_mask:             # <<<<<<<<<<<<<<
+ *                                 boundary_index_list.append((x,y,z, dirIdx))
+ *                                 if single_link:
+ */
+              }
+
+              /* "pystencils/boundaries/createindexlistcython.pyx":116
+ *                         dy = stencil[dirIdx,1]
+ *                         dz = stencil[dirIdx,2]
+ *                         if 0 <= x + dx < xs and 0 <= y + dy < ys and 0 <= z + dz < zs:             # <<<<<<<<<<<<<<
+ *                             if flag_field[x + dx, y + dy, z + dz] & fluid_mask:
+ *                                 boundary_index_list.append((x,y,z, dirIdx))
+ */
+            }
+          }
+          __pyx_L13_break:;
+
+          /* "pystencils/boundaries/createindexlistcython.pyx":111
+ *         for y in range(0, ys):
+ *             for x in range(0, xs):
+ *                 if flag_field[x, y, z] & boundary_mask:             # <<<<<<<<<<<<<<
+ *                     for dirIdx in range(num_directions):
+ *                         dx = stencil[dirIdx,0]
+ */
+        }
+      }
+    }
+  }
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":121
+ *                                 if single_link:
+ *                                     break
+ *     return boundary_index_list             # <<<<<<<<<<<<<<
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(__pyx_v_boundary_index_list);
+  __pyx_r = __pyx_v_boundary_index_list;
+  goto __pyx_L0;
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":98
+ * @cython.boundscheck(False) # turn off bounds-checking for entire function
+ * @cython.wraparound(False)  # turn off negative index wrapping for entire function
+ * def create_boundary_cell_index_list_3d(object[IntegerType, ndim=3] flag_field,             # <<<<<<<<<<<<<<
+ *                                        IntegerType boundary_mask, IntegerType fluid_mask,
+ *                                        object[int, ndim=2] stencil, int single_link):
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_XDECREF(__pyx_t_5);
+  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
+    __Pyx_PyThreadState_declare
+    __Pyx_PyThreadState_assign
+    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
+    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_flag_field.rcbuffer->pybuffer);
+    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_stencil.rcbuffer->pybuffer);
+  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
+  __Pyx_AddTraceback("pystencils.boundaries.createindexlistcython.create_boundary_cell_index_list_3d", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  goto __pyx_L2;
+  __pyx_L0:;
+  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_flag_field.rcbuffer->pybuffer);
+  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_stencil.rcbuffer->pybuffer);
+  __pyx_L2:;
+  __Pyx_XDECREF(__pyx_v_boundary_index_list);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static PyObject *__pyx_fuse_3__pyx_pw_10pystencils_10boundaries_21createindexlistcython_63create_boundary_cell_index_list_3d(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyMethodDef __pyx_fuse_3__pyx_mdef_10pystencils_10boundaries_21createindexlistcython_63create_boundary_cell_index_list_3d = {"__pyx_fuse_3create_boundary_cell_index_list_3d", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_fuse_3__pyx_pw_10pystencils_10boundaries_21createindexlistcython_63create_boundary_cell_index_list_3d, METH_VARARGS|METH_KEYWORDS, 0};
+static PyObject *__pyx_fuse_3__pyx_pw_10pystencils_10boundaries_21createindexlistcython_63create_boundary_cell_index_list_3d(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_flag_field = 0;
+  PY_LONG_LONG __pyx_v_boundary_mask;
+  PY_LONG_LONG __pyx_v_fluid_mask;
+  PyObject *__pyx_v_stencil = 0;
+  int __pyx_v_single_link;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("create_boundary_cell_index_list_3d (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_flag_field,&__pyx_n_s_boundary_mask,&__pyx_n_s_fluid_mask,&__pyx_n_s_stencil,&__pyx_n_s_single_link,0};
+    PyObject* values[5] = {0,0,0,0,0};
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+        CYTHON_FALLTHROUGH;
+        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
+        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_flag_field)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
+        case  1:
+        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_boundary_mask)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_cell_index_list_3d", 1, 5, 5, 1); __PYX_ERR(0, 98, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  2:
+        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_fluid_mask)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_cell_index_list_3d", 1, 5, 5, 2); __PYX_ERR(0, 98, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  3:
+        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_stencil)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_cell_index_list_3d", 1, 5, 5, 3); __PYX_ERR(0, 98, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  4:
+        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_single_link)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_cell_index_list_3d", 1, 5, 5, 4); __PYX_ERR(0, 98, __pyx_L3_error)
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "create_boundary_cell_index_list_3d") < 0)) __PYX_ERR(0, 98, __pyx_L3_error)
+      }
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 5) {
+      goto __pyx_L5_argtuple_error;
+    } else {
+      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+      values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+      values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+    }
+    __pyx_v_flag_field = ((PyObject *)values[0]);
+    __pyx_v_boundary_mask = __Pyx_PyInt_As_PY_LONG_LONG(values[1]); if (unlikely((__pyx_v_boundary_mask == (PY_LONG_LONG)-1) && PyErr_Occurred())) __PYX_ERR(0, 99, __pyx_L3_error)
+    __pyx_v_fluid_mask = __Pyx_PyInt_As_PY_LONG_LONG(values[2]); if (unlikely((__pyx_v_fluid_mask == (PY_LONG_LONG)-1) && PyErr_Occurred())) __PYX_ERR(0, 99, __pyx_L3_error)
+    __pyx_v_stencil = ((PyObject *)values[3]);
+    __pyx_v_single_link = __Pyx_PyInt_As_int(values[4]); if (unlikely((__pyx_v_single_link == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 100, __pyx_L3_error)
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("create_boundary_cell_index_list_3d", 1, 5, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 98, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("pystencils.boundaries.createindexlistcython.create_boundary_cell_index_list_3d", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_10pystencils_10boundaries_21createindexlistcython_62create_boundary_cell_index_list_3d(__pyx_self, __pyx_v_flag_field, __pyx_v_boundary_mask, __pyx_v_fluid_mask, __pyx_v_stencil, __pyx_v_single_link);
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_10pystencils_10boundaries_21createindexlistcython_62create_boundary_cell_index_list_3d(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_flag_field, PY_LONG_LONG __pyx_v_boundary_mask, PY_LONG_LONG __pyx_v_fluid_mask, PyObject *__pyx_v_stencil, int __pyx_v_single_link) {
+  int __pyx_v_xs;
+  int __pyx_v_ys;
+  int __pyx_v_zs;
+  int __pyx_v_x;
+  int __pyx_v_y;
+  int __pyx_v_z;
+  int __pyx_v_dirIdx;
+  int __pyx_v_num_directions;
+  int __pyx_v_dx;
+  int __pyx_v_dy;
+  int __pyx_v_dz;
+  PyObject *__pyx_v_boundary_index_list = NULL;
+  __Pyx_LocalBuf_ND __pyx_pybuffernd_flag_field;
+  __Pyx_Buffer __pyx_pybuffer_flag_field;
+  __Pyx_LocalBuf_ND __pyx_pybuffernd_stencil;
+  __Pyx_Buffer __pyx_pybuffer_stencil;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
+  PyObject *__pyx_t_5 = NULL;
+  PyObject *(*__pyx_t_6)(PyObject *);
+  int __pyx_t_7;
+  int __pyx_t_8;
+  int __pyx_t_9;
+  int __pyx_t_10;
+  int __pyx_t_11;
+  int __pyx_t_12;
+  int __pyx_t_13;
+  int __pyx_t_14;
+  int __pyx_t_15;
+  Py_ssize_t __pyx_t_16;
+  Py_ssize_t __pyx_t_17;
+  Py_ssize_t __pyx_t_18;
+  int __pyx_t_19;
+  int __pyx_t_20;
+  int __pyx_t_21;
+  int __pyx_t_22;
+  Py_ssize_t __pyx_t_23;
+  Py_ssize_t __pyx_t_24;
+  Py_ssize_t __pyx_t_25;
+  Py_ssize_t __pyx_t_26;
+  Py_ssize_t __pyx_t_27;
+  Py_ssize_t __pyx_t_28;
+  int __pyx_t_29;
+  int __pyx_t_30;
+  int __pyx_t_31;
+  Py_ssize_t __pyx_t_32;
+  Py_ssize_t __pyx_t_33;
+  Py_ssize_t __pyx_t_34;
+  int __pyx_t_35;
+  __Pyx_RefNannySetupContext("__pyx_fuse_3create_boundary_cell_index_list_3d", 0);
+  __pyx_pybuffer_flag_field.pybuffer.buf = NULL;
+  __pyx_pybuffer_flag_field.refcount = 0;
+  __pyx_pybuffernd_flag_field.data = NULL;
+  __pyx_pybuffernd_flag_field.rcbuffer = &__pyx_pybuffer_flag_field;
+  __pyx_pybuffer_stencil.pybuffer.buf = NULL;
+  __pyx_pybuffer_stencil.refcount = 0;
+  __pyx_pybuffernd_stencil.data = NULL;
+  __pyx_pybuffernd_stencil.rcbuffer = &__pyx_pybuffer_stencil;
+  {
+    __Pyx_BufFmt_StackElem __pyx_stack[1];
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_flag_field.rcbuffer->pybuffer, (PyObject*)__pyx_v_flag_field, &__Pyx_TypeInfo_PY_LONG_LONG, PyBUF_FORMAT| PyBUF_INDIRECT, 3, 0, __pyx_stack) == -1)) __PYX_ERR(0, 98, __pyx_L1_error)
+  }
+  __pyx_pybuffernd_flag_field.diminfo[0].strides = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_flag_field.diminfo[0].shape = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_flag_field.diminfo[0].suboffsets = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.suboffsets[0]; __pyx_pybuffernd_flag_field.diminfo[1].strides = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_flag_field.diminfo[1].shape = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_flag_field.diminfo[1].suboffsets = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.suboffsets[1]; __pyx_pybuffernd_flag_field.diminfo[2].strides = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_flag_field.diminfo[2].shape = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.shape[2]; __pyx_pybuffernd_flag_field.diminfo[2].suboffsets = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.suboffsets[2];
+  {
+    __Pyx_BufFmt_StackElem __pyx_stack[1];
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_stencil.rcbuffer->pybuffer, (PyObject*)__pyx_v_stencil, &__Pyx_TypeInfo_int, PyBUF_FORMAT| PyBUF_INDIRECT, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 98, __pyx_L1_error)
+  }
+  __pyx_pybuffernd_stencil.diminfo[0].strides = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_stencil.diminfo[0].shape = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_stencil.diminfo[0].suboffsets = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.suboffsets[0]; __pyx_pybuffernd_stencil.diminfo[1].strides = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_stencil.diminfo[1].shape = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_stencil.diminfo[1].suboffsets = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.suboffsets[1];
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":104
+ *     cdef int dirIdx, num_directions, dx, dy, dz
+ * 
+ *     xs, ys, zs = flag_field.shape             # <<<<<<<<<<<<<<
+ *     boundary_index_list = []
+ *     num_directions = stencil.shape[0]
+ */
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_flag_field), __pyx_n_s_shape); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 104, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) {
+    PyObject* sequence = __pyx_t_1;
+    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
+    if (unlikely(size != 3)) {
+      if (size > 3) __Pyx_RaiseTooManyValuesError(3);
+      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
+      __PYX_ERR(0, 104, __pyx_L1_error)
+    }
+    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+    if (likely(PyTuple_CheckExact(sequence))) {
+      __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
+      __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); 
+      __pyx_t_4 = PyTuple_GET_ITEM(sequence, 2); 
+    } else {
+      __pyx_t_2 = PyList_GET_ITEM(sequence, 0); 
+      __pyx_t_3 = PyList_GET_ITEM(sequence, 1); 
+      __pyx_t_4 = PyList_GET_ITEM(sequence, 2); 
+    }
+    __Pyx_INCREF(__pyx_t_2);
+    __Pyx_INCREF(__pyx_t_3);
+    __Pyx_INCREF(__pyx_t_4);
+    #else
+    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 104, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_2);
+    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 104, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    __pyx_t_4 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 104, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
+    #endif
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  } else {
+    Py_ssize_t index = -1;
+    __pyx_t_5 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 104, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_5);
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __pyx_t_6 = Py_TYPE(__pyx_t_5)->tp_iternext;
+    index = 0; __pyx_t_2 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_2)) goto __pyx_L3_unpacking_failed;
+    __Pyx_GOTREF(__pyx_t_2);
+    index = 1; __pyx_t_3 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_3)) goto __pyx_L3_unpacking_failed;
+    __Pyx_GOTREF(__pyx_t_3);
+    index = 2; __pyx_t_4 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_4)) goto __pyx_L3_unpacking_failed;
+    __Pyx_GOTREF(__pyx_t_4);
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_5), 3) < 0) __PYX_ERR(0, 104, __pyx_L1_error)
+    __pyx_t_6 = NULL;
+    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+    goto __pyx_L4_unpacking_done;
+    __pyx_L3_unpacking_failed:;
+    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+    __pyx_t_6 = NULL;
+    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
+    __PYX_ERR(0, 104, __pyx_L1_error)
+    __pyx_L4_unpacking_done:;
+  }
+  __pyx_t_7 = __Pyx_PyInt_As_int(__pyx_t_2); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 104, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_8 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_8 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 104, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __pyx_t_9 = __Pyx_PyInt_As_int(__pyx_t_4); if (unlikely((__pyx_t_9 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 104, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __pyx_v_xs = __pyx_t_7;
+  __pyx_v_ys = __pyx_t_8;
+  __pyx_v_zs = __pyx_t_9;
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":105
+ * 
+ *     xs, ys, zs = flag_field.shape
+ *     boundary_index_list = []             # <<<<<<<<<<<<<<
+ *     num_directions = stencil.shape[0]
+ * 
+ */
+  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 105, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_boundary_index_list = ((PyObject*)__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":106
+ *     xs, ys, zs = flag_field.shape
+ *     boundary_index_list = []
+ *     num_directions = stencil.shape[0]             # <<<<<<<<<<<<<<
+ * 
+ *     for z in range(0, zs):
+ */
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_stencil), __pyx_n_s_shape); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 106, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_4 = __Pyx_GetItemInt(__pyx_t_1, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 106, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_9 = __Pyx_PyInt_As_int(__pyx_t_4); if (unlikely((__pyx_t_9 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 106, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __pyx_v_num_directions = __pyx_t_9;
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":108
+ *     num_directions = stencil.shape[0]
+ * 
+ *     for z in range(0, zs):             # <<<<<<<<<<<<<<
+ *         for y in range(0, ys):
+ *             for x in range(0, xs):
+ */
+  __pyx_t_9 = __pyx_v_zs;
+  __pyx_t_8 = __pyx_t_9;
+  for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_8; __pyx_t_7+=1) {
+    __pyx_v_z = __pyx_t_7;
+
+    /* "pystencils/boundaries/createindexlistcython.pyx":109
+ * 
+ *     for z in range(0, zs):
+ *         for y in range(0, ys):             # <<<<<<<<<<<<<<
+ *             for x in range(0, xs):
+ *                 if flag_field[x, y, z] & boundary_mask:
+ */
+    __pyx_t_10 = __pyx_v_ys;
+    __pyx_t_11 = __pyx_t_10;
+    for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) {
+      __pyx_v_y = __pyx_t_12;
+
+      /* "pystencils/boundaries/createindexlistcython.pyx":110
+ *     for z in range(0, zs):
+ *         for y in range(0, ys):
+ *             for x in range(0, xs):             # <<<<<<<<<<<<<<
+ *                 if flag_field[x, y, z] & boundary_mask:
+ *                     for dirIdx in range(num_directions):
+ */
+      __pyx_t_13 = __pyx_v_xs;
+      __pyx_t_14 = __pyx_t_13;
+      for (__pyx_t_15 = 0; __pyx_t_15 < __pyx_t_14; __pyx_t_15+=1) {
+        __pyx_v_x = __pyx_t_15;
+
+        /* "pystencils/boundaries/createindexlistcython.pyx":111
+ *         for y in range(0, ys):
+ *             for x in range(0, xs):
+ *                 if flag_field[x, y, z] & boundary_mask:             # <<<<<<<<<<<<<<
+ *                     for dirIdx in range(num_directions):
+ *                         dx = stencil[dirIdx,0]
+ */
+        __pyx_t_16 = __pyx_v_x;
+        __pyx_t_17 = __pyx_v_y;
+        __pyx_t_18 = __pyx_v_z;
+        __pyx_t_19 = (((*__Pyx_BufPtrFull3d(PY_LONG_LONG *, __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.buf, __pyx_t_16, __pyx_pybuffernd_flag_field.diminfo[0].strides, __pyx_pybuffernd_flag_field.diminfo[0].suboffsets, __pyx_t_17, __pyx_pybuffernd_flag_field.diminfo[1].strides, __pyx_pybuffernd_flag_field.diminfo[1].suboffsets, __pyx_t_18, __pyx_pybuffernd_flag_field.diminfo[2].strides, __pyx_pybuffernd_flag_field.diminfo[2].suboffsets)) & __pyx_v_boundary_mask) != 0);
+        if (__pyx_t_19) {
+
+          /* "pystencils/boundaries/createindexlistcython.pyx":112
+ *             for x in range(0, xs):
+ *                 if flag_field[x, y, z] & boundary_mask:
+ *                     for dirIdx in range(num_directions):             # <<<<<<<<<<<<<<
+ *                         dx = stencil[dirIdx,0]
+ *                         dy = stencil[dirIdx,1]
+ */
+          __pyx_t_20 = __pyx_v_num_directions;
+          __pyx_t_21 = __pyx_t_20;
+          for (__pyx_t_22 = 0; __pyx_t_22 < __pyx_t_21; __pyx_t_22+=1) {
+            __pyx_v_dirIdx = __pyx_t_22;
+
+            /* "pystencils/boundaries/createindexlistcython.pyx":113
+ *                 if flag_field[x, y, z] & boundary_mask:
+ *                     for dirIdx in range(num_directions):
+ *                         dx = stencil[dirIdx,0]             # <<<<<<<<<<<<<<
+ *                         dy = stencil[dirIdx,1]
+ *                         dz = stencil[dirIdx,2]
+ */
+            __pyx_t_23 = __pyx_v_dirIdx;
+            __pyx_t_24 = 0;
+            __pyx_v_dx = (*__Pyx_BufPtrFull2d(int *, __pyx_pybuffernd_stencil.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_stencil.diminfo[0].strides, __pyx_pybuffernd_stencil.diminfo[0].suboffsets, __pyx_t_24, __pyx_pybuffernd_stencil.diminfo[1].strides, __pyx_pybuffernd_stencil.diminfo[1].suboffsets));
+
+            /* "pystencils/boundaries/createindexlistcython.pyx":114
+ *                     for dirIdx in range(num_directions):
+ *                         dx = stencil[dirIdx,0]
+ *                         dy = stencil[dirIdx,1]             # <<<<<<<<<<<<<<
+ *                         dz = stencil[dirIdx,2]
+ *                         if 0 <= x + dx < xs and 0 <= y + dy < ys and 0 <= z + dz < zs:
+ */
+            __pyx_t_25 = __pyx_v_dirIdx;
+            __pyx_t_26 = 1;
+            __pyx_v_dy = (*__Pyx_BufPtrFull2d(int *, __pyx_pybuffernd_stencil.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_stencil.diminfo[0].strides, __pyx_pybuffernd_stencil.diminfo[0].suboffsets, __pyx_t_26, __pyx_pybuffernd_stencil.diminfo[1].strides, __pyx_pybuffernd_stencil.diminfo[1].suboffsets));
+
+            /* "pystencils/boundaries/createindexlistcython.pyx":115
+ *                         dx = stencil[dirIdx,0]
+ *                         dy = stencil[dirIdx,1]
+ *                         dz = stencil[dirIdx,2]             # <<<<<<<<<<<<<<
+ *                         if 0 <= x + dx < xs and 0 <= y + dy < ys and 0 <= z + dz < zs:
+ *                             if flag_field[x + dx, y + dy, z + dz] & fluid_mask:
+ */
+            __pyx_t_27 = __pyx_v_dirIdx;
+            __pyx_t_28 = 2;
+            __pyx_v_dz = (*__Pyx_BufPtrFull2d(int *, __pyx_pybuffernd_stencil.rcbuffer->pybuffer.buf, __pyx_t_27, __pyx_pybuffernd_stencil.diminfo[0].strides, __pyx_pybuffernd_stencil.diminfo[0].suboffsets, __pyx_t_28, __pyx_pybuffernd_stencil.diminfo[1].strides, __pyx_pybuffernd_stencil.diminfo[1].suboffsets));
+
+            /* "pystencils/boundaries/createindexlistcython.pyx":116
+ *                         dy = stencil[dirIdx,1]
+ *                         dz = stencil[dirIdx,2]
+ *                         if 0 <= x + dx < xs and 0 <= y + dy < ys and 0 <= z + dz < zs:             # <<<<<<<<<<<<<<
+ *                             if flag_field[x + dx, y + dy, z + dz] & fluid_mask:
+ *                                 boundary_index_list.append((x,y,z, dirIdx))
+ */
+            __pyx_t_29 = (__pyx_v_x + __pyx_v_dx);
+            __pyx_t_30 = (0 <= __pyx_t_29);
+            if (__pyx_t_30) {
+              __pyx_t_30 = (__pyx_t_29 < __pyx_v_xs);
+            }
+            __pyx_t_31 = (__pyx_t_30 != 0);
+            if (__pyx_t_31) {
+            } else {
+              __pyx_t_19 = __pyx_t_31;
+              goto __pyx_L15_bool_binop_done;
+            }
+            __pyx_t_29 = (__pyx_v_y + __pyx_v_dy);
+            __pyx_t_31 = (0 <= __pyx_t_29);
+            if (__pyx_t_31) {
+              __pyx_t_31 = (__pyx_t_29 < __pyx_v_ys);
+            }
+            __pyx_t_30 = (__pyx_t_31 != 0);
+            if (__pyx_t_30) {
+            } else {
+              __pyx_t_19 = __pyx_t_30;
+              goto __pyx_L15_bool_binop_done;
+            }
+            __pyx_t_29 = (__pyx_v_z + __pyx_v_dz);
+            __pyx_t_30 = (0 <= __pyx_t_29);
+            if (__pyx_t_30) {
+              __pyx_t_30 = (__pyx_t_29 < __pyx_v_zs);
+            }
+            __pyx_t_31 = (__pyx_t_30 != 0);
+            __pyx_t_19 = __pyx_t_31;
+            __pyx_L15_bool_binop_done:;
+            if (__pyx_t_19) {
+
+              /* "pystencils/boundaries/createindexlistcython.pyx":117
+ *                         dz = stencil[dirIdx,2]
+ *                         if 0 <= x + dx < xs and 0 <= y + dy < ys and 0 <= z + dz < zs:
+ *                             if flag_field[x + dx, y + dy, z + dz] & fluid_mask:             # <<<<<<<<<<<<<<
+ *                                 boundary_index_list.append((x,y,z, dirIdx))
+ *                                 if single_link:
+ */
+              __pyx_t_32 = (__pyx_v_x + __pyx_v_dx);
+              __pyx_t_33 = (__pyx_v_y + __pyx_v_dy);
+              __pyx_t_34 = (__pyx_v_z + __pyx_v_dz);
+              __pyx_t_19 = (((*__Pyx_BufPtrFull3d(PY_LONG_LONG *, __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.buf, __pyx_t_32, __pyx_pybuffernd_flag_field.diminfo[0].strides, __pyx_pybuffernd_flag_field.diminfo[0].suboffsets, __pyx_t_33, __pyx_pybuffernd_flag_field.diminfo[1].strides, __pyx_pybuffernd_flag_field.diminfo[1].suboffsets, __pyx_t_34, __pyx_pybuffernd_flag_field.diminfo[2].strides, __pyx_pybuffernd_flag_field.diminfo[2].suboffsets)) & __pyx_v_fluid_mask) != 0);
+              if (__pyx_t_19) {
+
+                /* "pystencils/boundaries/createindexlistcython.pyx":118
+ *                         if 0 <= x + dx < xs and 0 <= y + dy < ys and 0 <= z + dz < zs:
+ *                             if flag_field[x + dx, y + dy, z + dz] & fluid_mask:
+ *                                 boundary_index_list.append((x,y,z, dirIdx))             # <<<<<<<<<<<<<<
+ *                                 if single_link:
+ *                                     break
+ */
+                __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_x); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 118, __pyx_L1_error)
+                __Pyx_GOTREF(__pyx_t_4);
+                __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_y); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 118, __pyx_L1_error)
+                __Pyx_GOTREF(__pyx_t_1);
+                __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_z); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 118, __pyx_L1_error)
+                __Pyx_GOTREF(__pyx_t_3);
+                __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_dirIdx); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 118, __pyx_L1_error)
+                __Pyx_GOTREF(__pyx_t_2);
+                __pyx_t_5 = PyTuple_New(4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 118, __pyx_L1_error)
+                __Pyx_GOTREF(__pyx_t_5);
+                __Pyx_GIVEREF(__pyx_t_4);
+                PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4);
+                __Pyx_GIVEREF(__pyx_t_1);
+                PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_1);
+                __Pyx_GIVEREF(__pyx_t_3);
+                PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_t_3);
+                __Pyx_GIVEREF(__pyx_t_2);
+                PyTuple_SET_ITEM(__pyx_t_5, 3, __pyx_t_2);
+                __pyx_t_4 = 0;
+                __pyx_t_1 = 0;
+                __pyx_t_3 = 0;
+                __pyx_t_2 = 0;
+                __pyx_t_35 = __Pyx_PyList_Append(__pyx_v_boundary_index_list, __pyx_t_5); if (unlikely(__pyx_t_35 == ((int)-1))) __PYX_ERR(0, 118, __pyx_L1_error)
+                __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+                /* "pystencils/boundaries/createindexlistcython.pyx":119
+ *                             if flag_field[x + dx, y + dy, z + dz] & fluid_mask:
+ *                                 boundary_index_list.append((x,y,z, dirIdx))
+ *                                 if single_link:             # <<<<<<<<<<<<<<
+ *                                     break
+ *     return boundary_index_list
+ */
+                __pyx_t_19 = (__pyx_v_single_link != 0);
+                if (__pyx_t_19) {
+
+                  /* "pystencils/boundaries/createindexlistcython.pyx":120
+ *                                 boundary_index_list.append((x,y,z, dirIdx))
+ *                                 if single_link:
+ *                                     break             # <<<<<<<<<<<<<<
+ *     return boundary_index_list
+ */
+                  goto __pyx_L13_break;
+
+                  /* "pystencils/boundaries/createindexlistcython.pyx":119
+ *                             if flag_field[x + dx, y + dy, z + dz] & fluid_mask:
+ *                                 boundary_index_list.append((x,y,z, dirIdx))
+ *                                 if single_link:             # <<<<<<<<<<<<<<
+ *                                     break
+ *     return boundary_index_list
+ */
+                }
+
+                /* "pystencils/boundaries/createindexlistcython.pyx":117
+ *                         dz = stencil[dirIdx,2]
+ *                         if 0 <= x + dx < xs and 0 <= y + dy < ys and 0 <= z + dz < zs:
+ *                             if flag_field[x + dx, y + dy, z + dz] & fluid_mask:             # <<<<<<<<<<<<<<
+ *                                 boundary_index_list.append((x,y,z, dirIdx))
+ *                                 if single_link:
+ */
+              }
+
+              /* "pystencils/boundaries/createindexlistcython.pyx":116
+ *                         dy = stencil[dirIdx,1]
+ *                         dz = stencil[dirIdx,2]
+ *                         if 0 <= x + dx < xs and 0 <= y + dy < ys and 0 <= z + dz < zs:             # <<<<<<<<<<<<<<
+ *                             if flag_field[x + dx, y + dy, z + dz] & fluid_mask:
+ *                                 boundary_index_list.append((x,y,z, dirIdx))
+ */
+            }
+          }
+          __pyx_L13_break:;
+
+          /* "pystencils/boundaries/createindexlistcython.pyx":111
+ *         for y in range(0, ys):
+ *             for x in range(0, xs):
+ *                 if flag_field[x, y, z] & boundary_mask:             # <<<<<<<<<<<<<<
+ *                     for dirIdx in range(num_directions):
+ *                         dx = stencil[dirIdx,0]
+ */
+        }
+      }
+    }
+  }
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":121
+ *                                 if single_link:
+ *                                     break
+ *     return boundary_index_list             # <<<<<<<<<<<<<<
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(__pyx_v_boundary_index_list);
+  __pyx_r = __pyx_v_boundary_index_list;
+  goto __pyx_L0;
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":98
+ * @cython.boundscheck(False) # turn off bounds-checking for entire function
+ * @cython.wraparound(False)  # turn off negative index wrapping for entire function
+ * def create_boundary_cell_index_list_3d(object[IntegerType, ndim=3] flag_field,             # <<<<<<<<<<<<<<
+ *                                        IntegerType boundary_mask, IntegerType fluid_mask,
+ *                                        object[int, ndim=2] stencil, int single_link):
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_XDECREF(__pyx_t_5);
+  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
+    __Pyx_PyThreadState_declare
+    __Pyx_PyThreadState_assign
+    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
+    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_flag_field.rcbuffer->pybuffer);
+    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_stencil.rcbuffer->pybuffer);
+  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
+  __Pyx_AddTraceback("pystencils.boundaries.createindexlistcython.create_boundary_cell_index_list_3d", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  goto __pyx_L2;
+  __pyx_L0:;
+  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_flag_field.rcbuffer->pybuffer);
+  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_stencil.rcbuffer->pybuffer);
+  __pyx_L2:;
+  __Pyx_XDECREF(__pyx_v_boundary_index_list);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static PyObject *__pyx_fuse_4__pyx_pw_10pystencils_10boundaries_21createindexlistcython_65create_boundary_cell_index_list_3d(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyMethodDef __pyx_fuse_4__pyx_mdef_10pystencils_10boundaries_21createindexlistcython_65create_boundary_cell_index_list_3d = {"__pyx_fuse_4create_boundary_cell_index_list_3d", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_fuse_4__pyx_pw_10pystencils_10boundaries_21createindexlistcython_65create_boundary_cell_index_list_3d, METH_VARARGS|METH_KEYWORDS, 0};
+static PyObject *__pyx_fuse_4__pyx_pw_10pystencils_10boundaries_21createindexlistcython_65create_boundary_cell_index_list_3d(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_flag_field = 0;
+  unsigned short __pyx_v_boundary_mask;
+  unsigned short __pyx_v_fluid_mask;
+  PyObject *__pyx_v_stencil = 0;
+  int __pyx_v_single_link;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("create_boundary_cell_index_list_3d (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_flag_field,&__pyx_n_s_boundary_mask,&__pyx_n_s_fluid_mask,&__pyx_n_s_stencil,&__pyx_n_s_single_link,0};
+    PyObject* values[5] = {0,0,0,0,0};
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+        CYTHON_FALLTHROUGH;
+        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
+        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_flag_field)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
+        case  1:
+        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_boundary_mask)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_cell_index_list_3d", 1, 5, 5, 1); __PYX_ERR(0, 98, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  2:
+        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_fluid_mask)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_cell_index_list_3d", 1, 5, 5, 2); __PYX_ERR(0, 98, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  3:
+        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_stencil)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_cell_index_list_3d", 1, 5, 5, 3); __PYX_ERR(0, 98, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  4:
+        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_single_link)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_cell_index_list_3d", 1, 5, 5, 4); __PYX_ERR(0, 98, __pyx_L3_error)
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "create_boundary_cell_index_list_3d") < 0)) __PYX_ERR(0, 98, __pyx_L3_error)
+      }
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 5) {
+      goto __pyx_L5_argtuple_error;
+    } else {
+      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+      values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+      values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+    }
+    __pyx_v_flag_field = ((PyObject *)values[0]);
+    __pyx_v_boundary_mask = __Pyx_PyInt_As_unsigned_short(values[1]); if (unlikely((__pyx_v_boundary_mask == (unsigned short)-1) && PyErr_Occurred())) __PYX_ERR(0, 99, __pyx_L3_error)
+    __pyx_v_fluid_mask = __Pyx_PyInt_As_unsigned_short(values[2]); if (unlikely((__pyx_v_fluid_mask == (unsigned short)-1) && PyErr_Occurred())) __PYX_ERR(0, 99, __pyx_L3_error)
+    __pyx_v_stencil = ((PyObject *)values[3]);
+    __pyx_v_single_link = __Pyx_PyInt_As_int(values[4]); if (unlikely((__pyx_v_single_link == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 100, __pyx_L3_error)
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("create_boundary_cell_index_list_3d", 1, 5, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 98, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("pystencils.boundaries.createindexlistcython.create_boundary_cell_index_list_3d", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_10pystencils_10boundaries_21createindexlistcython_64create_boundary_cell_index_list_3d(__pyx_self, __pyx_v_flag_field, __pyx_v_boundary_mask, __pyx_v_fluid_mask, __pyx_v_stencil, __pyx_v_single_link);
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_10pystencils_10boundaries_21createindexlistcython_64create_boundary_cell_index_list_3d(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_flag_field, unsigned short __pyx_v_boundary_mask, unsigned short __pyx_v_fluid_mask, PyObject *__pyx_v_stencil, int __pyx_v_single_link) {
+  int __pyx_v_xs;
+  int __pyx_v_ys;
+  int __pyx_v_zs;
+  int __pyx_v_x;
+  int __pyx_v_y;
+  int __pyx_v_z;
+  int __pyx_v_dirIdx;
+  int __pyx_v_num_directions;
+  int __pyx_v_dx;
+  int __pyx_v_dy;
+  int __pyx_v_dz;
+  PyObject *__pyx_v_boundary_index_list = NULL;
+  __Pyx_LocalBuf_ND __pyx_pybuffernd_flag_field;
+  __Pyx_Buffer __pyx_pybuffer_flag_field;
+  __Pyx_LocalBuf_ND __pyx_pybuffernd_stencil;
+  __Pyx_Buffer __pyx_pybuffer_stencil;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
+  PyObject *__pyx_t_5 = NULL;
+  PyObject *(*__pyx_t_6)(PyObject *);
+  int __pyx_t_7;
+  int __pyx_t_8;
+  int __pyx_t_9;
+  int __pyx_t_10;
+  int __pyx_t_11;
+  int __pyx_t_12;
+  int __pyx_t_13;
+  int __pyx_t_14;
+  int __pyx_t_15;
+  Py_ssize_t __pyx_t_16;
+  Py_ssize_t __pyx_t_17;
+  Py_ssize_t __pyx_t_18;
+  int __pyx_t_19;
+  int __pyx_t_20;
+  int __pyx_t_21;
+  int __pyx_t_22;
+  Py_ssize_t __pyx_t_23;
+  Py_ssize_t __pyx_t_24;
+  Py_ssize_t __pyx_t_25;
+  Py_ssize_t __pyx_t_26;
+  Py_ssize_t __pyx_t_27;
+  Py_ssize_t __pyx_t_28;
+  int __pyx_t_29;
+  int __pyx_t_30;
+  int __pyx_t_31;
+  Py_ssize_t __pyx_t_32;
+  Py_ssize_t __pyx_t_33;
+  Py_ssize_t __pyx_t_34;
+  int __pyx_t_35;
+  __Pyx_RefNannySetupContext("__pyx_fuse_4create_boundary_cell_index_list_3d", 0);
+  __pyx_pybuffer_flag_field.pybuffer.buf = NULL;
+  __pyx_pybuffer_flag_field.refcount = 0;
+  __pyx_pybuffernd_flag_field.data = NULL;
+  __pyx_pybuffernd_flag_field.rcbuffer = &__pyx_pybuffer_flag_field;
+  __pyx_pybuffer_stencil.pybuffer.buf = NULL;
+  __pyx_pybuffer_stencil.refcount = 0;
+  __pyx_pybuffernd_stencil.data = NULL;
+  __pyx_pybuffernd_stencil.rcbuffer = &__pyx_pybuffer_stencil;
+  {
+    __Pyx_BufFmt_StackElem __pyx_stack[1];
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_flag_field.rcbuffer->pybuffer, (PyObject*)__pyx_v_flag_field, &__Pyx_TypeInfo_unsigned_short, PyBUF_FORMAT| PyBUF_INDIRECT, 3, 0, __pyx_stack) == -1)) __PYX_ERR(0, 98, __pyx_L1_error)
+  }
+  __pyx_pybuffernd_flag_field.diminfo[0].strides = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_flag_field.diminfo[0].shape = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_flag_field.diminfo[0].suboffsets = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.suboffsets[0]; __pyx_pybuffernd_flag_field.diminfo[1].strides = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_flag_field.diminfo[1].shape = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_flag_field.diminfo[1].suboffsets = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.suboffsets[1]; __pyx_pybuffernd_flag_field.diminfo[2].strides = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_flag_field.diminfo[2].shape = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.shape[2]; __pyx_pybuffernd_flag_field.diminfo[2].suboffsets = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.suboffsets[2];
+  {
+    __Pyx_BufFmt_StackElem __pyx_stack[1];
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_stencil.rcbuffer->pybuffer, (PyObject*)__pyx_v_stencil, &__Pyx_TypeInfo_int, PyBUF_FORMAT| PyBUF_INDIRECT, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 98, __pyx_L1_error)
+  }
+  __pyx_pybuffernd_stencil.diminfo[0].strides = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_stencil.diminfo[0].shape = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_stencil.diminfo[0].suboffsets = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.suboffsets[0]; __pyx_pybuffernd_stencil.diminfo[1].strides = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_stencil.diminfo[1].shape = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_stencil.diminfo[1].suboffsets = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.suboffsets[1];
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":104
+ *     cdef int dirIdx, num_directions, dx, dy, dz
+ * 
+ *     xs, ys, zs = flag_field.shape             # <<<<<<<<<<<<<<
+ *     boundary_index_list = []
+ *     num_directions = stencil.shape[0]
+ */
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_flag_field), __pyx_n_s_shape); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 104, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) {
+    PyObject* sequence = __pyx_t_1;
+    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
+    if (unlikely(size != 3)) {
+      if (size > 3) __Pyx_RaiseTooManyValuesError(3);
+      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
+      __PYX_ERR(0, 104, __pyx_L1_error)
+    }
+    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+    if (likely(PyTuple_CheckExact(sequence))) {
+      __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
+      __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); 
+      __pyx_t_4 = PyTuple_GET_ITEM(sequence, 2); 
+    } else {
+      __pyx_t_2 = PyList_GET_ITEM(sequence, 0); 
+      __pyx_t_3 = PyList_GET_ITEM(sequence, 1); 
+      __pyx_t_4 = PyList_GET_ITEM(sequence, 2); 
+    }
+    __Pyx_INCREF(__pyx_t_2);
+    __Pyx_INCREF(__pyx_t_3);
+    __Pyx_INCREF(__pyx_t_4);
+    #else
+    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 104, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_2);
+    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 104, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    __pyx_t_4 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 104, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
+    #endif
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  } else {
+    Py_ssize_t index = -1;
+    __pyx_t_5 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 104, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_5);
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __pyx_t_6 = Py_TYPE(__pyx_t_5)->tp_iternext;
+    index = 0; __pyx_t_2 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_2)) goto __pyx_L3_unpacking_failed;
+    __Pyx_GOTREF(__pyx_t_2);
+    index = 1; __pyx_t_3 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_3)) goto __pyx_L3_unpacking_failed;
+    __Pyx_GOTREF(__pyx_t_3);
+    index = 2; __pyx_t_4 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_4)) goto __pyx_L3_unpacking_failed;
+    __Pyx_GOTREF(__pyx_t_4);
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_5), 3) < 0) __PYX_ERR(0, 104, __pyx_L1_error)
+    __pyx_t_6 = NULL;
+    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+    goto __pyx_L4_unpacking_done;
+    __pyx_L3_unpacking_failed:;
+    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+    __pyx_t_6 = NULL;
+    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
+    __PYX_ERR(0, 104, __pyx_L1_error)
+    __pyx_L4_unpacking_done:;
+  }
+  __pyx_t_7 = __Pyx_PyInt_As_int(__pyx_t_2); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 104, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_8 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_8 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 104, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __pyx_t_9 = __Pyx_PyInt_As_int(__pyx_t_4); if (unlikely((__pyx_t_9 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 104, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __pyx_v_xs = __pyx_t_7;
+  __pyx_v_ys = __pyx_t_8;
+  __pyx_v_zs = __pyx_t_9;
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":105
+ * 
+ *     xs, ys, zs = flag_field.shape
+ *     boundary_index_list = []             # <<<<<<<<<<<<<<
+ *     num_directions = stencil.shape[0]
+ * 
+ */
+  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 105, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_boundary_index_list = ((PyObject*)__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":106
+ *     xs, ys, zs = flag_field.shape
+ *     boundary_index_list = []
+ *     num_directions = stencil.shape[0]             # <<<<<<<<<<<<<<
+ * 
+ *     for z in range(0, zs):
+ */
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_stencil), __pyx_n_s_shape); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 106, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_4 = __Pyx_GetItemInt(__pyx_t_1, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 106, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_9 = __Pyx_PyInt_As_int(__pyx_t_4); if (unlikely((__pyx_t_9 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 106, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __pyx_v_num_directions = __pyx_t_9;
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":108
+ *     num_directions = stencil.shape[0]
+ * 
+ *     for z in range(0, zs):             # <<<<<<<<<<<<<<
+ *         for y in range(0, ys):
+ *             for x in range(0, xs):
+ */
+  __pyx_t_9 = __pyx_v_zs;
+  __pyx_t_8 = __pyx_t_9;
+  for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_8; __pyx_t_7+=1) {
+    __pyx_v_z = __pyx_t_7;
+
+    /* "pystencils/boundaries/createindexlistcython.pyx":109
+ * 
+ *     for z in range(0, zs):
+ *         for y in range(0, ys):             # <<<<<<<<<<<<<<
+ *             for x in range(0, xs):
+ *                 if flag_field[x, y, z] & boundary_mask:
+ */
+    __pyx_t_10 = __pyx_v_ys;
+    __pyx_t_11 = __pyx_t_10;
+    for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) {
+      __pyx_v_y = __pyx_t_12;
+
+      /* "pystencils/boundaries/createindexlistcython.pyx":110
+ *     for z in range(0, zs):
+ *         for y in range(0, ys):
+ *             for x in range(0, xs):             # <<<<<<<<<<<<<<
+ *                 if flag_field[x, y, z] & boundary_mask:
+ *                     for dirIdx in range(num_directions):
+ */
+      __pyx_t_13 = __pyx_v_xs;
+      __pyx_t_14 = __pyx_t_13;
+      for (__pyx_t_15 = 0; __pyx_t_15 < __pyx_t_14; __pyx_t_15+=1) {
+        __pyx_v_x = __pyx_t_15;
+
+        /* "pystencils/boundaries/createindexlistcython.pyx":111
+ *         for y in range(0, ys):
+ *             for x in range(0, xs):
+ *                 if flag_field[x, y, z] & boundary_mask:             # <<<<<<<<<<<<<<
+ *                     for dirIdx in range(num_directions):
+ *                         dx = stencil[dirIdx,0]
+ */
+        __pyx_t_16 = __pyx_v_x;
+        __pyx_t_17 = __pyx_v_y;
+        __pyx_t_18 = __pyx_v_z;
+        __pyx_t_19 = (((*__Pyx_BufPtrFull3d(unsigned short *, __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.buf, __pyx_t_16, __pyx_pybuffernd_flag_field.diminfo[0].strides, __pyx_pybuffernd_flag_field.diminfo[0].suboffsets, __pyx_t_17, __pyx_pybuffernd_flag_field.diminfo[1].strides, __pyx_pybuffernd_flag_field.diminfo[1].suboffsets, __pyx_t_18, __pyx_pybuffernd_flag_field.diminfo[2].strides, __pyx_pybuffernd_flag_field.diminfo[2].suboffsets)) & __pyx_v_boundary_mask) != 0);
+        if (__pyx_t_19) {
+
+          /* "pystencils/boundaries/createindexlistcython.pyx":112
+ *             for x in range(0, xs):
+ *                 if flag_field[x, y, z] & boundary_mask:
+ *                     for dirIdx in range(num_directions):             # <<<<<<<<<<<<<<
+ *                         dx = stencil[dirIdx,0]
+ *                         dy = stencil[dirIdx,1]
+ */
+          __pyx_t_20 = __pyx_v_num_directions;
+          __pyx_t_21 = __pyx_t_20;
+          for (__pyx_t_22 = 0; __pyx_t_22 < __pyx_t_21; __pyx_t_22+=1) {
+            __pyx_v_dirIdx = __pyx_t_22;
+
+            /* "pystencils/boundaries/createindexlistcython.pyx":113
+ *                 if flag_field[x, y, z] & boundary_mask:
+ *                     for dirIdx in range(num_directions):
+ *                         dx = stencil[dirIdx,0]             # <<<<<<<<<<<<<<
+ *                         dy = stencil[dirIdx,1]
+ *                         dz = stencil[dirIdx,2]
+ */
+            __pyx_t_23 = __pyx_v_dirIdx;
+            __pyx_t_24 = 0;
+            __pyx_v_dx = (*__Pyx_BufPtrFull2d(int *, __pyx_pybuffernd_stencil.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_stencil.diminfo[0].strides, __pyx_pybuffernd_stencil.diminfo[0].suboffsets, __pyx_t_24, __pyx_pybuffernd_stencil.diminfo[1].strides, __pyx_pybuffernd_stencil.diminfo[1].suboffsets));
+
+            /* "pystencils/boundaries/createindexlistcython.pyx":114
+ *                     for dirIdx in range(num_directions):
+ *                         dx = stencil[dirIdx,0]
+ *                         dy = stencil[dirIdx,1]             # <<<<<<<<<<<<<<
+ *                         dz = stencil[dirIdx,2]
+ *                         if 0 <= x + dx < xs and 0 <= y + dy < ys and 0 <= z + dz < zs:
+ */
+            __pyx_t_25 = __pyx_v_dirIdx;
+            __pyx_t_26 = 1;
+            __pyx_v_dy = (*__Pyx_BufPtrFull2d(int *, __pyx_pybuffernd_stencil.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_stencil.diminfo[0].strides, __pyx_pybuffernd_stencil.diminfo[0].suboffsets, __pyx_t_26, __pyx_pybuffernd_stencil.diminfo[1].strides, __pyx_pybuffernd_stencil.diminfo[1].suboffsets));
+
+            /* "pystencils/boundaries/createindexlistcython.pyx":115
+ *                         dx = stencil[dirIdx,0]
+ *                         dy = stencil[dirIdx,1]
+ *                         dz = stencil[dirIdx,2]             # <<<<<<<<<<<<<<
+ *                         if 0 <= x + dx < xs and 0 <= y + dy < ys and 0 <= z + dz < zs:
+ *                             if flag_field[x + dx, y + dy, z + dz] & fluid_mask:
+ */
+            __pyx_t_27 = __pyx_v_dirIdx;
+            __pyx_t_28 = 2;
+            __pyx_v_dz = (*__Pyx_BufPtrFull2d(int *, __pyx_pybuffernd_stencil.rcbuffer->pybuffer.buf, __pyx_t_27, __pyx_pybuffernd_stencil.diminfo[0].strides, __pyx_pybuffernd_stencil.diminfo[0].suboffsets, __pyx_t_28, __pyx_pybuffernd_stencil.diminfo[1].strides, __pyx_pybuffernd_stencil.diminfo[1].suboffsets));
+
+            /* "pystencils/boundaries/createindexlistcython.pyx":116
+ *                         dy = stencil[dirIdx,1]
+ *                         dz = stencil[dirIdx,2]
+ *                         if 0 <= x + dx < xs and 0 <= y + dy < ys and 0 <= z + dz < zs:             # <<<<<<<<<<<<<<
+ *                             if flag_field[x + dx, y + dy, z + dz] & fluid_mask:
+ *                                 boundary_index_list.append((x,y,z, dirIdx))
+ */
+            __pyx_t_29 = (__pyx_v_x + __pyx_v_dx);
+            __pyx_t_30 = (0 <= __pyx_t_29);
+            if (__pyx_t_30) {
+              __pyx_t_30 = (__pyx_t_29 < __pyx_v_xs);
+            }
+            __pyx_t_31 = (__pyx_t_30 != 0);
+            if (__pyx_t_31) {
+            } else {
+              __pyx_t_19 = __pyx_t_31;
+              goto __pyx_L15_bool_binop_done;
+            }
+            __pyx_t_29 = (__pyx_v_y + __pyx_v_dy);
+            __pyx_t_31 = (0 <= __pyx_t_29);
+            if (__pyx_t_31) {
+              __pyx_t_31 = (__pyx_t_29 < __pyx_v_ys);
+            }
+            __pyx_t_30 = (__pyx_t_31 != 0);
+            if (__pyx_t_30) {
+            } else {
+              __pyx_t_19 = __pyx_t_30;
+              goto __pyx_L15_bool_binop_done;
+            }
+            __pyx_t_29 = (__pyx_v_z + __pyx_v_dz);
+            __pyx_t_30 = (0 <= __pyx_t_29);
+            if (__pyx_t_30) {
+              __pyx_t_30 = (__pyx_t_29 < __pyx_v_zs);
+            }
+            __pyx_t_31 = (__pyx_t_30 != 0);
+            __pyx_t_19 = __pyx_t_31;
+            __pyx_L15_bool_binop_done:;
+            if (__pyx_t_19) {
+
+              /* "pystencils/boundaries/createindexlistcython.pyx":117
+ *                         dz = stencil[dirIdx,2]
+ *                         if 0 <= x + dx < xs and 0 <= y + dy < ys and 0 <= z + dz < zs:
+ *                             if flag_field[x + dx, y + dy, z + dz] & fluid_mask:             # <<<<<<<<<<<<<<
+ *                                 boundary_index_list.append((x,y,z, dirIdx))
+ *                                 if single_link:
+ */
+              __pyx_t_32 = (__pyx_v_x + __pyx_v_dx);
+              __pyx_t_33 = (__pyx_v_y + __pyx_v_dy);
+              __pyx_t_34 = (__pyx_v_z + __pyx_v_dz);
+              __pyx_t_19 = (((*__Pyx_BufPtrFull3d(unsigned short *, __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.buf, __pyx_t_32, __pyx_pybuffernd_flag_field.diminfo[0].strides, __pyx_pybuffernd_flag_field.diminfo[0].suboffsets, __pyx_t_33, __pyx_pybuffernd_flag_field.diminfo[1].strides, __pyx_pybuffernd_flag_field.diminfo[1].suboffsets, __pyx_t_34, __pyx_pybuffernd_flag_field.diminfo[2].strides, __pyx_pybuffernd_flag_field.diminfo[2].suboffsets)) & __pyx_v_fluid_mask) != 0);
+              if (__pyx_t_19) {
+
+                /* "pystencils/boundaries/createindexlistcython.pyx":118
+ *                         if 0 <= x + dx < xs and 0 <= y + dy < ys and 0 <= z + dz < zs:
+ *                             if flag_field[x + dx, y + dy, z + dz] & fluid_mask:
+ *                                 boundary_index_list.append((x,y,z, dirIdx))             # <<<<<<<<<<<<<<
+ *                                 if single_link:
+ *                                     break
+ */
+                __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_x); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 118, __pyx_L1_error)
+                __Pyx_GOTREF(__pyx_t_4);
+                __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_y); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 118, __pyx_L1_error)
+                __Pyx_GOTREF(__pyx_t_1);
+                __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_z); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 118, __pyx_L1_error)
+                __Pyx_GOTREF(__pyx_t_3);
+                __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_dirIdx); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 118, __pyx_L1_error)
+                __Pyx_GOTREF(__pyx_t_2);
+                __pyx_t_5 = PyTuple_New(4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 118, __pyx_L1_error)
+                __Pyx_GOTREF(__pyx_t_5);
+                __Pyx_GIVEREF(__pyx_t_4);
+                PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4);
+                __Pyx_GIVEREF(__pyx_t_1);
+                PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_1);
+                __Pyx_GIVEREF(__pyx_t_3);
+                PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_t_3);
+                __Pyx_GIVEREF(__pyx_t_2);
+                PyTuple_SET_ITEM(__pyx_t_5, 3, __pyx_t_2);
+                __pyx_t_4 = 0;
+                __pyx_t_1 = 0;
+                __pyx_t_3 = 0;
+                __pyx_t_2 = 0;
+                __pyx_t_35 = __Pyx_PyList_Append(__pyx_v_boundary_index_list, __pyx_t_5); if (unlikely(__pyx_t_35 == ((int)-1))) __PYX_ERR(0, 118, __pyx_L1_error)
+                __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+                /* "pystencils/boundaries/createindexlistcython.pyx":119
+ *                             if flag_field[x + dx, y + dy, z + dz] & fluid_mask:
+ *                                 boundary_index_list.append((x,y,z, dirIdx))
+ *                                 if single_link:             # <<<<<<<<<<<<<<
+ *                                     break
+ *     return boundary_index_list
+ */
+                __pyx_t_19 = (__pyx_v_single_link != 0);
+                if (__pyx_t_19) {
+
+                  /* "pystencils/boundaries/createindexlistcython.pyx":120
+ *                                 boundary_index_list.append((x,y,z, dirIdx))
+ *                                 if single_link:
+ *                                     break             # <<<<<<<<<<<<<<
+ *     return boundary_index_list
+ */
+                  goto __pyx_L13_break;
+
+                  /* "pystencils/boundaries/createindexlistcython.pyx":119
+ *                             if flag_field[x + dx, y + dy, z + dz] & fluid_mask:
+ *                                 boundary_index_list.append((x,y,z, dirIdx))
+ *                                 if single_link:             # <<<<<<<<<<<<<<
+ *                                     break
+ *     return boundary_index_list
+ */
+                }
+
+                /* "pystencils/boundaries/createindexlistcython.pyx":117
+ *                         dz = stencil[dirIdx,2]
+ *                         if 0 <= x + dx < xs and 0 <= y + dy < ys and 0 <= z + dz < zs:
+ *                             if flag_field[x + dx, y + dy, z + dz] & fluid_mask:             # <<<<<<<<<<<<<<
+ *                                 boundary_index_list.append((x,y,z, dirIdx))
+ *                                 if single_link:
+ */
+              }
+
+              /* "pystencils/boundaries/createindexlistcython.pyx":116
+ *                         dy = stencil[dirIdx,1]
+ *                         dz = stencil[dirIdx,2]
+ *                         if 0 <= x + dx < xs and 0 <= y + dy < ys and 0 <= z + dz < zs:             # <<<<<<<<<<<<<<
+ *                             if flag_field[x + dx, y + dy, z + dz] & fluid_mask:
+ *                                 boundary_index_list.append((x,y,z, dirIdx))
+ */
+            }
+          }
+          __pyx_L13_break:;
+
+          /* "pystencils/boundaries/createindexlistcython.pyx":111
+ *         for y in range(0, ys):
+ *             for x in range(0, xs):
+ *                 if flag_field[x, y, z] & boundary_mask:             # <<<<<<<<<<<<<<
+ *                     for dirIdx in range(num_directions):
+ *                         dx = stencil[dirIdx,0]
+ */
+        }
+      }
+    }
+  }
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":121
+ *                                 if single_link:
+ *                                     break
+ *     return boundary_index_list             # <<<<<<<<<<<<<<
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(__pyx_v_boundary_index_list);
+  __pyx_r = __pyx_v_boundary_index_list;
+  goto __pyx_L0;
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":98
+ * @cython.boundscheck(False) # turn off bounds-checking for entire function
+ * @cython.wraparound(False)  # turn off negative index wrapping for entire function
+ * def create_boundary_cell_index_list_3d(object[IntegerType, ndim=3] flag_field,             # <<<<<<<<<<<<<<
+ *                                        IntegerType boundary_mask, IntegerType fluid_mask,
+ *                                        object[int, ndim=2] stencil, int single_link):
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_XDECREF(__pyx_t_5);
+  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
+    __Pyx_PyThreadState_declare
+    __Pyx_PyThreadState_assign
+    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
+    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_flag_field.rcbuffer->pybuffer);
+    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_stencil.rcbuffer->pybuffer);
+  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
+  __Pyx_AddTraceback("pystencils.boundaries.createindexlistcython.create_boundary_cell_index_list_3d", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  goto __pyx_L2;
+  __pyx_L0:;
+  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_flag_field.rcbuffer->pybuffer);
+  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_stencil.rcbuffer->pybuffer);
+  __pyx_L2:;
+  __Pyx_XDECREF(__pyx_v_boundary_index_list);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static PyObject *__pyx_fuse_5__pyx_pw_10pystencils_10boundaries_21createindexlistcython_67create_boundary_cell_index_list_3d(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyMethodDef __pyx_fuse_5__pyx_mdef_10pystencils_10boundaries_21createindexlistcython_67create_boundary_cell_index_list_3d = {"__pyx_fuse_5create_boundary_cell_index_list_3d", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_fuse_5__pyx_pw_10pystencils_10boundaries_21createindexlistcython_67create_boundary_cell_index_list_3d, METH_VARARGS|METH_KEYWORDS, 0};
+static PyObject *__pyx_fuse_5__pyx_pw_10pystencils_10boundaries_21createindexlistcython_67create_boundary_cell_index_list_3d(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_flag_field = 0;
+  unsigned int __pyx_v_boundary_mask;
+  unsigned int __pyx_v_fluid_mask;
+  PyObject *__pyx_v_stencil = 0;
+  int __pyx_v_single_link;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("create_boundary_cell_index_list_3d (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_flag_field,&__pyx_n_s_boundary_mask,&__pyx_n_s_fluid_mask,&__pyx_n_s_stencil,&__pyx_n_s_single_link,0};
+    PyObject* values[5] = {0,0,0,0,0};
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+        CYTHON_FALLTHROUGH;
+        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
+        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_flag_field)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
+        case  1:
+        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_boundary_mask)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_cell_index_list_3d", 1, 5, 5, 1); __PYX_ERR(0, 98, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  2:
+        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_fluid_mask)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_cell_index_list_3d", 1, 5, 5, 2); __PYX_ERR(0, 98, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  3:
+        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_stencil)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_cell_index_list_3d", 1, 5, 5, 3); __PYX_ERR(0, 98, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  4:
+        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_single_link)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_cell_index_list_3d", 1, 5, 5, 4); __PYX_ERR(0, 98, __pyx_L3_error)
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "create_boundary_cell_index_list_3d") < 0)) __PYX_ERR(0, 98, __pyx_L3_error)
+      }
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 5) {
+      goto __pyx_L5_argtuple_error;
+    } else {
+      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+      values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+      values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+    }
+    __pyx_v_flag_field = ((PyObject *)values[0]);
+    __pyx_v_boundary_mask = __Pyx_PyInt_As_unsigned_int(values[1]); if (unlikely((__pyx_v_boundary_mask == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(0, 99, __pyx_L3_error)
+    __pyx_v_fluid_mask = __Pyx_PyInt_As_unsigned_int(values[2]); if (unlikely((__pyx_v_fluid_mask == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(0, 99, __pyx_L3_error)
+    __pyx_v_stencil = ((PyObject *)values[3]);
+    __pyx_v_single_link = __Pyx_PyInt_As_int(values[4]); if (unlikely((__pyx_v_single_link == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 100, __pyx_L3_error)
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("create_boundary_cell_index_list_3d", 1, 5, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 98, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("pystencils.boundaries.createindexlistcython.create_boundary_cell_index_list_3d", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_10pystencils_10boundaries_21createindexlistcython_66create_boundary_cell_index_list_3d(__pyx_self, __pyx_v_flag_field, __pyx_v_boundary_mask, __pyx_v_fluid_mask, __pyx_v_stencil, __pyx_v_single_link);
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_10pystencils_10boundaries_21createindexlistcython_66create_boundary_cell_index_list_3d(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_flag_field, unsigned int __pyx_v_boundary_mask, unsigned int __pyx_v_fluid_mask, PyObject *__pyx_v_stencil, int __pyx_v_single_link) {
+  int __pyx_v_xs;
+  int __pyx_v_ys;
+  int __pyx_v_zs;
+  int __pyx_v_x;
+  int __pyx_v_y;
+  int __pyx_v_z;
+  int __pyx_v_dirIdx;
+  int __pyx_v_num_directions;
+  int __pyx_v_dx;
+  int __pyx_v_dy;
+  int __pyx_v_dz;
+  PyObject *__pyx_v_boundary_index_list = NULL;
+  __Pyx_LocalBuf_ND __pyx_pybuffernd_flag_field;
+  __Pyx_Buffer __pyx_pybuffer_flag_field;
+  __Pyx_LocalBuf_ND __pyx_pybuffernd_stencil;
+  __Pyx_Buffer __pyx_pybuffer_stencil;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
+  PyObject *__pyx_t_5 = NULL;
+  PyObject *(*__pyx_t_6)(PyObject *);
+  int __pyx_t_7;
+  int __pyx_t_8;
+  int __pyx_t_9;
+  int __pyx_t_10;
+  int __pyx_t_11;
+  int __pyx_t_12;
+  int __pyx_t_13;
+  int __pyx_t_14;
+  int __pyx_t_15;
+  Py_ssize_t __pyx_t_16;
+  Py_ssize_t __pyx_t_17;
+  Py_ssize_t __pyx_t_18;
+  int __pyx_t_19;
+  int __pyx_t_20;
+  int __pyx_t_21;
+  int __pyx_t_22;
+  Py_ssize_t __pyx_t_23;
+  Py_ssize_t __pyx_t_24;
+  Py_ssize_t __pyx_t_25;
+  Py_ssize_t __pyx_t_26;
+  Py_ssize_t __pyx_t_27;
+  Py_ssize_t __pyx_t_28;
+  int __pyx_t_29;
+  int __pyx_t_30;
+  int __pyx_t_31;
+  Py_ssize_t __pyx_t_32;
+  Py_ssize_t __pyx_t_33;
+  Py_ssize_t __pyx_t_34;
+  int __pyx_t_35;
+  __Pyx_RefNannySetupContext("__pyx_fuse_5create_boundary_cell_index_list_3d", 0);
+  __pyx_pybuffer_flag_field.pybuffer.buf = NULL;
+  __pyx_pybuffer_flag_field.refcount = 0;
+  __pyx_pybuffernd_flag_field.data = NULL;
+  __pyx_pybuffernd_flag_field.rcbuffer = &__pyx_pybuffer_flag_field;
+  __pyx_pybuffer_stencil.pybuffer.buf = NULL;
+  __pyx_pybuffer_stencil.refcount = 0;
+  __pyx_pybuffernd_stencil.data = NULL;
+  __pyx_pybuffernd_stencil.rcbuffer = &__pyx_pybuffer_stencil;
+  {
+    __Pyx_BufFmt_StackElem __pyx_stack[1];
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_flag_field.rcbuffer->pybuffer, (PyObject*)__pyx_v_flag_field, &__Pyx_TypeInfo_unsigned_int, PyBUF_FORMAT| PyBUF_INDIRECT, 3, 0, __pyx_stack) == -1)) __PYX_ERR(0, 98, __pyx_L1_error)
+  }
+  __pyx_pybuffernd_flag_field.diminfo[0].strides = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_flag_field.diminfo[0].shape = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_flag_field.diminfo[0].suboffsets = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.suboffsets[0]; __pyx_pybuffernd_flag_field.diminfo[1].strides = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_flag_field.diminfo[1].shape = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_flag_field.diminfo[1].suboffsets = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.suboffsets[1]; __pyx_pybuffernd_flag_field.diminfo[2].strides = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_flag_field.diminfo[2].shape = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.shape[2]; __pyx_pybuffernd_flag_field.diminfo[2].suboffsets = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.suboffsets[2];
+  {
+    __Pyx_BufFmt_StackElem __pyx_stack[1];
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_stencil.rcbuffer->pybuffer, (PyObject*)__pyx_v_stencil, &__Pyx_TypeInfo_int, PyBUF_FORMAT| PyBUF_INDIRECT, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 98, __pyx_L1_error)
+  }
+  __pyx_pybuffernd_stencil.diminfo[0].strides = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_stencil.diminfo[0].shape = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_stencil.diminfo[0].suboffsets = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.suboffsets[0]; __pyx_pybuffernd_stencil.diminfo[1].strides = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_stencil.diminfo[1].shape = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_stencil.diminfo[1].suboffsets = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.suboffsets[1];
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":104
+ *     cdef int dirIdx, num_directions, dx, dy, dz
+ * 
+ *     xs, ys, zs = flag_field.shape             # <<<<<<<<<<<<<<
+ *     boundary_index_list = []
+ *     num_directions = stencil.shape[0]
+ */
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_flag_field), __pyx_n_s_shape); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 104, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) {
+    PyObject* sequence = __pyx_t_1;
+    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
+    if (unlikely(size != 3)) {
+      if (size > 3) __Pyx_RaiseTooManyValuesError(3);
+      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
+      __PYX_ERR(0, 104, __pyx_L1_error)
+    }
+    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+    if (likely(PyTuple_CheckExact(sequence))) {
+      __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
+      __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); 
+      __pyx_t_4 = PyTuple_GET_ITEM(sequence, 2); 
+    } else {
+      __pyx_t_2 = PyList_GET_ITEM(sequence, 0); 
+      __pyx_t_3 = PyList_GET_ITEM(sequence, 1); 
+      __pyx_t_4 = PyList_GET_ITEM(sequence, 2); 
+    }
+    __Pyx_INCREF(__pyx_t_2);
+    __Pyx_INCREF(__pyx_t_3);
+    __Pyx_INCREF(__pyx_t_4);
+    #else
+    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 104, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_2);
+    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 104, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    __pyx_t_4 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 104, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
+    #endif
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  } else {
+    Py_ssize_t index = -1;
+    __pyx_t_5 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 104, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_5);
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __pyx_t_6 = Py_TYPE(__pyx_t_5)->tp_iternext;
+    index = 0; __pyx_t_2 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_2)) goto __pyx_L3_unpacking_failed;
+    __Pyx_GOTREF(__pyx_t_2);
+    index = 1; __pyx_t_3 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_3)) goto __pyx_L3_unpacking_failed;
+    __Pyx_GOTREF(__pyx_t_3);
+    index = 2; __pyx_t_4 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_4)) goto __pyx_L3_unpacking_failed;
+    __Pyx_GOTREF(__pyx_t_4);
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_5), 3) < 0) __PYX_ERR(0, 104, __pyx_L1_error)
+    __pyx_t_6 = NULL;
+    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+    goto __pyx_L4_unpacking_done;
+    __pyx_L3_unpacking_failed:;
+    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+    __pyx_t_6 = NULL;
+    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
+    __PYX_ERR(0, 104, __pyx_L1_error)
+    __pyx_L4_unpacking_done:;
+  }
+  __pyx_t_7 = __Pyx_PyInt_As_int(__pyx_t_2); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 104, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_8 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_8 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 104, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __pyx_t_9 = __Pyx_PyInt_As_int(__pyx_t_4); if (unlikely((__pyx_t_9 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 104, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __pyx_v_xs = __pyx_t_7;
+  __pyx_v_ys = __pyx_t_8;
+  __pyx_v_zs = __pyx_t_9;
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":105
+ * 
+ *     xs, ys, zs = flag_field.shape
+ *     boundary_index_list = []             # <<<<<<<<<<<<<<
+ *     num_directions = stencil.shape[0]
+ * 
+ */
+  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 105, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_boundary_index_list = ((PyObject*)__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":106
+ *     xs, ys, zs = flag_field.shape
+ *     boundary_index_list = []
+ *     num_directions = stencil.shape[0]             # <<<<<<<<<<<<<<
+ * 
+ *     for z in range(0, zs):
+ */
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_stencil), __pyx_n_s_shape); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 106, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_4 = __Pyx_GetItemInt(__pyx_t_1, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 106, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_9 = __Pyx_PyInt_As_int(__pyx_t_4); if (unlikely((__pyx_t_9 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 106, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __pyx_v_num_directions = __pyx_t_9;
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":108
+ *     num_directions = stencil.shape[0]
+ * 
+ *     for z in range(0, zs):             # <<<<<<<<<<<<<<
+ *         for y in range(0, ys):
+ *             for x in range(0, xs):
+ */
+  __pyx_t_9 = __pyx_v_zs;
+  __pyx_t_8 = __pyx_t_9;
+  for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_8; __pyx_t_7+=1) {
+    __pyx_v_z = __pyx_t_7;
+
+    /* "pystencils/boundaries/createindexlistcython.pyx":109
+ * 
+ *     for z in range(0, zs):
+ *         for y in range(0, ys):             # <<<<<<<<<<<<<<
+ *             for x in range(0, xs):
+ *                 if flag_field[x, y, z] & boundary_mask:
+ */
+    __pyx_t_10 = __pyx_v_ys;
+    __pyx_t_11 = __pyx_t_10;
+    for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) {
+      __pyx_v_y = __pyx_t_12;
+
+      /* "pystencils/boundaries/createindexlistcython.pyx":110
+ *     for z in range(0, zs):
+ *         for y in range(0, ys):
+ *             for x in range(0, xs):             # <<<<<<<<<<<<<<
+ *                 if flag_field[x, y, z] & boundary_mask:
+ *                     for dirIdx in range(num_directions):
+ */
+      __pyx_t_13 = __pyx_v_xs;
+      __pyx_t_14 = __pyx_t_13;
+      for (__pyx_t_15 = 0; __pyx_t_15 < __pyx_t_14; __pyx_t_15+=1) {
+        __pyx_v_x = __pyx_t_15;
+
+        /* "pystencils/boundaries/createindexlistcython.pyx":111
+ *         for y in range(0, ys):
+ *             for x in range(0, xs):
+ *                 if flag_field[x, y, z] & boundary_mask:             # <<<<<<<<<<<<<<
+ *                     for dirIdx in range(num_directions):
+ *                         dx = stencil[dirIdx,0]
+ */
+        __pyx_t_16 = __pyx_v_x;
+        __pyx_t_17 = __pyx_v_y;
+        __pyx_t_18 = __pyx_v_z;
+        __pyx_t_19 = (((*__Pyx_BufPtrFull3d(unsigned int *, __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.buf, __pyx_t_16, __pyx_pybuffernd_flag_field.diminfo[0].strides, __pyx_pybuffernd_flag_field.diminfo[0].suboffsets, __pyx_t_17, __pyx_pybuffernd_flag_field.diminfo[1].strides, __pyx_pybuffernd_flag_field.diminfo[1].suboffsets, __pyx_t_18, __pyx_pybuffernd_flag_field.diminfo[2].strides, __pyx_pybuffernd_flag_field.diminfo[2].suboffsets)) & __pyx_v_boundary_mask) != 0);
+        if (__pyx_t_19) {
+
+          /* "pystencils/boundaries/createindexlistcython.pyx":112
+ *             for x in range(0, xs):
+ *                 if flag_field[x, y, z] & boundary_mask:
+ *                     for dirIdx in range(num_directions):             # <<<<<<<<<<<<<<
+ *                         dx = stencil[dirIdx,0]
+ *                         dy = stencil[dirIdx,1]
+ */
+          __pyx_t_20 = __pyx_v_num_directions;
+          __pyx_t_21 = __pyx_t_20;
+          for (__pyx_t_22 = 0; __pyx_t_22 < __pyx_t_21; __pyx_t_22+=1) {
+            __pyx_v_dirIdx = __pyx_t_22;
+
+            /* "pystencils/boundaries/createindexlistcython.pyx":113
+ *                 if flag_field[x, y, z] & boundary_mask:
+ *                     for dirIdx in range(num_directions):
+ *                         dx = stencil[dirIdx,0]             # <<<<<<<<<<<<<<
+ *                         dy = stencil[dirIdx,1]
+ *                         dz = stencil[dirIdx,2]
+ */
+            __pyx_t_23 = __pyx_v_dirIdx;
+            __pyx_t_24 = 0;
+            __pyx_v_dx = (*__Pyx_BufPtrFull2d(int *, __pyx_pybuffernd_stencil.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_stencil.diminfo[0].strides, __pyx_pybuffernd_stencil.diminfo[0].suboffsets, __pyx_t_24, __pyx_pybuffernd_stencil.diminfo[1].strides, __pyx_pybuffernd_stencil.diminfo[1].suboffsets));
+
+            /* "pystencils/boundaries/createindexlistcython.pyx":114
+ *                     for dirIdx in range(num_directions):
+ *                         dx = stencil[dirIdx,0]
+ *                         dy = stencil[dirIdx,1]             # <<<<<<<<<<<<<<
+ *                         dz = stencil[dirIdx,2]
+ *                         if 0 <= x + dx < xs and 0 <= y + dy < ys and 0 <= z + dz < zs:
+ */
+            __pyx_t_25 = __pyx_v_dirIdx;
+            __pyx_t_26 = 1;
+            __pyx_v_dy = (*__Pyx_BufPtrFull2d(int *, __pyx_pybuffernd_stencil.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_stencil.diminfo[0].strides, __pyx_pybuffernd_stencil.diminfo[0].suboffsets, __pyx_t_26, __pyx_pybuffernd_stencil.diminfo[1].strides, __pyx_pybuffernd_stencil.diminfo[1].suboffsets));
+
+            /* "pystencils/boundaries/createindexlistcython.pyx":115
+ *                         dx = stencil[dirIdx,0]
+ *                         dy = stencil[dirIdx,1]
+ *                         dz = stencil[dirIdx,2]             # <<<<<<<<<<<<<<
+ *                         if 0 <= x + dx < xs and 0 <= y + dy < ys and 0 <= z + dz < zs:
+ *                             if flag_field[x + dx, y + dy, z + dz] & fluid_mask:
+ */
+            __pyx_t_27 = __pyx_v_dirIdx;
+            __pyx_t_28 = 2;
+            __pyx_v_dz = (*__Pyx_BufPtrFull2d(int *, __pyx_pybuffernd_stencil.rcbuffer->pybuffer.buf, __pyx_t_27, __pyx_pybuffernd_stencil.diminfo[0].strides, __pyx_pybuffernd_stencil.diminfo[0].suboffsets, __pyx_t_28, __pyx_pybuffernd_stencil.diminfo[1].strides, __pyx_pybuffernd_stencil.diminfo[1].suboffsets));
+
+            /* "pystencils/boundaries/createindexlistcython.pyx":116
+ *                         dy = stencil[dirIdx,1]
+ *                         dz = stencil[dirIdx,2]
+ *                         if 0 <= x + dx < xs and 0 <= y + dy < ys and 0 <= z + dz < zs:             # <<<<<<<<<<<<<<
+ *                             if flag_field[x + dx, y + dy, z + dz] & fluid_mask:
+ *                                 boundary_index_list.append((x,y,z, dirIdx))
+ */
+            __pyx_t_29 = (__pyx_v_x + __pyx_v_dx);
+            __pyx_t_30 = (0 <= __pyx_t_29);
+            if (__pyx_t_30) {
+              __pyx_t_30 = (__pyx_t_29 < __pyx_v_xs);
+            }
+            __pyx_t_31 = (__pyx_t_30 != 0);
+            if (__pyx_t_31) {
+            } else {
+              __pyx_t_19 = __pyx_t_31;
+              goto __pyx_L15_bool_binop_done;
+            }
+            __pyx_t_29 = (__pyx_v_y + __pyx_v_dy);
+            __pyx_t_31 = (0 <= __pyx_t_29);
+            if (__pyx_t_31) {
+              __pyx_t_31 = (__pyx_t_29 < __pyx_v_ys);
+            }
+            __pyx_t_30 = (__pyx_t_31 != 0);
+            if (__pyx_t_30) {
+            } else {
+              __pyx_t_19 = __pyx_t_30;
+              goto __pyx_L15_bool_binop_done;
+            }
+            __pyx_t_29 = (__pyx_v_z + __pyx_v_dz);
+            __pyx_t_30 = (0 <= __pyx_t_29);
+            if (__pyx_t_30) {
+              __pyx_t_30 = (__pyx_t_29 < __pyx_v_zs);
+            }
+            __pyx_t_31 = (__pyx_t_30 != 0);
+            __pyx_t_19 = __pyx_t_31;
+            __pyx_L15_bool_binop_done:;
+            if (__pyx_t_19) {
+
+              /* "pystencils/boundaries/createindexlistcython.pyx":117
+ *                         dz = stencil[dirIdx,2]
+ *                         if 0 <= x + dx < xs and 0 <= y + dy < ys and 0 <= z + dz < zs:
+ *                             if flag_field[x + dx, y + dy, z + dz] & fluid_mask:             # <<<<<<<<<<<<<<
+ *                                 boundary_index_list.append((x,y,z, dirIdx))
+ *                                 if single_link:
+ */
+              __pyx_t_32 = (__pyx_v_x + __pyx_v_dx);
+              __pyx_t_33 = (__pyx_v_y + __pyx_v_dy);
+              __pyx_t_34 = (__pyx_v_z + __pyx_v_dz);
+              __pyx_t_19 = (((*__Pyx_BufPtrFull3d(unsigned int *, __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.buf, __pyx_t_32, __pyx_pybuffernd_flag_field.diminfo[0].strides, __pyx_pybuffernd_flag_field.diminfo[0].suboffsets, __pyx_t_33, __pyx_pybuffernd_flag_field.diminfo[1].strides, __pyx_pybuffernd_flag_field.diminfo[1].suboffsets, __pyx_t_34, __pyx_pybuffernd_flag_field.diminfo[2].strides, __pyx_pybuffernd_flag_field.diminfo[2].suboffsets)) & __pyx_v_fluid_mask) != 0);
+              if (__pyx_t_19) {
+
+                /* "pystencils/boundaries/createindexlistcython.pyx":118
+ *                         if 0 <= x + dx < xs and 0 <= y + dy < ys and 0 <= z + dz < zs:
+ *                             if flag_field[x + dx, y + dy, z + dz] & fluid_mask:
+ *                                 boundary_index_list.append((x,y,z, dirIdx))             # <<<<<<<<<<<<<<
+ *                                 if single_link:
+ *                                     break
+ */
+                __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_x); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 118, __pyx_L1_error)
+                __Pyx_GOTREF(__pyx_t_4);
+                __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_y); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 118, __pyx_L1_error)
+                __Pyx_GOTREF(__pyx_t_1);
+                __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_z); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 118, __pyx_L1_error)
+                __Pyx_GOTREF(__pyx_t_3);
+                __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_dirIdx); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 118, __pyx_L1_error)
+                __Pyx_GOTREF(__pyx_t_2);
+                __pyx_t_5 = PyTuple_New(4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 118, __pyx_L1_error)
+                __Pyx_GOTREF(__pyx_t_5);
+                __Pyx_GIVEREF(__pyx_t_4);
+                PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4);
+                __Pyx_GIVEREF(__pyx_t_1);
+                PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_1);
+                __Pyx_GIVEREF(__pyx_t_3);
+                PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_t_3);
+                __Pyx_GIVEREF(__pyx_t_2);
+                PyTuple_SET_ITEM(__pyx_t_5, 3, __pyx_t_2);
+                __pyx_t_4 = 0;
+                __pyx_t_1 = 0;
+                __pyx_t_3 = 0;
+                __pyx_t_2 = 0;
+                __pyx_t_35 = __Pyx_PyList_Append(__pyx_v_boundary_index_list, __pyx_t_5); if (unlikely(__pyx_t_35 == ((int)-1))) __PYX_ERR(0, 118, __pyx_L1_error)
+                __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+                /* "pystencils/boundaries/createindexlistcython.pyx":119
+ *                             if flag_field[x + dx, y + dy, z + dz] & fluid_mask:
+ *                                 boundary_index_list.append((x,y,z, dirIdx))
+ *                                 if single_link:             # <<<<<<<<<<<<<<
+ *                                     break
+ *     return boundary_index_list
+ */
+                __pyx_t_19 = (__pyx_v_single_link != 0);
+                if (__pyx_t_19) {
+
+                  /* "pystencils/boundaries/createindexlistcython.pyx":120
+ *                                 boundary_index_list.append((x,y,z, dirIdx))
+ *                                 if single_link:
+ *                                     break             # <<<<<<<<<<<<<<
+ *     return boundary_index_list
+ */
+                  goto __pyx_L13_break;
+
+                  /* "pystencils/boundaries/createindexlistcython.pyx":119
+ *                             if flag_field[x + dx, y + dy, z + dz] & fluid_mask:
+ *                                 boundary_index_list.append((x,y,z, dirIdx))
+ *                                 if single_link:             # <<<<<<<<<<<<<<
+ *                                     break
+ *     return boundary_index_list
+ */
+                }
+
+                /* "pystencils/boundaries/createindexlistcython.pyx":117
+ *                         dz = stencil[dirIdx,2]
+ *                         if 0 <= x + dx < xs and 0 <= y + dy < ys and 0 <= z + dz < zs:
+ *                             if flag_field[x + dx, y + dy, z + dz] & fluid_mask:             # <<<<<<<<<<<<<<
+ *                                 boundary_index_list.append((x,y,z, dirIdx))
+ *                                 if single_link:
+ */
+              }
+
+              /* "pystencils/boundaries/createindexlistcython.pyx":116
+ *                         dy = stencil[dirIdx,1]
+ *                         dz = stencil[dirIdx,2]
+ *                         if 0 <= x + dx < xs and 0 <= y + dy < ys and 0 <= z + dz < zs:             # <<<<<<<<<<<<<<
+ *                             if flag_field[x + dx, y + dy, z + dz] & fluid_mask:
+ *                                 boundary_index_list.append((x,y,z, dirIdx))
+ */
+            }
+          }
+          __pyx_L13_break:;
+
+          /* "pystencils/boundaries/createindexlistcython.pyx":111
+ *         for y in range(0, ys):
+ *             for x in range(0, xs):
+ *                 if flag_field[x, y, z] & boundary_mask:             # <<<<<<<<<<<<<<
+ *                     for dirIdx in range(num_directions):
+ *                         dx = stencil[dirIdx,0]
+ */
+        }
+      }
+    }
+  }
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":121
+ *                                 if single_link:
+ *                                     break
+ *     return boundary_index_list             # <<<<<<<<<<<<<<
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(__pyx_v_boundary_index_list);
+  __pyx_r = __pyx_v_boundary_index_list;
+  goto __pyx_L0;
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":98
+ * @cython.boundscheck(False) # turn off bounds-checking for entire function
+ * @cython.wraparound(False)  # turn off negative index wrapping for entire function
+ * def create_boundary_cell_index_list_3d(object[IntegerType, ndim=3] flag_field,             # <<<<<<<<<<<<<<
+ *                                        IntegerType boundary_mask, IntegerType fluid_mask,
+ *                                        object[int, ndim=2] stencil, int single_link):
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_XDECREF(__pyx_t_5);
+  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
+    __Pyx_PyThreadState_declare
+    __Pyx_PyThreadState_assign
+    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
+    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_flag_field.rcbuffer->pybuffer);
+    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_stencil.rcbuffer->pybuffer);
+  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
+  __Pyx_AddTraceback("pystencils.boundaries.createindexlistcython.create_boundary_cell_index_list_3d", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  goto __pyx_L2;
+  __pyx_L0:;
+  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_flag_field.rcbuffer->pybuffer);
+  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_stencil.rcbuffer->pybuffer);
+  __pyx_L2:;
+  __Pyx_XDECREF(__pyx_v_boundary_index_list);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static PyObject *__pyx_fuse_6__pyx_pw_10pystencils_10boundaries_21createindexlistcython_69create_boundary_cell_index_list_3d(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyMethodDef __pyx_fuse_6__pyx_mdef_10pystencils_10boundaries_21createindexlistcython_69create_boundary_cell_index_list_3d = {"__pyx_fuse_6create_boundary_cell_index_list_3d", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_fuse_6__pyx_pw_10pystencils_10boundaries_21createindexlistcython_69create_boundary_cell_index_list_3d, METH_VARARGS|METH_KEYWORDS, 0};
+static PyObject *__pyx_fuse_6__pyx_pw_10pystencils_10boundaries_21createindexlistcython_69create_boundary_cell_index_list_3d(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_flag_field = 0;
+  unsigned long __pyx_v_boundary_mask;
+  unsigned long __pyx_v_fluid_mask;
+  PyObject *__pyx_v_stencil = 0;
+  int __pyx_v_single_link;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("create_boundary_cell_index_list_3d (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_flag_field,&__pyx_n_s_boundary_mask,&__pyx_n_s_fluid_mask,&__pyx_n_s_stencil,&__pyx_n_s_single_link,0};
+    PyObject* values[5] = {0,0,0,0,0};
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+        CYTHON_FALLTHROUGH;
+        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
+        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_flag_field)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
+        case  1:
+        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_boundary_mask)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_cell_index_list_3d", 1, 5, 5, 1); __PYX_ERR(0, 98, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  2:
+        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_fluid_mask)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_cell_index_list_3d", 1, 5, 5, 2); __PYX_ERR(0, 98, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  3:
+        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_stencil)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_cell_index_list_3d", 1, 5, 5, 3); __PYX_ERR(0, 98, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  4:
+        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_single_link)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("create_boundary_cell_index_list_3d", 1, 5, 5, 4); __PYX_ERR(0, 98, __pyx_L3_error)
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "create_boundary_cell_index_list_3d") < 0)) __PYX_ERR(0, 98, __pyx_L3_error)
+      }
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 5) {
+      goto __pyx_L5_argtuple_error;
+    } else {
+      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+      values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+      values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+    }
+    __pyx_v_flag_field = ((PyObject *)values[0]);
+    __pyx_v_boundary_mask = __Pyx_PyInt_As_unsigned_long(values[1]); if (unlikely((__pyx_v_boundary_mask == (unsigned long)-1) && PyErr_Occurred())) __PYX_ERR(0, 99, __pyx_L3_error)
+    __pyx_v_fluid_mask = __Pyx_PyInt_As_unsigned_long(values[2]); if (unlikely((__pyx_v_fluid_mask == (unsigned long)-1) && PyErr_Occurred())) __PYX_ERR(0, 99, __pyx_L3_error)
+    __pyx_v_stencil = ((PyObject *)values[3]);
+    __pyx_v_single_link = __Pyx_PyInt_As_int(values[4]); if (unlikely((__pyx_v_single_link == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 100, __pyx_L3_error)
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("create_boundary_cell_index_list_3d", 1, 5, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 98, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("pystencils.boundaries.createindexlistcython.create_boundary_cell_index_list_3d", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_10pystencils_10boundaries_21createindexlistcython_68create_boundary_cell_index_list_3d(__pyx_self, __pyx_v_flag_field, __pyx_v_boundary_mask, __pyx_v_fluid_mask, __pyx_v_stencil, __pyx_v_single_link);
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_10pystencils_10boundaries_21createindexlistcython_68create_boundary_cell_index_list_3d(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_flag_field, unsigned long __pyx_v_boundary_mask, unsigned long __pyx_v_fluid_mask, PyObject *__pyx_v_stencil, int __pyx_v_single_link) {
+  int __pyx_v_xs;
+  int __pyx_v_ys;
+  int __pyx_v_zs;
+  int __pyx_v_x;
+  int __pyx_v_y;
+  int __pyx_v_z;
+  int __pyx_v_dirIdx;
+  int __pyx_v_num_directions;
+  int __pyx_v_dx;
+  int __pyx_v_dy;
+  int __pyx_v_dz;
+  PyObject *__pyx_v_boundary_index_list = NULL;
+  __Pyx_LocalBuf_ND __pyx_pybuffernd_flag_field;
+  __Pyx_Buffer __pyx_pybuffer_flag_field;
+  __Pyx_LocalBuf_ND __pyx_pybuffernd_stencil;
+  __Pyx_Buffer __pyx_pybuffer_stencil;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
+  PyObject *__pyx_t_5 = NULL;
+  PyObject *(*__pyx_t_6)(PyObject *);
+  int __pyx_t_7;
+  int __pyx_t_8;
+  int __pyx_t_9;
+  int __pyx_t_10;
+  int __pyx_t_11;
+  int __pyx_t_12;
+  int __pyx_t_13;
+  int __pyx_t_14;
+  int __pyx_t_15;
+  Py_ssize_t __pyx_t_16;
+  Py_ssize_t __pyx_t_17;
+  Py_ssize_t __pyx_t_18;
+  int __pyx_t_19;
+  int __pyx_t_20;
+  int __pyx_t_21;
+  int __pyx_t_22;
+  Py_ssize_t __pyx_t_23;
+  Py_ssize_t __pyx_t_24;
+  Py_ssize_t __pyx_t_25;
+  Py_ssize_t __pyx_t_26;
+  Py_ssize_t __pyx_t_27;
+  Py_ssize_t __pyx_t_28;
+  int __pyx_t_29;
+  int __pyx_t_30;
+  int __pyx_t_31;
+  Py_ssize_t __pyx_t_32;
+  Py_ssize_t __pyx_t_33;
+  Py_ssize_t __pyx_t_34;
+  int __pyx_t_35;
+  __Pyx_RefNannySetupContext("__pyx_fuse_6create_boundary_cell_index_list_3d", 0);
+  __pyx_pybuffer_flag_field.pybuffer.buf = NULL;
+  __pyx_pybuffer_flag_field.refcount = 0;
+  __pyx_pybuffernd_flag_field.data = NULL;
+  __pyx_pybuffernd_flag_field.rcbuffer = &__pyx_pybuffer_flag_field;
+  __pyx_pybuffer_stencil.pybuffer.buf = NULL;
+  __pyx_pybuffer_stencil.refcount = 0;
+  __pyx_pybuffernd_stencil.data = NULL;
+  __pyx_pybuffernd_stencil.rcbuffer = &__pyx_pybuffer_stencil;
+  {
+    __Pyx_BufFmt_StackElem __pyx_stack[1];
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_flag_field.rcbuffer->pybuffer, (PyObject*)__pyx_v_flag_field, &__Pyx_TypeInfo_unsigned_long, PyBUF_FORMAT| PyBUF_INDIRECT, 3, 0, __pyx_stack) == -1)) __PYX_ERR(0, 98, __pyx_L1_error)
+  }
+  __pyx_pybuffernd_flag_field.diminfo[0].strides = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_flag_field.diminfo[0].shape = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_flag_field.diminfo[0].suboffsets = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.suboffsets[0]; __pyx_pybuffernd_flag_field.diminfo[1].strides = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_flag_field.diminfo[1].shape = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_flag_field.diminfo[1].suboffsets = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.suboffsets[1]; __pyx_pybuffernd_flag_field.diminfo[2].strides = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_flag_field.diminfo[2].shape = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.shape[2]; __pyx_pybuffernd_flag_field.diminfo[2].suboffsets = __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.suboffsets[2];
+  {
+    __Pyx_BufFmt_StackElem __pyx_stack[1];
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_stencil.rcbuffer->pybuffer, (PyObject*)__pyx_v_stencil, &__Pyx_TypeInfo_int, PyBUF_FORMAT| PyBUF_INDIRECT, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 98, __pyx_L1_error)
+  }
+  __pyx_pybuffernd_stencil.diminfo[0].strides = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_stencil.diminfo[0].shape = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_stencil.diminfo[0].suboffsets = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.suboffsets[0]; __pyx_pybuffernd_stencil.diminfo[1].strides = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_stencil.diminfo[1].shape = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_stencil.diminfo[1].suboffsets = __pyx_pybuffernd_stencil.rcbuffer->pybuffer.suboffsets[1];
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":104
+ *     cdef int dirIdx, num_directions, dx, dy, dz
+ * 
+ *     xs, ys, zs = flag_field.shape             # <<<<<<<<<<<<<<
+ *     boundary_index_list = []
+ *     num_directions = stencil.shape[0]
+ */
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_flag_field), __pyx_n_s_shape); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 104, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) {
+    PyObject* sequence = __pyx_t_1;
+    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
+    if (unlikely(size != 3)) {
+      if (size > 3) __Pyx_RaiseTooManyValuesError(3);
+      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
+      __PYX_ERR(0, 104, __pyx_L1_error)
+    }
+    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+    if (likely(PyTuple_CheckExact(sequence))) {
+      __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
+      __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); 
+      __pyx_t_4 = PyTuple_GET_ITEM(sequence, 2); 
+    } else {
+      __pyx_t_2 = PyList_GET_ITEM(sequence, 0); 
+      __pyx_t_3 = PyList_GET_ITEM(sequence, 1); 
+      __pyx_t_4 = PyList_GET_ITEM(sequence, 2); 
+    }
+    __Pyx_INCREF(__pyx_t_2);
+    __Pyx_INCREF(__pyx_t_3);
+    __Pyx_INCREF(__pyx_t_4);
+    #else
+    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 104, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_2);
+    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 104, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    __pyx_t_4 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 104, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
+    #endif
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  } else {
+    Py_ssize_t index = -1;
+    __pyx_t_5 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 104, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_5);
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __pyx_t_6 = Py_TYPE(__pyx_t_5)->tp_iternext;
+    index = 0; __pyx_t_2 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_2)) goto __pyx_L3_unpacking_failed;
+    __Pyx_GOTREF(__pyx_t_2);
+    index = 1; __pyx_t_3 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_3)) goto __pyx_L3_unpacking_failed;
+    __Pyx_GOTREF(__pyx_t_3);
+    index = 2; __pyx_t_4 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_4)) goto __pyx_L3_unpacking_failed;
+    __Pyx_GOTREF(__pyx_t_4);
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_5), 3) < 0) __PYX_ERR(0, 104, __pyx_L1_error)
+    __pyx_t_6 = NULL;
+    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+    goto __pyx_L4_unpacking_done;
+    __pyx_L3_unpacking_failed:;
+    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+    __pyx_t_6 = NULL;
+    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
+    __PYX_ERR(0, 104, __pyx_L1_error)
+    __pyx_L4_unpacking_done:;
+  }
+  __pyx_t_7 = __Pyx_PyInt_As_int(__pyx_t_2); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 104, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_8 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_8 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 104, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __pyx_t_9 = __Pyx_PyInt_As_int(__pyx_t_4); if (unlikely((__pyx_t_9 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 104, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __pyx_v_xs = __pyx_t_7;
+  __pyx_v_ys = __pyx_t_8;
+  __pyx_v_zs = __pyx_t_9;
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":105
+ * 
+ *     xs, ys, zs = flag_field.shape
+ *     boundary_index_list = []             # <<<<<<<<<<<<<<
+ *     num_directions = stencil.shape[0]
+ * 
+ */
+  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 105, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_boundary_index_list = ((PyObject*)__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":106
+ *     xs, ys, zs = flag_field.shape
+ *     boundary_index_list = []
+ *     num_directions = stencil.shape[0]             # <<<<<<<<<<<<<<
+ * 
+ *     for z in range(0, zs):
+ */
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_stencil), __pyx_n_s_shape); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 106, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_4 = __Pyx_GetItemInt(__pyx_t_1, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 106, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_9 = __Pyx_PyInt_As_int(__pyx_t_4); if (unlikely((__pyx_t_9 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 106, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __pyx_v_num_directions = __pyx_t_9;
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":108
+ *     num_directions = stencil.shape[0]
+ * 
+ *     for z in range(0, zs):             # <<<<<<<<<<<<<<
+ *         for y in range(0, ys):
+ *             for x in range(0, xs):
+ */
+  __pyx_t_9 = __pyx_v_zs;
+  __pyx_t_8 = __pyx_t_9;
+  for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_8; __pyx_t_7+=1) {
+    __pyx_v_z = __pyx_t_7;
+
+    /* "pystencils/boundaries/createindexlistcython.pyx":109
+ * 
+ *     for z in range(0, zs):
+ *         for y in range(0, ys):             # <<<<<<<<<<<<<<
+ *             for x in range(0, xs):
+ *                 if flag_field[x, y, z] & boundary_mask:
+ */
+    __pyx_t_10 = __pyx_v_ys;
+    __pyx_t_11 = __pyx_t_10;
+    for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) {
+      __pyx_v_y = __pyx_t_12;
+
+      /* "pystencils/boundaries/createindexlistcython.pyx":110
+ *     for z in range(0, zs):
+ *         for y in range(0, ys):
+ *             for x in range(0, xs):             # <<<<<<<<<<<<<<
+ *                 if flag_field[x, y, z] & boundary_mask:
+ *                     for dirIdx in range(num_directions):
+ */
+      __pyx_t_13 = __pyx_v_xs;
+      __pyx_t_14 = __pyx_t_13;
+      for (__pyx_t_15 = 0; __pyx_t_15 < __pyx_t_14; __pyx_t_15+=1) {
+        __pyx_v_x = __pyx_t_15;
+
+        /* "pystencils/boundaries/createindexlistcython.pyx":111
+ *         for y in range(0, ys):
+ *             for x in range(0, xs):
+ *                 if flag_field[x, y, z] & boundary_mask:             # <<<<<<<<<<<<<<
+ *                     for dirIdx in range(num_directions):
+ *                         dx = stencil[dirIdx,0]
+ */
+        __pyx_t_16 = __pyx_v_x;
+        __pyx_t_17 = __pyx_v_y;
+        __pyx_t_18 = __pyx_v_z;
+        __pyx_t_19 = (((*__Pyx_BufPtrFull3d(unsigned long *, __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.buf, __pyx_t_16, __pyx_pybuffernd_flag_field.diminfo[0].strides, __pyx_pybuffernd_flag_field.diminfo[0].suboffsets, __pyx_t_17, __pyx_pybuffernd_flag_field.diminfo[1].strides, __pyx_pybuffernd_flag_field.diminfo[1].suboffsets, __pyx_t_18, __pyx_pybuffernd_flag_field.diminfo[2].strides, __pyx_pybuffernd_flag_field.diminfo[2].suboffsets)) & __pyx_v_boundary_mask) != 0);
+        if (__pyx_t_19) {
+
+          /* "pystencils/boundaries/createindexlistcython.pyx":112
+ *             for x in range(0, xs):
+ *                 if flag_field[x, y, z] & boundary_mask:
+ *                     for dirIdx in range(num_directions):             # <<<<<<<<<<<<<<
+ *                         dx = stencil[dirIdx,0]
+ *                         dy = stencil[dirIdx,1]
+ */
+          __pyx_t_20 = __pyx_v_num_directions;
+          __pyx_t_21 = __pyx_t_20;
+          for (__pyx_t_22 = 0; __pyx_t_22 < __pyx_t_21; __pyx_t_22+=1) {
+            __pyx_v_dirIdx = __pyx_t_22;
+
+            /* "pystencils/boundaries/createindexlistcython.pyx":113
+ *                 if flag_field[x, y, z] & boundary_mask:
+ *                     for dirIdx in range(num_directions):
+ *                         dx = stencil[dirIdx,0]             # <<<<<<<<<<<<<<
+ *                         dy = stencil[dirIdx,1]
+ *                         dz = stencil[dirIdx,2]
+ */
+            __pyx_t_23 = __pyx_v_dirIdx;
+            __pyx_t_24 = 0;
+            __pyx_v_dx = (*__Pyx_BufPtrFull2d(int *, __pyx_pybuffernd_stencil.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_stencil.diminfo[0].strides, __pyx_pybuffernd_stencil.diminfo[0].suboffsets, __pyx_t_24, __pyx_pybuffernd_stencil.diminfo[1].strides, __pyx_pybuffernd_stencil.diminfo[1].suboffsets));
+
+            /* "pystencils/boundaries/createindexlistcython.pyx":114
+ *                     for dirIdx in range(num_directions):
+ *                         dx = stencil[dirIdx,0]
+ *                         dy = stencil[dirIdx,1]             # <<<<<<<<<<<<<<
+ *                         dz = stencil[dirIdx,2]
+ *                         if 0 <= x + dx < xs and 0 <= y + dy < ys and 0 <= z + dz < zs:
+ */
+            __pyx_t_25 = __pyx_v_dirIdx;
+            __pyx_t_26 = 1;
+            __pyx_v_dy = (*__Pyx_BufPtrFull2d(int *, __pyx_pybuffernd_stencil.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_stencil.diminfo[0].strides, __pyx_pybuffernd_stencil.diminfo[0].suboffsets, __pyx_t_26, __pyx_pybuffernd_stencil.diminfo[1].strides, __pyx_pybuffernd_stencil.diminfo[1].suboffsets));
+
+            /* "pystencils/boundaries/createindexlistcython.pyx":115
+ *                         dx = stencil[dirIdx,0]
+ *                         dy = stencil[dirIdx,1]
+ *                         dz = stencil[dirIdx,2]             # <<<<<<<<<<<<<<
+ *                         if 0 <= x + dx < xs and 0 <= y + dy < ys and 0 <= z + dz < zs:
+ *                             if flag_field[x + dx, y + dy, z + dz] & fluid_mask:
+ */
+            __pyx_t_27 = __pyx_v_dirIdx;
+            __pyx_t_28 = 2;
+            __pyx_v_dz = (*__Pyx_BufPtrFull2d(int *, __pyx_pybuffernd_stencil.rcbuffer->pybuffer.buf, __pyx_t_27, __pyx_pybuffernd_stencil.diminfo[0].strides, __pyx_pybuffernd_stencil.diminfo[0].suboffsets, __pyx_t_28, __pyx_pybuffernd_stencil.diminfo[1].strides, __pyx_pybuffernd_stencil.diminfo[1].suboffsets));
+
+            /* "pystencils/boundaries/createindexlistcython.pyx":116
+ *                         dy = stencil[dirIdx,1]
+ *                         dz = stencil[dirIdx,2]
+ *                         if 0 <= x + dx < xs and 0 <= y + dy < ys and 0 <= z + dz < zs:             # <<<<<<<<<<<<<<
+ *                             if flag_field[x + dx, y + dy, z + dz] & fluid_mask:
+ *                                 boundary_index_list.append((x,y,z, dirIdx))
+ */
+            __pyx_t_29 = (__pyx_v_x + __pyx_v_dx);
+            __pyx_t_30 = (0 <= __pyx_t_29);
+            if (__pyx_t_30) {
+              __pyx_t_30 = (__pyx_t_29 < __pyx_v_xs);
+            }
+            __pyx_t_31 = (__pyx_t_30 != 0);
+            if (__pyx_t_31) {
+            } else {
+              __pyx_t_19 = __pyx_t_31;
+              goto __pyx_L15_bool_binop_done;
+            }
+            __pyx_t_29 = (__pyx_v_y + __pyx_v_dy);
+            __pyx_t_31 = (0 <= __pyx_t_29);
+            if (__pyx_t_31) {
+              __pyx_t_31 = (__pyx_t_29 < __pyx_v_ys);
+            }
+            __pyx_t_30 = (__pyx_t_31 != 0);
+            if (__pyx_t_30) {
+            } else {
+              __pyx_t_19 = __pyx_t_30;
+              goto __pyx_L15_bool_binop_done;
+            }
+            __pyx_t_29 = (__pyx_v_z + __pyx_v_dz);
+            __pyx_t_30 = (0 <= __pyx_t_29);
+            if (__pyx_t_30) {
+              __pyx_t_30 = (__pyx_t_29 < __pyx_v_zs);
+            }
+            __pyx_t_31 = (__pyx_t_30 != 0);
+            __pyx_t_19 = __pyx_t_31;
+            __pyx_L15_bool_binop_done:;
+            if (__pyx_t_19) {
+
+              /* "pystencils/boundaries/createindexlistcython.pyx":117
+ *                         dz = stencil[dirIdx,2]
+ *                         if 0 <= x + dx < xs and 0 <= y + dy < ys and 0 <= z + dz < zs:
+ *                             if flag_field[x + dx, y + dy, z + dz] & fluid_mask:             # <<<<<<<<<<<<<<
+ *                                 boundary_index_list.append((x,y,z, dirIdx))
+ *                                 if single_link:
+ */
+              __pyx_t_32 = (__pyx_v_x + __pyx_v_dx);
+              __pyx_t_33 = (__pyx_v_y + __pyx_v_dy);
+              __pyx_t_34 = (__pyx_v_z + __pyx_v_dz);
+              __pyx_t_19 = (((*__Pyx_BufPtrFull3d(unsigned long *, __pyx_pybuffernd_flag_field.rcbuffer->pybuffer.buf, __pyx_t_32, __pyx_pybuffernd_flag_field.diminfo[0].strides, __pyx_pybuffernd_flag_field.diminfo[0].suboffsets, __pyx_t_33, __pyx_pybuffernd_flag_field.diminfo[1].strides, __pyx_pybuffernd_flag_field.diminfo[1].suboffsets, __pyx_t_34, __pyx_pybuffernd_flag_field.diminfo[2].strides, __pyx_pybuffernd_flag_field.diminfo[2].suboffsets)) & __pyx_v_fluid_mask) != 0);
+              if (__pyx_t_19) {
+
+                /* "pystencils/boundaries/createindexlistcython.pyx":118
+ *                         if 0 <= x + dx < xs and 0 <= y + dy < ys and 0 <= z + dz < zs:
+ *                             if flag_field[x + dx, y + dy, z + dz] & fluid_mask:
+ *                                 boundary_index_list.append((x,y,z, dirIdx))             # <<<<<<<<<<<<<<
+ *                                 if single_link:
+ *                                     break
+ */
+                __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_x); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 118, __pyx_L1_error)
+                __Pyx_GOTREF(__pyx_t_4);
+                __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_y); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 118, __pyx_L1_error)
+                __Pyx_GOTREF(__pyx_t_1);
+                __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_z); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 118, __pyx_L1_error)
+                __Pyx_GOTREF(__pyx_t_3);
+                __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_dirIdx); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 118, __pyx_L1_error)
+                __Pyx_GOTREF(__pyx_t_2);
+                __pyx_t_5 = PyTuple_New(4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 118, __pyx_L1_error)
+                __Pyx_GOTREF(__pyx_t_5);
+                __Pyx_GIVEREF(__pyx_t_4);
+                PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4);
+                __Pyx_GIVEREF(__pyx_t_1);
+                PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_1);
+                __Pyx_GIVEREF(__pyx_t_3);
+                PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_t_3);
+                __Pyx_GIVEREF(__pyx_t_2);
+                PyTuple_SET_ITEM(__pyx_t_5, 3, __pyx_t_2);
+                __pyx_t_4 = 0;
+                __pyx_t_1 = 0;
+                __pyx_t_3 = 0;
+                __pyx_t_2 = 0;
+                __pyx_t_35 = __Pyx_PyList_Append(__pyx_v_boundary_index_list, __pyx_t_5); if (unlikely(__pyx_t_35 == ((int)-1))) __PYX_ERR(0, 118, __pyx_L1_error)
+                __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+                /* "pystencils/boundaries/createindexlistcython.pyx":119
+ *                             if flag_field[x + dx, y + dy, z + dz] & fluid_mask:
+ *                                 boundary_index_list.append((x,y,z, dirIdx))
+ *                                 if single_link:             # <<<<<<<<<<<<<<
+ *                                     break
+ *     return boundary_index_list
+ */
+                __pyx_t_19 = (__pyx_v_single_link != 0);
+                if (__pyx_t_19) {
+
+                  /* "pystencils/boundaries/createindexlistcython.pyx":120
+ *                                 boundary_index_list.append((x,y,z, dirIdx))
+ *                                 if single_link:
+ *                                     break             # <<<<<<<<<<<<<<
+ *     return boundary_index_list
+ */
+                  goto __pyx_L13_break;
+
+                  /* "pystencils/boundaries/createindexlistcython.pyx":119
+ *                             if flag_field[x + dx, y + dy, z + dz] & fluid_mask:
+ *                                 boundary_index_list.append((x,y,z, dirIdx))
+ *                                 if single_link:             # <<<<<<<<<<<<<<
+ *                                     break
+ *     return boundary_index_list
+ */
+                }
+
+                /* "pystencils/boundaries/createindexlistcython.pyx":117
+ *                         dz = stencil[dirIdx,2]
+ *                         if 0 <= x + dx < xs and 0 <= y + dy < ys and 0 <= z + dz < zs:
+ *                             if flag_field[x + dx, y + dy, z + dz] & fluid_mask:             # <<<<<<<<<<<<<<
+ *                                 boundary_index_list.append((x,y,z, dirIdx))
+ *                                 if single_link:
+ */
+              }
+
+              /* "pystencils/boundaries/createindexlistcython.pyx":116
+ *                         dy = stencil[dirIdx,1]
+ *                         dz = stencil[dirIdx,2]
+ *                         if 0 <= x + dx < xs and 0 <= y + dy < ys and 0 <= z + dz < zs:             # <<<<<<<<<<<<<<
+ *                             if flag_field[x + dx, y + dy, z + dz] & fluid_mask:
+ *                                 boundary_index_list.append((x,y,z, dirIdx))
+ */
+            }
+          }
+          __pyx_L13_break:;
+
+          /* "pystencils/boundaries/createindexlistcython.pyx":111
+ *         for y in range(0, ys):
+ *             for x in range(0, xs):
+ *                 if flag_field[x, y, z] & boundary_mask:             # <<<<<<<<<<<<<<
+ *                     for dirIdx in range(num_directions):
+ *                         dx = stencil[dirIdx,0]
+ */
+        }
+      }
+    }
+  }
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":121
+ *                                 if single_link:
+ *                                     break
+ *     return boundary_index_list             # <<<<<<<<<<<<<<
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(__pyx_v_boundary_index_list);
+  __pyx_r = __pyx_v_boundary_index_list;
+  goto __pyx_L0;
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":98
+ * @cython.boundscheck(False) # turn off bounds-checking for entire function
+ * @cython.wraparound(False)  # turn off negative index wrapping for entire function
+ * def create_boundary_cell_index_list_3d(object[IntegerType, ndim=3] flag_field,             # <<<<<<<<<<<<<<
+ *                                        IntegerType boundary_mask, IntegerType fluid_mask,
+ *                                        object[int, ndim=2] stencil, int single_link):
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_XDECREF(__pyx_t_5);
+  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
+    __Pyx_PyThreadState_declare
+    __Pyx_PyThreadState_assign
+    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
+    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_flag_field.rcbuffer->pybuffer);
+    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_stencil.rcbuffer->pybuffer);
+  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
+  __Pyx_AddTraceback("pystencils.boundaries.createindexlistcython.create_boundary_cell_index_list_3d", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  goto __pyx_L2;
+  __pyx_L0:;
+  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_flag_field.rcbuffer->pybuffer);
+  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_stencil.rcbuffer->pybuffer);
+  __pyx_L2:;
+  __Pyx_XDECREF(__pyx_v_boundary_index_list);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "View.MemoryView":122
+ *         cdef bint dtype_is_object
+ * 
+ *     def __cinit__(array self, tuple shape, Py_ssize_t itemsize, format not None,             # <<<<<<<<<<<<<<
+ *                   mode="c", bint allocate_buffer=True):
+ * 
+ */
+
+/* Python wrapper */
+static int __pyx_array___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static int __pyx_array___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_shape = 0;
+  Py_ssize_t __pyx_v_itemsize;
+  PyObject *__pyx_v_format = 0;
+  PyObject *__pyx_v_mode = 0;
+  int __pyx_v_allocate_buffer;
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_shape,&__pyx_n_s_itemsize,&__pyx_n_s_format,&__pyx_n_s_mode,&__pyx_n_s_allocate_buffer,0};
+    PyObject* values[5] = {0,0,0,0,0};
+    values[3] = ((PyObject *)__pyx_n_s_c);
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+        CYTHON_FALLTHROUGH;
+        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
+        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_shape)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
+        case  1:
+        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_itemsize)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 3, 5, 1); __PYX_ERR(1, 122, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  2:
+        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_format)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 3, 5, 2); __PYX_ERR(1, 122, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  3:
+        if (kw_args > 0) {
+          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_mode);
+          if (value) { values[3] = value; kw_args--; }
+        }
+        CYTHON_FALLTHROUGH;
+        case  4:
+        if (kw_args > 0) {
+          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_allocate_buffer);
+          if (value) { values[4] = value; kw_args--; }
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) __PYX_ERR(1, 122, __pyx_L3_error)
+      }
+    } else {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
+        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+        CYTHON_FALLTHROUGH;
+        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
+        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+    }
+    __pyx_v_shape = ((PyObject*)values[0]);
+    __pyx_v_itemsize = __Pyx_PyIndex_AsSsize_t(values[1]); if (unlikely((__pyx_v_itemsize == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 122, __pyx_L3_error)
+    __pyx_v_format = values[2];
+    __pyx_v_mode = values[3];
+    if (values[4]) {
+      __pyx_v_allocate_buffer = __Pyx_PyObject_IsTrue(values[4]); if (unlikely((__pyx_v_allocate_buffer == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 123, __pyx_L3_error)
+    } else {
+
+      /* "View.MemoryView":123
+ * 
+ *     def __cinit__(array self, tuple shape, Py_ssize_t itemsize, format not None,
+ *                   mode="c", bint allocate_buffer=True):             # <<<<<<<<<<<<<<
+ * 
+ *         cdef int idx
+ */
+      __pyx_v_allocate_buffer = ((int)1);
+    }
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 3, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 122, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("View.MemoryView.array.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return -1;
+  __pyx_L4_argument_unpacking_done:;
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_shape), (&PyTuple_Type), 1, "shape", 1))) __PYX_ERR(1, 122, __pyx_L1_error)
+  if (unlikely(((PyObject *)__pyx_v_format) == Py_None)) {
+    PyErr_Format(PyExc_TypeError, "Argument '%.200s' must not be None", "format"); __PYX_ERR(1, 122, __pyx_L1_error)
+  }
+  __pyx_r = __pyx_array___pyx_pf_15View_dot_MemoryView_5array___cinit__(((struct __pyx_array_obj *)__pyx_v_self), __pyx_v_shape, __pyx_v_itemsize, __pyx_v_format, __pyx_v_mode, __pyx_v_allocate_buffer);
+
+  /* "View.MemoryView":122
+ *         cdef bint dtype_is_object
+ * 
+ *     def __cinit__(array self, tuple shape, Py_ssize_t itemsize, format not None,             # <<<<<<<<<<<<<<
+ *                   mode="c", bint allocate_buffer=True):
+ * 
+ */
+
+  /* function exit code */
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __pyx_r = -1;
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static int __pyx_array___pyx_pf_15View_dot_MemoryView_5array___cinit__(struct __pyx_array_obj *__pyx_v_self, PyObject *__pyx_v_shape, Py_ssize_t __pyx_v_itemsize, PyObject *__pyx_v_format, PyObject *__pyx_v_mode, int __pyx_v_allocate_buffer) {
+  int __pyx_v_idx;
+  Py_ssize_t __pyx_v_i;
+  Py_ssize_t __pyx_v_dim;
+  PyObject **__pyx_v_p;
+  char __pyx_v_order;
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  Py_ssize_t __pyx_t_1;
+  int __pyx_t_2;
+  PyObject *__pyx_t_3 = NULL;
+  int __pyx_t_4;
+  PyObject *__pyx_t_5 = NULL;
+  PyObject *__pyx_t_6 = NULL;
+  char *__pyx_t_7;
+  int __pyx_t_8;
+  Py_ssize_t __pyx_t_9;
+  PyObject *__pyx_t_10 = NULL;
+  Py_ssize_t __pyx_t_11;
+  __Pyx_RefNannySetupContext("__cinit__", 0);
+  __Pyx_INCREF(__pyx_v_format);
+
+  /* "View.MemoryView":129
+ *         cdef PyObject **p
+ * 
+ *         self.ndim = <int> len(shape)             # <<<<<<<<<<<<<<
+ *         self.itemsize = itemsize
+ * 
+ */
+  if (unlikely(__pyx_v_shape == Py_None)) {
+    PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
+    __PYX_ERR(1, 129, __pyx_L1_error)
+  }
+  __pyx_t_1 = PyTuple_GET_SIZE(__pyx_v_shape); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1))) __PYX_ERR(1, 129, __pyx_L1_error)
+  __pyx_v_self->ndim = ((int)__pyx_t_1);
+
+  /* "View.MemoryView":130
+ * 
+ *         self.ndim = <int> len(shape)
+ *         self.itemsize = itemsize             # <<<<<<<<<<<<<<
+ * 
+ *         if not self.ndim:
+ */
+  __pyx_v_self->itemsize = __pyx_v_itemsize;
+
+  /* "View.MemoryView":132
+ *         self.itemsize = itemsize
+ * 
+ *         if not self.ndim:             # <<<<<<<<<<<<<<
+ *             raise ValueError("Empty shape tuple for cython.array")
+ * 
+ */
+  __pyx_t_2 = ((!(__pyx_v_self->ndim != 0)) != 0);
+  if (unlikely(__pyx_t_2)) {
+
+    /* "View.MemoryView":133
+ * 
+ *         if not self.ndim:
+ *             raise ValueError("Empty shape tuple for cython.array")             # <<<<<<<<<<<<<<
+ * 
+ *         if itemsize <= 0:
+ */
+    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__5, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 133, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    __Pyx_Raise(__pyx_t_3, 0, 0, 0);
+    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+    __PYX_ERR(1, 133, __pyx_L1_error)
+
+    /* "View.MemoryView":132
+ *         self.itemsize = itemsize
+ * 
+ *         if not self.ndim:             # <<<<<<<<<<<<<<
+ *             raise ValueError("Empty shape tuple for cython.array")
+ * 
+ */
+  }
+
+  /* "View.MemoryView":135
+ *             raise ValueError("Empty shape tuple for cython.array")
+ * 
+ *         if itemsize <= 0:             # <<<<<<<<<<<<<<
+ *             raise ValueError("itemsize <= 0 for cython.array")
+ * 
+ */
+  __pyx_t_2 = ((__pyx_v_itemsize <= 0) != 0);
+  if (unlikely(__pyx_t_2)) {
+
+    /* "View.MemoryView":136
+ * 
+ *         if itemsize <= 0:
+ *             raise ValueError("itemsize <= 0 for cython.array")             # <<<<<<<<<<<<<<
+ * 
+ *         if not isinstance(format, bytes):
+ */
+    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__6, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 136, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    __Pyx_Raise(__pyx_t_3, 0, 0, 0);
+    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+    __PYX_ERR(1, 136, __pyx_L1_error)
+
+    /* "View.MemoryView":135
+ *             raise ValueError("Empty shape tuple for cython.array")
+ * 
+ *         if itemsize <= 0:             # <<<<<<<<<<<<<<
+ *             raise ValueError("itemsize <= 0 for cython.array")
+ * 
+ */
+  }
+
+  /* "View.MemoryView":138
+ *             raise ValueError("itemsize <= 0 for cython.array")
+ * 
+ *         if not isinstance(format, bytes):             # <<<<<<<<<<<<<<
+ *             format = format.encode('ASCII')
+ *         self._format = format  # keep a reference to the byte string
+ */
+  __pyx_t_2 = PyBytes_Check(__pyx_v_format); 
+  __pyx_t_4 = ((!(__pyx_t_2 != 0)) != 0);
+  if (__pyx_t_4) {
+
+    /* "View.MemoryView":139
+ * 
+ *         if not isinstance(format, bytes):
+ *             format = format.encode('ASCII')             # <<<<<<<<<<<<<<
+ *         self._format = format  # keep a reference to the byte string
+ *         self.format = self._format
+ */
+    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_format, __pyx_n_s_encode); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 139, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_5);
+    __pyx_t_6 = NULL;
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
+      __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5);
+      if (likely(__pyx_t_6)) {
+        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
+        __Pyx_INCREF(__pyx_t_6);
+        __Pyx_INCREF(function);
+        __Pyx_DECREF_SET(__pyx_t_5, function);
+      }
+    }
+    __pyx_t_3 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_6, __pyx_n_s_ASCII) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_n_s_ASCII);
+    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
+    if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 139, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+    __Pyx_DECREF_SET(__pyx_v_format, __pyx_t_3);
+    __pyx_t_3 = 0;
+
+    /* "View.MemoryView":138
+ *             raise ValueError("itemsize <= 0 for cython.array")
+ * 
+ *         if not isinstance(format, bytes):             # <<<<<<<<<<<<<<
+ *             format = format.encode('ASCII')
+ *         self._format = format  # keep a reference to the byte string
+ */
+  }
+
+  /* "View.MemoryView":140
+ *         if not isinstance(format, bytes):
+ *             format = format.encode('ASCII')
+ *         self._format = format  # keep a reference to the byte string             # <<<<<<<<<<<<<<
+ *         self.format = self._format
+ * 
+ */
+  if (!(likely(PyBytes_CheckExact(__pyx_v_format))||((__pyx_v_format) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_v_format)->tp_name), 0))) __PYX_ERR(1, 140, __pyx_L1_error)
+  __pyx_t_3 = __pyx_v_format;
+  __Pyx_INCREF(__pyx_t_3);
+  __Pyx_GIVEREF(__pyx_t_3);
+  __Pyx_GOTREF(__pyx_v_self->_format);
+  __Pyx_DECREF(__pyx_v_self->_format);
+  __pyx_v_self->_format = ((PyObject*)__pyx_t_3);
+  __pyx_t_3 = 0;
+
+  /* "View.MemoryView":141
+ *             format = format.encode('ASCII')
+ *         self._format = format  # keep a reference to the byte string
+ *         self.format = self._format             # <<<<<<<<<<<<<<
+ * 
+ * 
+ */
+  if (unlikely(__pyx_v_self->_format == Py_None)) {
+    PyErr_SetString(PyExc_TypeError, "expected bytes, NoneType found");
+    __PYX_ERR(1, 141, __pyx_L1_error)
+  }
+  __pyx_t_7 = __Pyx_PyBytes_AsWritableString(__pyx_v_self->_format); if (unlikely((!__pyx_t_7) && PyErr_Occurred())) __PYX_ERR(1, 141, __pyx_L1_error)
+  __pyx_v_self->format = __pyx_t_7;
+
+  /* "View.MemoryView":144
+ * 
+ * 
+ *         self._shape = <Py_ssize_t *> PyObject_Malloc(sizeof(Py_ssize_t)*self.ndim*2)             # <<<<<<<<<<<<<<
+ *         self._strides = self._shape + self.ndim
+ * 
+ */
+  __pyx_v_self->_shape = ((Py_ssize_t *)PyObject_Malloc((((sizeof(Py_ssize_t)) * __pyx_v_self->ndim) * 2)));
+
+  /* "View.MemoryView":145
+ * 
+ *         self._shape = <Py_ssize_t *> PyObject_Malloc(sizeof(Py_ssize_t)*self.ndim*2)
+ *         self._strides = self._shape + self.ndim             # <<<<<<<<<<<<<<
+ * 
+ *         if not self._shape:
+ */
+  __pyx_v_self->_strides = (__pyx_v_self->_shape + __pyx_v_self->ndim);
+
+  /* "View.MemoryView":147
+ *         self._strides = self._shape + self.ndim
+ * 
+ *         if not self._shape:             # <<<<<<<<<<<<<<
+ *             raise MemoryError("unable to allocate shape and strides.")
+ * 
+ */
+  __pyx_t_4 = ((!(__pyx_v_self->_shape != 0)) != 0);
+  if (unlikely(__pyx_t_4)) {
+
+    /* "View.MemoryView":148
+ * 
+ *         if not self._shape:
+ *             raise MemoryError("unable to allocate shape and strides.")             # <<<<<<<<<<<<<<
+ * 
+ * 
+ */
+    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_MemoryError, __pyx_tuple__7, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 148, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    __Pyx_Raise(__pyx_t_3, 0, 0, 0);
+    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+    __PYX_ERR(1, 148, __pyx_L1_error)
+
+    /* "View.MemoryView":147
+ *         self._strides = self._shape + self.ndim
+ * 
+ *         if not self._shape:             # <<<<<<<<<<<<<<
+ *             raise MemoryError("unable to allocate shape and strides.")
+ * 
+ */
+  }
+
+  /* "View.MemoryView":151
+ * 
+ * 
+ *         for idx, dim in enumerate(shape):             # <<<<<<<<<<<<<<
+ *             if dim <= 0:
+ *                 raise ValueError("Invalid shape in axis %d: %d." % (idx, dim))
+ */
+  __pyx_t_8 = 0;
+  __pyx_t_3 = __pyx_v_shape; __Pyx_INCREF(__pyx_t_3); __pyx_t_1 = 0;
+  for (;;) {
+    if (__pyx_t_1 >= PyTuple_GET_SIZE(__pyx_t_3)) break;
+    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+    __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_1); __Pyx_INCREF(__pyx_t_5); __pyx_t_1++; if (unlikely(0 < 0)) __PYX_ERR(1, 151, __pyx_L1_error)
+    #else
+    __pyx_t_5 = PySequence_ITEM(__pyx_t_3, __pyx_t_1); __pyx_t_1++; if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 151, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_5);
+    #endif
+    __pyx_t_9 = __Pyx_PyIndex_AsSsize_t(__pyx_t_5); if (unlikely((__pyx_t_9 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 151, __pyx_L1_error)
+    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+    __pyx_v_dim = __pyx_t_9;
+    __pyx_v_idx = __pyx_t_8;
+    __pyx_t_8 = (__pyx_t_8 + 1);
+
+    /* "View.MemoryView":152
+ * 
+ *         for idx, dim in enumerate(shape):
+ *             if dim <= 0:             # <<<<<<<<<<<<<<
+ *                 raise ValueError("Invalid shape in axis %d: %d." % (idx, dim))
+ *             self._shape[idx] = dim
+ */
+    __pyx_t_4 = ((__pyx_v_dim <= 0) != 0);
+    if (unlikely(__pyx_t_4)) {
+
+      /* "View.MemoryView":153
+ *         for idx, dim in enumerate(shape):
+ *             if dim <= 0:
+ *                 raise ValueError("Invalid shape in axis %d: %d." % (idx, dim))             # <<<<<<<<<<<<<<
+ *             self._shape[idx] = dim
+ * 
+ */
+      __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_idx); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 153, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_5);
+      __pyx_t_6 = PyInt_FromSsize_t(__pyx_v_dim); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 153, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_6);
+      __pyx_t_10 = PyTuple_New(2); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 153, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_10);
+      __Pyx_GIVEREF(__pyx_t_5);
+      PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_5);
+      __Pyx_GIVEREF(__pyx_t_6);
+      PyTuple_SET_ITEM(__pyx_t_10, 1, __pyx_t_6);
+      __pyx_t_5 = 0;
+      __pyx_t_6 = 0;
+      __pyx_t_6 = __Pyx_PyString_Format(__pyx_kp_s_Invalid_shape_in_axis_d_d, __pyx_t_10); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 153, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_6);
+      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+      __pyx_t_10 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_6); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 153, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_10);
+      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+      __Pyx_Raise(__pyx_t_10, 0, 0, 0);
+      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+      __PYX_ERR(1, 153, __pyx_L1_error)
+
+      /* "View.MemoryView":152
+ * 
+ *         for idx, dim in enumerate(shape):
+ *             if dim <= 0:             # <<<<<<<<<<<<<<
+ *                 raise ValueError("Invalid shape in axis %d: %d." % (idx, dim))
+ *             self._shape[idx] = dim
+ */
+    }
+
+    /* "View.MemoryView":154
+ *             if dim <= 0:
+ *                 raise ValueError("Invalid shape in axis %d: %d." % (idx, dim))
+ *             self._shape[idx] = dim             # <<<<<<<<<<<<<<
+ * 
+ *         cdef char order
+ */
+    (__pyx_v_self->_shape[__pyx_v_idx]) = __pyx_v_dim;
+
+    /* "View.MemoryView":151
+ * 
+ * 
+ *         for idx, dim in enumerate(shape):             # <<<<<<<<<<<<<<
+ *             if dim <= 0:
+ *                 raise ValueError("Invalid shape in axis %d: %d." % (idx, dim))
+ */
+  }
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+
+  /* "View.MemoryView":157
+ * 
+ *         cdef char order
+ *         if mode == 'fortran':             # <<<<<<<<<<<<<<
+ *             order = b'F'
+ *             self.mode = u'fortran'
+ */
+  __pyx_t_4 = (__Pyx_PyString_Equals(__pyx_v_mode, __pyx_n_s_fortran, Py_EQ)); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(1, 157, __pyx_L1_error)
+  if (__pyx_t_4) {
+
+    /* "View.MemoryView":158
+ *         cdef char order
+ *         if mode == 'fortran':
+ *             order = b'F'             # <<<<<<<<<<<<<<
+ *             self.mode = u'fortran'
+ *         elif mode == 'c':
+ */
+    __pyx_v_order = 'F';
+
+    /* "View.MemoryView":159
+ *         if mode == 'fortran':
+ *             order = b'F'
+ *             self.mode = u'fortran'             # <<<<<<<<<<<<<<
+ *         elif mode == 'c':
+ *             order = b'C'
+ */
+    __Pyx_INCREF(__pyx_n_u_fortran);
+    __Pyx_GIVEREF(__pyx_n_u_fortran);
+    __Pyx_GOTREF(__pyx_v_self->mode);
+    __Pyx_DECREF(__pyx_v_self->mode);
+    __pyx_v_self->mode = __pyx_n_u_fortran;
+
+    /* "View.MemoryView":157
+ * 
+ *         cdef char order
+ *         if mode == 'fortran':             # <<<<<<<<<<<<<<
+ *             order = b'F'
+ *             self.mode = u'fortran'
+ */
+    goto __pyx_L10;
+  }
+
+  /* "View.MemoryView":160
+ *             order = b'F'
+ *             self.mode = u'fortran'
+ *         elif mode == 'c':             # <<<<<<<<<<<<<<
+ *             order = b'C'
+ *             self.mode = u'c'
+ */
+  __pyx_t_4 = (__Pyx_PyString_Equals(__pyx_v_mode, __pyx_n_s_c, Py_EQ)); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(1, 160, __pyx_L1_error)
+  if (likely(__pyx_t_4)) {
+
+    /* "View.MemoryView":161
+ *             self.mode = u'fortran'
+ *         elif mode == 'c':
+ *             order = b'C'             # <<<<<<<<<<<<<<
+ *             self.mode = u'c'
+ *         else:
+ */
+    __pyx_v_order = 'C';
+
+    /* "View.MemoryView":162
+ *         elif mode == 'c':
+ *             order = b'C'
+ *             self.mode = u'c'             # <<<<<<<<<<<<<<
+ *         else:
+ *             raise ValueError("Invalid mode, expected 'c' or 'fortran', got %s" % mode)
+ */
+    __Pyx_INCREF(__pyx_n_u_c);
+    __Pyx_GIVEREF(__pyx_n_u_c);
+    __Pyx_GOTREF(__pyx_v_self->mode);
+    __Pyx_DECREF(__pyx_v_self->mode);
+    __pyx_v_self->mode = __pyx_n_u_c;
+
+    /* "View.MemoryView":160
+ *             order = b'F'
+ *             self.mode = u'fortran'
+ *         elif mode == 'c':             # <<<<<<<<<<<<<<
+ *             order = b'C'
+ *             self.mode = u'c'
+ */
+    goto __pyx_L10;
+  }
+
+  /* "View.MemoryView":164
+ *             self.mode = u'c'
+ *         else:
+ *             raise ValueError("Invalid mode, expected 'c' or 'fortran', got %s" % mode)             # <<<<<<<<<<<<<<
+ * 
+ *         self.len = fill_contig_strides_array(self._shape, self._strides,
+ */
+  /*else*/ {
+    __pyx_t_3 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Invalid_mode_expected_c_or_fortr, __pyx_v_mode); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 164, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    __pyx_t_10 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_3); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 164, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_10);
+    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+    __Pyx_Raise(__pyx_t_10, 0, 0, 0);
+    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+    __PYX_ERR(1, 164, __pyx_L1_error)
+  }
+  __pyx_L10:;
+
+  /* "View.MemoryView":166
+ *             raise ValueError("Invalid mode, expected 'c' or 'fortran', got %s" % mode)
+ * 
+ *         self.len = fill_contig_strides_array(self._shape, self._strides,             # <<<<<<<<<<<<<<
+ *                                              itemsize, self.ndim, order)
+ * 
+ */
+  __pyx_v_self->len = __pyx_fill_contig_strides_array(__pyx_v_self->_shape, __pyx_v_self->_strides, __pyx_v_itemsize, __pyx_v_self->ndim, __pyx_v_order);
+
+  /* "View.MemoryView":169
+ *                                              itemsize, self.ndim, order)
+ * 
+ *         self.free_data = allocate_buffer             # <<<<<<<<<<<<<<
+ *         self.dtype_is_object = format == b'O'
+ *         if allocate_buffer:
+ */
+  __pyx_v_self->free_data = __pyx_v_allocate_buffer;
+
+  /* "View.MemoryView":170
+ * 
+ *         self.free_data = allocate_buffer
+ *         self.dtype_is_object = format == b'O'             # <<<<<<<<<<<<<<
+ *         if allocate_buffer:
+ * 
+ */
+  __pyx_t_10 = PyObject_RichCompare(__pyx_v_format, __pyx_n_b_O, Py_EQ); __Pyx_XGOTREF(__pyx_t_10); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 170, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_10); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 170, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+  __pyx_v_self->dtype_is_object = __pyx_t_4;
+
+  /* "View.MemoryView":171
+ *         self.free_data = allocate_buffer
+ *         self.dtype_is_object = format == b'O'
+ *         if allocate_buffer:             # <<<<<<<<<<<<<<
+ * 
+ * 
+ */
+  __pyx_t_4 = (__pyx_v_allocate_buffer != 0);
+  if (__pyx_t_4) {
+
+    /* "View.MemoryView":174
+ * 
+ * 
+ *             self.data = <char *>malloc(self.len)             # <<<<<<<<<<<<<<
+ *             if not self.data:
+ *                 raise MemoryError("unable to allocate array data.")
+ */
+    __pyx_v_self->data = ((char *)malloc(__pyx_v_self->len));
+
+    /* "View.MemoryView":175
+ * 
+ *             self.data = <char *>malloc(self.len)
+ *             if not self.data:             # <<<<<<<<<<<<<<
+ *                 raise MemoryError("unable to allocate array data.")
+ * 
+ */
+    __pyx_t_4 = ((!(__pyx_v_self->data != 0)) != 0);
+    if (unlikely(__pyx_t_4)) {
+
+      /* "View.MemoryView":176
+ *             self.data = <char *>malloc(self.len)
+ *             if not self.data:
+ *                 raise MemoryError("unable to allocate array data.")             # <<<<<<<<<<<<<<
+ * 
+ *             if self.dtype_is_object:
+ */
+      __pyx_t_10 = __Pyx_PyObject_Call(__pyx_builtin_MemoryError, __pyx_tuple__8, NULL); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 176, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_10);
+      __Pyx_Raise(__pyx_t_10, 0, 0, 0);
+      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+      __PYX_ERR(1, 176, __pyx_L1_error)
+
+      /* "View.MemoryView":175
+ * 
+ *             self.data = <char *>malloc(self.len)
+ *             if not self.data:             # <<<<<<<<<<<<<<
+ *                 raise MemoryError("unable to allocate array data.")
+ * 
+ */
+    }
+
+    /* "View.MemoryView":178
+ *                 raise MemoryError("unable to allocate array data.")
+ * 
+ *             if self.dtype_is_object:             # <<<<<<<<<<<<<<
+ *                 p = <PyObject **> self.data
+ *                 for i in range(self.len / itemsize):
+ */
+    __pyx_t_4 = (__pyx_v_self->dtype_is_object != 0);
+    if (__pyx_t_4) {
+
+      /* "View.MemoryView":179
+ * 
+ *             if self.dtype_is_object:
+ *                 p = <PyObject **> self.data             # <<<<<<<<<<<<<<
+ *                 for i in range(self.len / itemsize):
+ *                     p[i] = Py_None
+ */
+      __pyx_v_p = ((PyObject **)__pyx_v_self->data);
+
+      /* "View.MemoryView":180
+ *             if self.dtype_is_object:
+ *                 p = <PyObject **> self.data
+ *                 for i in range(self.len / itemsize):             # <<<<<<<<<<<<<<
+ *                     p[i] = Py_None
+ *                     Py_INCREF(Py_None)
+ */
+      if (unlikely(__pyx_v_itemsize == 0)) {
+        PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero");
+        __PYX_ERR(1, 180, __pyx_L1_error)
+      }
+      else if (sizeof(Py_ssize_t) == sizeof(long) && (!(((Py_ssize_t)-1) > 0)) && unlikely(__pyx_v_itemsize == (Py_ssize_t)-1)  && unlikely(UNARY_NEG_WOULD_OVERFLOW(__pyx_v_self->len))) {
+        PyErr_SetString(PyExc_OverflowError, "value too large to perform division");
+        __PYX_ERR(1, 180, __pyx_L1_error)
+      }
+      __pyx_t_1 = __Pyx_div_Py_ssize_t(__pyx_v_self->len, __pyx_v_itemsize);
+      __pyx_t_9 = __pyx_t_1;
+      for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_9; __pyx_t_11+=1) {
+        __pyx_v_i = __pyx_t_11;
+
+        /* "View.MemoryView":181
+ *                 p = <PyObject **> self.data
+ *                 for i in range(self.len / itemsize):
+ *                     p[i] = Py_None             # <<<<<<<<<<<<<<
+ *                     Py_INCREF(Py_None)
+ * 
+ */
+        (__pyx_v_p[__pyx_v_i]) = Py_None;
+
+        /* "View.MemoryView":182
+ *                 for i in range(self.len / itemsize):
+ *                     p[i] = Py_None
+ *                     Py_INCREF(Py_None)             # <<<<<<<<<<<<<<
+ * 
+ *     @cname('getbuffer')
+ */
+        Py_INCREF(Py_None);
+      }
+
+      /* "View.MemoryView":178
+ *                 raise MemoryError("unable to allocate array data.")
+ * 
+ *             if self.dtype_is_object:             # <<<<<<<<<<<<<<
+ *                 p = <PyObject **> self.data
+ *                 for i in range(self.len / itemsize):
+ */
+    }
+
+    /* "View.MemoryView":171
+ *         self.free_data = allocate_buffer
+ *         self.dtype_is_object = format == b'O'
+ *         if allocate_buffer:             # <<<<<<<<<<<<<<
+ * 
+ * 
+ */
+  }
+
+  /* "View.MemoryView":122
+ *         cdef bint dtype_is_object
+ * 
+ *     def __cinit__(array self, tuple shape, Py_ssize_t itemsize, format not None,             # <<<<<<<<<<<<<<
+ *                   mode="c", bint allocate_buffer=True):
+ * 
+ */
+
+  /* function exit code */
+  __pyx_r = 0;
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_5);
+  __Pyx_XDECREF(__pyx_t_6);
+  __Pyx_XDECREF(__pyx_t_10);
+  __Pyx_AddTraceback("View.MemoryView.array.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = -1;
+  __pyx_L0:;
+  __Pyx_XDECREF(__pyx_v_format);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "View.MemoryView":185
+ * 
+ *     @cname('getbuffer')
+ *     def __getbuffer__(self, Py_buffer *info, int flags):             # <<<<<<<<<<<<<<
+ *         cdef int bufmode = -1
+ *         if self.mode == u"c":
+ */
+
+/* Python wrapper */
+static CYTHON_UNUSED int __pyx_array_getbuffer(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /*proto*/
+static CYTHON_UNUSED int __pyx_array_getbuffer(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__getbuffer__ (wrapper)", 0);
+  __pyx_r = __pyx_array___pyx_pf_15View_dot_MemoryView_5array_2__getbuffer__(((struct __pyx_array_obj *)__pyx_v_self), ((Py_buffer *)__pyx_v_info), ((int)__pyx_v_flags));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static int __pyx_array___pyx_pf_15View_dot_MemoryView_5array_2__getbuffer__(struct __pyx_array_obj *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags) {
+  int __pyx_v_bufmode;
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  int __pyx_t_2;
+  PyObject *__pyx_t_3 = NULL;
+  char *__pyx_t_4;
+  Py_ssize_t __pyx_t_5;
+  int __pyx_t_6;
+  Py_ssize_t *__pyx_t_7;
+  if (__pyx_v_info == NULL) {
+    PyErr_SetString(PyExc_BufferError, "PyObject_GetBuffer: view==NULL argument is obsolete");
+    return -1;
+  }
+  __Pyx_RefNannySetupContext("__getbuffer__", 0);
+  __pyx_v_info->obj = Py_None; __Pyx_INCREF(Py_None);
+  __Pyx_GIVEREF(__pyx_v_info->obj);
+
+  /* "View.MemoryView":186
+ *     @cname('getbuffer')
+ *     def __getbuffer__(self, Py_buffer *info, int flags):
+ *         cdef int bufmode = -1             # <<<<<<<<<<<<<<
+ *         if self.mode == u"c":
+ *             bufmode = PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS
+ */
+  __pyx_v_bufmode = -1;
+
+  /* "View.MemoryView":187
+ *     def __getbuffer__(self, Py_buffer *info, int flags):
+ *         cdef int bufmode = -1
+ *         if self.mode == u"c":             # <<<<<<<<<<<<<<
+ *             bufmode = PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS
+ *         elif self.mode == u"fortran":
+ */
+  __pyx_t_1 = (__Pyx_PyUnicode_Equals(__pyx_v_self->mode, __pyx_n_u_c, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(1, 187, __pyx_L1_error)
+  __pyx_t_2 = (__pyx_t_1 != 0);
+  if (__pyx_t_2) {
+
+    /* "View.MemoryView":188
+ *         cdef int bufmode = -1
+ *         if self.mode == u"c":
+ *             bufmode = PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS             # <<<<<<<<<<<<<<
+ *         elif self.mode == u"fortran":
+ *             bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS
+ */
+    __pyx_v_bufmode = (PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS);
+
+    /* "View.MemoryView":187
+ *     def __getbuffer__(self, Py_buffer *info, int flags):
+ *         cdef int bufmode = -1
+ *         if self.mode == u"c":             # <<<<<<<<<<<<<<
+ *             bufmode = PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS
+ *         elif self.mode == u"fortran":
+ */
+    goto __pyx_L3;
+  }
+
+  /* "View.MemoryView":189
+ *         if self.mode == u"c":
+ *             bufmode = PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS
+ *         elif self.mode == u"fortran":             # <<<<<<<<<<<<<<
+ *             bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS
+ *         if not (flags & bufmode):
+ */
+  __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_v_self->mode, __pyx_n_u_fortran, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(1, 189, __pyx_L1_error)
+  __pyx_t_1 = (__pyx_t_2 != 0);
+  if (__pyx_t_1) {
+
+    /* "View.MemoryView":190
+ *             bufmode = PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS
+ *         elif self.mode == u"fortran":
+ *             bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS             # <<<<<<<<<<<<<<
+ *         if not (flags & bufmode):
+ *             raise ValueError("Can only create a buffer that is contiguous in memory.")
+ */
+    __pyx_v_bufmode = (PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS);
+
+    /* "View.MemoryView":189
+ *         if self.mode == u"c":
+ *             bufmode = PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS
+ *         elif self.mode == u"fortran":             # <<<<<<<<<<<<<<
+ *             bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS
+ *         if not (flags & bufmode):
+ */
+  }
+  __pyx_L3:;
+
+  /* "View.MemoryView":191
+ *         elif self.mode == u"fortran":
+ *             bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS
+ *         if not (flags & bufmode):             # <<<<<<<<<<<<<<
+ *             raise ValueError("Can only create a buffer that is contiguous in memory.")
+ *         info.buf = self.data
+ */
+  __pyx_t_1 = ((!((__pyx_v_flags & __pyx_v_bufmode) != 0)) != 0);
+  if (unlikely(__pyx_t_1)) {
+
+    /* "View.MemoryView":192
+ *             bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS
+ *         if not (flags & bufmode):
+ *             raise ValueError("Can only create a buffer that is contiguous in memory.")             # <<<<<<<<<<<<<<
+ *         info.buf = self.data
+ *         info.len = self.len
+ */
+    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__9, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 192, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    __Pyx_Raise(__pyx_t_3, 0, 0, 0);
+    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+    __PYX_ERR(1, 192, __pyx_L1_error)
+
+    /* "View.MemoryView":191
+ *         elif self.mode == u"fortran":
+ *             bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS
+ *         if not (flags & bufmode):             # <<<<<<<<<<<<<<
+ *             raise ValueError("Can only create a buffer that is contiguous in memory.")
+ *         info.buf = self.data
+ */
+  }
+
+  /* "View.MemoryView":193
+ *         if not (flags & bufmode):
+ *             raise ValueError("Can only create a buffer that is contiguous in memory.")
+ *         info.buf = self.data             # <<<<<<<<<<<<<<
+ *         info.len = self.len
+ *         info.ndim = self.ndim
+ */
+  __pyx_t_4 = __pyx_v_self->data;
+  __pyx_v_info->buf = __pyx_t_4;
+
+  /* "View.MemoryView":194
+ *             raise ValueError("Can only create a buffer that is contiguous in memory.")
+ *         info.buf = self.data
+ *         info.len = self.len             # <<<<<<<<<<<<<<
+ *         info.ndim = self.ndim
+ *         info.shape = self._shape
+ */
+  __pyx_t_5 = __pyx_v_self->len;
+  __pyx_v_info->len = __pyx_t_5;
+
+  /* "View.MemoryView":195
+ *         info.buf = self.data
+ *         info.len = self.len
+ *         info.ndim = self.ndim             # <<<<<<<<<<<<<<
+ *         info.shape = self._shape
+ *         info.strides = self._strides
+ */
+  __pyx_t_6 = __pyx_v_self->ndim;
+  __pyx_v_info->ndim = __pyx_t_6;
+
+  /* "View.MemoryView":196
+ *         info.len = self.len
+ *         info.ndim = self.ndim
+ *         info.shape = self._shape             # <<<<<<<<<<<<<<
+ *         info.strides = self._strides
+ *         info.suboffsets = NULL
+ */
+  __pyx_t_7 = __pyx_v_self->_shape;
+  __pyx_v_info->shape = __pyx_t_7;
+
+  /* "View.MemoryView":197
+ *         info.ndim = self.ndim
+ *         info.shape = self._shape
+ *         info.strides = self._strides             # <<<<<<<<<<<<<<
+ *         info.suboffsets = NULL
+ *         info.itemsize = self.itemsize
+ */
+  __pyx_t_7 = __pyx_v_self->_strides;
+  __pyx_v_info->strides = __pyx_t_7;
+
+  /* "View.MemoryView":198
+ *         info.shape = self._shape
+ *         info.strides = self._strides
+ *         info.suboffsets = NULL             # <<<<<<<<<<<<<<
+ *         info.itemsize = self.itemsize
+ *         info.readonly = 0
+ */
+  __pyx_v_info->suboffsets = NULL;
+
+  /* "View.MemoryView":199
+ *         info.strides = self._strides
+ *         info.suboffsets = NULL
+ *         info.itemsize = self.itemsize             # <<<<<<<<<<<<<<
+ *         info.readonly = 0
+ * 
+ */
+  __pyx_t_5 = __pyx_v_self->itemsize;
+  __pyx_v_info->itemsize = __pyx_t_5;
+
+  /* "View.MemoryView":200
+ *         info.suboffsets = NULL
+ *         info.itemsize = self.itemsize
+ *         info.readonly = 0             # <<<<<<<<<<<<<<
+ * 
+ *         if flags & PyBUF_FORMAT:
+ */
+  __pyx_v_info->readonly = 0;
+
+  /* "View.MemoryView":202
+ *         info.readonly = 0
+ * 
+ *         if flags & PyBUF_FORMAT:             # <<<<<<<<<<<<<<
+ *             info.format = self.format
+ *         else:
+ */
+  __pyx_t_1 = ((__pyx_v_flags & PyBUF_FORMAT) != 0);
+  if (__pyx_t_1) {
+
+    /* "View.MemoryView":203
+ * 
+ *         if flags & PyBUF_FORMAT:
+ *             info.format = self.format             # <<<<<<<<<<<<<<
+ *         else:
+ *             info.format = NULL
+ */
+    __pyx_t_4 = __pyx_v_self->format;
+    __pyx_v_info->format = __pyx_t_4;
+
+    /* "View.MemoryView":202
+ *         info.readonly = 0
+ * 
+ *         if flags & PyBUF_FORMAT:             # <<<<<<<<<<<<<<
+ *             info.format = self.format
+ *         else:
+ */
+    goto __pyx_L5;
+  }
+
+  /* "View.MemoryView":205
+ *             info.format = self.format
+ *         else:
+ *             info.format = NULL             # <<<<<<<<<<<<<<
+ * 
+ *         info.obj = self
+ */
+  /*else*/ {
+    __pyx_v_info->format = NULL;
+  }
+  __pyx_L5:;
+
+  /* "View.MemoryView":207
+ *             info.format = NULL
+ * 
+ *         info.obj = self             # <<<<<<<<<<<<<<
+ * 
+ *     __pyx_getbuffer = capsule(<void *> &__pyx_array_getbuffer, "getbuffer(obj, view, flags)")
+ */
+  __Pyx_INCREF(((PyObject *)__pyx_v_self));
+  __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
+  __Pyx_GOTREF(__pyx_v_info->obj);
+  __Pyx_DECREF(__pyx_v_info->obj);
+  __pyx_v_info->obj = ((PyObject *)__pyx_v_self);
+
+  /* "View.MemoryView":185
+ * 
+ *     @cname('getbuffer')
+ *     def __getbuffer__(self, Py_buffer *info, int flags):             # <<<<<<<<<<<<<<
+ *         cdef int bufmode = -1
+ *         if self.mode == u"c":
+ */
+
+  /* function exit code */
+  __pyx_r = 0;
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_AddTraceback("View.MemoryView.array.__getbuffer__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = -1;
+  if (__pyx_v_info->obj != NULL) {
+    __Pyx_GOTREF(__pyx_v_info->obj);
+    __Pyx_DECREF(__pyx_v_info->obj); __pyx_v_info->obj = 0;
+  }
+  goto __pyx_L2;
+  __pyx_L0:;
+  if (__pyx_v_info->obj == Py_None) {
+    __Pyx_GOTREF(__pyx_v_info->obj);
+    __Pyx_DECREF(__pyx_v_info->obj); __pyx_v_info->obj = 0;
+  }
+  __pyx_L2:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "View.MemoryView":211
+ *     __pyx_getbuffer = capsule(<void *> &__pyx_array_getbuffer, "getbuffer(obj, view, flags)")
+ * 
+ *     def __dealloc__(array self):             # <<<<<<<<<<<<<<
+ *         if self.callback_free_data != NULL:
+ *             self.callback_free_data(self.data)
+ */
+
+/* Python wrapper */
+static void __pyx_array___dealloc__(PyObject *__pyx_v_self); /*proto*/
+static void __pyx_array___dealloc__(PyObject *__pyx_v_self) {
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0);
+  __pyx_array___pyx_pf_15View_dot_MemoryView_5array_4__dealloc__(((struct __pyx_array_obj *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+}
+
+static void __pyx_array___pyx_pf_15View_dot_MemoryView_5array_4__dealloc__(struct __pyx_array_obj *__pyx_v_self) {
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  __Pyx_RefNannySetupContext("__dealloc__", 0);
+
+  /* "View.MemoryView":212
+ * 
+ *     def __dealloc__(array self):
+ *         if self.callback_free_data != NULL:             # <<<<<<<<<<<<<<
+ *             self.callback_free_data(self.data)
+ *         elif self.free_data:
+ */
+  __pyx_t_1 = ((__pyx_v_self->callback_free_data != NULL) != 0);
+  if (__pyx_t_1) {
+
+    /* "View.MemoryView":213
+ *     def __dealloc__(array self):
+ *         if self.callback_free_data != NULL:
+ *             self.callback_free_data(self.data)             # <<<<<<<<<<<<<<
+ *         elif self.free_data:
+ *             if self.dtype_is_object:
+ */
+    __pyx_v_self->callback_free_data(__pyx_v_self->data);
+
+    /* "View.MemoryView":212
+ * 
+ *     def __dealloc__(array self):
+ *         if self.callback_free_data != NULL:             # <<<<<<<<<<<<<<
+ *             self.callback_free_data(self.data)
+ *         elif self.free_data:
+ */
+    goto __pyx_L3;
+  }
+
+  /* "View.MemoryView":214
+ *         if self.callback_free_data != NULL:
+ *             self.callback_free_data(self.data)
+ *         elif self.free_data:             # <<<<<<<<<<<<<<
+ *             if self.dtype_is_object:
+ *                 refcount_objects_in_slice(self.data, self._shape,
+ */
+  __pyx_t_1 = (__pyx_v_self->free_data != 0);
+  if (__pyx_t_1) {
+
+    /* "View.MemoryView":215
+ *             self.callback_free_data(self.data)
+ *         elif self.free_data:
+ *             if self.dtype_is_object:             # <<<<<<<<<<<<<<
+ *                 refcount_objects_in_slice(self.data, self._shape,
+ *                                           self._strides, self.ndim, False)
+ */
+    __pyx_t_1 = (__pyx_v_self->dtype_is_object != 0);
+    if (__pyx_t_1) {
+
+      /* "View.MemoryView":216
+ *         elif self.free_data:
+ *             if self.dtype_is_object:
+ *                 refcount_objects_in_slice(self.data, self._shape,             # <<<<<<<<<<<<<<
+ *                                           self._strides, self.ndim, False)
+ *             free(self.data)
+ */
+      __pyx_memoryview_refcount_objects_in_slice(__pyx_v_self->data, __pyx_v_self->_shape, __pyx_v_self->_strides, __pyx_v_self->ndim, 0);
+
+      /* "View.MemoryView":215
+ *             self.callback_free_data(self.data)
+ *         elif self.free_data:
+ *             if self.dtype_is_object:             # <<<<<<<<<<<<<<
+ *                 refcount_objects_in_slice(self.data, self._shape,
+ *                                           self._strides, self.ndim, False)
+ */
+    }
+
+    /* "View.MemoryView":218
+ *                 refcount_objects_in_slice(self.data, self._shape,
+ *                                           self._strides, self.ndim, False)
+ *             free(self.data)             # <<<<<<<<<<<<<<
+ *         PyObject_Free(self._shape)
+ * 
+ */
+    free(__pyx_v_self->data);
+
+    /* "View.MemoryView":214
+ *         if self.callback_free_data != NULL:
+ *             self.callback_free_data(self.data)
+ *         elif self.free_data:             # <<<<<<<<<<<<<<
+ *             if self.dtype_is_object:
+ *                 refcount_objects_in_slice(self.data, self._shape,
+ */
+  }
+  __pyx_L3:;
+
+  /* "View.MemoryView":219
+ *                                           self._strides, self.ndim, False)
+ *             free(self.data)
+ *         PyObject_Free(self._shape)             # <<<<<<<<<<<<<<
+ * 
+ *     @property
+ */
+  PyObject_Free(__pyx_v_self->_shape);
+
+  /* "View.MemoryView":211
+ *     __pyx_getbuffer = capsule(<void *> &__pyx_array_getbuffer, "getbuffer(obj, view, flags)")
+ * 
+ *     def __dealloc__(array self):             # <<<<<<<<<<<<<<
+ *         if self.callback_free_data != NULL:
+ *             self.callback_free_data(self.data)
+ */
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+}
+
+/* "View.MemoryView":222
+ * 
+ *     @property
+ *     def memview(self):             # <<<<<<<<<<<<<<
+ *         return self.get_memview()
+ * 
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_15View_dot_MemoryView_5array_7memview_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_15View_dot_MemoryView_5array_7memview_1__get__(PyObject *__pyx_v_self) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_15View_dot_MemoryView_5array_7memview___get__(((struct __pyx_array_obj *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_15View_dot_MemoryView_5array_7memview___get__(struct __pyx_array_obj *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  __Pyx_RefNannySetupContext("__get__", 0);
+
+  /* "View.MemoryView":223
+ *     @property
+ *     def memview(self):
+ *         return self.get_memview()             # <<<<<<<<<<<<<<
+ * 
+ *     @cname('get_memview')
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = ((struct __pyx_vtabstruct_array *)__pyx_v_self->__pyx_vtab)->get_memview(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 223, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
+  goto __pyx_L0;
+
+  /* "View.MemoryView":222
+ * 
+ *     @property
+ *     def memview(self):             # <<<<<<<<<<<<<<
+ *         return self.get_memview()
+ * 
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("View.MemoryView.array.memview.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "View.MemoryView":226
+ * 
+ *     @cname('get_memview')
+ *     cdef get_memview(self):             # <<<<<<<<<<<<<<
+ *         flags =  PyBUF_ANY_CONTIGUOUS|PyBUF_FORMAT|PyBUF_WRITABLE
+ *         return  memoryview(self, flags, self.dtype_is_object)
+ */
+
+static PyObject *__pyx_array_get_memview(struct __pyx_array_obj *__pyx_v_self) {
+  int __pyx_v_flags;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  __Pyx_RefNannySetupContext("get_memview", 0);
+
+  /* "View.MemoryView":227
+ *     @cname('get_memview')
+ *     cdef get_memview(self):
+ *         flags =  PyBUF_ANY_CONTIGUOUS|PyBUF_FORMAT|PyBUF_WRITABLE             # <<<<<<<<<<<<<<
+ *         return  memoryview(self, flags, self.dtype_is_object)
+ * 
+ */
+  __pyx_v_flags = ((PyBUF_ANY_CONTIGUOUS | PyBUF_FORMAT) | PyBUF_WRITABLE);
+
+  /* "View.MemoryView":228
+ *     cdef get_memview(self):
+ *         flags =  PyBUF_ANY_CONTIGUOUS|PyBUF_FORMAT|PyBUF_WRITABLE
+ *         return  memoryview(self, flags, self.dtype_is_object)             # <<<<<<<<<<<<<<
+ * 
+ *     def __len__(self):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_flags); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 228, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_v_self->dtype_is_object); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 228, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 228, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_INCREF(((PyObject *)__pyx_v_self));
+  __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
+  PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_v_self));
+  __Pyx_GIVEREF(__pyx_t_1);
+  PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_1);
+  __Pyx_GIVEREF(__pyx_t_2);
+  PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_t_2);
+  __pyx_t_1 = 0;
+  __pyx_t_2 = 0;
+  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_memoryview_type), __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 228, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __pyx_r = __pyx_t_2;
+  __pyx_t_2 = 0;
+  goto __pyx_L0;
+
+  /* "View.MemoryView":226
+ * 
+ *     @cname('get_memview')
+ *     cdef get_memview(self):             # <<<<<<<<<<<<<<
+ *         flags =  PyBUF_ANY_CONTIGUOUS|PyBUF_FORMAT|PyBUF_WRITABLE
+ *         return  memoryview(self, flags, self.dtype_is_object)
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_AddTraceback("View.MemoryView.array.get_memview", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = 0;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "View.MemoryView":230
+ *         return  memoryview(self, flags, self.dtype_is_object)
+ * 
+ *     def __len__(self):             # <<<<<<<<<<<<<<
+ *         return self._shape[0]
+ * 
+ */
+
+/* Python wrapper */
+static Py_ssize_t __pyx_array___len__(PyObject *__pyx_v_self); /*proto*/
+static Py_ssize_t __pyx_array___len__(PyObject *__pyx_v_self) {
+  Py_ssize_t __pyx_r;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__len__ (wrapper)", 0);
+  __pyx_r = __pyx_array___pyx_pf_15View_dot_MemoryView_5array_6__len__(((struct __pyx_array_obj *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static Py_ssize_t __pyx_array___pyx_pf_15View_dot_MemoryView_5array_6__len__(struct __pyx_array_obj *__pyx_v_self) {
+  Py_ssize_t __pyx_r;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__len__", 0);
+
+  /* "View.MemoryView":231
+ * 
+ *     def __len__(self):
+ *         return self._shape[0]             # <<<<<<<<<<<<<<
+ * 
+ *     def __getattr__(self, attr):
+ */
+  __pyx_r = (__pyx_v_self->_shape[0]);
+  goto __pyx_L0;
+
+  /* "View.MemoryView":230
+ *         return  memoryview(self, flags, self.dtype_is_object)
+ * 
+ *     def __len__(self):             # <<<<<<<<<<<<<<
+ *         return self._shape[0]
+ * 
+ */
+
+  /* function exit code */
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "View.MemoryView":233
+ *         return self._shape[0]
+ * 
+ *     def __getattr__(self, attr):             # <<<<<<<<<<<<<<
+ *         return getattr(self.memview, attr)
+ * 
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_array___getattr__(PyObject *__pyx_v_self, PyObject *__pyx_v_attr); /*proto*/
+static PyObject *__pyx_array___getattr__(PyObject *__pyx_v_self, PyObject *__pyx_v_attr) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__getattr__ (wrapper)", 0);
+  __pyx_r = __pyx_array___pyx_pf_15View_dot_MemoryView_5array_8__getattr__(((struct __pyx_array_obj *)__pyx_v_self), ((PyObject *)__pyx_v_attr));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_array___pyx_pf_15View_dot_MemoryView_5array_8__getattr__(struct __pyx_array_obj *__pyx_v_self, PyObject *__pyx_v_attr) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  __Pyx_RefNannySetupContext("__getattr__", 0);
+
+  /* "View.MemoryView":234
+ * 
+ *     def __getattr__(self, attr):
+ *         return getattr(self.memview, attr)             # <<<<<<<<<<<<<<
+ * 
+ *     def __getitem__(self, item):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_memview); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 234, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_2 = __Pyx_GetAttr(__pyx_t_1, __pyx_v_attr); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 234, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_r = __pyx_t_2;
+  __pyx_t_2 = 0;
+  goto __pyx_L0;
+
+  /* "View.MemoryView":233
+ *         return self._shape[0]
+ * 
+ *     def __getattr__(self, attr):             # <<<<<<<<<<<<<<
+ *         return getattr(self.memview, attr)
+ * 
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_AddTraceback("View.MemoryView.array.__getattr__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "View.MemoryView":236
+ *         return getattr(self.memview, attr)
+ * 
+ *     def __getitem__(self, item):             # <<<<<<<<<<<<<<
+ *         return self.memview[item]
+ * 
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_array___getitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_item); /*proto*/
+static PyObject *__pyx_array___getitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_item) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__getitem__ (wrapper)", 0);
+  __pyx_r = __pyx_array___pyx_pf_15View_dot_MemoryView_5array_10__getitem__(((struct __pyx_array_obj *)__pyx_v_self), ((PyObject *)__pyx_v_item));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_array___pyx_pf_15View_dot_MemoryView_5array_10__getitem__(struct __pyx_array_obj *__pyx_v_self, PyObject *__pyx_v_item) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  __Pyx_RefNannySetupContext("__getitem__", 0);
+
+  /* "View.MemoryView":237
+ * 
+ *     def __getitem__(self, item):
+ *         return self.memview[item]             # <<<<<<<<<<<<<<
+ * 
+ *     def __setitem__(self, item, value):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_memview); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 237, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_t_1, __pyx_v_item); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 237, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_r = __pyx_t_2;
+  __pyx_t_2 = 0;
+  goto __pyx_L0;
+
+  /* "View.MemoryView":236
+ *         return getattr(self.memview, attr)
+ * 
+ *     def __getitem__(self, item):             # <<<<<<<<<<<<<<
+ *         return self.memview[item]
+ * 
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_AddTraceback("View.MemoryView.array.__getitem__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "View.MemoryView":239
+ *         return self.memview[item]
+ * 
+ *     def __setitem__(self, item, value):             # <<<<<<<<<<<<<<
+ *         self.memview[item] = value
+ * 
+ */
+
+/* Python wrapper */
+static int __pyx_array___setitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_item, PyObject *__pyx_v_value); /*proto*/
+static int __pyx_array___setitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_item, PyObject *__pyx_v_value) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__setitem__ (wrapper)", 0);
+  __pyx_r = __pyx_array___pyx_pf_15View_dot_MemoryView_5array_12__setitem__(((struct __pyx_array_obj *)__pyx_v_self), ((PyObject *)__pyx_v_item), ((PyObject *)__pyx_v_value));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static int __pyx_array___pyx_pf_15View_dot_MemoryView_5array_12__setitem__(struct __pyx_array_obj *__pyx_v_self, PyObject *__pyx_v_item, PyObject *__pyx_v_value) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  __Pyx_RefNannySetupContext("__setitem__", 0);
+
+  /* "View.MemoryView":240
+ * 
+ *     def __setitem__(self, item, value):
+ *         self.memview[item] = value             # <<<<<<<<<<<<<<
+ * 
+ * 
+ */
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_memview); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 240, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (unlikely(PyObject_SetItem(__pyx_t_1, __pyx_v_item, __pyx_v_value) < 0)) __PYX_ERR(1, 240, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+
+  /* "View.MemoryView":239
+ *         return self.memview[item]
+ * 
+ *     def __setitem__(self, item, value):             # <<<<<<<<<<<<<<
+ *         self.memview[item] = value
+ * 
+ */
+
+  /* function exit code */
+  __pyx_r = 0;
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("View.MemoryView.array.__setitem__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = -1;
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "(tree fragment)":1
+ * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
+ *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
+ * def __setstate_cython__(self, __pyx_state):
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw___pyx_array_1__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static PyObject *__pyx_pw___pyx_array_1__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
+  __pyx_r = __pyx_pf___pyx_array___reduce_cython__(((struct __pyx_array_obj *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf___pyx_array___reduce_cython__(CYTHON_UNUSED struct __pyx_array_obj *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  __Pyx_RefNannySetupContext("__reduce_cython__", 0);
+
+  /* "(tree fragment)":2
+ * def __reduce_cython__(self):
+ *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
+ * def __setstate_cython__(self, __pyx_state):
+ *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
+ */
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__10, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_Raise(__pyx_t_1, 0, 0, 0);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __PYX_ERR(1, 2, __pyx_L1_error)
+
+  /* "(tree fragment)":1
+ * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
+ *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
+ * def __setstate_cython__(self, __pyx_state):
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("View.MemoryView.array.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "(tree fragment)":3
+ * def __reduce_cython__(self):
+ *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
+ * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
+ *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw___pyx_array_3__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/
+static PyObject *__pyx_pw___pyx_array_3__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
+  __pyx_r = __pyx_pf___pyx_array_2__setstate_cython__(((struct __pyx_array_obj *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf___pyx_array_2__setstate_cython__(CYTHON_UNUSED struct __pyx_array_obj *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  __Pyx_RefNannySetupContext("__setstate_cython__", 0);
+
+  /* "(tree fragment)":4
+ *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
+ * def __setstate_cython__(self, __pyx_state):
+ *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
+ */
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__11, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 4, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_Raise(__pyx_t_1, 0, 0, 0);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __PYX_ERR(1, 4, __pyx_L1_error)
+
+  /* "(tree fragment)":3
+ * def __reduce_cython__(self):
+ *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
+ * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
+ *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("View.MemoryView.array.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "View.MemoryView":244
+ * 
+ * @cname("__pyx_array_new")
+ * cdef array array_cwrapper(tuple shape, Py_ssize_t itemsize, char *format,             # <<<<<<<<<<<<<<
+ *                           char *mode, char *buf):
+ *     cdef array result
+ */
+
+static struct __pyx_array_obj *__pyx_array_new(PyObject *__pyx_v_shape, Py_ssize_t __pyx_v_itemsize, char *__pyx_v_format, char *__pyx_v_mode, char *__pyx_v_buf) {
+  struct __pyx_array_obj *__pyx_v_result = 0;
+  struct __pyx_array_obj *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
+  PyObject *__pyx_t_5 = NULL;
+  __Pyx_RefNannySetupContext("array_cwrapper", 0);
+
+  /* "View.MemoryView":248
+ *     cdef array result
+ * 
+ *     if buf == NULL:             # <<<<<<<<<<<<<<
+ *         result = array(shape, itemsize, format, mode.decode('ASCII'))
+ *     else:
+ */
+  __pyx_t_1 = ((__pyx_v_buf == NULL) != 0);
+  if (__pyx_t_1) {
+
+    /* "View.MemoryView":249
+ * 
+ *     if buf == NULL:
+ *         result = array(shape, itemsize, format, mode.decode('ASCII'))             # <<<<<<<<<<<<<<
+ *     else:
+ *         result = array(shape, itemsize, format, mode.decode('ASCII'),
+ */
+    __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_itemsize); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 249, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_2);
+    __pyx_t_3 = __Pyx_PyBytes_FromString(__pyx_v_format); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 249, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    __pyx_t_4 = __Pyx_decode_c_string(__pyx_v_mode, 0, strlen(__pyx_v_mode), NULL, NULL, PyUnicode_DecodeASCII); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 249, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
+    __pyx_t_5 = PyTuple_New(4); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 249, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_5);
+    __Pyx_INCREF(__pyx_v_shape);
+    __Pyx_GIVEREF(__pyx_v_shape);
+    PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_shape);
+    __Pyx_GIVEREF(__pyx_t_2);
+    PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_2);
+    __Pyx_GIVEREF(__pyx_t_3);
+    PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_t_3);
+    __Pyx_GIVEREF(__pyx_t_4);
+    PyTuple_SET_ITEM(__pyx_t_5, 3, __pyx_t_4);
+    __pyx_t_2 = 0;
+    __pyx_t_3 = 0;
+    __pyx_t_4 = 0;
+    __pyx_t_4 = __Pyx_PyObject_Call(((PyObject *)__pyx_array_type), __pyx_t_5, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 249, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
+    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+    __pyx_v_result = ((struct __pyx_array_obj *)__pyx_t_4);
+    __pyx_t_4 = 0;
+
+    /* "View.MemoryView":248
+ *     cdef array result
+ * 
+ *     if buf == NULL:             # <<<<<<<<<<<<<<
+ *         result = array(shape, itemsize, format, mode.decode('ASCII'))
+ *     else:
+ */
+    goto __pyx_L3;
+  }
+
+  /* "View.MemoryView":251
+ *         result = array(shape, itemsize, format, mode.decode('ASCII'))
+ *     else:
+ *         result = array(shape, itemsize, format, mode.decode('ASCII'),             # <<<<<<<<<<<<<<
+ *                        allocate_buffer=False)
+ *         result.data = buf
+ */
+  /*else*/ {
+    __pyx_t_4 = PyInt_FromSsize_t(__pyx_v_itemsize); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 251, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
+    __pyx_t_5 = __Pyx_PyBytes_FromString(__pyx_v_format); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 251, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_5);
+    __pyx_t_3 = __Pyx_decode_c_string(__pyx_v_mode, 0, strlen(__pyx_v_mode), NULL, NULL, PyUnicode_DecodeASCII); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 251, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    __pyx_t_2 = PyTuple_New(4); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 251, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_2);
+    __Pyx_INCREF(__pyx_v_shape);
+    __Pyx_GIVEREF(__pyx_v_shape);
+    PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_shape);
+    __Pyx_GIVEREF(__pyx_t_4);
+    PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_4);
+    __Pyx_GIVEREF(__pyx_t_5);
+    PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_t_5);
+    __Pyx_GIVEREF(__pyx_t_3);
+    PyTuple_SET_ITEM(__pyx_t_2, 3, __pyx_t_3);
+    __pyx_t_4 = 0;
+    __pyx_t_5 = 0;
+    __pyx_t_3 = 0;
+
+    /* "View.MemoryView":252
+ *     else:
+ *         result = array(shape, itemsize, format, mode.decode('ASCII'),
+ *                        allocate_buffer=False)             # <<<<<<<<<<<<<<
+ *         result.data = buf
+ * 
+ */
+    __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 252, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_allocate_buffer, Py_False) < 0) __PYX_ERR(1, 252, __pyx_L1_error)
+
+    /* "View.MemoryView":251
+ *         result = array(shape, itemsize, format, mode.decode('ASCII'))
+ *     else:
+ *         result = array(shape, itemsize, format, mode.decode('ASCII'),             # <<<<<<<<<<<<<<
+ *                        allocate_buffer=False)
+ *         result.data = buf
+ */
+    __pyx_t_5 = __Pyx_PyObject_Call(((PyObject *)__pyx_array_type), __pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 251, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_5);
+    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+    __pyx_v_result = ((struct __pyx_array_obj *)__pyx_t_5);
+    __pyx_t_5 = 0;
+
+    /* "View.MemoryView":253
+ *         result = array(shape, itemsize, format, mode.decode('ASCII'),
+ *                        allocate_buffer=False)
+ *         result.data = buf             # <<<<<<<<<<<<<<
+ * 
+ *     return result
+ */
+    __pyx_v_result->data = __pyx_v_buf;
+  }
+  __pyx_L3:;
+
+  /* "View.MemoryView":255
+ *         result.data = buf
+ * 
+ *     return result             # <<<<<<<<<<<<<<
+ * 
+ * 
+ */
+  __Pyx_XDECREF(((PyObject *)__pyx_r));
+  __Pyx_INCREF(((PyObject *)__pyx_v_result));
+  __pyx_r = __pyx_v_result;
+  goto __pyx_L0;
+
+  /* "View.MemoryView":244
+ * 
+ * @cname("__pyx_array_new")
+ * cdef array array_cwrapper(tuple shape, Py_ssize_t itemsize, char *format,             # <<<<<<<<<<<<<<
+ *                           char *mode, char *buf):
+ *     cdef array result
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_XDECREF(__pyx_t_5);
+  __Pyx_AddTraceback("View.MemoryView.array_cwrapper", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = 0;
+  __pyx_L0:;
+  __Pyx_XDECREF((PyObject *)__pyx_v_result);
+  __Pyx_XGIVEREF((PyObject *)__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "View.MemoryView":281
+ * cdef class Enum(object):
+ *     cdef object name
+ *     def __init__(self, name):             # <<<<<<<<<<<<<<
+ *         self.name = name
+ *     def __repr__(self):
+ */
+
+/* Python wrapper */
+static int __pyx_MemviewEnum___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static int __pyx_MemviewEnum___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_name = 0;
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_name,0};
+    PyObject* values[1] = {0};
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(1, 281, __pyx_L3_error)
+      }
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
+      goto __pyx_L5_argtuple_error;
+    } else {
+      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+    }
+    __pyx_v_name = values[0];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("__init__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 281, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("View.MemoryView.Enum.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return -1;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_MemviewEnum___pyx_pf_15View_dot_MemoryView_4Enum___init__(((struct __pyx_MemviewEnum_obj *)__pyx_v_self), __pyx_v_name);
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static int __pyx_MemviewEnum___pyx_pf_15View_dot_MemoryView_4Enum___init__(struct __pyx_MemviewEnum_obj *__pyx_v_self, PyObject *__pyx_v_name) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__init__", 0);
+
+  /* "View.MemoryView":282
+ *     cdef object name
+ *     def __init__(self, name):
+ *         self.name = name             # <<<<<<<<<<<<<<
+ *     def __repr__(self):
+ *         return self.name
+ */
+  __Pyx_INCREF(__pyx_v_name);
+  __Pyx_GIVEREF(__pyx_v_name);
+  __Pyx_GOTREF(__pyx_v_self->name);
+  __Pyx_DECREF(__pyx_v_self->name);
+  __pyx_v_self->name = __pyx_v_name;
+
+  /* "View.MemoryView":281
+ * cdef class Enum(object):
+ *     cdef object name
+ *     def __init__(self, name):             # <<<<<<<<<<<<<<
+ *         self.name = name
+ *     def __repr__(self):
+ */
+
+  /* function exit code */
+  __pyx_r = 0;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "View.MemoryView":283
+ *     def __init__(self, name):
+ *         self.name = name
+ *     def __repr__(self):             # <<<<<<<<<<<<<<
+ *         return self.name
+ * 
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_MemviewEnum___repr__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_MemviewEnum___repr__(PyObject *__pyx_v_self) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__repr__ (wrapper)", 0);
+  __pyx_r = __pyx_MemviewEnum___pyx_pf_15View_dot_MemoryView_4Enum_2__repr__(((struct __pyx_MemviewEnum_obj *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_MemviewEnum___pyx_pf_15View_dot_MemoryView_4Enum_2__repr__(struct __pyx_MemviewEnum_obj *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__repr__", 0);
+
+  /* "View.MemoryView":284
+ *         self.name = name
+ *     def __repr__(self):
+ *         return self.name             # <<<<<<<<<<<<<<
+ * 
+ * cdef generic = Enum("<strided and direct or indirect>")
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(__pyx_v_self->name);
+  __pyx_r = __pyx_v_self->name;
+  goto __pyx_L0;
+
+  /* "View.MemoryView":283
+ *     def __init__(self, name):
+ *         self.name = name
+ *     def __repr__(self):             # <<<<<<<<<<<<<<
+ *         return self.name
+ * 
+ */
+
+  /* function exit code */
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "(tree fragment)":1
+ * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
+ *     cdef tuple state
+ *     cdef object _dict
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw___pyx_MemviewEnum_1__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static PyObject *__pyx_pw___pyx_MemviewEnum_1__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
+  __pyx_r = __pyx_pf___pyx_MemviewEnum___reduce_cython__(((struct __pyx_MemviewEnum_obj *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf___pyx_MemviewEnum___reduce_cython__(struct __pyx_MemviewEnum_obj *__pyx_v_self) {
+  PyObject *__pyx_v_state = 0;
+  PyObject *__pyx_v__dict = 0;
+  int __pyx_v_use_setstate;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_2;
+  int __pyx_t_3;
+  PyObject *__pyx_t_4 = NULL;
+  PyObject *__pyx_t_5 = NULL;
+  __Pyx_RefNannySetupContext("__reduce_cython__", 0);
+
+  /* "(tree fragment)":5
+ *     cdef object _dict
+ *     cdef bint use_setstate
+ *     state = (self.name,)             # <<<<<<<<<<<<<<
+ *     _dict = getattr(self, '__dict__', None)
+ *     if _dict is not None:
+ */
+  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_INCREF(__pyx_v_self->name);
+  __Pyx_GIVEREF(__pyx_v_self->name);
+  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_self->name);
+  __pyx_v_state = ((PyObject*)__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "(tree fragment)":6
+ *     cdef bint use_setstate
+ *     state = (self.name,)
+ *     _dict = getattr(self, '__dict__', None)             # <<<<<<<<<<<<<<
+ *     if _dict is not None:
+ *         state += (_dict,)
+ */
+  __pyx_t_1 = __Pyx_GetAttr3(((PyObject *)__pyx_v_self), __pyx_n_s_dict, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 6, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v__dict = __pyx_t_1;
+  __pyx_t_1 = 0;
+
+  /* "(tree fragment)":7
+ *     state = (self.name,)
+ *     _dict = getattr(self, '__dict__', None)
+ *     if _dict is not None:             # <<<<<<<<<<<<<<
+ *         state += (_dict,)
+ *         use_setstate = True
+ */
+  __pyx_t_2 = (__pyx_v__dict != Py_None);
+  __pyx_t_3 = (__pyx_t_2 != 0);
+  if (__pyx_t_3) {
+
+    /* "(tree fragment)":8
+ *     _dict = getattr(self, '__dict__', None)
+ *     if _dict is not None:
+ *         state += (_dict,)             # <<<<<<<<<<<<<<
+ *         use_setstate = True
+ *     else:
+ */
+    __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 8, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_1);
+    __Pyx_INCREF(__pyx_v__dict);
+    __Pyx_GIVEREF(__pyx_v__dict);
+    PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v__dict);
+    __pyx_t_4 = PyNumber_InPlaceAdd(__pyx_v_state, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 8, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __Pyx_DECREF_SET(__pyx_v_state, ((PyObject*)__pyx_t_4));
+    __pyx_t_4 = 0;
+
+    /* "(tree fragment)":9
+ *     if _dict is not None:
+ *         state += (_dict,)
+ *         use_setstate = True             # <<<<<<<<<<<<<<
+ *     else:
+ *         use_setstate = self.name is not None
+ */
+    __pyx_v_use_setstate = 1;
+
+    /* "(tree fragment)":7
+ *     state = (self.name,)
+ *     _dict = getattr(self, '__dict__', None)
+ *     if _dict is not None:             # <<<<<<<<<<<<<<
+ *         state += (_dict,)
+ *         use_setstate = True
+ */
+    goto __pyx_L3;
+  }
+
+  /* "(tree fragment)":11
+ *         use_setstate = True
+ *     else:
+ *         use_setstate = self.name is not None             # <<<<<<<<<<<<<<
+ *     if use_setstate:
+ *         return __pyx_unpickle_Enum, (type(self), 0xb068931, None), state
+ */
+  /*else*/ {
+    __pyx_t_3 = (__pyx_v_self->name != Py_None);
+    __pyx_v_use_setstate = __pyx_t_3;
+  }
+  __pyx_L3:;
+
+  /* "(tree fragment)":12
+ *     else:
+ *         use_setstate = self.name is not None
+ *     if use_setstate:             # <<<<<<<<<<<<<<
+ *         return __pyx_unpickle_Enum, (type(self), 0xb068931, None), state
+ *     else:
+ */
+  __pyx_t_3 = (__pyx_v_use_setstate != 0);
+  if (__pyx_t_3) {
+
+    /* "(tree fragment)":13
+ *         use_setstate = self.name is not None
+ *     if use_setstate:
+ *         return __pyx_unpickle_Enum, (type(self), 0xb068931, None), state             # <<<<<<<<<<<<<<
+ *     else:
+ *         return __pyx_unpickle_Enum, (type(self), 0xb068931, state)
+ */
+    __Pyx_XDECREF(__pyx_r);
+    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_pyx_unpickle_Enum); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 13, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
+    __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 13, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_1);
+    __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
+    __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
+    PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
+    __Pyx_INCREF(__pyx_int_184977713);
+    __Pyx_GIVEREF(__pyx_int_184977713);
+    PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_int_184977713);
+    __Pyx_INCREF(Py_None);
+    __Pyx_GIVEREF(Py_None);
+    PyTuple_SET_ITEM(__pyx_t_1, 2, Py_None);
+    __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 13, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_5);
+    __Pyx_GIVEREF(__pyx_t_4);
+    PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4);
+    __Pyx_GIVEREF(__pyx_t_1);
+    PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_1);
+    __Pyx_INCREF(__pyx_v_state);
+    __Pyx_GIVEREF(__pyx_v_state);
+    PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_v_state);
+    __pyx_t_4 = 0;
+    __pyx_t_1 = 0;
+    __pyx_r = __pyx_t_5;
+    __pyx_t_5 = 0;
+    goto __pyx_L0;
+
+    /* "(tree fragment)":12
+ *     else:
+ *         use_setstate = self.name is not None
+ *     if use_setstate:             # <<<<<<<<<<<<<<
+ *         return __pyx_unpickle_Enum, (type(self), 0xb068931, None), state
+ *     else:
+ */
+  }
+
+  /* "(tree fragment)":15
+ *         return __pyx_unpickle_Enum, (type(self), 0xb068931, None), state
+ *     else:
+ *         return __pyx_unpickle_Enum, (type(self), 0xb068931, state)             # <<<<<<<<<<<<<<
+ * def __setstate_cython__(self, __pyx_state):
+ *     __pyx_unpickle_Enum__set_state(self, __pyx_state)
+ */
+  /*else*/ {
+    __Pyx_XDECREF(__pyx_r);
+    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_pyx_unpickle_Enum); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 15, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_5);
+    __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 15, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_1);
+    __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
+    __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
+    PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
+    __Pyx_INCREF(__pyx_int_184977713);
+    __Pyx_GIVEREF(__pyx_int_184977713);
+    PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_int_184977713);
+    __Pyx_INCREF(__pyx_v_state);
+    __Pyx_GIVEREF(__pyx_v_state);
+    PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_v_state);
+    __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 15, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
+    __Pyx_GIVEREF(__pyx_t_5);
+    PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_5);
+    __Pyx_GIVEREF(__pyx_t_1);
+    PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_1);
+    __pyx_t_5 = 0;
+    __pyx_t_1 = 0;
+    __pyx_r = __pyx_t_4;
+    __pyx_t_4 = 0;
+    goto __pyx_L0;
+  }
+
+  /* "(tree fragment)":1
+ * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
+ *     cdef tuple state
+ *     cdef object _dict
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_XDECREF(__pyx_t_5);
+  __Pyx_AddTraceback("View.MemoryView.Enum.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XDECREF(__pyx_v_state);
+  __Pyx_XDECREF(__pyx_v__dict);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "(tree fragment)":16
+ *     else:
+ *         return __pyx_unpickle_Enum, (type(self), 0xb068931, state)
+ * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
+ *     __pyx_unpickle_Enum__set_state(self, __pyx_state)
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw___pyx_MemviewEnum_3__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/
+static PyObject *__pyx_pw___pyx_MemviewEnum_3__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
+  __pyx_r = __pyx_pf___pyx_MemviewEnum_2__setstate_cython__(((struct __pyx_MemviewEnum_obj *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf___pyx_MemviewEnum_2__setstate_cython__(struct __pyx_MemviewEnum_obj *__pyx_v_self, PyObject *__pyx_v___pyx_state) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  __Pyx_RefNannySetupContext("__setstate_cython__", 0);
+
+  /* "(tree fragment)":17
+ *         return __pyx_unpickle_Enum, (type(self), 0xb068931, state)
+ * def __setstate_cython__(self, __pyx_state):
+ *     __pyx_unpickle_Enum__set_state(self, __pyx_state)             # <<<<<<<<<<<<<<
+ */
+  if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v___pyx_state)->tp_name), 0))) __PYX_ERR(1, 17, __pyx_L1_error)
+  __pyx_t_1 = __pyx_unpickle_Enum__set_state(__pyx_v_self, ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 17, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+
+  /* "(tree fragment)":16
+ *     else:
+ *         return __pyx_unpickle_Enum, (type(self), 0xb068931, state)
+ * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
+ *     __pyx_unpickle_Enum__set_state(self, __pyx_state)
+ */
+
+  /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("View.MemoryView.Enum.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "View.MemoryView":298
+ * 
+ * @cname('__pyx_align_pointer')
+ * cdef void *align_pointer(void *memory, size_t alignment) nogil:             # <<<<<<<<<<<<<<
+ *     "Align pointer memory on a given boundary"
+ *     cdef Py_intptr_t aligned_p = <Py_intptr_t> memory
+ */
+
+static void *__pyx_align_pointer(void *__pyx_v_memory, size_t __pyx_v_alignment) {
+  Py_intptr_t __pyx_v_aligned_p;
+  size_t __pyx_v_offset;
+  void *__pyx_r;
+  int __pyx_t_1;
+
+  /* "View.MemoryView":300
+ * cdef void *align_pointer(void *memory, size_t alignment) nogil:
+ *     "Align pointer memory on a given boundary"
+ *     cdef Py_intptr_t aligned_p = <Py_intptr_t> memory             # <<<<<<<<<<<<<<
+ *     cdef size_t offset
+ * 
+ */
+  __pyx_v_aligned_p = ((Py_intptr_t)__pyx_v_memory);
+
+  /* "View.MemoryView":304
+ * 
+ *     with cython.cdivision(True):
+ *         offset = aligned_p % alignment             # <<<<<<<<<<<<<<
+ * 
+ *     if offset > 0:
+ */
+  __pyx_v_offset = (__pyx_v_aligned_p % __pyx_v_alignment);
+
+  /* "View.MemoryView":306
+ *         offset = aligned_p % alignment
+ * 
+ *     if offset > 0:             # <<<<<<<<<<<<<<
+ *         aligned_p += alignment - offset
+ * 
+ */
+  __pyx_t_1 = ((__pyx_v_offset > 0) != 0);
+  if (__pyx_t_1) {
+
+    /* "View.MemoryView":307
+ * 
+ *     if offset > 0:
+ *         aligned_p += alignment - offset             # <<<<<<<<<<<<<<
+ * 
+ *     return <void *> aligned_p
+ */
+    __pyx_v_aligned_p = (__pyx_v_aligned_p + (__pyx_v_alignment - __pyx_v_offset));
+
+    /* "View.MemoryView":306
+ *         offset = aligned_p % alignment
+ * 
+ *     if offset > 0:             # <<<<<<<<<<<<<<
+ *         aligned_p += alignment - offset
+ * 
+ */
+  }
+
+  /* "View.MemoryView":309
+ *         aligned_p += alignment - offset
+ * 
+ *     return <void *> aligned_p             # <<<<<<<<<<<<<<
+ * 
+ * 
+ */
+  __pyx_r = ((void *)__pyx_v_aligned_p);
+  goto __pyx_L0;
+
+  /* "View.MemoryView":298
+ * 
+ * @cname('__pyx_align_pointer')
+ * cdef void *align_pointer(void *memory, size_t alignment) nogil:             # <<<<<<<<<<<<<<
+ *     "Align pointer memory on a given boundary"
+ *     cdef Py_intptr_t aligned_p = <Py_intptr_t> memory
+ */
+
+  /* function exit code */
+  __pyx_L0:;
+  return __pyx_r;
+}
+
+/* "View.MemoryView":345
+ *     cdef __Pyx_TypeInfo *typeinfo
+ * 
+ *     def __cinit__(memoryview self, object obj, int flags, bint dtype_is_object=False):             # <<<<<<<<<<<<<<
+ *         self.obj = obj
+ *         self.flags = flags
+ */
+
+/* Python wrapper */
+static int __pyx_memoryview___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static int __pyx_memoryview___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_obj = 0;
+  int __pyx_v_flags;
+  int __pyx_v_dtype_is_object;
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_obj,&__pyx_n_s_flags,&__pyx_n_s_dtype_is_object,0};
+    PyObject* values[3] = {0,0,0};
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_obj)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
+        case  1:
+        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_flags)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 2, 3, 1); __PYX_ERR(1, 345, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  2:
+        if (kw_args > 0) {
+          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dtype_is_object);
+          if (value) { values[2] = value; kw_args--; }
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) __PYX_ERR(1, 345, __pyx_L3_error)
+      }
+    } else {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
+        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+    }
+    __pyx_v_obj = values[0];
+    __pyx_v_flags = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_flags == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 345, __pyx_L3_error)
+    if (values[2]) {
+      __pyx_v_dtype_is_object = __Pyx_PyObject_IsTrue(values[2]); if (unlikely((__pyx_v_dtype_is_object == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 345, __pyx_L3_error)
+    } else {
+      __pyx_v_dtype_is_object = ((int)0);
+    }
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 345, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("View.MemoryView.memoryview.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return -1;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview___cinit__(((struct __pyx_memoryview_obj *)__pyx_v_self), __pyx_v_obj, __pyx_v_flags, __pyx_v_dtype_is_object);
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static int __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview___cinit__(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_obj, int __pyx_v_flags, int __pyx_v_dtype_is_object) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  int __pyx_t_2;
+  int __pyx_t_3;
+  int __pyx_t_4;
+  __Pyx_RefNannySetupContext("__cinit__", 0);
+
+  /* "View.MemoryView":346
+ * 
+ *     def __cinit__(memoryview self, object obj, int flags, bint dtype_is_object=False):
+ *         self.obj = obj             # <<<<<<<<<<<<<<
+ *         self.flags = flags
+ *         if type(self) is memoryview or obj is not None:
+ */
+  __Pyx_INCREF(__pyx_v_obj);
+  __Pyx_GIVEREF(__pyx_v_obj);
+  __Pyx_GOTREF(__pyx_v_self->obj);
+  __Pyx_DECREF(__pyx_v_self->obj);
+  __pyx_v_self->obj = __pyx_v_obj;
+
+  /* "View.MemoryView":347
+ *     def __cinit__(memoryview self, object obj, int flags, bint dtype_is_object=False):
+ *         self.obj = obj
+ *         self.flags = flags             # <<<<<<<<<<<<<<
+ *         if type(self) is memoryview or obj is not None:
+ *             __Pyx_GetBuffer(obj, &self.view, flags)
+ */
+  __pyx_v_self->flags = __pyx_v_flags;
+
+  /* "View.MemoryView":348
+ *         self.obj = obj
+ *         self.flags = flags
+ *         if type(self) is memoryview or obj is not None:             # <<<<<<<<<<<<<<
+ *             __Pyx_GetBuffer(obj, &self.view, flags)
+ *             if <PyObject *> self.view.obj == NULL:
+ */
+  __pyx_t_2 = (((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))) == ((PyObject *)__pyx_memoryview_type));
+  __pyx_t_3 = (__pyx_t_2 != 0);
+  if (!__pyx_t_3) {
+  } else {
+    __pyx_t_1 = __pyx_t_3;
+    goto __pyx_L4_bool_binop_done;
+  }
+  __pyx_t_3 = (__pyx_v_obj != Py_None);
+  __pyx_t_2 = (__pyx_t_3 != 0);
+  __pyx_t_1 = __pyx_t_2;
+  __pyx_L4_bool_binop_done:;
+  if (__pyx_t_1) {
+
+    /* "View.MemoryView":349
+ *         self.flags = flags
+ *         if type(self) is memoryview or obj is not None:
+ *             __Pyx_GetBuffer(obj, &self.view, flags)             # <<<<<<<<<<<<<<
+ *             if <PyObject *> self.view.obj == NULL:
+ *                 (<__pyx_buffer *> &self.view).obj = Py_None
+ */
+    __pyx_t_4 = __Pyx_GetBuffer(__pyx_v_obj, (&__pyx_v_self->view), __pyx_v_flags); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(1, 349, __pyx_L1_error)
+
+    /* "View.MemoryView":350
+ *         if type(self) is memoryview or obj is not None:
+ *             __Pyx_GetBuffer(obj, &self.view, flags)
+ *             if <PyObject *> self.view.obj == NULL:             # <<<<<<<<<<<<<<
+ *                 (<__pyx_buffer *> &self.view).obj = Py_None
+ *                 Py_INCREF(Py_None)
+ */
+    __pyx_t_1 = ((((PyObject *)__pyx_v_self->view.obj) == NULL) != 0);
+    if (__pyx_t_1) {
+
+      /* "View.MemoryView":351
+ *             __Pyx_GetBuffer(obj, &self.view, flags)
+ *             if <PyObject *> self.view.obj == NULL:
+ *                 (<__pyx_buffer *> &self.view).obj = Py_None             # <<<<<<<<<<<<<<
+ *                 Py_INCREF(Py_None)
+ * 
+ */
+      ((Py_buffer *)(&__pyx_v_self->view))->obj = Py_None;
+
+      /* "View.MemoryView":352
+ *             if <PyObject *> self.view.obj == NULL:
+ *                 (<__pyx_buffer *> &self.view).obj = Py_None
+ *                 Py_INCREF(Py_None)             # <<<<<<<<<<<<<<
+ * 
+ *         global __pyx_memoryview_thread_locks_used
+ */
+      Py_INCREF(Py_None);
+
+      /* "View.MemoryView":350
+ *         if type(self) is memoryview or obj is not None:
+ *             __Pyx_GetBuffer(obj, &self.view, flags)
+ *             if <PyObject *> self.view.obj == NULL:             # <<<<<<<<<<<<<<
+ *                 (<__pyx_buffer *> &self.view).obj = Py_None
+ *                 Py_INCREF(Py_None)
+ */
+    }
+
+    /* "View.MemoryView":348
+ *         self.obj = obj
+ *         self.flags = flags
+ *         if type(self) is memoryview or obj is not None:             # <<<<<<<<<<<<<<
+ *             __Pyx_GetBuffer(obj, &self.view, flags)
+ *             if <PyObject *> self.view.obj == NULL:
+ */
+  }
+
+  /* "View.MemoryView":355
+ * 
+ *         global __pyx_memoryview_thread_locks_used
+ *         if __pyx_memoryview_thread_locks_used < THREAD_LOCKS_PREALLOCATED:             # <<<<<<<<<<<<<<
+ *             self.lock = __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used]
+ *             __pyx_memoryview_thread_locks_used += 1
+ */
+  __pyx_t_1 = ((__pyx_memoryview_thread_locks_used < 8) != 0);
+  if (__pyx_t_1) {
+
+    /* "View.MemoryView":356
+ *         global __pyx_memoryview_thread_locks_used
+ *         if __pyx_memoryview_thread_locks_used < THREAD_LOCKS_PREALLOCATED:
+ *             self.lock = __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used]             # <<<<<<<<<<<<<<
+ *             __pyx_memoryview_thread_locks_used += 1
+ *         if self.lock is NULL:
+ */
+    __pyx_v_self->lock = (__pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used]);
+
+    /* "View.MemoryView":357
+ *         if __pyx_memoryview_thread_locks_used < THREAD_LOCKS_PREALLOCATED:
+ *             self.lock = __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used]
+ *             __pyx_memoryview_thread_locks_used += 1             # <<<<<<<<<<<<<<
+ *         if self.lock is NULL:
+ *             self.lock = PyThread_allocate_lock()
+ */
+    __pyx_memoryview_thread_locks_used = (__pyx_memoryview_thread_locks_used + 1);
+
+    /* "View.MemoryView":355
+ * 
+ *         global __pyx_memoryview_thread_locks_used
+ *         if __pyx_memoryview_thread_locks_used < THREAD_LOCKS_PREALLOCATED:             # <<<<<<<<<<<<<<
+ *             self.lock = __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used]
+ *             __pyx_memoryview_thread_locks_used += 1
+ */
+  }
+
+  /* "View.MemoryView":358
+ *             self.lock = __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used]
+ *             __pyx_memoryview_thread_locks_used += 1
+ *         if self.lock is NULL:             # <<<<<<<<<<<<<<
+ *             self.lock = PyThread_allocate_lock()
+ *             if self.lock is NULL:
+ */
+  __pyx_t_1 = ((__pyx_v_self->lock == NULL) != 0);
+  if (__pyx_t_1) {
+
+    /* "View.MemoryView":359
+ *             __pyx_memoryview_thread_locks_used += 1
+ *         if self.lock is NULL:
+ *             self.lock = PyThread_allocate_lock()             # <<<<<<<<<<<<<<
+ *             if self.lock is NULL:
+ *                 raise MemoryError
+ */
+    __pyx_v_self->lock = PyThread_allocate_lock();
+
+    /* "View.MemoryView":360
+ *         if self.lock is NULL:
+ *             self.lock = PyThread_allocate_lock()
+ *             if self.lock is NULL:             # <<<<<<<<<<<<<<
+ *                 raise MemoryError
+ * 
+ */
+    __pyx_t_1 = ((__pyx_v_self->lock == NULL) != 0);
+    if (unlikely(__pyx_t_1)) {
+
+      /* "View.MemoryView":361
+ *             self.lock = PyThread_allocate_lock()
+ *             if self.lock is NULL:
+ *                 raise MemoryError             # <<<<<<<<<<<<<<
+ * 
+ *         if flags & PyBUF_FORMAT:
+ */
+      PyErr_NoMemory(); __PYX_ERR(1, 361, __pyx_L1_error)
+
+      /* "View.MemoryView":360
+ *         if self.lock is NULL:
+ *             self.lock = PyThread_allocate_lock()
+ *             if self.lock is NULL:             # <<<<<<<<<<<<<<
+ *                 raise MemoryError
+ * 
+ */
+    }
+
+    /* "View.MemoryView":358
+ *             self.lock = __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used]
+ *             __pyx_memoryview_thread_locks_used += 1
+ *         if self.lock is NULL:             # <<<<<<<<<<<<<<
+ *             self.lock = PyThread_allocate_lock()
+ *             if self.lock is NULL:
+ */
+  }
+
+  /* "View.MemoryView":363
+ *                 raise MemoryError
+ * 
+ *         if flags & PyBUF_FORMAT:             # <<<<<<<<<<<<<<
+ *             self.dtype_is_object = (self.view.format[0] == b'O' and self.view.format[1] == b'\0')
+ *         else:
+ */
+  __pyx_t_1 = ((__pyx_v_flags & PyBUF_FORMAT) != 0);
+  if (__pyx_t_1) {
+
+    /* "View.MemoryView":364
+ * 
+ *         if flags & PyBUF_FORMAT:
+ *             self.dtype_is_object = (self.view.format[0] == b'O' and self.view.format[1] == b'\0')             # <<<<<<<<<<<<<<
+ *         else:
+ *             self.dtype_is_object = dtype_is_object
+ */
+    __pyx_t_2 = (((__pyx_v_self->view.format[0]) == 'O') != 0);
+    if (__pyx_t_2) {
+    } else {
+      __pyx_t_1 = __pyx_t_2;
+      goto __pyx_L11_bool_binop_done;
+    }
+    __pyx_t_2 = (((__pyx_v_self->view.format[1]) == '\x00') != 0);
+    __pyx_t_1 = __pyx_t_2;
+    __pyx_L11_bool_binop_done:;
+    __pyx_v_self->dtype_is_object = __pyx_t_1;
+
+    /* "View.MemoryView":363
+ *                 raise MemoryError
+ * 
+ *         if flags & PyBUF_FORMAT:             # <<<<<<<<<<<<<<
+ *             self.dtype_is_object = (self.view.format[0] == b'O' and self.view.format[1] == b'\0')
+ *         else:
+ */
+    goto __pyx_L10;
+  }
+
+  /* "View.MemoryView":366
+ *             self.dtype_is_object = (self.view.format[0] == b'O' and self.view.format[1] == b'\0')
+ *         else:
+ *             self.dtype_is_object = dtype_is_object             # <<<<<<<<<<<<<<
+ * 
+ *         self.acquisition_count_aligned_p = <__pyx_atomic_int *> align_pointer(
+ */
+  /*else*/ {
+    __pyx_v_self->dtype_is_object = __pyx_v_dtype_is_object;
+  }
+  __pyx_L10:;
+
+  /* "View.MemoryView":368
+ *             self.dtype_is_object = dtype_is_object
+ * 
+ *         self.acquisition_count_aligned_p = <__pyx_atomic_int *> align_pointer(             # <<<<<<<<<<<<<<
+ *                   <void *> &self.acquisition_count[0], sizeof(__pyx_atomic_int))
+ *         self.typeinfo = NULL
+ */
+  __pyx_v_self->acquisition_count_aligned_p = ((__pyx_atomic_int *)__pyx_align_pointer(((void *)(&(__pyx_v_self->acquisition_count[0]))), (sizeof(__pyx_atomic_int))));
+
+  /* "View.MemoryView":370
+ *         self.acquisition_count_aligned_p = <__pyx_atomic_int *> align_pointer(
+ *                   <void *> &self.acquisition_count[0], sizeof(__pyx_atomic_int))
+ *         self.typeinfo = NULL             # <<<<<<<<<<<<<<
+ * 
+ *     def __dealloc__(memoryview self):
+ */
+  __pyx_v_self->typeinfo = NULL;
+
+  /* "View.MemoryView":345
+ *     cdef __Pyx_TypeInfo *typeinfo
+ * 
+ *     def __cinit__(memoryview self, object obj, int flags, bint dtype_is_object=False):             # <<<<<<<<<<<<<<
+ *         self.obj = obj
+ *         self.flags = flags
+ */
+
+  /* function exit code */
+  __pyx_r = 0;
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("View.MemoryView.memoryview.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = -1;
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "View.MemoryView":372
+ *         self.typeinfo = NULL
+ * 
+ *     def __dealloc__(memoryview self):             # <<<<<<<<<<<<<<
+ *         if self.obj is not None:
+ *             __Pyx_ReleaseBuffer(&self.view)
+ */
+
+/* Python wrapper */
+static void __pyx_memoryview___dealloc__(PyObject *__pyx_v_self); /*proto*/
+static void __pyx_memoryview___dealloc__(PyObject *__pyx_v_self) {
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0);
+  __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_2__dealloc__(((struct __pyx_memoryview_obj *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+}
+
+static void __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_2__dealloc__(struct __pyx_memoryview_obj *__pyx_v_self) {
+  int __pyx_v_i;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  int __pyx_t_2;
+  int __pyx_t_3;
+  int __pyx_t_4;
+  int __pyx_t_5;
+  PyThread_type_lock __pyx_t_6;
+  PyThread_type_lock __pyx_t_7;
+  __Pyx_RefNannySetupContext("__dealloc__", 0);
+
+  /* "View.MemoryView":373
+ * 
+ *     def __dealloc__(memoryview self):
+ *         if self.obj is not None:             # <<<<<<<<<<<<<<
+ *             __Pyx_ReleaseBuffer(&self.view)
+ * 
+ */
+  __pyx_t_1 = (__pyx_v_self->obj != Py_None);
+  __pyx_t_2 = (__pyx_t_1 != 0);
+  if (__pyx_t_2) {
+
+    /* "View.MemoryView":374
+ *     def __dealloc__(memoryview self):
+ *         if self.obj is not None:
+ *             __Pyx_ReleaseBuffer(&self.view)             # <<<<<<<<<<<<<<
+ * 
+ *         cdef int i
+ */
+    __Pyx_ReleaseBuffer((&__pyx_v_self->view));
+
+    /* "View.MemoryView":373
+ * 
+ *     def __dealloc__(memoryview self):
+ *         if self.obj is not None:             # <<<<<<<<<<<<<<
+ *             __Pyx_ReleaseBuffer(&self.view)
+ * 
+ */
+  }
+
+  /* "View.MemoryView":378
+ *         cdef int i
+ *         global __pyx_memoryview_thread_locks_used
+ *         if self.lock != NULL:             # <<<<<<<<<<<<<<
+ *             for i in range(__pyx_memoryview_thread_locks_used):
+ *                 if __pyx_memoryview_thread_locks[i] is self.lock:
+ */
+  __pyx_t_2 = ((__pyx_v_self->lock != NULL) != 0);
+  if (__pyx_t_2) {
+
+    /* "View.MemoryView":379
+ *         global __pyx_memoryview_thread_locks_used
+ *         if self.lock != NULL:
+ *             for i in range(__pyx_memoryview_thread_locks_used):             # <<<<<<<<<<<<<<
+ *                 if __pyx_memoryview_thread_locks[i] is self.lock:
+ *                     __pyx_memoryview_thread_locks_used -= 1
+ */
+    __pyx_t_3 = __pyx_memoryview_thread_locks_used;
+    __pyx_t_4 = __pyx_t_3;
+    for (__pyx_t_5 = 0; __pyx_t_5 < __pyx_t_4; __pyx_t_5+=1) {
+      __pyx_v_i = __pyx_t_5;
+
+      /* "View.MemoryView":380
+ *         if self.lock != NULL:
+ *             for i in range(__pyx_memoryview_thread_locks_used):
+ *                 if __pyx_memoryview_thread_locks[i] is self.lock:             # <<<<<<<<<<<<<<
+ *                     __pyx_memoryview_thread_locks_used -= 1
+ *                     if i != __pyx_memoryview_thread_locks_used:
+ */
+      __pyx_t_2 = (((__pyx_memoryview_thread_locks[__pyx_v_i]) == __pyx_v_self->lock) != 0);
+      if (__pyx_t_2) {
+
+        /* "View.MemoryView":381
+ *             for i in range(__pyx_memoryview_thread_locks_used):
+ *                 if __pyx_memoryview_thread_locks[i] is self.lock:
+ *                     __pyx_memoryview_thread_locks_used -= 1             # <<<<<<<<<<<<<<
+ *                     if i != __pyx_memoryview_thread_locks_used:
+ *                         __pyx_memoryview_thread_locks[i], __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] = (
+ */
+        __pyx_memoryview_thread_locks_used = (__pyx_memoryview_thread_locks_used - 1);
+
+        /* "View.MemoryView":382
+ *                 if __pyx_memoryview_thread_locks[i] is self.lock:
+ *                     __pyx_memoryview_thread_locks_used -= 1
+ *                     if i != __pyx_memoryview_thread_locks_used:             # <<<<<<<<<<<<<<
+ *                         __pyx_memoryview_thread_locks[i], __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] = (
+ *                             __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used], __pyx_memoryview_thread_locks[i])
+ */
+        __pyx_t_2 = ((__pyx_v_i != __pyx_memoryview_thread_locks_used) != 0);
+        if (__pyx_t_2) {
+
+          /* "View.MemoryView":384
+ *                     if i != __pyx_memoryview_thread_locks_used:
+ *                         __pyx_memoryview_thread_locks[i], __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] = (
+ *                             __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used], __pyx_memoryview_thread_locks[i])             # <<<<<<<<<<<<<<
+ *                     break
+ *             else:
+ */
+          __pyx_t_6 = (__pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used]);
+          __pyx_t_7 = (__pyx_memoryview_thread_locks[__pyx_v_i]);
+
+          /* "View.MemoryView":383
+ *                     __pyx_memoryview_thread_locks_used -= 1
+ *                     if i != __pyx_memoryview_thread_locks_used:
+ *                         __pyx_memoryview_thread_locks[i], __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] = (             # <<<<<<<<<<<<<<
+ *                             __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used], __pyx_memoryview_thread_locks[i])
+ *                     break
+ */
+          (__pyx_memoryview_thread_locks[__pyx_v_i]) = __pyx_t_6;
+          (__pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used]) = __pyx_t_7;
+
+          /* "View.MemoryView":382
+ *                 if __pyx_memoryview_thread_locks[i] is self.lock:
+ *                     __pyx_memoryview_thread_locks_used -= 1
+ *                     if i != __pyx_memoryview_thread_locks_used:             # <<<<<<<<<<<<<<
+ *                         __pyx_memoryview_thread_locks[i], __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] = (
+ *                             __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used], __pyx_memoryview_thread_locks[i])
+ */
+        }
+
+        /* "View.MemoryView":385
+ *                         __pyx_memoryview_thread_locks[i], __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] = (
+ *                             __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used], __pyx_memoryview_thread_locks[i])
+ *                     break             # <<<<<<<<<<<<<<
+ *             else:
+ *                 PyThread_free_lock(self.lock)
+ */
+        goto __pyx_L6_break;
+
+        /* "View.MemoryView":380
+ *         if self.lock != NULL:
+ *             for i in range(__pyx_memoryview_thread_locks_used):
+ *                 if __pyx_memoryview_thread_locks[i] is self.lock:             # <<<<<<<<<<<<<<
+ *                     __pyx_memoryview_thread_locks_used -= 1
+ *                     if i != __pyx_memoryview_thread_locks_used:
+ */
+      }
+    }
+    /*else*/ {
+
+      /* "View.MemoryView":387
+ *                     break
+ *             else:
+ *                 PyThread_free_lock(self.lock)             # <<<<<<<<<<<<<<
+ * 
+ *     cdef char *get_item_pointer(memoryview self, object index) except NULL:
+ */
+      PyThread_free_lock(__pyx_v_self->lock);
+    }
+    __pyx_L6_break:;
+
+    /* "View.MemoryView":378
+ *         cdef int i
+ *         global __pyx_memoryview_thread_locks_used
+ *         if self.lock != NULL:             # <<<<<<<<<<<<<<
+ *             for i in range(__pyx_memoryview_thread_locks_used):
+ *                 if __pyx_memoryview_thread_locks[i] is self.lock:
+ */
+  }
+
+  /* "View.MemoryView":372
+ *         self.typeinfo = NULL
+ * 
+ *     def __dealloc__(memoryview self):             # <<<<<<<<<<<<<<
+ *         if self.obj is not None:
+ *             __Pyx_ReleaseBuffer(&self.view)
+ */
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+}
+
+/* "View.MemoryView":389
+ *                 PyThread_free_lock(self.lock)
+ * 
+ *     cdef char *get_item_pointer(memoryview self, object index) except NULL:             # <<<<<<<<<<<<<<
+ *         cdef Py_ssize_t dim
+ *         cdef char *itemp = <char *> self.view.buf
+ */
+
+static char *__pyx_memoryview_get_item_pointer(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_index) {
+  Py_ssize_t __pyx_v_dim;
+  char *__pyx_v_itemp;
+  PyObject *__pyx_v_idx = NULL;
+  char *__pyx_r;
+  __Pyx_RefNannyDeclarations
+  Py_ssize_t __pyx_t_1;
+  PyObject *__pyx_t_2 = NULL;
+  Py_ssize_t __pyx_t_3;
+  PyObject *(*__pyx_t_4)(PyObject *);
+  PyObject *__pyx_t_5 = NULL;
+  Py_ssize_t __pyx_t_6;
+  char *__pyx_t_7;
+  __Pyx_RefNannySetupContext("get_item_pointer", 0);
+
+  /* "View.MemoryView":391
+ *     cdef char *get_item_pointer(memoryview self, object index) except NULL:
+ *         cdef Py_ssize_t dim
+ *         cdef char *itemp = <char *> self.view.buf             # <<<<<<<<<<<<<<
+ * 
+ *         for dim, idx in enumerate(index):
+ */
+  __pyx_v_itemp = ((char *)__pyx_v_self->view.buf);
+
+  /* "View.MemoryView":393
+ *         cdef char *itemp = <char *> self.view.buf
+ * 
+ *         for dim, idx in enumerate(index):             # <<<<<<<<<<<<<<
+ *             itemp = pybuffer_index(&self.view, itemp, idx, dim)
+ * 
+ */
+  __pyx_t_1 = 0;
+  if (likely(PyList_CheckExact(__pyx_v_index)) || PyTuple_CheckExact(__pyx_v_index)) {
+    __pyx_t_2 = __pyx_v_index; __Pyx_INCREF(__pyx_t_2); __pyx_t_3 = 0;
+    __pyx_t_4 = NULL;
+  } else {
+    __pyx_t_3 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_v_index); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 393, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_2);
+    __pyx_t_4 = Py_TYPE(__pyx_t_2)->tp_iternext; if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 393, __pyx_L1_error)
+  }
+  for (;;) {
+    if (likely(!__pyx_t_4)) {
+      if (likely(PyList_CheckExact(__pyx_t_2))) {
+        if (__pyx_t_3 >= PyList_GET_SIZE(__pyx_t_2)) break;
+        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+        __pyx_t_5 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_5); __pyx_t_3++; if (unlikely(0 < 0)) __PYX_ERR(1, 393, __pyx_L1_error)
+        #else
+        __pyx_t_5 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 393, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_5);
+        #endif
+      } else {
+        if (__pyx_t_3 >= PyTuple_GET_SIZE(__pyx_t_2)) break;
+        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+        __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_5); __pyx_t_3++; if (unlikely(0 < 0)) __PYX_ERR(1, 393, __pyx_L1_error)
+        #else
+        __pyx_t_5 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 393, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_5);
+        #endif
+      }
+    } else {
+      __pyx_t_5 = __pyx_t_4(__pyx_t_2);
+      if (unlikely(!__pyx_t_5)) {
+        PyObject* exc_type = PyErr_Occurred();
+        if (exc_type) {
+          if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
+          else __PYX_ERR(1, 393, __pyx_L1_error)
+        }
+        break;
+      }
+      __Pyx_GOTREF(__pyx_t_5);
+    }
+    __Pyx_XDECREF_SET(__pyx_v_idx, __pyx_t_5);
+    __pyx_t_5 = 0;
+    __pyx_v_dim = __pyx_t_1;
+    __pyx_t_1 = (__pyx_t_1 + 1);
+
+    /* "View.MemoryView":394
+ * 
+ *         for dim, idx in enumerate(index):
+ *             itemp = pybuffer_index(&self.view, itemp, idx, dim)             # <<<<<<<<<<<<<<
+ * 
+ *         return itemp
+ */
+    __pyx_t_6 = __Pyx_PyIndex_AsSsize_t(__pyx_v_idx); if (unlikely((__pyx_t_6 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 394, __pyx_L1_error)
+    __pyx_t_7 = __pyx_pybuffer_index((&__pyx_v_self->view), __pyx_v_itemp, __pyx_t_6, __pyx_v_dim); if (unlikely(__pyx_t_7 == ((char *)NULL))) __PYX_ERR(1, 394, __pyx_L1_error)
+    __pyx_v_itemp = __pyx_t_7;
+
+    /* "View.MemoryView":393
+ *         cdef char *itemp = <char *> self.view.buf
+ * 
+ *         for dim, idx in enumerate(index):             # <<<<<<<<<<<<<<
+ *             itemp = pybuffer_index(&self.view, itemp, idx, dim)
+ * 
+ */
+  }
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+
+  /* "View.MemoryView":396
+ *             itemp = pybuffer_index(&self.view, itemp, idx, dim)
+ * 
+ *         return itemp             # <<<<<<<<<<<<<<
+ * 
+ * 
+ */
+  __pyx_r = __pyx_v_itemp;
+  goto __pyx_L0;
+
+  /* "View.MemoryView":389
+ *                 PyThread_free_lock(self.lock)
+ * 
+ *     cdef char *get_item_pointer(memoryview self, object index) except NULL:             # <<<<<<<<<<<<<<
+ *         cdef Py_ssize_t dim
+ *         cdef char *itemp = <char *> self.view.buf
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_5);
+  __Pyx_AddTraceback("View.MemoryView.memoryview.get_item_pointer", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XDECREF(__pyx_v_idx);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "View.MemoryView":399
+ * 
+ * 
+ *     def __getitem__(memoryview self, object index):             # <<<<<<<<<<<<<<
+ *         if index is Ellipsis:
+ *             return self
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_memoryview___getitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_index); /*proto*/
+static PyObject *__pyx_memoryview___getitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_index) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__getitem__ (wrapper)", 0);
+  __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_4__getitem__(((struct __pyx_memoryview_obj *)__pyx_v_self), ((PyObject *)__pyx_v_index));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_4__getitem__(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_index) {
+  PyObject *__pyx_v_have_slices = NULL;
+  PyObject *__pyx_v_indices = NULL;
+  char *__pyx_v_itemp;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  int __pyx_t_2;
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
+  PyObject *__pyx_t_5 = NULL;
+  char *__pyx_t_6;
+  __Pyx_RefNannySetupContext("__getitem__", 0);
+
+  /* "View.MemoryView":400
+ * 
+ *     def __getitem__(memoryview self, object index):
+ *         if index is Ellipsis:             # <<<<<<<<<<<<<<
+ *             return self
+ * 
+ */
+  __pyx_t_1 = (__pyx_v_index == __pyx_builtin_Ellipsis);
+  __pyx_t_2 = (__pyx_t_1 != 0);
+  if (__pyx_t_2) {
+
+    /* "View.MemoryView":401
+ *     def __getitem__(memoryview self, object index):
+ *         if index is Ellipsis:
+ *             return self             # <<<<<<<<<<<<<<
+ * 
+ *         have_slices, indices = _unellipsify(index, self.view.ndim)
+ */
+    __Pyx_XDECREF(__pyx_r);
+    __Pyx_INCREF(((PyObject *)__pyx_v_self));
+    __pyx_r = ((PyObject *)__pyx_v_self);
+    goto __pyx_L0;
+
+    /* "View.MemoryView":400
+ * 
+ *     def __getitem__(memoryview self, object index):
+ *         if index is Ellipsis:             # <<<<<<<<<<<<<<
+ *             return self
+ * 
+ */
+  }
+
+  /* "View.MemoryView":403
+ *             return self
+ * 
+ *         have_slices, indices = _unellipsify(index, self.view.ndim)             # <<<<<<<<<<<<<<
+ * 
+ *         cdef char *itemp
+ */
+  __pyx_t_3 = _unellipsify(__pyx_v_index, __pyx_v_self->view.ndim); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 403, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  if (likely(__pyx_t_3 != Py_None)) {
+    PyObject* sequence = __pyx_t_3;
+    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
+    if (unlikely(size != 2)) {
+      if (size > 2) __Pyx_RaiseTooManyValuesError(2);
+      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
+      __PYX_ERR(1, 403, __pyx_L1_error)
+    }
+    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+    __pyx_t_4 = PyTuple_GET_ITEM(sequence, 0); 
+    __pyx_t_5 = PyTuple_GET_ITEM(sequence, 1); 
+    __Pyx_INCREF(__pyx_t_4);
+    __Pyx_INCREF(__pyx_t_5);
+    #else
+    __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 403, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
+    __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 403, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_5);
+    #endif
+    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  } else {
+    __Pyx_RaiseNoneNotIterableError(); __PYX_ERR(1, 403, __pyx_L1_error)
+  }
+  __pyx_v_have_slices = __pyx_t_4;
+  __pyx_t_4 = 0;
+  __pyx_v_indices = __pyx_t_5;
+  __pyx_t_5 = 0;
+
+  /* "View.MemoryView":406
+ * 
+ *         cdef char *itemp
+ *         if have_slices:             # <<<<<<<<<<<<<<
+ *             return memview_slice(self, indices)
+ *         else:
+ */
+  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_have_slices); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(1, 406, __pyx_L1_error)
+  if (__pyx_t_2) {
+
+    /* "View.MemoryView":407
+ *         cdef char *itemp
+ *         if have_slices:
+ *             return memview_slice(self, indices)             # <<<<<<<<<<<<<<
+ *         else:
+ *             itemp = self.get_item_pointer(indices)
+ */
+    __Pyx_XDECREF(__pyx_r);
+    __pyx_t_3 = ((PyObject *)__pyx_memview_slice(__pyx_v_self, __pyx_v_indices)); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 407, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    __pyx_r = __pyx_t_3;
+    __pyx_t_3 = 0;
+    goto __pyx_L0;
+
+    /* "View.MemoryView":406
+ * 
+ *         cdef char *itemp
+ *         if have_slices:             # <<<<<<<<<<<<<<
+ *             return memview_slice(self, indices)
+ *         else:
+ */
+  }
+
+  /* "View.MemoryView":409
+ *             return memview_slice(self, indices)
+ *         else:
+ *             itemp = self.get_item_pointer(indices)             # <<<<<<<<<<<<<<
+ *             return self.convert_item_to_object(itemp)
+ * 
+ */
+  /*else*/ {
+    __pyx_t_6 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->get_item_pointer(__pyx_v_self, __pyx_v_indices); if (unlikely(__pyx_t_6 == ((char *)NULL))) __PYX_ERR(1, 409, __pyx_L1_error)
+    __pyx_v_itemp = __pyx_t_6;
+
+    /* "View.MemoryView":410
+ *         else:
+ *             itemp = self.get_item_pointer(indices)
+ *             return self.convert_item_to_object(itemp)             # <<<<<<<<<<<<<<
+ * 
+ *     def __setitem__(memoryview self, object index, object value):
+ */
+    __Pyx_XDECREF(__pyx_r);
+    __pyx_t_3 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->convert_item_to_object(__pyx_v_self, __pyx_v_itemp); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 410, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    __pyx_r = __pyx_t_3;
+    __pyx_t_3 = 0;
+    goto __pyx_L0;
+  }
+
+  /* "View.MemoryView":399
+ * 
+ * 
+ *     def __getitem__(memoryview self, object index):             # <<<<<<<<<<<<<<
+ *         if index is Ellipsis:
+ *             return self
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_XDECREF(__pyx_t_5);
+  __Pyx_AddTraceback("View.MemoryView.memoryview.__getitem__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XDECREF(__pyx_v_have_slices);
+  __Pyx_XDECREF(__pyx_v_indices);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "View.MemoryView":412
+ *             return self.convert_item_to_object(itemp)
+ * 
+ *     def __setitem__(memoryview self, object index, object value):             # <<<<<<<<<<<<<<
+ *         if self.view.readonly:
+ *             raise TypeError("Cannot assign to read-only memoryview")
+ */
+
+/* Python wrapper */
+static int __pyx_memoryview___setitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_index, PyObject *__pyx_v_value); /*proto*/
+static int __pyx_memoryview___setitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_index, PyObject *__pyx_v_value) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__setitem__ (wrapper)", 0);
+  __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_6__setitem__(((struct __pyx_memoryview_obj *)__pyx_v_self), ((PyObject *)__pyx_v_index), ((PyObject *)__pyx_v_value));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static int __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_6__setitem__(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_index, PyObject *__pyx_v_value) {
+  PyObject *__pyx_v_have_slices = NULL;
+  PyObject *__pyx_v_obj = NULL;
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
+  __Pyx_RefNannySetupContext("__setitem__", 0);
+  __Pyx_INCREF(__pyx_v_index);
+
+  /* "View.MemoryView":413
+ * 
+ *     def __setitem__(memoryview self, object index, object value):
+ *         if self.view.readonly:             # <<<<<<<<<<<<<<
+ *             raise TypeError("Cannot assign to read-only memoryview")
+ * 
+ */
+  __pyx_t_1 = (__pyx_v_self->view.readonly != 0);
+  if (unlikely(__pyx_t_1)) {
+
+    /* "View.MemoryView":414
+ *     def __setitem__(memoryview self, object index, object value):
+ *         if self.view.readonly:
+ *             raise TypeError("Cannot assign to read-only memoryview")             # <<<<<<<<<<<<<<
+ * 
+ *         have_slices, index = _unellipsify(index, self.view.ndim)
+ */
+    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__12, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 414, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_2);
+    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
+    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+    __PYX_ERR(1, 414, __pyx_L1_error)
+
+    /* "View.MemoryView":413
+ * 
+ *     def __setitem__(memoryview self, object index, object value):
+ *         if self.view.readonly:             # <<<<<<<<<<<<<<
+ *             raise TypeError("Cannot assign to read-only memoryview")
+ * 
+ */
+  }
+
+  /* "View.MemoryView":416
+ *             raise TypeError("Cannot assign to read-only memoryview")
+ * 
+ *         have_slices, index = _unellipsify(index, self.view.ndim)             # <<<<<<<<<<<<<<
+ * 
+ *         if have_slices:
+ */
+  __pyx_t_2 = _unellipsify(__pyx_v_index, __pyx_v_self->view.ndim); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 416, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (likely(__pyx_t_2 != Py_None)) {
+    PyObject* sequence = __pyx_t_2;
+    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
+    if (unlikely(size != 2)) {
+      if (size > 2) __Pyx_RaiseTooManyValuesError(2);
+      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
+      __PYX_ERR(1, 416, __pyx_L1_error)
+    }
+    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+    __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); 
+    __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1); 
+    __Pyx_INCREF(__pyx_t_3);
+    __Pyx_INCREF(__pyx_t_4);
+    #else
+    __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 416, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 416, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
+    #endif
+    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  } else {
+    __Pyx_RaiseNoneNotIterableError(); __PYX_ERR(1, 416, __pyx_L1_error)
+  }
+  __pyx_v_have_slices = __pyx_t_3;
+  __pyx_t_3 = 0;
+  __Pyx_DECREF_SET(__pyx_v_index, __pyx_t_4);
+  __pyx_t_4 = 0;
+
+  /* "View.MemoryView":418
+ *         have_slices, index = _unellipsify(index, self.view.ndim)
+ * 
+ *         if have_slices:             # <<<<<<<<<<<<<<
+ *             obj = self.is_slice(value)
+ *             if obj:
+ */
+  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_have_slices); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(1, 418, __pyx_L1_error)
+  if (__pyx_t_1) {
+
+    /* "View.MemoryView":419
+ * 
+ *         if have_slices:
+ *             obj = self.is_slice(value)             # <<<<<<<<<<<<<<
+ *             if obj:
+ *                 self.setitem_slice_assignment(self[index], obj)
+ */
+    __pyx_t_2 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->is_slice(__pyx_v_self, __pyx_v_value); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 419, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_2);
+    __pyx_v_obj = __pyx_t_2;
+    __pyx_t_2 = 0;
+
+    /* "View.MemoryView":420
+ *         if have_slices:
+ *             obj = self.is_slice(value)
+ *             if obj:             # <<<<<<<<<<<<<<
+ *                 self.setitem_slice_assignment(self[index], obj)
+ *             else:
+ */
+    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_obj); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(1, 420, __pyx_L1_error)
+    if (__pyx_t_1) {
+
+      /* "View.MemoryView":421
+ *             obj = self.is_slice(value)
+ *             if obj:
+ *                 self.setitem_slice_assignment(self[index], obj)             # <<<<<<<<<<<<<<
+ *             else:
+ *                 self.setitem_slice_assign_scalar(self[index], value)
+ */
+      __pyx_t_2 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_self), __pyx_v_index); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 421, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_2);
+      __pyx_t_4 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->setitem_slice_assignment(__pyx_v_self, __pyx_t_2, __pyx_v_obj); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 421, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_4);
+      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+
+      /* "View.MemoryView":420
+ *         if have_slices:
+ *             obj = self.is_slice(value)
+ *             if obj:             # <<<<<<<<<<<<<<
+ *                 self.setitem_slice_assignment(self[index], obj)
+ *             else:
+ */
+      goto __pyx_L5;
+    }
+
+    /* "View.MemoryView":423
+ *                 self.setitem_slice_assignment(self[index], obj)
+ *             else:
+ *                 self.setitem_slice_assign_scalar(self[index], value)             # <<<<<<<<<<<<<<
+ *         else:
+ *             self.setitem_indexed(index, value)
+ */
+    /*else*/ {
+      __pyx_t_4 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_self), __pyx_v_index); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 423, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_4);
+      if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_memoryview_type))))) __PYX_ERR(1, 423, __pyx_L1_error)
+      __pyx_t_2 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->setitem_slice_assign_scalar(__pyx_v_self, ((struct __pyx_memoryview_obj *)__pyx_t_4), __pyx_v_value); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 423, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_2);
+      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+    }
+    __pyx_L5:;
+
+    /* "View.MemoryView":418
+ *         have_slices, index = _unellipsify(index, self.view.ndim)
+ * 
+ *         if have_slices:             # <<<<<<<<<<<<<<
+ *             obj = self.is_slice(value)
+ *             if obj:
+ */
+    goto __pyx_L4;
+  }
+
+  /* "View.MemoryView":425
+ *                 self.setitem_slice_assign_scalar(self[index], value)
+ *         else:
+ *             self.setitem_indexed(index, value)             # <<<<<<<<<<<<<<
+ * 
+ *     cdef is_slice(self, obj):
+ */
+  /*else*/ {
+    __pyx_t_2 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->setitem_indexed(__pyx_v_self, __pyx_v_index, __pyx_v_value); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 425, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_2);
+    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  }
+  __pyx_L4:;
+
+  /* "View.MemoryView":412
+ *             return self.convert_item_to_object(itemp)
+ * 
+ *     def __setitem__(memoryview self, object index, object value):             # <<<<<<<<<<<<<<
+ *         if self.view.readonly:
+ *             raise TypeError("Cannot assign to read-only memoryview")
+ */
+
+  /* function exit code */
+  __pyx_r = 0;
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_AddTraceback("View.MemoryView.memoryview.__setitem__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = -1;
+  __pyx_L0:;
+  __Pyx_XDECREF(__pyx_v_have_slices);
+  __Pyx_XDECREF(__pyx_v_obj);
+  __Pyx_XDECREF(__pyx_v_index);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "View.MemoryView":427
+ *             self.setitem_indexed(index, value)
+ * 
+ *     cdef is_slice(self, obj):             # <<<<<<<<<<<<<<
+ *         if not isinstance(obj, memoryview):
+ *             try:
+ */
+
+static PyObject *__pyx_memoryview_is_slice(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_obj) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  int __pyx_t_2;
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
+  PyObject *__pyx_t_5 = NULL;
+  PyObject *__pyx_t_6 = NULL;
+  PyObject *__pyx_t_7 = NULL;
+  PyObject *__pyx_t_8 = NULL;
+  int __pyx_t_9;
+  __Pyx_RefNannySetupContext("is_slice", 0);
+  __Pyx_INCREF(__pyx_v_obj);
+
+  /* "View.MemoryView":428
+ * 
+ *     cdef is_slice(self, obj):
+ *         if not isinstance(obj, memoryview):             # <<<<<<<<<<<<<<
+ *             try:
+ *                 obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS,
+ */
+  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_obj, __pyx_memoryview_type); 
+  __pyx_t_2 = ((!(__pyx_t_1 != 0)) != 0);
+  if (__pyx_t_2) {
+
+    /* "View.MemoryView":429
+ *     cdef is_slice(self, obj):
+ *         if not isinstance(obj, memoryview):
+ *             try:             # <<<<<<<<<<<<<<
+ *                 obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS,
+ *                                  self.dtype_is_object)
+ */
+    {
+      __Pyx_PyThreadState_declare
+      __Pyx_PyThreadState_assign
+      __Pyx_ExceptionSave(&__pyx_t_3, &__pyx_t_4, &__pyx_t_5);
+      __Pyx_XGOTREF(__pyx_t_3);
+      __Pyx_XGOTREF(__pyx_t_4);
+      __Pyx_XGOTREF(__pyx_t_5);
+      /*try:*/ {
+
+        /* "View.MemoryView":430
+ *         if not isinstance(obj, memoryview):
+ *             try:
+ *                 obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS,             # <<<<<<<<<<<<<<
+ *                                  self.dtype_is_object)
+ *             except TypeError:
+ */
+        __pyx_t_6 = __Pyx_PyInt_From_int(((__pyx_v_self->flags & (~PyBUF_WRITABLE)) | PyBUF_ANY_CONTIGUOUS)); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 430, __pyx_L4_error)
+        __Pyx_GOTREF(__pyx_t_6);
+
+        /* "View.MemoryView":431
+ *             try:
+ *                 obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS,
+ *                                  self.dtype_is_object)             # <<<<<<<<<<<<<<
+ *             except TypeError:
+ *                 return None
+ */
+        __pyx_t_7 = __Pyx_PyBool_FromLong(__pyx_v_self->dtype_is_object); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 431, __pyx_L4_error)
+        __Pyx_GOTREF(__pyx_t_7);
+
+        /* "View.MemoryView":430
+ *         if not isinstance(obj, memoryview):
+ *             try:
+ *                 obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS,             # <<<<<<<<<<<<<<
+ *                                  self.dtype_is_object)
+ *             except TypeError:
+ */
+        __pyx_t_8 = PyTuple_New(3); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 430, __pyx_L4_error)
+        __Pyx_GOTREF(__pyx_t_8);
+        __Pyx_INCREF(__pyx_v_obj);
+        __Pyx_GIVEREF(__pyx_v_obj);
+        PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_v_obj);
+        __Pyx_GIVEREF(__pyx_t_6);
+        PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_6);
+        __Pyx_GIVEREF(__pyx_t_7);
+        PyTuple_SET_ITEM(__pyx_t_8, 2, __pyx_t_7);
+        __pyx_t_6 = 0;
+        __pyx_t_7 = 0;
+        __pyx_t_7 = __Pyx_PyObject_Call(((PyObject *)__pyx_memoryview_type), __pyx_t_8, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 430, __pyx_L4_error)
+        __Pyx_GOTREF(__pyx_t_7);
+        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+        __Pyx_DECREF_SET(__pyx_v_obj, __pyx_t_7);
+        __pyx_t_7 = 0;
+
+        /* "View.MemoryView":429
+ *     cdef is_slice(self, obj):
+ *         if not isinstance(obj, memoryview):
+ *             try:             # <<<<<<<<<<<<<<
+ *                 obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS,
+ *                                  self.dtype_is_object)
+ */
+      }
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
+      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
+      goto __pyx_L9_try_end;
+      __pyx_L4_error:;
+      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
+      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
+      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
+
+      /* "View.MemoryView":432
+ *                 obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS,
+ *                                  self.dtype_is_object)
+ *             except TypeError:             # <<<<<<<<<<<<<<
+ *                 return None
+ * 
+ */
+      __pyx_t_9 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_TypeError);
+      if (__pyx_t_9) {
+        __Pyx_AddTraceback("View.MemoryView.memoryview.is_slice", __pyx_clineno, __pyx_lineno, __pyx_filename);
+        if (__Pyx_GetException(&__pyx_t_7, &__pyx_t_8, &__pyx_t_6) < 0) __PYX_ERR(1, 432, __pyx_L6_except_error)
+        __Pyx_GOTREF(__pyx_t_7);
+        __Pyx_GOTREF(__pyx_t_8);
+        __Pyx_GOTREF(__pyx_t_6);
+
+        /* "View.MemoryView":433
+ *                                  self.dtype_is_object)
+ *             except TypeError:
+ *                 return None             # <<<<<<<<<<<<<<
+ * 
+ *         return obj
+ */
+        __Pyx_XDECREF(__pyx_r);
+        __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+        goto __pyx_L7_except_return;
+      }
+      goto __pyx_L6_except_error;
+      __pyx_L6_except_error:;
+
+      /* "View.MemoryView":429
+ *     cdef is_slice(self, obj):
+ *         if not isinstance(obj, memoryview):
+ *             try:             # <<<<<<<<<<<<<<
+ *                 obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS,
+ *                                  self.dtype_is_object)
+ */
+      __Pyx_XGIVEREF(__pyx_t_3);
+      __Pyx_XGIVEREF(__pyx_t_4);
+      __Pyx_XGIVEREF(__pyx_t_5);
+      __Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5);
+      goto __pyx_L1_error;
+      __pyx_L7_except_return:;
+      __Pyx_XGIVEREF(__pyx_t_3);
+      __Pyx_XGIVEREF(__pyx_t_4);
+      __Pyx_XGIVEREF(__pyx_t_5);
+      __Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5);
+      goto __pyx_L0;
+      __pyx_L9_try_end:;
+    }
+
+    /* "View.MemoryView":428
+ * 
+ *     cdef is_slice(self, obj):
+ *         if not isinstance(obj, memoryview):             # <<<<<<<<<<<<<<
+ *             try:
+ *                 obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS,
+ */
+  }
+
+  /* "View.MemoryView":435
+ *                 return None
+ * 
+ *         return obj             # <<<<<<<<<<<<<<
+ * 
+ *     cdef setitem_slice_assignment(self, dst, src):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(__pyx_v_obj);
+  __pyx_r = __pyx_v_obj;
+  goto __pyx_L0;
+
+  /* "View.MemoryView":427
+ *             self.setitem_indexed(index, value)
+ * 
+ *     cdef is_slice(self, obj):             # <<<<<<<<<<<<<<
+ *         if not isinstance(obj, memoryview):
+ *             try:
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_6);
+  __Pyx_XDECREF(__pyx_t_7);
+  __Pyx_XDECREF(__pyx_t_8);
+  __Pyx_AddTraceback("View.MemoryView.memoryview.is_slice", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = 0;
+  __pyx_L0:;
+  __Pyx_XDECREF(__pyx_v_obj);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "View.MemoryView":437
+ *         return obj
+ * 
+ *     cdef setitem_slice_assignment(self, dst, src):             # <<<<<<<<<<<<<<
+ *         cdef __Pyx_memviewslice dst_slice
+ *         cdef __Pyx_memviewslice src_slice
+ */
+
+static PyObject *__pyx_memoryview_setitem_slice_assignment(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_dst, PyObject *__pyx_v_src) {
+  __Pyx_memviewslice __pyx_v_dst_slice;
+  __Pyx_memviewslice __pyx_v_src_slice;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_2;
+  int __pyx_t_3;
+  int __pyx_t_4;
+  __Pyx_RefNannySetupContext("setitem_slice_assignment", 0);
+
+  /* "View.MemoryView":441
+ *         cdef __Pyx_memviewslice src_slice
+ * 
+ *         memoryview_copy_contents(get_slice_from_memview(src, &src_slice)[0],             # <<<<<<<<<<<<<<
+ *                                  get_slice_from_memview(dst, &dst_slice)[0],
+ *                                  src.ndim, dst.ndim, self.dtype_is_object)
+ */
+  if (!(likely(((__pyx_v_src) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_src, __pyx_memoryview_type))))) __PYX_ERR(1, 441, __pyx_L1_error)
+
+  /* "View.MemoryView":442
+ * 
+ *         memoryview_copy_contents(get_slice_from_memview(src, &src_slice)[0],
+ *                                  get_slice_from_memview(dst, &dst_slice)[0],             # <<<<<<<<<<<<<<
+ *                                  src.ndim, dst.ndim, self.dtype_is_object)
+ * 
+ */
+  if (!(likely(((__pyx_v_dst) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_dst, __pyx_memoryview_type))))) __PYX_ERR(1, 442, __pyx_L1_error)
+
+  /* "View.MemoryView":443
+ *         memoryview_copy_contents(get_slice_from_memview(src, &src_slice)[0],
+ *                                  get_slice_from_memview(dst, &dst_slice)[0],
+ *                                  src.ndim, dst.ndim, self.dtype_is_object)             # <<<<<<<<<<<<<<
+ * 
+ *     cdef setitem_slice_assign_scalar(self, memoryview dst, value):
+ */
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_src, __pyx_n_s_ndim); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 443, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 443, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_dst, __pyx_n_s_ndim); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 443, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_3 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 443, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+
+  /* "View.MemoryView":441
+ *         cdef __Pyx_memviewslice src_slice
+ * 
+ *         memoryview_copy_contents(get_slice_from_memview(src, &src_slice)[0],             # <<<<<<<<<<<<<<
+ *                                  get_slice_from_memview(dst, &dst_slice)[0],
+ *                                  src.ndim, dst.ndim, self.dtype_is_object)
+ */
+  __pyx_t_4 = __pyx_memoryview_copy_contents((__pyx_memoryview_get_slice_from_memoryview(((struct __pyx_memoryview_obj *)__pyx_v_src), (&__pyx_v_src_slice))[0]), (__pyx_memoryview_get_slice_from_memoryview(((struct __pyx_memoryview_obj *)__pyx_v_dst), (&__pyx_v_dst_slice))[0]), __pyx_t_2, __pyx_t_3, __pyx_v_self->dtype_is_object); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(1, 441, __pyx_L1_error)
+
+  /* "View.MemoryView":437
+ *         return obj
+ * 
+ *     cdef setitem_slice_assignment(self, dst, src):             # <<<<<<<<<<<<<<
+ *         cdef __Pyx_memviewslice dst_slice
+ *         cdef __Pyx_memviewslice src_slice
+ */
+
+  /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("View.MemoryView.memoryview.setitem_slice_assignment", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = 0;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "View.MemoryView":445
+ *                                  src.ndim, dst.ndim, self.dtype_is_object)
+ * 
+ *     cdef setitem_slice_assign_scalar(self, memoryview dst, value):             # <<<<<<<<<<<<<<
+ *         cdef int array[128]
+ *         cdef void *tmp = NULL
+ */
+
+static PyObject *__pyx_memoryview_setitem_slice_assign_scalar(struct __pyx_memoryview_obj *__pyx_v_self, struct __pyx_memoryview_obj *__pyx_v_dst, PyObject *__pyx_v_value) {
+  int __pyx_v_array[0x80];
+  void *__pyx_v_tmp;
+  void *__pyx_v_item;
+  __Pyx_memviewslice *__pyx_v_dst_slice;
+  __Pyx_memviewslice __pyx_v_tmp_slice;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  PyObject *__pyx_t_2 = NULL;
+  int __pyx_t_3;
+  int __pyx_t_4;
+  char const *__pyx_t_5;
+  PyObject *__pyx_t_6 = NULL;
+  PyObject *__pyx_t_7 = NULL;
+  PyObject *__pyx_t_8 = NULL;
+  PyObject *__pyx_t_9 = NULL;
+  PyObject *__pyx_t_10 = NULL;
+  PyObject *__pyx_t_11 = NULL;
+  __Pyx_RefNannySetupContext("setitem_slice_assign_scalar", 0);
+
+  /* "View.MemoryView":447
+ *     cdef setitem_slice_assign_scalar(self, memoryview dst, value):
+ *         cdef int array[128]
+ *         cdef void *tmp = NULL             # <<<<<<<<<<<<<<
+ *         cdef void *item
+ * 
+ */
+  __pyx_v_tmp = NULL;
+
+  /* "View.MemoryView":452
+ *         cdef __Pyx_memviewslice *dst_slice
+ *         cdef __Pyx_memviewslice tmp_slice
+ *         dst_slice = get_slice_from_memview(dst, &tmp_slice)             # <<<<<<<<<<<<<<
+ * 
+ *         if <size_t>self.view.itemsize > sizeof(array):
+ */
+  __pyx_v_dst_slice = __pyx_memoryview_get_slice_from_memoryview(__pyx_v_dst, (&__pyx_v_tmp_slice));
+
+  /* "View.MemoryView":454
+ *         dst_slice = get_slice_from_memview(dst, &tmp_slice)
+ * 
+ *         if <size_t>self.view.itemsize > sizeof(array):             # <<<<<<<<<<<<<<
+ *             tmp = PyMem_Malloc(self.view.itemsize)
+ *             if tmp == NULL:
+ */
+  __pyx_t_1 = ((((size_t)__pyx_v_self->view.itemsize) > (sizeof(__pyx_v_array))) != 0);
+  if (__pyx_t_1) {
+
+    /* "View.MemoryView":455
+ * 
+ *         if <size_t>self.view.itemsize > sizeof(array):
+ *             tmp = PyMem_Malloc(self.view.itemsize)             # <<<<<<<<<<<<<<
+ *             if tmp == NULL:
+ *                 raise MemoryError
+ */
+    __pyx_v_tmp = PyMem_Malloc(__pyx_v_self->view.itemsize);
+
+    /* "View.MemoryView":456
+ *         if <size_t>self.view.itemsize > sizeof(array):
+ *             tmp = PyMem_Malloc(self.view.itemsize)
+ *             if tmp == NULL:             # <<<<<<<<<<<<<<
+ *                 raise MemoryError
+ *             item = tmp
+ */
+    __pyx_t_1 = ((__pyx_v_tmp == NULL) != 0);
+    if (unlikely(__pyx_t_1)) {
+
+      /* "View.MemoryView":457
+ *             tmp = PyMem_Malloc(self.view.itemsize)
+ *             if tmp == NULL:
+ *                 raise MemoryError             # <<<<<<<<<<<<<<
+ *             item = tmp
+ *         else:
+ */
+      PyErr_NoMemory(); __PYX_ERR(1, 457, __pyx_L1_error)
+
+      /* "View.MemoryView":456
+ *         if <size_t>self.view.itemsize > sizeof(array):
+ *             tmp = PyMem_Malloc(self.view.itemsize)
+ *             if tmp == NULL:             # <<<<<<<<<<<<<<
+ *                 raise MemoryError
+ *             item = tmp
+ */
+    }
+
+    /* "View.MemoryView":458
+ *             if tmp == NULL:
+ *                 raise MemoryError
+ *             item = tmp             # <<<<<<<<<<<<<<
+ *         else:
+ *             item = <void *> array
+ */
+    __pyx_v_item = __pyx_v_tmp;
+
+    /* "View.MemoryView":454
+ *         dst_slice = get_slice_from_memview(dst, &tmp_slice)
+ * 
+ *         if <size_t>self.view.itemsize > sizeof(array):             # <<<<<<<<<<<<<<
+ *             tmp = PyMem_Malloc(self.view.itemsize)
+ *             if tmp == NULL:
+ */
+    goto __pyx_L3;
+  }
+
+  /* "View.MemoryView":460
+ *             item = tmp
+ *         else:
+ *             item = <void *> array             # <<<<<<<<<<<<<<
+ * 
+ *         try:
+ */
+  /*else*/ {
+    __pyx_v_item = ((void *)__pyx_v_array);
+  }
+  __pyx_L3:;
+
+  /* "View.MemoryView":462
+ *             item = <void *> array
+ * 
+ *         try:             # <<<<<<<<<<<<<<
+ *             if self.dtype_is_object:
+ *                 (<PyObject **> item)[0] = <PyObject *> value
+ */
+  /*try:*/ {
+
+    /* "View.MemoryView":463
+ * 
+ *         try:
+ *             if self.dtype_is_object:             # <<<<<<<<<<<<<<
+ *                 (<PyObject **> item)[0] = <PyObject *> value
+ *             else:
+ */
+    __pyx_t_1 = (__pyx_v_self->dtype_is_object != 0);
+    if (__pyx_t_1) {
+
+      /* "View.MemoryView":464
+ *         try:
+ *             if self.dtype_is_object:
+ *                 (<PyObject **> item)[0] = <PyObject *> value             # <<<<<<<<<<<<<<
+ *             else:
+ *                 self.assign_item_from_object(<char *> item, value)
+ */
+      (((PyObject **)__pyx_v_item)[0]) = ((PyObject *)__pyx_v_value);
+
+      /* "View.MemoryView":463
+ * 
+ *         try:
+ *             if self.dtype_is_object:             # <<<<<<<<<<<<<<
+ *                 (<PyObject **> item)[0] = <PyObject *> value
+ *             else:
+ */
+      goto __pyx_L8;
+    }
+
+    /* "View.MemoryView":466
+ *                 (<PyObject **> item)[0] = <PyObject *> value
+ *             else:
+ *                 self.assign_item_from_object(<char *> item, value)             # <<<<<<<<<<<<<<
+ * 
+ * 
+ */
+    /*else*/ {
+      __pyx_t_2 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->assign_item_from_object(__pyx_v_self, ((char *)__pyx_v_item), __pyx_v_value); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 466, __pyx_L6_error)
+      __Pyx_GOTREF(__pyx_t_2);
+      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+    }
+    __pyx_L8:;
+
+    /* "View.MemoryView":470
+ * 
+ * 
+ *             if self.view.suboffsets != NULL:             # <<<<<<<<<<<<<<
+ *                 assert_direct_dimensions(self.view.suboffsets, self.view.ndim)
+ *             slice_assign_scalar(dst_slice, dst.view.ndim, self.view.itemsize,
+ */
+    __pyx_t_1 = ((__pyx_v_self->view.suboffsets != NULL) != 0);
+    if (__pyx_t_1) {
+
+      /* "View.MemoryView":471
+ * 
+ *             if self.view.suboffsets != NULL:
+ *                 assert_direct_dimensions(self.view.suboffsets, self.view.ndim)             # <<<<<<<<<<<<<<
+ *             slice_assign_scalar(dst_slice, dst.view.ndim, self.view.itemsize,
+ *                                 item, self.dtype_is_object)
+ */
+      __pyx_t_2 = assert_direct_dimensions(__pyx_v_self->view.suboffsets, __pyx_v_self->view.ndim); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 471, __pyx_L6_error)
+      __Pyx_GOTREF(__pyx_t_2);
+      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+
+      /* "View.MemoryView":470
+ * 
+ * 
+ *             if self.view.suboffsets != NULL:             # <<<<<<<<<<<<<<
+ *                 assert_direct_dimensions(self.view.suboffsets, self.view.ndim)
+ *             slice_assign_scalar(dst_slice, dst.view.ndim, self.view.itemsize,
+ */
+    }
+
+    /* "View.MemoryView":472
+ *             if self.view.suboffsets != NULL:
+ *                 assert_direct_dimensions(self.view.suboffsets, self.view.ndim)
+ *             slice_assign_scalar(dst_slice, dst.view.ndim, self.view.itemsize,             # <<<<<<<<<<<<<<
+ *                                 item, self.dtype_is_object)
+ *         finally:
+ */
+    __pyx_memoryview_slice_assign_scalar(__pyx_v_dst_slice, __pyx_v_dst->view.ndim, __pyx_v_self->view.itemsize, __pyx_v_item, __pyx_v_self->dtype_is_object);
+  }
+
+  /* "View.MemoryView":475
+ *                                 item, self.dtype_is_object)
+ *         finally:
+ *             PyMem_Free(tmp)             # <<<<<<<<<<<<<<
+ * 
+ *     cdef setitem_indexed(self, index, value):
+ */
+  /*finally:*/ {
+    /*normal exit:*/{
+      PyMem_Free(__pyx_v_tmp);
+      goto __pyx_L7;
+    }
+    __pyx_L6_error:;
+    /*exception exit:*/{
+      __Pyx_PyThreadState_declare
+      __Pyx_PyThreadState_assign
+      __pyx_t_6 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0;
+      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
+      if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11);
+      if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8) < 0)) __Pyx_ErrFetch(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8);
+      __Pyx_XGOTREF(__pyx_t_6);
+      __Pyx_XGOTREF(__pyx_t_7);
+      __Pyx_XGOTREF(__pyx_t_8);
+      __Pyx_XGOTREF(__pyx_t_9);
+      __Pyx_XGOTREF(__pyx_t_10);
+      __Pyx_XGOTREF(__pyx_t_11);
+      __pyx_t_3 = __pyx_lineno; __pyx_t_4 = __pyx_clineno; __pyx_t_5 = __pyx_filename;
+      {
+        PyMem_Free(__pyx_v_tmp);
+      }
+      if (PY_MAJOR_VERSION >= 3) {
+        __Pyx_XGIVEREF(__pyx_t_9);
+        __Pyx_XGIVEREF(__pyx_t_10);
+        __Pyx_XGIVEREF(__pyx_t_11);
+        __Pyx_ExceptionReset(__pyx_t_9, __pyx_t_10, __pyx_t_11);
+      }
+      __Pyx_XGIVEREF(__pyx_t_6);
+      __Pyx_XGIVEREF(__pyx_t_7);
+      __Pyx_XGIVEREF(__pyx_t_8);
+      __Pyx_ErrRestore(__pyx_t_6, __pyx_t_7, __pyx_t_8);
+      __pyx_t_6 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0;
+      __pyx_lineno = __pyx_t_3; __pyx_clineno = __pyx_t_4; __pyx_filename = __pyx_t_5;
+      goto __pyx_L1_error;
+    }
+    __pyx_L7:;
+  }
+
+  /* "View.MemoryView":445
+ *                                  src.ndim, dst.ndim, self.dtype_is_object)
+ * 
+ *     cdef setitem_slice_assign_scalar(self, memoryview dst, value):             # <<<<<<<<<<<<<<
+ *         cdef int array[128]
+ *         cdef void *tmp = NULL
+ */
+
+  /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_AddTraceback("View.MemoryView.memoryview.setitem_slice_assign_scalar", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = 0;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "View.MemoryView":477
+ *             PyMem_Free(tmp)
+ * 
+ *     cdef setitem_indexed(self, index, value):             # <<<<<<<<<<<<<<
+ *         cdef char *itemp = self.get_item_pointer(index)
+ *         self.assign_item_from_object(itemp, value)
+ */
+
+static PyObject *__pyx_memoryview_setitem_indexed(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_index, PyObject *__pyx_v_value) {
+  char *__pyx_v_itemp;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  char *__pyx_t_1;
+  PyObject *__pyx_t_2 = NULL;
+  __Pyx_RefNannySetupContext("setitem_indexed", 0);
+
+  /* "View.MemoryView":478
+ * 
+ *     cdef setitem_indexed(self, index, value):
+ *         cdef char *itemp = self.get_item_pointer(index)             # <<<<<<<<<<<<<<
+ *         self.assign_item_from_object(itemp, value)
+ * 
+ */
+  __pyx_t_1 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->get_item_pointer(__pyx_v_self, __pyx_v_index); if (unlikely(__pyx_t_1 == ((char *)NULL))) __PYX_ERR(1, 478, __pyx_L1_error)
+  __pyx_v_itemp = __pyx_t_1;
+
+  /* "View.MemoryView":479
+ *     cdef setitem_indexed(self, index, value):
+ *         cdef char *itemp = self.get_item_pointer(index)
+ *         self.assign_item_from_object(itemp, value)             # <<<<<<<<<<<<<<
+ * 
+ *     cdef convert_item_to_object(self, char *itemp):
+ */
+  __pyx_t_2 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->assign_item_from_object(__pyx_v_self, __pyx_v_itemp, __pyx_v_value); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 479, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+
+  /* "View.MemoryView":477
+ *             PyMem_Free(tmp)
+ * 
+ *     cdef setitem_indexed(self, index, value):             # <<<<<<<<<<<<<<
+ *         cdef char *itemp = self.get_item_pointer(index)
+ *         self.assign_item_from_object(itemp, value)
+ */
+
+  /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_AddTraceback("View.MemoryView.memoryview.setitem_indexed", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = 0;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "View.MemoryView":481
+ *         self.assign_item_from_object(itemp, value)
+ * 
+ *     cdef convert_item_to_object(self, char *itemp):             # <<<<<<<<<<<<<<
+ *         """Only used if instantiated manually by the user, or if Cython doesn't
+ *         know how to convert the type"""
+ */
+
+static PyObject *__pyx_memoryview_convert_item_to_object(struct __pyx_memoryview_obj *__pyx_v_self, char *__pyx_v_itemp) {
+  PyObject *__pyx_v_struct = NULL;
+  PyObject *__pyx_v_bytesitem = 0;
+  PyObject *__pyx_v_result = NULL;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
+  PyObject *__pyx_t_5 = NULL;
+  PyObject *__pyx_t_6 = NULL;
+  PyObject *__pyx_t_7 = NULL;
+  int __pyx_t_8;
+  PyObject *__pyx_t_9 = NULL;
+  size_t __pyx_t_10;
+  int __pyx_t_11;
+  __Pyx_RefNannySetupContext("convert_item_to_object", 0);
+
+  /* "View.MemoryView":484
+ *         """Only used if instantiated manually by the user, or if Cython doesn't
+ *         know how to convert the type"""
+ *         import struct             # <<<<<<<<<<<<<<
+ *         cdef bytes bytesitem
+ * 
+ */
+  __pyx_t_1 = __Pyx_Import(__pyx_n_s_struct, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 484, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_struct = __pyx_t_1;
+  __pyx_t_1 = 0;
+
+  /* "View.MemoryView":487
+ *         cdef bytes bytesitem
+ * 
+ *         bytesitem = itemp[:self.view.itemsize]             # <<<<<<<<<<<<<<
+ *         try:
+ *             result = struct.unpack(self.view.format, bytesitem)
+ */
+  __pyx_t_1 = __Pyx_PyBytes_FromStringAndSize(__pyx_v_itemp + 0, __pyx_v_self->view.itemsize - 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 487, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_bytesitem = ((PyObject*)__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "View.MemoryView":488
+ * 
+ *         bytesitem = itemp[:self.view.itemsize]
+ *         try:             # <<<<<<<<<<<<<<
+ *             result = struct.unpack(self.view.format, bytesitem)
+ *         except struct.error:
+ */
+  {
+    __Pyx_PyThreadState_declare
+    __Pyx_PyThreadState_assign
+    __Pyx_ExceptionSave(&__pyx_t_2, &__pyx_t_3, &__pyx_t_4);
+    __Pyx_XGOTREF(__pyx_t_2);
+    __Pyx_XGOTREF(__pyx_t_3);
+    __Pyx_XGOTREF(__pyx_t_4);
+    /*try:*/ {
+
+      /* "View.MemoryView":489
+ *         bytesitem = itemp[:self.view.itemsize]
+ *         try:
+ *             result = struct.unpack(self.view.format, bytesitem)             # <<<<<<<<<<<<<<
+ *         except struct.error:
+ *             raise ValueError("Unable to convert item to object")
+ */
+      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_struct, __pyx_n_s_unpack); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 489, __pyx_L3_error)
+      __Pyx_GOTREF(__pyx_t_5);
+      __pyx_t_6 = __Pyx_PyBytes_FromString(__pyx_v_self->view.format); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 489, __pyx_L3_error)
+      __Pyx_GOTREF(__pyx_t_6);
+      __pyx_t_7 = NULL;
+      __pyx_t_8 = 0;
+      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
+        __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_5);
+        if (likely(__pyx_t_7)) {
+          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
+          __Pyx_INCREF(__pyx_t_7);
+          __Pyx_INCREF(function);
+          __Pyx_DECREF_SET(__pyx_t_5, function);
+          __pyx_t_8 = 1;
+        }
+      }
+      #if CYTHON_FAST_PYCALL
+      if (PyFunction_Check(__pyx_t_5)) {
+        PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_t_6, __pyx_v_bytesitem};
+        __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 489, __pyx_L3_error)
+        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
+        __Pyx_GOTREF(__pyx_t_1);
+        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+      } else
+      #endif
+      #if CYTHON_FAST_PYCCALL
+      if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
+        PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_t_6, __pyx_v_bytesitem};
+        __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 489, __pyx_L3_error)
+        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
+        __Pyx_GOTREF(__pyx_t_1);
+        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+      } else
+      #endif
+      {
+        __pyx_t_9 = PyTuple_New(2+__pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 489, __pyx_L3_error)
+        __Pyx_GOTREF(__pyx_t_9);
+        if (__pyx_t_7) {
+          __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_7); __pyx_t_7 = NULL;
+        }
+        __Pyx_GIVEREF(__pyx_t_6);
+        PyTuple_SET_ITEM(__pyx_t_9, 0+__pyx_t_8, __pyx_t_6);
+        __Pyx_INCREF(__pyx_v_bytesitem);
+        __Pyx_GIVEREF(__pyx_v_bytesitem);
+        PyTuple_SET_ITEM(__pyx_t_9, 1+__pyx_t_8, __pyx_v_bytesitem);
+        __pyx_t_6 = 0;
+        __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_9, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 489, __pyx_L3_error)
+        __Pyx_GOTREF(__pyx_t_1);
+        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+      }
+      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+      __pyx_v_result = __pyx_t_1;
+      __pyx_t_1 = 0;
+
+      /* "View.MemoryView":488
+ * 
+ *         bytesitem = itemp[:self.view.itemsize]
+ *         try:             # <<<<<<<<<<<<<<
+ *             result = struct.unpack(self.view.format, bytesitem)
+ *         except struct.error:
+ */
+    }
+
+    /* "View.MemoryView":493
+ *             raise ValueError("Unable to convert item to object")
+ *         else:
+ *             if len(self.view.format) == 1:             # <<<<<<<<<<<<<<
+ *                 return result[0]
+ *             return result
+ */
+    /*else:*/ {
+      __pyx_t_10 = strlen(__pyx_v_self->view.format); 
+      __pyx_t_11 = ((__pyx_t_10 == 1) != 0);
+      if (__pyx_t_11) {
+
+        /* "View.MemoryView":494
+ *         else:
+ *             if len(self.view.format) == 1:
+ *                 return result[0]             # <<<<<<<<<<<<<<
+ *             return result
+ * 
+ */
+        __Pyx_XDECREF(__pyx_r);
+        __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_result, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 494, __pyx_L5_except_error)
+        __Pyx_GOTREF(__pyx_t_1);
+        __pyx_r = __pyx_t_1;
+        __pyx_t_1 = 0;
+        goto __pyx_L6_except_return;
+
+        /* "View.MemoryView":493
+ *             raise ValueError("Unable to convert item to object")
+ *         else:
+ *             if len(self.view.format) == 1:             # <<<<<<<<<<<<<<
+ *                 return result[0]
+ *             return result
+ */
+      }
+
+      /* "View.MemoryView":495
+ *             if len(self.view.format) == 1:
+ *                 return result[0]
+ *             return result             # <<<<<<<<<<<<<<
+ * 
+ *     cdef assign_item_from_object(self, char *itemp, object value):
+ */
+      __Pyx_XDECREF(__pyx_r);
+      __Pyx_INCREF(__pyx_v_result);
+      __pyx_r = __pyx_v_result;
+      goto __pyx_L6_except_return;
+    }
+    __pyx_L3_error:;
+    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
+    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
+    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
+    __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
+
+    /* "View.MemoryView":490
+ *         try:
+ *             result = struct.unpack(self.view.format, bytesitem)
+ *         except struct.error:             # <<<<<<<<<<<<<<
+ *             raise ValueError("Unable to convert item to object")
+ *         else:
+ */
+    __Pyx_ErrFetch(&__pyx_t_1, &__pyx_t_5, &__pyx_t_9);
+    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_struct, __pyx_n_s_error); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 490, __pyx_L5_except_error)
+    __Pyx_GOTREF(__pyx_t_6);
+    __pyx_t_8 = __Pyx_PyErr_GivenExceptionMatches(__pyx_t_1, __pyx_t_6);
+    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+    __Pyx_ErrRestore(__pyx_t_1, __pyx_t_5, __pyx_t_9);
+    __pyx_t_1 = 0; __pyx_t_5 = 0; __pyx_t_9 = 0;
+    if (__pyx_t_8) {
+      __Pyx_AddTraceback("View.MemoryView.memoryview.convert_item_to_object", __pyx_clineno, __pyx_lineno, __pyx_filename);
+      if (__Pyx_GetException(&__pyx_t_9, &__pyx_t_5, &__pyx_t_1) < 0) __PYX_ERR(1, 490, __pyx_L5_except_error)
+      __Pyx_GOTREF(__pyx_t_9);
+      __Pyx_GOTREF(__pyx_t_5);
+      __Pyx_GOTREF(__pyx_t_1);
+
+      /* "View.MemoryView":491
+ *             result = struct.unpack(self.view.format, bytesitem)
+ *         except struct.error:
+ *             raise ValueError("Unable to convert item to object")             # <<<<<<<<<<<<<<
+ *         else:
+ *             if len(self.view.format) == 1:
+ */
+      __pyx_t_6 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__13, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 491, __pyx_L5_except_error)
+      __Pyx_GOTREF(__pyx_t_6);
+      __Pyx_Raise(__pyx_t_6, 0, 0, 0);
+      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+      __PYX_ERR(1, 491, __pyx_L5_except_error)
+    }
+    goto __pyx_L5_except_error;
+    __pyx_L5_except_error:;
+
+    /* "View.MemoryView":488
+ * 
+ *         bytesitem = itemp[:self.view.itemsize]
+ *         try:             # <<<<<<<<<<<<<<
+ *             result = struct.unpack(self.view.format, bytesitem)
+ *         except struct.error:
+ */
+    __Pyx_XGIVEREF(__pyx_t_2);
+    __Pyx_XGIVEREF(__pyx_t_3);
+    __Pyx_XGIVEREF(__pyx_t_4);
+    __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
+    goto __pyx_L1_error;
+    __pyx_L6_except_return:;
+    __Pyx_XGIVEREF(__pyx_t_2);
+    __Pyx_XGIVEREF(__pyx_t_3);
+    __Pyx_XGIVEREF(__pyx_t_4);
+    __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
+    goto __pyx_L0;
+  }
+
+  /* "View.MemoryView":481
+ *         self.assign_item_from_object(itemp, value)
+ * 
+ *     cdef convert_item_to_object(self, char *itemp):             # <<<<<<<<<<<<<<
+ *         """Only used if instantiated manually by the user, or if Cython doesn't
+ *         know how to convert the type"""
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_5);
+  __Pyx_XDECREF(__pyx_t_6);
+  __Pyx_XDECREF(__pyx_t_7);
+  __Pyx_XDECREF(__pyx_t_9);
+  __Pyx_AddTraceback("View.MemoryView.memoryview.convert_item_to_object", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = 0;
+  __pyx_L0:;
+  __Pyx_XDECREF(__pyx_v_struct);
+  __Pyx_XDECREF(__pyx_v_bytesitem);
+  __Pyx_XDECREF(__pyx_v_result);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "View.MemoryView":497
+ *             return result
+ * 
+ *     cdef assign_item_from_object(self, char *itemp, object value):             # <<<<<<<<<<<<<<
+ *         """Only used if instantiated manually by the user, or if Cython doesn't
+ *         know how to convert the type"""
+ */
+
+static PyObject *__pyx_memoryview_assign_item_from_object(struct __pyx_memoryview_obj *__pyx_v_self, char *__pyx_v_itemp, PyObject *__pyx_v_value) {
+  PyObject *__pyx_v_struct = NULL;
+  char __pyx_v_c;
+  PyObject *__pyx_v_bytesvalue = 0;
+  Py_ssize_t __pyx_v_i;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_2;
+  int __pyx_t_3;
+  PyObject *__pyx_t_4 = NULL;
+  PyObject *__pyx_t_5 = NULL;
+  PyObject *__pyx_t_6 = NULL;
+  int __pyx_t_7;
+  PyObject *__pyx_t_8 = NULL;
+  Py_ssize_t __pyx_t_9;
+  PyObject *__pyx_t_10 = NULL;
+  char *__pyx_t_11;
+  char *__pyx_t_12;
+  char *__pyx_t_13;
+  char *__pyx_t_14;
+  __Pyx_RefNannySetupContext("assign_item_from_object", 0);
+
+  /* "View.MemoryView":500
+ *         """Only used if instantiated manually by the user, or if Cython doesn't
+ *         know how to convert the type"""
+ *         import struct             # <<<<<<<<<<<<<<
+ *         cdef char c
+ *         cdef bytes bytesvalue
+ */
+  __pyx_t_1 = __Pyx_Import(__pyx_n_s_struct, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 500, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_struct = __pyx_t_1;
+  __pyx_t_1 = 0;
+
+  /* "View.MemoryView":505
+ *         cdef Py_ssize_t i
+ * 
+ *         if isinstance(value, tuple):             # <<<<<<<<<<<<<<
+ *             bytesvalue = struct.pack(self.view.format, *value)
+ *         else:
+ */
+  __pyx_t_2 = PyTuple_Check(__pyx_v_value); 
+  __pyx_t_3 = (__pyx_t_2 != 0);
+  if (__pyx_t_3) {
+
+    /* "View.MemoryView":506
+ * 
+ *         if isinstance(value, tuple):
+ *             bytesvalue = struct.pack(self.view.format, *value)             # <<<<<<<<<<<<<<
+ *         else:
+ *             bytesvalue = struct.pack(self.view.format, value)
+ */
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_struct, __pyx_n_s_pack); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 506, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_1);
+    __pyx_t_4 = __Pyx_PyBytes_FromString(__pyx_v_self->view.format); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 506, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
+    __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 506, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_5);
+    __Pyx_GIVEREF(__pyx_t_4);
+    PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4);
+    __pyx_t_4 = 0;
+    __pyx_t_4 = __Pyx_PySequence_Tuple(__pyx_v_value); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 506, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
+    __pyx_t_6 = PyNumber_Add(__pyx_t_5, __pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 506, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_6);
+    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_6, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 506, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+    if (!(likely(PyBytes_CheckExact(__pyx_t_4))||((__pyx_t_4) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_t_4)->tp_name), 0))) __PYX_ERR(1, 506, __pyx_L1_error)
+    __pyx_v_bytesvalue = ((PyObject*)__pyx_t_4);
+    __pyx_t_4 = 0;
+
+    /* "View.MemoryView":505
+ *         cdef Py_ssize_t i
+ * 
+ *         if isinstance(value, tuple):             # <<<<<<<<<<<<<<
+ *             bytesvalue = struct.pack(self.view.format, *value)
+ *         else:
+ */
+    goto __pyx_L3;
+  }
+
+  /* "View.MemoryView":508
+ *             bytesvalue = struct.pack(self.view.format, *value)
+ *         else:
+ *             bytesvalue = struct.pack(self.view.format, value)             # <<<<<<<<<<<<<<
+ * 
+ *         for i, c in enumerate(bytesvalue):
+ */
+  /*else*/ {
+    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_struct, __pyx_n_s_pack); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 508, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_6);
+    __pyx_t_1 = __Pyx_PyBytes_FromString(__pyx_v_self->view.format); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 508, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_1);
+    __pyx_t_5 = NULL;
+    __pyx_t_7 = 0;
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
+      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_6);
+      if (likely(__pyx_t_5)) {
+        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
+        __Pyx_INCREF(__pyx_t_5);
+        __Pyx_INCREF(function);
+        __Pyx_DECREF_SET(__pyx_t_6, function);
+        __pyx_t_7 = 1;
+      }
+    }
+    #if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(__pyx_t_6)) {
+      PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_t_1, __pyx_v_value};
+      __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 508, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
+      __Pyx_GOTREF(__pyx_t_4);
+      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    } else
+    #endif
+    #if CYTHON_FAST_PYCCALL
+    if (__Pyx_PyFastCFunction_Check(__pyx_t_6)) {
+      PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_t_1, __pyx_v_value};
+      __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 508, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
+      __Pyx_GOTREF(__pyx_t_4);
+      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    } else
+    #endif
+    {
+      __pyx_t_8 = PyTuple_New(2+__pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 508, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_8);
+      if (__pyx_t_5) {
+        __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_5); __pyx_t_5 = NULL;
+      }
+      __Pyx_GIVEREF(__pyx_t_1);
+      PyTuple_SET_ITEM(__pyx_t_8, 0+__pyx_t_7, __pyx_t_1);
+      __Pyx_INCREF(__pyx_v_value);
+      __Pyx_GIVEREF(__pyx_v_value);
+      PyTuple_SET_ITEM(__pyx_t_8, 1+__pyx_t_7, __pyx_v_value);
+      __pyx_t_1 = 0;
+      __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_8, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 508, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_4);
+      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+    }
+    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+    if (!(likely(PyBytes_CheckExact(__pyx_t_4))||((__pyx_t_4) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_t_4)->tp_name), 0))) __PYX_ERR(1, 508, __pyx_L1_error)
+    __pyx_v_bytesvalue = ((PyObject*)__pyx_t_4);
+    __pyx_t_4 = 0;
+  }
+  __pyx_L3:;
+
+  /* "View.MemoryView":510
+ *             bytesvalue = struct.pack(self.view.format, value)
+ * 
+ *         for i, c in enumerate(bytesvalue):             # <<<<<<<<<<<<<<
+ *             itemp[i] = c
+ * 
+ */
+  __pyx_t_9 = 0;
+  if (unlikely(__pyx_v_bytesvalue == Py_None)) {
+    PyErr_SetString(PyExc_TypeError, "'NoneType' is not iterable");
+    __PYX_ERR(1, 510, __pyx_L1_error)
+  }
+  __Pyx_INCREF(__pyx_v_bytesvalue);
+  __pyx_t_10 = __pyx_v_bytesvalue;
+  __pyx_t_12 = PyBytes_AS_STRING(__pyx_t_10);
+  __pyx_t_13 = (__pyx_t_12 + PyBytes_GET_SIZE(__pyx_t_10));
+  for (__pyx_t_14 = __pyx_t_12; __pyx_t_14 < __pyx_t_13; __pyx_t_14++) {
+    __pyx_t_11 = __pyx_t_14;
+    __pyx_v_c = (__pyx_t_11[0]);
+
+    /* "View.MemoryView":511
+ * 
+ *         for i, c in enumerate(bytesvalue):
+ *             itemp[i] = c             # <<<<<<<<<<<<<<
+ * 
+ *     @cname('getbuffer')
+ */
+    __pyx_v_i = __pyx_t_9;
+
+    /* "View.MemoryView":510
+ *             bytesvalue = struct.pack(self.view.format, value)
+ * 
+ *         for i, c in enumerate(bytesvalue):             # <<<<<<<<<<<<<<
+ *             itemp[i] = c
+ * 
+ */
+    __pyx_t_9 = (__pyx_t_9 + 1);
+
+    /* "View.MemoryView":511
+ * 
+ *         for i, c in enumerate(bytesvalue):
+ *             itemp[i] = c             # <<<<<<<<<<<<<<
+ * 
+ *     @cname('getbuffer')
+ */
+    (__pyx_v_itemp[__pyx_v_i]) = __pyx_v_c;
+  }
+  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+
+  /* "View.MemoryView":497
+ *             return result
+ * 
+ *     cdef assign_item_from_object(self, char *itemp, object value):             # <<<<<<<<<<<<<<
+ *         """Only used if instantiated manually by the user, or if Cython doesn't
+ *         know how to convert the type"""
+ */
+
+  /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_XDECREF(__pyx_t_5);
+  __Pyx_XDECREF(__pyx_t_6);
+  __Pyx_XDECREF(__pyx_t_8);
+  __Pyx_XDECREF(__pyx_t_10);
+  __Pyx_AddTraceback("View.MemoryView.memoryview.assign_item_from_object", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = 0;
+  __pyx_L0:;
+  __Pyx_XDECREF(__pyx_v_struct);
+  __Pyx_XDECREF(__pyx_v_bytesvalue);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "View.MemoryView":514
+ * 
+ *     @cname('getbuffer')
+ *     def __getbuffer__(self, Py_buffer *info, int flags):             # <<<<<<<<<<<<<<
+ *         if flags & PyBUF_WRITABLE and self.view.readonly:
+ *             raise ValueError("Cannot create writable memory view from read-only memoryview")
+ */
+
+/* Python wrapper */
+static CYTHON_UNUSED int __pyx_memoryview_getbuffer(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /*proto*/
+static CYTHON_UNUSED int __pyx_memoryview_getbuffer(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__getbuffer__ (wrapper)", 0);
+  __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_8__getbuffer__(((struct __pyx_memoryview_obj *)__pyx_v_self), ((Py_buffer *)__pyx_v_info), ((int)__pyx_v_flags));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static int __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_8__getbuffer__(struct __pyx_memoryview_obj *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  int __pyx_t_2;
+  PyObject *__pyx_t_3 = NULL;
+  Py_ssize_t *__pyx_t_4;
+  char *__pyx_t_5;
+  void *__pyx_t_6;
+  int __pyx_t_7;
+  Py_ssize_t __pyx_t_8;
+  if (__pyx_v_info == NULL) {
+    PyErr_SetString(PyExc_BufferError, "PyObject_GetBuffer: view==NULL argument is obsolete");
+    return -1;
+  }
+  __Pyx_RefNannySetupContext("__getbuffer__", 0);
+  __pyx_v_info->obj = Py_None; __Pyx_INCREF(Py_None);
+  __Pyx_GIVEREF(__pyx_v_info->obj);
+
+  /* "View.MemoryView":515
+ *     @cname('getbuffer')
+ *     def __getbuffer__(self, Py_buffer *info, int flags):
+ *         if flags & PyBUF_WRITABLE and self.view.readonly:             # <<<<<<<<<<<<<<
+ *             raise ValueError("Cannot create writable memory view from read-only memoryview")
+ * 
+ */
+  __pyx_t_2 = ((__pyx_v_flags & PyBUF_WRITABLE) != 0);
+  if (__pyx_t_2) {
+  } else {
+    __pyx_t_1 = __pyx_t_2;
+    goto __pyx_L4_bool_binop_done;
+  }
+  __pyx_t_2 = (__pyx_v_self->view.readonly != 0);
+  __pyx_t_1 = __pyx_t_2;
+  __pyx_L4_bool_binop_done:;
+  if (unlikely(__pyx_t_1)) {
+
+    /* "View.MemoryView":516
+ *     def __getbuffer__(self, Py_buffer *info, int flags):
+ *         if flags & PyBUF_WRITABLE and self.view.readonly:
+ *             raise ValueError("Cannot create writable memory view from read-only memoryview")             # <<<<<<<<<<<<<<
+ * 
+ *         if flags & PyBUF_ND:
+ */
+    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__14, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 516, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    __Pyx_Raise(__pyx_t_3, 0, 0, 0);
+    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+    __PYX_ERR(1, 516, __pyx_L1_error)
+
+    /* "View.MemoryView":515
+ *     @cname('getbuffer')
+ *     def __getbuffer__(self, Py_buffer *info, int flags):
+ *         if flags & PyBUF_WRITABLE and self.view.readonly:             # <<<<<<<<<<<<<<
+ *             raise ValueError("Cannot create writable memory view from read-only memoryview")
+ * 
+ */
+  }
+
+  /* "View.MemoryView":518
+ *             raise ValueError("Cannot create writable memory view from read-only memoryview")
+ * 
+ *         if flags & PyBUF_ND:             # <<<<<<<<<<<<<<
+ *             info.shape = self.view.shape
+ *         else:
+ */
+  __pyx_t_1 = ((__pyx_v_flags & PyBUF_ND) != 0);
+  if (__pyx_t_1) {
+
+    /* "View.MemoryView":519
+ * 
+ *         if flags & PyBUF_ND:
+ *             info.shape = self.view.shape             # <<<<<<<<<<<<<<
+ *         else:
+ *             info.shape = NULL
+ */
+    __pyx_t_4 = __pyx_v_self->view.shape;
+    __pyx_v_info->shape = __pyx_t_4;
+
+    /* "View.MemoryView":518
+ *             raise ValueError("Cannot create writable memory view from read-only memoryview")
+ * 
+ *         if flags & PyBUF_ND:             # <<<<<<<<<<<<<<
+ *             info.shape = self.view.shape
+ *         else:
+ */
+    goto __pyx_L6;
+  }
+
+  /* "View.MemoryView":521
+ *             info.shape = self.view.shape
+ *         else:
+ *             info.shape = NULL             # <<<<<<<<<<<<<<
+ * 
+ *         if flags & PyBUF_STRIDES:
+ */
+  /*else*/ {
+    __pyx_v_info->shape = NULL;
+  }
+  __pyx_L6:;
+
+  /* "View.MemoryView":523
+ *             info.shape = NULL
+ * 
+ *         if flags & PyBUF_STRIDES:             # <<<<<<<<<<<<<<
+ *             info.strides = self.view.strides
+ *         else:
+ */
+  __pyx_t_1 = ((__pyx_v_flags & PyBUF_STRIDES) != 0);
+  if (__pyx_t_1) {
+
+    /* "View.MemoryView":524
+ * 
+ *         if flags & PyBUF_STRIDES:
+ *             info.strides = self.view.strides             # <<<<<<<<<<<<<<
+ *         else:
+ *             info.strides = NULL
+ */
+    __pyx_t_4 = __pyx_v_self->view.strides;
+    __pyx_v_info->strides = __pyx_t_4;
+
+    /* "View.MemoryView":523
+ *             info.shape = NULL
+ * 
+ *         if flags & PyBUF_STRIDES:             # <<<<<<<<<<<<<<
+ *             info.strides = self.view.strides
+ *         else:
+ */
+    goto __pyx_L7;
+  }
+
+  /* "View.MemoryView":526
+ *             info.strides = self.view.strides
+ *         else:
+ *             info.strides = NULL             # <<<<<<<<<<<<<<
+ * 
+ *         if flags & PyBUF_INDIRECT:
+ */
+  /*else*/ {
+    __pyx_v_info->strides = NULL;
+  }
+  __pyx_L7:;
+
+  /* "View.MemoryView":528
+ *             info.strides = NULL
+ * 
+ *         if flags & PyBUF_INDIRECT:             # <<<<<<<<<<<<<<
+ *             info.suboffsets = self.view.suboffsets
+ *         else:
+ */
+  __pyx_t_1 = ((__pyx_v_flags & PyBUF_INDIRECT) != 0);
+  if (__pyx_t_1) {
+
+    /* "View.MemoryView":529
+ * 
+ *         if flags & PyBUF_INDIRECT:
+ *             info.suboffsets = self.view.suboffsets             # <<<<<<<<<<<<<<
+ *         else:
+ *             info.suboffsets = NULL
+ */
+    __pyx_t_4 = __pyx_v_self->view.suboffsets;
+    __pyx_v_info->suboffsets = __pyx_t_4;
+
+    /* "View.MemoryView":528
+ *             info.strides = NULL
+ * 
+ *         if flags & PyBUF_INDIRECT:             # <<<<<<<<<<<<<<
+ *             info.suboffsets = self.view.suboffsets
+ *         else:
+ */
+    goto __pyx_L8;
+  }
+
+  /* "View.MemoryView":531
+ *             info.suboffsets = self.view.suboffsets
+ *         else:
+ *             info.suboffsets = NULL             # <<<<<<<<<<<<<<
+ * 
+ *         if flags & PyBUF_FORMAT:
+ */
+  /*else*/ {
+    __pyx_v_info->suboffsets = NULL;
+  }
+  __pyx_L8:;
+
+  /* "View.MemoryView":533
+ *             info.suboffsets = NULL
+ * 
+ *         if flags & PyBUF_FORMAT:             # <<<<<<<<<<<<<<
+ *             info.format = self.view.format
+ *         else:
+ */
+  __pyx_t_1 = ((__pyx_v_flags & PyBUF_FORMAT) != 0);
+  if (__pyx_t_1) {
+
+    /* "View.MemoryView":534
+ * 
+ *         if flags & PyBUF_FORMAT:
+ *             info.format = self.view.format             # <<<<<<<<<<<<<<
+ *         else:
+ *             info.format = NULL
+ */
+    __pyx_t_5 = __pyx_v_self->view.format;
+    __pyx_v_info->format = __pyx_t_5;
+
+    /* "View.MemoryView":533
+ *             info.suboffsets = NULL
+ * 
+ *         if flags & PyBUF_FORMAT:             # <<<<<<<<<<<<<<
+ *             info.format = self.view.format
+ *         else:
+ */
+    goto __pyx_L9;
+  }
+
+  /* "View.MemoryView":536
+ *             info.format = self.view.format
+ *         else:
+ *             info.format = NULL             # <<<<<<<<<<<<<<
+ * 
+ *         info.buf = self.view.buf
+ */
+  /*else*/ {
+    __pyx_v_info->format = NULL;
+  }
+  __pyx_L9:;
+
+  /* "View.MemoryView":538
+ *             info.format = NULL
+ * 
+ *         info.buf = self.view.buf             # <<<<<<<<<<<<<<
+ *         info.ndim = self.view.ndim
+ *         info.itemsize = self.view.itemsize
+ */
+  __pyx_t_6 = __pyx_v_self->view.buf;
+  __pyx_v_info->buf = __pyx_t_6;
+
+  /* "View.MemoryView":539
+ * 
+ *         info.buf = self.view.buf
+ *         info.ndim = self.view.ndim             # <<<<<<<<<<<<<<
+ *         info.itemsize = self.view.itemsize
+ *         info.len = self.view.len
+ */
+  __pyx_t_7 = __pyx_v_self->view.ndim;
+  __pyx_v_info->ndim = __pyx_t_7;
+
+  /* "View.MemoryView":540
+ *         info.buf = self.view.buf
+ *         info.ndim = self.view.ndim
+ *         info.itemsize = self.view.itemsize             # <<<<<<<<<<<<<<
+ *         info.len = self.view.len
+ *         info.readonly = self.view.readonly
+ */
+  __pyx_t_8 = __pyx_v_self->view.itemsize;
+  __pyx_v_info->itemsize = __pyx_t_8;
+
+  /* "View.MemoryView":541
+ *         info.ndim = self.view.ndim
+ *         info.itemsize = self.view.itemsize
+ *         info.len = self.view.len             # <<<<<<<<<<<<<<
+ *         info.readonly = self.view.readonly
+ *         info.obj = self
+ */
+  __pyx_t_8 = __pyx_v_self->view.len;
+  __pyx_v_info->len = __pyx_t_8;
+
+  /* "View.MemoryView":542
+ *         info.itemsize = self.view.itemsize
+ *         info.len = self.view.len
+ *         info.readonly = self.view.readonly             # <<<<<<<<<<<<<<
+ *         info.obj = self
+ * 
+ */
+  __pyx_t_1 = __pyx_v_self->view.readonly;
+  __pyx_v_info->readonly = __pyx_t_1;
+
+  /* "View.MemoryView":543
+ *         info.len = self.view.len
+ *         info.readonly = self.view.readonly
+ *         info.obj = self             # <<<<<<<<<<<<<<
+ * 
+ *     __pyx_getbuffer = capsule(<void *> &__pyx_memoryview_getbuffer, "getbuffer(obj, view, flags)")
+ */
+  __Pyx_INCREF(((PyObject *)__pyx_v_self));
+  __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
+  __Pyx_GOTREF(__pyx_v_info->obj);
+  __Pyx_DECREF(__pyx_v_info->obj);
+  __pyx_v_info->obj = ((PyObject *)__pyx_v_self);
+
+  /* "View.MemoryView":514
+ * 
+ *     @cname('getbuffer')
+ *     def __getbuffer__(self, Py_buffer *info, int flags):             # <<<<<<<<<<<<<<
+ *         if flags & PyBUF_WRITABLE and self.view.readonly:
+ *             raise ValueError("Cannot create writable memory view from read-only memoryview")
+ */
+
+  /* function exit code */
+  __pyx_r = 0;
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_AddTraceback("View.MemoryView.memoryview.__getbuffer__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = -1;
+  if (__pyx_v_info->obj != NULL) {
+    __Pyx_GOTREF(__pyx_v_info->obj);
+    __Pyx_DECREF(__pyx_v_info->obj); __pyx_v_info->obj = 0;
+  }
+  goto __pyx_L2;
+  __pyx_L0:;
+  if (__pyx_v_info->obj == Py_None) {
+    __Pyx_GOTREF(__pyx_v_info->obj);
+    __Pyx_DECREF(__pyx_v_info->obj); __pyx_v_info->obj = 0;
+  }
+  __pyx_L2:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "View.MemoryView":549
+ * 
+ *     @property
+ *     def T(self):             # <<<<<<<<<<<<<<
+ *         cdef _memoryviewslice result = memoryview_copy(self)
+ *         transpose_memslice(&result.from_slice)
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_1T_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_1T_1__get__(PyObject *__pyx_v_self) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_1T___get__(((struct __pyx_memoryview_obj *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_1T___get__(struct __pyx_memoryview_obj *__pyx_v_self) {
+  struct __pyx_memoryviewslice_obj *__pyx_v_result = 0;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("__get__", 0);
+
+  /* "View.MemoryView":550
+ *     @property
+ *     def T(self):
+ *         cdef _memoryviewslice result = memoryview_copy(self)             # <<<<<<<<<<<<<<
+ *         transpose_memslice(&result.from_slice)
+ *         return result
+ */
+  __pyx_t_1 = __pyx_memoryview_copy_object(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 550, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_memoryviewslice_type))))) __PYX_ERR(1, 550, __pyx_L1_error)
+  __pyx_v_result = ((struct __pyx_memoryviewslice_obj *)__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "View.MemoryView":551
+ *     def T(self):
+ *         cdef _memoryviewslice result = memoryview_copy(self)
+ *         transpose_memslice(&result.from_slice)             # <<<<<<<<<<<<<<
+ *         return result
+ * 
+ */
+  __pyx_t_2 = __pyx_memslice_transpose((&__pyx_v_result->from_slice)); if (unlikely(__pyx_t_2 == ((int)0))) __PYX_ERR(1, 551, __pyx_L1_error)
+
+  /* "View.MemoryView":552
+ *         cdef _memoryviewslice result = memoryview_copy(self)
+ *         transpose_memslice(&result.from_slice)
+ *         return result             # <<<<<<<<<<<<<<
+ * 
+ *     @property
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(((PyObject *)__pyx_v_result));
+  __pyx_r = ((PyObject *)__pyx_v_result);
+  goto __pyx_L0;
+
+  /* "View.MemoryView":549
+ * 
+ *     @property
+ *     def T(self):             # <<<<<<<<<<<<<<
+ *         cdef _memoryviewslice result = memoryview_copy(self)
+ *         transpose_memslice(&result.from_slice)
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("View.MemoryView.memoryview.T.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XDECREF((PyObject *)__pyx_v_result);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "View.MemoryView":555
+ * 
+ *     @property
+ *     def base(self):             # <<<<<<<<<<<<<<
+ *         return self.obj
+ * 
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_4base_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_4base_1__get__(PyObject *__pyx_v_self) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_4base___get__(((struct __pyx_memoryview_obj *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_4base___get__(struct __pyx_memoryview_obj *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__get__", 0);
+
+  /* "View.MemoryView":556
+ *     @property
+ *     def base(self):
+ *         return self.obj             # <<<<<<<<<<<<<<
+ * 
+ *     @property
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(__pyx_v_self->obj);
+  __pyx_r = __pyx_v_self->obj;
+  goto __pyx_L0;
+
+  /* "View.MemoryView":555
+ * 
+ *     @property
+ *     def base(self):             # <<<<<<<<<<<<<<
+ *         return self.obj
+ * 
+ */
+
+  /* function exit code */
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "View.MemoryView":559
+ * 
+ *     @property
+ *     def shape(self):             # <<<<<<<<<<<<<<
+ *         return tuple([length for length in self.view.shape[:self.view.ndim]])
+ * 
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_5shape_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_5shape_1__get__(PyObject *__pyx_v_self) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_5shape___get__(((struct __pyx_memoryview_obj *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_5shape___get__(struct __pyx_memoryview_obj *__pyx_v_self) {
+  Py_ssize_t __pyx_v_length;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  Py_ssize_t *__pyx_t_2;
+  Py_ssize_t *__pyx_t_3;
+  Py_ssize_t *__pyx_t_4;
+  PyObject *__pyx_t_5 = NULL;
+  __Pyx_RefNannySetupContext("__get__", 0);
+
+  /* "View.MemoryView":560
+ *     @property
+ *     def shape(self):
+ *         return tuple([length for length in self.view.shape[:self.view.ndim]])             # <<<<<<<<<<<<<<
+ * 
+ *     @property
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 560, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_3 = (__pyx_v_self->view.shape + __pyx_v_self->view.ndim);
+  for (__pyx_t_4 = __pyx_v_self->view.shape; __pyx_t_4 < __pyx_t_3; __pyx_t_4++) {
+    __pyx_t_2 = __pyx_t_4;
+    __pyx_v_length = (__pyx_t_2[0]);
+    __pyx_t_5 = PyInt_FromSsize_t(__pyx_v_length); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 560, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_5);
+    if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_5))) __PYX_ERR(1, 560, __pyx_L1_error)
+    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  }
+  __pyx_t_5 = PyList_AsTuple(((PyObject*)__pyx_t_1)); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 560, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_r = __pyx_t_5;
+  __pyx_t_5 = 0;
+  goto __pyx_L0;
+
+  /* "View.MemoryView":559
+ * 
+ *     @property
+ *     def shape(self):             # <<<<<<<<<<<<<<
+ *         return tuple([length for length in self.view.shape[:self.view.ndim]])
+ * 
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_5);
+  __Pyx_AddTraceback("View.MemoryView.memoryview.shape.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "View.MemoryView":563
+ * 
+ *     @property
+ *     def strides(self):             # <<<<<<<<<<<<<<
+ *         if self.view.strides == NULL:
+ * 
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_7strides_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_7strides_1__get__(PyObject *__pyx_v_self) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_7strides___get__(((struct __pyx_memoryview_obj *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_7strides___get__(struct __pyx_memoryview_obj *__pyx_v_self) {
+  Py_ssize_t __pyx_v_stride;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  PyObject *__pyx_t_2 = NULL;
+  Py_ssize_t *__pyx_t_3;
+  Py_ssize_t *__pyx_t_4;
+  Py_ssize_t *__pyx_t_5;
+  PyObject *__pyx_t_6 = NULL;
+  __Pyx_RefNannySetupContext("__get__", 0);
+
+  /* "View.MemoryView":564
+ *     @property
+ *     def strides(self):
+ *         if self.view.strides == NULL:             # <<<<<<<<<<<<<<
+ * 
+ *             raise ValueError("Buffer view does not expose strides")
+ */
+  __pyx_t_1 = ((__pyx_v_self->view.strides == NULL) != 0);
+  if (unlikely(__pyx_t_1)) {
+
+    /* "View.MemoryView":566
+ *         if self.view.strides == NULL:
+ * 
+ *             raise ValueError("Buffer view does not expose strides")             # <<<<<<<<<<<<<<
+ * 
+ *         return tuple([stride for stride in self.view.strides[:self.view.ndim]])
+ */
+    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__15, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 566, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_2);
+    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
+    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+    __PYX_ERR(1, 566, __pyx_L1_error)
+
+    /* "View.MemoryView":564
+ *     @property
+ *     def strides(self):
+ *         if self.view.strides == NULL:             # <<<<<<<<<<<<<<
+ * 
+ *             raise ValueError("Buffer view does not expose strides")
+ */
+  }
+
+  /* "View.MemoryView":568
+ *             raise ValueError("Buffer view does not expose strides")
+ * 
+ *         return tuple([stride for stride in self.view.strides[:self.view.ndim]])             # <<<<<<<<<<<<<<
+ * 
+ *     @property
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 568, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_4 = (__pyx_v_self->view.strides + __pyx_v_self->view.ndim);
+  for (__pyx_t_5 = __pyx_v_self->view.strides; __pyx_t_5 < __pyx_t_4; __pyx_t_5++) {
+    __pyx_t_3 = __pyx_t_5;
+    __pyx_v_stride = (__pyx_t_3[0]);
+    __pyx_t_6 = PyInt_FromSsize_t(__pyx_v_stride); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 568, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_6);
+    if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_6))) __PYX_ERR(1, 568, __pyx_L1_error)
+    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+  }
+  __pyx_t_6 = PyList_AsTuple(((PyObject*)__pyx_t_2)); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 568, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_6);
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_r = __pyx_t_6;
+  __pyx_t_6 = 0;
+  goto __pyx_L0;
+
+  /* "View.MemoryView":563
+ * 
+ *     @property
+ *     def strides(self):             # <<<<<<<<<<<<<<
+ *         if self.view.strides == NULL:
+ * 
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_6);
+  __Pyx_AddTraceback("View.MemoryView.memoryview.strides.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "View.MemoryView":571
+ * 
+ *     @property
+ *     def suboffsets(self):             # <<<<<<<<<<<<<<
+ *         if self.view.suboffsets == NULL:
+ *             return (-1,) * self.view.ndim
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_10suboffsets_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_10suboffsets_1__get__(PyObject *__pyx_v_self) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_10suboffsets___get__(((struct __pyx_memoryview_obj *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_10suboffsets___get__(struct __pyx_memoryview_obj *__pyx_v_self) {
+  Py_ssize_t __pyx_v_suboffset;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  Py_ssize_t *__pyx_t_4;
+  Py_ssize_t *__pyx_t_5;
+  Py_ssize_t *__pyx_t_6;
+  __Pyx_RefNannySetupContext("__get__", 0);
+
+  /* "View.MemoryView":572
+ *     @property
+ *     def suboffsets(self):
+ *         if self.view.suboffsets == NULL:             # <<<<<<<<<<<<<<
+ *             return (-1,) * self.view.ndim
+ * 
+ */
+  __pyx_t_1 = ((__pyx_v_self->view.suboffsets == NULL) != 0);
+  if (__pyx_t_1) {
+
+    /* "View.MemoryView":573
+ *     def suboffsets(self):
+ *         if self.view.suboffsets == NULL:
+ *             return (-1,) * self.view.ndim             # <<<<<<<<<<<<<<
+ * 
+ *         return tuple([suboffset for suboffset in self.view.suboffsets[:self.view.ndim]])
+ */
+    __Pyx_XDECREF(__pyx_r);
+    __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_self->view.ndim); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 573, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_2);
+    __pyx_t_3 = PyNumber_Multiply(__pyx_tuple__16, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 573, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+    __pyx_r = __pyx_t_3;
+    __pyx_t_3 = 0;
+    goto __pyx_L0;
+
+    /* "View.MemoryView":572
+ *     @property
+ *     def suboffsets(self):
+ *         if self.view.suboffsets == NULL:             # <<<<<<<<<<<<<<
+ *             return (-1,) * self.view.ndim
+ * 
+ */
+  }
+
+  /* "View.MemoryView":575
+ *             return (-1,) * self.view.ndim
+ * 
+ *         return tuple([suboffset for suboffset in self.view.suboffsets[:self.view.ndim]])             # <<<<<<<<<<<<<<
+ * 
+ *     @property
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 575, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_5 = (__pyx_v_self->view.suboffsets + __pyx_v_self->view.ndim);
+  for (__pyx_t_6 = __pyx_v_self->view.suboffsets; __pyx_t_6 < __pyx_t_5; __pyx_t_6++) {
+    __pyx_t_4 = __pyx_t_6;
+    __pyx_v_suboffset = (__pyx_t_4[0]);
+    __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_suboffset); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 575, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_2);
+    if (unlikely(__Pyx_ListComp_Append(__pyx_t_3, (PyObject*)__pyx_t_2))) __PYX_ERR(1, 575, __pyx_L1_error)
+    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  }
+  __pyx_t_2 = PyList_AsTuple(((PyObject*)__pyx_t_3)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 575, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __pyx_r = __pyx_t_2;
+  __pyx_t_2 = 0;
+  goto __pyx_L0;
+
+  /* "View.MemoryView":571
+ * 
+ *     @property
+ *     def suboffsets(self):             # <<<<<<<<<<<<<<
+ *         if self.view.suboffsets == NULL:
+ *             return (-1,) * self.view.ndim
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_AddTraceback("View.MemoryView.memoryview.suboffsets.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "View.MemoryView":578
+ * 
+ *     @property
+ *     def ndim(self):             # <<<<<<<<<<<<<<
+ *         return self.view.ndim
+ * 
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_4ndim_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_4ndim_1__get__(PyObject *__pyx_v_self) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_4ndim___get__(((struct __pyx_memoryview_obj *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_4ndim___get__(struct __pyx_memoryview_obj *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  __Pyx_RefNannySetupContext("__get__", 0);
+
+  /* "View.MemoryView":579
+ *     @property
+ *     def ndim(self):
+ *         return self.view.ndim             # <<<<<<<<<<<<<<
+ * 
+ *     @property
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->view.ndim); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 579, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
+  goto __pyx_L0;
+
+  /* "View.MemoryView":578
+ * 
+ *     @property
+ *     def ndim(self):             # <<<<<<<<<<<<<<
+ *         return self.view.ndim
+ * 
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("View.MemoryView.memoryview.ndim.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "View.MemoryView":582
+ * 
+ *     @property
+ *     def itemsize(self):             # <<<<<<<<<<<<<<
+ *         return self.view.itemsize
+ * 
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_8itemsize_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_8itemsize_1__get__(PyObject *__pyx_v_self) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_8itemsize___get__(((struct __pyx_memoryview_obj *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_8itemsize___get__(struct __pyx_memoryview_obj *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  __Pyx_RefNannySetupContext("__get__", 0);
+
+  /* "View.MemoryView":583
+ *     @property
+ *     def itemsize(self):
+ *         return self.view.itemsize             # <<<<<<<<<<<<<<
+ * 
+ *     @property
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_self->view.itemsize); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 583, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
+  goto __pyx_L0;
+
+  /* "View.MemoryView":582
+ * 
+ *     @property
+ *     def itemsize(self):             # <<<<<<<<<<<<<<
+ *         return self.view.itemsize
+ * 
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("View.MemoryView.memoryview.itemsize.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "View.MemoryView":586
+ * 
+ *     @property
+ *     def nbytes(self):             # <<<<<<<<<<<<<<
+ *         return self.size * self.view.itemsize
+ * 
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_6nbytes_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_6nbytes_1__get__(PyObject *__pyx_v_self) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_6nbytes___get__(((struct __pyx_memoryview_obj *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_6nbytes___get__(struct __pyx_memoryview_obj *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  __Pyx_RefNannySetupContext("__get__", 0);
+
+  /* "View.MemoryView":587
+ *     @property
+ *     def nbytes(self):
+ *         return self.size * self.view.itemsize             # <<<<<<<<<<<<<<
+ * 
+ *     @property
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 587, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_self->view.itemsize); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 587, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_3 = PyNumber_Multiply(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 587, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_r = __pyx_t_3;
+  __pyx_t_3 = 0;
+  goto __pyx_L0;
+
+  /* "View.MemoryView":586
+ * 
+ *     @property
+ *     def nbytes(self):             # <<<<<<<<<<<<<<
+ *         return self.size * self.view.itemsize
+ * 
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_AddTraceback("View.MemoryView.memoryview.nbytes.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "View.MemoryView":590
+ * 
+ *     @property
+ *     def size(self):             # <<<<<<<<<<<<<<
+ *         if self._size is None:
+ *             result = 1
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_4size_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_4size_1__get__(PyObject *__pyx_v_self) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_4size___get__(((struct __pyx_memoryview_obj *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_4size___get__(struct __pyx_memoryview_obj *__pyx_v_self) {
+  PyObject *__pyx_v_result = NULL;
+  PyObject *__pyx_v_length = NULL;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  int __pyx_t_2;
+  Py_ssize_t *__pyx_t_3;
+  Py_ssize_t *__pyx_t_4;
+  Py_ssize_t *__pyx_t_5;
+  PyObject *__pyx_t_6 = NULL;
+  __Pyx_RefNannySetupContext("__get__", 0);
+
+  /* "View.MemoryView":591
+ *     @property
+ *     def size(self):
+ *         if self._size is None:             # <<<<<<<<<<<<<<
+ *             result = 1
+ * 
+ */
+  __pyx_t_1 = (__pyx_v_self->_size == Py_None);
+  __pyx_t_2 = (__pyx_t_1 != 0);
+  if (__pyx_t_2) {
+
+    /* "View.MemoryView":592
+ *     def size(self):
+ *         if self._size is None:
+ *             result = 1             # <<<<<<<<<<<<<<
+ * 
+ *             for length in self.view.shape[:self.view.ndim]:
+ */
+    __Pyx_INCREF(__pyx_int_1);
+    __pyx_v_result = __pyx_int_1;
+
+    /* "View.MemoryView":594
+ *             result = 1
+ * 
+ *             for length in self.view.shape[:self.view.ndim]:             # <<<<<<<<<<<<<<
+ *                 result *= length
+ * 
+ */
+    __pyx_t_4 = (__pyx_v_self->view.shape + __pyx_v_self->view.ndim);
+    for (__pyx_t_5 = __pyx_v_self->view.shape; __pyx_t_5 < __pyx_t_4; __pyx_t_5++) {
+      __pyx_t_3 = __pyx_t_5;
+      __pyx_t_6 = PyInt_FromSsize_t((__pyx_t_3[0])); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 594, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_6);
+      __Pyx_XDECREF_SET(__pyx_v_length, __pyx_t_6);
+      __pyx_t_6 = 0;
+
+      /* "View.MemoryView":595
+ * 
+ *             for length in self.view.shape[:self.view.ndim]:
+ *                 result *= length             # <<<<<<<<<<<<<<
+ * 
+ *             self._size = result
+ */
+      __pyx_t_6 = PyNumber_InPlaceMultiply(__pyx_v_result, __pyx_v_length); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 595, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_6);
+      __Pyx_DECREF_SET(__pyx_v_result, __pyx_t_6);
+      __pyx_t_6 = 0;
+    }
+
+    /* "View.MemoryView":597
+ *                 result *= length
+ * 
+ *             self._size = result             # <<<<<<<<<<<<<<
+ * 
+ *         return self._size
+ */
+    __Pyx_INCREF(__pyx_v_result);
+    __Pyx_GIVEREF(__pyx_v_result);
+    __Pyx_GOTREF(__pyx_v_self->_size);
+    __Pyx_DECREF(__pyx_v_self->_size);
+    __pyx_v_self->_size = __pyx_v_result;
+
+    /* "View.MemoryView":591
+ *     @property
+ *     def size(self):
+ *         if self._size is None:             # <<<<<<<<<<<<<<
+ *             result = 1
+ * 
+ */
+  }
+
+  /* "View.MemoryView":599
+ *             self._size = result
+ * 
+ *         return self._size             # <<<<<<<<<<<<<<
+ * 
+ *     def __len__(self):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(__pyx_v_self->_size);
+  __pyx_r = __pyx_v_self->_size;
+  goto __pyx_L0;
+
+  /* "View.MemoryView":590
+ * 
+ *     @property
+ *     def size(self):             # <<<<<<<<<<<<<<
+ *         if self._size is None:
+ *             result = 1
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_6);
+  __Pyx_AddTraceback("View.MemoryView.memoryview.size.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XDECREF(__pyx_v_result);
+  __Pyx_XDECREF(__pyx_v_length);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "View.MemoryView":601
+ *         return self._size
+ * 
+ *     def __len__(self):             # <<<<<<<<<<<<<<
+ *         if self.view.ndim >= 1:
+ *             return self.view.shape[0]
+ */
+
+/* Python wrapper */
+static Py_ssize_t __pyx_memoryview___len__(PyObject *__pyx_v_self); /*proto*/
+static Py_ssize_t __pyx_memoryview___len__(PyObject *__pyx_v_self) {
+  Py_ssize_t __pyx_r;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__len__ (wrapper)", 0);
+  __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_10__len__(((struct __pyx_memoryview_obj *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static Py_ssize_t __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_10__len__(struct __pyx_memoryview_obj *__pyx_v_self) {
+  Py_ssize_t __pyx_r;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  __Pyx_RefNannySetupContext("__len__", 0);
+
+  /* "View.MemoryView":602
+ * 
+ *     def __len__(self):
+ *         if self.view.ndim >= 1:             # <<<<<<<<<<<<<<
+ *             return self.view.shape[0]
+ * 
+ */
+  __pyx_t_1 = ((__pyx_v_self->view.ndim >= 1) != 0);
+  if (__pyx_t_1) {
+
+    /* "View.MemoryView":603
+ *     def __len__(self):
+ *         if self.view.ndim >= 1:
+ *             return self.view.shape[0]             # <<<<<<<<<<<<<<
+ * 
+ *         return 0
+ */
+    __pyx_r = (__pyx_v_self->view.shape[0]);
+    goto __pyx_L0;
+
+    /* "View.MemoryView":602
+ * 
+ *     def __len__(self):
+ *         if self.view.ndim >= 1:             # <<<<<<<<<<<<<<
+ *             return self.view.shape[0]
+ * 
+ */
+  }
+
+  /* "View.MemoryView":605
+ *             return self.view.shape[0]
+ * 
+ *         return 0             # <<<<<<<<<<<<<<
+ * 
+ *     def __repr__(self):
+ */
+  __pyx_r = 0;
+  goto __pyx_L0;
+
+  /* "View.MemoryView":601
+ *         return self._size
+ * 
+ *     def __len__(self):             # <<<<<<<<<<<<<<
+ *         if self.view.ndim >= 1:
+ *             return self.view.shape[0]
+ */
+
+  /* function exit code */
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "View.MemoryView":607
+ *         return 0
+ * 
+ *     def __repr__(self):             # <<<<<<<<<<<<<<
+ *         return "<MemoryView of %r at 0x%x>" % (self.base.__class__.__name__,
+ *                                                id(self))
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_memoryview___repr__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_memoryview___repr__(PyObject *__pyx_v_self) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__repr__ (wrapper)", 0);
+  __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_12__repr__(((struct __pyx_memoryview_obj *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_12__repr__(struct __pyx_memoryview_obj *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  __Pyx_RefNannySetupContext("__repr__", 0);
+
+  /* "View.MemoryView":608
+ * 
+ *     def __repr__(self):
+ *         return "<MemoryView of %r at 0x%x>" % (self.base.__class__.__name__,             # <<<<<<<<<<<<<<
+ *                                                id(self))
+ * 
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_base); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 608, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_class); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 608, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_name_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 608, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+
+  /* "View.MemoryView":609
+ *     def __repr__(self):
+ *         return "<MemoryView of %r at 0x%x>" % (self.base.__class__.__name__,
+ *                                                id(self))             # <<<<<<<<<<<<<<
+ * 
+ *     def __str__(self):
+ */
+  __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_builtin_id, ((PyObject *)__pyx_v_self)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 609, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+
+  /* "View.MemoryView":608
+ * 
+ *     def __repr__(self):
+ *         return "<MemoryView of %r at 0x%x>" % (self.base.__class__.__name__,             # <<<<<<<<<<<<<<
+ *                                                id(self))
+ * 
+ */
+  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 608, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_GIVEREF(__pyx_t_1);
+  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1);
+  __Pyx_GIVEREF(__pyx_t_2);
+  PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_2);
+  __pyx_t_1 = 0;
+  __pyx_t_2 = 0;
+  __pyx_t_2 = __Pyx_PyString_Format(__pyx_kp_s_MemoryView_of_r_at_0x_x, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 608, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __pyx_r = __pyx_t_2;
+  __pyx_t_2 = 0;
+  goto __pyx_L0;
+
+  /* "View.MemoryView":607
+ *         return 0
+ * 
+ *     def __repr__(self):             # <<<<<<<<<<<<<<
+ *         return "<MemoryView of %r at 0x%x>" % (self.base.__class__.__name__,
+ *                                                id(self))
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_AddTraceback("View.MemoryView.memoryview.__repr__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "View.MemoryView":611
+ *                                                id(self))
+ * 
+ *     def __str__(self):             # <<<<<<<<<<<<<<
+ *         return "<MemoryView of %r object>" % (self.base.__class__.__name__,)
+ * 
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_memoryview___str__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_memoryview___str__(PyObject *__pyx_v_self) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__str__ (wrapper)", 0);
+  __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_14__str__(((struct __pyx_memoryview_obj *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_14__str__(struct __pyx_memoryview_obj *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  __Pyx_RefNannySetupContext("__str__", 0);
+
+  /* "View.MemoryView":612
+ * 
+ *     def __str__(self):
+ *         return "<MemoryView of %r object>" % (self.base.__class__.__name__,)             # <<<<<<<<<<<<<<
+ * 
+ * 
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_base); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 612, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_class); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 612, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_name_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 612, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 612, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_GIVEREF(__pyx_t_1);
+  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
+  __pyx_t_1 = 0;
+  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_MemoryView_of_r_object, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 612, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
+  goto __pyx_L0;
+
+  /* "View.MemoryView":611
+ *                                                id(self))
+ * 
+ *     def __str__(self):             # <<<<<<<<<<<<<<
+ *         return "<MemoryView of %r object>" % (self.base.__class__.__name__,)
+ * 
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_AddTraceback("View.MemoryView.memoryview.__str__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "View.MemoryView":615
+ * 
+ * 
+ *     def is_c_contig(self):             # <<<<<<<<<<<<<<
+ *         cdef __Pyx_memviewslice *mslice
+ *         cdef __Pyx_memviewslice tmp
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_memoryview_is_c_contig(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static PyObject *__pyx_memoryview_is_c_contig(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("is_c_contig (wrapper)", 0);
+  __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_16is_c_contig(((struct __pyx_memoryview_obj *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_16is_c_contig(struct __pyx_memoryview_obj *__pyx_v_self) {
+  __Pyx_memviewslice *__pyx_v_mslice;
+  __Pyx_memviewslice __pyx_v_tmp;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  __Pyx_RefNannySetupContext("is_c_contig", 0);
+
+  /* "View.MemoryView":618
+ *         cdef __Pyx_memviewslice *mslice
+ *         cdef __Pyx_memviewslice tmp
+ *         mslice = get_slice_from_memview(self, &tmp)             # <<<<<<<<<<<<<<
+ *         return slice_is_contig(mslice[0], 'C', self.view.ndim)
+ * 
+ */
+  __pyx_v_mslice = __pyx_memoryview_get_slice_from_memoryview(__pyx_v_self, (&__pyx_v_tmp));
+
+  /* "View.MemoryView":619
+ *         cdef __Pyx_memviewslice tmp
+ *         mslice = get_slice_from_memview(self, &tmp)
+ *         return slice_is_contig(mslice[0], 'C', self.view.ndim)             # <<<<<<<<<<<<<<
+ * 
+ *     def is_f_contig(self):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_memviewslice_is_contig((__pyx_v_mslice[0]), 'C', __pyx_v_self->view.ndim)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 619, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
+  goto __pyx_L0;
+
+  /* "View.MemoryView":615
+ * 
+ * 
+ *     def is_c_contig(self):             # <<<<<<<<<<<<<<
+ *         cdef __Pyx_memviewslice *mslice
+ *         cdef __Pyx_memviewslice tmp
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("View.MemoryView.memoryview.is_c_contig", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "View.MemoryView":621
+ *         return slice_is_contig(mslice[0], 'C', self.view.ndim)
+ * 
+ *     def is_f_contig(self):             # <<<<<<<<<<<<<<
+ *         cdef __Pyx_memviewslice *mslice
+ *         cdef __Pyx_memviewslice tmp
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_memoryview_is_f_contig(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static PyObject *__pyx_memoryview_is_f_contig(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("is_f_contig (wrapper)", 0);
+  __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_18is_f_contig(((struct __pyx_memoryview_obj *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_18is_f_contig(struct __pyx_memoryview_obj *__pyx_v_self) {
+  __Pyx_memviewslice *__pyx_v_mslice;
+  __Pyx_memviewslice __pyx_v_tmp;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  __Pyx_RefNannySetupContext("is_f_contig", 0);
+
+  /* "View.MemoryView":624
+ *         cdef __Pyx_memviewslice *mslice
+ *         cdef __Pyx_memviewslice tmp
+ *         mslice = get_slice_from_memview(self, &tmp)             # <<<<<<<<<<<<<<
+ *         return slice_is_contig(mslice[0], 'F', self.view.ndim)
+ * 
+ */
+  __pyx_v_mslice = __pyx_memoryview_get_slice_from_memoryview(__pyx_v_self, (&__pyx_v_tmp));
+
+  /* "View.MemoryView":625
+ *         cdef __Pyx_memviewslice tmp
+ *         mslice = get_slice_from_memview(self, &tmp)
+ *         return slice_is_contig(mslice[0], 'F', self.view.ndim)             # <<<<<<<<<<<<<<
+ * 
+ *     def copy(self):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_memviewslice_is_contig((__pyx_v_mslice[0]), 'F', __pyx_v_self->view.ndim)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 625, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
+  goto __pyx_L0;
+
+  /* "View.MemoryView":621
+ *         return slice_is_contig(mslice[0], 'C', self.view.ndim)
+ * 
+ *     def is_f_contig(self):             # <<<<<<<<<<<<<<
+ *         cdef __Pyx_memviewslice *mslice
+ *         cdef __Pyx_memviewslice tmp
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("View.MemoryView.memoryview.is_f_contig", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "View.MemoryView":627
+ *         return slice_is_contig(mslice[0], 'F', self.view.ndim)
+ * 
+ *     def copy(self):             # <<<<<<<<<<<<<<
+ *         cdef __Pyx_memviewslice mslice
+ *         cdef int flags = self.flags & ~PyBUF_F_CONTIGUOUS
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_memoryview_copy(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static PyObject *__pyx_memoryview_copy(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("copy (wrapper)", 0);
+  __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_20copy(((struct __pyx_memoryview_obj *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_20copy(struct __pyx_memoryview_obj *__pyx_v_self) {
+  __Pyx_memviewslice __pyx_v_mslice;
+  int __pyx_v_flags;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  __Pyx_memviewslice __pyx_t_1;
+  PyObject *__pyx_t_2 = NULL;
+  __Pyx_RefNannySetupContext("copy", 0);
+
+  /* "View.MemoryView":629
+ *     def copy(self):
+ *         cdef __Pyx_memviewslice mslice
+ *         cdef int flags = self.flags & ~PyBUF_F_CONTIGUOUS             # <<<<<<<<<<<<<<
+ * 
+ *         slice_copy(self, &mslice)
+ */
+  __pyx_v_flags = (__pyx_v_self->flags & (~PyBUF_F_CONTIGUOUS));
+
+  /* "View.MemoryView":631
+ *         cdef int flags = self.flags & ~PyBUF_F_CONTIGUOUS
+ * 
+ *         slice_copy(self, &mslice)             # <<<<<<<<<<<<<<
+ *         mslice = slice_copy_contig(&mslice, "c", self.view.ndim,
+ *                                    self.view.itemsize,
+ */
+  __pyx_memoryview_slice_copy(__pyx_v_self, (&__pyx_v_mslice));
+
+  /* "View.MemoryView":632
+ * 
+ *         slice_copy(self, &mslice)
+ *         mslice = slice_copy_contig(&mslice, "c", self.view.ndim,             # <<<<<<<<<<<<<<
+ *                                    self.view.itemsize,
+ *                                    flags|PyBUF_C_CONTIGUOUS,
+ */
+  __pyx_t_1 = __pyx_memoryview_copy_new_contig((&__pyx_v_mslice), ((char *)"c"), __pyx_v_self->view.ndim, __pyx_v_self->view.itemsize, (__pyx_v_flags | PyBUF_C_CONTIGUOUS), __pyx_v_self->dtype_is_object); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 632, __pyx_L1_error)
+  __pyx_v_mslice = __pyx_t_1;
+
+  /* "View.MemoryView":637
+ *                                    self.dtype_is_object)
+ * 
+ *         return memoryview_copy_from_slice(self, &mslice)             # <<<<<<<<<<<<<<
+ * 
+ *     def copy_fortran(self):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_2 = __pyx_memoryview_copy_object_from_slice(__pyx_v_self, (&__pyx_v_mslice)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 637, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_r = __pyx_t_2;
+  __pyx_t_2 = 0;
+  goto __pyx_L0;
+
+  /* "View.MemoryView":627
+ *         return slice_is_contig(mslice[0], 'F', self.view.ndim)
+ * 
+ *     def copy(self):             # <<<<<<<<<<<<<<
+ *         cdef __Pyx_memviewslice mslice
+ *         cdef int flags = self.flags & ~PyBUF_F_CONTIGUOUS
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_AddTraceback("View.MemoryView.memoryview.copy", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "View.MemoryView":639
+ *         return memoryview_copy_from_slice(self, &mslice)
+ * 
+ *     def copy_fortran(self):             # <<<<<<<<<<<<<<
+ *         cdef __Pyx_memviewslice src, dst
+ *         cdef int flags = self.flags & ~PyBUF_C_CONTIGUOUS
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_memoryview_copy_fortran(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static PyObject *__pyx_memoryview_copy_fortran(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("copy_fortran (wrapper)", 0);
+  __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_22copy_fortran(((struct __pyx_memoryview_obj *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_22copy_fortran(struct __pyx_memoryview_obj *__pyx_v_self) {
+  __Pyx_memviewslice __pyx_v_src;
+  __Pyx_memviewslice __pyx_v_dst;
+  int __pyx_v_flags;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  __Pyx_memviewslice __pyx_t_1;
+  PyObject *__pyx_t_2 = NULL;
+  __Pyx_RefNannySetupContext("copy_fortran", 0);
+
+  /* "View.MemoryView":641
+ *     def copy_fortran(self):
+ *         cdef __Pyx_memviewslice src, dst
+ *         cdef int flags = self.flags & ~PyBUF_C_CONTIGUOUS             # <<<<<<<<<<<<<<
+ * 
+ *         slice_copy(self, &src)
+ */
+  __pyx_v_flags = (__pyx_v_self->flags & (~PyBUF_C_CONTIGUOUS));
+
+  /* "View.MemoryView":643
+ *         cdef int flags = self.flags & ~PyBUF_C_CONTIGUOUS
+ * 
+ *         slice_copy(self, &src)             # <<<<<<<<<<<<<<
+ *         dst = slice_copy_contig(&src, "fortran", self.view.ndim,
+ *                                 self.view.itemsize,
+ */
+  __pyx_memoryview_slice_copy(__pyx_v_self, (&__pyx_v_src));
+
+  /* "View.MemoryView":644
+ * 
+ *         slice_copy(self, &src)
+ *         dst = slice_copy_contig(&src, "fortran", self.view.ndim,             # <<<<<<<<<<<<<<
+ *                                 self.view.itemsize,
+ *                                 flags|PyBUF_F_CONTIGUOUS,
+ */
+  __pyx_t_1 = __pyx_memoryview_copy_new_contig((&__pyx_v_src), ((char *)"fortran"), __pyx_v_self->view.ndim, __pyx_v_self->view.itemsize, (__pyx_v_flags | PyBUF_F_CONTIGUOUS), __pyx_v_self->dtype_is_object); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 644, __pyx_L1_error)
+  __pyx_v_dst = __pyx_t_1;
+
+  /* "View.MemoryView":649
+ *                                 self.dtype_is_object)
+ * 
+ *         return memoryview_copy_from_slice(self, &dst)             # <<<<<<<<<<<<<<
+ * 
+ * 
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_2 = __pyx_memoryview_copy_object_from_slice(__pyx_v_self, (&__pyx_v_dst)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 649, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_r = __pyx_t_2;
+  __pyx_t_2 = 0;
+  goto __pyx_L0;
+
+  /* "View.MemoryView":639
+ *         return memoryview_copy_from_slice(self, &mslice)
+ * 
+ *     def copy_fortran(self):             # <<<<<<<<<<<<<<
+ *         cdef __Pyx_memviewslice src, dst
+ *         cdef int flags = self.flags & ~PyBUF_C_CONTIGUOUS
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_AddTraceback("View.MemoryView.memoryview.copy_fortran", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "(tree fragment)":1
+ * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
+ *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
+ * def __setstate_cython__(self, __pyx_state):
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw___pyx_memoryview_1__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static PyObject *__pyx_pw___pyx_memoryview_1__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
+  __pyx_r = __pyx_pf___pyx_memoryview___reduce_cython__(((struct __pyx_memoryview_obj *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf___pyx_memoryview___reduce_cython__(CYTHON_UNUSED struct __pyx_memoryview_obj *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  __Pyx_RefNannySetupContext("__reduce_cython__", 0);
+
+  /* "(tree fragment)":2
+ * def __reduce_cython__(self):
+ *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
+ * def __setstate_cython__(self, __pyx_state):
+ *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
+ */
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__17, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_Raise(__pyx_t_1, 0, 0, 0);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __PYX_ERR(1, 2, __pyx_L1_error)
+
+  /* "(tree fragment)":1
+ * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
+ *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
+ * def __setstate_cython__(self, __pyx_state):
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("View.MemoryView.memoryview.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "(tree fragment)":3
+ * def __reduce_cython__(self):
+ *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
+ * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
+ *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw___pyx_memoryview_3__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/
+static PyObject *__pyx_pw___pyx_memoryview_3__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
+  __pyx_r = __pyx_pf___pyx_memoryview_2__setstate_cython__(((struct __pyx_memoryview_obj *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf___pyx_memoryview_2__setstate_cython__(CYTHON_UNUSED struct __pyx_memoryview_obj *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  __Pyx_RefNannySetupContext("__setstate_cython__", 0);
+
+  /* "(tree fragment)":4
+ *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
+ * def __setstate_cython__(self, __pyx_state):
+ *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
+ */
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__18, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 4, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_Raise(__pyx_t_1, 0, 0, 0);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __PYX_ERR(1, 4, __pyx_L1_error)
+
+  /* "(tree fragment)":3
+ * def __reduce_cython__(self):
+ *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
+ * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
+ *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("View.MemoryView.memoryview.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "View.MemoryView":653
+ * 
+ * @cname('__pyx_memoryview_new')
+ * cdef memoryview_cwrapper(object o, int flags, bint dtype_is_object, __Pyx_TypeInfo *typeinfo):             # <<<<<<<<<<<<<<
+ *     cdef memoryview result = memoryview(o, flags, dtype_is_object)
+ *     result.typeinfo = typeinfo
+ */
+
+static PyObject *__pyx_memoryview_new(PyObject *__pyx_v_o, int __pyx_v_flags, int __pyx_v_dtype_is_object, __Pyx_TypeInfo *__pyx_v_typeinfo) {
+  struct __pyx_memoryview_obj *__pyx_v_result = 0;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  __Pyx_RefNannySetupContext("memoryview_cwrapper", 0);
+
+  /* "View.MemoryView":654
+ * @cname('__pyx_memoryview_new')
+ * cdef memoryview_cwrapper(object o, int flags, bint dtype_is_object, __Pyx_TypeInfo *typeinfo):
+ *     cdef memoryview result = memoryview(o, flags, dtype_is_object)             # <<<<<<<<<<<<<<
+ *     result.typeinfo = typeinfo
+ *     return result
+ */
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_flags); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 654, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_v_dtype_is_object); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 654, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 654, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_INCREF(__pyx_v_o);
+  __Pyx_GIVEREF(__pyx_v_o);
+  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_o);
+  __Pyx_GIVEREF(__pyx_t_1);
+  PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_1);
+  __Pyx_GIVEREF(__pyx_t_2);
+  PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_t_2);
+  __pyx_t_1 = 0;
+  __pyx_t_2 = 0;
+  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_memoryview_type), __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 654, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __pyx_v_result = ((struct __pyx_memoryview_obj *)__pyx_t_2);
+  __pyx_t_2 = 0;
+
+  /* "View.MemoryView":655
+ * cdef memoryview_cwrapper(object o, int flags, bint dtype_is_object, __Pyx_TypeInfo *typeinfo):
+ *     cdef memoryview result = memoryview(o, flags, dtype_is_object)
+ *     result.typeinfo = typeinfo             # <<<<<<<<<<<<<<
+ *     return result
+ * 
+ */
+  __pyx_v_result->typeinfo = __pyx_v_typeinfo;
+
+  /* "View.MemoryView":656
+ *     cdef memoryview result = memoryview(o, flags, dtype_is_object)
+ *     result.typeinfo = typeinfo
+ *     return result             # <<<<<<<<<<<<<<
+ * 
+ * @cname('__pyx_memoryview_check')
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(((PyObject *)__pyx_v_result));
+  __pyx_r = ((PyObject *)__pyx_v_result);
+  goto __pyx_L0;
+
+  /* "View.MemoryView":653
+ * 
+ * @cname('__pyx_memoryview_new')
+ * cdef memoryview_cwrapper(object o, int flags, bint dtype_is_object, __Pyx_TypeInfo *typeinfo):             # <<<<<<<<<<<<<<
+ *     cdef memoryview result = memoryview(o, flags, dtype_is_object)
+ *     result.typeinfo = typeinfo
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_AddTraceback("View.MemoryView.memoryview_cwrapper", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = 0;
+  __pyx_L0:;
+  __Pyx_XDECREF((PyObject *)__pyx_v_result);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "View.MemoryView":659
+ * 
+ * @cname('__pyx_memoryview_check')
+ * cdef inline bint memoryview_check(object o):             # <<<<<<<<<<<<<<
+ *     return isinstance(o, memoryview)
+ * 
+ */
+
+static CYTHON_INLINE int __pyx_memoryview_check(PyObject *__pyx_v_o) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  __Pyx_RefNannySetupContext("memoryview_check", 0);
+
+  /* "View.MemoryView":660
+ * @cname('__pyx_memoryview_check')
+ * cdef inline bint memoryview_check(object o):
+ *     return isinstance(o, memoryview)             # <<<<<<<<<<<<<<
+ * 
+ * cdef tuple _unellipsify(object index, int ndim):
+ */
+  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_o, __pyx_memoryview_type); 
+  __pyx_r = __pyx_t_1;
+  goto __pyx_L0;
+
+  /* "View.MemoryView":659
+ * 
+ * @cname('__pyx_memoryview_check')
+ * cdef inline bint memoryview_check(object o):             # <<<<<<<<<<<<<<
+ *     return isinstance(o, memoryview)
+ * 
+ */
+
+  /* function exit code */
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "View.MemoryView":662
+ *     return isinstance(o, memoryview)
+ * 
+ * cdef tuple _unellipsify(object index, int ndim):             # <<<<<<<<<<<<<<
+ *     """
+ *     Replace all ellipses with full slices and fill incomplete indices with
+ */
+
+static PyObject *_unellipsify(PyObject *__pyx_v_index, int __pyx_v_ndim) {
+  PyObject *__pyx_v_tup = NULL;
+  PyObject *__pyx_v_result = NULL;
+  int __pyx_v_have_slices;
+  int __pyx_v_seen_ellipsis;
+  CYTHON_UNUSED PyObject *__pyx_v_idx = NULL;
+  PyObject *__pyx_v_item = NULL;
+  Py_ssize_t __pyx_v_nslices;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  int __pyx_t_2;
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
+  Py_ssize_t __pyx_t_5;
+  PyObject *(*__pyx_t_6)(PyObject *);
+  PyObject *__pyx_t_7 = NULL;
+  Py_ssize_t __pyx_t_8;
+  int __pyx_t_9;
+  int __pyx_t_10;
+  PyObject *__pyx_t_11 = NULL;
+  __Pyx_RefNannySetupContext("_unellipsify", 0);
+
+  /* "View.MemoryView":667
+ *     full slices.
+ *     """
+ *     if not isinstance(index, tuple):             # <<<<<<<<<<<<<<
+ *         tup = (index,)
+ *     else:
+ */
+  __pyx_t_1 = PyTuple_Check(__pyx_v_index); 
+  __pyx_t_2 = ((!(__pyx_t_1 != 0)) != 0);
+  if (__pyx_t_2) {
+
+    /* "View.MemoryView":668
+ *     """
+ *     if not isinstance(index, tuple):
+ *         tup = (index,)             # <<<<<<<<<<<<<<
+ *     else:
+ *         tup = index
+ */
+    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 668, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    __Pyx_INCREF(__pyx_v_index);
+    __Pyx_GIVEREF(__pyx_v_index);
+    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_index);
+    __pyx_v_tup = __pyx_t_3;
+    __pyx_t_3 = 0;
+
+    /* "View.MemoryView":667
+ *     full slices.
+ *     """
+ *     if not isinstance(index, tuple):             # <<<<<<<<<<<<<<
+ *         tup = (index,)
+ *     else:
+ */
+    goto __pyx_L3;
+  }
+
+  /* "View.MemoryView":670
+ *         tup = (index,)
+ *     else:
+ *         tup = index             # <<<<<<<<<<<<<<
+ * 
+ *     result = []
+ */
+  /*else*/ {
+    __Pyx_INCREF(__pyx_v_index);
+    __pyx_v_tup = __pyx_v_index;
+  }
+  __pyx_L3:;
+
+  /* "View.MemoryView":672
+ *         tup = index
+ * 
+ *     result = []             # <<<<<<<<<<<<<<
+ *     have_slices = False
+ *     seen_ellipsis = False
+ */
+  __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 672, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_v_result = ((PyObject*)__pyx_t_3);
+  __pyx_t_3 = 0;
+
+  /* "View.MemoryView":673
+ * 
+ *     result = []
+ *     have_slices = False             # <<<<<<<<<<<<<<
+ *     seen_ellipsis = False
+ *     for idx, item in enumerate(tup):
+ */
+  __pyx_v_have_slices = 0;
+
+  /* "View.MemoryView":674
+ *     result = []
+ *     have_slices = False
+ *     seen_ellipsis = False             # <<<<<<<<<<<<<<
+ *     for idx, item in enumerate(tup):
+ *         if item is Ellipsis:
+ */
+  __pyx_v_seen_ellipsis = 0;
+
+  /* "View.MemoryView":675
+ *     have_slices = False
+ *     seen_ellipsis = False
+ *     for idx, item in enumerate(tup):             # <<<<<<<<<<<<<<
+ *         if item is Ellipsis:
+ *             if not seen_ellipsis:
+ */
+  __Pyx_INCREF(__pyx_int_0);
+  __pyx_t_3 = __pyx_int_0;
+  if (likely(PyList_CheckExact(__pyx_v_tup)) || PyTuple_CheckExact(__pyx_v_tup)) {
+    __pyx_t_4 = __pyx_v_tup; __Pyx_INCREF(__pyx_t_4); __pyx_t_5 = 0;
+    __pyx_t_6 = NULL;
+  } else {
+    __pyx_t_5 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_v_tup); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 675, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
+    __pyx_t_6 = Py_TYPE(__pyx_t_4)->tp_iternext; if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 675, __pyx_L1_error)
+  }
+  for (;;) {
+    if (likely(!__pyx_t_6)) {
+      if (likely(PyList_CheckExact(__pyx_t_4))) {
+        if (__pyx_t_5 >= PyList_GET_SIZE(__pyx_t_4)) break;
+        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+        __pyx_t_7 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_5); __Pyx_INCREF(__pyx_t_7); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(1, 675, __pyx_L1_error)
+        #else
+        __pyx_t_7 = PySequence_ITEM(__pyx_t_4, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 675, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_7);
+        #endif
+      } else {
+        if (__pyx_t_5 >= PyTuple_GET_SIZE(__pyx_t_4)) break;
+        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+        __pyx_t_7 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_5); __Pyx_INCREF(__pyx_t_7); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(1, 675, __pyx_L1_error)
+        #else
+        __pyx_t_7 = PySequence_ITEM(__pyx_t_4, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 675, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_7);
+        #endif
+      }
+    } else {
+      __pyx_t_7 = __pyx_t_6(__pyx_t_4);
+      if (unlikely(!__pyx_t_7)) {
+        PyObject* exc_type = PyErr_Occurred();
+        if (exc_type) {
+          if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
+          else __PYX_ERR(1, 675, __pyx_L1_error)
+        }
+        break;
+      }
+      __Pyx_GOTREF(__pyx_t_7);
+    }
+    __Pyx_XDECREF_SET(__pyx_v_item, __pyx_t_7);
+    __pyx_t_7 = 0;
+    __Pyx_INCREF(__pyx_t_3);
+    __Pyx_XDECREF_SET(__pyx_v_idx, __pyx_t_3);
+    __pyx_t_7 = __Pyx_PyInt_AddObjC(__pyx_t_3, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 675, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_7);
+    __Pyx_DECREF(__pyx_t_3);
+    __pyx_t_3 = __pyx_t_7;
+    __pyx_t_7 = 0;
+
+    /* "View.MemoryView":676
+ *     seen_ellipsis = False
+ *     for idx, item in enumerate(tup):
+ *         if item is Ellipsis:             # <<<<<<<<<<<<<<
+ *             if not seen_ellipsis:
+ *                 result.extend([slice(None)] * (ndim - len(tup) + 1))
+ */
+    __pyx_t_2 = (__pyx_v_item == __pyx_builtin_Ellipsis);
+    __pyx_t_1 = (__pyx_t_2 != 0);
+    if (__pyx_t_1) {
+
+      /* "View.MemoryView":677
+ *     for idx, item in enumerate(tup):
+ *         if item is Ellipsis:
+ *             if not seen_ellipsis:             # <<<<<<<<<<<<<<
+ *                 result.extend([slice(None)] * (ndim - len(tup) + 1))
+ *                 seen_ellipsis = True
+ */
+      __pyx_t_1 = ((!(__pyx_v_seen_ellipsis != 0)) != 0);
+      if (__pyx_t_1) {
+
+        /* "View.MemoryView":678
+ *         if item is Ellipsis:
+ *             if not seen_ellipsis:
+ *                 result.extend([slice(None)] * (ndim - len(tup) + 1))             # <<<<<<<<<<<<<<
+ *                 seen_ellipsis = True
+ *             else:
+ */
+        __pyx_t_8 = PyObject_Length(__pyx_v_tup); if (unlikely(__pyx_t_8 == ((Py_ssize_t)-1))) __PYX_ERR(1, 678, __pyx_L1_error)
+        __pyx_t_7 = PyList_New(1 * ((((__pyx_v_ndim - __pyx_t_8) + 1)<0) ? 0:((__pyx_v_ndim - __pyx_t_8) + 1))); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 678, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_7);
+        { Py_ssize_t __pyx_temp;
+          for (__pyx_temp=0; __pyx_temp < ((__pyx_v_ndim - __pyx_t_8) + 1); __pyx_temp++) {
+            __Pyx_INCREF(__pyx_slice__19);
+            __Pyx_GIVEREF(__pyx_slice__19);
+            PyList_SET_ITEM(__pyx_t_7, __pyx_temp, __pyx_slice__19);
+          }
+        }
+        __pyx_t_9 = __Pyx_PyList_Extend(__pyx_v_result, __pyx_t_7); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(1, 678, __pyx_L1_error)
+        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+
+        /* "View.MemoryView":679
+ *             if not seen_ellipsis:
+ *                 result.extend([slice(None)] * (ndim - len(tup) + 1))
+ *                 seen_ellipsis = True             # <<<<<<<<<<<<<<
+ *             else:
+ *                 result.append(slice(None))
+ */
+        __pyx_v_seen_ellipsis = 1;
+
+        /* "View.MemoryView":677
+ *     for idx, item in enumerate(tup):
+ *         if item is Ellipsis:
+ *             if not seen_ellipsis:             # <<<<<<<<<<<<<<
+ *                 result.extend([slice(None)] * (ndim - len(tup) + 1))
+ *                 seen_ellipsis = True
+ */
+        goto __pyx_L7;
+      }
+
+      /* "View.MemoryView":681
+ *                 seen_ellipsis = True
+ *             else:
+ *                 result.append(slice(None))             # <<<<<<<<<<<<<<
+ *             have_slices = True
+ *         else:
+ */
+      /*else*/ {
+        __pyx_t_9 = __Pyx_PyList_Append(__pyx_v_result, __pyx_slice__19); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(1, 681, __pyx_L1_error)
+      }
+      __pyx_L7:;
+
+      /* "View.MemoryView":682
+ *             else:
+ *                 result.append(slice(None))
+ *             have_slices = True             # <<<<<<<<<<<<<<
+ *         else:
+ *             if not isinstance(item, slice) and not PyIndex_Check(item):
+ */
+      __pyx_v_have_slices = 1;
+
+      /* "View.MemoryView":676
+ *     seen_ellipsis = False
+ *     for idx, item in enumerate(tup):
+ *         if item is Ellipsis:             # <<<<<<<<<<<<<<
+ *             if not seen_ellipsis:
+ *                 result.extend([slice(None)] * (ndim - len(tup) + 1))
+ */
+      goto __pyx_L6;
+    }
+
+    /* "View.MemoryView":684
+ *             have_slices = True
+ *         else:
+ *             if not isinstance(item, slice) and not PyIndex_Check(item):             # <<<<<<<<<<<<<<
+ *                 raise TypeError("Cannot index with type '%s'" % type(item))
+ * 
+ */
+    /*else*/ {
+      __pyx_t_2 = PySlice_Check(__pyx_v_item); 
+      __pyx_t_10 = ((!(__pyx_t_2 != 0)) != 0);
+      if (__pyx_t_10) {
+      } else {
+        __pyx_t_1 = __pyx_t_10;
+        goto __pyx_L9_bool_binop_done;
+      }
+      __pyx_t_10 = ((!(PyIndex_Check(__pyx_v_item) != 0)) != 0);
+      __pyx_t_1 = __pyx_t_10;
+      __pyx_L9_bool_binop_done:;
+      if (unlikely(__pyx_t_1)) {
+
+        /* "View.MemoryView":685
+ *         else:
+ *             if not isinstance(item, slice) and not PyIndex_Check(item):
+ *                 raise TypeError("Cannot index with type '%s'" % type(item))             # <<<<<<<<<<<<<<
+ * 
+ *             have_slices = have_slices or isinstance(item, slice)
+ */
+        __pyx_t_7 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Cannot_index_with_type_s, ((PyObject *)Py_TYPE(__pyx_v_item))); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 685, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_7);
+        __pyx_t_11 = __Pyx_PyObject_CallOneArg(__pyx_builtin_TypeError, __pyx_t_7); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 685, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_11);
+        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+        __Pyx_Raise(__pyx_t_11, 0, 0, 0);
+        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
+        __PYX_ERR(1, 685, __pyx_L1_error)
+
+        /* "View.MemoryView":684
+ *             have_slices = True
+ *         else:
+ *             if not isinstance(item, slice) and not PyIndex_Check(item):             # <<<<<<<<<<<<<<
+ *                 raise TypeError("Cannot index with type '%s'" % type(item))
+ * 
+ */
+      }
+
+      /* "View.MemoryView":687
+ *                 raise TypeError("Cannot index with type '%s'" % type(item))
+ * 
+ *             have_slices = have_slices or isinstance(item, slice)             # <<<<<<<<<<<<<<
+ *             result.append(item)
+ * 
+ */
+      __pyx_t_10 = (__pyx_v_have_slices != 0);
+      if (!__pyx_t_10) {
+      } else {
+        __pyx_t_1 = __pyx_t_10;
+        goto __pyx_L11_bool_binop_done;
+      }
+      __pyx_t_10 = PySlice_Check(__pyx_v_item); 
+      __pyx_t_2 = (__pyx_t_10 != 0);
+      __pyx_t_1 = __pyx_t_2;
+      __pyx_L11_bool_binop_done:;
+      __pyx_v_have_slices = __pyx_t_1;
+
+      /* "View.MemoryView":688
+ * 
+ *             have_slices = have_slices or isinstance(item, slice)
+ *             result.append(item)             # <<<<<<<<<<<<<<
+ * 
+ *     nslices = ndim - len(result)
+ */
+      __pyx_t_9 = __Pyx_PyList_Append(__pyx_v_result, __pyx_v_item); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(1, 688, __pyx_L1_error)
+    }
+    __pyx_L6:;
+
+    /* "View.MemoryView":675
+ *     have_slices = False
+ *     seen_ellipsis = False
+ *     for idx, item in enumerate(tup):             # <<<<<<<<<<<<<<
+ *         if item is Ellipsis:
+ *             if not seen_ellipsis:
+ */
+  }
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+
+  /* "View.MemoryView":690
+ *             result.append(item)
+ * 
+ *     nslices = ndim - len(result)             # <<<<<<<<<<<<<<
+ *     if nslices:
+ *         result.extend([slice(None)] * nslices)
+ */
+  __pyx_t_5 = PyList_GET_SIZE(__pyx_v_result); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(1, 690, __pyx_L1_error)
+  __pyx_v_nslices = (__pyx_v_ndim - __pyx_t_5);
+
+  /* "View.MemoryView":691
+ * 
+ *     nslices = ndim - len(result)
+ *     if nslices:             # <<<<<<<<<<<<<<
+ *         result.extend([slice(None)] * nslices)
+ * 
+ */
+  __pyx_t_1 = (__pyx_v_nslices != 0);
+  if (__pyx_t_1) {
+
+    /* "View.MemoryView":692
+ *     nslices = ndim - len(result)
+ *     if nslices:
+ *         result.extend([slice(None)] * nslices)             # <<<<<<<<<<<<<<
+ * 
+ *     return have_slices or nslices, tuple(result)
+ */
+    __pyx_t_3 = PyList_New(1 * ((__pyx_v_nslices<0) ? 0:__pyx_v_nslices)); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 692, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    { Py_ssize_t __pyx_temp;
+      for (__pyx_temp=0; __pyx_temp < __pyx_v_nslices; __pyx_temp++) {
+        __Pyx_INCREF(__pyx_slice__19);
+        __Pyx_GIVEREF(__pyx_slice__19);
+        PyList_SET_ITEM(__pyx_t_3, __pyx_temp, __pyx_slice__19);
+      }
+    }
+    __pyx_t_9 = __Pyx_PyList_Extend(__pyx_v_result, __pyx_t_3); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(1, 692, __pyx_L1_error)
+    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+
+    /* "View.MemoryView":691
+ * 
+ *     nslices = ndim - len(result)
+ *     if nslices:             # <<<<<<<<<<<<<<
+ *         result.extend([slice(None)] * nslices)
+ * 
+ */
+  }
+
+  /* "View.MemoryView":694
+ *         result.extend([slice(None)] * nslices)
+ * 
+ *     return have_slices or nslices, tuple(result)             # <<<<<<<<<<<<<<
+ * 
+ * cdef assert_direct_dimensions(Py_ssize_t *suboffsets, int ndim):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  if (!__pyx_v_have_slices) {
+  } else {
+    __pyx_t_4 = __Pyx_PyBool_FromLong(__pyx_v_have_slices); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 694, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
+    __pyx_t_3 = __pyx_t_4;
+    __pyx_t_4 = 0;
+    goto __pyx_L14_bool_binop_done;
+  }
+  __pyx_t_4 = PyInt_FromSsize_t(__pyx_v_nslices); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 694, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  __pyx_t_3 = __pyx_t_4;
+  __pyx_t_4 = 0;
+  __pyx_L14_bool_binop_done:;
+  __pyx_t_4 = PyList_AsTuple(__pyx_v_result); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 694, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  __pyx_t_11 = PyTuple_New(2); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 694, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_11);
+  __Pyx_GIVEREF(__pyx_t_3);
+  PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_3);
+  __Pyx_GIVEREF(__pyx_t_4);
+  PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_t_4);
+  __pyx_t_3 = 0;
+  __pyx_t_4 = 0;
+  __pyx_r = ((PyObject*)__pyx_t_11);
+  __pyx_t_11 = 0;
+  goto __pyx_L0;
+
+  /* "View.MemoryView":662
+ *     return isinstance(o, memoryview)
+ * 
+ * cdef tuple _unellipsify(object index, int ndim):             # <<<<<<<<<<<<<<
+ *     """
+ *     Replace all ellipses with full slices and fill incomplete indices with
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_XDECREF(__pyx_t_7);
+  __Pyx_XDECREF(__pyx_t_11);
+  __Pyx_AddTraceback("View.MemoryView._unellipsify", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = 0;
+  __pyx_L0:;
+  __Pyx_XDECREF(__pyx_v_tup);
+  __Pyx_XDECREF(__pyx_v_result);
+  __Pyx_XDECREF(__pyx_v_idx);
+  __Pyx_XDECREF(__pyx_v_item);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "View.MemoryView":696
+ *     return have_slices or nslices, tuple(result)
+ * 
+ * cdef assert_direct_dimensions(Py_ssize_t *suboffsets, int ndim):             # <<<<<<<<<<<<<<
+ *     for suboffset in suboffsets[:ndim]:
+ *         if suboffset >= 0:
+ */
+
+static PyObject *assert_direct_dimensions(Py_ssize_t *__pyx_v_suboffsets, int __pyx_v_ndim) {
+  Py_ssize_t __pyx_v_suboffset;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  Py_ssize_t *__pyx_t_1;
+  Py_ssize_t *__pyx_t_2;
+  Py_ssize_t *__pyx_t_3;
+  int __pyx_t_4;
+  PyObject *__pyx_t_5 = NULL;
+  __Pyx_RefNannySetupContext("assert_direct_dimensions", 0);
+
+  /* "View.MemoryView":697
+ * 
+ * cdef assert_direct_dimensions(Py_ssize_t *suboffsets, int ndim):
+ *     for suboffset in suboffsets[:ndim]:             # <<<<<<<<<<<<<<
+ *         if suboffset >= 0:
+ *             raise ValueError("Indirect dimensions not supported")
+ */
+  __pyx_t_2 = (__pyx_v_suboffsets + __pyx_v_ndim);
+  for (__pyx_t_3 = __pyx_v_suboffsets; __pyx_t_3 < __pyx_t_2; __pyx_t_3++) {
+    __pyx_t_1 = __pyx_t_3;
+    __pyx_v_suboffset = (__pyx_t_1[0]);
+
+    /* "View.MemoryView":698
+ * cdef assert_direct_dimensions(Py_ssize_t *suboffsets, int ndim):
+ *     for suboffset in suboffsets[:ndim]:
+ *         if suboffset >= 0:             # <<<<<<<<<<<<<<
+ *             raise ValueError("Indirect dimensions not supported")
+ * 
+ */
+    __pyx_t_4 = ((__pyx_v_suboffset >= 0) != 0);
+    if (unlikely(__pyx_t_4)) {
+
+      /* "View.MemoryView":699
+ *     for suboffset in suboffsets[:ndim]:
+ *         if suboffset >= 0:
+ *             raise ValueError("Indirect dimensions not supported")             # <<<<<<<<<<<<<<
+ * 
+ * 
+ */
+      __pyx_t_5 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__20, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 699, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_5);
+      __Pyx_Raise(__pyx_t_5, 0, 0, 0);
+      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+      __PYX_ERR(1, 699, __pyx_L1_error)
+
+      /* "View.MemoryView":698
+ * cdef assert_direct_dimensions(Py_ssize_t *suboffsets, int ndim):
+ *     for suboffset in suboffsets[:ndim]:
+ *         if suboffset >= 0:             # <<<<<<<<<<<<<<
+ *             raise ValueError("Indirect dimensions not supported")
+ * 
+ */
+    }
+  }
+
+  /* "View.MemoryView":696
+ *     return have_slices or nslices, tuple(result)
+ * 
+ * cdef assert_direct_dimensions(Py_ssize_t *suboffsets, int ndim):             # <<<<<<<<<<<<<<
+ *     for suboffset in suboffsets[:ndim]:
+ *         if suboffset >= 0:
+ */
+
+  /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_5);
+  __Pyx_AddTraceback("View.MemoryView.assert_direct_dimensions", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = 0;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "View.MemoryView":706
+ * 
+ * @cname('__pyx_memview_slice')
+ * cdef memoryview memview_slice(memoryview memview, object indices):             # <<<<<<<<<<<<<<
+ *     cdef int new_ndim = 0, suboffset_dim = -1, dim
+ *     cdef bint negative_step
+ */
+
+static struct __pyx_memoryview_obj *__pyx_memview_slice(struct __pyx_memoryview_obj *__pyx_v_memview, PyObject *__pyx_v_indices) {
+  int __pyx_v_new_ndim;
+  int __pyx_v_suboffset_dim;
+  int __pyx_v_dim;
+  __Pyx_memviewslice __pyx_v_src;
+  __Pyx_memviewslice __pyx_v_dst;
+  __Pyx_memviewslice *__pyx_v_p_src;
+  struct __pyx_memoryviewslice_obj *__pyx_v_memviewsliceobj = 0;
+  __Pyx_memviewslice *__pyx_v_p_dst;
+  int *__pyx_v_p_suboffset_dim;
+  Py_ssize_t __pyx_v_start;
+  Py_ssize_t __pyx_v_stop;
+  Py_ssize_t __pyx_v_step;
+  int __pyx_v_have_start;
+  int __pyx_v_have_stop;
+  int __pyx_v_have_step;
+  PyObject *__pyx_v_index = NULL;
+  struct __pyx_memoryview_obj *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  int __pyx_t_2;
+  PyObject *__pyx_t_3 = NULL;
+  struct __pyx_memoryview_obj *__pyx_t_4;
+  char *__pyx_t_5;
+  int __pyx_t_6;
+  Py_ssize_t __pyx_t_7;
+  PyObject *(*__pyx_t_8)(PyObject *);
+  PyObject *__pyx_t_9 = NULL;
+  Py_ssize_t __pyx_t_10;
+  int __pyx_t_11;
+  Py_ssize_t __pyx_t_12;
+  __Pyx_RefNannySetupContext("memview_slice", 0);
+
+  /* "View.MemoryView":707
+ * @cname('__pyx_memview_slice')
+ * cdef memoryview memview_slice(memoryview memview, object indices):
+ *     cdef int new_ndim = 0, suboffset_dim = -1, dim             # <<<<<<<<<<<<<<
+ *     cdef bint negative_step
+ *     cdef __Pyx_memviewslice src, dst
+ */
+  __pyx_v_new_ndim = 0;
+  __pyx_v_suboffset_dim = -1;
+
+  /* "View.MemoryView":714
+ * 
+ * 
+ *     memset(&dst, 0, sizeof(dst))             # <<<<<<<<<<<<<<
+ * 
+ *     cdef _memoryviewslice memviewsliceobj
+ */
+  (void)(memset((&__pyx_v_dst), 0, (sizeof(__pyx_v_dst))));
+
+  /* "View.MemoryView":718
+ *     cdef _memoryviewslice memviewsliceobj
+ * 
+ *     assert memview.view.ndim > 0             # <<<<<<<<<<<<<<
+ * 
+ *     if isinstance(memview, _memoryviewslice):
+ */
+  #ifndef CYTHON_WITHOUT_ASSERTIONS
+  if (unlikely(!Py_OptimizeFlag)) {
+    if (unlikely(!((__pyx_v_memview->view.ndim > 0) != 0))) {
+      PyErr_SetNone(PyExc_AssertionError);
+      __PYX_ERR(1, 718, __pyx_L1_error)
+    }
+  }
+  #endif
+
+  /* "View.MemoryView":720
+ *     assert memview.view.ndim > 0
+ * 
+ *     if isinstance(memview, _memoryviewslice):             # <<<<<<<<<<<<<<
+ *         memviewsliceobj = memview
+ *         p_src = &memviewsliceobj.from_slice
+ */
+  __pyx_t_1 = __Pyx_TypeCheck(((PyObject *)__pyx_v_memview), __pyx_memoryviewslice_type); 
+  __pyx_t_2 = (__pyx_t_1 != 0);
+  if (__pyx_t_2) {
+
+    /* "View.MemoryView":721
+ * 
+ *     if isinstance(memview, _memoryviewslice):
+ *         memviewsliceobj = memview             # <<<<<<<<<<<<<<
+ *         p_src = &memviewsliceobj.from_slice
+ *     else:
+ */
+    if (!(likely(((((PyObject *)__pyx_v_memview)) == Py_None) || likely(__Pyx_TypeTest(((PyObject *)__pyx_v_memview), __pyx_memoryviewslice_type))))) __PYX_ERR(1, 721, __pyx_L1_error)
+    __pyx_t_3 = ((PyObject *)__pyx_v_memview);
+    __Pyx_INCREF(__pyx_t_3);
+    __pyx_v_memviewsliceobj = ((struct __pyx_memoryviewslice_obj *)__pyx_t_3);
+    __pyx_t_3 = 0;
+
+    /* "View.MemoryView":722
+ *     if isinstance(memview, _memoryviewslice):
+ *         memviewsliceobj = memview
+ *         p_src = &memviewsliceobj.from_slice             # <<<<<<<<<<<<<<
+ *     else:
+ *         slice_copy(memview, &src)
+ */
+    __pyx_v_p_src = (&__pyx_v_memviewsliceobj->from_slice);
+
+    /* "View.MemoryView":720
+ *     assert memview.view.ndim > 0
+ * 
+ *     if isinstance(memview, _memoryviewslice):             # <<<<<<<<<<<<<<
+ *         memviewsliceobj = memview
+ *         p_src = &memviewsliceobj.from_slice
+ */
+    goto __pyx_L3;
+  }
+
+  /* "View.MemoryView":724
+ *         p_src = &memviewsliceobj.from_slice
+ *     else:
+ *         slice_copy(memview, &src)             # <<<<<<<<<<<<<<
+ *         p_src = &src
+ * 
+ */
+  /*else*/ {
+    __pyx_memoryview_slice_copy(__pyx_v_memview, (&__pyx_v_src));
+
+    /* "View.MemoryView":725
+ *     else:
+ *         slice_copy(memview, &src)
+ *         p_src = &src             # <<<<<<<<<<<<<<
+ * 
+ * 
+ */
+    __pyx_v_p_src = (&__pyx_v_src);
+  }
+  __pyx_L3:;
+
+  /* "View.MemoryView":731
+ * 
+ * 
+ *     dst.memview = p_src.memview             # <<<<<<<<<<<<<<
+ *     dst.data = p_src.data
+ * 
+ */
+  __pyx_t_4 = __pyx_v_p_src->memview;
+  __pyx_v_dst.memview = __pyx_t_4;
+
+  /* "View.MemoryView":732
+ * 
+ *     dst.memview = p_src.memview
+ *     dst.data = p_src.data             # <<<<<<<<<<<<<<
+ * 
+ * 
+ */
+  __pyx_t_5 = __pyx_v_p_src->data;
+  __pyx_v_dst.data = __pyx_t_5;
+
+  /* "View.MemoryView":737
+ * 
+ * 
+ *     cdef __Pyx_memviewslice *p_dst = &dst             # <<<<<<<<<<<<<<
+ *     cdef int *p_suboffset_dim = &suboffset_dim
+ *     cdef Py_ssize_t start, stop, step
+ */
+  __pyx_v_p_dst = (&__pyx_v_dst);
+
+  /* "View.MemoryView":738
+ * 
+ *     cdef __Pyx_memviewslice *p_dst = &dst
+ *     cdef int *p_suboffset_dim = &suboffset_dim             # <<<<<<<<<<<<<<
+ *     cdef Py_ssize_t start, stop, step
+ *     cdef bint have_start, have_stop, have_step
+ */
+  __pyx_v_p_suboffset_dim = (&__pyx_v_suboffset_dim);
+
+  /* "View.MemoryView":742
+ *     cdef bint have_start, have_stop, have_step
+ * 
+ *     for dim, index in enumerate(indices):             # <<<<<<<<<<<<<<
+ *         if PyIndex_Check(index):
+ *             slice_memviewslice(
+ */
+  __pyx_t_6 = 0;
+  if (likely(PyList_CheckExact(__pyx_v_indices)) || PyTuple_CheckExact(__pyx_v_indices)) {
+    __pyx_t_3 = __pyx_v_indices; __Pyx_INCREF(__pyx_t_3); __pyx_t_7 = 0;
+    __pyx_t_8 = NULL;
+  } else {
+    __pyx_t_7 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_v_indices); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 742, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    __pyx_t_8 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 742, __pyx_L1_error)
+  }
+  for (;;) {
+    if (likely(!__pyx_t_8)) {
+      if (likely(PyList_CheckExact(__pyx_t_3))) {
+        if (__pyx_t_7 >= PyList_GET_SIZE(__pyx_t_3)) break;
+        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+        __pyx_t_9 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_7); __Pyx_INCREF(__pyx_t_9); __pyx_t_7++; if (unlikely(0 < 0)) __PYX_ERR(1, 742, __pyx_L1_error)
+        #else
+        __pyx_t_9 = PySequence_ITEM(__pyx_t_3, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 742, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_9);
+        #endif
+      } else {
+        if (__pyx_t_7 >= PyTuple_GET_SIZE(__pyx_t_3)) break;
+        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+        __pyx_t_9 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_7); __Pyx_INCREF(__pyx_t_9); __pyx_t_7++; if (unlikely(0 < 0)) __PYX_ERR(1, 742, __pyx_L1_error)
+        #else
+        __pyx_t_9 = PySequence_ITEM(__pyx_t_3, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 742, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_9);
+        #endif
+      }
+    } else {
+      __pyx_t_9 = __pyx_t_8(__pyx_t_3);
+      if (unlikely(!__pyx_t_9)) {
+        PyObject* exc_type = PyErr_Occurred();
+        if (exc_type) {
+          if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
+          else __PYX_ERR(1, 742, __pyx_L1_error)
+        }
+        break;
+      }
+      __Pyx_GOTREF(__pyx_t_9);
+    }
+    __Pyx_XDECREF_SET(__pyx_v_index, __pyx_t_9);
+    __pyx_t_9 = 0;
+    __pyx_v_dim = __pyx_t_6;
+    __pyx_t_6 = (__pyx_t_6 + 1);
+
+    /* "View.MemoryView":743
+ * 
+ *     for dim, index in enumerate(indices):
+ *         if PyIndex_Check(index):             # <<<<<<<<<<<<<<
+ *             slice_memviewslice(
+ *                 p_dst, p_src.shape[dim], p_src.strides[dim], p_src.suboffsets[dim],
+ */
+    __pyx_t_2 = (PyIndex_Check(__pyx_v_index) != 0);
+    if (__pyx_t_2) {
+
+      /* "View.MemoryView":747
+ *                 p_dst, p_src.shape[dim], p_src.strides[dim], p_src.suboffsets[dim],
+ *                 dim, new_ndim, p_suboffset_dim,
+ *                 index, 0, 0, # start, stop, step             # <<<<<<<<<<<<<<
+ *                 0, 0, 0, # have_{start,stop,step}
+ *                 False)
+ */
+      __pyx_t_10 = __Pyx_PyIndex_AsSsize_t(__pyx_v_index); if (unlikely((__pyx_t_10 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 747, __pyx_L1_error)
+
+      /* "View.MemoryView":744
+ *     for dim, index in enumerate(indices):
+ *         if PyIndex_Check(index):
+ *             slice_memviewslice(             # <<<<<<<<<<<<<<
+ *                 p_dst, p_src.shape[dim], p_src.strides[dim], p_src.suboffsets[dim],
+ *                 dim, new_ndim, p_suboffset_dim,
+ */
+      __pyx_t_11 = __pyx_memoryview_slice_memviewslice(__pyx_v_p_dst, (__pyx_v_p_src->shape[__pyx_v_dim]), (__pyx_v_p_src->strides[__pyx_v_dim]), (__pyx_v_p_src->suboffsets[__pyx_v_dim]), __pyx_v_dim, __pyx_v_new_ndim, __pyx_v_p_suboffset_dim, __pyx_t_10, 0, 0, 0, 0, 0, 0); if (unlikely(__pyx_t_11 == ((int)-1))) __PYX_ERR(1, 744, __pyx_L1_error)
+
+      /* "View.MemoryView":743
+ * 
+ *     for dim, index in enumerate(indices):
+ *         if PyIndex_Check(index):             # <<<<<<<<<<<<<<
+ *             slice_memviewslice(
+ *                 p_dst, p_src.shape[dim], p_src.strides[dim], p_src.suboffsets[dim],
+ */
+      goto __pyx_L6;
+    }
+
+    /* "View.MemoryView":750
+ *                 0, 0, 0, # have_{start,stop,step}
+ *                 False)
+ *         elif index is None:             # <<<<<<<<<<<<<<
+ *             p_dst.shape[new_ndim] = 1
+ *             p_dst.strides[new_ndim] = 0
+ */
+    __pyx_t_2 = (__pyx_v_index == Py_None);
+    __pyx_t_1 = (__pyx_t_2 != 0);
+    if (__pyx_t_1) {
+
+      /* "View.MemoryView":751
+ *                 False)
+ *         elif index is None:
+ *             p_dst.shape[new_ndim] = 1             # <<<<<<<<<<<<<<
+ *             p_dst.strides[new_ndim] = 0
+ *             p_dst.suboffsets[new_ndim] = -1
+ */
+      (__pyx_v_p_dst->shape[__pyx_v_new_ndim]) = 1;
+
+      /* "View.MemoryView":752
+ *         elif index is None:
+ *             p_dst.shape[new_ndim] = 1
+ *             p_dst.strides[new_ndim] = 0             # <<<<<<<<<<<<<<
+ *             p_dst.suboffsets[new_ndim] = -1
+ *             new_ndim += 1
+ */
+      (__pyx_v_p_dst->strides[__pyx_v_new_ndim]) = 0;
+
+      /* "View.MemoryView":753
+ *             p_dst.shape[new_ndim] = 1
+ *             p_dst.strides[new_ndim] = 0
+ *             p_dst.suboffsets[new_ndim] = -1             # <<<<<<<<<<<<<<
+ *             new_ndim += 1
+ *         else:
+ */
+      (__pyx_v_p_dst->suboffsets[__pyx_v_new_ndim]) = -1L;
+
+      /* "View.MemoryView":754
+ *             p_dst.strides[new_ndim] = 0
+ *             p_dst.suboffsets[new_ndim] = -1
+ *             new_ndim += 1             # <<<<<<<<<<<<<<
+ *         else:
+ *             start = index.start or 0
+ */
+      __pyx_v_new_ndim = (__pyx_v_new_ndim + 1);
+
+      /* "View.MemoryView":750
+ *                 0, 0, 0, # have_{start,stop,step}
+ *                 False)
+ *         elif index is None:             # <<<<<<<<<<<<<<
+ *             p_dst.shape[new_ndim] = 1
+ *             p_dst.strides[new_ndim] = 0
+ */
+      goto __pyx_L6;
+    }
+
+    /* "View.MemoryView":756
+ *             new_ndim += 1
+ *         else:
+ *             start = index.start or 0             # <<<<<<<<<<<<<<
+ *             stop = index.stop or 0
+ *             step = index.step or 0
+ */
+    /*else*/ {
+      __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_index, __pyx_n_s_start); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 756, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_9);
+      __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_9); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(1, 756, __pyx_L1_error)
+      if (!__pyx_t_1) {
+        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+      } else {
+        __pyx_t_12 = __Pyx_PyIndex_AsSsize_t(__pyx_t_9); if (unlikely((__pyx_t_12 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 756, __pyx_L1_error)
+        __pyx_t_10 = __pyx_t_12;
+        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+        goto __pyx_L7_bool_binop_done;
+      }
+      __pyx_t_10 = 0;
+      __pyx_L7_bool_binop_done:;
+      __pyx_v_start = __pyx_t_10;
+
+      /* "View.MemoryView":757
+ *         else:
+ *             start = index.start or 0
+ *             stop = index.stop or 0             # <<<<<<<<<<<<<<
+ *             step = index.step or 0
+ * 
+ */
+      __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_index, __pyx_n_s_stop); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 757, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_9);
+      __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_9); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(1, 757, __pyx_L1_error)
+      if (!__pyx_t_1) {
+        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+      } else {
+        __pyx_t_12 = __Pyx_PyIndex_AsSsize_t(__pyx_t_9); if (unlikely((__pyx_t_12 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 757, __pyx_L1_error)
+        __pyx_t_10 = __pyx_t_12;
+        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+        goto __pyx_L9_bool_binop_done;
+      }
+      __pyx_t_10 = 0;
+      __pyx_L9_bool_binop_done:;
+      __pyx_v_stop = __pyx_t_10;
+
+      /* "View.MemoryView":758
+ *             start = index.start or 0
+ *             stop = index.stop or 0
+ *             step = index.step or 0             # <<<<<<<<<<<<<<
+ * 
+ *             have_start = index.start is not None
+ */
+      __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_index, __pyx_n_s_step); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 758, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_9);
+      __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_9); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(1, 758, __pyx_L1_error)
+      if (!__pyx_t_1) {
+        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+      } else {
+        __pyx_t_12 = __Pyx_PyIndex_AsSsize_t(__pyx_t_9); if (unlikely((__pyx_t_12 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 758, __pyx_L1_error)
+        __pyx_t_10 = __pyx_t_12;
+        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+        goto __pyx_L11_bool_binop_done;
+      }
+      __pyx_t_10 = 0;
+      __pyx_L11_bool_binop_done:;
+      __pyx_v_step = __pyx_t_10;
+
+      /* "View.MemoryView":760
+ *             step = index.step or 0
+ * 
+ *             have_start = index.start is not None             # <<<<<<<<<<<<<<
+ *             have_stop = index.stop is not None
+ *             have_step = index.step is not None
+ */
+      __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_index, __pyx_n_s_start); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 760, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_9);
+      __pyx_t_1 = (__pyx_t_9 != Py_None);
+      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+      __pyx_v_have_start = __pyx_t_1;
+
+      /* "View.MemoryView":761
+ * 
+ *             have_start = index.start is not None
+ *             have_stop = index.stop is not None             # <<<<<<<<<<<<<<
+ *             have_step = index.step is not None
+ * 
+ */
+      __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_index, __pyx_n_s_stop); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 761, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_9);
+      __pyx_t_1 = (__pyx_t_9 != Py_None);
+      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+      __pyx_v_have_stop = __pyx_t_1;
+
+      /* "View.MemoryView":762
+ *             have_start = index.start is not None
+ *             have_stop = index.stop is not None
+ *             have_step = index.step is not None             # <<<<<<<<<<<<<<
+ * 
+ *             slice_memviewslice(
+ */
+      __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_index, __pyx_n_s_step); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 762, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_9);
+      __pyx_t_1 = (__pyx_t_9 != Py_None);
+      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+      __pyx_v_have_step = __pyx_t_1;
+
+      /* "View.MemoryView":764
+ *             have_step = index.step is not None
+ * 
+ *             slice_memviewslice(             # <<<<<<<<<<<<<<
+ *                 p_dst, p_src.shape[dim], p_src.strides[dim], p_src.suboffsets[dim],
+ *                 dim, new_ndim, p_suboffset_dim,
+ */
+      __pyx_t_11 = __pyx_memoryview_slice_memviewslice(__pyx_v_p_dst, (__pyx_v_p_src->shape[__pyx_v_dim]), (__pyx_v_p_src->strides[__pyx_v_dim]), (__pyx_v_p_src->suboffsets[__pyx_v_dim]), __pyx_v_dim, __pyx_v_new_ndim, __pyx_v_p_suboffset_dim, __pyx_v_start, __pyx_v_stop, __pyx_v_step, __pyx_v_have_start, __pyx_v_have_stop, __pyx_v_have_step, 1); if (unlikely(__pyx_t_11 == ((int)-1))) __PYX_ERR(1, 764, __pyx_L1_error)
+
+      /* "View.MemoryView":770
+ *                 have_start, have_stop, have_step,
+ *                 True)
+ *             new_ndim += 1             # <<<<<<<<<<<<<<
+ * 
+ *     if isinstance(memview, _memoryviewslice):
+ */
+      __pyx_v_new_ndim = (__pyx_v_new_ndim + 1);
+    }
+    __pyx_L6:;
+
+    /* "View.MemoryView":742
+ *     cdef bint have_start, have_stop, have_step
+ * 
+ *     for dim, index in enumerate(indices):             # <<<<<<<<<<<<<<
+ *         if PyIndex_Check(index):
+ *             slice_memviewslice(
+ */
+  }
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+
+  /* "View.MemoryView":772
+ *             new_ndim += 1
+ * 
+ *     if isinstance(memview, _memoryviewslice):             # <<<<<<<<<<<<<<
+ *         return memoryview_fromslice(dst, new_ndim,
+ *                                     memviewsliceobj.to_object_func,
+ */
+  __pyx_t_1 = __Pyx_TypeCheck(((PyObject *)__pyx_v_memview), __pyx_memoryviewslice_type); 
+  __pyx_t_2 = (__pyx_t_1 != 0);
+  if (__pyx_t_2) {
+
+    /* "View.MemoryView":773
+ * 
+ *     if isinstance(memview, _memoryviewslice):
+ *         return memoryview_fromslice(dst, new_ndim,             # <<<<<<<<<<<<<<
+ *                                     memviewsliceobj.to_object_func,
+ *                                     memviewsliceobj.to_dtype_func,
+ */
+    __Pyx_XDECREF(((PyObject *)__pyx_r));
+
+    /* "View.MemoryView":774
+ *     if isinstance(memview, _memoryviewslice):
+ *         return memoryview_fromslice(dst, new_ndim,
+ *                                     memviewsliceobj.to_object_func,             # <<<<<<<<<<<<<<
+ *                                     memviewsliceobj.to_dtype_func,
+ *                                     memview.dtype_is_object)
+ */
+    if (unlikely(!__pyx_v_memviewsliceobj)) { __Pyx_RaiseUnboundLocalError("memviewsliceobj"); __PYX_ERR(1, 774, __pyx_L1_error) }
+
+    /* "View.MemoryView":775
+ *         return memoryview_fromslice(dst, new_ndim,
+ *                                     memviewsliceobj.to_object_func,
+ *                                     memviewsliceobj.to_dtype_func,             # <<<<<<<<<<<<<<
+ *                                     memview.dtype_is_object)
+ *     else:
+ */
+    if (unlikely(!__pyx_v_memviewsliceobj)) { __Pyx_RaiseUnboundLocalError("memviewsliceobj"); __PYX_ERR(1, 775, __pyx_L1_error) }
+
+    /* "View.MemoryView":773
+ * 
+ *     if isinstance(memview, _memoryviewslice):
+ *         return memoryview_fromslice(dst, new_ndim,             # <<<<<<<<<<<<<<
+ *                                     memviewsliceobj.to_object_func,
+ *                                     memviewsliceobj.to_dtype_func,
+ */
+    __pyx_t_3 = __pyx_memoryview_fromslice(__pyx_v_dst, __pyx_v_new_ndim, __pyx_v_memviewsliceobj->to_object_func, __pyx_v_memviewsliceobj->to_dtype_func, __pyx_v_memview->dtype_is_object); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 773, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_memoryview_type))))) __PYX_ERR(1, 773, __pyx_L1_error)
+    __pyx_r = ((struct __pyx_memoryview_obj *)__pyx_t_3);
+    __pyx_t_3 = 0;
+    goto __pyx_L0;
+
+    /* "View.MemoryView":772
+ *             new_ndim += 1
+ * 
+ *     if isinstance(memview, _memoryviewslice):             # <<<<<<<<<<<<<<
+ *         return memoryview_fromslice(dst, new_ndim,
+ *                                     memviewsliceobj.to_object_func,
+ */
+  }
+
+  /* "View.MemoryView":778
+ *                                     memview.dtype_is_object)
+ *     else:
+ *         return memoryview_fromslice(dst, new_ndim, NULL, NULL,             # <<<<<<<<<<<<<<
+ *                                     memview.dtype_is_object)
+ * 
+ */
+  /*else*/ {
+    __Pyx_XDECREF(((PyObject *)__pyx_r));
+
+    /* "View.MemoryView":779
+ *     else:
+ *         return memoryview_fromslice(dst, new_ndim, NULL, NULL,
+ *                                     memview.dtype_is_object)             # <<<<<<<<<<<<<<
+ * 
+ * 
+ */
+    __pyx_t_3 = __pyx_memoryview_fromslice(__pyx_v_dst, __pyx_v_new_ndim, NULL, NULL, __pyx_v_memview->dtype_is_object); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 778, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+
+    /* "View.MemoryView":778
+ *                                     memview.dtype_is_object)
+ *     else:
+ *         return memoryview_fromslice(dst, new_ndim, NULL, NULL,             # <<<<<<<<<<<<<<
+ *                                     memview.dtype_is_object)
+ * 
+ */
+    if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_memoryview_type))))) __PYX_ERR(1, 778, __pyx_L1_error)
+    __pyx_r = ((struct __pyx_memoryview_obj *)__pyx_t_3);
+    __pyx_t_3 = 0;
+    goto __pyx_L0;
+  }
+
+  /* "View.MemoryView":706
+ * 
+ * @cname('__pyx_memview_slice')
+ * cdef memoryview memview_slice(memoryview memview, object indices):             # <<<<<<<<<<<<<<
+ *     cdef int new_ndim = 0, suboffset_dim = -1, dim
+ *     cdef bint negative_step
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_9);
+  __Pyx_AddTraceback("View.MemoryView.memview_slice", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = 0;
+  __pyx_L0:;
+  __Pyx_XDECREF((PyObject *)__pyx_v_memviewsliceobj);
+  __Pyx_XDECREF(__pyx_v_index);
+  __Pyx_XGIVEREF((PyObject *)__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "View.MemoryView":803
+ * 
+ * @cname('__pyx_memoryview_slice_memviewslice')
+ * cdef int slice_memviewslice(             # <<<<<<<<<<<<<<
+ *         __Pyx_memviewslice *dst,
+ *         Py_ssize_t shape, Py_ssize_t stride, Py_ssize_t suboffset,
+ */
+
+static int __pyx_memoryview_slice_memviewslice(__Pyx_memviewslice *__pyx_v_dst, Py_ssize_t __pyx_v_shape, Py_ssize_t __pyx_v_stride, Py_ssize_t __pyx_v_suboffset, int __pyx_v_dim, int __pyx_v_new_ndim, int *__pyx_v_suboffset_dim, Py_ssize_t __pyx_v_start, Py_ssize_t __pyx_v_stop, Py_ssize_t __pyx_v_step, int __pyx_v_have_start, int __pyx_v_have_stop, int __pyx_v_have_step, int __pyx_v_is_slice) {
+  Py_ssize_t __pyx_v_new_shape;
+  int __pyx_v_negative_step;
+  int __pyx_r;
+  int __pyx_t_1;
+  int __pyx_t_2;
+  int __pyx_t_3;
+
+  /* "View.MemoryView":823
+ *     cdef bint negative_step
+ * 
+ *     if not is_slice:             # <<<<<<<<<<<<<<
+ * 
+ *         if start < 0:
+ */
+  __pyx_t_1 = ((!(__pyx_v_is_slice != 0)) != 0);
+  if (__pyx_t_1) {
+
+    /* "View.MemoryView":825
+ *     if not is_slice:
+ * 
+ *         if start < 0:             # <<<<<<<<<<<<<<
+ *             start += shape
+ *         if not 0 <= start < shape:
+ */
+    __pyx_t_1 = ((__pyx_v_start < 0) != 0);
+    if (__pyx_t_1) {
+
+      /* "View.MemoryView":826
+ * 
+ *         if start < 0:
+ *             start += shape             # <<<<<<<<<<<<<<
+ *         if not 0 <= start < shape:
+ *             _err_dim(IndexError, "Index out of bounds (axis %d)", dim)
+ */
+      __pyx_v_start = (__pyx_v_start + __pyx_v_shape);
+
+      /* "View.MemoryView":825
+ *     if not is_slice:
+ * 
+ *         if start < 0:             # <<<<<<<<<<<<<<
+ *             start += shape
+ *         if not 0 <= start < shape:
+ */
+    }
+
+    /* "View.MemoryView":827
+ *         if start < 0:
+ *             start += shape
+ *         if not 0 <= start < shape:             # <<<<<<<<<<<<<<
+ *             _err_dim(IndexError, "Index out of bounds (axis %d)", dim)
+ *     else:
+ */
+    __pyx_t_1 = (0 <= __pyx_v_start);
+    if (__pyx_t_1) {
+      __pyx_t_1 = (__pyx_v_start < __pyx_v_shape);
+    }
+    __pyx_t_2 = ((!(__pyx_t_1 != 0)) != 0);
+    if (__pyx_t_2) {
+
+      /* "View.MemoryView":828
+ *             start += shape
+ *         if not 0 <= start < shape:
+ *             _err_dim(IndexError, "Index out of bounds (axis %d)", dim)             # <<<<<<<<<<<<<<
+ *     else:
+ * 
+ */
+      __pyx_t_3 = __pyx_memoryview_err_dim(__pyx_builtin_IndexError, ((char *)"Index out of bounds (axis %d)"), __pyx_v_dim); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 828, __pyx_L1_error)
+
+      /* "View.MemoryView":827
+ *         if start < 0:
+ *             start += shape
+ *         if not 0 <= start < shape:             # <<<<<<<<<<<<<<
+ *             _err_dim(IndexError, "Index out of bounds (axis %d)", dim)
+ *     else:
+ */
+    }
+
+    /* "View.MemoryView":823
+ *     cdef bint negative_step
+ * 
+ *     if not is_slice:             # <<<<<<<<<<<<<<
+ * 
+ *         if start < 0:
+ */
+    goto __pyx_L3;
+  }
+
+  /* "View.MemoryView":831
+ *     else:
+ * 
+ *         negative_step = have_step != 0 and step < 0             # <<<<<<<<<<<<<<
+ * 
+ *         if have_step and step == 0:
+ */
+  /*else*/ {
+    __pyx_t_1 = ((__pyx_v_have_step != 0) != 0);
+    if (__pyx_t_1) {
+    } else {
+      __pyx_t_2 = __pyx_t_1;
+      goto __pyx_L6_bool_binop_done;
+    }
+    __pyx_t_1 = ((__pyx_v_step < 0) != 0);
+    __pyx_t_2 = __pyx_t_1;
+    __pyx_L6_bool_binop_done:;
+    __pyx_v_negative_step = __pyx_t_2;
+
+    /* "View.MemoryView":833
+ *         negative_step = have_step != 0 and step < 0
+ * 
+ *         if have_step and step == 0:             # <<<<<<<<<<<<<<
+ *             _err_dim(ValueError, "Step may not be zero (axis %d)", dim)
+ * 
+ */
+    __pyx_t_1 = (__pyx_v_have_step != 0);
+    if (__pyx_t_1) {
+    } else {
+      __pyx_t_2 = __pyx_t_1;
+      goto __pyx_L9_bool_binop_done;
+    }
+    __pyx_t_1 = ((__pyx_v_step == 0) != 0);
+    __pyx_t_2 = __pyx_t_1;
+    __pyx_L9_bool_binop_done:;
+    if (__pyx_t_2) {
+
+      /* "View.MemoryView":834
+ * 
+ *         if have_step and step == 0:
+ *             _err_dim(ValueError, "Step may not be zero (axis %d)", dim)             # <<<<<<<<<<<<<<
+ * 
+ * 
+ */
+      __pyx_t_3 = __pyx_memoryview_err_dim(__pyx_builtin_ValueError, ((char *)"Step may not be zero (axis %d)"), __pyx_v_dim); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 834, __pyx_L1_error)
+
+      /* "View.MemoryView":833
+ *         negative_step = have_step != 0 and step < 0
+ * 
+ *         if have_step and step == 0:             # <<<<<<<<<<<<<<
+ *             _err_dim(ValueError, "Step may not be zero (axis %d)", dim)
+ * 
+ */
+    }
+
+    /* "View.MemoryView":837
+ * 
+ * 
+ *         if have_start:             # <<<<<<<<<<<<<<
+ *             if start < 0:
+ *                 start += shape
+ */
+    __pyx_t_2 = (__pyx_v_have_start != 0);
+    if (__pyx_t_2) {
+
+      /* "View.MemoryView":838
+ * 
+ *         if have_start:
+ *             if start < 0:             # <<<<<<<<<<<<<<
+ *                 start += shape
+ *                 if start < 0:
+ */
+      __pyx_t_2 = ((__pyx_v_start < 0) != 0);
+      if (__pyx_t_2) {
+
+        /* "View.MemoryView":839
+ *         if have_start:
+ *             if start < 0:
+ *                 start += shape             # <<<<<<<<<<<<<<
+ *                 if start < 0:
+ *                     start = 0
+ */
+        __pyx_v_start = (__pyx_v_start + __pyx_v_shape);
+
+        /* "View.MemoryView":840
+ *             if start < 0:
+ *                 start += shape
+ *                 if start < 0:             # <<<<<<<<<<<<<<
+ *                     start = 0
+ *             elif start >= shape:
+ */
+        __pyx_t_2 = ((__pyx_v_start < 0) != 0);
+        if (__pyx_t_2) {
+
+          /* "View.MemoryView":841
+ *                 start += shape
+ *                 if start < 0:
+ *                     start = 0             # <<<<<<<<<<<<<<
+ *             elif start >= shape:
+ *                 if negative_step:
+ */
+          __pyx_v_start = 0;
+
+          /* "View.MemoryView":840
+ *             if start < 0:
+ *                 start += shape
+ *                 if start < 0:             # <<<<<<<<<<<<<<
+ *                     start = 0
+ *             elif start >= shape:
+ */
+        }
+
+        /* "View.MemoryView":838
+ * 
+ *         if have_start:
+ *             if start < 0:             # <<<<<<<<<<<<<<
+ *                 start += shape
+ *                 if start < 0:
+ */
+        goto __pyx_L12;
+      }
+
+      /* "View.MemoryView":842
+ *                 if start < 0:
+ *                     start = 0
+ *             elif start >= shape:             # <<<<<<<<<<<<<<
+ *                 if negative_step:
+ *                     start = shape - 1
+ */
+      __pyx_t_2 = ((__pyx_v_start >= __pyx_v_shape) != 0);
+      if (__pyx_t_2) {
+
+        /* "View.MemoryView":843
+ *                     start = 0
+ *             elif start >= shape:
+ *                 if negative_step:             # <<<<<<<<<<<<<<
+ *                     start = shape - 1
+ *                 else:
+ */
+        __pyx_t_2 = (__pyx_v_negative_step != 0);
+        if (__pyx_t_2) {
+
+          /* "View.MemoryView":844
+ *             elif start >= shape:
+ *                 if negative_step:
+ *                     start = shape - 1             # <<<<<<<<<<<<<<
+ *                 else:
+ *                     start = shape
+ */
+          __pyx_v_start = (__pyx_v_shape - 1);
+
+          /* "View.MemoryView":843
+ *                     start = 0
+ *             elif start >= shape:
+ *                 if negative_step:             # <<<<<<<<<<<<<<
+ *                     start = shape - 1
+ *                 else:
+ */
+          goto __pyx_L14;
+        }
+
+        /* "View.MemoryView":846
+ *                     start = shape - 1
+ *                 else:
+ *                     start = shape             # <<<<<<<<<<<<<<
+ *         else:
+ *             if negative_step:
+ */
+        /*else*/ {
+          __pyx_v_start = __pyx_v_shape;
+        }
+        __pyx_L14:;
+
+        /* "View.MemoryView":842
+ *                 if start < 0:
+ *                     start = 0
+ *             elif start >= shape:             # <<<<<<<<<<<<<<
+ *                 if negative_step:
+ *                     start = shape - 1
+ */
+      }
+      __pyx_L12:;
+
+      /* "View.MemoryView":837
+ * 
+ * 
+ *         if have_start:             # <<<<<<<<<<<<<<
+ *             if start < 0:
+ *                 start += shape
+ */
+      goto __pyx_L11;
+    }
+
+    /* "View.MemoryView":848
+ *                     start = shape
+ *         else:
+ *             if negative_step:             # <<<<<<<<<<<<<<
+ *                 start = shape - 1
+ *             else:
+ */
+    /*else*/ {
+      __pyx_t_2 = (__pyx_v_negative_step != 0);
+      if (__pyx_t_2) {
+
+        /* "View.MemoryView":849
+ *         else:
+ *             if negative_step:
+ *                 start = shape - 1             # <<<<<<<<<<<<<<
+ *             else:
+ *                 start = 0
+ */
+        __pyx_v_start = (__pyx_v_shape - 1);
+
+        /* "View.MemoryView":848
+ *                     start = shape
+ *         else:
+ *             if negative_step:             # <<<<<<<<<<<<<<
+ *                 start = shape - 1
+ *             else:
+ */
+        goto __pyx_L15;
+      }
+
+      /* "View.MemoryView":851
+ *                 start = shape - 1
+ *             else:
+ *                 start = 0             # <<<<<<<<<<<<<<
+ * 
+ *         if have_stop:
+ */
+      /*else*/ {
+        __pyx_v_start = 0;
+      }
+      __pyx_L15:;
+    }
+    __pyx_L11:;
+
+    /* "View.MemoryView":853
+ *                 start = 0
+ * 
+ *         if have_stop:             # <<<<<<<<<<<<<<
+ *             if stop < 0:
+ *                 stop += shape
+ */
+    __pyx_t_2 = (__pyx_v_have_stop != 0);
+    if (__pyx_t_2) {
+
+      /* "View.MemoryView":854
+ * 
+ *         if have_stop:
+ *             if stop < 0:             # <<<<<<<<<<<<<<
+ *                 stop += shape
+ *                 if stop < 0:
+ */
+      __pyx_t_2 = ((__pyx_v_stop < 0) != 0);
+      if (__pyx_t_2) {
+
+        /* "View.MemoryView":855
+ *         if have_stop:
+ *             if stop < 0:
+ *                 stop += shape             # <<<<<<<<<<<<<<
+ *                 if stop < 0:
+ *                     stop = 0
+ */
+        __pyx_v_stop = (__pyx_v_stop + __pyx_v_shape);
+
+        /* "View.MemoryView":856
+ *             if stop < 0:
+ *                 stop += shape
+ *                 if stop < 0:             # <<<<<<<<<<<<<<
+ *                     stop = 0
+ *             elif stop > shape:
+ */
+        __pyx_t_2 = ((__pyx_v_stop < 0) != 0);
+        if (__pyx_t_2) {
+
+          /* "View.MemoryView":857
+ *                 stop += shape
+ *                 if stop < 0:
+ *                     stop = 0             # <<<<<<<<<<<<<<
+ *             elif stop > shape:
+ *                 stop = shape
+ */
+          __pyx_v_stop = 0;
+
+          /* "View.MemoryView":856
+ *             if stop < 0:
+ *                 stop += shape
+ *                 if stop < 0:             # <<<<<<<<<<<<<<
+ *                     stop = 0
+ *             elif stop > shape:
+ */
+        }
+
+        /* "View.MemoryView":854
+ * 
+ *         if have_stop:
+ *             if stop < 0:             # <<<<<<<<<<<<<<
+ *                 stop += shape
+ *                 if stop < 0:
+ */
+        goto __pyx_L17;
+      }
+
+      /* "View.MemoryView":858
+ *                 if stop < 0:
+ *                     stop = 0
+ *             elif stop > shape:             # <<<<<<<<<<<<<<
+ *                 stop = shape
+ *         else:
+ */
+      __pyx_t_2 = ((__pyx_v_stop > __pyx_v_shape) != 0);
+      if (__pyx_t_2) {
+
+        /* "View.MemoryView":859
+ *                     stop = 0
+ *             elif stop > shape:
+ *                 stop = shape             # <<<<<<<<<<<<<<
+ *         else:
+ *             if negative_step:
+ */
+        __pyx_v_stop = __pyx_v_shape;
+
+        /* "View.MemoryView":858
+ *                 if stop < 0:
+ *                     stop = 0
+ *             elif stop > shape:             # <<<<<<<<<<<<<<
+ *                 stop = shape
+ *         else:
+ */
+      }
+      __pyx_L17:;
+
+      /* "View.MemoryView":853
+ *                 start = 0
+ * 
+ *         if have_stop:             # <<<<<<<<<<<<<<
+ *             if stop < 0:
+ *                 stop += shape
+ */
+      goto __pyx_L16;
+    }
+
+    /* "View.MemoryView":861
+ *                 stop = shape
+ *         else:
+ *             if negative_step:             # <<<<<<<<<<<<<<
+ *                 stop = -1
+ *             else:
+ */
+    /*else*/ {
+      __pyx_t_2 = (__pyx_v_negative_step != 0);
+      if (__pyx_t_2) {
+
+        /* "View.MemoryView":862
+ *         else:
+ *             if negative_step:
+ *                 stop = -1             # <<<<<<<<<<<<<<
+ *             else:
+ *                 stop = shape
+ */
+        __pyx_v_stop = -1L;
+
+        /* "View.MemoryView":861
+ *                 stop = shape
+ *         else:
+ *             if negative_step:             # <<<<<<<<<<<<<<
+ *                 stop = -1
+ *             else:
+ */
+        goto __pyx_L19;
+      }
+
+      /* "View.MemoryView":864
+ *                 stop = -1
+ *             else:
+ *                 stop = shape             # <<<<<<<<<<<<<<
+ * 
+ *         if not have_step:
+ */
+      /*else*/ {
+        __pyx_v_stop = __pyx_v_shape;
+      }
+      __pyx_L19:;
+    }
+    __pyx_L16:;
+
+    /* "View.MemoryView":866
+ *                 stop = shape
+ * 
+ *         if not have_step:             # <<<<<<<<<<<<<<
+ *             step = 1
+ * 
+ */
+    __pyx_t_2 = ((!(__pyx_v_have_step != 0)) != 0);
+    if (__pyx_t_2) {
+
+      /* "View.MemoryView":867
+ * 
+ *         if not have_step:
+ *             step = 1             # <<<<<<<<<<<<<<
+ * 
+ * 
+ */
+      __pyx_v_step = 1;
+
+      /* "View.MemoryView":866
+ *                 stop = shape
+ * 
+ *         if not have_step:             # <<<<<<<<<<<<<<
+ *             step = 1
+ * 
+ */
+    }
+
+    /* "View.MemoryView":871
+ * 
+ *         with cython.cdivision(True):
+ *             new_shape = (stop - start) // step             # <<<<<<<<<<<<<<
+ * 
+ *             if (stop - start) - step * new_shape:
+ */
+    __pyx_v_new_shape = ((__pyx_v_stop - __pyx_v_start) / __pyx_v_step);
+
+    /* "View.MemoryView":873
+ *             new_shape = (stop - start) // step
+ * 
+ *             if (stop - start) - step * new_shape:             # <<<<<<<<<<<<<<
+ *                 new_shape += 1
+ * 
+ */
+    __pyx_t_2 = (((__pyx_v_stop - __pyx_v_start) - (__pyx_v_step * __pyx_v_new_shape)) != 0);
+    if (__pyx_t_2) {
+
+      /* "View.MemoryView":874
+ * 
+ *             if (stop - start) - step * new_shape:
+ *                 new_shape += 1             # <<<<<<<<<<<<<<
+ * 
+ *         if new_shape < 0:
+ */
+      __pyx_v_new_shape = (__pyx_v_new_shape + 1);
+
+      /* "View.MemoryView":873
+ *             new_shape = (stop - start) // step
+ * 
+ *             if (stop - start) - step * new_shape:             # <<<<<<<<<<<<<<
+ *                 new_shape += 1
+ * 
+ */
+    }
+
+    /* "View.MemoryView":876
+ *                 new_shape += 1
+ * 
+ *         if new_shape < 0:             # <<<<<<<<<<<<<<
+ *             new_shape = 0
+ * 
+ */
+    __pyx_t_2 = ((__pyx_v_new_shape < 0) != 0);
+    if (__pyx_t_2) {
+
+      /* "View.MemoryView":877
+ * 
+ *         if new_shape < 0:
+ *             new_shape = 0             # <<<<<<<<<<<<<<
+ * 
+ * 
+ */
+      __pyx_v_new_shape = 0;
+
+      /* "View.MemoryView":876
+ *                 new_shape += 1
+ * 
+ *         if new_shape < 0:             # <<<<<<<<<<<<<<
+ *             new_shape = 0
+ * 
+ */
+    }
+
+    /* "View.MemoryView":880
+ * 
+ * 
+ *         dst.strides[new_ndim] = stride * step             # <<<<<<<<<<<<<<
+ *         dst.shape[new_ndim] = new_shape
+ *         dst.suboffsets[new_ndim] = suboffset
+ */
+    (__pyx_v_dst->strides[__pyx_v_new_ndim]) = (__pyx_v_stride * __pyx_v_step);
+
+    /* "View.MemoryView":881
+ * 
+ *         dst.strides[new_ndim] = stride * step
+ *         dst.shape[new_ndim] = new_shape             # <<<<<<<<<<<<<<
+ *         dst.suboffsets[new_ndim] = suboffset
+ * 
+ */
+    (__pyx_v_dst->shape[__pyx_v_new_ndim]) = __pyx_v_new_shape;
+
+    /* "View.MemoryView":882
+ *         dst.strides[new_ndim] = stride * step
+ *         dst.shape[new_ndim] = new_shape
+ *         dst.suboffsets[new_ndim] = suboffset             # <<<<<<<<<<<<<<
+ * 
+ * 
+ */
+    (__pyx_v_dst->suboffsets[__pyx_v_new_ndim]) = __pyx_v_suboffset;
+  }
+  __pyx_L3:;
+
+  /* "View.MemoryView":885
+ * 
+ * 
+ *     if suboffset_dim[0] < 0:             # <<<<<<<<<<<<<<
+ *         dst.data += start * stride
+ *     else:
+ */
+  __pyx_t_2 = (((__pyx_v_suboffset_dim[0]) < 0) != 0);
+  if (__pyx_t_2) {
+
+    /* "View.MemoryView":886
+ * 
+ *     if suboffset_dim[0] < 0:
+ *         dst.data += start * stride             # <<<<<<<<<<<<<<
+ *     else:
+ *         dst.suboffsets[suboffset_dim[0]] += start * stride
+ */
+    __pyx_v_dst->data = (__pyx_v_dst->data + (__pyx_v_start * __pyx_v_stride));
+
+    /* "View.MemoryView":885
+ * 
+ * 
+ *     if suboffset_dim[0] < 0:             # <<<<<<<<<<<<<<
+ *         dst.data += start * stride
+ *     else:
+ */
+    goto __pyx_L23;
+  }
+
+  /* "View.MemoryView":888
+ *         dst.data += start * stride
+ *     else:
+ *         dst.suboffsets[suboffset_dim[0]] += start * stride             # <<<<<<<<<<<<<<
+ * 
+ *     if suboffset >= 0:
+ */
+  /*else*/ {
+    __pyx_t_3 = (__pyx_v_suboffset_dim[0]);
+    (__pyx_v_dst->suboffsets[__pyx_t_3]) = ((__pyx_v_dst->suboffsets[__pyx_t_3]) + (__pyx_v_start * __pyx_v_stride));
+  }
+  __pyx_L23:;
+
+  /* "View.MemoryView":890
+ *         dst.suboffsets[suboffset_dim[0]] += start * stride
+ * 
+ *     if suboffset >= 0:             # <<<<<<<<<<<<<<
+ *         if not is_slice:
+ *             if new_ndim == 0:
+ */
+  __pyx_t_2 = ((__pyx_v_suboffset >= 0) != 0);
+  if (__pyx_t_2) {
+
+    /* "View.MemoryView":891
+ * 
+ *     if suboffset >= 0:
+ *         if not is_slice:             # <<<<<<<<<<<<<<
+ *             if new_ndim == 0:
+ *                 dst.data = (<char **> dst.data)[0] + suboffset
+ */
+    __pyx_t_2 = ((!(__pyx_v_is_slice != 0)) != 0);
+    if (__pyx_t_2) {
+
+      /* "View.MemoryView":892
+ *     if suboffset >= 0:
+ *         if not is_slice:
+ *             if new_ndim == 0:             # <<<<<<<<<<<<<<
+ *                 dst.data = (<char **> dst.data)[0] + suboffset
+ *             else:
+ */
+      __pyx_t_2 = ((__pyx_v_new_ndim == 0) != 0);
+      if (__pyx_t_2) {
+
+        /* "View.MemoryView":893
+ *         if not is_slice:
+ *             if new_ndim == 0:
+ *                 dst.data = (<char **> dst.data)[0] + suboffset             # <<<<<<<<<<<<<<
+ *             else:
+ *                 _err_dim(IndexError, "All dimensions preceding dimension %d "
+ */
+        __pyx_v_dst->data = ((((char **)__pyx_v_dst->data)[0]) + __pyx_v_suboffset);
+
+        /* "View.MemoryView":892
+ *     if suboffset >= 0:
+ *         if not is_slice:
+ *             if new_ndim == 0:             # <<<<<<<<<<<<<<
+ *                 dst.data = (<char **> dst.data)[0] + suboffset
+ *             else:
+ */
+        goto __pyx_L26;
+      }
+
+      /* "View.MemoryView":895
+ *                 dst.data = (<char **> dst.data)[0] + suboffset
+ *             else:
+ *                 _err_dim(IndexError, "All dimensions preceding dimension %d "             # <<<<<<<<<<<<<<
+ *                                      "must be indexed and not sliced", dim)
+ *         else:
+ */
+      /*else*/ {
+
+        /* "View.MemoryView":896
+ *             else:
+ *                 _err_dim(IndexError, "All dimensions preceding dimension %d "
+ *                                      "must be indexed and not sliced", dim)             # <<<<<<<<<<<<<<
+ *         else:
+ *             suboffset_dim[0] = new_ndim
+ */
+        __pyx_t_3 = __pyx_memoryview_err_dim(__pyx_builtin_IndexError, ((char *)"All dimensions preceding dimension %d must be indexed and not sliced"), __pyx_v_dim); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 895, __pyx_L1_error)
+      }
+      __pyx_L26:;
+
+      /* "View.MemoryView":891
+ * 
+ *     if suboffset >= 0:
+ *         if not is_slice:             # <<<<<<<<<<<<<<
+ *             if new_ndim == 0:
+ *                 dst.data = (<char **> dst.data)[0] + suboffset
+ */
+      goto __pyx_L25;
+    }
+
+    /* "View.MemoryView":898
+ *                                      "must be indexed and not sliced", dim)
+ *         else:
+ *             suboffset_dim[0] = new_ndim             # <<<<<<<<<<<<<<
+ * 
+ *     return 0
+ */
+    /*else*/ {
+      (__pyx_v_suboffset_dim[0]) = __pyx_v_new_ndim;
+    }
+    __pyx_L25:;
+
+    /* "View.MemoryView":890
+ *         dst.suboffsets[suboffset_dim[0]] += start * stride
+ * 
+ *     if suboffset >= 0:             # <<<<<<<<<<<<<<
+ *         if not is_slice:
+ *             if new_ndim == 0:
+ */
+  }
+
+  /* "View.MemoryView":900
+ *             suboffset_dim[0] = new_ndim
+ * 
+ *     return 0             # <<<<<<<<<<<<<<
+ * 
+ * 
+ */
+  __pyx_r = 0;
+  goto __pyx_L0;
+
+  /* "View.MemoryView":803
+ * 
+ * @cname('__pyx_memoryview_slice_memviewslice')
+ * cdef int slice_memviewslice(             # <<<<<<<<<<<<<<
+ *         __Pyx_memviewslice *dst,
+ *         Py_ssize_t shape, Py_ssize_t stride, Py_ssize_t suboffset,
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  {
+    #ifdef WITH_THREAD
+    PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
+    #endif
+    __Pyx_AddTraceback("View.MemoryView.slice_memviewslice", __pyx_clineno, __pyx_lineno, __pyx_filename);
+    #ifdef WITH_THREAD
+    __Pyx_PyGILState_Release(__pyx_gilstate_save);
+    #endif
+  }
+  __pyx_r = -1;
+  __pyx_L0:;
+  return __pyx_r;
+}
+
+/* "View.MemoryView":906
+ * 
+ * @cname('__pyx_pybuffer_index')
+ * cdef char *pybuffer_index(Py_buffer *view, char *bufp, Py_ssize_t index,             # <<<<<<<<<<<<<<
+ *                           Py_ssize_t dim) except NULL:
+ *     cdef Py_ssize_t shape, stride, suboffset = -1
+ */
+
+static char *__pyx_pybuffer_index(Py_buffer *__pyx_v_view, char *__pyx_v_bufp, Py_ssize_t __pyx_v_index, Py_ssize_t __pyx_v_dim) {
+  Py_ssize_t __pyx_v_shape;
+  Py_ssize_t __pyx_v_stride;
+  Py_ssize_t __pyx_v_suboffset;
+  Py_ssize_t __pyx_v_itemsize;
+  char *__pyx_v_resultp;
+  char *__pyx_r;
+  __Pyx_RefNannyDeclarations
+  Py_ssize_t __pyx_t_1;
+  int __pyx_t_2;
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
+  __Pyx_RefNannySetupContext("pybuffer_index", 0);
+
+  /* "View.MemoryView":908
+ * cdef char *pybuffer_index(Py_buffer *view, char *bufp, Py_ssize_t index,
+ *                           Py_ssize_t dim) except NULL:
+ *     cdef Py_ssize_t shape, stride, suboffset = -1             # <<<<<<<<<<<<<<
+ *     cdef Py_ssize_t itemsize = view.itemsize
+ *     cdef char *resultp
+ */
+  __pyx_v_suboffset = -1L;
+
+  /* "View.MemoryView":909
+ *                           Py_ssize_t dim) except NULL:
+ *     cdef Py_ssize_t shape, stride, suboffset = -1
+ *     cdef Py_ssize_t itemsize = view.itemsize             # <<<<<<<<<<<<<<
+ *     cdef char *resultp
+ * 
+ */
+  __pyx_t_1 = __pyx_v_view->itemsize;
+  __pyx_v_itemsize = __pyx_t_1;
+
+  /* "View.MemoryView":912
+ *     cdef char *resultp
+ * 
+ *     if view.ndim == 0:             # <<<<<<<<<<<<<<
+ *         shape = view.len / itemsize
+ *         stride = itemsize
+ */
+  __pyx_t_2 = ((__pyx_v_view->ndim == 0) != 0);
+  if (__pyx_t_2) {
+
+    /* "View.MemoryView":913
+ * 
+ *     if view.ndim == 0:
+ *         shape = view.len / itemsize             # <<<<<<<<<<<<<<
+ *         stride = itemsize
+ *     else:
+ */
+    if (unlikely(__pyx_v_itemsize == 0)) {
+      PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero");
+      __PYX_ERR(1, 913, __pyx_L1_error)
+    }
+    else if (sizeof(Py_ssize_t) == sizeof(long) && (!(((Py_ssize_t)-1) > 0)) && unlikely(__pyx_v_itemsize == (Py_ssize_t)-1)  && unlikely(UNARY_NEG_WOULD_OVERFLOW(__pyx_v_view->len))) {
+      PyErr_SetString(PyExc_OverflowError, "value too large to perform division");
+      __PYX_ERR(1, 913, __pyx_L1_error)
+    }
+    __pyx_v_shape = __Pyx_div_Py_ssize_t(__pyx_v_view->len, __pyx_v_itemsize);
+
+    /* "View.MemoryView":914
+ *     if view.ndim == 0:
+ *         shape = view.len / itemsize
+ *         stride = itemsize             # <<<<<<<<<<<<<<
+ *     else:
+ *         shape = view.shape[dim]
+ */
+    __pyx_v_stride = __pyx_v_itemsize;
+
+    /* "View.MemoryView":912
+ *     cdef char *resultp
+ * 
+ *     if view.ndim == 0:             # <<<<<<<<<<<<<<
+ *         shape = view.len / itemsize
+ *         stride = itemsize
+ */
+    goto __pyx_L3;
+  }
+
+  /* "View.MemoryView":916
+ *         stride = itemsize
+ *     else:
+ *         shape = view.shape[dim]             # <<<<<<<<<<<<<<
+ *         stride = view.strides[dim]
+ *         if view.suboffsets != NULL:
+ */
+  /*else*/ {
+    __pyx_v_shape = (__pyx_v_view->shape[__pyx_v_dim]);
+
+    /* "View.MemoryView":917
+ *     else:
+ *         shape = view.shape[dim]
+ *         stride = view.strides[dim]             # <<<<<<<<<<<<<<
+ *         if view.suboffsets != NULL:
+ *             suboffset = view.suboffsets[dim]
+ */
+    __pyx_v_stride = (__pyx_v_view->strides[__pyx_v_dim]);
+
+    /* "View.MemoryView":918
+ *         shape = view.shape[dim]
+ *         stride = view.strides[dim]
+ *         if view.suboffsets != NULL:             # <<<<<<<<<<<<<<
+ *             suboffset = view.suboffsets[dim]
+ * 
+ */
+    __pyx_t_2 = ((__pyx_v_view->suboffsets != NULL) != 0);
+    if (__pyx_t_2) {
+
+      /* "View.MemoryView":919
+ *         stride = view.strides[dim]
+ *         if view.suboffsets != NULL:
+ *             suboffset = view.suboffsets[dim]             # <<<<<<<<<<<<<<
+ * 
+ *     if index < 0:
+ */
+      __pyx_v_suboffset = (__pyx_v_view->suboffsets[__pyx_v_dim]);
+
+      /* "View.MemoryView":918
+ *         shape = view.shape[dim]
+ *         stride = view.strides[dim]
+ *         if view.suboffsets != NULL:             # <<<<<<<<<<<<<<
+ *             suboffset = view.suboffsets[dim]
+ * 
+ */
+    }
+  }
+  __pyx_L3:;
+
+  /* "View.MemoryView":921
+ *             suboffset = view.suboffsets[dim]
+ * 
+ *     if index < 0:             # <<<<<<<<<<<<<<
+ *         index += view.shape[dim]
+ *         if index < 0:
+ */
+  __pyx_t_2 = ((__pyx_v_index < 0) != 0);
+  if (__pyx_t_2) {
+
+    /* "View.MemoryView":922
+ * 
+ *     if index < 0:
+ *         index += view.shape[dim]             # <<<<<<<<<<<<<<
+ *         if index < 0:
+ *             raise IndexError("Out of bounds on buffer access (axis %d)" % dim)
+ */
+    __pyx_v_index = (__pyx_v_index + (__pyx_v_view->shape[__pyx_v_dim]));
+
+    /* "View.MemoryView":923
+ *     if index < 0:
+ *         index += view.shape[dim]
+ *         if index < 0:             # <<<<<<<<<<<<<<
+ *             raise IndexError("Out of bounds on buffer access (axis %d)" % dim)
+ * 
+ */
+    __pyx_t_2 = ((__pyx_v_index < 0) != 0);
+    if (unlikely(__pyx_t_2)) {
+
+      /* "View.MemoryView":924
+ *         index += view.shape[dim]
+ *         if index < 0:
+ *             raise IndexError("Out of bounds on buffer access (axis %d)" % dim)             # <<<<<<<<<<<<<<
+ * 
+ *     if index >= shape:
+ */
+      __pyx_t_3 = PyInt_FromSsize_t(__pyx_v_dim); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 924, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_3);
+      __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_Out_of_bounds_on_buffer_access_a, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 924, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_4);
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_IndexError, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 924, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_3);
+      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+      __Pyx_Raise(__pyx_t_3, 0, 0, 0);
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __PYX_ERR(1, 924, __pyx_L1_error)
+
+      /* "View.MemoryView":923
+ *     if index < 0:
+ *         index += view.shape[dim]
+ *         if index < 0:             # <<<<<<<<<<<<<<
+ *             raise IndexError("Out of bounds on buffer access (axis %d)" % dim)
+ * 
+ */
+    }
+
+    /* "View.MemoryView":921
+ *             suboffset = view.suboffsets[dim]
+ * 
+ *     if index < 0:             # <<<<<<<<<<<<<<
+ *         index += view.shape[dim]
+ *         if index < 0:
+ */
+  }
+
+  /* "View.MemoryView":926
+ *             raise IndexError("Out of bounds on buffer access (axis %d)" % dim)
+ * 
+ *     if index >= shape:             # <<<<<<<<<<<<<<
+ *         raise IndexError("Out of bounds on buffer access (axis %d)" % dim)
+ * 
+ */
+  __pyx_t_2 = ((__pyx_v_index >= __pyx_v_shape) != 0);
+  if (unlikely(__pyx_t_2)) {
+
+    /* "View.MemoryView":927
+ * 
+ *     if index >= shape:
+ *         raise IndexError("Out of bounds on buffer access (axis %d)" % dim)             # <<<<<<<<<<<<<<
+ * 
+ *     resultp = bufp + index * stride
+ */
+    __pyx_t_3 = PyInt_FromSsize_t(__pyx_v_dim); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 927, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_Out_of_bounds_on_buffer_access_a, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 927, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
+    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+    __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_IndexError, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 927, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    __Pyx_Raise(__pyx_t_3, 0, 0, 0);
+    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+    __PYX_ERR(1, 927, __pyx_L1_error)
+
+    /* "View.MemoryView":926
+ *             raise IndexError("Out of bounds on buffer access (axis %d)" % dim)
+ * 
+ *     if index >= shape:             # <<<<<<<<<<<<<<
+ *         raise IndexError("Out of bounds on buffer access (axis %d)" % dim)
+ * 
+ */
+  }
+
+  /* "View.MemoryView":929
+ *         raise IndexError("Out of bounds on buffer access (axis %d)" % dim)
+ * 
+ *     resultp = bufp + index * stride             # <<<<<<<<<<<<<<
+ *     if suboffset >= 0:
+ *         resultp = (<char **> resultp)[0] + suboffset
+ */
+  __pyx_v_resultp = (__pyx_v_bufp + (__pyx_v_index * __pyx_v_stride));
+
+  /* "View.MemoryView":930
+ * 
+ *     resultp = bufp + index * stride
+ *     if suboffset >= 0:             # <<<<<<<<<<<<<<
+ *         resultp = (<char **> resultp)[0] + suboffset
+ * 
+ */
+  __pyx_t_2 = ((__pyx_v_suboffset >= 0) != 0);
+  if (__pyx_t_2) {
+
+    /* "View.MemoryView":931
+ *     resultp = bufp + index * stride
+ *     if suboffset >= 0:
+ *         resultp = (<char **> resultp)[0] + suboffset             # <<<<<<<<<<<<<<
+ * 
+ *     return resultp
+ */
+    __pyx_v_resultp = ((((char **)__pyx_v_resultp)[0]) + __pyx_v_suboffset);
+
+    /* "View.MemoryView":930
+ * 
+ *     resultp = bufp + index * stride
+ *     if suboffset >= 0:             # <<<<<<<<<<<<<<
+ *         resultp = (<char **> resultp)[0] + suboffset
+ * 
+ */
+  }
+
+  /* "View.MemoryView":933
+ *         resultp = (<char **> resultp)[0] + suboffset
+ * 
+ *     return resultp             # <<<<<<<<<<<<<<
+ * 
+ * 
+ */
+  __pyx_r = __pyx_v_resultp;
+  goto __pyx_L0;
+
+  /* "View.MemoryView":906
+ * 
+ * @cname('__pyx_pybuffer_index')
+ * cdef char *pybuffer_index(Py_buffer *view, char *bufp, Py_ssize_t index,             # <<<<<<<<<<<<<<
+ *                           Py_ssize_t dim) except NULL:
+ *     cdef Py_ssize_t shape, stride, suboffset = -1
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_AddTraceback("View.MemoryView.pybuffer_index", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "View.MemoryView":939
+ * 
+ * @cname('__pyx_memslice_transpose')
+ * cdef int transpose_memslice(__Pyx_memviewslice *memslice) nogil except 0:             # <<<<<<<<<<<<<<
+ *     cdef int ndim = memslice.memview.view.ndim
+ * 
+ */
+
+static int __pyx_memslice_transpose(__Pyx_memviewslice *__pyx_v_memslice) {
+  int __pyx_v_ndim;
+  Py_ssize_t *__pyx_v_shape;
+  Py_ssize_t *__pyx_v_strides;
+  int __pyx_v_i;
+  int __pyx_v_j;
+  int __pyx_r;
+  int __pyx_t_1;
+  Py_ssize_t *__pyx_t_2;
+  long __pyx_t_3;
+  long __pyx_t_4;
+  Py_ssize_t __pyx_t_5;
+  Py_ssize_t __pyx_t_6;
+  int __pyx_t_7;
+  int __pyx_t_8;
+  int __pyx_t_9;
+
+  /* "View.MemoryView":940
+ * @cname('__pyx_memslice_transpose')
+ * cdef int transpose_memslice(__Pyx_memviewslice *memslice) nogil except 0:
+ *     cdef int ndim = memslice.memview.view.ndim             # <<<<<<<<<<<<<<
+ * 
+ *     cdef Py_ssize_t *shape = memslice.shape
+ */
+  __pyx_t_1 = __pyx_v_memslice->memview->view.ndim;
+  __pyx_v_ndim = __pyx_t_1;
+
+  /* "View.MemoryView":942
+ *     cdef int ndim = memslice.memview.view.ndim
+ * 
+ *     cdef Py_ssize_t *shape = memslice.shape             # <<<<<<<<<<<<<<
+ *     cdef Py_ssize_t *strides = memslice.strides
+ * 
+ */
+  __pyx_t_2 = __pyx_v_memslice->shape;
+  __pyx_v_shape = __pyx_t_2;
+
+  /* "View.MemoryView":943
+ * 
+ *     cdef Py_ssize_t *shape = memslice.shape
+ *     cdef Py_ssize_t *strides = memslice.strides             # <<<<<<<<<<<<<<
+ * 
+ * 
+ */
+  __pyx_t_2 = __pyx_v_memslice->strides;
+  __pyx_v_strides = __pyx_t_2;
+
+  /* "View.MemoryView":947
+ * 
+ *     cdef int i, j
+ *     for i in range(ndim / 2):             # <<<<<<<<<<<<<<
+ *         j = ndim - 1 - i
+ *         strides[i], strides[j] = strides[j], strides[i]
+ */
+  __pyx_t_3 = __Pyx_div_long(__pyx_v_ndim, 2);
+  __pyx_t_4 = __pyx_t_3;
+  for (__pyx_t_1 = 0; __pyx_t_1 < __pyx_t_4; __pyx_t_1+=1) {
+    __pyx_v_i = __pyx_t_1;
+
+    /* "View.MemoryView":948
+ *     cdef int i, j
+ *     for i in range(ndim / 2):
+ *         j = ndim - 1 - i             # <<<<<<<<<<<<<<
+ *         strides[i], strides[j] = strides[j], strides[i]
+ *         shape[i], shape[j] = shape[j], shape[i]
+ */
+    __pyx_v_j = ((__pyx_v_ndim - 1) - __pyx_v_i);
+
+    /* "View.MemoryView":949
+ *     for i in range(ndim / 2):
+ *         j = ndim - 1 - i
+ *         strides[i], strides[j] = strides[j], strides[i]             # <<<<<<<<<<<<<<
+ *         shape[i], shape[j] = shape[j], shape[i]
+ * 
+ */
+    __pyx_t_5 = (__pyx_v_strides[__pyx_v_j]);
+    __pyx_t_6 = (__pyx_v_strides[__pyx_v_i]);
+    (__pyx_v_strides[__pyx_v_i]) = __pyx_t_5;
+    (__pyx_v_strides[__pyx_v_j]) = __pyx_t_6;
+
+    /* "View.MemoryView":950
+ *         j = ndim - 1 - i
+ *         strides[i], strides[j] = strides[j], strides[i]
+ *         shape[i], shape[j] = shape[j], shape[i]             # <<<<<<<<<<<<<<
+ * 
+ *         if memslice.suboffsets[i] >= 0 or memslice.suboffsets[j] >= 0:
+ */
+    __pyx_t_6 = (__pyx_v_shape[__pyx_v_j]);
+    __pyx_t_5 = (__pyx_v_shape[__pyx_v_i]);
+    (__pyx_v_shape[__pyx_v_i]) = __pyx_t_6;
+    (__pyx_v_shape[__pyx_v_j]) = __pyx_t_5;
+
+    /* "View.MemoryView":952
+ *         shape[i], shape[j] = shape[j], shape[i]
+ * 
+ *         if memslice.suboffsets[i] >= 0 or memslice.suboffsets[j] >= 0:             # <<<<<<<<<<<<<<
+ *             _err(ValueError, "Cannot transpose memoryview with indirect dimensions")
+ * 
+ */
+    __pyx_t_8 = (((__pyx_v_memslice->suboffsets[__pyx_v_i]) >= 0) != 0);
+    if (!__pyx_t_8) {
+    } else {
+      __pyx_t_7 = __pyx_t_8;
+      goto __pyx_L6_bool_binop_done;
+    }
+    __pyx_t_8 = (((__pyx_v_memslice->suboffsets[__pyx_v_j]) >= 0) != 0);
+    __pyx_t_7 = __pyx_t_8;
+    __pyx_L6_bool_binop_done:;
+    if (__pyx_t_7) {
+
+      /* "View.MemoryView":953
+ * 
+ *         if memslice.suboffsets[i] >= 0 or memslice.suboffsets[j] >= 0:
+ *             _err(ValueError, "Cannot transpose memoryview with indirect dimensions")             # <<<<<<<<<<<<<<
+ * 
+ *     return 1
+ */
+      __pyx_t_9 = __pyx_memoryview_err(__pyx_builtin_ValueError, ((char *)"Cannot transpose memoryview with indirect dimensions")); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(1, 953, __pyx_L1_error)
+
+      /* "View.MemoryView":952
+ *         shape[i], shape[j] = shape[j], shape[i]
+ * 
+ *         if memslice.suboffsets[i] >= 0 or memslice.suboffsets[j] >= 0:             # <<<<<<<<<<<<<<
+ *             _err(ValueError, "Cannot transpose memoryview with indirect dimensions")
+ * 
+ */
+    }
+  }
+
+  /* "View.MemoryView":955
+ *             _err(ValueError, "Cannot transpose memoryview with indirect dimensions")
+ * 
+ *     return 1             # <<<<<<<<<<<<<<
+ * 
+ * 
+ */
+  __pyx_r = 1;
+  goto __pyx_L0;
+
+  /* "View.MemoryView":939
+ * 
+ * @cname('__pyx_memslice_transpose')
+ * cdef int transpose_memslice(__Pyx_memviewslice *memslice) nogil except 0:             # <<<<<<<<<<<<<<
+ *     cdef int ndim = memslice.memview.view.ndim
+ * 
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  {
+    #ifdef WITH_THREAD
+    PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
+    #endif
+    __Pyx_AddTraceback("View.MemoryView.transpose_memslice", __pyx_clineno, __pyx_lineno, __pyx_filename);
+    #ifdef WITH_THREAD
+    __Pyx_PyGILState_Release(__pyx_gilstate_save);
+    #endif
+  }
+  __pyx_r = 0;
+  __pyx_L0:;
+  return __pyx_r;
+}
+
+/* "View.MemoryView":972
+ *     cdef int (*to_dtype_func)(char *, object) except 0
+ * 
+ *     def __dealloc__(self):             # <<<<<<<<<<<<<<
+ *         __PYX_XDEC_MEMVIEW(&self.from_slice, 1)
+ * 
+ */
+
+/* Python wrapper */
+static void __pyx_memoryviewslice___dealloc__(PyObject *__pyx_v_self); /*proto*/
+static void __pyx_memoryviewslice___dealloc__(PyObject *__pyx_v_self) {
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0);
+  __pyx_memoryviewslice___pyx_pf_15View_dot_MemoryView_16_memoryviewslice___dealloc__(((struct __pyx_memoryviewslice_obj *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+}
+
+static void __pyx_memoryviewslice___pyx_pf_15View_dot_MemoryView_16_memoryviewslice___dealloc__(struct __pyx_memoryviewslice_obj *__pyx_v_self) {
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__dealloc__", 0);
+
+  /* "View.MemoryView":973
+ * 
+ *     def __dealloc__(self):
+ *         __PYX_XDEC_MEMVIEW(&self.from_slice, 1)             # <<<<<<<<<<<<<<
+ * 
+ *     cdef convert_item_to_object(self, char *itemp):
+ */
+  __PYX_XDEC_MEMVIEW((&__pyx_v_self->from_slice), 1);
+
+  /* "View.MemoryView":972
+ *     cdef int (*to_dtype_func)(char *, object) except 0
+ * 
+ *     def __dealloc__(self):             # <<<<<<<<<<<<<<
+ *         __PYX_XDEC_MEMVIEW(&self.from_slice, 1)
+ * 
+ */
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+}
+
+/* "View.MemoryView":975
+ *         __PYX_XDEC_MEMVIEW(&self.from_slice, 1)
+ * 
+ *     cdef convert_item_to_object(self, char *itemp):             # <<<<<<<<<<<<<<
+ *         if self.to_object_func != NULL:
+ *             return self.to_object_func(itemp)
+ */
+
+static PyObject *__pyx_memoryviewslice_convert_item_to_object(struct __pyx_memoryviewslice_obj *__pyx_v_self, char *__pyx_v_itemp) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  PyObject *__pyx_t_2 = NULL;
+  __Pyx_RefNannySetupContext("convert_item_to_object", 0);
+
+  /* "View.MemoryView":976
+ * 
+ *     cdef convert_item_to_object(self, char *itemp):
+ *         if self.to_object_func != NULL:             # <<<<<<<<<<<<<<
+ *             return self.to_object_func(itemp)
+ *         else:
+ */
+  __pyx_t_1 = ((__pyx_v_self->to_object_func != NULL) != 0);
+  if (__pyx_t_1) {
+
+    /* "View.MemoryView":977
+ *     cdef convert_item_to_object(self, char *itemp):
+ *         if self.to_object_func != NULL:
+ *             return self.to_object_func(itemp)             # <<<<<<<<<<<<<<
+ *         else:
+ *             return memoryview.convert_item_to_object(self, itemp)
+ */
+    __Pyx_XDECREF(__pyx_r);
+    __pyx_t_2 = __pyx_v_self->to_object_func(__pyx_v_itemp); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 977, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_2);
+    __pyx_r = __pyx_t_2;
+    __pyx_t_2 = 0;
+    goto __pyx_L0;
+
+    /* "View.MemoryView":976
+ * 
+ *     cdef convert_item_to_object(self, char *itemp):
+ *         if self.to_object_func != NULL:             # <<<<<<<<<<<<<<
+ *             return self.to_object_func(itemp)
+ *         else:
+ */
+  }
+
+  /* "View.MemoryView":979
+ *             return self.to_object_func(itemp)
+ *         else:
+ *             return memoryview.convert_item_to_object(self, itemp)             # <<<<<<<<<<<<<<
+ * 
+ *     cdef assign_item_from_object(self, char *itemp, object value):
+ */
+  /*else*/ {
+    __Pyx_XDECREF(__pyx_r);
+    __pyx_t_2 = __pyx_memoryview_convert_item_to_object(((struct __pyx_memoryview_obj *)__pyx_v_self), __pyx_v_itemp); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 979, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_2);
+    __pyx_r = __pyx_t_2;
+    __pyx_t_2 = 0;
+    goto __pyx_L0;
+  }
+
+  /* "View.MemoryView":975
+ *         __PYX_XDEC_MEMVIEW(&self.from_slice, 1)
+ * 
+ *     cdef convert_item_to_object(self, char *itemp):             # <<<<<<<<<<<<<<
+ *         if self.to_object_func != NULL:
+ *             return self.to_object_func(itemp)
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_AddTraceback("View.MemoryView._memoryviewslice.convert_item_to_object", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = 0;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "View.MemoryView":981
+ *             return memoryview.convert_item_to_object(self, itemp)
+ * 
+ *     cdef assign_item_from_object(self, char *itemp, object value):             # <<<<<<<<<<<<<<
+ *         if self.to_dtype_func != NULL:
+ *             self.to_dtype_func(itemp, value)
+ */
+
+static PyObject *__pyx_memoryviewslice_assign_item_from_object(struct __pyx_memoryviewslice_obj *__pyx_v_self, char *__pyx_v_itemp, PyObject *__pyx_v_value) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  int __pyx_t_2;
+  PyObject *__pyx_t_3 = NULL;
+  __Pyx_RefNannySetupContext("assign_item_from_object", 0);
+
+  /* "View.MemoryView":982
+ * 
+ *     cdef assign_item_from_object(self, char *itemp, object value):
+ *         if self.to_dtype_func != NULL:             # <<<<<<<<<<<<<<
+ *             self.to_dtype_func(itemp, value)
+ *         else:
+ */
+  __pyx_t_1 = ((__pyx_v_self->to_dtype_func != NULL) != 0);
+  if (__pyx_t_1) {
+
+    /* "View.MemoryView":983
+ *     cdef assign_item_from_object(self, char *itemp, object value):
+ *         if self.to_dtype_func != NULL:
+ *             self.to_dtype_func(itemp, value)             # <<<<<<<<<<<<<<
+ *         else:
+ *             memoryview.assign_item_from_object(self, itemp, value)
+ */
+    __pyx_t_2 = __pyx_v_self->to_dtype_func(__pyx_v_itemp, __pyx_v_value); if (unlikely(__pyx_t_2 == ((int)0))) __PYX_ERR(1, 983, __pyx_L1_error)
+
+    /* "View.MemoryView":982
+ * 
+ *     cdef assign_item_from_object(self, char *itemp, object value):
+ *         if self.to_dtype_func != NULL:             # <<<<<<<<<<<<<<
+ *             self.to_dtype_func(itemp, value)
+ *         else:
+ */
+    goto __pyx_L3;
+  }
+
+  /* "View.MemoryView":985
+ *             self.to_dtype_func(itemp, value)
+ *         else:
+ *             memoryview.assign_item_from_object(self, itemp, value)             # <<<<<<<<<<<<<<
+ * 
+ *     @property
+ */
+  /*else*/ {
+    __pyx_t_3 = __pyx_memoryview_assign_item_from_object(((struct __pyx_memoryview_obj *)__pyx_v_self), __pyx_v_itemp, __pyx_v_value); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 985, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  }
+  __pyx_L3:;
+
+  /* "View.MemoryView":981
+ *             return memoryview.convert_item_to_object(self, itemp)
+ * 
+ *     cdef assign_item_from_object(self, char *itemp, object value):             # <<<<<<<<<<<<<<
+ *         if self.to_dtype_func != NULL:
+ *             self.to_dtype_func(itemp, value)
+ */
+
+  /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_AddTraceback("View.MemoryView._memoryviewslice.assign_item_from_object", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = 0;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "View.MemoryView":988
+ * 
+ *     @property
+ *     def base(self):             # <<<<<<<<<<<<<<
+ *         return self.from_object
+ * 
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_15View_dot_MemoryView_16_memoryviewslice_4base_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_15View_dot_MemoryView_16_memoryviewslice_4base_1__get__(PyObject *__pyx_v_self) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_15View_dot_MemoryView_16_memoryviewslice_4base___get__(((struct __pyx_memoryviewslice_obj *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_15View_dot_MemoryView_16_memoryviewslice_4base___get__(struct __pyx_memoryviewslice_obj *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__get__", 0);
+
+  /* "View.MemoryView":989
+ *     @property
+ *     def base(self):
+ *         return self.from_object             # <<<<<<<<<<<<<<
+ * 
+ *     __pyx_getbuffer = capsule(<void *> &__pyx_memoryview_getbuffer, "getbuffer(obj, view, flags)")
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(__pyx_v_self->from_object);
+  __pyx_r = __pyx_v_self->from_object;
+  goto __pyx_L0;
+
+  /* "View.MemoryView":988
+ * 
+ *     @property
+ *     def base(self):             # <<<<<<<<<<<<<<
+ *         return self.from_object
+ * 
+ */
+
+  /* function exit code */
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "(tree fragment)":1
+ * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
+ *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
+ * def __setstate_cython__(self, __pyx_state):
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw___pyx_memoryviewslice_1__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static PyObject *__pyx_pw___pyx_memoryviewslice_1__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
+  __pyx_r = __pyx_pf___pyx_memoryviewslice___reduce_cython__(((struct __pyx_memoryviewslice_obj *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf___pyx_memoryviewslice___reduce_cython__(CYTHON_UNUSED struct __pyx_memoryviewslice_obj *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  __Pyx_RefNannySetupContext("__reduce_cython__", 0);
+
+  /* "(tree fragment)":2
+ * def __reduce_cython__(self):
+ *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
+ * def __setstate_cython__(self, __pyx_state):
+ *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
+ */
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__21, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_Raise(__pyx_t_1, 0, 0, 0);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __PYX_ERR(1, 2, __pyx_L1_error)
+
+  /* "(tree fragment)":1
+ * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
+ *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
+ * def __setstate_cython__(self, __pyx_state):
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("View.MemoryView._memoryviewslice.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "(tree fragment)":3
+ * def __reduce_cython__(self):
+ *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
+ * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
+ *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw___pyx_memoryviewslice_3__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/
+static PyObject *__pyx_pw___pyx_memoryviewslice_3__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
+  __pyx_r = __pyx_pf___pyx_memoryviewslice_2__setstate_cython__(((struct __pyx_memoryviewslice_obj *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf___pyx_memoryviewslice_2__setstate_cython__(CYTHON_UNUSED struct __pyx_memoryviewslice_obj *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  __Pyx_RefNannySetupContext("__setstate_cython__", 0);
+
+  /* "(tree fragment)":4
+ *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
+ * def __setstate_cython__(self, __pyx_state):
+ *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
+ */
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__22, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 4, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_Raise(__pyx_t_1, 0, 0, 0);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __PYX_ERR(1, 4, __pyx_L1_error)
+
+  /* "(tree fragment)":3
+ * def __reduce_cython__(self):
+ *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
+ * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
+ *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("View.MemoryView._memoryviewslice.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "View.MemoryView":995
+ * 
+ * @cname('__pyx_memoryview_fromslice')
+ * cdef memoryview_fromslice(__Pyx_memviewslice memviewslice,             # <<<<<<<<<<<<<<
+ *                           int ndim,
+ *                           object (*to_object_func)(char *),
+ */
+
+static PyObject *__pyx_memoryview_fromslice(__Pyx_memviewslice __pyx_v_memviewslice, int __pyx_v_ndim, PyObject *(*__pyx_v_to_object_func)(char *), int (*__pyx_v_to_dtype_func)(char *, PyObject *), int __pyx_v_dtype_is_object) {
+  struct __pyx_memoryviewslice_obj *__pyx_v_result = 0;
+  Py_ssize_t __pyx_v_suboffset;
+  PyObject *__pyx_v_length = NULL;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  __Pyx_TypeInfo *__pyx_t_4;
+  Py_buffer __pyx_t_5;
+  Py_ssize_t *__pyx_t_6;
+  Py_ssize_t *__pyx_t_7;
+  Py_ssize_t *__pyx_t_8;
+  Py_ssize_t __pyx_t_9;
+  __Pyx_RefNannySetupContext("memoryview_fromslice", 0);
+
+  /* "View.MemoryView":1003
+ *     cdef _memoryviewslice result
+ * 
+ *     if <PyObject *> memviewslice.memview == Py_None:             # <<<<<<<<<<<<<<
+ *         return None
+ * 
+ */
+  __pyx_t_1 = ((((PyObject *)__pyx_v_memviewslice.memview) == Py_None) != 0);
+  if (__pyx_t_1) {
+
+    /* "View.MemoryView":1004
+ * 
+ *     if <PyObject *> memviewslice.memview == Py_None:
+ *         return None             # <<<<<<<<<<<<<<
+ * 
+ * 
+ */
+    __Pyx_XDECREF(__pyx_r);
+    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+    goto __pyx_L0;
+
+    /* "View.MemoryView":1003
+ *     cdef _memoryviewslice result
+ * 
+ *     if <PyObject *> memviewslice.memview == Py_None:             # <<<<<<<<<<<<<<
+ *         return None
+ * 
+ */
+  }
+
+  /* "View.MemoryView":1009
+ * 
+ * 
+ *     result = _memoryviewslice(None, 0, dtype_is_object)             # <<<<<<<<<<<<<<
+ * 
+ *     result.from_slice = memviewslice
+ */
+  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_v_dtype_is_object); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1009, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1009, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_INCREF(Py_None);
+  __Pyx_GIVEREF(Py_None);
+  PyTuple_SET_ITEM(__pyx_t_3, 0, Py_None);
+  __Pyx_INCREF(__pyx_int_0);
+  __Pyx_GIVEREF(__pyx_int_0);
+  PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_int_0);
+  __Pyx_GIVEREF(__pyx_t_2);
+  PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_t_2);
+  __pyx_t_2 = 0;
+  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_memoryviewslice_type), __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1009, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __pyx_v_result = ((struct __pyx_memoryviewslice_obj *)__pyx_t_2);
+  __pyx_t_2 = 0;
+
+  /* "View.MemoryView":1011
+ *     result = _memoryviewslice(None, 0, dtype_is_object)
+ * 
+ *     result.from_slice = memviewslice             # <<<<<<<<<<<<<<
+ *     __PYX_INC_MEMVIEW(&memviewslice, 1)
+ * 
+ */
+  __pyx_v_result->from_slice = __pyx_v_memviewslice;
+
+  /* "View.MemoryView":1012
+ * 
+ *     result.from_slice = memviewslice
+ *     __PYX_INC_MEMVIEW(&memviewslice, 1)             # <<<<<<<<<<<<<<
+ * 
+ *     result.from_object = (<memoryview> memviewslice.memview).base
+ */
+  __PYX_INC_MEMVIEW((&__pyx_v_memviewslice), 1);
+
+  /* "View.MemoryView":1014
+ *     __PYX_INC_MEMVIEW(&memviewslice, 1)
+ * 
+ *     result.from_object = (<memoryview> memviewslice.memview).base             # <<<<<<<<<<<<<<
+ *     result.typeinfo = memviewslice.memview.typeinfo
+ * 
+ */
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_memviewslice.memview), __pyx_n_s_base); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1014, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_GIVEREF(__pyx_t_2);
+  __Pyx_GOTREF(__pyx_v_result->from_object);
+  __Pyx_DECREF(__pyx_v_result->from_object);
+  __pyx_v_result->from_object = __pyx_t_2;
+  __pyx_t_2 = 0;
+
+  /* "View.MemoryView":1015
+ * 
+ *     result.from_object = (<memoryview> memviewslice.memview).base
+ *     result.typeinfo = memviewslice.memview.typeinfo             # <<<<<<<<<<<<<<
+ * 
+ *     result.view = memviewslice.memview.view
+ */
+  __pyx_t_4 = __pyx_v_memviewslice.memview->typeinfo;
+  __pyx_v_result->__pyx_base.typeinfo = __pyx_t_4;
+
+  /* "View.MemoryView":1017
+ *     result.typeinfo = memviewslice.memview.typeinfo
+ * 
+ *     result.view = memviewslice.memview.view             # <<<<<<<<<<<<<<
+ *     result.view.buf = <void *> memviewslice.data
+ *     result.view.ndim = ndim
+ */
+  __pyx_t_5 = __pyx_v_memviewslice.memview->view;
+  __pyx_v_result->__pyx_base.view = __pyx_t_5;
+
+  /* "View.MemoryView":1018
+ * 
+ *     result.view = memviewslice.memview.view
+ *     result.view.buf = <void *> memviewslice.data             # <<<<<<<<<<<<<<
+ *     result.view.ndim = ndim
+ *     (<__pyx_buffer *> &result.view).obj = Py_None
+ */
+  __pyx_v_result->__pyx_base.view.buf = ((void *)__pyx_v_memviewslice.data);
+
+  /* "View.MemoryView":1019
+ *     result.view = memviewslice.memview.view
+ *     result.view.buf = <void *> memviewslice.data
+ *     result.view.ndim = ndim             # <<<<<<<<<<<<<<
+ *     (<__pyx_buffer *> &result.view).obj = Py_None
+ *     Py_INCREF(Py_None)
+ */
+  __pyx_v_result->__pyx_base.view.ndim = __pyx_v_ndim;
+
+  /* "View.MemoryView":1020
+ *     result.view.buf = <void *> memviewslice.data
+ *     result.view.ndim = ndim
+ *     (<__pyx_buffer *> &result.view).obj = Py_None             # <<<<<<<<<<<<<<
+ *     Py_INCREF(Py_None)
+ * 
+ */
+  ((Py_buffer *)(&__pyx_v_result->__pyx_base.view))->obj = Py_None;
+
+  /* "View.MemoryView":1021
+ *     result.view.ndim = ndim
+ *     (<__pyx_buffer *> &result.view).obj = Py_None
+ *     Py_INCREF(Py_None)             # <<<<<<<<<<<<<<
+ * 
+ *     if (<memoryview>memviewslice.memview).flags & PyBUF_WRITABLE:
+ */
+  Py_INCREF(Py_None);
+
+  /* "View.MemoryView":1023
+ *     Py_INCREF(Py_None)
+ * 
+ *     if (<memoryview>memviewslice.memview).flags & PyBUF_WRITABLE:             # <<<<<<<<<<<<<<
+ *         result.flags = PyBUF_RECORDS
+ *     else:
+ */
+  __pyx_t_1 = ((((struct __pyx_memoryview_obj *)__pyx_v_memviewslice.memview)->flags & PyBUF_WRITABLE) != 0);
+  if (__pyx_t_1) {
+
+    /* "View.MemoryView":1024
+ * 
+ *     if (<memoryview>memviewslice.memview).flags & PyBUF_WRITABLE:
+ *         result.flags = PyBUF_RECORDS             # <<<<<<<<<<<<<<
+ *     else:
+ *         result.flags = PyBUF_RECORDS_RO
+ */
+    __pyx_v_result->__pyx_base.flags = PyBUF_RECORDS;
+
+    /* "View.MemoryView":1023
+ *     Py_INCREF(Py_None)
+ * 
+ *     if (<memoryview>memviewslice.memview).flags & PyBUF_WRITABLE:             # <<<<<<<<<<<<<<
+ *         result.flags = PyBUF_RECORDS
+ *     else:
+ */
+    goto __pyx_L4;
+  }
+
+  /* "View.MemoryView":1026
+ *         result.flags = PyBUF_RECORDS
+ *     else:
+ *         result.flags = PyBUF_RECORDS_RO             # <<<<<<<<<<<<<<
+ * 
+ *     result.view.shape = <Py_ssize_t *> result.from_slice.shape
+ */
+  /*else*/ {
+    __pyx_v_result->__pyx_base.flags = PyBUF_RECORDS_RO;
+  }
+  __pyx_L4:;
+
+  /* "View.MemoryView":1028
+ *         result.flags = PyBUF_RECORDS_RO
+ * 
+ *     result.view.shape = <Py_ssize_t *> result.from_slice.shape             # <<<<<<<<<<<<<<
+ *     result.view.strides = <Py_ssize_t *> result.from_slice.strides
+ * 
+ */
+  __pyx_v_result->__pyx_base.view.shape = ((Py_ssize_t *)__pyx_v_result->from_slice.shape);
+
+  /* "View.MemoryView":1029
+ * 
+ *     result.view.shape = <Py_ssize_t *> result.from_slice.shape
+ *     result.view.strides = <Py_ssize_t *> result.from_slice.strides             # <<<<<<<<<<<<<<
+ * 
+ * 
+ */
+  __pyx_v_result->__pyx_base.view.strides = ((Py_ssize_t *)__pyx_v_result->from_slice.strides);
+
+  /* "View.MemoryView":1032
+ * 
+ * 
+ *     result.view.suboffsets = NULL             # <<<<<<<<<<<<<<
+ *     for suboffset in result.from_slice.suboffsets[:ndim]:
+ *         if suboffset >= 0:
+ */
+  __pyx_v_result->__pyx_base.view.suboffsets = NULL;
+
+  /* "View.MemoryView":1033
+ * 
+ *     result.view.suboffsets = NULL
+ *     for suboffset in result.from_slice.suboffsets[:ndim]:             # <<<<<<<<<<<<<<
+ *         if suboffset >= 0:
+ *             result.view.suboffsets = <Py_ssize_t *> result.from_slice.suboffsets
+ */
+  __pyx_t_7 = (__pyx_v_result->from_slice.suboffsets + __pyx_v_ndim);
+  for (__pyx_t_8 = __pyx_v_result->from_slice.suboffsets; __pyx_t_8 < __pyx_t_7; __pyx_t_8++) {
+    __pyx_t_6 = __pyx_t_8;
+    __pyx_v_suboffset = (__pyx_t_6[0]);
+
+    /* "View.MemoryView":1034
+ *     result.view.suboffsets = NULL
+ *     for suboffset in result.from_slice.suboffsets[:ndim]:
+ *         if suboffset >= 0:             # <<<<<<<<<<<<<<
+ *             result.view.suboffsets = <Py_ssize_t *> result.from_slice.suboffsets
+ *             break
+ */
+    __pyx_t_1 = ((__pyx_v_suboffset >= 0) != 0);
+    if (__pyx_t_1) {
+
+      /* "View.MemoryView":1035
+ *     for suboffset in result.from_slice.suboffsets[:ndim]:
+ *         if suboffset >= 0:
+ *             result.view.suboffsets = <Py_ssize_t *> result.from_slice.suboffsets             # <<<<<<<<<<<<<<
+ *             break
+ * 
+ */
+      __pyx_v_result->__pyx_base.view.suboffsets = ((Py_ssize_t *)__pyx_v_result->from_slice.suboffsets);
+
+      /* "View.MemoryView":1036
+ *         if suboffset >= 0:
+ *             result.view.suboffsets = <Py_ssize_t *> result.from_slice.suboffsets
+ *             break             # <<<<<<<<<<<<<<
+ * 
+ *     result.view.len = result.view.itemsize
+ */
+      goto __pyx_L6_break;
+
+      /* "View.MemoryView":1034
+ *     result.view.suboffsets = NULL
+ *     for suboffset in result.from_slice.suboffsets[:ndim]:
+ *         if suboffset >= 0:             # <<<<<<<<<<<<<<
+ *             result.view.suboffsets = <Py_ssize_t *> result.from_slice.suboffsets
+ *             break
+ */
+    }
+  }
+  __pyx_L6_break:;
+
+  /* "View.MemoryView":1038
+ *             break
+ * 
+ *     result.view.len = result.view.itemsize             # <<<<<<<<<<<<<<
+ *     for length in result.view.shape[:ndim]:
+ *         result.view.len *= length
+ */
+  __pyx_t_9 = __pyx_v_result->__pyx_base.view.itemsize;
+  __pyx_v_result->__pyx_base.view.len = __pyx_t_9;
+
+  /* "View.MemoryView":1039
+ * 
+ *     result.view.len = result.view.itemsize
+ *     for length in result.view.shape[:ndim]:             # <<<<<<<<<<<<<<
+ *         result.view.len *= length
+ * 
+ */
+  __pyx_t_7 = (__pyx_v_result->__pyx_base.view.shape + __pyx_v_ndim);
+  for (__pyx_t_8 = __pyx_v_result->__pyx_base.view.shape; __pyx_t_8 < __pyx_t_7; __pyx_t_8++) {
+    __pyx_t_6 = __pyx_t_8;
+    __pyx_t_2 = PyInt_FromSsize_t((__pyx_t_6[0])); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1039, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_2);
+    __Pyx_XDECREF_SET(__pyx_v_length, __pyx_t_2);
+    __pyx_t_2 = 0;
+
+    /* "View.MemoryView":1040
+ *     result.view.len = result.view.itemsize
+ *     for length in result.view.shape[:ndim]:
+ *         result.view.len *= length             # <<<<<<<<<<<<<<
+ * 
+ *     result.to_object_func = to_object_func
+ */
+    __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_result->__pyx_base.view.len); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1040, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_2);
+    __pyx_t_3 = PyNumber_InPlaceMultiply(__pyx_t_2, __pyx_v_length); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1040, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+    __pyx_t_9 = __Pyx_PyIndex_AsSsize_t(__pyx_t_3); if (unlikely((__pyx_t_9 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 1040, __pyx_L1_error)
+    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+    __pyx_v_result->__pyx_base.view.len = __pyx_t_9;
+  }
+
+  /* "View.MemoryView":1042
+ *         result.view.len *= length
+ * 
+ *     result.to_object_func = to_object_func             # <<<<<<<<<<<<<<
+ *     result.to_dtype_func = to_dtype_func
+ * 
+ */
+  __pyx_v_result->to_object_func = __pyx_v_to_object_func;
+
+  /* "View.MemoryView":1043
+ * 
+ *     result.to_object_func = to_object_func
+ *     result.to_dtype_func = to_dtype_func             # <<<<<<<<<<<<<<
+ * 
+ *     return result
+ */
+  __pyx_v_result->to_dtype_func = __pyx_v_to_dtype_func;
+
+  /* "View.MemoryView":1045
+ *     result.to_dtype_func = to_dtype_func
+ * 
+ *     return result             # <<<<<<<<<<<<<<
+ * 
+ * @cname('__pyx_memoryview_get_slice_from_memoryview')
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(((PyObject *)__pyx_v_result));
+  __pyx_r = ((PyObject *)__pyx_v_result);
+  goto __pyx_L0;
+
+  /* "View.MemoryView":995
+ * 
+ * @cname('__pyx_memoryview_fromslice')
+ * cdef memoryview_fromslice(__Pyx_memviewslice memviewslice,             # <<<<<<<<<<<<<<
+ *                           int ndim,
+ *                           object (*to_object_func)(char *),
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_AddTraceback("View.MemoryView.memoryview_fromslice", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = 0;
+  __pyx_L0:;
+  __Pyx_XDECREF((PyObject *)__pyx_v_result);
+  __Pyx_XDECREF(__pyx_v_length);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "View.MemoryView":1048
+ * 
+ * @cname('__pyx_memoryview_get_slice_from_memoryview')
+ * cdef __Pyx_memviewslice *get_slice_from_memview(memoryview memview,             # <<<<<<<<<<<<<<
+ *                                                    __Pyx_memviewslice *mslice):
+ *     cdef _memoryviewslice obj
+ */
+
+static __Pyx_memviewslice *__pyx_memoryview_get_slice_from_memoryview(struct __pyx_memoryview_obj *__pyx_v_memview, __Pyx_memviewslice *__pyx_v_mslice) {
+  struct __pyx_memoryviewslice_obj *__pyx_v_obj = 0;
+  __Pyx_memviewslice *__pyx_r;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  int __pyx_t_2;
+  PyObject *__pyx_t_3 = NULL;
+  __Pyx_RefNannySetupContext("get_slice_from_memview", 0);
+
+  /* "View.MemoryView":1051
+ *                                                    __Pyx_memviewslice *mslice):
+ *     cdef _memoryviewslice obj
+ *     if isinstance(memview, _memoryviewslice):             # <<<<<<<<<<<<<<
+ *         obj = memview
+ *         return &obj.from_slice
+ */
+  __pyx_t_1 = __Pyx_TypeCheck(((PyObject *)__pyx_v_memview), __pyx_memoryviewslice_type); 
+  __pyx_t_2 = (__pyx_t_1 != 0);
+  if (__pyx_t_2) {
+
+    /* "View.MemoryView":1052
+ *     cdef _memoryviewslice obj
+ *     if isinstance(memview, _memoryviewslice):
+ *         obj = memview             # <<<<<<<<<<<<<<
+ *         return &obj.from_slice
+ *     else:
+ */
+    if (!(likely(((((PyObject *)__pyx_v_memview)) == Py_None) || likely(__Pyx_TypeTest(((PyObject *)__pyx_v_memview), __pyx_memoryviewslice_type))))) __PYX_ERR(1, 1052, __pyx_L1_error)
+    __pyx_t_3 = ((PyObject *)__pyx_v_memview);
+    __Pyx_INCREF(__pyx_t_3);
+    __pyx_v_obj = ((struct __pyx_memoryviewslice_obj *)__pyx_t_3);
+    __pyx_t_3 = 0;
+
+    /* "View.MemoryView":1053
+ *     if isinstance(memview, _memoryviewslice):
+ *         obj = memview
+ *         return &obj.from_slice             # <<<<<<<<<<<<<<
+ *     else:
+ *         slice_copy(memview, mslice)
+ */
+    __pyx_r = (&__pyx_v_obj->from_slice);
+    goto __pyx_L0;
+
+    /* "View.MemoryView":1051
+ *                                                    __Pyx_memviewslice *mslice):
+ *     cdef _memoryviewslice obj
+ *     if isinstance(memview, _memoryviewslice):             # <<<<<<<<<<<<<<
+ *         obj = memview
+ *         return &obj.from_slice
+ */
+  }
+
+  /* "View.MemoryView":1055
+ *         return &obj.from_slice
+ *     else:
+ *         slice_copy(memview, mslice)             # <<<<<<<<<<<<<<
+ *         return mslice
+ * 
+ */
+  /*else*/ {
+    __pyx_memoryview_slice_copy(__pyx_v_memview, __pyx_v_mslice);
+
+    /* "View.MemoryView":1056
+ *     else:
+ *         slice_copy(memview, mslice)
+ *         return mslice             # <<<<<<<<<<<<<<
+ * 
+ * @cname('__pyx_memoryview_slice_copy')
+ */
+    __pyx_r = __pyx_v_mslice;
+    goto __pyx_L0;
+  }
+
+  /* "View.MemoryView":1048
+ * 
+ * @cname('__pyx_memoryview_get_slice_from_memoryview')
+ * cdef __Pyx_memviewslice *get_slice_from_memview(memoryview memview,             # <<<<<<<<<<<<<<
+ *                                                    __Pyx_memviewslice *mslice):
+ *     cdef _memoryviewslice obj
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_WriteUnraisable("View.MemoryView.get_slice_from_memview", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
+  __pyx_r = 0;
+  __pyx_L0:;
+  __Pyx_XDECREF((PyObject *)__pyx_v_obj);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "View.MemoryView":1059
+ * 
+ * @cname('__pyx_memoryview_slice_copy')
+ * cdef void slice_copy(memoryview memview, __Pyx_memviewslice *dst):             # <<<<<<<<<<<<<<
+ *     cdef int dim
+ *     cdef (Py_ssize_t*) shape, strides, suboffsets
+ */
+
+static void __pyx_memoryview_slice_copy(struct __pyx_memoryview_obj *__pyx_v_memview, __Pyx_memviewslice *__pyx_v_dst) {
+  int __pyx_v_dim;
+  Py_ssize_t *__pyx_v_shape;
+  Py_ssize_t *__pyx_v_strides;
+  Py_ssize_t *__pyx_v_suboffsets;
+  __Pyx_RefNannyDeclarations
+  Py_ssize_t *__pyx_t_1;
+  int __pyx_t_2;
+  int __pyx_t_3;
+  int __pyx_t_4;
+  Py_ssize_t __pyx_t_5;
+  __Pyx_RefNannySetupContext("slice_copy", 0);
+
+  /* "View.MemoryView":1063
+ *     cdef (Py_ssize_t*) shape, strides, suboffsets
+ * 
+ *     shape = memview.view.shape             # <<<<<<<<<<<<<<
+ *     strides = memview.view.strides
+ *     suboffsets = memview.view.suboffsets
+ */
+  __pyx_t_1 = __pyx_v_memview->view.shape;
+  __pyx_v_shape = __pyx_t_1;
+
+  /* "View.MemoryView":1064
+ * 
+ *     shape = memview.view.shape
+ *     strides = memview.view.strides             # <<<<<<<<<<<<<<
+ *     suboffsets = memview.view.suboffsets
+ * 
+ */
+  __pyx_t_1 = __pyx_v_memview->view.strides;
+  __pyx_v_strides = __pyx_t_1;
+
+  /* "View.MemoryView":1065
+ *     shape = memview.view.shape
+ *     strides = memview.view.strides
+ *     suboffsets = memview.view.suboffsets             # <<<<<<<<<<<<<<
+ * 
+ *     dst.memview = <__pyx_memoryview *> memview
+ */
+  __pyx_t_1 = __pyx_v_memview->view.suboffsets;
+  __pyx_v_suboffsets = __pyx_t_1;
+
+  /* "View.MemoryView":1067
+ *     suboffsets = memview.view.suboffsets
+ * 
+ *     dst.memview = <__pyx_memoryview *> memview             # <<<<<<<<<<<<<<
+ *     dst.data = <char *> memview.view.buf
+ * 
+ */
+  __pyx_v_dst->memview = ((struct __pyx_memoryview_obj *)__pyx_v_memview);
+
+  /* "View.MemoryView":1068
+ * 
+ *     dst.memview = <__pyx_memoryview *> memview
+ *     dst.data = <char *> memview.view.buf             # <<<<<<<<<<<<<<
+ * 
+ *     for dim in range(memview.view.ndim):
+ */
+  __pyx_v_dst->data = ((char *)__pyx_v_memview->view.buf);
+
+  /* "View.MemoryView":1070
+ *     dst.data = <char *> memview.view.buf
+ * 
+ *     for dim in range(memview.view.ndim):             # <<<<<<<<<<<<<<
+ *         dst.shape[dim] = shape[dim]
+ *         dst.strides[dim] = strides[dim]
+ */
+  __pyx_t_2 = __pyx_v_memview->view.ndim;
+  __pyx_t_3 = __pyx_t_2;
+  for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
+    __pyx_v_dim = __pyx_t_4;
+
+    /* "View.MemoryView":1071
+ * 
+ *     for dim in range(memview.view.ndim):
+ *         dst.shape[dim] = shape[dim]             # <<<<<<<<<<<<<<
+ *         dst.strides[dim] = strides[dim]
+ *         dst.suboffsets[dim] = suboffsets[dim] if suboffsets else -1
+ */
+    (__pyx_v_dst->shape[__pyx_v_dim]) = (__pyx_v_shape[__pyx_v_dim]);
+
+    /* "View.MemoryView":1072
+ *     for dim in range(memview.view.ndim):
+ *         dst.shape[dim] = shape[dim]
+ *         dst.strides[dim] = strides[dim]             # <<<<<<<<<<<<<<
+ *         dst.suboffsets[dim] = suboffsets[dim] if suboffsets else -1
+ * 
+ */
+    (__pyx_v_dst->strides[__pyx_v_dim]) = (__pyx_v_strides[__pyx_v_dim]);
+
+    /* "View.MemoryView":1073
+ *         dst.shape[dim] = shape[dim]
+ *         dst.strides[dim] = strides[dim]
+ *         dst.suboffsets[dim] = suboffsets[dim] if suboffsets else -1             # <<<<<<<<<<<<<<
+ * 
+ * @cname('__pyx_memoryview_copy_object')
+ */
+    if ((__pyx_v_suboffsets != 0)) {
+      __pyx_t_5 = (__pyx_v_suboffsets[__pyx_v_dim]);
+    } else {
+      __pyx_t_5 = -1L;
+    }
+    (__pyx_v_dst->suboffsets[__pyx_v_dim]) = __pyx_t_5;
+  }
+
+  /* "View.MemoryView":1059
+ * 
+ * @cname('__pyx_memoryview_slice_copy')
+ * cdef void slice_copy(memoryview memview, __Pyx_memviewslice *dst):             # <<<<<<<<<<<<<<
+ *     cdef int dim
+ *     cdef (Py_ssize_t*) shape, strides, suboffsets
+ */
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+}
+
+/* "View.MemoryView":1076
+ * 
+ * @cname('__pyx_memoryview_copy_object')
+ * cdef memoryview_copy(memoryview memview):             # <<<<<<<<<<<<<<
+ *     "Create a new memoryview object"
+ *     cdef __Pyx_memviewslice memviewslice
+ */
+
+static PyObject *__pyx_memoryview_copy_object(struct __pyx_memoryview_obj *__pyx_v_memview) {
+  __Pyx_memviewslice __pyx_v_memviewslice;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  __Pyx_RefNannySetupContext("memoryview_copy", 0);
+
+  /* "View.MemoryView":1079
+ *     "Create a new memoryview object"
+ *     cdef __Pyx_memviewslice memviewslice
+ *     slice_copy(memview, &memviewslice)             # <<<<<<<<<<<<<<
+ *     return memoryview_copy_from_slice(memview, &memviewslice)
+ * 
+ */
+  __pyx_memoryview_slice_copy(__pyx_v_memview, (&__pyx_v_memviewslice));
+
+  /* "View.MemoryView":1080
+ *     cdef __Pyx_memviewslice memviewslice
+ *     slice_copy(memview, &memviewslice)
+ *     return memoryview_copy_from_slice(memview, &memviewslice)             # <<<<<<<<<<<<<<
+ * 
+ * @cname('__pyx_memoryview_copy_object_from_slice')
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = __pyx_memoryview_copy_object_from_slice(__pyx_v_memview, (&__pyx_v_memviewslice)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1080, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
+  goto __pyx_L0;
+
+  /* "View.MemoryView":1076
+ * 
+ * @cname('__pyx_memoryview_copy_object')
+ * cdef memoryview_copy(memoryview memview):             # <<<<<<<<<<<<<<
+ *     "Create a new memoryview object"
+ *     cdef __Pyx_memviewslice memviewslice
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("View.MemoryView.memoryview_copy", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = 0;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "View.MemoryView":1083
+ * 
+ * @cname('__pyx_memoryview_copy_object_from_slice')
+ * cdef memoryview_copy_from_slice(memoryview memview, __Pyx_memviewslice *memviewslice):             # <<<<<<<<<<<<<<
+ *     """
+ *     Create a new memoryview object from a given memoryview object and slice.
+ */
+
+static PyObject *__pyx_memoryview_copy_object_from_slice(struct __pyx_memoryview_obj *__pyx_v_memview, __Pyx_memviewslice *__pyx_v_memviewslice) {
+  PyObject *(*__pyx_v_to_object_func)(char *);
+  int (*__pyx_v_to_dtype_func)(char *, PyObject *);
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  int __pyx_t_2;
+  PyObject *(*__pyx_t_3)(char *);
+  int (*__pyx_t_4)(char *, PyObject *);
+  PyObject *__pyx_t_5 = NULL;
+  __Pyx_RefNannySetupContext("memoryview_copy_from_slice", 0);
+
+  /* "View.MemoryView":1090
+ *     cdef int (*to_dtype_func)(char *, object) except 0
+ * 
+ *     if isinstance(memview, _memoryviewslice):             # <<<<<<<<<<<<<<
+ *         to_object_func = (<_memoryviewslice> memview).to_object_func
+ *         to_dtype_func = (<_memoryviewslice> memview).to_dtype_func
+ */
+  __pyx_t_1 = __Pyx_TypeCheck(((PyObject *)__pyx_v_memview), __pyx_memoryviewslice_type); 
+  __pyx_t_2 = (__pyx_t_1 != 0);
+  if (__pyx_t_2) {
+
+    /* "View.MemoryView":1091
+ * 
+ *     if isinstance(memview, _memoryviewslice):
+ *         to_object_func = (<_memoryviewslice> memview).to_object_func             # <<<<<<<<<<<<<<
+ *         to_dtype_func = (<_memoryviewslice> memview).to_dtype_func
+ *     else:
+ */
+    __pyx_t_3 = ((struct __pyx_memoryviewslice_obj *)__pyx_v_memview)->to_object_func;
+    __pyx_v_to_object_func = __pyx_t_3;
+
+    /* "View.MemoryView":1092
+ *     if isinstance(memview, _memoryviewslice):
+ *         to_object_func = (<_memoryviewslice> memview).to_object_func
+ *         to_dtype_func = (<_memoryviewslice> memview).to_dtype_func             # <<<<<<<<<<<<<<
+ *     else:
+ *         to_object_func = NULL
+ */
+    __pyx_t_4 = ((struct __pyx_memoryviewslice_obj *)__pyx_v_memview)->to_dtype_func;
+    __pyx_v_to_dtype_func = __pyx_t_4;
+
+    /* "View.MemoryView":1090
+ *     cdef int (*to_dtype_func)(char *, object) except 0
+ * 
+ *     if isinstance(memview, _memoryviewslice):             # <<<<<<<<<<<<<<
+ *         to_object_func = (<_memoryviewslice> memview).to_object_func
+ *         to_dtype_func = (<_memoryviewslice> memview).to_dtype_func
+ */
+    goto __pyx_L3;
+  }
+
+  /* "View.MemoryView":1094
+ *         to_dtype_func = (<_memoryviewslice> memview).to_dtype_func
+ *     else:
+ *         to_object_func = NULL             # <<<<<<<<<<<<<<
+ *         to_dtype_func = NULL
+ * 
+ */
+  /*else*/ {
+    __pyx_v_to_object_func = NULL;
+
+    /* "View.MemoryView":1095
+ *     else:
+ *         to_object_func = NULL
+ *         to_dtype_func = NULL             # <<<<<<<<<<<<<<
+ * 
+ *     return memoryview_fromslice(memviewslice[0], memview.view.ndim,
+ */
+    __pyx_v_to_dtype_func = NULL;
+  }
+  __pyx_L3:;
+
+  /* "View.MemoryView":1097
+ *         to_dtype_func = NULL
+ * 
+ *     return memoryview_fromslice(memviewslice[0], memview.view.ndim,             # <<<<<<<<<<<<<<
+ *                                 to_object_func, to_dtype_func,
+ *                                 memview.dtype_is_object)
+ */
+  __Pyx_XDECREF(__pyx_r);
+
+  /* "View.MemoryView":1099
+ *     return memoryview_fromslice(memviewslice[0], memview.view.ndim,
+ *                                 to_object_func, to_dtype_func,
+ *                                 memview.dtype_is_object)             # <<<<<<<<<<<<<<
+ * 
+ * 
+ */
+  __pyx_t_5 = __pyx_memoryview_fromslice((__pyx_v_memviewslice[0]), __pyx_v_memview->view.ndim, __pyx_v_to_object_func, __pyx_v_to_dtype_func, __pyx_v_memview->dtype_is_object); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 1097, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  __pyx_r = __pyx_t_5;
+  __pyx_t_5 = 0;
+  goto __pyx_L0;
+
+  /* "View.MemoryView":1083
+ * 
+ * @cname('__pyx_memoryview_copy_object_from_slice')
+ * cdef memoryview_copy_from_slice(memoryview memview, __Pyx_memviewslice *memviewslice):             # <<<<<<<<<<<<<<
+ *     """
+ *     Create a new memoryview object from a given memoryview object and slice.
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_5);
+  __Pyx_AddTraceback("View.MemoryView.memoryview_copy_from_slice", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = 0;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "View.MemoryView":1105
+ * 
+ * 
+ * cdef Py_ssize_t abs_py_ssize_t(Py_ssize_t arg) nogil:             # <<<<<<<<<<<<<<
+ *     if arg < 0:
+ *         return -arg
+ */
+
+static Py_ssize_t abs_py_ssize_t(Py_ssize_t __pyx_v_arg) {
+  Py_ssize_t __pyx_r;
+  int __pyx_t_1;
+
+  /* "View.MemoryView":1106
+ * 
+ * cdef Py_ssize_t abs_py_ssize_t(Py_ssize_t arg) nogil:
+ *     if arg < 0:             # <<<<<<<<<<<<<<
+ *         return -arg
+ *     else:
+ */
+  __pyx_t_1 = ((__pyx_v_arg < 0) != 0);
+  if (__pyx_t_1) {
+
+    /* "View.MemoryView":1107
+ * cdef Py_ssize_t abs_py_ssize_t(Py_ssize_t arg) nogil:
+ *     if arg < 0:
+ *         return -arg             # <<<<<<<<<<<<<<
+ *     else:
+ *         return arg
+ */
+    __pyx_r = (-__pyx_v_arg);
+    goto __pyx_L0;
+
+    /* "View.MemoryView":1106
+ * 
+ * cdef Py_ssize_t abs_py_ssize_t(Py_ssize_t arg) nogil:
+ *     if arg < 0:             # <<<<<<<<<<<<<<
+ *         return -arg
+ *     else:
+ */
+  }
+
+  /* "View.MemoryView":1109
+ *         return -arg
+ *     else:
+ *         return arg             # <<<<<<<<<<<<<<
+ * 
+ * @cname('__pyx_get_best_slice_order')
+ */
+  /*else*/ {
+    __pyx_r = __pyx_v_arg;
+    goto __pyx_L0;
+  }
+
+  /* "View.MemoryView":1105
+ * 
+ * 
+ * cdef Py_ssize_t abs_py_ssize_t(Py_ssize_t arg) nogil:             # <<<<<<<<<<<<<<
+ *     if arg < 0:
+ *         return -arg
+ */
+
+  /* function exit code */
+  __pyx_L0:;
+  return __pyx_r;
+}
+
+/* "View.MemoryView":1112
+ * 
+ * @cname('__pyx_get_best_slice_order')
+ * cdef char get_best_order(__Pyx_memviewslice *mslice, int ndim) nogil:             # <<<<<<<<<<<<<<
+ *     """
+ *     Figure out the best memory access order for a given slice.
+ */
+
+static char __pyx_get_best_slice_order(__Pyx_memviewslice *__pyx_v_mslice, int __pyx_v_ndim) {
+  int __pyx_v_i;
+  Py_ssize_t __pyx_v_c_stride;
+  Py_ssize_t __pyx_v_f_stride;
+  char __pyx_r;
+  int __pyx_t_1;
+  int __pyx_t_2;
+  int __pyx_t_3;
+  int __pyx_t_4;
+
+  /* "View.MemoryView":1117
+ *     """
+ *     cdef int i
+ *     cdef Py_ssize_t c_stride = 0             # <<<<<<<<<<<<<<
+ *     cdef Py_ssize_t f_stride = 0
+ * 
+ */
+  __pyx_v_c_stride = 0;
+
+  /* "View.MemoryView":1118
+ *     cdef int i
+ *     cdef Py_ssize_t c_stride = 0
+ *     cdef Py_ssize_t f_stride = 0             # <<<<<<<<<<<<<<
+ * 
+ *     for i in range(ndim - 1, -1, -1):
+ */
+  __pyx_v_f_stride = 0;
+
+  /* "View.MemoryView":1120
+ *     cdef Py_ssize_t f_stride = 0
+ * 
+ *     for i in range(ndim - 1, -1, -1):             # <<<<<<<<<<<<<<
+ *         if mslice.shape[i] > 1:
+ *             c_stride = mslice.strides[i]
+ */
+  for (__pyx_t_1 = (__pyx_v_ndim - 1); __pyx_t_1 > -1; __pyx_t_1-=1) {
+    __pyx_v_i = __pyx_t_1;
+
+    /* "View.MemoryView":1121
+ * 
+ *     for i in range(ndim - 1, -1, -1):
+ *         if mslice.shape[i] > 1:             # <<<<<<<<<<<<<<
+ *             c_stride = mslice.strides[i]
+ *             break
+ */
+    __pyx_t_2 = (((__pyx_v_mslice->shape[__pyx_v_i]) > 1) != 0);
+    if (__pyx_t_2) {
+
+      /* "View.MemoryView":1122
+ *     for i in range(ndim - 1, -1, -1):
+ *         if mslice.shape[i] > 1:
+ *             c_stride = mslice.strides[i]             # <<<<<<<<<<<<<<
+ *             break
+ * 
+ */
+      __pyx_v_c_stride = (__pyx_v_mslice->strides[__pyx_v_i]);
+
+      /* "View.MemoryView":1123
+ *         if mslice.shape[i] > 1:
+ *             c_stride = mslice.strides[i]
+ *             break             # <<<<<<<<<<<<<<
+ * 
+ *     for i in range(ndim):
+ */
+      goto __pyx_L4_break;
+
+      /* "View.MemoryView":1121
+ * 
+ *     for i in range(ndim - 1, -1, -1):
+ *         if mslice.shape[i] > 1:             # <<<<<<<<<<<<<<
+ *             c_stride = mslice.strides[i]
+ *             break
+ */
+    }
+  }
+  __pyx_L4_break:;
+
+  /* "View.MemoryView":1125
+ *             break
+ * 
+ *     for i in range(ndim):             # <<<<<<<<<<<<<<
+ *         if mslice.shape[i] > 1:
+ *             f_stride = mslice.strides[i]
+ */
+  __pyx_t_1 = __pyx_v_ndim;
+  __pyx_t_3 = __pyx_t_1;
+  for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
+    __pyx_v_i = __pyx_t_4;
+
+    /* "View.MemoryView":1126
+ * 
+ *     for i in range(ndim):
+ *         if mslice.shape[i] > 1:             # <<<<<<<<<<<<<<
+ *             f_stride = mslice.strides[i]
+ *             break
+ */
+    __pyx_t_2 = (((__pyx_v_mslice->shape[__pyx_v_i]) > 1) != 0);
+    if (__pyx_t_2) {
+
+      /* "View.MemoryView":1127
+ *     for i in range(ndim):
+ *         if mslice.shape[i] > 1:
+ *             f_stride = mslice.strides[i]             # <<<<<<<<<<<<<<
+ *             break
+ * 
+ */
+      __pyx_v_f_stride = (__pyx_v_mslice->strides[__pyx_v_i]);
+
+      /* "View.MemoryView":1128
+ *         if mslice.shape[i] > 1:
+ *             f_stride = mslice.strides[i]
+ *             break             # <<<<<<<<<<<<<<
+ * 
+ *     if abs_py_ssize_t(c_stride) <= abs_py_ssize_t(f_stride):
+ */
+      goto __pyx_L7_break;
+
+      /* "View.MemoryView":1126
+ * 
+ *     for i in range(ndim):
+ *         if mslice.shape[i] > 1:             # <<<<<<<<<<<<<<
+ *             f_stride = mslice.strides[i]
+ *             break
+ */
+    }
+  }
+  __pyx_L7_break:;
+
+  /* "View.MemoryView":1130
+ *             break
+ * 
+ *     if abs_py_ssize_t(c_stride) <= abs_py_ssize_t(f_stride):             # <<<<<<<<<<<<<<
+ *         return 'C'
+ *     else:
+ */
+  __pyx_t_2 = ((abs_py_ssize_t(__pyx_v_c_stride) <= abs_py_ssize_t(__pyx_v_f_stride)) != 0);
+  if (__pyx_t_2) {
+
+    /* "View.MemoryView":1131
+ * 
+ *     if abs_py_ssize_t(c_stride) <= abs_py_ssize_t(f_stride):
+ *         return 'C'             # <<<<<<<<<<<<<<
+ *     else:
+ *         return 'F'
+ */
+    __pyx_r = 'C';
+    goto __pyx_L0;
+
+    /* "View.MemoryView":1130
+ *             break
+ * 
+ *     if abs_py_ssize_t(c_stride) <= abs_py_ssize_t(f_stride):             # <<<<<<<<<<<<<<
+ *         return 'C'
+ *     else:
+ */
+  }
+
+  /* "View.MemoryView":1133
+ *         return 'C'
+ *     else:
+ *         return 'F'             # <<<<<<<<<<<<<<
+ * 
+ * @cython.cdivision(True)
+ */
+  /*else*/ {
+    __pyx_r = 'F';
+    goto __pyx_L0;
+  }
+
+  /* "View.MemoryView":1112
+ * 
+ * @cname('__pyx_get_best_slice_order')
+ * cdef char get_best_order(__Pyx_memviewslice *mslice, int ndim) nogil:             # <<<<<<<<<<<<<<
+ *     """
+ *     Figure out the best memory access order for a given slice.
+ */
+
+  /* function exit code */
+  __pyx_L0:;
+  return __pyx_r;
+}
+
+/* "View.MemoryView":1136
+ * 
+ * @cython.cdivision(True)
+ * cdef void _copy_strided_to_strided(char *src_data, Py_ssize_t *src_strides,             # <<<<<<<<<<<<<<
+ *                                    char *dst_data, Py_ssize_t *dst_strides,
+ *                                    Py_ssize_t *src_shape, Py_ssize_t *dst_shape,
+ */
+
+static void _copy_strided_to_strided(char *__pyx_v_src_data, Py_ssize_t *__pyx_v_src_strides, char *__pyx_v_dst_data, Py_ssize_t *__pyx_v_dst_strides, Py_ssize_t *__pyx_v_src_shape, Py_ssize_t *__pyx_v_dst_shape, int __pyx_v_ndim, size_t __pyx_v_itemsize) {
+  CYTHON_UNUSED Py_ssize_t __pyx_v_i;
+  CYTHON_UNUSED Py_ssize_t __pyx_v_src_extent;
+  Py_ssize_t __pyx_v_dst_extent;
+  Py_ssize_t __pyx_v_src_stride;
+  Py_ssize_t __pyx_v_dst_stride;
+  int __pyx_t_1;
+  int __pyx_t_2;
+  int __pyx_t_3;
+  Py_ssize_t __pyx_t_4;
+  Py_ssize_t __pyx_t_5;
+  Py_ssize_t __pyx_t_6;
+
+  /* "View.MemoryView":1143
+ * 
+ *     cdef Py_ssize_t i
+ *     cdef Py_ssize_t src_extent = src_shape[0]             # <<<<<<<<<<<<<<
+ *     cdef Py_ssize_t dst_extent = dst_shape[0]
+ *     cdef Py_ssize_t src_stride = src_strides[0]
+ */
+  __pyx_v_src_extent = (__pyx_v_src_shape[0]);
+
+  /* "View.MemoryView":1144
+ *     cdef Py_ssize_t i
+ *     cdef Py_ssize_t src_extent = src_shape[0]
+ *     cdef Py_ssize_t dst_extent = dst_shape[0]             # <<<<<<<<<<<<<<
+ *     cdef Py_ssize_t src_stride = src_strides[0]
+ *     cdef Py_ssize_t dst_stride = dst_strides[0]
+ */
+  __pyx_v_dst_extent = (__pyx_v_dst_shape[0]);
+
+  /* "View.MemoryView":1145
+ *     cdef Py_ssize_t src_extent = src_shape[0]
+ *     cdef Py_ssize_t dst_extent = dst_shape[0]
+ *     cdef Py_ssize_t src_stride = src_strides[0]             # <<<<<<<<<<<<<<
+ *     cdef Py_ssize_t dst_stride = dst_strides[0]
+ * 
+ */
+  __pyx_v_src_stride = (__pyx_v_src_strides[0]);
+
+  /* "View.MemoryView":1146
+ *     cdef Py_ssize_t dst_extent = dst_shape[0]
+ *     cdef Py_ssize_t src_stride = src_strides[0]
+ *     cdef Py_ssize_t dst_stride = dst_strides[0]             # <<<<<<<<<<<<<<
+ * 
+ *     if ndim == 1:
+ */
+  __pyx_v_dst_stride = (__pyx_v_dst_strides[0]);
+
+  /* "View.MemoryView":1148
+ *     cdef Py_ssize_t dst_stride = dst_strides[0]
+ * 
+ *     if ndim == 1:             # <<<<<<<<<<<<<<
+ *        if (src_stride > 0 and dst_stride > 0 and
+ *            <size_t> src_stride == itemsize == <size_t> dst_stride):
+ */
+  __pyx_t_1 = ((__pyx_v_ndim == 1) != 0);
+  if (__pyx_t_1) {
+
+    /* "View.MemoryView":1149
+ * 
+ *     if ndim == 1:
+ *        if (src_stride > 0 and dst_stride > 0 and             # <<<<<<<<<<<<<<
+ *            <size_t> src_stride == itemsize == <size_t> dst_stride):
+ *            memcpy(dst_data, src_data, itemsize * dst_extent)
+ */
+    __pyx_t_2 = ((__pyx_v_src_stride > 0) != 0);
+    if (__pyx_t_2) {
+    } else {
+      __pyx_t_1 = __pyx_t_2;
+      goto __pyx_L5_bool_binop_done;
+    }
+    __pyx_t_2 = ((__pyx_v_dst_stride > 0) != 0);
+    if (__pyx_t_2) {
+    } else {
+      __pyx_t_1 = __pyx_t_2;
+      goto __pyx_L5_bool_binop_done;
+    }
+
+    /* "View.MemoryView":1150
+ *     if ndim == 1:
+ *        if (src_stride > 0 and dst_stride > 0 and
+ *            <size_t> src_stride == itemsize == <size_t> dst_stride):             # <<<<<<<<<<<<<<
+ *            memcpy(dst_data, src_data, itemsize * dst_extent)
+ *        else:
+ */
+    __pyx_t_2 = (((size_t)__pyx_v_src_stride) == __pyx_v_itemsize);
+    if (__pyx_t_2) {
+      __pyx_t_2 = (__pyx_v_itemsize == ((size_t)__pyx_v_dst_stride));
+    }
+    __pyx_t_3 = (__pyx_t_2 != 0);
+    __pyx_t_1 = __pyx_t_3;
+    __pyx_L5_bool_binop_done:;
+
+    /* "View.MemoryView":1149
+ * 
+ *     if ndim == 1:
+ *        if (src_stride > 0 and dst_stride > 0 and             # <<<<<<<<<<<<<<
+ *            <size_t> src_stride == itemsize == <size_t> dst_stride):
+ *            memcpy(dst_data, src_data, itemsize * dst_extent)
+ */
+    if (__pyx_t_1) {
+
+      /* "View.MemoryView":1151
+ *        if (src_stride > 0 and dst_stride > 0 and
+ *            <size_t> src_stride == itemsize == <size_t> dst_stride):
+ *            memcpy(dst_data, src_data, itemsize * dst_extent)             # <<<<<<<<<<<<<<
+ *        else:
+ *            for i in range(dst_extent):
+ */
+      (void)(memcpy(__pyx_v_dst_data, __pyx_v_src_data, (__pyx_v_itemsize * __pyx_v_dst_extent)));
+
+      /* "View.MemoryView":1149
+ * 
+ *     if ndim == 1:
+ *        if (src_stride > 0 and dst_stride > 0 and             # <<<<<<<<<<<<<<
+ *            <size_t> src_stride == itemsize == <size_t> dst_stride):
+ *            memcpy(dst_data, src_data, itemsize * dst_extent)
+ */
+      goto __pyx_L4;
+    }
+
+    /* "View.MemoryView":1153
+ *            memcpy(dst_data, src_data, itemsize * dst_extent)
+ *        else:
+ *            for i in range(dst_extent):             # <<<<<<<<<<<<<<
+ *                memcpy(dst_data, src_data, itemsize)
+ *                src_data += src_stride
+ */
+    /*else*/ {
+      __pyx_t_4 = __pyx_v_dst_extent;
+      __pyx_t_5 = __pyx_t_4;
+      for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) {
+        __pyx_v_i = __pyx_t_6;
+
+        /* "View.MemoryView":1154
+ *        else:
+ *            for i in range(dst_extent):
+ *                memcpy(dst_data, src_data, itemsize)             # <<<<<<<<<<<<<<
+ *                src_data += src_stride
+ *                dst_data += dst_stride
+ */
+        (void)(memcpy(__pyx_v_dst_data, __pyx_v_src_data, __pyx_v_itemsize));
+
+        /* "View.MemoryView":1155
+ *            for i in range(dst_extent):
+ *                memcpy(dst_data, src_data, itemsize)
+ *                src_data += src_stride             # <<<<<<<<<<<<<<
+ *                dst_data += dst_stride
+ *     else:
+ */
+        __pyx_v_src_data = (__pyx_v_src_data + __pyx_v_src_stride);
+
+        /* "View.MemoryView":1156
+ *                memcpy(dst_data, src_data, itemsize)
+ *                src_data += src_stride
+ *                dst_data += dst_stride             # <<<<<<<<<<<<<<
+ *     else:
+ *         for i in range(dst_extent):
+ */
+        __pyx_v_dst_data = (__pyx_v_dst_data + __pyx_v_dst_stride);
+      }
+    }
+    __pyx_L4:;
+
+    /* "View.MemoryView":1148
+ *     cdef Py_ssize_t dst_stride = dst_strides[0]
+ * 
+ *     if ndim == 1:             # <<<<<<<<<<<<<<
+ *        if (src_stride > 0 and dst_stride > 0 and
+ *            <size_t> src_stride == itemsize == <size_t> dst_stride):
+ */
+    goto __pyx_L3;
+  }
+
+  /* "View.MemoryView":1158
+ *                dst_data += dst_stride
+ *     else:
+ *         for i in range(dst_extent):             # <<<<<<<<<<<<<<
+ *             _copy_strided_to_strided(src_data, src_strides + 1,
+ *                                      dst_data, dst_strides + 1,
+ */
+  /*else*/ {
+    __pyx_t_4 = __pyx_v_dst_extent;
+    __pyx_t_5 = __pyx_t_4;
+    for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) {
+      __pyx_v_i = __pyx_t_6;
+
+      /* "View.MemoryView":1159
+ *     else:
+ *         for i in range(dst_extent):
+ *             _copy_strided_to_strided(src_data, src_strides + 1,             # <<<<<<<<<<<<<<
+ *                                      dst_data, dst_strides + 1,
+ *                                      src_shape + 1, dst_shape + 1,
+ */
+      _copy_strided_to_strided(__pyx_v_src_data, (__pyx_v_src_strides + 1), __pyx_v_dst_data, (__pyx_v_dst_strides + 1), (__pyx_v_src_shape + 1), (__pyx_v_dst_shape + 1), (__pyx_v_ndim - 1), __pyx_v_itemsize);
+
+      /* "View.MemoryView":1163
+ *                                      src_shape + 1, dst_shape + 1,
+ *                                      ndim - 1, itemsize)
+ *             src_data += src_stride             # <<<<<<<<<<<<<<
+ *             dst_data += dst_stride
+ * 
+ */
+      __pyx_v_src_data = (__pyx_v_src_data + __pyx_v_src_stride);
+
+      /* "View.MemoryView":1164
+ *                                      ndim - 1, itemsize)
+ *             src_data += src_stride
+ *             dst_data += dst_stride             # <<<<<<<<<<<<<<
+ * 
+ * cdef void copy_strided_to_strided(__Pyx_memviewslice *src,
+ */
+      __pyx_v_dst_data = (__pyx_v_dst_data + __pyx_v_dst_stride);
+    }
+  }
+  __pyx_L3:;
+
+  /* "View.MemoryView":1136
+ * 
+ * @cython.cdivision(True)
+ * cdef void _copy_strided_to_strided(char *src_data, Py_ssize_t *src_strides,             # <<<<<<<<<<<<<<
+ *                                    char *dst_data, Py_ssize_t *dst_strides,
+ *                                    Py_ssize_t *src_shape, Py_ssize_t *dst_shape,
+ */
+
+  /* function exit code */
+}
+
+/* "View.MemoryView":1166
+ *             dst_data += dst_stride
+ * 
+ * cdef void copy_strided_to_strided(__Pyx_memviewslice *src,             # <<<<<<<<<<<<<<
+ *                                   __Pyx_memviewslice *dst,
+ *                                   int ndim, size_t itemsize) nogil:
+ */
+
+static void copy_strided_to_strided(__Pyx_memviewslice *__pyx_v_src, __Pyx_memviewslice *__pyx_v_dst, int __pyx_v_ndim, size_t __pyx_v_itemsize) {
+
+  /* "View.MemoryView":1169
+ *                                   __Pyx_memviewslice *dst,
+ *                                   int ndim, size_t itemsize) nogil:
+ *     _copy_strided_to_strided(src.data, src.strides, dst.data, dst.strides,             # <<<<<<<<<<<<<<
+ *                              src.shape, dst.shape, ndim, itemsize)
+ * 
+ */
+  _copy_strided_to_strided(__pyx_v_src->data, __pyx_v_src->strides, __pyx_v_dst->data, __pyx_v_dst->strides, __pyx_v_src->shape, __pyx_v_dst->shape, __pyx_v_ndim, __pyx_v_itemsize);
+
+  /* "View.MemoryView":1166
+ *             dst_data += dst_stride
+ * 
+ * cdef void copy_strided_to_strided(__Pyx_memviewslice *src,             # <<<<<<<<<<<<<<
+ *                                   __Pyx_memviewslice *dst,
+ *                                   int ndim, size_t itemsize) nogil:
+ */
+
+  /* function exit code */
+}
+
+/* "View.MemoryView":1173
+ * 
+ * @cname('__pyx_memoryview_slice_get_size')
+ * cdef Py_ssize_t slice_get_size(__Pyx_memviewslice *src, int ndim) nogil:             # <<<<<<<<<<<<<<
+ *     "Return the size of the memory occupied by the slice in number of bytes"
+ *     cdef int i
+ */
+
+static Py_ssize_t __pyx_memoryview_slice_get_size(__Pyx_memviewslice *__pyx_v_src, int __pyx_v_ndim) {
+  int __pyx_v_i;
+  Py_ssize_t __pyx_v_size;
+  Py_ssize_t __pyx_r;
+  Py_ssize_t __pyx_t_1;
+  int __pyx_t_2;
+  int __pyx_t_3;
+  int __pyx_t_4;
+
+  /* "View.MemoryView":1176
+ *     "Return the size of the memory occupied by the slice in number of bytes"
+ *     cdef int i
+ *     cdef Py_ssize_t size = src.memview.view.itemsize             # <<<<<<<<<<<<<<
+ * 
+ *     for i in range(ndim):
+ */
+  __pyx_t_1 = __pyx_v_src->memview->view.itemsize;
+  __pyx_v_size = __pyx_t_1;
+
+  /* "View.MemoryView":1178
+ *     cdef Py_ssize_t size = src.memview.view.itemsize
+ * 
+ *     for i in range(ndim):             # <<<<<<<<<<<<<<
+ *         size *= src.shape[i]
+ * 
+ */
+  __pyx_t_2 = __pyx_v_ndim;
+  __pyx_t_3 = __pyx_t_2;
+  for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
+    __pyx_v_i = __pyx_t_4;
+
+    /* "View.MemoryView":1179
+ * 
+ *     for i in range(ndim):
+ *         size *= src.shape[i]             # <<<<<<<<<<<<<<
+ * 
+ *     return size
+ */
+    __pyx_v_size = (__pyx_v_size * (__pyx_v_src->shape[__pyx_v_i]));
+  }
+
+  /* "View.MemoryView":1181
+ *         size *= src.shape[i]
+ * 
+ *     return size             # <<<<<<<<<<<<<<
+ * 
+ * @cname('__pyx_fill_contig_strides_array')
+ */
+  __pyx_r = __pyx_v_size;
+  goto __pyx_L0;
+
+  /* "View.MemoryView":1173
+ * 
+ * @cname('__pyx_memoryview_slice_get_size')
+ * cdef Py_ssize_t slice_get_size(__Pyx_memviewslice *src, int ndim) nogil:             # <<<<<<<<<<<<<<
+ *     "Return the size of the memory occupied by the slice in number of bytes"
+ *     cdef int i
+ */
+
+  /* function exit code */
+  __pyx_L0:;
+  return __pyx_r;
+}
+
+/* "View.MemoryView":1184
+ * 
+ * @cname('__pyx_fill_contig_strides_array')
+ * cdef Py_ssize_t fill_contig_strides_array(             # <<<<<<<<<<<<<<
+ *                 Py_ssize_t *shape, Py_ssize_t *strides, Py_ssize_t stride,
+ *                 int ndim, char order) nogil:
+ */
+
+static Py_ssize_t __pyx_fill_contig_strides_array(Py_ssize_t *__pyx_v_shape, Py_ssize_t *__pyx_v_strides, Py_ssize_t __pyx_v_stride, int __pyx_v_ndim, char __pyx_v_order) {
+  int __pyx_v_idx;
+  Py_ssize_t __pyx_r;
+  int __pyx_t_1;
+  int __pyx_t_2;
+  int __pyx_t_3;
+  int __pyx_t_4;
+
+  /* "View.MemoryView":1193
+ *     cdef int idx
+ * 
+ *     if order == 'F':             # <<<<<<<<<<<<<<
+ *         for idx in range(ndim):
+ *             strides[idx] = stride
+ */
+  __pyx_t_1 = ((__pyx_v_order == 'F') != 0);
+  if (__pyx_t_1) {
+
+    /* "View.MemoryView":1194
+ * 
+ *     if order == 'F':
+ *         for idx in range(ndim):             # <<<<<<<<<<<<<<
+ *             strides[idx] = stride
+ *             stride = stride * shape[idx]
+ */
+    __pyx_t_2 = __pyx_v_ndim;
+    __pyx_t_3 = __pyx_t_2;
+    for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
+      __pyx_v_idx = __pyx_t_4;
+
+      /* "View.MemoryView":1195
+ *     if order == 'F':
+ *         for idx in range(ndim):
+ *             strides[idx] = stride             # <<<<<<<<<<<<<<
+ *             stride = stride * shape[idx]
+ *     else:
+ */
+      (__pyx_v_strides[__pyx_v_idx]) = __pyx_v_stride;
+
+      /* "View.MemoryView":1196
+ *         for idx in range(ndim):
+ *             strides[idx] = stride
+ *             stride = stride * shape[idx]             # <<<<<<<<<<<<<<
+ *     else:
+ *         for idx in range(ndim - 1, -1, -1):
+ */
+      __pyx_v_stride = (__pyx_v_stride * (__pyx_v_shape[__pyx_v_idx]));
+    }
+
+    /* "View.MemoryView":1193
+ *     cdef int idx
+ * 
+ *     if order == 'F':             # <<<<<<<<<<<<<<
+ *         for idx in range(ndim):
+ *             strides[idx] = stride
+ */
+    goto __pyx_L3;
+  }
+
+  /* "View.MemoryView":1198
+ *             stride = stride * shape[idx]
+ *     else:
+ *         for idx in range(ndim - 1, -1, -1):             # <<<<<<<<<<<<<<
+ *             strides[idx] = stride
+ *             stride = stride * shape[idx]
+ */
+  /*else*/ {
+    for (__pyx_t_2 = (__pyx_v_ndim - 1); __pyx_t_2 > -1; __pyx_t_2-=1) {
+      __pyx_v_idx = __pyx_t_2;
+
+      /* "View.MemoryView":1199
+ *     else:
+ *         for idx in range(ndim - 1, -1, -1):
+ *             strides[idx] = stride             # <<<<<<<<<<<<<<
+ *             stride = stride * shape[idx]
+ * 
+ */
+      (__pyx_v_strides[__pyx_v_idx]) = __pyx_v_stride;
+
+      /* "View.MemoryView":1200
+ *         for idx in range(ndim - 1, -1, -1):
+ *             strides[idx] = stride
+ *             stride = stride * shape[idx]             # <<<<<<<<<<<<<<
+ * 
+ *     return stride
+ */
+      __pyx_v_stride = (__pyx_v_stride * (__pyx_v_shape[__pyx_v_idx]));
+    }
+  }
+  __pyx_L3:;
+
+  /* "View.MemoryView":1202
+ *             stride = stride * shape[idx]
+ * 
+ *     return stride             # <<<<<<<<<<<<<<
+ * 
+ * @cname('__pyx_memoryview_copy_data_to_temp')
+ */
+  __pyx_r = __pyx_v_stride;
+  goto __pyx_L0;
+
+  /* "View.MemoryView":1184
+ * 
+ * @cname('__pyx_fill_contig_strides_array')
+ * cdef Py_ssize_t fill_contig_strides_array(             # <<<<<<<<<<<<<<
+ *                 Py_ssize_t *shape, Py_ssize_t *strides, Py_ssize_t stride,
+ *                 int ndim, char order) nogil:
+ */
+
+  /* function exit code */
+  __pyx_L0:;
+  return __pyx_r;
+}
+
+/* "View.MemoryView":1205
+ * 
+ * @cname('__pyx_memoryview_copy_data_to_temp')
+ * cdef void *copy_data_to_temp(__Pyx_memviewslice *src,             # <<<<<<<<<<<<<<
+ *                              __Pyx_memviewslice *tmpslice,
+ *                              char order,
+ */
+
+static void *__pyx_memoryview_copy_data_to_temp(__Pyx_memviewslice *__pyx_v_src, __Pyx_memviewslice *__pyx_v_tmpslice, char __pyx_v_order, int __pyx_v_ndim) {
+  int __pyx_v_i;
+  void *__pyx_v_result;
+  size_t __pyx_v_itemsize;
+  size_t __pyx_v_size;
+  void *__pyx_r;
+  Py_ssize_t __pyx_t_1;
+  int __pyx_t_2;
+  int __pyx_t_3;
+  struct __pyx_memoryview_obj *__pyx_t_4;
+  int __pyx_t_5;
+  int __pyx_t_6;
+
+  /* "View.MemoryView":1216
+ *     cdef void *result
+ * 
+ *     cdef size_t itemsize = src.memview.view.itemsize             # <<<<<<<<<<<<<<
+ *     cdef size_t size = slice_get_size(src, ndim)
+ * 
+ */
+  __pyx_t_1 = __pyx_v_src->memview->view.itemsize;
+  __pyx_v_itemsize = __pyx_t_1;
+
+  /* "View.MemoryView":1217
+ * 
+ *     cdef size_t itemsize = src.memview.view.itemsize
+ *     cdef size_t size = slice_get_size(src, ndim)             # <<<<<<<<<<<<<<
+ * 
+ *     result = malloc(size)
+ */
+  __pyx_v_size = __pyx_memoryview_slice_get_size(__pyx_v_src, __pyx_v_ndim);
+
+  /* "View.MemoryView":1219
+ *     cdef size_t size = slice_get_size(src, ndim)
+ * 
+ *     result = malloc(size)             # <<<<<<<<<<<<<<
+ *     if not result:
+ *         _err(MemoryError, NULL)
+ */
+  __pyx_v_result = malloc(__pyx_v_size);
+
+  /* "View.MemoryView":1220
+ * 
+ *     result = malloc(size)
+ *     if not result:             # <<<<<<<<<<<<<<
+ *         _err(MemoryError, NULL)
+ * 
+ */
+  __pyx_t_2 = ((!(__pyx_v_result != 0)) != 0);
+  if (__pyx_t_2) {
+
+    /* "View.MemoryView":1221
+ *     result = malloc(size)
+ *     if not result:
+ *         _err(MemoryError, NULL)             # <<<<<<<<<<<<<<
+ * 
+ * 
+ */
+    __pyx_t_3 = __pyx_memoryview_err(__pyx_builtin_MemoryError, NULL); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 1221, __pyx_L1_error)
+
+    /* "View.MemoryView":1220
+ * 
+ *     result = malloc(size)
+ *     if not result:             # <<<<<<<<<<<<<<
+ *         _err(MemoryError, NULL)
+ * 
+ */
+  }
+
+  /* "View.MemoryView":1224
+ * 
+ * 
+ *     tmpslice.data = <char *> result             # <<<<<<<<<<<<<<
+ *     tmpslice.memview = src.memview
+ *     for i in range(ndim):
+ */
+  __pyx_v_tmpslice->data = ((char *)__pyx_v_result);
+
+  /* "View.MemoryView":1225
+ * 
+ *     tmpslice.data = <char *> result
+ *     tmpslice.memview = src.memview             # <<<<<<<<<<<<<<
+ *     for i in range(ndim):
+ *         tmpslice.shape[i] = src.shape[i]
+ */
+  __pyx_t_4 = __pyx_v_src->memview;
+  __pyx_v_tmpslice->memview = __pyx_t_4;
+
+  /* "View.MemoryView":1226
+ *     tmpslice.data = <char *> result
+ *     tmpslice.memview = src.memview
+ *     for i in range(ndim):             # <<<<<<<<<<<<<<
+ *         tmpslice.shape[i] = src.shape[i]
+ *         tmpslice.suboffsets[i] = -1
+ */
+  __pyx_t_3 = __pyx_v_ndim;
+  __pyx_t_5 = __pyx_t_3;
+  for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) {
+    __pyx_v_i = __pyx_t_6;
+
+    /* "View.MemoryView":1227
+ *     tmpslice.memview = src.memview
+ *     for i in range(ndim):
+ *         tmpslice.shape[i] = src.shape[i]             # <<<<<<<<<<<<<<
+ *         tmpslice.suboffsets[i] = -1
+ * 
+ */
+    (__pyx_v_tmpslice->shape[__pyx_v_i]) = (__pyx_v_src->shape[__pyx_v_i]);
+
+    /* "View.MemoryView":1228
+ *     for i in range(ndim):
+ *         tmpslice.shape[i] = src.shape[i]
+ *         tmpslice.suboffsets[i] = -1             # <<<<<<<<<<<<<<
+ * 
+ *     fill_contig_strides_array(&tmpslice.shape[0], &tmpslice.strides[0], itemsize,
+ */
+    (__pyx_v_tmpslice->suboffsets[__pyx_v_i]) = -1L;
+  }
+
+  /* "View.MemoryView":1230
+ *         tmpslice.suboffsets[i] = -1
+ * 
+ *     fill_contig_strides_array(&tmpslice.shape[0], &tmpslice.strides[0], itemsize,             # <<<<<<<<<<<<<<
+ *                               ndim, order)
+ * 
+ */
+  (void)(__pyx_fill_contig_strides_array((&(__pyx_v_tmpslice->shape[0])), (&(__pyx_v_tmpslice->strides[0])), __pyx_v_itemsize, __pyx_v_ndim, __pyx_v_order));
+
+  /* "View.MemoryView":1234
+ * 
+ * 
+ *     for i in range(ndim):             # <<<<<<<<<<<<<<
+ *         if tmpslice.shape[i] == 1:
+ *             tmpslice.strides[i] = 0
+ */
+  __pyx_t_3 = __pyx_v_ndim;
+  __pyx_t_5 = __pyx_t_3;
+  for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) {
+    __pyx_v_i = __pyx_t_6;
+
+    /* "View.MemoryView":1235
+ * 
+ *     for i in range(ndim):
+ *         if tmpslice.shape[i] == 1:             # <<<<<<<<<<<<<<
+ *             tmpslice.strides[i] = 0
+ * 
+ */
+    __pyx_t_2 = (((__pyx_v_tmpslice->shape[__pyx_v_i]) == 1) != 0);
+    if (__pyx_t_2) {
+
+      /* "View.MemoryView":1236
+ *     for i in range(ndim):
+ *         if tmpslice.shape[i] == 1:
+ *             tmpslice.strides[i] = 0             # <<<<<<<<<<<<<<
+ * 
+ *     if slice_is_contig(src[0], order, ndim):
+ */
+      (__pyx_v_tmpslice->strides[__pyx_v_i]) = 0;
+
+      /* "View.MemoryView":1235
+ * 
+ *     for i in range(ndim):
+ *         if tmpslice.shape[i] == 1:             # <<<<<<<<<<<<<<
+ *             tmpslice.strides[i] = 0
+ * 
+ */
+    }
+  }
+
+  /* "View.MemoryView":1238
+ *             tmpslice.strides[i] = 0
+ * 
+ *     if slice_is_contig(src[0], order, ndim):             # <<<<<<<<<<<<<<
+ *         memcpy(result, src.data, size)
+ *     else:
+ */
+  __pyx_t_2 = (__pyx_memviewslice_is_contig((__pyx_v_src[0]), __pyx_v_order, __pyx_v_ndim) != 0);
+  if (__pyx_t_2) {
+
+    /* "View.MemoryView":1239
+ * 
+ *     if slice_is_contig(src[0], order, ndim):
+ *         memcpy(result, src.data, size)             # <<<<<<<<<<<<<<
+ *     else:
+ *         copy_strided_to_strided(src, tmpslice, ndim, itemsize)
+ */
+    (void)(memcpy(__pyx_v_result, __pyx_v_src->data, __pyx_v_size));
+
+    /* "View.MemoryView":1238
+ *             tmpslice.strides[i] = 0
+ * 
+ *     if slice_is_contig(src[0], order, ndim):             # <<<<<<<<<<<<<<
+ *         memcpy(result, src.data, size)
+ *     else:
+ */
+    goto __pyx_L9;
+  }
+
+  /* "View.MemoryView":1241
+ *         memcpy(result, src.data, size)
+ *     else:
+ *         copy_strided_to_strided(src, tmpslice, ndim, itemsize)             # <<<<<<<<<<<<<<
+ * 
+ *     return result
+ */
+  /*else*/ {
+    copy_strided_to_strided(__pyx_v_src, __pyx_v_tmpslice, __pyx_v_ndim, __pyx_v_itemsize);
+  }
+  __pyx_L9:;
+
+  /* "View.MemoryView":1243
+ *         copy_strided_to_strided(src, tmpslice, ndim, itemsize)
+ * 
+ *     return result             # <<<<<<<<<<<<<<
+ * 
+ * 
+ */
+  __pyx_r = __pyx_v_result;
+  goto __pyx_L0;
+
+  /* "View.MemoryView":1205
+ * 
+ * @cname('__pyx_memoryview_copy_data_to_temp')
+ * cdef void *copy_data_to_temp(__Pyx_memviewslice *src,             # <<<<<<<<<<<<<<
+ *                              __Pyx_memviewslice *tmpslice,
+ *                              char order,
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  {
+    #ifdef WITH_THREAD
+    PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
+    #endif
+    __Pyx_AddTraceback("View.MemoryView.copy_data_to_temp", __pyx_clineno, __pyx_lineno, __pyx_filename);
+    #ifdef WITH_THREAD
+    __Pyx_PyGILState_Release(__pyx_gilstate_save);
+    #endif
+  }
+  __pyx_r = NULL;
+  __pyx_L0:;
+  return __pyx_r;
+}
+
+/* "View.MemoryView":1248
+ * 
+ * @cname('__pyx_memoryview_err_extents')
+ * cdef int _err_extents(int i, Py_ssize_t extent1,             # <<<<<<<<<<<<<<
+ *                              Py_ssize_t extent2) except -1 with gil:
+ *     raise ValueError("got differing extents in dimension %d (got %d and %d)" %
+ */
+
+static int __pyx_memoryview_err_extents(int __pyx_v_i, Py_ssize_t __pyx_v_extent1, Py_ssize_t __pyx_v_extent2) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
+  #ifdef WITH_THREAD
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
+  #endif
+  __Pyx_RefNannySetupContext("_err_extents", 0);
+
+  /* "View.MemoryView":1251
+ *                              Py_ssize_t extent2) except -1 with gil:
+ *     raise ValueError("got differing extents in dimension %d (got %d and %d)" %
+ *                                                         (i, extent1, extent2))             # <<<<<<<<<<<<<<
+ * 
+ * @cname('__pyx_memoryview_err_dim')
+ */
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_i); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1251, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_extent1); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1251, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_3 = PyInt_FromSsize_t(__pyx_v_extent2); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1251, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 1251, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  __Pyx_GIVEREF(__pyx_t_1);
+  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1);
+  __Pyx_GIVEREF(__pyx_t_2);
+  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_2);
+  __Pyx_GIVEREF(__pyx_t_3);
+  PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_t_3);
+  __pyx_t_1 = 0;
+  __pyx_t_2 = 0;
+  __pyx_t_3 = 0;
+
+  /* "View.MemoryView":1250
+ * cdef int _err_extents(int i, Py_ssize_t extent1,
+ *                              Py_ssize_t extent2) except -1 with gil:
+ *     raise ValueError("got differing extents in dimension %d (got %d and %d)" %             # <<<<<<<<<<<<<<
+ *                                                         (i, extent1, extent2))
+ * 
+ */
+  __pyx_t_3 = __Pyx_PyString_Format(__pyx_kp_s_got_differing_extents_in_dimensi, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1250, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 1250, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __Pyx_Raise(__pyx_t_4, 0, 0, 0);
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __PYX_ERR(1, 1250, __pyx_L1_error)
+
+  /* "View.MemoryView":1248
+ * 
+ * @cname('__pyx_memoryview_err_extents')
+ * cdef int _err_extents(int i, Py_ssize_t extent1,             # <<<<<<<<<<<<<<
+ *                              Py_ssize_t extent2) except -1 with gil:
+ *     raise ValueError("got differing extents in dimension %d (got %d and %d)" %
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_AddTraceback("View.MemoryView._err_extents", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = -1;
+  __Pyx_RefNannyFinishContext();
+  #ifdef WITH_THREAD
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
+  #endif
+  return __pyx_r;
+}
+
+/* "View.MemoryView":1254
+ * 
+ * @cname('__pyx_memoryview_err_dim')
+ * cdef int _err_dim(object error, char *msg, int dim) except -1 with gil:             # <<<<<<<<<<<<<<
+ *     raise error(msg.decode('ascii') % dim)
+ * 
+ */
+
+static int __pyx_memoryview_err_dim(PyObject *__pyx_v_error, char *__pyx_v_msg, int __pyx_v_dim) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
+  #ifdef WITH_THREAD
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
+  #endif
+  __Pyx_RefNannySetupContext("_err_dim", 0);
+  __Pyx_INCREF(__pyx_v_error);
+
+  /* "View.MemoryView":1255
+ * @cname('__pyx_memoryview_err_dim')
+ * cdef int _err_dim(object error, char *msg, int dim) except -1 with gil:
+ *     raise error(msg.decode('ascii') % dim)             # <<<<<<<<<<<<<<
+ * 
+ * @cname('__pyx_memoryview_err')
+ */
+  __pyx_t_2 = __Pyx_decode_c_string(__pyx_v_msg, 0, strlen(__pyx_v_msg), NULL, NULL, PyUnicode_DecodeASCII); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1255, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_dim); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1255, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_4 = PyUnicode_Format(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 1255, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __Pyx_INCREF(__pyx_v_error);
+  __pyx_t_3 = __pyx_v_error; __pyx_t_2 = NULL;
+  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
+    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
+    if (likely(__pyx_t_2)) {
+      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
+      __Pyx_INCREF(__pyx_t_2);
+      __Pyx_INCREF(function);
+      __Pyx_DECREF_SET(__pyx_t_3, function);
+    }
+  }
+  __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_2, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4);
+  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1255, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __Pyx_Raise(__pyx_t_1, 0, 0, 0);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __PYX_ERR(1, 1255, __pyx_L1_error)
+
+  /* "View.MemoryView":1254
+ * 
+ * @cname('__pyx_memoryview_err_dim')
+ * cdef int _err_dim(object error, char *msg, int dim) except -1 with gil:             # <<<<<<<<<<<<<<
+ *     raise error(msg.decode('ascii') % dim)
+ * 
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_AddTraceback("View.MemoryView._err_dim", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = -1;
+  __Pyx_XDECREF(__pyx_v_error);
+  __Pyx_RefNannyFinishContext();
+  #ifdef WITH_THREAD
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
+  #endif
+  return __pyx_r;
+}
+
+/* "View.MemoryView":1258
+ * 
+ * @cname('__pyx_memoryview_err')
+ * cdef int _err(object error, char *msg) except -1 with gil:             # <<<<<<<<<<<<<<
+ *     if msg != NULL:
+ *         raise error(msg.decode('ascii'))
+ */
+
+static int __pyx_memoryview_err(PyObject *__pyx_v_error, char *__pyx_v_msg) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
+  PyObject *__pyx_t_5 = NULL;
+  #ifdef WITH_THREAD
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
+  #endif
+  __Pyx_RefNannySetupContext("_err", 0);
+  __Pyx_INCREF(__pyx_v_error);
+
+  /* "View.MemoryView":1259
+ * @cname('__pyx_memoryview_err')
+ * cdef int _err(object error, char *msg) except -1 with gil:
+ *     if msg != NULL:             # <<<<<<<<<<<<<<
+ *         raise error(msg.decode('ascii'))
+ *     else:
+ */
+  __pyx_t_1 = ((__pyx_v_msg != NULL) != 0);
+  if (unlikely(__pyx_t_1)) {
+
+    /* "View.MemoryView":1260
+ * cdef int _err(object error, char *msg) except -1 with gil:
+ *     if msg != NULL:
+ *         raise error(msg.decode('ascii'))             # <<<<<<<<<<<<<<
+ *     else:
+ *         raise error
+ */
+    __pyx_t_3 = __Pyx_decode_c_string(__pyx_v_msg, 0, strlen(__pyx_v_msg), NULL, NULL, PyUnicode_DecodeASCII); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1260, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    __Pyx_INCREF(__pyx_v_error);
+    __pyx_t_4 = __pyx_v_error; __pyx_t_5 = NULL;
+    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
+      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
+      if (likely(__pyx_t_5)) {
+        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
+        __Pyx_INCREF(__pyx_t_5);
+        __Pyx_INCREF(function);
+        __Pyx_DECREF_SET(__pyx_t_4, function);
+      }
+    }
+    __pyx_t_2 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_5, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_3);
+    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
+    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+    if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1260, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_2);
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
+    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+    __PYX_ERR(1, 1260, __pyx_L1_error)
+
+    /* "View.MemoryView":1259
+ * @cname('__pyx_memoryview_err')
+ * cdef int _err(object error, char *msg) except -1 with gil:
+ *     if msg != NULL:             # <<<<<<<<<<<<<<
+ *         raise error(msg.decode('ascii'))
+ *     else:
+ */
+  }
+
+  /* "View.MemoryView":1262
+ *         raise error(msg.decode('ascii'))
+ *     else:
+ *         raise error             # <<<<<<<<<<<<<<
+ * 
+ * @cname('__pyx_memoryview_copy_contents')
+ */
+  /*else*/ {
+    __Pyx_Raise(__pyx_v_error, 0, 0, 0);
+    __PYX_ERR(1, 1262, __pyx_L1_error)
+  }
+
+  /* "View.MemoryView":1258
+ * 
+ * @cname('__pyx_memoryview_err')
+ * cdef int _err(object error, char *msg) except -1 with gil:             # <<<<<<<<<<<<<<
+ *     if msg != NULL:
+ *         raise error(msg.decode('ascii'))
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_XDECREF(__pyx_t_5);
+  __Pyx_AddTraceback("View.MemoryView._err", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = -1;
+  __Pyx_XDECREF(__pyx_v_error);
+  __Pyx_RefNannyFinishContext();
+  #ifdef WITH_THREAD
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
+  #endif
+  return __pyx_r;
+}
+
+/* "View.MemoryView":1265
+ * 
+ * @cname('__pyx_memoryview_copy_contents')
+ * cdef int memoryview_copy_contents(__Pyx_memviewslice src,             # <<<<<<<<<<<<<<
+ *                                   __Pyx_memviewslice dst,
+ *                                   int src_ndim, int dst_ndim,
+ */
+
+static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_memviewslice __pyx_v_dst, int __pyx_v_src_ndim, int __pyx_v_dst_ndim, int __pyx_v_dtype_is_object) {
+  void *__pyx_v_tmpdata;
+  size_t __pyx_v_itemsize;
+  int __pyx_v_i;
+  char __pyx_v_order;
+  int __pyx_v_broadcasting;
+  int __pyx_v_direct_copy;
+  __Pyx_memviewslice __pyx_v_tmp;
+  int __pyx_v_ndim;
+  int __pyx_r;
+  Py_ssize_t __pyx_t_1;
+  int __pyx_t_2;
+  int __pyx_t_3;
+  int __pyx_t_4;
+  int __pyx_t_5;
+  int __pyx_t_6;
+  void *__pyx_t_7;
+  int __pyx_t_8;
+
+  /* "View.MemoryView":1273
+ *     Check for overlapping memory and verify the shapes.
+ *     """
+ *     cdef void *tmpdata = NULL             # <<<<<<<<<<<<<<
+ *     cdef size_t itemsize = src.memview.view.itemsize
+ *     cdef int i
+ */
+  __pyx_v_tmpdata = NULL;
+
+  /* "View.MemoryView":1274
+ *     """
+ *     cdef void *tmpdata = NULL
+ *     cdef size_t itemsize = src.memview.view.itemsize             # <<<<<<<<<<<<<<
+ *     cdef int i
+ *     cdef char order = get_best_order(&src, src_ndim)
+ */
+  __pyx_t_1 = __pyx_v_src.memview->view.itemsize;
+  __pyx_v_itemsize = __pyx_t_1;
+
+  /* "View.MemoryView":1276
+ *     cdef size_t itemsize = src.memview.view.itemsize
+ *     cdef int i
+ *     cdef char order = get_best_order(&src, src_ndim)             # <<<<<<<<<<<<<<
+ *     cdef bint broadcasting = False
+ *     cdef bint direct_copy = False
+ */
+  __pyx_v_order = __pyx_get_best_slice_order((&__pyx_v_src), __pyx_v_src_ndim);
+
+  /* "View.MemoryView":1277
+ *     cdef int i
+ *     cdef char order = get_best_order(&src, src_ndim)
+ *     cdef bint broadcasting = False             # <<<<<<<<<<<<<<
+ *     cdef bint direct_copy = False
+ *     cdef __Pyx_memviewslice tmp
+ */
+  __pyx_v_broadcasting = 0;
+
+  /* "View.MemoryView":1278
+ *     cdef char order = get_best_order(&src, src_ndim)
+ *     cdef bint broadcasting = False
+ *     cdef bint direct_copy = False             # <<<<<<<<<<<<<<
+ *     cdef __Pyx_memviewslice tmp
+ * 
+ */
+  __pyx_v_direct_copy = 0;
+
+  /* "View.MemoryView":1281
+ *     cdef __Pyx_memviewslice tmp
+ * 
+ *     if src_ndim < dst_ndim:             # <<<<<<<<<<<<<<
+ *         broadcast_leading(&src, src_ndim, dst_ndim)
+ *     elif dst_ndim < src_ndim:
+ */
+  __pyx_t_2 = ((__pyx_v_src_ndim < __pyx_v_dst_ndim) != 0);
+  if (__pyx_t_2) {
+
+    /* "View.MemoryView":1282
+ * 
+ *     if src_ndim < dst_ndim:
+ *         broadcast_leading(&src, src_ndim, dst_ndim)             # <<<<<<<<<<<<<<
+ *     elif dst_ndim < src_ndim:
+ *         broadcast_leading(&dst, dst_ndim, src_ndim)
+ */
+    __pyx_memoryview_broadcast_leading((&__pyx_v_src), __pyx_v_src_ndim, __pyx_v_dst_ndim);
+
+    /* "View.MemoryView":1281
+ *     cdef __Pyx_memviewslice tmp
+ * 
+ *     if src_ndim < dst_ndim:             # <<<<<<<<<<<<<<
+ *         broadcast_leading(&src, src_ndim, dst_ndim)
+ *     elif dst_ndim < src_ndim:
+ */
+    goto __pyx_L3;
+  }
+
+  /* "View.MemoryView":1283
+ *     if src_ndim < dst_ndim:
+ *         broadcast_leading(&src, src_ndim, dst_ndim)
+ *     elif dst_ndim < src_ndim:             # <<<<<<<<<<<<<<
+ *         broadcast_leading(&dst, dst_ndim, src_ndim)
+ * 
+ */
+  __pyx_t_2 = ((__pyx_v_dst_ndim < __pyx_v_src_ndim) != 0);
+  if (__pyx_t_2) {
+
+    /* "View.MemoryView":1284
+ *         broadcast_leading(&src, src_ndim, dst_ndim)
+ *     elif dst_ndim < src_ndim:
+ *         broadcast_leading(&dst, dst_ndim, src_ndim)             # <<<<<<<<<<<<<<
+ * 
+ *     cdef int ndim = max(src_ndim, dst_ndim)
+ */
+    __pyx_memoryview_broadcast_leading((&__pyx_v_dst), __pyx_v_dst_ndim, __pyx_v_src_ndim);
+
+    /* "View.MemoryView":1283
+ *     if src_ndim < dst_ndim:
+ *         broadcast_leading(&src, src_ndim, dst_ndim)
+ *     elif dst_ndim < src_ndim:             # <<<<<<<<<<<<<<
+ *         broadcast_leading(&dst, dst_ndim, src_ndim)
+ * 
+ */
+  }
+  __pyx_L3:;
+
+  /* "View.MemoryView":1286
+ *         broadcast_leading(&dst, dst_ndim, src_ndim)
+ * 
+ *     cdef int ndim = max(src_ndim, dst_ndim)             # <<<<<<<<<<<<<<
+ * 
+ *     for i in range(ndim):
+ */
+  __pyx_t_3 = __pyx_v_dst_ndim;
+  __pyx_t_4 = __pyx_v_src_ndim;
+  if (((__pyx_t_3 > __pyx_t_4) != 0)) {
+    __pyx_t_5 = __pyx_t_3;
+  } else {
+    __pyx_t_5 = __pyx_t_4;
+  }
+  __pyx_v_ndim = __pyx_t_5;
+
+  /* "View.MemoryView":1288
+ *     cdef int ndim = max(src_ndim, dst_ndim)
+ * 
+ *     for i in range(ndim):             # <<<<<<<<<<<<<<
+ *         if src.shape[i] != dst.shape[i]:
+ *             if src.shape[i] == 1:
+ */
+  __pyx_t_5 = __pyx_v_ndim;
+  __pyx_t_3 = __pyx_t_5;
+  for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
+    __pyx_v_i = __pyx_t_4;
+
+    /* "View.MemoryView":1289
+ * 
+ *     for i in range(ndim):
+ *         if src.shape[i] != dst.shape[i]:             # <<<<<<<<<<<<<<
+ *             if src.shape[i] == 1:
+ *                 broadcasting = True
+ */
+    __pyx_t_2 = (((__pyx_v_src.shape[__pyx_v_i]) != (__pyx_v_dst.shape[__pyx_v_i])) != 0);
+    if (__pyx_t_2) {
+
+      /* "View.MemoryView":1290
+ *     for i in range(ndim):
+ *         if src.shape[i] != dst.shape[i]:
+ *             if src.shape[i] == 1:             # <<<<<<<<<<<<<<
+ *                 broadcasting = True
+ *                 src.strides[i] = 0
+ */
+      __pyx_t_2 = (((__pyx_v_src.shape[__pyx_v_i]) == 1) != 0);
+      if (__pyx_t_2) {
+
+        /* "View.MemoryView":1291
+ *         if src.shape[i] != dst.shape[i]:
+ *             if src.shape[i] == 1:
+ *                 broadcasting = True             # <<<<<<<<<<<<<<
+ *                 src.strides[i] = 0
+ *             else:
+ */
+        __pyx_v_broadcasting = 1;
+
+        /* "View.MemoryView":1292
+ *             if src.shape[i] == 1:
+ *                 broadcasting = True
+ *                 src.strides[i] = 0             # <<<<<<<<<<<<<<
+ *             else:
+ *                 _err_extents(i, dst.shape[i], src.shape[i])
+ */
+        (__pyx_v_src.strides[__pyx_v_i]) = 0;
+
+        /* "View.MemoryView":1290
+ *     for i in range(ndim):
+ *         if src.shape[i] != dst.shape[i]:
+ *             if src.shape[i] == 1:             # <<<<<<<<<<<<<<
+ *                 broadcasting = True
+ *                 src.strides[i] = 0
+ */
+        goto __pyx_L7;
+      }
+
+      /* "View.MemoryView":1294
+ *                 src.strides[i] = 0
+ *             else:
+ *                 _err_extents(i, dst.shape[i], src.shape[i])             # <<<<<<<<<<<<<<
+ * 
+ *         if src.suboffsets[i] >= 0:
+ */
+      /*else*/ {
+        __pyx_t_6 = __pyx_memoryview_err_extents(__pyx_v_i, (__pyx_v_dst.shape[__pyx_v_i]), (__pyx_v_src.shape[__pyx_v_i])); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(1, 1294, __pyx_L1_error)
+      }
+      __pyx_L7:;
+
+      /* "View.MemoryView":1289
+ * 
+ *     for i in range(ndim):
+ *         if src.shape[i] != dst.shape[i]:             # <<<<<<<<<<<<<<
+ *             if src.shape[i] == 1:
+ *                 broadcasting = True
+ */
+    }
+
+    /* "View.MemoryView":1296
+ *                 _err_extents(i, dst.shape[i], src.shape[i])
+ * 
+ *         if src.suboffsets[i] >= 0:             # <<<<<<<<<<<<<<
+ *             _err_dim(ValueError, "Dimension %d is not direct", i)
+ * 
+ */
+    __pyx_t_2 = (((__pyx_v_src.suboffsets[__pyx_v_i]) >= 0) != 0);
+    if (__pyx_t_2) {
+
+      /* "View.MemoryView":1297
+ * 
+ *         if src.suboffsets[i] >= 0:
+ *             _err_dim(ValueError, "Dimension %d is not direct", i)             # <<<<<<<<<<<<<<
+ * 
+ *     if slices_overlap(&src, &dst, ndim, itemsize):
+ */
+      __pyx_t_6 = __pyx_memoryview_err_dim(__pyx_builtin_ValueError, ((char *)"Dimension %d is not direct"), __pyx_v_i); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(1, 1297, __pyx_L1_error)
+
+      /* "View.MemoryView":1296
+ *                 _err_extents(i, dst.shape[i], src.shape[i])
+ * 
+ *         if src.suboffsets[i] >= 0:             # <<<<<<<<<<<<<<
+ *             _err_dim(ValueError, "Dimension %d is not direct", i)
+ * 
+ */
+    }
+  }
+
+  /* "View.MemoryView":1299
+ *             _err_dim(ValueError, "Dimension %d is not direct", i)
+ * 
+ *     if slices_overlap(&src, &dst, ndim, itemsize):             # <<<<<<<<<<<<<<
+ * 
+ *         if not slice_is_contig(src, order, ndim):
+ */
+  __pyx_t_2 = (__pyx_slices_overlap((&__pyx_v_src), (&__pyx_v_dst), __pyx_v_ndim, __pyx_v_itemsize) != 0);
+  if (__pyx_t_2) {
+
+    /* "View.MemoryView":1301
+ *     if slices_overlap(&src, &dst, ndim, itemsize):
+ * 
+ *         if not slice_is_contig(src, order, ndim):             # <<<<<<<<<<<<<<
+ *             order = get_best_order(&dst, ndim)
+ * 
+ */
+    __pyx_t_2 = ((!(__pyx_memviewslice_is_contig(__pyx_v_src, __pyx_v_order, __pyx_v_ndim) != 0)) != 0);
+    if (__pyx_t_2) {
+
+      /* "View.MemoryView":1302
+ * 
+ *         if not slice_is_contig(src, order, ndim):
+ *             order = get_best_order(&dst, ndim)             # <<<<<<<<<<<<<<
+ * 
+ *         tmpdata = copy_data_to_temp(&src, &tmp, order, ndim)
+ */
+      __pyx_v_order = __pyx_get_best_slice_order((&__pyx_v_dst), __pyx_v_ndim);
+
+      /* "View.MemoryView":1301
+ *     if slices_overlap(&src, &dst, ndim, itemsize):
+ * 
+ *         if not slice_is_contig(src, order, ndim):             # <<<<<<<<<<<<<<
+ *             order = get_best_order(&dst, ndim)
+ * 
+ */
+    }
+
+    /* "View.MemoryView":1304
+ *             order = get_best_order(&dst, ndim)
+ * 
+ *         tmpdata = copy_data_to_temp(&src, &tmp, order, ndim)             # <<<<<<<<<<<<<<
+ *         src = tmp
+ * 
+ */
+    __pyx_t_7 = __pyx_memoryview_copy_data_to_temp((&__pyx_v_src), (&__pyx_v_tmp), __pyx_v_order, __pyx_v_ndim); if (unlikely(__pyx_t_7 == ((void *)NULL))) __PYX_ERR(1, 1304, __pyx_L1_error)
+    __pyx_v_tmpdata = __pyx_t_7;
+
+    /* "View.MemoryView":1305
+ * 
+ *         tmpdata = copy_data_to_temp(&src, &tmp, order, ndim)
+ *         src = tmp             # <<<<<<<<<<<<<<
+ * 
+ *     if not broadcasting:
+ */
+    __pyx_v_src = __pyx_v_tmp;
+
+    /* "View.MemoryView":1299
+ *             _err_dim(ValueError, "Dimension %d is not direct", i)
+ * 
+ *     if slices_overlap(&src, &dst, ndim, itemsize):             # <<<<<<<<<<<<<<
+ * 
+ *         if not slice_is_contig(src, order, ndim):
+ */
+  }
+
+  /* "View.MemoryView":1307
+ *         src = tmp
+ * 
+ *     if not broadcasting:             # <<<<<<<<<<<<<<
+ * 
+ * 
+ */
+  __pyx_t_2 = ((!(__pyx_v_broadcasting != 0)) != 0);
+  if (__pyx_t_2) {
+
+    /* "View.MemoryView":1310
+ * 
+ * 
+ *         if slice_is_contig(src, 'C', ndim):             # <<<<<<<<<<<<<<
+ *             direct_copy = slice_is_contig(dst, 'C', ndim)
+ *         elif slice_is_contig(src, 'F', ndim):
+ */
+    __pyx_t_2 = (__pyx_memviewslice_is_contig(__pyx_v_src, 'C', __pyx_v_ndim) != 0);
+    if (__pyx_t_2) {
+
+      /* "View.MemoryView":1311
+ * 
+ *         if slice_is_contig(src, 'C', ndim):
+ *             direct_copy = slice_is_contig(dst, 'C', ndim)             # <<<<<<<<<<<<<<
+ *         elif slice_is_contig(src, 'F', ndim):
+ *             direct_copy = slice_is_contig(dst, 'F', ndim)
+ */
+      __pyx_v_direct_copy = __pyx_memviewslice_is_contig(__pyx_v_dst, 'C', __pyx_v_ndim);
+
+      /* "View.MemoryView":1310
+ * 
+ * 
+ *         if slice_is_contig(src, 'C', ndim):             # <<<<<<<<<<<<<<
+ *             direct_copy = slice_is_contig(dst, 'C', ndim)
+ *         elif slice_is_contig(src, 'F', ndim):
+ */
+      goto __pyx_L12;
+    }
+
+    /* "View.MemoryView":1312
+ *         if slice_is_contig(src, 'C', ndim):
+ *             direct_copy = slice_is_contig(dst, 'C', ndim)
+ *         elif slice_is_contig(src, 'F', ndim):             # <<<<<<<<<<<<<<
+ *             direct_copy = slice_is_contig(dst, 'F', ndim)
+ * 
+ */
+    __pyx_t_2 = (__pyx_memviewslice_is_contig(__pyx_v_src, 'F', __pyx_v_ndim) != 0);
+    if (__pyx_t_2) {
+
+      /* "View.MemoryView":1313
+ *             direct_copy = slice_is_contig(dst, 'C', ndim)
+ *         elif slice_is_contig(src, 'F', ndim):
+ *             direct_copy = slice_is_contig(dst, 'F', ndim)             # <<<<<<<<<<<<<<
+ * 
+ *         if direct_copy:
+ */
+      __pyx_v_direct_copy = __pyx_memviewslice_is_contig(__pyx_v_dst, 'F', __pyx_v_ndim);
+
+      /* "View.MemoryView":1312
+ *         if slice_is_contig(src, 'C', ndim):
+ *             direct_copy = slice_is_contig(dst, 'C', ndim)
+ *         elif slice_is_contig(src, 'F', ndim):             # <<<<<<<<<<<<<<
+ *             direct_copy = slice_is_contig(dst, 'F', ndim)
+ * 
+ */
+    }
+    __pyx_L12:;
+
+    /* "View.MemoryView":1315
+ *             direct_copy = slice_is_contig(dst, 'F', ndim)
+ * 
+ *         if direct_copy:             # <<<<<<<<<<<<<<
+ * 
+ *             refcount_copying(&dst, dtype_is_object, ndim, False)
+ */
+    __pyx_t_2 = (__pyx_v_direct_copy != 0);
+    if (__pyx_t_2) {
+
+      /* "View.MemoryView":1317
+ *         if direct_copy:
+ * 
+ *             refcount_copying(&dst, dtype_is_object, ndim, False)             # <<<<<<<<<<<<<<
+ *             memcpy(dst.data, src.data, slice_get_size(&src, ndim))
+ *             refcount_copying(&dst, dtype_is_object, ndim, True)
+ */
+      __pyx_memoryview_refcount_copying((&__pyx_v_dst), __pyx_v_dtype_is_object, __pyx_v_ndim, 0);
+
+      /* "View.MemoryView":1318
+ * 
+ *             refcount_copying(&dst, dtype_is_object, ndim, False)
+ *             memcpy(dst.data, src.data, slice_get_size(&src, ndim))             # <<<<<<<<<<<<<<
+ *             refcount_copying(&dst, dtype_is_object, ndim, True)
+ *             free(tmpdata)
+ */
+      (void)(memcpy(__pyx_v_dst.data, __pyx_v_src.data, __pyx_memoryview_slice_get_size((&__pyx_v_src), __pyx_v_ndim)));
+
+      /* "View.MemoryView":1319
+ *             refcount_copying(&dst, dtype_is_object, ndim, False)
+ *             memcpy(dst.data, src.data, slice_get_size(&src, ndim))
+ *             refcount_copying(&dst, dtype_is_object, ndim, True)             # <<<<<<<<<<<<<<
+ *             free(tmpdata)
+ *             return 0
+ */
+      __pyx_memoryview_refcount_copying((&__pyx_v_dst), __pyx_v_dtype_is_object, __pyx_v_ndim, 1);
+
+      /* "View.MemoryView":1320
+ *             memcpy(dst.data, src.data, slice_get_size(&src, ndim))
+ *             refcount_copying(&dst, dtype_is_object, ndim, True)
+ *             free(tmpdata)             # <<<<<<<<<<<<<<
+ *             return 0
+ * 
+ */
+      free(__pyx_v_tmpdata);
+
+      /* "View.MemoryView":1321
+ *             refcount_copying(&dst, dtype_is_object, ndim, True)
+ *             free(tmpdata)
+ *             return 0             # <<<<<<<<<<<<<<
+ * 
+ *     if order == 'F' == get_best_order(&dst, ndim):
+ */
+      __pyx_r = 0;
+      goto __pyx_L0;
+
+      /* "View.MemoryView":1315
+ *             direct_copy = slice_is_contig(dst, 'F', ndim)
+ * 
+ *         if direct_copy:             # <<<<<<<<<<<<<<
+ * 
+ *             refcount_copying(&dst, dtype_is_object, ndim, False)
+ */
+    }
+
+    /* "View.MemoryView":1307
+ *         src = tmp
+ * 
+ *     if not broadcasting:             # <<<<<<<<<<<<<<
+ * 
+ * 
+ */
+  }
+
+  /* "View.MemoryView":1323
+ *             return 0
+ * 
+ *     if order == 'F' == get_best_order(&dst, ndim):             # <<<<<<<<<<<<<<
+ * 
+ * 
+ */
+  __pyx_t_2 = (__pyx_v_order == 'F');
+  if (__pyx_t_2) {
+    __pyx_t_2 = ('F' == __pyx_get_best_slice_order((&__pyx_v_dst), __pyx_v_ndim));
+  }
+  __pyx_t_8 = (__pyx_t_2 != 0);
+  if (__pyx_t_8) {
+
+    /* "View.MemoryView":1326
+ * 
+ * 
+ *         transpose_memslice(&src)             # <<<<<<<<<<<<<<
+ *         transpose_memslice(&dst)
+ * 
+ */
+    __pyx_t_5 = __pyx_memslice_transpose((&__pyx_v_src)); if (unlikely(__pyx_t_5 == ((int)0))) __PYX_ERR(1, 1326, __pyx_L1_error)
+
+    /* "View.MemoryView":1327
+ * 
+ *         transpose_memslice(&src)
+ *         transpose_memslice(&dst)             # <<<<<<<<<<<<<<
+ * 
+ *     refcount_copying(&dst, dtype_is_object, ndim, False)
+ */
+    __pyx_t_5 = __pyx_memslice_transpose((&__pyx_v_dst)); if (unlikely(__pyx_t_5 == ((int)0))) __PYX_ERR(1, 1327, __pyx_L1_error)
+
+    /* "View.MemoryView":1323
+ *             return 0
+ * 
+ *     if order == 'F' == get_best_order(&dst, ndim):             # <<<<<<<<<<<<<<
+ * 
+ * 
+ */
+  }
+
+  /* "View.MemoryView":1329
+ *         transpose_memslice(&dst)
+ * 
+ *     refcount_copying(&dst, dtype_is_object, ndim, False)             # <<<<<<<<<<<<<<
+ *     copy_strided_to_strided(&src, &dst, ndim, itemsize)
+ *     refcount_copying(&dst, dtype_is_object, ndim, True)
+ */
+  __pyx_memoryview_refcount_copying((&__pyx_v_dst), __pyx_v_dtype_is_object, __pyx_v_ndim, 0);
+
+  /* "View.MemoryView":1330
+ * 
+ *     refcount_copying(&dst, dtype_is_object, ndim, False)
+ *     copy_strided_to_strided(&src, &dst, ndim, itemsize)             # <<<<<<<<<<<<<<
+ *     refcount_copying(&dst, dtype_is_object, ndim, True)
+ * 
+ */
+  copy_strided_to_strided((&__pyx_v_src), (&__pyx_v_dst), __pyx_v_ndim, __pyx_v_itemsize);
+
+  /* "View.MemoryView":1331
+ *     refcount_copying(&dst, dtype_is_object, ndim, False)
+ *     copy_strided_to_strided(&src, &dst, ndim, itemsize)
+ *     refcount_copying(&dst, dtype_is_object, ndim, True)             # <<<<<<<<<<<<<<
+ * 
+ *     free(tmpdata)
+ */
+  __pyx_memoryview_refcount_copying((&__pyx_v_dst), __pyx_v_dtype_is_object, __pyx_v_ndim, 1);
+
+  /* "View.MemoryView":1333
+ *     refcount_copying(&dst, dtype_is_object, ndim, True)
+ * 
+ *     free(tmpdata)             # <<<<<<<<<<<<<<
+ *     return 0
+ * 
+ */
+  free(__pyx_v_tmpdata);
+
+  /* "View.MemoryView":1334
+ * 
+ *     free(tmpdata)
+ *     return 0             # <<<<<<<<<<<<<<
+ * 
+ * @cname('__pyx_memoryview_broadcast_leading')
+ */
+  __pyx_r = 0;
+  goto __pyx_L0;
+
+  /* "View.MemoryView":1265
+ * 
+ * @cname('__pyx_memoryview_copy_contents')
+ * cdef int memoryview_copy_contents(__Pyx_memviewslice src,             # <<<<<<<<<<<<<<
+ *                                   __Pyx_memviewslice dst,
+ *                                   int src_ndim, int dst_ndim,
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  {
+    #ifdef WITH_THREAD
+    PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
+    #endif
+    __Pyx_AddTraceback("View.MemoryView.memoryview_copy_contents", __pyx_clineno, __pyx_lineno, __pyx_filename);
+    #ifdef WITH_THREAD
+    __Pyx_PyGILState_Release(__pyx_gilstate_save);
+    #endif
+  }
+  __pyx_r = -1;
+  __pyx_L0:;
+  return __pyx_r;
+}
+
+/* "View.MemoryView":1337
+ * 
+ * @cname('__pyx_memoryview_broadcast_leading')
+ * cdef void broadcast_leading(__Pyx_memviewslice *mslice,             # <<<<<<<<<<<<<<
+ *                             int ndim,
+ *                             int ndim_other) nogil:
+ */
+
+static void __pyx_memoryview_broadcast_leading(__Pyx_memviewslice *__pyx_v_mslice, int __pyx_v_ndim, int __pyx_v_ndim_other) {
+  int __pyx_v_i;
+  int __pyx_v_offset;
+  int __pyx_t_1;
+  int __pyx_t_2;
+  int __pyx_t_3;
+
+  /* "View.MemoryView":1341
+ *                             int ndim_other) nogil:
+ *     cdef int i
+ *     cdef int offset = ndim_other - ndim             # <<<<<<<<<<<<<<
+ * 
+ *     for i in range(ndim - 1, -1, -1):
+ */
+  __pyx_v_offset = (__pyx_v_ndim_other - __pyx_v_ndim);
+
+  /* "View.MemoryView":1343
+ *     cdef int offset = ndim_other - ndim
+ * 
+ *     for i in range(ndim - 1, -1, -1):             # <<<<<<<<<<<<<<
+ *         mslice.shape[i + offset] = mslice.shape[i]
+ *         mslice.strides[i + offset] = mslice.strides[i]
+ */
+  for (__pyx_t_1 = (__pyx_v_ndim - 1); __pyx_t_1 > -1; __pyx_t_1-=1) {
+    __pyx_v_i = __pyx_t_1;
+
+    /* "View.MemoryView":1344
+ * 
+ *     for i in range(ndim - 1, -1, -1):
+ *         mslice.shape[i + offset] = mslice.shape[i]             # <<<<<<<<<<<<<<
+ *         mslice.strides[i + offset] = mslice.strides[i]
+ *         mslice.suboffsets[i + offset] = mslice.suboffsets[i]
+ */
+    (__pyx_v_mslice->shape[(__pyx_v_i + __pyx_v_offset)]) = (__pyx_v_mslice->shape[__pyx_v_i]);
+
+    /* "View.MemoryView":1345
+ *     for i in range(ndim - 1, -1, -1):
+ *         mslice.shape[i + offset] = mslice.shape[i]
+ *         mslice.strides[i + offset] = mslice.strides[i]             # <<<<<<<<<<<<<<
+ *         mslice.suboffsets[i + offset] = mslice.suboffsets[i]
+ * 
+ */
+    (__pyx_v_mslice->strides[(__pyx_v_i + __pyx_v_offset)]) = (__pyx_v_mslice->strides[__pyx_v_i]);
+
+    /* "View.MemoryView":1346
+ *         mslice.shape[i + offset] = mslice.shape[i]
+ *         mslice.strides[i + offset] = mslice.strides[i]
+ *         mslice.suboffsets[i + offset] = mslice.suboffsets[i]             # <<<<<<<<<<<<<<
+ * 
+ *     for i in range(offset):
+ */
+    (__pyx_v_mslice->suboffsets[(__pyx_v_i + __pyx_v_offset)]) = (__pyx_v_mslice->suboffsets[__pyx_v_i]);
+  }
+
+  /* "View.MemoryView":1348
+ *         mslice.suboffsets[i + offset] = mslice.suboffsets[i]
+ * 
+ *     for i in range(offset):             # <<<<<<<<<<<<<<
+ *         mslice.shape[i] = 1
+ *         mslice.strides[i] = mslice.strides[0]
+ */
+  __pyx_t_1 = __pyx_v_offset;
+  __pyx_t_2 = __pyx_t_1;
+  for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
+    __pyx_v_i = __pyx_t_3;
+
+    /* "View.MemoryView":1349
+ * 
+ *     for i in range(offset):
+ *         mslice.shape[i] = 1             # <<<<<<<<<<<<<<
+ *         mslice.strides[i] = mslice.strides[0]
+ *         mslice.suboffsets[i] = -1
+ */
+    (__pyx_v_mslice->shape[__pyx_v_i]) = 1;
+
+    /* "View.MemoryView":1350
+ *     for i in range(offset):
+ *         mslice.shape[i] = 1
+ *         mslice.strides[i] = mslice.strides[0]             # <<<<<<<<<<<<<<
+ *         mslice.suboffsets[i] = -1
+ * 
+ */
+    (__pyx_v_mslice->strides[__pyx_v_i]) = (__pyx_v_mslice->strides[0]);
+
+    /* "View.MemoryView":1351
+ *         mslice.shape[i] = 1
+ *         mslice.strides[i] = mslice.strides[0]
+ *         mslice.suboffsets[i] = -1             # <<<<<<<<<<<<<<
+ * 
+ * 
+ */
+    (__pyx_v_mslice->suboffsets[__pyx_v_i]) = -1L;
+  }
+
+  /* "View.MemoryView":1337
+ * 
+ * @cname('__pyx_memoryview_broadcast_leading')
+ * cdef void broadcast_leading(__Pyx_memviewslice *mslice,             # <<<<<<<<<<<<<<
+ *                             int ndim,
+ *                             int ndim_other) nogil:
+ */
+
+  /* function exit code */
+}
+
+/* "View.MemoryView":1359
+ * 
+ * @cname('__pyx_memoryview_refcount_copying')
+ * cdef void refcount_copying(__Pyx_memviewslice *dst, bint dtype_is_object,             # <<<<<<<<<<<<<<
+ *                            int ndim, bint inc) nogil:
+ * 
+ */
+
+static void __pyx_memoryview_refcount_copying(__Pyx_memviewslice *__pyx_v_dst, int __pyx_v_dtype_is_object, int __pyx_v_ndim, int __pyx_v_inc) {
+  int __pyx_t_1;
+
+  /* "View.MemoryView":1363
+ * 
+ * 
+ *     if dtype_is_object:             # <<<<<<<<<<<<<<
+ *         refcount_objects_in_slice_with_gil(dst.data, dst.shape,
+ *                                            dst.strides, ndim, inc)
+ */
+  __pyx_t_1 = (__pyx_v_dtype_is_object != 0);
+  if (__pyx_t_1) {
+
+    /* "View.MemoryView":1364
+ * 
+ *     if dtype_is_object:
+ *         refcount_objects_in_slice_with_gil(dst.data, dst.shape,             # <<<<<<<<<<<<<<
+ *                                            dst.strides, ndim, inc)
+ * 
+ */
+    __pyx_memoryview_refcount_objects_in_slice_with_gil(__pyx_v_dst->data, __pyx_v_dst->shape, __pyx_v_dst->strides, __pyx_v_ndim, __pyx_v_inc);
+
+    /* "View.MemoryView":1363
+ * 
+ * 
+ *     if dtype_is_object:             # <<<<<<<<<<<<<<
+ *         refcount_objects_in_slice_with_gil(dst.data, dst.shape,
+ *                                            dst.strides, ndim, inc)
+ */
+  }
+
+  /* "View.MemoryView":1359
+ * 
+ * @cname('__pyx_memoryview_refcount_copying')
+ * cdef void refcount_copying(__Pyx_memviewslice *dst, bint dtype_is_object,             # <<<<<<<<<<<<<<
+ *                            int ndim, bint inc) nogil:
+ * 
+ */
+
+  /* function exit code */
+}
+
+/* "View.MemoryView":1368
+ * 
+ * @cname('__pyx_memoryview_refcount_objects_in_slice_with_gil')
+ * cdef void refcount_objects_in_slice_with_gil(char *data, Py_ssize_t *shape,             # <<<<<<<<<<<<<<
+ *                                              Py_ssize_t *strides, int ndim,
+ *                                              bint inc) with gil:
+ */
+
+static void __pyx_memoryview_refcount_objects_in_slice_with_gil(char *__pyx_v_data, Py_ssize_t *__pyx_v_shape, Py_ssize_t *__pyx_v_strides, int __pyx_v_ndim, int __pyx_v_inc) {
+  __Pyx_RefNannyDeclarations
+  #ifdef WITH_THREAD
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
+  #endif
+  __Pyx_RefNannySetupContext("refcount_objects_in_slice_with_gil", 0);
+
+  /* "View.MemoryView":1371
+ *                                              Py_ssize_t *strides, int ndim,
+ *                                              bint inc) with gil:
+ *     refcount_objects_in_slice(data, shape, strides, ndim, inc)             # <<<<<<<<<<<<<<
+ * 
+ * @cname('__pyx_memoryview_refcount_objects_in_slice')
+ */
+  __pyx_memoryview_refcount_objects_in_slice(__pyx_v_data, __pyx_v_shape, __pyx_v_strides, __pyx_v_ndim, __pyx_v_inc);
+
+  /* "View.MemoryView":1368
+ * 
+ * @cname('__pyx_memoryview_refcount_objects_in_slice_with_gil')
+ * cdef void refcount_objects_in_slice_with_gil(char *data, Py_ssize_t *shape,             # <<<<<<<<<<<<<<
+ *                                              Py_ssize_t *strides, int ndim,
+ *                                              bint inc) with gil:
+ */
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  #ifdef WITH_THREAD
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
+  #endif
+}
+
+/* "View.MemoryView":1374
+ * 
+ * @cname('__pyx_memoryview_refcount_objects_in_slice')
+ * cdef void refcount_objects_in_slice(char *data, Py_ssize_t *shape,             # <<<<<<<<<<<<<<
+ *                                     Py_ssize_t *strides, int ndim, bint inc):
+ *     cdef Py_ssize_t i
+ */
+
+static void __pyx_memoryview_refcount_objects_in_slice(char *__pyx_v_data, Py_ssize_t *__pyx_v_shape, Py_ssize_t *__pyx_v_strides, int __pyx_v_ndim, int __pyx_v_inc) {
+  CYTHON_UNUSED Py_ssize_t __pyx_v_i;
+  __Pyx_RefNannyDeclarations
+  Py_ssize_t __pyx_t_1;
+  Py_ssize_t __pyx_t_2;
+  Py_ssize_t __pyx_t_3;
+  int __pyx_t_4;
+  __Pyx_RefNannySetupContext("refcount_objects_in_slice", 0);
+
+  /* "View.MemoryView":1378
+ *     cdef Py_ssize_t i
+ * 
+ *     for i in range(shape[0]):             # <<<<<<<<<<<<<<
+ *         if ndim == 1:
+ *             if inc:
+ */
+  __pyx_t_1 = (__pyx_v_shape[0]);
+  __pyx_t_2 = __pyx_t_1;
+  for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
+    __pyx_v_i = __pyx_t_3;
+
+    /* "View.MemoryView":1379
+ * 
+ *     for i in range(shape[0]):
+ *         if ndim == 1:             # <<<<<<<<<<<<<<
+ *             if inc:
+ *                 Py_INCREF((<PyObject **> data)[0])
+ */
+    __pyx_t_4 = ((__pyx_v_ndim == 1) != 0);
+    if (__pyx_t_4) {
+
+      /* "View.MemoryView":1380
+ *     for i in range(shape[0]):
+ *         if ndim == 1:
+ *             if inc:             # <<<<<<<<<<<<<<
+ *                 Py_INCREF((<PyObject **> data)[0])
+ *             else:
+ */
+      __pyx_t_4 = (__pyx_v_inc != 0);
+      if (__pyx_t_4) {
+
+        /* "View.MemoryView":1381
+ *         if ndim == 1:
+ *             if inc:
+ *                 Py_INCREF((<PyObject **> data)[0])             # <<<<<<<<<<<<<<
+ *             else:
+ *                 Py_DECREF((<PyObject **> data)[0])
+ */
+        Py_INCREF((((PyObject **)__pyx_v_data)[0]));
+
+        /* "View.MemoryView":1380
+ *     for i in range(shape[0]):
+ *         if ndim == 1:
+ *             if inc:             # <<<<<<<<<<<<<<
+ *                 Py_INCREF((<PyObject **> data)[0])
+ *             else:
+ */
+        goto __pyx_L6;
+      }
+
+      /* "View.MemoryView":1383
+ *                 Py_INCREF((<PyObject **> data)[0])
+ *             else:
+ *                 Py_DECREF((<PyObject **> data)[0])             # <<<<<<<<<<<<<<
+ *         else:
+ *             refcount_objects_in_slice(data, shape + 1, strides + 1,
+ */
+      /*else*/ {
+        Py_DECREF((((PyObject **)__pyx_v_data)[0]));
+      }
+      __pyx_L6:;
+
+      /* "View.MemoryView":1379
+ * 
+ *     for i in range(shape[0]):
+ *         if ndim == 1:             # <<<<<<<<<<<<<<
+ *             if inc:
+ *                 Py_INCREF((<PyObject **> data)[0])
+ */
+      goto __pyx_L5;
+    }
+
+    /* "View.MemoryView":1385
+ *                 Py_DECREF((<PyObject **> data)[0])
+ *         else:
+ *             refcount_objects_in_slice(data, shape + 1, strides + 1,             # <<<<<<<<<<<<<<
+ *                                       ndim - 1, inc)
+ * 
+ */
+    /*else*/ {
+
+      /* "View.MemoryView":1386
+ *         else:
+ *             refcount_objects_in_slice(data, shape + 1, strides + 1,
+ *                                       ndim - 1, inc)             # <<<<<<<<<<<<<<
+ * 
+ *         data += strides[0]
+ */
+      __pyx_memoryview_refcount_objects_in_slice(__pyx_v_data, (__pyx_v_shape + 1), (__pyx_v_strides + 1), (__pyx_v_ndim - 1), __pyx_v_inc);
+    }
+    __pyx_L5:;
+
+    /* "View.MemoryView":1388
+ *                                       ndim - 1, inc)
+ * 
+ *         data += strides[0]             # <<<<<<<<<<<<<<
+ * 
+ * 
+ */
+    __pyx_v_data = (__pyx_v_data + (__pyx_v_strides[0]));
+  }
+
+  /* "View.MemoryView":1374
+ * 
+ * @cname('__pyx_memoryview_refcount_objects_in_slice')
+ * cdef void refcount_objects_in_slice(char *data, Py_ssize_t *shape,             # <<<<<<<<<<<<<<
+ *                                     Py_ssize_t *strides, int ndim, bint inc):
+ *     cdef Py_ssize_t i
+ */
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+}
+
+/* "View.MemoryView":1394
+ * 
+ * @cname('__pyx_memoryview_slice_assign_scalar')
+ * cdef void slice_assign_scalar(__Pyx_memviewslice *dst, int ndim,             # <<<<<<<<<<<<<<
+ *                               size_t itemsize, void *item,
+ *                               bint dtype_is_object) nogil:
+ */
+
+static void __pyx_memoryview_slice_assign_scalar(__Pyx_memviewslice *__pyx_v_dst, int __pyx_v_ndim, size_t __pyx_v_itemsize, void *__pyx_v_item, int __pyx_v_dtype_is_object) {
+
+  /* "View.MemoryView":1397
+ *                               size_t itemsize, void *item,
+ *                               bint dtype_is_object) nogil:
+ *     refcount_copying(dst, dtype_is_object, ndim, False)             # <<<<<<<<<<<<<<
+ *     _slice_assign_scalar(dst.data, dst.shape, dst.strides, ndim,
+ *                          itemsize, item)
+ */
+  __pyx_memoryview_refcount_copying(__pyx_v_dst, __pyx_v_dtype_is_object, __pyx_v_ndim, 0);
+
+  /* "View.MemoryView":1398
+ *                               bint dtype_is_object) nogil:
+ *     refcount_copying(dst, dtype_is_object, ndim, False)
+ *     _slice_assign_scalar(dst.data, dst.shape, dst.strides, ndim,             # <<<<<<<<<<<<<<
+ *                          itemsize, item)
+ *     refcount_copying(dst, dtype_is_object, ndim, True)
+ */
+  __pyx_memoryview__slice_assign_scalar(__pyx_v_dst->data, __pyx_v_dst->shape, __pyx_v_dst->strides, __pyx_v_ndim, __pyx_v_itemsize, __pyx_v_item);
+
+  /* "View.MemoryView":1400
+ *     _slice_assign_scalar(dst.data, dst.shape, dst.strides, ndim,
+ *                          itemsize, item)
+ *     refcount_copying(dst, dtype_is_object, ndim, True)             # <<<<<<<<<<<<<<
+ * 
+ * 
+ */
+  __pyx_memoryview_refcount_copying(__pyx_v_dst, __pyx_v_dtype_is_object, __pyx_v_ndim, 1);
+
+  /* "View.MemoryView":1394
+ * 
+ * @cname('__pyx_memoryview_slice_assign_scalar')
+ * cdef void slice_assign_scalar(__Pyx_memviewslice *dst, int ndim,             # <<<<<<<<<<<<<<
+ *                               size_t itemsize, void *item,
+ *                               bint dtype_is_object) nogil:
+ */
+
+  /* function exit code */
+}
+
+/* "View.MemoryView":1404
+ * 
+ * @cname('__pyx_memoryview__slice_assign_scalar')
+ * cdef void _slice_assign_scalar(char *data, Py_ssize_t *shape,             # <<<<<<<<<<<<<<
+ *                               Py_ssize_t *strides, int ndim,
+ *                               size_t itemsize, void *item) nogil:
+ */
+
+static void __pyx_memoryview__slice_assign_scalar(char *__pyx_v_data, Py_ssize_t *__pyx_v_shape, Py_ssize_t *__pyx_v_strides, int __pyx_v_ndim, size_t __pyx_v_itemsize, void *__pyx_v_item) {
+  CYTHON_UNUSED Py_ssize_t __pyx_v_i;
+  Py_ssize_t __pyx_v_stride;
+  Py_ssize_t __pyx_v_extent;
+  int __pyx_t_1;
+  Py_ssize_t __pyx_t_2;
+  Py_ssize_t __pyx_t_3;
+  Py_ssize_t __pyx_t_4;
+
+  /* "View.MemoryView":1408
+ *                               size_t itemsize, void *item) nogil:
+ *     cdef Py_ssize_t i
+ *     cdef Py_ssize_t stride = strides[0]             # <<<<<<<<<<<<<<
+ *     cdef Py_ssize_t extent = shape[0]
+ * 
+ */
+  __pyx_v_stride = (__pyx_v_strides[0]);
+
+  /* "View.MemoryView":1409
+ *     cdef Py_ssize_t i
+ *     cdef Py_ssize_t stride = strides[0]
+ *     cdef Py_ssize_t extent = shape[0]             # <<<<<<<<<<<<<<
+ * 
+ *     if ndim == 1:
+ */
+  __pyx_v_extent = (__pyx_v_shape[0]);
+
+  /* "View.MemoryView":1411
+ *     cdef Py_ssize_t extent = shape[0]
+ * 
+ *     if ndim == 1:             # <<<<<<<<<<<<<<
+ *         for i in range(extent):
+ *             memcpy(data, item, itemsize)
+ */
+  __pyx_t_1 = ((__pyx_v_ndim == 1) != 0);
+  if (__pyx_t_1) {
+
+    /* "View.MemoryView":1412
+ * 
+ *     if ndim == 1:
+ *         for i in range(extent):             # <<<<<<<<<<<<<<
+ *             memcpy(data, item, itemsize)
+ *             data += stride
+ */
+    __pyx_t_2 = __pyx_v_extent;
+    __pyx_t_3 = __pyx_t_2;
+    for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
+      __pyx_v_i = __pyx_t_4;
+
+      /* "View.MemoryView":1413
+ *     if ndim == 1:
+ *         for i in range(extent):
+ *             memcpy(data, item, itemsize)             # <<<<<<<<<<<<<<
+ *             data += stride
+ *     else:
+ */
+      (void)(memcpy(__pyx_v_data, __pyx_v_item, __pyx_v_itemsize));
+
+      /* "View.MemoryView":1414
+ *         for i in range(extent):
+ *             memcpy(data, item, itemsize)
+ *             data += stride             # <<<<<<<<<<<<<<
+ *     else:
+ *         for i in range(extent):
+ */
+      __pyx_v_data = (__pyx_v_data + __pyx_v_stride);
+    }
+
+    /* "View.MemoryView":1411
+ *     cdef Py_ssize_t extent = shape[0]
+ * 
+ *     if ndim == 1:             # <<<<<<<<<<<<<<
+ *         for i in range(extent):
+ *             memcpy(data, item, itemsize)
+ */
+    goto __pyx_L3;
+  }
+
+  /* "View.MemoryView":1416
+ *             data += stride
+ *     else:
+ *         for i in range(extent):             # <<<<<<<<<<<<<<
+ *             _slice_assign_scalar(data, shape + 1, strides + 1,
+ *                                 ndim - 1, itemsize, item)
+ */
+  /*else*/ {
+    __pyx_t_2 = __pyx_v_extent;
+    __pyx_t_3 = __pyx_t_2;
+    for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
+      __pyx_v_i = __pyx_t_4;
+
+      /* "View.MemoryView":1417
+ *     else:
+ *         for i in range(extent):
+ *             _slice_assign_scalar(data, shape + 1, strides + 1,             # <<<<<<<<<<<<<<
+ *                                 ndim - 1, itemsize, item)
+ *             data += stride
+ */
+      __pyx_memoryview__slice_assign_scalar(__pyx_v_data, (__pyx_v_shape + 1), (__pyx_v_strides + 1), (__pyx_v_ndim - 1), __pyx_v_itemsize, __pyx_v_item);
+
+      /* "View.MemoryView":1419
+ *             _slice_assign_scalar(data, shape + 1, strides + 1,
+ *                                 ndim - 1, itemsize, item)
+ *             data += stride             # <<<<<<<<<<<<<<
+ * 
+ * 
+ */
+      __pyx_v_data = (__pyx_v_data + __pyx_v_stride);
+    }
+  }
+  __pyx_L3:;
+
+  /* "View.MemoryView":1404
+ * 
+ * @cname('__pyx_memoryview__slice_assign_scalar')
+ * cdef void _slice_assign_scalar(char *data, Py_ssize_t *shape,             # <<<<<<<<<<<<<<
+ *                               Py_ssize_t *strides, int ndim,
+ *                               size_t itemsize, void *item) nogil:
+ */
+
+  /* function exit code */
+}
+
+/* "(tree fragment)":1
+ * def __pyx_unpickle_Enum(__pyx_type, long __pyx_checksum, __pyx_state):             # <<<<<<<<<<<<<<
+ *     cdef object __pyx_PickleError
+ *     cdef object __pyx_result
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_15View_dot_MemoryView_1__pyx_unpickle_Enum(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyMethodDef __pyx_mdef_15View_dot_MemoryView_1__pyx_unpickle_Enum = {"__pyx_unpickle_Enum", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_15View_dot_MemoryView_1__pyx_unpickle_Enum, METH_VARARGS|METH_KEYWORDS, 0};
+static PyObject *__pyx_pw_15View_dot_MemoryView_1__pyx_unpickle_Enum(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v___pyx_type = 0;
+  long __pyx_v___pyx_checksum;
+  PyObject *__pyx_v___pyx_state = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__pyx_unpickle_Enum (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_type,&__pyx_n_s_pyx_checksum,&__pyx_n_s_pyx_state,0};
+    PyObject* values[3] = {0,0,0};
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_type)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
+        case  1:
+        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_checksum)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_Enum", 1, 3, 3, 1); __PYX_ERR(1, 1, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  2:
+        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_state)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_Enum", 1, 3, 3, 2); __PYX_ERR(1, 1, __pyx_L3_error)
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__pyx_unpickle_Enum") < 0)) __PYX_ERR(1, 1, __pyx_L3_error)
+      }
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
+      goto __pyx_L5_argtuple_error;
+    } else {
+      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+    }
+    __pyx_v___pyx_type = values[0];
+    __pyx_v___pyx_checksum = __Pyx_PyInt_As_long(values[1]); if (unlikely((__pyx_v___pyx_checksum == (long)-1) && PyErr_Occurred())) __PYX_ERR(1, 1, __pyx_L3_error)
+    __pyx_v___pyx_state = values[2];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_Enum", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 1, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("View.MemoryView.__pyx_unpickle_Enum", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_15View_dot_MemoryView___pyx_unpickle_Enum(__pyx_self, __pyx_v___pyx_type, __pyx_v___pyx_checksum, __pyx_v___pyx_state);
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_15View_dot_MemoryView___pyx_unpickle_Enum(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state) {
+  PyObject *__pyx_v___pyx_PickleError = 0;
+  PyObject *__pyx_v___pyx_result = 0;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
+  PyObject *__pyx_t_5 = NULL;
+  int __pyx_t_6;
+  __Pyx_RefNannySetupContext("__pyx_unpickle_Enum", 0);
+
+  /* "(tree fragment)":4
+ *     cdef object __pyx_PickleError
+ *     cdef object __pyx_result
+ *     if __pyx_checksum != 0xb068931:             # <<<<<<<<<<<<<<
+ *         from pickle import PickleError as __pyx_PickleError
+ *         raise __pyx_PickleError("Incompatible checksums (%s vs 0xb068931 = (name))" % __pyx_checksum)
+ */
+  __pyx_t_1 = ((__pyx_v___pyx_checksum != 0xb068931) != 0);
+  if (__pyx_t_1) {
+
+    /* "(tree fragment)":5
+ *     cdef object __pyx_result
+ *     if __pyx_checksum != 0xb068931:
+ *         from pickle import PickleError as __pyx_PickleError             # <<<<<<<<<<<<<<
+ *         raise __pyx_PickleError("Incompatible checksums (%s vs 0xb068931 = (name))" % __pyx_checksum)
+ *     __pyx_result = Enum.__new__(__pyx_type)
+ */
+    __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_2);
+    __Pyx_INCREF(__pyx_n_s_PickleError);
+    __Pyx_GIVEREF(__pyx_n_s_PickleError);
+    PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_PickleError);
+    __pyx_t_3 = __Pyx_Import(__pyx_n_s_pickle, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 5, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+    __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_PickleError); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_2);
+    __Pyx_INCREF(__pyx_t_2);
+    __pyx_v___pyx_PickleError = __pyx_t_2;
+    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+
+    /* "(tree fragment)":6
+ *     if __pyx_checksum != 0xb068931:
+ *         from pickle import PickleError as __pyx_PickleError
+ *         raise __pyx_PickleError("Incompatible checksums (%s vs 0xb068931 = (name))" % __pyx_checksum)             # <<<<<<<<<<<<<<
+ *     __pyx_result = Enum.__new__(__pyx_type)
+ *     if __pyx_state is not None:
+ */
+    __pyx_t_2 = __Pyx_PyInt_From_long(__pyx_v___pyx_checksum); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 6, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_2);
+    __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_Incompatible_checksums_s_vs_0xb0, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 6, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
+    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+    __Pyx_INCREF(__pyx_v___pyx_PickleError);
+    __pyx_t_2 = __pyx_v___pyx_PickleError; __pyx_t_5 = NULL;
+    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
+      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2);
+      if (likely(__pyx_t_5)) {
+        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
+        __Pyx_INCREF(__pyx_t_5);
+        __Pyx_INCREF(function);
+        __Pyx_DECREF_SET(__pyx_t_2, function);
+      }
+    }
+    __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_5, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_4);
+    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 6, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+    __Pyx_Raise(__pyx_t_3, 0, 0, 0);
+    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+    __PYX_ERR(1, 6, __pyx_L1_error)
+
+    /* "(tree fragment)":4
+ *     cdef object __pyx_PickleError
+ *     cdef object __pyx_result
+ *     if __pyx_checksum != 0xb068931:             # <<<<<<<<<<<<<<
+ *         from pickle import PickleError as __pyx_PickleError
+ *         raise __pyx_PickleError("Incompatible checksums (%s vs 0xb068931 = (name))" % __pyx_checksum)
+ */
+  }
+
+  /* "(tree fragment)":7
+ *         from pickle import PickleError as __pyx_PickleError
+ *         raise __pyx_PickleError("Incompatible checksums (%s vs 0xb068931 = (name))" % __pyx_checksum)
+ *     __pyx_result = Enum.__new__(__pyx_type)             # <<<<<<<<<<<<<<
+ *     if __pyx_state is not None:
+ *         __pyx_unpickle_Enum__set_state(<Enum> __pyx_result, __pyx_state)
+ */
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_MemviewEnum_type), __pyx_n_s_new); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 7, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_4 = NULL;
+  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
+    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2);
+    if (likely(__pyx_t_4)) {
+      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
+      __Pyx_INCREF(__pyx_t_4);
+      __Pyx_INCREF(function);
+      __Pyx_DECREF_SET(__pyx_t_2, function);
+    }
+  }
+  __pyx_t_3 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_4, __pyx_v___pyx_type) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v___pyx_type);
+  __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
+  if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 7, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_v___pyx_result = __pyx_t_3;
+  __pyx_t_3 = 0;
+
+  /* "(tree fragment)":8
+ *         raise __pyx_PickleError("Incompatible checksums (%s vs 0xb068931 = (name))" % __pyx_checksum)
+ *     __pyx_result = Enum.__new__(__pyx_type)
+ *     if __pyx_state is not None:             # <<<<<<<<<<<<<<
+ *         __pyx_unpickle_Enum__set_state(<Enum> __pyx_result, __pyx_state)
+ *     return __pyx_result
+ */
+  __pyx_t_1 = (__pyx_v___pyx_state != Py_None);
+  __pyx_t_6 = (__pyx_t_1 != 0);
+  if (__pyx_t_6) {
+
+    /* "(tree fragment)":9
+ *     __pyx_result = Enum.__new__(__pyx_type)
+ *     if __pyx_state is not None:
+ *         __pyx_unpickle_Enum__set_state(<Enum> __pyx_result, __pyx_state)             # <<<<<<<<<<<<<<
+ *     return __pyx_result
+ * cdef __pyx_unpickle_Enum__set_state(Enum __pyx_result, tuple __pyx_state):
+ */
+    if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v___pyx_state)->tp_name), 0))) __PYX_ERR(1, 9, __pyx_L1_error)
+    __pyx_t_3 = __pyx_unpickle_Enum__set_state(((struct __pyx_MemviewEnum_obj *)__pyx_v___pyx_result), ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 9, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+
+    /* "(tree fragment)":8
+ *         raise __pyx_PickleError("Incompatible checksums (%s vs 0xb068931 = (name))" % __pyx_checksum)
+ *     __pyx_result = Enum.__new__(__pyx_type)
+ *     if __pyx_state is not None:             # <<<<<<<<<<<<<<
+ *         __pyx_unpickle_Enum__set_state(<Enum> __pyx_result, __pyx_state)
+ *     return __pyx_result
+ */
+  }
+
+  /* "(tree fragment)":10
+ *     if __pyx_state is not None:
+ *         __pyx_unpickle_Enum__set_state(<Enum> __pyx_result, __pyx_state)
+ *     return __pyx_result             # <<<<<<<<<<<<<<
+ * cdef __pyx_unpickle_Enum__set_state(Enum __pyx_result, tuple __pyx_state):
+ *     __pyx_result.name = __pyx_state[0]
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(__pyx_v___pyx_result);
+  __pyx_r = __pyx_v___pyx_result;
+  goto __pyx_L0;
+
+  /* "(tree fragment)":1
+ * def __pyx_unpickle_Enum(__pyx_type, long __pyx_checksum, __pyx_state):             # <<<<<<<<<<<<<<
+ *     cdef object __pyx_PickleError
+ *     cdef object __pyx_result
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_XDECREF(__pyx_t_5);
+  __Pyx_AddTraceback("View.MemoryView.__pyx_unpickle_Enum", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XDECREF(__pyx_v___pyx_PickleError);
+  __Pyx_XDECREF(__pyx_v___pyx_result);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "(tree fragment)":11
+ *         __pyx_unpickle_Enum__set_state(<Enum> __pyx_result, __pyx_state)
+ *     return __pyx_result
+ * cdef __pyx_unpickle_Enum__set_state(Enum __pyx_result, tuple __pyx_state):             # <<<<<<<<<<<<<<
+ *     __pyx_result.name = __pyx_state[0]
+ *     if len(__pyx_state) > 1 and hasattr(__pyx_result, '__dict__'):
+ */
+
+static PyObject *__pyx_unpickle_Enum__set_state(struct __pyx_MemviewEnum_obj *__pyx_v___pyx_result, PyObject *__pyx_v___pyx_state) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_2;
+  Py_ssize_t __pyx_t_3;
+  int __pyx_t_4;
+  int __pyx_t_5;
+  PyObject *__pyx_t_6 = NULL;
+  PyObject *__pyx_t_7 = NULL;
+  PyObject *__pyx_t_8 = NULL;
+  __Pyx_RefNannySetupContext("__pyx_unpickle_Enum__set_state", 0);
+
+  /* "(tree fragment)":12
+ *     return __pyx_result
+ * cdef __pyx_unpickle_Enum__set_state(Enum __pyx_result, tuple __pyx_state):
+ *     __pyx_result.name = __pyx_state[0]             # <<<<<<<<<<<<<<
+ *     if len(__pyx_state) > 1 and hasattr(__pyx_result, '__dict__'):
+ *         __pyx_result.__dict__.update(__pyx_state[1])
+ */
+  if (unlikely(__pyx_v___pyx_state == Py_None)) {
+    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
+    __PYX_ERR(1, 12, __pyx_L1_error)
+  }
+  __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_GIVEREF(__pyx_t_1);
+  __Pyx_GOTREF(__pyx_v___pyx_result->name);
+  __Pyx_DECREF(__pyx_v___pyx_result->name);
+  __pyx_v___pyx_result->name = __pyx_t_1;
+  __pyx_t_1 = 0;
+
+  /* "(tree fragment)":13
+ * cdef __pyx_unpickle_Enum__set_state(Enum __pyx_result, tuple __pyx_state):
+ *     __pyx_result.name = __pyx_state[0]
+ *     if len(__pyx_state) > 1 and hasattr(__pyx_result, '__dict__'):             # <<<<<<<<<<<<<<
+ *         __pyx_result.__dict__.update(__pyx_state[1])
+ */
+  if (unlikely(__pyx_v___pyx_state == Py_None)) {
+    PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
+    __PYX_ERR(1, 13, __pyx_L1_error)
+  }
+  __pyx_t_3 = PyTuple_GET_SIZE(__pyx_v___pyx_state); if (unlikely(__pyx_t_3 == ((Py_ssize_t)-1))) __PYX_ERR(1, 13, __pyx_L1_error)
+  __pyx_t_4 = ((__pyx_t_3 > 1) != 0);
+  if (__pyx_t_4) {
+  } else {
+    __pyx_t_2 = __pyx_t_4;
+    goto __pyx_L4_bool_binop_done;
+  }
+  __pyx_t_4 = __Pyx_HasAttr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(1, 13, __pyx_L1_error)
+  __pyx_t_5 = (__pyx_t_4 != 0);
+  __pyx_t_2 = __pyx_t_5;
+  __pyx_L4_bool_binop_done:;
+  if (__pyx_t_2) {
+
+    /* "(tree fragment)":14
+ *     __pyx_result.name = __pyx_state[0]
+ *     if len(__pyx_state) > 1 and hasattr(__pyx_result, '__dict__'):
+ *         __pyx_result.__dict__.update(__pyx_state[1])             # <<<<<<<<<<<<<<
+ */
+    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 14, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_6);
+    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_update); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 14, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_7);
+    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+    if (unlikely(__pyx_v___pyx_state == Py_None)) {
+      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
+      __PYX_ERR(1, 14, __pyx_L1_error)
+    }
+    __pyx_t_6 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 14, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_6);
+    __pyx_t_8 = NULL;
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) {
+      __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_7);
+      if (likely(__pyx_t_8)) {
+        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
+        __Pyx_INCREF(__pyx_t_8);
+        __Pyx_INCREF(function);
+        __Pyx_DECREF_SET(__pyx_t_7, function);
+      }
+    }
+    __pyx_t_1 = (__pyx_t_8) ? __Pyx_PyObject_Call2Args(__pyx_t_7, __pyx_t_8, __pyx_t_6) : __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_6);
+    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
+    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+    if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 14, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_1);
+    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+
+    /* "(tree fragment)":13
+ * cdef __pyx_unpickle_Enum__set_state(Enum __pyx_result, tuple __pyx_state):
+ *     __pyx_result.name = __pyx_state[0]
+ *     if len(__pyx_state) > 1 and hasattr(__pyx_result, '__dict__'):             # <<<<<<<<<<<<<<
+ *         __pyx_result.__dict__.update(__pyx_state[1])
+ */
+  }
+
+  /* "(tree fragment)":11
+ *         __pyx_unpickle_Enum__set_state(<Enum> __pyx_result, __pyx_state)
+ *     return __pyx_result
+ * cdef __pyx_unpickle_Enum__set_state(Enum __pyx_result, tuple __pyx_state):             # <<<<<<<<<<<<<<
+ *     __pyx_result.name = __pyx_state[0]
+ *     if len(__pyx_state) > 1 and hasattr(__pyx_result, '__dict__'):
+ */
+
+  /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_6);
+  __Pyx_XDECREF(__pyx_t_7);
+  __Pyx_XDECREF(__pyx_t_8);
+  __Pyx_AddTraceback("View.MemoryView.__pyx_unpickle_Enum__set_state", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = 0;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+static struct __pyx_vtabstruct_array __pyx_vtable_array;
+
+static PyObject *__pyx_tp_new_array(PyTypeObject *t, PyObject *a, PyObject *k) {
+  struct __pyx_array_obj *p;
+  PyObject *o;
+  if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) {
+    o = (*t->tp_alloc)(t, 0);
+  } else {
+    o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
+  }
+  if (unlikely(!o)) return 0;
+  p = ((struct __pyx_array_obj *)o);
+  p->__pyx_vtab = __pyx_vtabptr_array;
+  p->mode = ((PyObject*)Py_None); Py_INCREF(Py_None);
+  p->_format = ((PyObject*)Py_None); Py_INCREF(Py_None);
+  if (unlikely(__pyx_array___cinit__(o, a, k) < 0)) goto bad;
+  return o;
+  bad:
+  Py_DECREF(o); o = 0;
+  return NULL;
+}
+
+static void __pyx_tp_dealloc_array(PyObject *o) {
+  struct __pyx_array_obj *p = (struct __pyx_array_obj *)o;
+  #if CYTHON_USE_TP_FINALIZE
+  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && (!PyType_IS_GC(Py_TYPE(o)) || !_PyGC_FINALIZED(o))) {
+    if (PyObject_CallFinalizerFromDealloc(o)) return;
+  }
+  #endif
+  {
+    PyObject *etype, *eval, *etb;
+    PyErr_Fetch(&etype, &eval, &etb);
+    ++Py_REFCNT(o);
+    __pyx_array___dealloc__(o);
+    --Py_REFCNT(o);
+    PyErr_Restore(etype, eval, etb);
+  }
+  Py_CLEAR(p->mode);
+  Py_CLEAR(p->_format);
+  (*Py_TYPE(o)->tp_free)(o);
+}
+static PyObject *__pyx_sq_item_array(PyObject *o, Py_ssize_t i) {
+  PyObject *r;
+  PyObject *x = PyInt_FromSsize_t(i); if(!x) return 0;
+  r = Py_TYPE(o)->tp_as_mapping->mp_subscript(o, x);
+  Py_DECREF(x);
+  return r;
+}
+
+static int __pyx_mp_ass_subscript_array(PyObject *o, PyObject *i, PyObject *v) {
+  if (v) {
+    return __pyx_array___setitem__(o, i, v);
+  }
+  else {
+    PyErr_Format(PyExc_NotImplementedError,
+      "Subscript deletion not supported by %.200s", Py_TYPE(o)->tp_name);
+    return -1;
+  }
+}
+
+static PyObject *__pyx_tp_getattro_array(PyObject *o, PyObject *n) {
+  PyObject *v = __Pyx_PyObject_GenericGetAttr(o, n);
+  if (!v && PyErr_ExceptionMatches(PyExc_AttributeError)) {
+    PyErr_Clear();
+    v = __pyx_array___getattr__(o, n);
+  }
+  return v;
+}
+
+static PyObject *__pyx_getprop___pyx_array_memview(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_15View_dot_MemoryView_5array_7memview_1__get__(o);
+}
+
+static PyMethodDef __pyx_methods_array[] = {
+  {"__getattr__", (PyCFunction)__pyx_array___getattr__, METH_O|METH_COEXIST, 0},
+  {"__reduce_cython__", (PyCFunction)__pyx_pw___pyx_array_1__reduce_cython__, METH_NOARGS, 0},
+  {"__setstate_cython__", (PyCFunction)__pyx_pw___pyx_array_3__setstate_cython__, METH_O, 0},
+  {0, 0, 0, 0}
+};
+
+static struct PyGetSetDef __pyx_getsets_array[] = {
+  {(char *)"memview", __pyx_getprop___pyx_array_memview, 0, (char *)0, 0},
+  {0, 0, 0, 0, 0}
+};
+
+static PySequenceMethods __pyx_tp_as_sequence_array = {
+  __pyx_array___len__, /*sq_length*/
+  0, /*sq_concat*/
+  0, /*sq_repeat*/
+  __pyx_sq_item_array, /*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_array = {
+  __pyx_array___len__, /*mp_length*/
+  __pyx_array___getitem__, /*mp_subscript*/
+  __pyx_mp_ass_subscript_array, /*mp_ass_subscript*/
+};
+
+static PyBufferProcs __pyx_tp_as_buffer_array = {
+  #if PY_MAJOR_VERSION < 3
+  0, /*bf_getreadbuffer*/
+  #endif
+  #if PY_MAJOR_VERSION < 3
+  0, /*bf_getwritebuffer*/
+  #endif
+  #if PY_MAJOR_VERSION < 3
+  0, /*bf_getsegcount*/
+  #endif
+  #if PY_MAJOR_VERSION < 3
+  0, /*bf_getcharbuffer*/
+  #endif
+  __pyx_array_getbuffer, /*bf_getbuffer*/
+  0, /*bf_releasebuffer*/
+};
+
+static PyTypeObject __pyx_type___pyx_array = {
+  PyVarObject_HEAD_INIT(0, 0)
+  "pystencils.boundaries.createindexlistcython.array", /*tp_name*/
+  sizeof(struct __pyx_array_obj), /*tp_basicsize*/
+  0, /*tp_itemsize*/
+  __pyx_tp_dealloc_array, /*tp_dealloc*/
+  0, /*tp_print*/
+  0, /*tp_getattr*/
+  0, /*tp_setattr*/
+  #if PY_MAJOR_VERSION < 3
+  0, /*tp_compare*/
+  #endif
+  #if PY_MAJOR_VERSION >= 3
+  0, /*tp_as_async*/
+  #endif
+  0, /*tp_repr*/
+  0, /*tp_as_number*/
+  &__pyx_tp_as_sequence_array, /*tp_as_sequence*/
+  &__pyx_tp_as_mapping_array, /*tp_as_mapping*/
+  0, /*tp_hash*/
+  0, /*tp_call*/
+  0, /*tp_str*/
+  __pyx_tp_getattro_array, /*tp_getattro*/
+  0, /*tp_setattro*/
+  &__pyx_tp_as_buffer_array, /*tp_as_buffer*/
+  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE, /*tp_flags*/
+  0, /*tp_doc*/
+  0, /*tp_traverse*/
+  0, /*tp_clear*/
+  0, /*tp_richcompare*/
+  0, /*tp_weaklistoffset*/
+  0, /*tp_iter*/
+  0, /*tp_iternext*/
+  __pyx_methods_array, /*tp_methods*/
+  0, /*tp_members*/
+  __pyx_getsets_array, /*tp_getset*/
+  0, /*tp_base*/
+  0, /*tp_dict*/
+  0, /*tp_descr_get*/
+  0, /*tp_descr_set*/
+  0, /*tp_dictoffset*/
+  0, /*tp_init*/
+  0, /*tp_alloc*/
+  __pyx_tp_new_array, /*tp_new*/
+  0, /*tp_free*/
+  0, /*tp_is_gc*/
+  0, /*tp_bases*/
+  0, /*tp_mro*/
+  0, /*tp_cache*/
+  0, /*tp_subclasses*/
+  0, /*tp_weaklist*/
+  0, /*tp_del*/
+  0, /*tp_version_tag*/
+  #if PY_VERSION_HEX >= 0x030400a1
+  0, /*tp_finalize*/
+  #endif
+};
+
+static PyObject *__pyx_tp_new_Enum(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
+  struct __pyx_MemviewEnum_obj *p;
+  PyObject *o;
+  if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) {
+    o = (*t->tp_alloc)(t, 0);
+  } else {
+    o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
+  }
+  if (unlikely(!o)) return 0;
+  p = ((struct __pyx_MemviewEnum_obj *)o);
+  p->name = Py_None; Py_INCREF(Py_None);
+  return o;
+}
+
+static void __pyx_tp_dealloc_Enum(PyObject *o) {
+  struct __pyx_MemviewEnum_obj *p = (struct __pyx_MemviewEnum_obj *)o;
+  #if CYTHON_USE_TP_FINALIZE
+  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
+    if (PyObject_CallFinalizerFromDealloc(o)) return;
+  }
+  #endif
+  PyObject_GC_UnTrack(o);
+  Py_CLEAR(p->name);
+  (*Py_TYPE(o)->tp_free)(o);
+}
+
+static int __pyx_tp_traverse_Enum(PyObject *o, visitproc v, void *a) {
+  int e;
+  struct __pyx_MemviewEnum_obj *p = (struct __pyx_MemviewEnum_obj *)o;
+  if (p->name) {
+    e = (*v)(p->name, a); if (e) return e;
+  }
+  return 0;
+}
+
+static int __pyx_tp_clear_Enum(PyObject *o) {
+  PyObject* tmp;
+  struct __pyx_MemviewEnum_obj *p = (struct __pyx_MemviewEnum_obj *)o;
+  tmp = ((PyObject*)p->name);
+  p->name = Py_None; Py_INCREF(Py_None);
+  Py_XDECREF(tmp);
+  return 0;
+}
+
+static PyMethodDef __pyx_methods_Enum[] = {
+  {"__reduce_cython__", (PyCFunction)__pyx_pw___pyx_MemviewEnum_1__reduce_cython__, METH_NOARGS, 0},
+  {"__setstate_cython__", (PyCFunction)__pyx_pw___pyx_MemviewEnum_3__setstate_cython__, METH_O, 0},
+  {0, 0, 0, 0}
+};
+
+static PyTypeObject __pyx_type___pyx_MemviewEnum = {
+  PyVarObject_HEAD_INIT(0, 0)
+  "pystencils.boundaries.createindexlistcython.Enum", /*tp_name*/
+  sizeof(struct __pyx_MemviewEnum_obj), /*tp_basicsize*/
+  0, /*tp_itemsize*/
+  __pyx_tp_dealloc_Enum, /*tp_dealloc*/
+  0, /*tp_print*/
+  0, /*tp_getattr*/
+  0, /*tp_setattr*/
+  #if PY_MAJOR_VERSION < 3
+  0, /*tp_compare*/
+  #endif
+  #if PY_MAJOR_VERSION >= 3
+  0, /*tp_as_async*/
+  #endif
+  __pyx_MemviewEnum___repr__, /*tp_repr*/
+  0, /*tp_as_number*/
+  0, /*tp_as_sequence*/
+  0, /*tp_as_mapping*/
+  0, /*tp_hash*/
+  0, /*tp_call*/
+  0, /*tp_str*/
+  0, /*tp_getattro*/
+  0, /*tp_setattro*/
+  0, /*tp_as_buffer*/
+  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
+  0, /*tp_doc*/
+  __pyx_tp_traverse_Enum, /*tp_traverse*/
+  __pyx_tp_clear_Enum, /*tp_clear*/
+  0, /*tp_richcompare*/
+  0, /*tp_weaklistoffset*/
+  0, /*tp_iter*/
+  0, /*tp_iternext*/
+  __pyx_methods_Enum, /*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_MemviewEnum___init__, /*tp_init*/
+  0, /*tp_alloc*/
+  __pyx_tp_new_Enum, /*tp_new*/
+  0, /*tp_free*/
+  0, /*tp_is_gc*/
+  0, /*tp_bases*/
+  0, /*tp_mro*/
+  0, /*tp_cache*/
+  0, /*tp_subclasses*/
+  0, /*tp_weaklist*/
+  0, /*tp_del*/
+  0, /*tp_version_tag*/
+  #if PY_VERSION_HEX >= 0x030400a1
+  0, /*tp_finalize*/
+  #endif
+};
+static struct __pyx_vtabstruct_memoryview __pyx_vtable_memoryview;
+
+static PyObject *__pyx_tp_new_memoryview(PyTypeObject *t, PyObject *a, PyObject *k) {
+  struct __pyx_memoryview_obj *p;
+  PyObject *o;
+  if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) {
+    o = (*t->tp_alloc)(t, 0);
+  } else {
+    o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
+  }
+  if (unlikely(!o)) return 0;
+  p = ((struct __pyx_memoryview_obj *)o);
+  p->__pyx_vtab = __pyx_vtabptr_memoryview;
+  p->obj = Py_None; Py_INCREF(Py_None);
+  p->_size = Py_None; Py_INCREF(Py_None);
+  p->_array_interface = Py_None; Py_INCREF(Py_None);
+  p->view.obj = NULL;
+  if (unlikely(__pyx_memoryview___cinit__(o, a, k) < 0)) goto bad;
+  return o;
+  bad:
+  Py_DECREF(o); o = 0;
+  return NULL;
+}
+
+static void __pyx_tp_dealloc_memoryview(PyObject *o) {
+  struct __pyx_memoryview_obj *p = (struct __pyx_memoryview_obj *)o;
+  #if CYTHON_USE_TP_FINALIZE
+  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
+    if (PyObject_CallFinalizerFromDealloc(o)) return;
+  }
+  #endif
+  PyObject_GC_UnTrack(o);
+  {
+    PyObject *etype, *eval, *etb;
+    PyErr_Fetch(&etype, &eval, &etb);
+    ++Py_REFCNT(o);
+    __pyx_memoryview___dealloc__(o);
+    --Py_REFCNT(o);
+    PyErr_Restore(etype, eval, etb);
+  }
+  Py_CLEAR(p->obj);
+  Py_CLEAR(p->_size);
+  Py_CLEAR(p->_array_interface);
+  (*Py_TYPE(o)->tp_free)(o);
+}
+
+static int __pyx_tp_traverse_memoryview(PyObject *o, visitproc v, void *a) {
+  int e;
+  struct __pyx_memoryview_obj *p = (struct __pyx_memoryview_obj *)o;
+  if (p->obj) {
+    e = (*v)(p->obj, a); if (e) return e;
+  }
+  if (p->_size) {
+    e = (*v)(p->_size, a); if (e) return e;
+  }
+  if (p->_array_interface) {
+    e = (*v)(p->_array_interface, a); if (e) return e;
+  }
+  if (p->view.obj) {
+    e = (*v)(p->view.obj, a); if (e) return e;
+  }
+  return 0;
+}
+
+static int __pyx_tp_clear_memoryview(PyObject *o) {
+  PyObject* tmp;
+  struct __pyx_memoryview_obj *p = (struct __pyx_memoryview_obj *)o;
+  tmp = ((PyObject*)p->obj);
+  p->obj = Py_None; Py_INCREF(Py_None);
+  Py_XDECREF(tmp);
+  tmp = ((PyObject*)p->_size);
+  p->_size = Py_None; Py_INCREF(Py_None);
+  Py_XDECREF(tmp);
+  tmp = ((PyObject*)p->_array_interface);
+  p->_array_interface = Py_None; Py_INCREF(Py_None);
+  Py_XDECREF(tmp);
+  Py_CLEAR(p->view.obj);
+  return 0;
+}
+static PyObject *__pyx_sq_item_memoryview(PyObject *o, Py_ssize_t i) {
+  PyObject *r;
+  PyObject *x = PyInt_FromSsize_t(i); if(!x) return 0;
+  r = Py_TYPE(o)->tp_as_mapping->mp_subscript(o, x);
+  Py_DECREF(x);
+  return r;
+}
+
+static int __pyx_mp_ass_subscript_memoryview(PyObject *o, PyObject *i, PyObject *v) {
+  if (v) {
+    return __pyx_memoryview___setitem__(o, i, v);
+  }
+  else {
+    PyErr_Format(PyExc_NotImplementedError,
+      "Subscript deletion not supported by %.200s", Py_TYPE(o)->tp_name);
+    return -1;
+  }
+}
+
+static PyObject *__pyx_getprop___pyx_memoryview_T(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_15View_dot_MemoryView_10memoryview_1T_1__get__(o);
+}
+
+static PyObject *__pyx_getprop___pyx_memoryview_base(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_15View_dot_MemoryView_10memoryview_4base_1__get__(o);
+}
+
+static PyObject *__pyx_getprop___pyx_memoryview_shape(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_15View_dot_MemoryView_10memoryview_5shape_1__get__(o);
+}
+
+static PyObject *__pyx_getprop___pyx_memoryview_strides(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_15View_dot_MemoryView_10memoryview_7strides_1__get__(o);
+}
+
+static PyObject *__pyx_getprop___pyx_memoryview_suboffsets(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_15View_dot_MemoryView_10memoryview_10suboffsets_1__get__(o);
+}
+
+static PyObject *__pyx_getprop___pyx_memoryview_ndim(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_15View_dot_MemoryView_10memoryview_4ndim_1__get__(o);
+}
+
+static PyObject *__pyx_getprop___pyx_memoryview_itemsize(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_15View_dot_MemoryView_10memoryview_8itemsize_1__get__(o);
+}
+
+static PyObject *__pyx_getprop___pyx_memoryview_nbytes(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_15View_dot_MemoryView_10memoryview_6nbytes_1__get__(o);
+}
+
+static PyObject *__pyx_getprop___pyx_memoryview_size(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_15View_dot_MemoryView_10memoryview_4size_1__get__(o);
+}
+
+static PyMethodDef __pyx_methods_memoryview[] = {
+  {"is_c_contig", (PyCFunction)__pyx_memoryview_is_c_contig, METH_NOARGS, 0},
+  {"is_f_contig", (PyCFunction)__pyx_memoryview_is_f_contig, METH_NOARGS, 0},
+  {"copy", (PyCFunction)__pyx_memoryview_copy, METH_NOARGS, 0},
+  {"copy_fortran", (PyCFunction)__pyx_memoryview_copy_fortran, METH_NOARGS, 0},
+  {"__reduce_cython__", (PyCFunction)__pyx_pw___pyx_memoryview_1__reduce_cython__, METH_NOARGS, 0},
+  {"__setstate_cython__", (PyCFunction)__pyx_pw___pyx_memoryview_3__setstate_cython__, METH_O, 0},
+  {0, 0, 0, 0}
+};
+
+static struct PyGetSetDef __pyx_getsets_memoryview[] = {
+  {(char *)"T", __pyx_getprop___pyx_memoryview_T, 0, (char *)0, 0},
+  {(char *)"base", __pyx_getprop___pyx_memoryview_base, 0, (char *)0, 0},
+  {(char *)"shape", __pyx_getprop___pyx_memoryview_shape, 0, (char *)0, 0},
+  {(char *)"strides", __pyx_getprop___pyx_memoryview_strides, 0, (char *)0, 0},
+  {(char *)"suboffsets", __pyx_getprop___pyx_memoryview_suboffsets, 0, (char *)0, 0},
+  {(char *)"ndim", __pyx_getprop___pyx_memoryview_ndim, 0, (char *)0, 0},
+  {(char *)"itemsize", __pyx_getprop___pyx_memoryview_itemsize, 0, (char *)0, 0},
+  {(char *)"nbytes", __pyx_getprop___pyx_memoryview_nbytes, 0, (char *)0, 0},
+  {(char *)"size", __pyx_getprop___pyx_memoryview_size, 0, (char *)0, 0},
+  {0, 0, 0, 0, 0}
+};
+
+static PySequenceMethods __pyx_tp_as_sequence_memoryview = {
+  __pyx_memoryview___len__, /*sq_length*/
+  0, /*sq_concat*/
+  0, /*sq_repeat*/
+  __pyx_sq_item_memoryview, /*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_memoryview = {
+  __pyx_memoryview___len__, /*mp_length*/
+  __pyx_memoryview___getitem__, /*mp_subscript*/
+  __pyx_mp_ass_subscript_memoryview, /*mp_ass_subscript*/
+};
+
+static PyBufferProcs __pyx_tp_as_buffer_memoryview = {
+  #if PY_MAJOR_VERSION < 3
+  0, /*bf_getreadbuffer*/
+  #endif
+  #if PY_MAJOR_VERSION < 3
+  0, /*bf_getwritebuffer*/
+  #endif
+  #if PY_MAJOR_VERSION < 3
+  0, /*bf_getsegcount*/
+  #endif
+  #if PY_MAJOR_VERSION < 3
+  0, /*bf_getcharbuffer*/
+  #endif
+  __pyx_memoryview_getbuffer, /*bf_getbuffer*/
+  0, /*bf_releasebuffer*/
+};
+
+static PyTypeObject __pyx_type___pyx_memoryview = {
+  PyVarObject_HEAD_INIT(0, 0)
+  "pystencils.boundaries.createindexlistcython.memoryview", /*tp_name*/
+  sizeof(struct __pyx_memoryview_obj), /*tp_basicsize*/
+  0, /*tp_itemsize*/
+  __pyx_tp_dealloc_memoryview, /*tp_dealloc*/
+  0, /*tp_print*/
+  0, /*tp_getattr*/
+  0, /*tp_setattr*/
+  #if PY_MAJOR_VERSION < 3
+  0, /*tp_compare*/
+  #endif
+  #if PY_MAJOR_VERSION >= 3
+  0, /*tp_as_async*/
+  #endif
+  __pyx_memoryview___repr__, /*tp_repr*/
+  0, /*tp_as_number*/
+  &__pyx_tp_as_sequence_memoryview, /*tp_as_sequence*/
+  &__pyx_tp_as_mapping_memoryview, /*tp_as_mapping*/
+  0, /*tp_hash*/
+  0, /*tp_call*/
+  __pyx_memoryview___str__, /*tp_str*/
+  0, /*tp_getattro*/
+  0, /*tp_setattro*/
+  &__pyx_tp_as_buffer_memoryview, /*tp_as_buffer*/
+  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
+  0, /*tp_doc*/
+  __pyx_tp_traverse_memoryview, /*tp_traverse*/
+  __pyx_tp_clear_memoryview, /*tp_clear*/
+  0, /*tp_richcompare*/
+  0, /*tp_weaklistoffset*/
+  0, /*tp_iter*/
+  0, /*tp_iternext*/
+  __pyx_methods_memoryview, /*tp_methods*/
+  0, /*tp_members*/
+  __pyx_getsets_memoryview, /*tp_getset*/
+  0, /*tp_base*/
+  0, /*tp_dict*/
+  0, /*tp_descr_get*/
+  0, /*tp_descr_set*/
+  0, /*tp_dictoffset*/
+  0, /*tp_init*/
+  0, /*tp_alloc*/
+  __pyx_tp_new_memoryview, /*tp_new*/
+  0, /*tp_free*/
+  0, /*tp_is_gc*/
+  0, /*tp_bases*/
+  0, /*tp_mro*/
+  0, /*tp_cache*/
+  0, /*tp_subclasses*/
+  0, /*tp_weaklist*/
+  0, /*tp_del*/
+  0, /*tp_version_tag*/
+  #if PY_VERSION_HEX >= 0x030400a1
+  0, /*tp_finalize*/
+  #endif
+};
+static struct __pyx_vtabstruct__memoryviewslice __pyx_vtable__memoryviewslice;
+
+static PyObject *__pyx_tp_new__memoryviewslice(PyTypeObject *t, PyObject *a, PyObject *k) {
+  struct __pyx_memoryviewslice_obj *p;
+  PyObject *o = __pyx_tp_new_memoryview(t, a, k);
+  if (unlikely(!o)) return 0;
+  p = ((struct __pyx_memoryviewslice_obj *)o);
+  p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_memoryview*)__pyx_vtabptr__memoryviewslice;
+  p->from_object = Py_None; Py_INCREF(Py_None);
+  p->from_slice.memview = NULL;
+  return o;
+}
+
+static void __pyx_tp_dealloc__memoryviewslice(PyObject *o) {
+  struct __pyx_memoryviewslice_obj *p = (struct __pyx_memoryviewslice_obj *)o;
+  #if CYTHON_USE_TP_FINALIZE
+  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
+    if (PyObject_CallFinalizerFromDealloc(o)) return;
+  }
+  #endif
+  PyObject_GC_UnTrack(o);
+  {
+    PyObject *etype, *eval, *etb;
+    PyErr_Fetch(&etype, &eval, &etb);
+    ++Py_REFCNT(o);
+    __pyx_memoryviewslice___dealloc__(o);
+    --Py_REFCNT(o);
+    PyErr_Restore(etype, eval, etb);
+  }
+  Py_CLEAR(p->from_object);
+  PyObject_GC_Track(o);
+  __pyx_tp_dealloc_memoryview(o);
+}
+
+static int __pyx_tp_traverse__memoryviewslice(PyObject *o, visitproc v, void *a) {
+  int e;
+  struct __pyx_memoryviewslice_obj *p = (struct __pyx_memoryviewslice_obj *)o;
+  e = __pyx_tp_traverse_memoryview(o, v, a); if (e) return e;
+  if (p->from_object) {
+    e = (*v)(p->from_object, a); if (e) return e;
+  }
+  return 0;
+}
+
+static int __pyx_tp_clear__memoryviewslice(PyObject *o) {
+  PyObject* tmp;
+  struct __pyx_memoryviewslice_obj *p = (struct __pyx_memoryviewslice_obj *)o;
+  __pyx_tp_clear_memoryview(o);
+  tmp = ((PyObject*)p->from_object);
+  p->from_object = Py_None; Py_INCREF(Py_None);
+  Py_XDECREF(tmp);
+  __PYX_XDEC_MEMVIEW(&p->from_slice, 1);
+  return 0;
+}
+
+static PyObject *__pyx_getprop___pyx_memoryviewslice_base(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_15View_dot_MemoryView_16_memoryviewslice_4base_1__get__(o);
+}
+
+static PyMethodDef __pyx_methods__memoryviewslice[] = {
+  {"__reduce_cython__", (PyCFunction)__pyx_pw___pyx_memoryviewslice_1__reduce_cython__, METH_NOARGS, 0},
+  {"__setstate_cython__", (PyCFunction)__pyx_pw___pyx_memoryviewslice_3__setstate_cython__, METH_O, 0},
+  {0, 0, 0, 0}
+};
+
+static struct PyGetSetDef __pyx_getsets__memoryviewslice[] = {
+  {(char *)"base", __pyx_getprop___pyx_memoryviewslice_base, 0, (char *)0, 0},
+  {0, 0, 0, 0, 0}
+};
+
+static PyTypeObject __pyx_type___pyx_memoryviewslice = {
+  PyVarObject_HEAD_INIT(0, 0)
+  "pystencils.boundaries.createindexlistcython._memoryviewslice", /*tp_name*/
+  sizeof(struct __pyx_memoryviewslice_obj), /*tp_basicsize*/
+  0, /*tp_itemsize*/
+  __pyx_tp_dealloc__memoryviewslice, /*tp_dealloc*/
+  0, /*tp_print*/
+  0, /*tp_getattr*/
+  0, /*tp_setattr*/
+  #if PY_MAJOR_VERSION < 3
+  0, /*tp_compare*/
+  #endif
+  #if PY_MAJOR_VERSION >= 3
+  0, /*tp_as_async*/
+  #endif
+  #if CYTHON_COMPILING_IN_PYPY
+  __pyx_memoryview___repr__, /*tp_repr*/
+  #else
+  0, /*tp_repr*/
+  #endif
+  0, /*tp_as_number*/
+  0, /*tp_as_sequence*/
+  0, /*tp_as_mapping*/
+  0, /*tp_hash*/
+  0, /*tp_call*/
+  #if CYTHON_COMPILING_IN_PYPY
+  __pyx_memoryview___str__, /*tp_str*/
+  #else
+  0, /*tp_str*/
+  #endif
+  0, /*tp_getattro*/
+  0, /*tp_setattro*/
+  0, /*tp_as_buffer*/
+  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
+  "Internal class for passing memoryview slices to Python", /*tp_doc*/
+  __pyx_tp_traverse__memoryviewslice, /*tp_traverse*/
+  __pyx_tp_clear__memoryviewslice, /*tp_clear*/
+  0, /*tp_richcompare*/
+  0, /*tp_weaklistoffset*/
+  0, /*tp_iter*/
+  0, /*tp_iternext*/
+  __pyx_methods__memoryviewslice, /*tp_methods*/
+  0, /*tp_members*/
+  __pyx_getsets__memoryviewslice, /*tp_getset*/
+  0, /*tp_base*/
+  0, /*tp_dict*/
+  0, /*tp_descr_get*/
+  0, /*tp_descr_set*/
+  0, /*tp_dictoffset*/
+  0, /*tp_init*/
+  0, /*tp_alloc*/
+  __pyx_tp_new__memoryviewslice, /*tp_new*/
+  0, /*tp_free*/
+  0, /*tp_is_gc*/
+  0, /*tp_bases*/
+  0, /*tp_mro*/
+  0, /*tp_cache*/
+  0, /*tp_subclasses*/
+  0, /*tp_weaklist*/
+  0, /*tp_del*/
+  0, /*tp_version_tag*/
+  #if PY_VERSION_HEX >= 0x030400a1
+  0, /*tp_finalize*/
+  #endif
+};
+
+static PyMethodDef __pyx_methods[] = {
+  {0, 0, 0, 0}
+};
+
+#if PY_MAJOR_VERSION >= 3
+#if CYTHON_PEP489_MULTI_PHASE_INIT
+static PyObject* __pyx_pymod_create(PyObject *spec, PyModuleDef *def); /*proto*/
+static int __pyx_pymod_exec_createindexlistcython(PyObject* module); /*proto*/
+static PyModuleDef_Slot __pyx_moduledef_slots[] = {
+  {Py_mod_create, (void*)__pyx_pymod_create},
+  {Py_mod_exec, (void*)__pyx_pymod_exec_createindexlistcython},
+  {0, NULL}
+};
+#endif
+
+static struct PyModuleDef __pyx_moduledef = {
+    PyModuleDef_HEAD_INIT,
+    "createindexlistcython",
+    0, /* m_doc */
+  #if CYTHON_PEP489_MULTI_PHASE_INIT
+    0, /* m_size */
+  #else
+    -1, /* m_size */
+  #endif
+    __pyx_methods /* m_methods */,
+  #if CYTHON_PEP489_MULTI_PHASE_INIT
+    __pyx_moduledef_slots, /* m_slots */
+  #else
+    NULL, /* m_reload */
+  #endif
+    NULL, /* m_traverse */
+    NULL, /* m_clear */
+    NULL /* m_free */
+};
+#endif
+#ifndef CYTHON_SMALL_CODE
+#if defined(__clang__)
+    #define CYTHON_SMALL_CODE
+#elif defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3))
+    #define CYTHON_SMALL_CODE __attribute__((cold))
+#else
+    #define CYTHON_SMALL_CODE
+#endif
+#endif
+
+static __Pyx_StringTabEntry __pyx_string_tab[] = {
+  {&__pyx_kp_s_, __pyx_k_, sizeof(__pyx_k_), 0, 0, 1, 0},
+  {&__pyx_n_s_ASCII, __pyx_k_ASCII, sizeof(__pyx_k_ASCII), 0, 0, 1, 1},
+  {&__pyx_kp_s_Buffer_view_does_not_expose_stri, __pyx_k_Buffer_view_does_not_expose_stri, sizeof(__pyx_k_Buffer_view_does_not_expose_stri), 0, 0, 1, 0},
+  {&__pyx_kp_s_Can_only_create_a_buffer_that_is, __pyx_k_Can_only_create_a_buffer_that_is, sizeof(__pyx_k_Can_only_create_a_buffer_that_is), 0, 0, 1, 0},
+  {&__pyx_kp_s_Cannot_assign_to_read_only_memor, __pyx_k_Cannot_assign_to_read_only_memor, sizeof(__pyx_k_Cannot_assign_to_read_only_memor), 0, 0, 1, 0},
+  {&__pyx_kp_s_Cannot_create_writable_memory_vi, __pyx_k_Cannot_create_writable_memory_vi, sizeof(__pyx_k_Cannot_create_writable_memory_vi), 0, 0, 1, 0},
+  {&__pyx_kp_s_Cannot_index_with_type_s, __pyx_k_Cannot_index_with_type_s, sizeof(__pyx_k_Cannot_index_with_type_s), 0, 0, 1, 0},
+  {&__pyx_n_s_Ellipsis, __pyx_k_Ellipsis, sizeof(__pyx_k_Ellipsis), 0, 0, 1, 1},
+  {&__pyx_kp_s_Empty_shape_tuple_for_cython_arr, __pyx_k_Empty_shape_tuple_for_cython_arr, sizeof(__pyx_k_Empty_shape_tuple_for_cython_arr), 0, 0, 1, 0},
+  {&__pyx_kp_s_Expected_at_least_d_argument_s_g, __pyx_k_Expected_at_least_d_argument_s_g, sizeof(__pyx_k_Expected_at_least_d_argument_s_g), 0, 0, 1, 0},
+  {&__pyx_kp_s_Function_call_with_ambiguous_arg, __pyx_k_Function_call_with_ambiguous_arg, sizeof(__pyx_k_Function_call_with_ambiguous_arg), 0, 0, 1, 0},
+  {&__pyx_kp_s_Incompatible_checksums_s_vs_0xb0, __pyx_k_Incompatible_checksums_s_vs_0xb0, sizeof(__pyx_k_Incompatible_checksums_s_vs_0xb0), 0, 0, 1, 0},
+  {&__pyx_n_s_IndexError, __pyx_k_IndexError, sizeof(__pyx_k_IndexError), 0, 0, 1, 1},
+  {&__pyx_kp_s_Indirect_dimensions_not_supporte, __pyx_k_Indirect_dimensions_not_supporte, sizeof(__pyx_k_Indirect_dimensions_not_supporte), 0, 0, 1, 0},
+  {&__pyx_kp_s_Invalid_mode_expected_c_or_fortr, __pyx_k_Invalid_mode_expected_c_or_fortr, sizeof(__pyx_k_Invalid_mode_expected_c_or_fortr), 0, 0, 1, 0},
+  {&__pyx_kp_s_Invalid_shape_in_axis_d_d, __pyx_k_Invalid_shape_in_axis_d_d, sizeof(__pyx_k_Invalid_shape_in_axis_d_d), 0, 0, 1, 0},
+  {&__pyx_n_s_MemoryError, __pyx_k_MemoryError, sizeof(__pyx_k_MemoryError), 0, 0, 1, 1},
+  {&__pyx_kp_s_MemoryView_of_r_at_0x_x, __pyx_k_MemoryView_of_r_at_0x_x, sizeof(__pyx_k_MemoryView_of_r_at_0x_x), 0, 0, 1, 0},
+  {&__pyx_kp_s_MemoryView_of_r_object, __pyx_k_MemoryView_of_r_object, sizeof(__pyx_k_MemoryView_of_r_object), 0, 0, 1, 0},
+  {&__pyx_kp_s_No_matching_signature_found, __pyx_k_No_matching_signature_found, sizeof(__pyx_k_No_matching_signature_found), 0, 0, 1, 0},
+  {&__pyx_n_b_O, __pyx_k_O, sizeof(__pyx_k_O), 0, 0, 0, 1},
+  {&__pyx_kp_s_Out_of_bounds_on_buffer_access_a, __pyx_k_Out_of_bounds_on_buffer_access_a, sizeof(__pyx_k_Out_of_bounds_on_buffer_access_a), 0, 0, 1, 0},
+  {&__pyx_n_s_PickleError, __pyx_k_PickleError, sizeof(__pyx_k_PickleError), 0, 0, 1, 1},
+  {&__pyx_n_u_Something, __pyx_k_Something, sizeof(__pyx_k_Something), 0, 1, 0, 1},
+  {&__pyx_n_s_TypeError, __pyx_k_TypeError, sizeof(__pyx_k_TypeError), 0, 0, 1, 1},
+  {&__pyx_kp_s_Unable_to_convert_item_to_object, __pyx_k_Unable_to_convert_item_to_object, sizeof(__pyx_k_Unable_to_convert_item_to_object), 0, 0, 1, 0},
+  {&__pyx_n_s_ValueError, __pyx_k_ValueError, sizeof(__pyx_k_ValueError), 0, 0, 1, 1},
+  {&__pyx_n_s_View_MemoryView, __pyx_k_View_MemoryView, sizeof(__pyx_k_View_MemoryView), 0, 0, 1, 1},
+  {&__pyx_n_s_WORKAROUND, __pyx_k_WORKAROUND, sizeof(__pyx_k_WORKAROUND), 0, 0, 1, 1},
+  {&__pyx_kp_s__2, __pyx_k__2, sizeof(__pyx_k__2), 0, 0, 1, 0},
+  {&__pyx_n_s_allocate_buffer, __pyx_k_allocate_buffer, sizeof(__pyx_k_allocate_buffer), 0, 0, 1, 1},
+  {&__pyx_n_s_args, __pyx_k_args, sizeof(__pyx_k_args), 0, 0, 1, 1},
+  {&__pyx_n_s_base, __pyx_k_base, sizeof(__pyx_k_base), 0, 0, 1, 1},
+  {&__pyx_n_s_boundary_index_list, __pyx_k_boundary_index_list, sizeof(__pyx_k_boundary_index_list), 0, 0, 1, 1},
+  {&__pyx_n_s_boundary_mask, __pyx_k_boundary_mask, sizeof(__pyx_k_boundary_mask), 0, 0, 1, 1},
+  {&__pyx_n_s_c, __pyx_k_c, sizeof(__pyx_k_c), 0, 0, 1, 1},
+  {&__pyx_n_u_c, __pyx_k_c, sizeof(__pyx_k_c), 0, 1, 0, 1},
+  {&__pyx_n_s_class, __pyx_k_class, sizeof(__pyx_k_class), 0, 0, 1, 1},
+  {&__pyx_n_s_cline_in_traceback, __pyx_k_cline_in_traceback, sizeof(__pyx_k_cline_in_traceback), 0, 0, 1, 1},
+  {&__pyx_kp_s_contiguous_and_direct, __pyx_k_contiguous_and_direct, sizeof(__pyx_k_contiguous_and_direct), 0, 0, 1, 0},
+  {&__pyx_kp_s_contiguous_and_indirect, __pyx_k_contiguous_and_indirect, sizeof(__pyx_k_contiguous_and_indirect), 0, 0, 1, 0},
+  {&__pyx_n_s_create_boundary_cell_index_list, __pyx_k_create_boundary_cell_index_list, sizeof(__pyx_k_create_boundary_cell_index_list), 0, 0, 1, 1},
+  {&__pyx_n_s_create_boundary_cell_index_list_2, __pyx_k_create_boundary_cell_index_list_2, sizeof(__pyx_k_create_boundary_cell_index_list_2), 0, 0, 1, 1},
+  {&__pyx_n_s_create_boundary_neighbor_index_l, __pyx_k_create_boundary_neighbor_index_l, sizeof(__pyx_k_create_boundary_neighbor_index_l), 0, 0, 1, 1},
+  {&__pyx_n_s_create_boundary_neighbor_index_l_2, __pyx_k_create_boundary_neighbor_index_l_2, sizeof(__pyx_k_create_boundary_neighbor_index_l_2), 0, 0, 1, 1},
+  {&__pyx_n_s_defaults, __pyx_k_defaults, sizeof(__pyx_k_defaults), 0, 0, 1, 1},
+  {&__pyx_n_s_dict, __pyx_k_dict, sizeof(__pyx_k_dict), 0, 0, 1, 1},
+  {&__pyx_n_s_dirIdx, __pyx_k_dirIdx, sizeof(__pyx_k_dirIdx), 0, 0, 1, 1},
+  {&__pyx_n_s_dtype, __pyx_k_dtype, sizeof(__pyx_k_dtype), 0, 0, 1, 1},
+  {&__pyx_n_s_dtype_is_object, __pyx_k_dtype_is_object, sizeof(__pyx_k_dtype_is_object), 0, 0, 1, 1},
+  {&__pyx_n_s_dx, __pyx_k_dx, sizeof(__pyx_k_dx), 0, 0, 1, 1},
+  {&__pyx_n_s_dy, __pyx_k_dy, sizeof(__pyx_k_dy), 0, 0, 1, 1},
+  {&__pyx_n_s_dz, __pyx_k_dz, sizeof(__pyx_k_dz), 0, 0, 1, 1},
+  {&__pyx_n_s_encode, __pyx_k_encode, sizeof(__pyx_k_encode), 0, 0, 1, 1},
+  {&__pyx_n_s_enumerate, __pyx_k_enumerate, sizeof(__pyx_k_enumerate), 0, 0, 1, 1},
+  {&__pyx_n_s_error, __pyx_k_error, sizeof(__pyx_k_error), 0, 0, 1, 1},
+  {&__pyx_n_s_flag_field, __pyx_k_flag_field, sizeof(__pyx_k_flag_field), 0, 0, 1, 1},
+  {&__pyx_n_s_flags, __pyx_k_flags, sizeof(__pyx_k_flags), 0, 0, 1, 1},
+  {&__pyx_n_s_fluid_mask, __pyx_k_fluid_mask, sizeof(__pyx_k_fluid_mask), 0, 0, 1, 1},
+  {&__pyx_n_s_format, __pyx_k_format, sizeof(__pyx_k_format), 0, 0, 1, 1},
+  {&__pyx_n_s_fortran, __pyx_k_fortran, sizeof(__pyx_k_fortran), 0, 0, 1, 1},
+  {&__pyx_n_u_fortran, __pyx_k_fortran, sizeof(__pyx_k_fortran), 0, 1, 0, 1},
+  {&__pyx_n_s_getstate, __pyx_k_getstate, sizeof(__pyx_k_getstate), 0, 0, 1, 1},
+  {&__pyx_kp_s_got_differing_extents_in_dimensi, __pyx_k_got_differing_extents_in_dimensi, sizeof(__pyx_k_got_differing_extents_in_dimensi), 0, 0, 1, 0},
+  {&__pyx_n_s_id, __pyx_k_id, sizeof(__pyx_k_id), 0, 0, 1, 1},
+  {&__pyx_n_s_import, __pyx_k_import, sizeof(__pyx_k_import), 0, 0, 1, 1},
+  {&__pyx_n_s_int, __pyx_k_int, sizeof(__pyx_k_int), 0, 0, 1, 1},
+  {&__pyx_n_s_itemsize, __pyx_k_itemsize, sizeof(__pyx_k_itemsize), 0, 0, 1, 1},
+  {&__pyx_kp_s_itemsize_0_for_cython_array, __pyx_k_itemsize_0_for_cython_array, sizeof(__pyx_k_itemsize_0_for_cython_array), 0, 0, 1, 0},
+  {&__pyx_n_s_kind, __pyx_k_kind, sizeof(__pyx_k_kind), 0, 0, 1, 1},
+  {&__pyx_n_s_kwargs, __pyx_k_kwargs, sizeof(__pyx_k_kwargs), 0, 0, 1, 1},
+  {&__pyx_n_s_long, __pyx_k_long, sizeof(__pyx_k_long), 0, 0, 1, 1},
+  {&__pyx_kp_s_long_long, __pyx_k_long_long, sizeof(__pyx_k_long_long), 0, 0, 1, 0},
+  {&__pyx_n_s_main, __pyx_k_main, sizeof(__pyx_k_main), 0, 0, 1, 1},
+  {&__pyx_n_s_memview, __pyx_k_memview, sizeof(__pyx_k_memview), 0, 0, 1, 1},
+  {&__pyx_n_s_mode, __pyx_k_mode, sizeof(__pyx_k_mode), 0, 0, 1, 1},
+  {&__pyx_n_s_name, __pyx_k_name, sizeof(__pyx_k_name), 0, 0, 1, 1},
+  {&__pyx_n_s_name_2, __pyx_k_name_2, sizeof(__pyx_k_name_2), 0, 0, 1, 1},
+  {&__pyx_n_s_ndim, __pyx_k_ndim, sizeof(__pyx_k_ndim), 0, 0, 1, 1},
+  {&__pyx_n_s_new, __pyx_k_new, sizeof(__pyx_k_new), 0, 0, 1, 1},
+  {&__pyx_kp_s_no_default___reduce___due_to_non, __pyx_k_no_default___reduce___due_to_non, sizeof(__pyx_k_no_default___reduce___due_to_non), 0, 0, 1, 0},
+  {&__pyx_n_s_nr_of_ghost_layers, __pyx_k_nr_of_ghost_layers, sizeof(__pyx_k_nr_of_ghost_layers), 0, 0, 1, 1},
+  {&__pyx_n_s_num_directions, __pyx_k_num_directions, sizeof(__pyx_k_num_directions), 0, 0, 1, 1},
+  {&__pyx_n_s_numpy, __pyx_k_numpy, sizeof(__pyx_k_numpy), 0, 0, 1, 1},
+  {&__pyx_n_s_obj, __pyx_k_obj, sizeof(__pyx_k_obj), 0, 0, 1, 1},
+  {&__pyx_n_s_pack, __pyx_k_pack, sizeof(__pyx_k_pack), 0, 0, 1, 1},
+  {&__pyx_n_s_pickle, __pyx_k_pickle, sizeof(__pyx_k_pickle), 0, 0, 1, 1},
+  {&__pyx_kp_s_pystencils_boundaries_createinde, __pyx_k_pystencils_boundaries_createinde, sizeof(__pyx_k_pystencils_boundaries_createinde), 0, 0, 1, 0},
+  {&__pyx_n_s_pystencils_boundaries_createinde_2, __pyx_k_pystencils_boundaries_createinde_2, sizeof(__pyx_k_pystencils_boundaries_createinde_2), 0, 0, 1, 1},
+  {&__pyx_n_s_pyx_PickleError, __pyx_k_pyx_PickleError, sizeof(__pyx_k_pyx_PickleError), 0, 0, 1, 1},
+  {&__pyx_n_s_pyx_checksum, __pyx_k_pyx_checksum, sizeof(__pyx_k_pyx_checksum), 0, 0, 1, 1},
+  {&__pyx_n_s_pyx_getbuffer, __pyx_k_pyx_getbuffer, sizeof(__pyx_k_pyx_getbuffer), 0, 0, 1, 1},
+  {&__pyx_n_s_pyx_result, __pyx_k_pyx_result, sizeof(__pyx_k_pyx_result), 0, 0, 1, 1},
+  {&__pyx_n_s_pyx_state, __pyx_k_pyx_state, sizeof(__pyx_k_pyx_state), 0, 0, 1, 1},
+  {&__pyx_n_s_pyx_type, __pyx_k_pyx_type, sizeof(__pyx_k_pyx_type), 0, 0, 1, 1},
+  {&__pyx_n_s_pyx_unpickle_Enum, __pyx_k_pyx_unpickle_Enum, sizeof(__pyx_k_pyx_unpickle_Enum), 0, 0, 1, 1},
+  {&__pyx_n_s_pyx_vtable, __pyx_k_pyx_vtable, sizeof(__pyx_k_pyx_vtable), 0, 0, 1, 1},
+  {&__pyx_n_s_range, __pyx_k_range, sizeof(__pyx_k_range), 0, 0, 1, 1},
+  {&__pyx_n_s_reduce, __pyx_k_reduce, sizeof(__pyx_k_reduce), 0, 0, 1, 1},
+  {&__pyx_n_s_reduce_cython, __pyx_k_reduce_cython, sizeof(__pyx_k_reduce_cython), 0, 0, 1, 1},
+  {&__pyx_n_s_reduce_ex, __pyx_k_reduce_ex, sizeof(__pyx_k_reduce_ex), 0, 0, 1, 1},
+  {&__pyx_n_s_s, __pyx_k_s, sizeof(__pyx_k_s), 0, 0, 1, 1},
+  {&__pyx_n_s_setstate, __pyx_k_setstate, sizeof(__pyx_k_setstate), 0, 0, 1, 1},
+  {&__pyx_n_s_setstate_cython, __pyx_k_setstate_cython, sizeof(__pyx_k_setstate_cython), 0, 0, 1, 1},
+  {&__pyx_n_s_shape, __pyx_k_shape, sizeof(__pyx_k_shape), 0, 0, 1, 1},
+  {&__pyx_n_s_short, __pyx_k_short, sizeof(__pyx_k_short), 0, 0, 1, 1},
+  {&__pyx_n_s_signatures, __pyx_k_signatures, sizeof(__pyx_k_signatures), 0, 0, 1, 1},
+  {&__pyx_n_s_single_link, __pyx_k_single_link, sizeof(__pyx_k_single_link), 0, 0, 1, 1},
+  {&__pyx_n_s_size, __pyx_k_size, sizeof(__pyx_k_size), 0, 0, 1, 1},
+  {&__pyx_n_s_split, __pyx_k_split, sizeof(__pyx_k_split), 0, 0, 1, 1},
+  {&__pyx_n_s_start, __pyx_k_start, sizeof(__pyx_k_start), 0, 0, 1, 1},
+  {&__pyx_n_s_stencil, __pyx_k_stencil, sizeof(__pyx_k_stencil), 0, 0, 1, 1},
+  {&__pyx_n_s_step, __pyx_k_step, sizeof(__pyx_k_step), 0, 0, 1, 1},
+  {&__pyx_n_s_stop, __pyx_k_stop, sizeof(__pyx_k_stop), 0, 0, 1, 1},
+  {&__pyx_kp_s_strided_and_direct, __pyx_k_strided_and_direct, sizeof(__pyx_k_strided_and_direct), 0, 0, 1, 0},
+  {&__pyx_kp_s_strided_and_direct_or_indirect, __pyx_k_strided_and_direct_or_indirect, sizeof(__pyx_k_strided_and_direct_or_indirect), 0, 0, 1, 0},
+  {&__pyx_kp_s_strided_and_indirect, __pyx_k_strided_and_indirect, sizeof(__pyx_k_strided_and_indirect), 0, 0, 1, 0},
+  {&__pyx_kp_s_stringsource, __pyx_k_stringsource, sizeof(__pyx_k_stringsource), 0, 0, 1, 0},
+  {&__pyx_n_s_strip, __pyx_k_strip, sizeof(__pyx_k_strip), 0, 0, 1, 1},
+  {&__pyx_n_s_struct, __pyx_k_struct, sizeof(__pyx_k_struct), 0, 0, 1, 1},
+  {&__pyx_n_s_test, __pyx_k_test, sizeof(__pyx_k_test), 0, 0, 1, 1},
+  {&__pyx_kp_s_unable_to_allocate_array_data, __pyx_k_unable_to_allocate_array_data, sizeof(__pyx_k_unable_to_allocate_array_data), 0, 0, 1, 0},
+  {&__pyx_kp_s_unable_to_allocate_shape_and_str, __pyx_k_unable_to_allocate_shape_and_str, sizeof(__pyx_k_unable_to_allocate_shape_and_str), 0, 0, 1, 0},
+  {&__pyx_n_s_unpack, __pyx_k_unpack, sizeof(__pyx_k_unpack), 0, 0, 1, 1},
+  {&__pyx_kp_s_unsigned_int, __pyx_k_unsigned_int, sizeof(__pyx_k_unsigned_int), 0, 0, 1, 0},
+  {&__pyx_kp_s_unsigned_long, __pyx_k_unsigned_long, sizeof(__pyx_k_unsigned_long), 0, 0, 1, 0},
+  {&__pyx_kp_s_unsigned_short, __pyx_k_unsigned_short, sizeof(__pyx_k_unsigned_short), 0, 0, 1, 0},
+  {&__pyx_n_s_update, __pyx_k_update, sizeof(__pyx_k_update), 0, 0, 1, 1},
+  {&__pyx_n_s_x, __pyx_k_x, sizeof(__pyx_k_x), 0, 0, 1, 1},
+  {&__pyx_n_s_xs, __pyx_k_xs, sizeof(__pyx_k_xs), 0, 0, 1, 1},
+  {&__pyx_n_s_y, __pyx_k_y, sizeof(__pyx_k_y), 0, 0, 1, 1},
+  {&__pyx_n_s_ys, __pyx_k_ys, sizeof(__pyx_k_ys), 0, 0, 1, 1},
+  {&__pyx_n_s_z, __pyx_k_z, sizeof(__pyx_k_z), 0, 0, 1, 1},
+  {&__pyx_n_s_zs, __pyx_k_zs, sizeof(__pyx_k_zs), 0, 0, 1, 1},
+  {0, 0, 0, 0, 0, 0, 0}
+};
+static CYTHON_SMALL_CODE int __Pyx_InitCachedBuiltins(void) {
+  __pyx_builtin_TypeError = __Pyx_GetBuiltinName(__pyx_n_s_TypeError); if (!__pyx_builtin_TypeError) __PYX_ERR(0, 19, __pyx_L1_error)
+  __pyx_builtin_range = __Pyx_GetBuiltinName(__pyx_n_s_range); if (!__pyx_builtin_range) __PYX_ERR(0, 19, __pyx_L1_error)
+  __pyx_builtin_ValueError = __Pyx_GetBuiltinName(__pyx_n_s_ValueError); if (!__pyx_builtin_ValueError) __PYX_ERR(1, 133, __pyx_L1_error)
+  __pyx_builtin_MemoryError = __Pyx_GetBuiltinName(__pyx_n_s_MemoryError); if (!__pyx_builtin_MemoryError) __PYX_ERR(1, 148, __pyx_L1_error)
+  __pyx_builtin_enumerate = __Pyx_GetBuiltinName(__pyx_n_s_enumerate); if (!__pyx_builtin_enumerate) __PYX_ERR(1, 151, __pyx_L1_error)
+  __pyx_builtin_Ellipsis = __Pyx_GetBuiltinName(__pyx_n_s_Ellipsis); if (!__pyx_builtin_Ellipsis) __PYX_ERR(1, 400, __pyx_L1_error)
+  __pyx_builtin_id = __Pyx_GetBuiltinName(__pyx_n_s_id); if (!__pyx_builtin_id) __PYX_ERR(1, 609, __pyx_L1_error)
+  __pyx_builtin_IndexError = __Pyx_GetBuiltinName(__pyx_n_s_IndexError); if (!__pyx_builtin_IndexError) __PYX_ERR(1, 828, __pyx_L1_error)
+  return 0;
+  __pyx_L1_error:;
+  return -1;
+}
+
+static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) {
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0);
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":19
+ * @cython.boundscheck(False) # turn off bounds-checking for entire function
+ * @cython.wraparound(False)  # turn off negative index wrapping for entire function
+ * def create_boundary_neighbor_index_list_2d(object[IntegerType, ndim=2] flag_field,             # <<<<<<<<<<<<<<
+ *                                            int nr_of_ghost_layers, IntegerType boundary_mask, IntegerType fluid_mask,
+ *                                            object[int, ndim=2] stencil, int single_link):
+ */
+  __pyx_tuple__3 = PyTuple_Pack(1, __pyx_kp_s_No_matching_signature_found); if (unlikely(!__pyx_tuple__3)) __PYX_ERR(0, 19, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__3);
+  __Pyx_GIVEREF(__pyx_tuple__3);
+  __pyx_tuple__4 = PyTuple_Pack(1, __pyx_kp_s_Function_call_with_ambiguous_arg); if (unlikely(!__pyx_tuple__4)) __PYX_ERR(0, 19, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__4);
+  __Pyx_GIVEREF(__pyx_tuple__4);
+
+  /* "View.MemoryView":133
+ * 
+ *         if not self.ndim:
+ *             raise ValueError("Empty shape tuple for cython.array")             # <<<<<<<<<<<<<<
+ * 
+ *         if itemsize <= 0:
+ */
+  __pyx_tuple__5 = PyTuple_Pack(1, __pyx_kp_s_Empty_shape_tuple_for_cython_arr); if (unlikely(!__pyx_tuple__5)) __PYX_ERR(1, 133, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__5);
+  __Pyx_GIVEREF(__pyx_tuple__5);
+
+  /* "View.MemoryView":136
+ * 
+ *         if itemsize <= 0:
+ *             raise ValueError("itemsize <= 0 for cython.array")             # <<<<<<<<<<<<<<
+ * 
+ *         if not isinstance(format, bytes):
+ */
+  __pyx_tuple__6 = PyTuple_Pack(1, __pyx_kp_s_itemsize_0_for_cython_array); if (unlikely(!__pyx_tuple__6)) __PYX_ERR(1, 136, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__6);
+  __Pyx_GIVEREF(__pyx_tuple__6);
+
+  /* "View.MemoryView":148
+ * 
+ *         if not self._shape:
+ *             raise MemoryError("unable to allocate shape and strides.")             # <<<<<<<<<<<<<<
+ * 
+ * 
+ */
+  __pyx_tuple__7 = PyTuple_Pack(1, __pyx_kp_s_unable_to_allocate_shape_and_str); if (unlikely(!__pyx_tuple__7)) __PYX_ERR(1, 148, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__7);
+  __Pyx_GIVEREF(__pyx_tuple__7);
+
+  /* "View.MemoryView":176
+ *             self.data = <char *>malloc(self.len)
+ *             if not self.data:
+ *                 raise MemoryError("unable to allocate array data.")             # <<<<<<<<<<<<<<
+ * 
+ *             if self.dtype_is_object:
+ */
+  __pyx_tuple__8 = PyTuple_Pack(1, __pyx_kp_s_unable_to_allocate_array_data); if (unlikely(!__pyx_tuple__8)) __PYX_ERR(1, 176, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__8);
+  __Pyx_GIVEREF(__pyx_tuple__8);
+
+  /* "View.MemoryView":192
+ *             bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS
+ *         if not (flags & bufmode):
+ *             raise ValueError("Can only create a buffer that is contiguous in memory.")             # <<<<<<<<<<<<<<
+ *         info.buf = self.data
+ *         info.len = self.len
+ */
+  __pyx_tuple__9 = PyTuple_Pack(1, __pyx_kp_s_Can_only_create_a_buffer_that_is); if (unlikely(!__pyx_tuple__9)) __PYX_ERR(1, 192, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__9);
+  __Pyx_GIVEREF(__pyx_tuple__9);
+
+  /* "(tree fragment)":2
+ * def __reduce_cython__(self):
+ *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
+ * def __setstate_cython__(self, __pyx_state):
+ *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
+ */
+  __pyx_tuple__10 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__10)) __PYX_ERR(1, 2, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__10);
+  __Pyx_GIVEREF(__pyx_tuple__10);
+
+  /* "(tree fragment)":4
+ *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
+ * def __setstate_cython__(self, __pyx_state):
+ *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
+ */
+  __pyx_tuple__11 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__11)) __PYX_ERR(1, 4, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__11);
+  __Pyx_GIVEREF(__pyx_tuple__11);
+
+  /* "View.MemoryView":414
+ *     def __setitem__(memoryview self, object index, object value):
+ *         if self.view.readonly:
+ *             raise TypeError("Cannot assign to read-only memoryview")             # <<<<<<<<<<<<<<
+ * 
+ *         have_slices, index = _unellipsify(index, self.view.ndim)
+ */
+  __pyx_tuple__12 = PyTuple_Pack(1, __pyx_kp_s_Cannot_assign_to_read_only_memor); if (unlikely(!__pyx_tuple__12)) __PYX_ERR(1, 414, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__12);
+  __Pyx_GIVEREF(__pyx_tuple__12);
+
+  /* "View.MemoryView":491
+ *             result = struct.unpack(self.view.format, bytesitem)
+ *         except struct.error:
+ *             raise ValueError("Unable to convert item to object")             # <<<<<<<<<<<<<<
+ *         else:
+ *             if len(self.view.format) == 1:
+ */
+  __pyx_tuple__13 = PyTuple_Pack(1, __pyx_kp_s_Unable_to_convert_item_to_object); if (unlikely(!__pyx_tuple__13)) __PYX_ERR(1, 491, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__13);
+  __Pyx_GIVEREF(__pyx_tuple__13);
+
+  /* "View.MemoryView":516
+ *     def __getbuffer__(self, Py_buffer *info, int flags):
+ *         if flags & PyBUF_WRITABLE and self.view.readonly:
+ *             raise ValueError("Cannot create writable memory view from read-only memoryview")             # <<<<<<<<<<<<<<
+ * 
+ *         if flags & PyBUF_ND:
+ */
+  __pyx_tuple__14 = PyTuple_Pack(1, __pyx_kp_s_Cannot_create_writable_memory_vi); if (unlikely(!__pyx_tuple__14)) __PYX_ERR(1, 516, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__14);
+  __Pyx_GIVEREF(__pyx_tuple__14);
+
+  /* "View.MemoryView":566
+ *         if self.view.strides == NULL:
+ * 
+ *             raise ValueError("Buffer view does not expose strides")             # <<<<<<<<<<<<<<
+ * 
+ *         return tuple([stride for stride in self.view.strides[:self.view.ndim]])
+ */
+  __pyx_tuple__15 = PyTuple_Pack(1, __pyx_kp_s_Buffer_view_does_not_expose_stri); if (unlikely(!__pyx_tuple__15)) __PYX_ERR(1, 566, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__15);
+  __Pyx_GIVEREF(__pyx_tuple__15);
+
+  /* "View.MemoryView":573
+ *     def suboffsets(self):
+ *         if self.view.suboffsets == NULL:
+ *             return (-1,) * self.view.ndim             # <<<<<<<<<<<<<<
+ * 
+ *         return tuple([suboffset for suboffset in self.view.suboffsets[:self.view.ndim]])
+ */
+  __pyx_tuple__16 = PyTuple_New(1); if (unlikely(!__pyx_tuple__16)) __PYX_ERR(1, 573, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__16);
+  __Pyx_INCREF(__pyx_int_neg_1);
+  __Pyx_GIVEREF(__pyx_int_neg_1);
+  PyTuple_SET_ITEM(__pyx_tuple__16, 0, __pyx_int_neg_1);
+  __Pyx_GIVEREF(__pyx_tuple__16);
+
+  /* "(tree fragment)":2
+ * def __reduce_cython__(self):
+ *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
+ * def __setstate_cython__(self, __pyx_state):
+ *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
+ */
+  __pyx_tuple__17 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__17)) __PYX_ERR(1, 2, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__17);
+  __Pyx_GIVEREF(__pyx_tuple__17);
+
+  /* "(tree fragment)":4
+ *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
+ * def __setstate_cython__(self, __pyx_state):
+ *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
+ */
+  __pyx_tuple__18 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__18)) __PYX_ERR(1, 4, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__18);
+  __Pyx_GIVEREF(__pyx_tuple__18);
+
+  /* "View.MemoryView":678
+ *         if item is Ellipsis:
+ *             if not seen_ellipsis:
+ *                 result.extend([slice(None)] * (ndim - len(tup) + 1))             # <<<<<<<<<<<<<<
+ *                 seen_ellipsis = True
+ *             else:
+ */
+  __pyx_slice__19 = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_slice__19)) __PYX_ERR(1, 678, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_slice__19);
+  __Pyx_GIVEREF(__pyx_slice__19);
+
+  /* "View.MemoryView":699
+ *     for suboffset in suboffsets[:ndim]:
+ *         if suboffset >= 0:
+ *             raise ValueError("Indirect dimensions not supported")             # <<<<<<<<<<<<<<
+ * 
+ * 
+ */
+  __pyx_tuple__20 = PyTuple_Pack(1, __pyx_kp_s_Indirect_dimensions_not_supporte); if (unlikely(!__pyx_tuple__20)) __PYX_ERR(1, 699, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__20);
+  __Pyx_GIVEREF(__pyx_tuple__20);
+
+  /* "(tree fragment)":2
+ * def __reduce_cython__(self):
+ *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
+ * def __setstate_cython__(self, __pyx_state):
+ *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
+ */
+  __pyx_tuple__21 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__21)) __PYX_ERR(1, 2, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__21);
+  __Pyx_GIVEREF(__pyx_tuple__21);
+
+  /* "(tree fragment)":4
+ *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
+ * def __setstate_cython__(self, __pyx_state):
+ *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
+ */
+  __pyx_tuple__22 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__22)) __PYX_ERR(1, 4, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__22);
+  __Pyx_GIVEREF(__pyx_tuple__22);
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":19
+ * @cython.boundscheck(False) # turn off bounds-checking for entire function
+ * @cython.wraparound(False)  # turn off negative index wrapping for entire function
+ * def create_boundary_neighbor_index_list_2d(object[IntegerType, ndim=2] flag_field,             # <<<<<<<<<<<<<<
+ *                                            int nr_of_ghost_layers, IntegerType boundary_mask, IntegerType fluid_mask,
+ *                                            object[int, ndim=2] stencil, int single_link):
+ */
+  __pyx_tuple__23 = PyTuple_Pack(15, __pyx_n_s_flag_field, __pyx_n_s_nr_of_ghost_layers, __pyx_n_s_boundary_mask, __pyx_n_s_fluid_mask, __pyx_n_s_stencil, __pyx_n_s_single_link, __pyx_n_s_xs, __pyx_n_s_ys, __pyx_n_s_x, __pyx_n_s_y, __pyx_n_s_dirIdx, __pyx_n_s_num_directions, __pyx_n_s_dx, __pyx_n_s_dy, __pyx_n_s_boundary_index_list); if (unlikely(!__pyx_tuple__23)) __PYX_ERR(0, 19, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__23);
+  __Pyx_GIVEREF(__pyx_tuple__23);
+  __pyx_codeobj__24 = (PyObject*)__Pyx_PyCode_New(6, 0, 15, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__23, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pystencils_boundaries_createinde, __pyx_n_s_create_boundary_neighbor_index_l, 19, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__24)) __PYX_ERR(0, 19, __pyx_L1_error)
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":44
+ * @cython.boundscheck(False) # turn off bounds-checking for entire function
+ * @cython.wraparound(False)  # turn off negative index wrapping for entire function
+ * def create_boundary_neighbor_index_list_3d(object[IntegerType, ndim=3] flag_field,             # <<<<<<<<<<<<<<
+ *                                            int nr_of_ghost_layers, IntegerType boundary_mask, IntegerType fluid_mask,
+ *                                            object[int, ndim=2] stencil, int single_link):
+ */
+  __pyx_tuple__25 = PyTuple_Pack(18, __pyx_n_s_flag_field, __pyx_n_s_nr_of_ghost_layers, __pyx_n_s_boundary_mask, __pyx_n_s_fluid_mask, __pyx_n_s_stencil, __pyx_n_s_single_link, __pyx_n_s_xs, __pyx_n_s_ys, __pyx_n_s_zs, __pyx_n_s_x, __pyx_n_s_y, __pyx_n_s_z, __pyx_n_s_dirIdx, __pyx_n_s_num_directions, __pyx_n_s_dx, __pyx_n_s_dy, __pyx_n_s_dz, __pyx_n_s_boundary_index_list); if (unlikely(!__pyx_tuple__25)) __PYX_ERR(0, 44, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__25);
+  __Pyx_GIVEREF(__pyx_tuple__25);
+  __pyx_codeobj__26 = (PyObject*)__Pyx_PyCode_New(6, 0, 18, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__25, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pystencils_boundaries_createinde, __pyx_n_s_create_boundary_neighbor_index_l_2, 44, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__26)) __PYX_ERR(0, 44, __pyx_L1_error)
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":72
+ * @cython.boundscheck(False) # turn off bounds-checking for entire function
+ * @cython.wraparound(False)  # turn off negative index wrapping for entire function
+ * def create_boundary_cell_index_list_2d(object[IntegerType, ndim=2] flag_field,             # <<<<<<<<<<<<<<
+ *                                        IntegerType boundary_mask, IntegerType fluid_mask,
+ *                                        object[int, ndim=2] stencil, int single_link):
+ */
+  __pyx_tuple__27 = PyTuple_Pack(14, __pyx_n_s_flag_field, __pyx_n_s_boundary_mask, __pyx_n_s_fluid_mask, __pyx_n_s_stencil, __pyx_n_s_single_link, __pyx_n_s_xs, __pyx_n_s_ys, __pyx_n_s_x, __pyx_n_s_y, __pyx_n_s_dirIdx, __pyx_n_s_num_directions, __pyx_n_s_dx, __pyx_n_s_dy, __pyx_n_s_boundary_index_list); if (unlikely(!__pyx_tuple__27)) __PYX_ERR(0, 72, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__27);
+  __Pyx_GIVEREF(__pyx_tuple__27);
+  __pyx_codeobj__28 = (PyObject*)__Pyx_PyCode_New(5, 0, 14, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__27, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pystencils_boundaries_createinde, __pyx_n_s_create_boundary_cell_index_list, 72, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__28)) __PYX_ERR(0, 72, __pyx_L1_error)
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":98
+ * @cython.boundscheck(False) # turn off bounds-checking for entire function
+ * @cython.wraparound(False)  # turn off negative index wrapping for entire function
+ * def create_boundary_cell_index_list_3d(object[IntegerType, ndim=3] flag_field,             # <<<<<<<<<<<<<<
+ *                                        IntegerType boundary_mask, IntegerType fluid_mask,
+ *                                        object[int, ndim=2] stencil, int single_link):
+ */
+  __pyx_tuple__29 = PyTuple_Pack(17, __pyx_n_s_flag_field, __pyx_n_s_boundary_mask, __pyx_n_s_fluid_mask, __pyx_n_s_stencil, __pyx_n_s_single_link, __pyx_n_s_xs, __pyx_n_s_ys, __pyx_n_s_zs, __pyx_n_s_x, __pyx_n_s_y, __pyx_n_s_z, __pyx_n_s_dirIdx, __pyx_n_s_num_directions, __pyx_n_s_dx, __pyx_n_s_dy, __pyx_n_s_dz, __pyx_n_s_boundary_index_list); if (unlikely(!__pyx_tuple__29)) __PYX_ERR(0, 98, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__29);
+  __Pyx_GIVEREF(__pyx_tuple__29);
+  __pyx_codeobj__30 = (PyObject*)__Pyx_PyCode_New(5, 0, 17, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__29, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pystencils_boundaries_createinde, __pyx_n_s_create_boundary_cell_index_list_2, 98, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__30)) __PYX_ERR(0, 98, __pyx_L1_error)
+
+  /* "View.MemoryView":286
+ *         return self.name
+ * 
+ * cdef generic = Enum("<strided and direct or indirect>")             # <<<<<<<<<<<<<<
+ * cdef strided = Enum("<strided and direct>") # default
+ * cdef indirect = Enum("<strided and indirect>")
+ */
+  __pyx_tuple__31 = PyTuple_Pack(1, __pyx_kp_s_strided_and_direct_or_indirect); if (unlikely(!__pyx_tuple__31)) __PYX_ERR(1, 286, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__31);
+  __Pyx_GIVEREF(__pyx_tuple__31);
+
+  /* "View.MemoryView":287
+ * 
+ * cdef generic = Enum("<strided and direct or indirect>")
+ * cdef strided = Enum("<strided and direct>") # default             # <<<<<<<<<<<<<<
+ * cdef indirect = Enum("<strided and indirect>")
+ * 
+ */
+  __pyx_tuple__32 = PyTuple_Pack(1, __pyx_kp_s_strided_and_direct); if (unlikely(!__pyx_tuple__32)) __PYX_ERR(1, 287, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__32);
+  __Pyx_GIVEREF(__pyx_tuple__32);
+
+  /* "View.MemoryView":288
+ * cdef generic = Enum("<strided and direct or indirect>")
+ * cdef strided = Enum("<strided and direct>") # default
+ * cdef indirect = Enum("<strided and indirect>")             # <<<<<<<<<<<<<<
+ * 
+ * 
+ */
+  __pyx_tuple__33 = PyTuple_Pack(1, __pyx_kp_s_strided_and_indirect); if (unlikely(!__pyx_tuple__33)) __PYX_ERR(1, 288, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__33);
+  __Pyx_GIVEREF(__pyx_tuple__33);
+
+  /* "View.MemoryView":291
+ * 
+ * 
+ * cdef contiguous = Enum("<contiguous and direct>")             # <<<<<<<<<<<<<<
+ * cdef indirect_contiguous = Enum("<contiguous and indirect>")
+ * 
+ */
+  __pyx_tuple__34 = PyTuple_Pack(1, __pyx_kp_s_contiguous_and_direct); if (unlikely(!__pyx_tuple__34)) __PYX_ERR(1, 291, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__34);
+  __Pyx_GIVEREF(__pyx_tuple__34);
+
+  /* "View.MemoryView":292
+ * 
+ * cdef contiguous = Enum("<contiguous and direct>")
+ * cdef indirect_contiguous = Enum("<contiguous and indirect>")             # <<<<<<<<<<<<<<
+ * 
+ * 
+ */
+  __pyx_tuple__35 = PyTuple_Pack(1, __pyx_kp_s_contiguous_and_indirect); if (unlikely(!__pyx_tuple__35)) __PYX_ERR(1, 292, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__35);
+  __Pyx_GIVEREF(__pyx_tuple__35);
+
+  /* "(tree fragment)":1
+ * def __pyx_unpickle_Enum(__pyx_type, long __pyx_checksum, __pyx_state):             # <<<<<<<<<<<<<<
+ *     cdef object __pyx_PickleError
+ *     cdef object __pyx_result
+ */
+  __pyx_tuple__36 = PyTuple_Pack(5, __pyx_n_s_pyx_type, __pyx_n_s_pyx_checksum, __pyx_n_s_pyx_state, __pyx_n_s_pyx_PickleError, __pyx_n_s_pyx_result); if (unlikely(!__pyx_tuple__36)) __PYX_ERR(1, 1, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__36);
+  __Pyx_GIVEREF(__pyx_tuple__36);
+  __pyx_codeobj__37 = (PyObject*)__Pyx_PyCode_New(3, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__36, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_pyx_unpickle_Enum, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__37)) __PYX_ERR(1, 1, __pyx_L1_error)
+  __Pyx_RefNannyFinishContext();
+  return 0;
+  __pyx_L1_error:;
+  __Pyx_RefNannyFinishContext();
+  return -1;
+}
+
+static CYTHON_SMALL_CODE int __Pyx_InitGlobals(void) {
+  if (__Pyx_InitStrings(__pyx_string_tab) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
+  __pyx_int_0 = PyInt_FromLong(0); if (unlikely(!__pyx_int_0)) __PYX_ERR(0, 1, __pyx_L1_error)
+  __pyx_int_1 = PyInt_FromLong(1); if (unlikely(!__pyx_int_1)) __PYX_ERR(0, 1, __pyx_L1_error)
+  __pyx_int_5 = PyInt_FromLong(5); if (unlikely(!__pyx_int_5)) __PYX_ERR(0, 1, __pyx_L1_error)
+  __pyx_int_6 = PyInt_FromLong(6); if (unlikely(!__pyx_int_6)) __PYX_ERR(0, 1, __pyx_L1_error)
+  __pyx_int_184977713 = PyInt_FromLong(184977713L); if (unlikely(!__pyx_int_184977713)) __PYX_ERR(0, 1, __pyx_L1_error)
+  __pyx_int_neg_1 = PyInt_FromLong(-1); if (unlikely(!__pyx_int_neg_1)) __PYX_ERR(0, 1, __pyx_L1_error)
+  return 0;
+  __pyx_L1_error:;
+  return -1;
+}
+
+static CYTHON_SMALL_CODE int __Pyx_modinit_global_init_code(void); /*proto*/
+static CYTHON_SMALL_CODE int __Pyx_modinit_variable_export_code(void); /*proto*/
+static CYTHON_SMALL_CODE int __Pyx_modinit_function_export_code(void); /*proto*/
+static CYTHON_SMALL_CODE int __Pyx_modinit_type_init_code(void); /*proto*/
+static CYTHON_SMALL_CODE int __Pyx_modinit_type_import_code(void); /*proto*/
+static CYTHON_SMALL_CODE int __Pyx_modinit_variable_import_code(void); /*proto*/
+static CYTHON_SMALL_CODE int __Pyx_modinit_function_import_code(void); /*proto*/
+
+static int __Pyx_modinit_global_init_code(void) {
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__Pyx_modinit_global_init_code", 0);
+  /*--- Global init code ---*/
+  generic = Py_None; Py_INCREF(Py_None);
+  strided = Py_None; Py_INCREF(Py_None);
+  indirect = Py_None; Py_INCREF(Py_None);
+  contiguous = Py_None; Py_INCREF(Py_None);
+  indirect_contiguous = Py_None; Py_INCREF(Py_None);
+  __Pyx_RefNannyFinishContext();
+  return 0;
+}
+
+static int __Pyx_modinit_variable_export_code(void) {
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__Pyx_modinit_variable_export_code", 0);
+  /*--- Variable export code ---*/
+  __Pyx_RefNannyFinishContext();
+  return 0;
+}
+
+static int __Pyx_modinit_function_export_code(void) {
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__Pyx_modinit_function_export_code", 0);
+  /*--- Function export code ---*/
+  __Pyx_RefNannyFinishContext();
+  return 0;
+}
+
+static int __Pyx_modinit_type_init_code(void) {
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__Pyx_modinit_type_init_code", 0);
+  /*--- Type init code ---*/
+  __pyx_vtabptr_array = &__pyx_vtable_array;
+  __pyx_vtable_array.get_memview = (PyObject *(*)(struct __pyx_array_obj *))__pyx_array_get_memview;
+  if (PyType_Ready(&__pyx_type___pyx_array) < 0) __PYX_ERR(1, 105, __pyx_L1_error)
+  __pyx_type___pyx_array.tp_print = 0;
+  if (__Pyx_SetVtable(__pyx_type___pyx_array.tp_dict, __pyx_vtabptr_array) < 0) __PYX_ERR(1, 105, __pyx_L1_error)
+  if (__Pyx_setup_reduce((PyObject*)&__pyx_type___pyx_array) < 0) __PYX_ERR(1, 105, __pyx_L1_error)
+  __pyx_array_type = &__pyx_type___pyx_array;
+  if (PyType_Ready(&__pyx_type___pyx_MemviewEnum) < 0) __PYX_ERR(1, 279, __pyx_L1_error)
+  __pyx_type___pyx_MemviewEnum.tp_print = 0;
+  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type___pyx_MemviewEnum.tp_dictoffset && __pyx_type___pyx_MemviewEnum.tp_getattro == PyObject_GenericGetAttr)) {
+    __pyx_type___pyx_MemviewEnum.tp_getattro = __Pyx_PyObject_GenericGetAttr;
+  }
+  if (__Pyx_setup_reduce((PyObject*)&__pyx_type___pyx_MemviewEnum) < 0) __PYX_ERR(1, 279, __pyx_L1_error)
+  __pyx_MemviewEnum_type = &__pyx_type___pyx_MemviewEnum;
+  __pyx_vtabptr_memoryview = &__pyx_vtable_memoryview;
+  __pyx_vtable_memoryview.get_item_pointer = (char *(*)(struct __pyx_memoryview_obj *, PyObject *))__pyx_memoryview_get_item_pointer;
+  __pyx_vtable_memoryview.is_slice = (PyObject *(*)(struct __pyx_memoryview_obj *, PyObject *))__pyx_memoryview_is_slice;
+  __pyx_vtable_memoryview.setitem_slice_assignment = (PyObject *(*)(struct __pyx_memoryview_obj *, PyObject *, PyObject *))__pyx_memoryview_setitem_slice_assignment;
+  __pyx_vtable_memoryview.setitem_slice_assign_scalar = (PyObject *(*)(struct __pyx_memoryview_obj *, struct __pyx_memoryview_obj *, PyObject *))__pyx_memoryview_setitem_slice_assign_scalar;
+  __pyx_vtable_memoryview.setitem_indexed = (PyObject *(*)(struct __pyx_memoryview_obj *, PyObject *, PyObject *))__pyx_memoryview_setitem_indexed;
+  __pyx_vtable_memoryview.convert_item_to_object = (PyObject *(*)(struct __pyx_memoryview_obj *, char *))__pyx_memoryview_convert_item_to_object;
+  __pyx_vtable_memoryview.assign_item_from_object = (PyObject *(*)(struct __pyx_memoryview_obj *, char *, PyObject *))__pyx_memoryview_assign_item_from_object;
+  if (PyType_Ready(&__pyx_type___pyx_memoryview) < 0) __PYX_ERR(1, 330, __pyx_L1_error)
+  __pyx_type___pyx_memoryview.tp_print = 0;
+  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type___pyx_memoryview.tp_dictoffset && __pyx_type___pyx_memoryview.tp_getattro == PyObject_GenericGetAttr)) {
+    __pyx_type___pyx_memoryview.tp_getattro = __Pyx_PyObject_GenericGetAttr;
+  }
+  if (__Pyx_SetVtable(__pyx_type___pyx_memoryview.tp_dict, __pyx_vtabptr_memoryview) < 0) __PYX_ERR(1, 330, __pyx_L1_error)
+  if (__Pyx_setup_reduce((PyObject*)&__pyx_type___pyx_memoryview) < 0) __PYX_ERR(1, 330, __pyx_L1_error)
+  __pyx_memoryview_type = &__pyx_type___pyx_memoryview;
+  __pyx_vtabptr__memoryviewslice = &__pyx_vtable__memoryviewslice;
+  __pyx_vtable__memoryviewslice.__pyx_base = *__pyx_vtabptr_memoryview;
+  __pyx_vtable__memoryviewslice.__pyx_base.convert_item_to_object = (PyObject *(*)(struct __pyx_memoryview_obj *, char *))__pyx_memoryviewslice_convert_item_to_object;
+  __pyx_vtable__memoryviewslice.__pyx_base.assign_item_from_object = (PyObject *(*)(struct __pyx_memoryview_obj *, char *, PyObject *))__pyx_memoryviewslice_assign_item_from_object;
+  __pyx_type___pyx_memoryviewslice.tp_base = __pyx_memoryview_type;
+  if (PyType_Ready(&__pyx_type___pyx_memoryviewslice) < 0) __PYX_ERR(1, 961, __pyx_L1_error)
+  __pyx_type___pyx_memoryviewslice.tp_print = 0;
+  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type___pyx_memoryviewslice.tp_dictoffset && __pyx_type___pyx_memoryviewslice.tp_getattro == PyObject_GenericGetAttr)) {
+    __pyx_type___pyx_memoryviewslice.tp_getattro = __Pyx_PyObject_GenericGetAttr;
+  }
+  if (__Pyx_SetVtable(__pyx_type___pyx_memoryviewslice.tp_dict, __pyx_vtabptr__memoryviewslice) < 0) __PYX_ERR(1, 961, __pyx_L1_error)
+  if (__Pyx_setup_reduce((PyObject*)&__pyx_type___pyx_memoryviewslice) < 0) __PYX_ERR(1, 961, __pyx_L1_error)
+  __pyx_memoryviewslice_type = &__pyx_type___pyx_memoryviewslice;
+  __Pyx_RefNannyFinishContext();
+  return 0;
+  __pyx_L1_error:;
+  __Pyx_RefNannyFinishContext();
+  return -1;
+}
+
+static int __Pyx_modinit_type_import_code(void) {
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__Pyx_modinit_type_import_code", 0);
+  /*--- Type import code ---*/
+  __Pyx_RefNannyFinishContext();
+  return 0;
+}
+
+static int __Pyx_modinit_variable_import_code(void) {
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__Pyx_modinit_variable_import_code", 0);
+  /*--- Variable import code ---*/
+  __Pyx_RefNannyFinishContext();
+  return 0;
+}
+
+static int __Pyx_modinit_function_import_code(void) {
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__Pyx_modinit_function_import_code", 0);
+  /*--- Function import code ---*/
+  __Pyx_RefNannyFinishContext();
+  return 0;
+}
+
+
+#if PY_MAJOR_VERSION < 3
+#ifdef CYTHON_NO_PYINIT_EXPORT
+#define __Pyx_PyMODINIT_FUNC void
+#else
+#define __Pyx_PyMODINIT_FUNC PyMODINIT_FUNC
+#endif
+#else
+#ifdef CYTHON_NO_PYINIT_EXPORT
+#define __Pyx_PyMODINIT_FUNC PyObject *
+#else
+#define __Pyx_PyMODINIT_FUNC PyMODINIT_FUNC
+#endif
+#endif
+
+
+#if PY_MAJOR_VERSION < 3
+__Pyx_PyMODINIT_FUNC initcreateindexlistcython(void) CYTHON_SMALL_CODE; /*proto*/
+__Pyx_PyMODINIT_FUNC initcreateindexlistcython(void)
+#else
+__Pyx_PyMODINIT_FUNC PyInit_createindexlistcython(void) CYTHON_SMALL_CODE; /*proto*/
+__Pyx_PyMODINIT_FUNC PyInit_createindexlistcython(void)
+#if CYTHON_PEP489_MULTI_PHASE_INIT
+{
+  return PyModuleDef_Init(&__pyx_moduledef);
+}
+static CYTHON_SMALL_CODE int __Pyx_check_single_interpreter(void) {
+    #if PY_VERSION_HEX >= 0x030700A1
+    static PY_INT64_T main_interpreter_id = -1;
+    PY_INT64_T current_id = PyInterpreterState_GetID(PyThreadState_Get()->interp);
+    if (main_interpreter_id == -1) {
+        main_interpreter_id = current_id;
+        return (unlikely(current_id == -1)) ? -1 : 0;
+    } else if (unlikely(main_interpreter_id != current_id))
+    #else
+    static PyInterpreterState *main_interpreter = NULL;
+    PyInterpreterState *current_interpreter = PyThreadState_Get()->interp;
+    if (!main_interpreter) {
+        main_interpreter = current_interpreter;
+    } else if (unlikely(main_interpreter != current_interpreter))
+    #endif
+    {
+        PyErr_SetString(
+            PyExc_ImportError,
+            "Interpreter change detected - this module can only be loaded into one interpreter per process.");
+        return -1;
+    }
+    return 0;
+}
+static CYTHON_SMALL_CODE int __Pyx_copy_spec_to_module(PyObject *spec, PyObject *moddict, const char* from_name, const char* to_name, int allow_none) {
+    PyObject *value = PyObject_GetAttrString(spec, from_name);
+    int result = 0;
+    if (likely(value)) {
+        if (allow_none || value != Py_None) {
+            result = PyDict_SetItemString(moddict, to_name, value);
+        }
+        Py_DECREF(value);
+    } else if (PyErr_ExceptionMatches(PyExc_AttributeError)) {
+        PyErr_Clear();
+    } else {
+        result = -1;
+    }
+    return result;
+}
+static CYTHON_SMALL_CODE PyObject* __pyx_pymod_create(PyObject *spec, CYTHON_UNUSED PyModuleDef *def) {
+    PyObject *module = NULL, *moddict, *modname;
+    if (__Pyx_check_single_interpreter())
+        return NULL;
+    if (__pyx_m)
+        return __Pyx_NewRef(__pyx_m);
+    modname = PyObject_GetAttrString(spec, "name");
+    if (unlikely(!modname)) goto bad;
+    module = PyModule_NewObject(modname);
+    Py_DECREF(modname);
+    if (unlikely(!module)) goto bad;
+    moddict = PyModule_GetDict(module);
+    if (unlikely(!moddict)) goto bad;
+    if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "loader", "__loader__", 1) < 0)) goto bad;
+    if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "origin", "__file__", 1) < 0)) goto bad;
+    if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "parent", "__package__", 1) < 0)) goto bad;
+    if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "submodule_search_locations", "__path__", 0) < 0)) goto bad;
+    return module;
+bad:
+    Py_XDECREF(module);
+    return NULL;
+}
+
+
+static CYTHON_SMALL_CODE int __pyx_pymod_exec_createindexlistcython(PyObject *__pyx_pyinit_module)
+#endif
+#endif
+{
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
+  PyObject *__pyx_t_5 = NULL;
+  PyObject *__pyx_t_6 = NULL;
+  PyObject *__pyx_t_7 = NULL;
+  PyObject *__pyx_t_8 = NULL;
+  PyObject *__pyx_t_9 = NULL;
+  static PyThread_type_lock __pyx_t_10[8];
+  __Pyx_RefNannyDeclarations
+  #if CYTHON_PEP489_MULTI_PHASE_INIT
+  if (__pyx_m) {
+    if (__pyx_m == __pyx_pyinit_module) return 0;
+    PyErr_SetString(PyExc_RuntimeError, "Module 'createindexlistcython' has already been imported. Re-initialisation is not supported.");
+    return -1;
+  }
+  #elif PY_MAJOR_VERSION >= 3
+  if (__pyx_m) return __Pyx_NewRef(__pyx_m);
+  #endif
+  #if CYTHON_REFNANNY
+__Pyx_RefNanny = __Pyx_RefNannyImportAPI("refnanny");
+if (!__Pyx_RefNanny) {
+  PyErr_Clear();
+  __Pyx_RefNanny = __Pyx_RefNannyImportAPI("Cython.Runtime.refnanny");
+  if (!__Pyx_RefNanny)
+      Py_FatalError("failed to import 'refnanny' module");
+}
+#endif
+  __Pyx_RefNannySetupContext("__Pyx_PyMODINIT_FUNC PyInit_createindexlistcython(void)", 0);
+  if (__Pyx_check_binary_version() < 0) __PYX_ERR(0, 1, __pyx_L1_error)
+  #ifdef __Pxy_PyFrame_Initialize_Offsets
+  __Pxy_PyFrame_Initialize_Offsets();
+  #endif
+  __pyx_empty_tuple = PyTuple_New(0); if (unlikely(!__pyx_empty_tuple)) __PYX_ERR(0, 1, __pyx_L1_error)
+  __pyx_empty_bytes = PyBytes_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_bytes)) __PYX_ERR(0, 1, __pyx_L1_error)
+  __pyx_empty_unicode = PyUnicode_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_unicode)) __PYX_ERR(0, 1, __pyx_L1_error)
+  #ifdef __Pyx_CyFunction_USED
+  if (__pyx_CyFunction_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error)
+  #endif
+  #ifdef __Pyx_FusedFunction_USED
+  if (__pyx_FusedFunction_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error)
+  #endif
+  #ifdef __Pyx_Coroutine_USED
+  if (__pyx_Coroutine_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error)
+  #endif
+  #ifdef __Pyx_Generator_USED
+  if (__pyx_Generator_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error)
+  #endif
+  #ifdef __Pyx_AsyncGen_USED
+  if (__pyx_AsyncGen_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error)
+  #endif
+  #ifdef __Pyx_StopAsyncIteration_USED
+  if (__pyx_StopAsyncIteration_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error)
+  #endif
+  /*--- Library function declarations ---*/
+  /*--- Threads initialization code ---*/
+  #if defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS
+  #ifdef WITH_THREAD /* Python build with threading support? */
+  PyEval_InitThreads();
+  #endif
+  #endif
+  /*--- Module creation code ---*/
+  #if CYTHON_PEP489_MULTI_PHASE_INIT
+  __pyx_m = __pyx_pyinit_module;
+  Py_INCREF(__pyx_m);
+  #else
+  #if PY_MAJOR_VERSION < 3
+  __pyx_m = Py_InitModule4("createindexlistcython", __pyx_methods, 0, 0, PYTHON_API_VERSION); Py_XINCREF(__pyx_m);
+  #else
+  __pyx_m = PyModule_Create(&__pyx_moduledef);
+  #endif
+  if (unlikely(!__pyx_m)) __PYX_ERR(0, 1, __pyx_L1_error)
+  #endif
+  __pyx_d = PyModule_GetDict(__pyx_m); if (unlikely(!__pyx_d)) __PYX_ERR(0, 1, __pyx_L1_error)
+  Py_INCREF(__pyx_d);
+  __pyx_b = PyImport_AddModule(__Pyx_BUILTIN_MODULE_NAME); if (unlikely(!__pyx_b)) __PYX_ERR(0, 1, __pyx_L1_error)
+  __pyx_cython_runtime = PyImport_AddModule((char *) "cython_runtime"); if (unlikely(!__pyx_cython_runtime)) __PYX_ERR(0, 1, __pyx_L1_error)
+  #if CYTHON_COMPILING_IN_PYPY
+  Py_INCREF(__pyx_b);
+  #endif
+  if (PyObject_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
+  /*--- Initialize various global constants etc. ---*/
+  if (__Pyx_InitGlobals() < 0) __PYX_ERR(0, 1, __pyx_L1_error)
+  #if PY_MAJOR_VERSION < 3 && (__PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT)
+  if (__Pyx_init_sys_getdefaultencoding_params() < 0) __PYX_ERR(0, 1, __pyx_L1_error)
+  #endif
+  if (__pyx_module_is_main_pystencils__boundaries__createindexlistcython) {
+    if (PyObject_SetAttr(__pyx_m, __pyx_n_s_name_2, __pyx_n_s_main) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
+  }
+  #if PY_MAJOR_VERSION >= 3
+  {
+    PyObject *modules = PyImport_GetModuleDict(); if (unlikely(!modules)) __PYX_ERR(0, 1, __pyx_L1_error)
+    if (!PyDict_GetItemString(modules, "pystencils.boundaries.createindexlistcython")) {
+      if (unlikely(PyDict_SetItemString(modules, "pystencils.boundaries.createindexlistcython", __pyx_m) < 0)) __PYX_ERR(0, 1, __pyx_L1_error)
+    }
+  }
+  #endif
+  /*--- Builtin init code ---*/
+  if (__Pyx_InitCachedBuiltins() < 0) __PYX_ERR(0, 1, __pyx_L1_error)
+  /*--- Constants init code ---*/
+  if (__Pyx_InitCachedConstants() < 0) __PYX_ERR(0, 1, __pyx_L1_error)
+  /*--- Global type/function init code ---*/
+  (void)__Pyx_modinit_global_init_code();
+  (void)__Pyx_modinit_variable_export_code();
+  (void)__Pyx_modinit_function_export_code();
+  if (unlikely(__Pyx_modinit_type_init_code() != 0)) goto __pyx_L1_error;
+  (void)__Pyx_modinit_type_import_code();
+  (void)__Pyx_modinit_variable_import_code();
+  (void)__Pyx_modinit_function_import_code();
+  /*--- Execution code ---*/
+  #if defined(__Pyx_Generator_USED) || defined(__Pyx_Coroutine_USED)
+  if (__Pyx_patch_abc() < 0) __PYX_ERR(0, 1, __pyx_L1_error)
+  #endif
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":4
+ * # Workaround for cython bug
+ * # see https://stackoverflow.com/questions/8024805/cython-compiled-c-extension-importerror-dynamic-module-does-not-define-init-fu
+ * WORKAROUND = "Something"             # <<<<<<<<<<<<<<
+ * 
+ * import cython
+ */
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_WORKAROUND, __pyx_n_u_Something) < 0) __PYX_ERR(0, 4, __pyx_L1_error)
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":19
+ * @cython.boundscheck(False) # turn off bounds-checking for entire function
+ * @cython.wraparound(False)  # turn off negative index wrapping for entire function
+ * def create_boundary_neighbor_index_list_2d(object[IntegerType, ndim=2] flag_field,             # <<<<<<<<<<<<<<
+ *                                            int nr_of_ghost_layers, IntegerType boundary_mask, IntegerType fluid_mask,
+ *                                            object[int, ndim=2] stencil, int single_link):
+ */
+  __pyx_t_1 = __Pyx_PyDict_NewPresized(7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 19, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_2 = __pyx_FusedFunction_NewEx(&__pyx_fuse_0__pyx_mdef_10pystencils_10boundaries_21createindexlistcython_9create_boundary_neighbor_index_list_2d, 0, __pyx_n_s_create_boundary_neighbor_index_l, NULL, __pyx_n_s_pystencils_boundaries_createinde_2, __pyx_d, ((PyObject *)__pyx_codeobj__24)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 19, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_2, __pyx_empty_tuple);
+  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_short, __pyx_t_2) < 0) __PYX_ERR(0, 19, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_2 = __pyx_FusedFunction_NewEx(&__pyx_fuse_1__pyx_mdef_10pystencils_10boundaries_21createindexlistcython_11create_boundary_neighbor_index_list_2d, 0, __pyx_n_s_create_boundary_neighbor_index_l, NULL, __pyx_n_s_pystencils_boundaries_createinde_2, __pyx_d, ((PyObject *)__pyx_codeobj__24)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 19, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_2, __pyx_empty_tuple);
+  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_int, __pyx_t_2) < 0) __PYX_ERR(0, 19, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_2 = __pyx_FusedFunction_NewEx(&__pyx_fuse_2__pyx_mdef_10pystencils_10boundaries_21createindexlistcython_13create_boundary_neighbor_index_list_2d, 0, __pyx_n_s_create_boundary_neighbor_index_l, NULL, __pyx_n_s_pystencils_boundaries_createinde_2, __pyx_d, ((PyObject *)__pyx_codeobj__24)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 19, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_2, __pyx_empty_tuple);
+  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_long, __pyx_t_2) < 0) __PYX_ERR(0, 19, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_2 = __pyx_FusedFunction_NewEx(&__pyx_fuse_3__pyx_mdef_10pystencils_10boundaries_21createindexlistcython_15create_boundary_neighbor_index_list_2d, 0, __pyx_n_s_create_boundary_neighbor_index_l, NULL, __pyx_n_s_pystencils_boundaries_createinde_2, __pyx_d, ((PyObject *)__pyx_codeobj__24)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 19, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_2, __pyx_empty_tuple);
+  if (PyDict_SetItem(__pyx_t_1, __pyx_kp_s_long_long, __pyx_t_2) < 0) __PYX_ERR(0, 19, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_2 = __pyx_FusedFunction_NewEx(&__pyx_fuse_4__pyx_mdef_10pystencils_10boundaries_21createindexlistcython_17create_boundary_neighbor_index_list_2d, 0, __pyx_n_s_create_boundary_neighbor_index_l, NULL, __pyx_n_s_pystencils_boundaries_createinde_2, __pyx_d, ((PyObject *)__pyx_codeobj__24)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 19, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_2, __pyx_empty_tuple);
+  if (PyDict_SetItem(__pyx_t_1, __pyx_kp_s_unsigned_short, __pyx_t_2) < 0) __PYX_ERR(0, 19, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_2 = __pyx_FusedFunction_NewEx(&__pyx_fuse_5__pyx_mdef_10pystencils_10boundaries_21createindexlistcython_19create_boundary_neighbor_index_list_2d, 0, __pyx_n_s_create_boundary_neighbor_index_l, NULL, __pyx_n_s_pystencils_boundaries_createinde_2, __pyx_d, ((PyObject *)__pyx_codeobj__24)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 19, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_2, __pyx_empty_tuple);
+  if (PyDict_SetItem(__pyx_t_1, __pyx_kp_s_unsigned_int, __pyx_t_2) < 0) __PYX_ERR(0, 19, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_2 = __pyx_FusedFunction_NewEx(&__pyx_fuse_6__pyx_mdef_10pystencils_10boundaries_21createindexlistcython_21create_boundary_neighbor_index_list_2d, 0, __pyx_n_s_create_boundary_neighbor_index_l, NULL, __pyx_n_s_pystencils_boundaries_createinde_2, __pyx_d, ((PyObject *)__pyx_codeobj__24)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 19, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_2, __pyx_empty_tuple);
+  if (PyDict_SetItem(__pyx_t_1, __pyx_kp_s_unsigned_long, __pyx_t_2) < 0) __PYX_ERR(0, 19, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_2 = __pyx_FusedFunction_NewEx(&__pyx_mdef_10pystencils_10boundaries_21createindexlistcython_1create_boundary_neighbor_index_list_2d, 0, __pyx_n_s_create_boundary_neighbor_index_l, NULL, __pyx_n_s_pystencils_boundaries_createinde_2, __pyx_d, ((PyObject *)__pyx_codeobj__24)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 19, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_2, __pyx_empty_tuple);
+  ((__pyx_FusedFunctionObject *) __pyx_t_2)->__signatures__ = __pyx_t_1;
+  __Pyx_GIVEREF(__pyx_t_1);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_create_boundary_neighbor_index_l, __pyx_t_2) < 0) __PYX_ERR(0, 19, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":44
+ * @cython.boundscheck(False) # turn off bounds-checking for entire function
+ * @cython.wraparound(False)  # turn off negative index wrapping for entire function
+ * def create_boundary_neighbor_index_list_3d(object[IntegerType, ndim=3] flag_field,             # <<<<<<<<<<<<<<
+ *                                            int nr_of_ghost_layers, IntegerType boundary_mask, IntegerType fluid_mask,
+ *                                            object[int, ndim=2] stencil, int single_link):
+ */
+  __pyx_t_3 = __Pyx_PyDict_NewPresized(7); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 44, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_4 = __pyx_FusedFunction_NewEx(&__pyx_fuse_0__pyx_mdef_10pystencils_10boundaries_21createindexlistcython_25create_boundary_neighbor_index_list_3d, 0, __pyx_n_s_create_boundary_neighbor_index_l_2, NULL, __pyx_n_s_pystencils_boundaries_createinde_2, __pyx_d, ((PyObject *)__pyx_codeobj__26)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 44, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_4, __pyx_empty_tuple);
+  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_short, __pyx_t_4) < 0) __PYX_ERR(0, 44, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __pyx_t_4 = __pyx_FusedFunction_NewEx(&__pyx_fuse_1__pyx_mdef_10pystencils_10boundaries_21createindexlistcython_27create_boundary_neighbor_index_list_3d, 0, __pyx_n_s_create_boundary_neighbor_index_l_2, NULL, __pyx_n_s_pystencils_boundaries_createinde_2, __pyx_d, ((PyObject *)__pyx_codeobj__26)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 44, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_4, __pyx_empty_tuple);
+  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_int, __pyx_t_4) < 0) __PYX_ERR(0, 44, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __pyx_t_4 = __pyx_FusedFunction_NewEx(&__pyx_fuse_2__pyx_mdef_10pystencils_10boundaries_21createindexlistcython_29create_boundary_neighbor_index_list_3d, 0, __pyx_n_s_create_boundary_neighbor_index_l_2, NULL, __pyx_n_s_pystencils_boundaries_createinde_2, __pyx_d, ((PyObject *)__pyx_codeobj__26)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 44, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_4, __pyx_empty_tuple);
+  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_long, __pyx_t_4) < 0) __PYX_ERR(0, 44, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __pyx_t_4 = __pyx_FusedFunction_NewEx(&__pyx_fuse_3__pyx_mdef_10pystencils_10boundaries_21createindexlistcython_31create_boundary_neighbor_index_list_3d, 0, __pyx_n_s_create_boundary_neighbor_index_l_2, NULL, __pyx_n_s_pystencils_boundaries_createinde_2, __pyx_d, ((PyObject *)__pyx_codeobj__26)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 44, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_4, __pyx_empty_tuple);
+  if (PyDict_SetItem(__pyx_t_3, __pyx_kp_s_long_long, __pyx_t_4) < 0) __PYX_ERR(0, 44, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __pyx_t_4 = __pyx_FusedFunction_NewEx(&__pyx_fuse_4__pyx_mdef_10pystencils_10boundaries_21createindexlistcython_33create_boundary_neighbor_index_list_3d, 0, __pyx_n_s_create_boundary_neighbor_index_l_2, NULL, __pyx_n_s_pystencils_boundaries_createinde_2, __pyx_d, ((PyObject *)__pyx_codeobj__26)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 44, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_4, __pyx_empty_tuple);
+  if (PyDict_SetItem(__pyx_t_3, __pyx_kp_s_unsigned_short, __pyx_t_4) < 0) __PYX_ERR(0, 44, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __pyx_t_4 = __pyx_FusedFunction_NewEx(&__pyx_fuse_5__pyx_mdef_10pystencils_10boundaries_21createindexlistcython_35create_boundary_neighbor_index_list_3d, 0, __pyx_n_s_create_boundary_neighbor_index_l_2, NULL, __pyx_n_s_pystencils_boundaries_createinde_2, __pyx_d, ((PyObject *)__pyx_codeobj__26)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 44, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_4, __pyx_empty_tuple);
+  if (PyDict_SetItem(__pyx_t_3, __pyx_kp_s_unsigned_int, __pyx_t_4) < 0) __PYX_ERR(0, 44, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __pyx_t_4 = __pyx_FusedFunction_NewEx(&__pyx_fuse_6__pyx_mdef_10pystencils_10boundaries_21createindexlistcython_37create_boundary_neighbor_index_list_3d, 0, __pyx_n_s_create_boundary_neighbor_index_l_2, NULL, __pyx_n_s_pystencils_boundaries_createinde_2, __pyx_d, ((PyObject *)__pyx_codeobj__26)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 44, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_4, __pyx_empty_tuple);
+  if (PyDict_SetItem(__pyx_t_3, __pyx_kp_s_unsigned_long, __pyx_t_4) < 0) __PYX_ERR(0, 44, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __pyx_t_4 = __pyx_FusedFunction_NewEx(&__pyx_mdef_10pystencils_10boundaries_21createindexlistcython_3create_boundary_neighbor_index_list_3d, 0, __pyx_n_s_create_boundary_neighbor_index_l_2, NULL, __pyx_n_s_pystencils_boundaries_createinde_2, __pyx_d, ((PyObject *)__pyx_codeobj__26)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 44, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_4, __pyx_empty_tuple);
+  ((__pyx_FusedFunctionObject *) __pyx_t_4)->__signatures__ = __pyx_t_3;
+  __Pyx_GIVEREF(__pyx_t_3);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_create_boundary_neighbor_index_l_2, __pyx_t_4) < 0) __PYX_ERR(0, 44, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":72
+ * @cython.boundscheck(False) # turn off bounds-checking for entire function
+ * @cython.wraparound(False)  # turn off negative index wrapping for entire function
+ * def create_boundary_cell_index_list_2d(object[IntegerType, ndim=2] flag_field,             # <<<<<<<<<<<<<<
+ *                                        IntegerType boundary_mask, IntegerType fluid_mask,
+ *                                        object[int, ndim=2] stencil, int single_link):
+ */
+  __pyx_t_5 = __Pyx_PyDict_NewPresized(7); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 72, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  __pyx_t_6 = __pyx_FusedFunction_NewEx(&__pyx_fuse_0__pyx_mdef_10pystencils_10boundaries_21createindexlistcython_41create_boundary_cell_index_list_2d, 0, __pyx_n_s_create_boundary_cell_index_list, NULL, __pyx_n_s_pystencils_boundaries_createinde_2, __pyx_d, ((PyObject *)__pyx_codeobj__28)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 72, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_6);
+  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_6, __pyx_empty_tuple);
+  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_short, __pyx_t_6) < 0) __PYX_ERR(0, 72, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+  __pyx_t_6 = __pyx_FusedFunction_NewEx(&__pyx_fuse_1__pyx_mdef_10pystencils_10boundaries_21createindexlistcython_43create_boundary_cell_index_list_2d, 0, __pyx_n_s_create_boundary_cell_index_list, NULL, __pyx_n_s_pystencils_boundaries_createinde_2, __pyx_d, ((PyObject *)__pyx_codeobj__28)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 72, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_6);
+  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_6, __pyx_empty_tuple);
+  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_int, __pyx_t_6) < 0) __PYX_ERR(0, 72, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+  __pyx_t_6 = __pyx_FusedFunction_NewEx(&__pyx_fuse_2__pyx_mdef_10pystencils_10boundaries_21createindexlistcython_45create_boundary_cell_index_list_2d, 0, __pyx_n_s_create_boundary_cell_index_list, NULL, __pyx_n_s_pystencils_boundaries_createinde_2, __pyx_d, ((PyObject *)__pyx_codeobj__28)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 72, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_6);
+  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_6, __pyx_empty_tuple);
+  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_long, __pyx_t_6) < 0) __PYX_ERR(0, 72, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+  __pyx_t_6 = __pyx_FusedFunction_NewEx(&__pyx_fuse_3__pyx_mdef_10pystencils_10boundaries_21createindexlistcython_47create_boundary_cell_index_list_2d, 0, __pyx_n_s_create_boundary_cell_index_list, NULL, __pyx_n_s_pystencils_boundaries_createinde_2, __pyx_d, ((PyObject *)__pyx_codeobj__28)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 72, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_6);
+  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_6, __pyx_empty_tuple);
+  if (PyDict_SetItem(__pyx_t_5, __pyx_kp_s_long_long, __pyx_t_6) < 0) __PYX_ERR(0, 72, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+  __pyx_t_6 = __pyx_FusedFunction_NewEx(&__pyx_fuse_4__pyx_mdef_10pystencils_10boundaries_21createindexlistcython_49create_boundary_cell_index_list_2d, 0, __pyx_n_s_create_boundary_cell_index_list, NULL, __pyx_n_s_pystencils_boundaries_createinde_2, __pyx_d, ((PyObject *)__pyx_codeobj__28)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 72, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_6);
+  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_6, __pyx_empty_tuple);
+  if (PyDict_SetItem(__pyx_t_5, __pyx_kp_s_unsigned_short, __pyx_t_6) < 0) __PYX_ERR(0, 72, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+  __pyx_t_6 = __pyx_FusedFunction_NewEx(&__pyx_fuse_5__pyx_mdef_10pystencils_10boundaries_21createindexlistcython_51create_boundary_cell_index_list_2d, 0, __pyx_n_s_create_boundary_cell_index_list, NULL, __pyx_n_s_pystencils_boundaries_createinde_2, __pyx_d, ((PyObject *)__pyx_codeobj__28)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 72, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_6);
+  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_6, __pyx_empty_tuple);
+  if (PyDict_SetItem(__pyx_t_5, __pyx_kp_s_unsigned_int, __pyx_t_6) < 0) __PYX_ERR(0, 72, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+  __pyx_t_6 = __pyx_FusedFunction_NewEx(&__pyx_fuse_6__pyx_mdef_10pystencils_10boundaries_21createindexlistcython_53create_boundary_cell_index_list_2d, 0, __pyx_n_s_create_boundary_cell_index_list, NULL, __pyx_n_s_pystencils_boundaries_createinde_2, __pyx_d, ((PyObject *)__pyx_codeobj__28)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 72, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_6);
+  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_6, __pyx_empty_tuple);
+  if (PyDict_SetItem(__pyx_t_5, __pyx_kp_s_unsigned_long, __pyx_t_6) < 0) __PYX_ERR(0, 72, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+  __pyx_t_6 = __pyx_FusedFunction_NewEx(&__pyx_mdef_10pystencils_10boundaries_21createindexlistcython_5create_boundary_cell_index_list_2d, 0, __pyx_n_s_create_boundary_cell_index_list, NULL, __pyx_n_s_pystencils_boundaries_createinde_2, __pyx_d, ((PyObject *)__pyx_codeobj__28)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 72, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_6);
+  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_6, __pyx_empty_tuple);
+  ((__pyx_FusedFunctionObject *) __pyx_t_6)->__signatures__ = __pyx_t_5;
+  __Pyx_GIVEREF(__pyx_t_5);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_create_boundary_cell_index_list, __pyx_t_6) < 0) __PYX_ERR(0, 72, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":98
+ * @cython.boundscheck(False) # turn off bounds-checking for entire function
+ * @cython.wraparound(False)  # turn off negative index wrapping for entire function
+ * def create_boundary_cell_index_list_3d(object[IntegerType, ndim=3] flag_field,             # <<<<<<<<<<<<<<
+ *                                        IntegerType boundary_mask, IntegerType fluid_mask,
+ *                                        object[int, ndim=2] stencil, int single_link):
+ */
+  __pyx_t_7 = __Pyx_PyDict_NewPresized(7); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 98, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  __pyx_t_8 = __pyx_FusedFunction_NewEx(&__pyx_fuse_0__pyx_mdef_10pystencils_10boundaries_21createindexlistcython_57create_boundary_cell_index_list_3d, 0, __pyx_n_s_create_boundary_cell_index_list_2, NULL, __pyx_n_s_pystencils_boundaries_createinde_2, __pyx_d, ((PyObject *)__pyx_codeobj__30)); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 98, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_8, __pyx_empty_tuple);
+  if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_short, __pyx_t_8) < 0) __PYX_ERR(0, 98, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_8 = __pyx_FusedFunction_NewEx(&__pyx_fuse_1__pyx_mdef_10pystencils_10boundaries_21createindexlistcython_59create_boundary_cell_index_list_3d, 0, __pyx_n_s_create_boundary_cell_index_list_2, NULL, __pyx_n_s_pystencils_boundaries_createinde_2, __pyx_d, ((PyObject *)__pyx_codeobj__30)); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 98, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_8, __pyx_empty_tuple);
+  if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_int, __pyx_t_8) < 0) __PYX_ERR(0, 98, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_8 = __pyx_FusedFunction_NewEx(&__pyx_fuse_2__pyx_mdef_10pystencils_10boundaries_21createindexlistcython_61create_boundary_cell_index_list_3d, 0, __pyx_n_s_create_boundary_cell_index_list_2, NULL, __pyx_n_s_pystencils_boundaries_createinde_2, __pyx_d, ((PyObject *)__pyx_codeobj__30)); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 98, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_8, __pyx_empty_tuple);
+  if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_long, __pyx_t_8) < 0) __PYX_ERR(0, 98, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_8 = __pyx_FusedFunction_NewEx(&__pyx_fuse_3__pyx_mdef_10pystencils_10boundaries_21createindexlistcython_63create_boundary_cell_index_list_3d, 0, __pyx_n_s_create_boundary_cell_index_list_2, NULL, __pyx_n_s_pystencils_boundaries_createinde_2, __pyx_d, ((PyObject *)__pyx_codeobj__30)); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 98, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_8, __pyx_empty_tuple);
+  if (PyDict_SetItem(__pyx_t_7, __pyx_kp_s_long_long, __pyx_t_8) < 0) __PYX_ERR(0, 98, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_8 = __pyx_FusedFunction_NewEx(&__pyx_fuse_4__pyx_mdef_10pystencils_10boundaries_21createindexlistcython_65create_boundary_cell_index_list_3d, 0, __pyx_n_s_create_boundary_cell_index_list_2, NULL, __pyx_n_s_pystencils_boundaries_createinde_2, __pyx_d, ((PyObject *)__pyx_codeobj__30)); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 98, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_8, __pyx_empty_tuple);
+  if (PyDict_SetItem(__pyx_t_7, __pyx_kp_s_unsigned_short, __pyx_t_8) < 0) __PYX_ERR(0, 98, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_8 = __pyx_FusedFunction_NewEx(&__pyx_fuse_5__pyx_mdef_10pystencils_10boundaries_21createindexlistcython_67create_boundary_cell_index_list_3d, 0, __pyx_n_s_create_boundary_cell_index_list_2, NULL, __pyx_n_s_pystencils_boundaries_createinde_2, __pyx_d, ((PyObject *)__pyx_codeobj__30)); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 98, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_8, __pyx_empty_tuple);
+  if (PyDict_SetItem(__pyx_t_7, __pyx_kp_s_unsigned_int, __pyx_t_8) < 0) __PYX_ERR(0, 98, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_8 = __pyx_FusedFunction_NewEx(&__pyx_fuse_6__pyx_mdef_10pystencils_10boundaries_21createindexlistcython_69create_boundary_cell_index_list_3d, 0, __pyx_n_s_create_boundary_cell_index_list_2, NULL, __pyx_n_s_pystencils_boundaries_createinde_2, __pyx_d, ((PyObject *)__pyx_codeobj__30)); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 98, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_8, __pyx_empty_tuple);
+  if (PyDict_SetItem(__pyx_t_7, __pyx_kp_s_unsigned_long, __pyx_t_8) < 0) __PYX_ERR(0, 98, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_8 = __pyx_FusedFunction_NewEx(&__pyx_mdef_10pystencils_10boundaries_21createindexlistcython_7create_boundary_cell_index_list_3d, 0, __pyx_n_s_create_boundary_cell_index_list_2, NULL, __pyx_n_s_pystencils_boundaries_createinde_2, __pyx_d, ((PyObject *)__pyx_codeobj__30)); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 98, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_8, __pyx_empty_tuple);
+  ((__pyx_FusedFunctionObject *) __pyx_t_8)->__signatures__ = __pyx_t_7;
+  __Pyx_GIVEREF(__pyx_t_7);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_create_boundary_cell_index_list_2, __pyx_t_8) < 0) __PYX_ERR(0, 98, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+
+  /* "pystencils/boundaries/createindexlistcython.pyx":1
+ * # distutils: language=c             # <<<<<<<<<<<<<<
+ * # Workaround for cython bug
+ * # see https://stackoverflow.com/questions/8024805/cython-compiled-c-extension-importerror-dynamic-module-does-not-define-init-fu
+ */
+  __pyx_t_9 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_9);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_test, __pyx_t_9) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+
+  /* "View.MemoryView":209
+ *         info.obj = self
+ * 
+ *     __pyx_getbuffer = capsule(<void *> &__pyx_array_getbuffer, "getbuffer(obj, view, flags)")             # <<<<<<<<<<<<<<
+ * 
+ *     def __dealloc__(array self):
+ */
+  __pyx_t_9 = __pyx_capsule_create(((void *)(&__pyx_array_getbuffer)), ((char *)"getbuffer(obj, view, flags)")); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 209, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_9);
+  if (PyDict_SetItem((PyObject *)__pyx_array_type->tp_dict, __pyx_n_s_pyx_getbuffer, __pyx_t_9) < 0) __PYX_ERR(1, 209, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+  PyType_Modified(__pyx_array_type);
+
+  /* "View.MemoryView":286
+ *         return self.name
+ * 
+ * cdef generic = Enum("<strided and direct or indirect>")             # <<<<<<<<<<<<<<
+ * cdef strided = Enum("<strided and direct>") # default
+ * cdef indirect = Enum("<strided and indirect>")
+ */
+  __pyx_t_9 = __Pyx_PyObject_Call(((PyObject *)__pyx_MemviewEnum_type), __pyx_tuple__31, NULL); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 286, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_9);
+  __Pyx_XGOTREF(generic);
+  __Pyx_DECREF_SET(generic, __pyx_t_9);
+  __Pyx_GIVEREF(__pyx_t_9);
+  __pyx_t_9 = 0;
+
+  /* "View.MemoryView":287
+ * 
+ * cdef generic = Enum("<strided and direct or indirect>")
+ * cdef strided = Enum("<strided and direct>") # default             # <<<<<<<<<<<<<<
+ * cdef indirect = Enum("<strided and indirect>")
+ * 
+ */
+  __pyx_t_9 = __Pyx_PyObject_Call(((PyObject *)__pyx_MemviewEnum_type), __pyx_tuple__32, NULL); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 287, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_9);
+  __Pyx_XGOTREF(strided);
+  __Pyx_DECREF_SET(strided, __pyx_t_9);
+  __Pyx_GIVEREF(__pyx_t_9);
+  __pyx_t_9 = 0;
+
+  /* "View.MemoryView":288
+ * cdef generic = Enum("<strided and direct or indirect>")
+ * cdef strided = Enum("<strided and direct>") # default
+ * cdef indirect = Enum("<strided and indirect>")             # <<<<<<<<<<<<<<
+ * 
+ * 
+ */
+  __pyx_t_9 = __Pyx_PyObject_Call(((PyObject *)__pyx_MemviewEnum_type), __pyx_tuple__33, NULL); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 288, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_9);
+  __Pyx_XGOTREF(indirect);
+  __Pyx_DECREF_SET(indirect, __pyx_t_9);
+  __Pyx_GIVEREF(__pyx_t_9);
+  __pyx_t_9 = 0;
+
+  /* "View.MemoryView":291
+ * 
+ * 
+ * cdef contiguous = Enum("<contiguous and direct>")             # <<<<<<<<<<<<<<
+ * cdef indirect_contiguous = Enum("<contiguous and indirect>")
+ * 
+ */
+  __pyx_t_9 = __Pyx_PyObject_Call(((PyObject *)__pyx_MemviewEnum_type), __pyx_tuple__34, NULL); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 291, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_9);
+  __Pyx_XGOTREF(contiguous);
+  __Pyx_DECREF_SET(contiguous, __pyx_t_9);
+  __Pyx_GIVEREF(__pyx_t_9);
+  __pyx_t_9 = 0;
+
+  /* "View.MemoryView":292
+ * 
+ * cdef contiguous = Enum("<contiguous and direct>")
+ * cdef indirect_contiguous = Enum("<contiguous and indirect>")             # <<<<<<<<<<<<<<
+ * 
+ * 
+ */
+  __pyx_t_9 = __Pyx_PyObject_Call(((PyObject *)__pyx_MemviewEnum_type), __pyx_tuple__35, NULL); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 292, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_9);
+  __Pyx_XGOTREF(indirect_contiguous);
+  __Pyx_DECREF_SET(indirect_contiguous, __pyx_t_9);
+  __Pyx_GIVEREF(__pyx_t_9);
+  __pyx_t_9 = 0;
+
+  /* "View.MemoryView":316
+ * 
+ * DEF THREAD_LOCKS_PREALLOCATED = 8
+ * cdef int __pyx_memoryview_thread_locks_used = 0             # <<<<<<<<<<<<<<
+ * cdef PyThread_type_lock[THREAD_LOCKS_PREALLOCATED] __pyx_memoryview_thread_locks = [
+ *     PyThread_allocate_lock(),
+ */
+  __pyx_memoryview_thread_locks_used = 0;
+
+  /* "View.MemoryView":317
+ * DEF THREAD_LOCKS_PREALLOCATED = 8
+ * cdef int __pyx_memoryview_thread_locks_used = 0
+ * cdef PyThread_type_lock[THREAD_LOCKS_PREALLOCATED] __pyx_memoryview_thread_locks = [             # <<<<<<<<<<<<<<
+ *     PyThread_allocate_lock(),
+ *     PyThread_allocate_lock(),
+ */
+  __pyx_t_10[0] = PyThread_allocate_lock();
+  __pyx_t_10[1] = PyThread_allocate_lock();
+  __pyx_t_10[2] = PyThread_allocate_lock();
+  __pyx_t_10[3] = PyThread_allocate_lock();
+  __pyx_t_10[4] = PyThread_allocate_lock();
+  __pyx_t_10[5] = PyThread_allocate_lock();
+  __pyx_t_10[6] = PyThread_allocate_lock();
+  __pyx_t_10[7] = PyThread_allocate_lock();
+  memcpy(&(__pyx_memoryview_thread_locks[0]), __pyx_t_10, sizeof(__pyx_memoryview_thread_locks[0]) * (8));
+
+  /* "View.MemoryView":545
+ *         info.obj = self
+ * 
+ *     __pyx_getbuffer = capsule(<void *> &__pyx_memoryview_getbuffer, "getbuffer(obj, view, flags)")             # <<<<<<<<<<<<<<
+ * 
+ * 
+ */
+  __pyx_t_9 = __pyx_capsule_create(((void *)(&__pyx_memoryview_getbuffer)), ((char *)"getbuffer(obj, view, flags)")); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 545, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_9);
+  if (PyDict_SetItem((PyObject *)__pyx_memoryview_type->tp_dict, __pyx_n_s_pyx_getbuffer, __pyx_t_9) < 0) __PYX_ERR(1, 545, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+  PyType_Modified(__pyx_memoryview_type);
+
+  /* "View.MemoryView":991
+ *         return self.from_object
+ * 
+ *     __pyx_getbuffer = capsule(<void *> &__pyx_memoryview_getbuffer, "getbuffer(obj, view, flags)")             # <<<<<<<<<<<<<<
+ * 
+ * 
+ */
+  __pyx_t_9 = __pyx_capsule_create(((void *)(&__pyx_memoryview_getbuffer)), ((char *)"getbuffer(obj, view, flags)")); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 991, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_9);
+  if (PyDict_SetItem((PyObject *)__pyx_memoryviewslice_type->tp_dict, __pyx_n_s_pyx_getbuffer, __pyx_t_9) < 0) __PYX_ERR(1, 991, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+  PyType_Modified(__pyx_memoryviewslice_type);
+
+  /* "(tree fragment)":1
+ * def __pyx_unpickle_Enum(__pyx_type, long __pyx_checksum, __pyx_state):             # <<<<<<<<<<<<<<
+ *     cdef object __pyx_PickleError
+ *     cdef object __pyx_result
+ */
+  __pyx_t_9 = PyCFunction_NewEx(&__pyx_mdef_15View_dot_MemoryView_1__pyx_unpickle_Enum, NULL, __pyx_n_s_View_MemoryView); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 1, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_9);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_pyx_unpickle_Enum, __pyx_t_9) < 0) __PYX_ERR(1, 1, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+
+  /* "(tree fragment)":11
+ *         __pyx_unpickle_Enum__set_state(<Enum> __pyx_result, __pyx_state)
+ *     return __pyx_result
+ * cdef __pyx_unpickle_Enum__set_state(Enum __pyx_result, tuple __pyx_state):             # <<<<<<<<<<<<<<
+ *     __pyx_result.name = __pyx_state[0]
+ *     if len(__pyx_state) > 1 and hasattr(__pyx_result, '__dict__'):
+ */
+
+  /*--- Wrapped vars code ---*/
+
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_XDECREF(__pyx_t_5);
+  __Pyx_XDECREF(__pyx_t_6);
+  __Pyx_XDECREF(__pyx_t_7);
+  __Pyx_XDECREF(__pyx_t_8);
+  __Pyx_XDECREF(__pyx_t_9);
+  if (__pyx_m) {
+    if (__pyx_d) {
+      __Pyx_AddTraceback("init pystencils.boundaries.createindexlistcython", __pyx_clineno, __pyx_lineno, __pyx_filename);
+    }
+    Py_CLEAR(__pyx_m);
+  } else if (!PyErr_Occurred()) {
+    PyErr_SetString(PyExc_ImportError, "init pystencils.boundaries.createindexlistcython");
+  }
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  #if CYTHON_PEP489_MULTI_PHASE_INIT
+  return (__pyx_m != NULL) ? 0 : -1;
+  #elif PY_MAJOR_VERSION >= 3
+  return __pyx_m;
+  #else
+  return;
+  #endif
+}
+
+/* --- Runtime support code --- */
+/* Refnanny */
+#if CYTHON_REFNANNY
+static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname) {
+    PyObject *m = NULL, *p = NULL;
+    void *r = NULL;
+    m = PyImport_ImportModule(modname);
+    if (!m) goto end;
+    p = PyObject_GetAttrString(m, "RefNannyAPI");
+    if (!p) goto end;
+    r = PyLong_AsVoidPtr(p);
+end:
+    Py_XDECREF(p);
+    Py_XDECREF(m);
+    return (__Pyx_RefNannyAPIStruct *)r;
+}
+#endif
+
+/* PyObjectGetAttrStr */
+#if CYTHON_USE_TYPE_SLOTS
+static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name) {
+    PyTypeObject* tp = Py_TYPE(obj);
+    if (likely(tp->tp_getattro))
+        return tp->tp_getattro(obj, attr_name);
+#if PY_MAJOR_VERSION < 3
+    if (likely(tp->tp_getattr))
+        return tp->tp_getattr(obj, PyString_AS_STRING(attr_name));
+#endif
+    return PyObject_GetAttr(obj, attr_name);
+}
+#endif
+
+/* GetBuiltinName */
+static PyObject *__Pyx_GetBuiltinName(PyObject *name) {
+    PyObject* result = __Pyx_PyObject_GetAttrStr(__pyx_b, name);
+    if (unlikely(!result)) {
+        PyErr_Format(PyExc_NameError,
+#if PY_MAJOR_VERSION >= 3
+            "name '%U' is not defined", name);
+#else
+            "name '%.200s' is not defined", PyString_AS_STRING(name));
+#endif
+    }
+    return result;
+}
+
+/* RaiseArgTupleInvalid */
+static void __Pyx_RaiseArgtupleInvalid(
+    const char* func_name,
+    int exact,
+    Py_ssize_t num_min,
+    Py_ssize_t num_max,
+    Py_ssize_t num_found)
+{
+    Py_ssize_t num_expected;
+    const char *more_or_less;
+    if (num_found < num_min) {
+        num_expected = num_min;
+        more_or_less = "at least";
+    } else {
+        num_expected = num_max;
+        more_or_less = "at most";
+    }
+    if (exact) {
+        more_or_less = "exactly";
+    }
+    PyErr_Format(PyExc_TypeError,
+                 "%.200s() takes %.8s %" CYTHON_FORMAT_SSIZE_T "d positional argument%.1s (%" CYTHON_FORMAT_SSIZE_T "d given)",
+                 func_name, more_or_less, num_expected,
+                 (num_expected == 1) ? "" : "s", num_found);
+}
+
+/* RaiseDoubleKeywords */
+static void __Pyx_RaiseDoubleKeywordsError(
+    const char* func_name,
+    PyObject* kw_name)
+{
+    PyErr_Format(PyExc_TypeError,
+        #if PY_MAJOR_VERSION >= 3
+        "%s() got multiple values for keyword argument '%U'", func_name, kw_name);
+        #else
+        "%s() got multiple values for keyword argument '%s'", func_name,
+        PyString_AsString(kw_name));
+        #endif
+}
+
+/* ParseKeywords */
+static int __Pyx_ParseOptionalKeywords(
+    PyObject *kwds,
+    PyObject **argnames[],
+    PyObject *kwds2,
+    PyObject *values[],
+    Py_ssize_t num_pos_args,
+    const char* function_name)
+{
+    PyObject *key = 0, *value = 0;
+    Py_ssize_t pos = 0;
+    PyObject*** name;
+    PyObject*** first_kw_arg = argnames + num_pos_args;
+    while (PyDict_Next(kwds, &pos, &key, &value)) {
+        name = first_kw_arg;
+        while (*name && (**name != key)) name++;
+        if (*name) {
+            values[name-argnames] = value;
+            continue;
+        }
+        name = first_kw_arg;
+        #if PY_MAJOR_VERSION < 3
+        if (likely(PyString_CheckExact(key)) || likely(PyString_Check(key))) {
+            while (*name) {
+                if ((CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**name) == PyString_GET_SIZE(key))
+                        && _PyString_Eq(**name, key)) {
+                    values[name-argnames] = value;
+                    break;
+                }
+                name++;
+            }
+            if (*name) continue;
+            else {
+                PyObject*** argname = argnames;
+                while (argname != first_kw_arg) {
+                    if ((**argname == key) || (
+                            (CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**argname) == PyString_GET_SIZE(key))
+                             && _PyString_Eq(**argname, key))) {
+                        goto arg_passed_twice;
+                    }
+                    argname++;
+                }
+            }
+        } else
+        #endif
+        if (likely(PyUnicode_Check(key))) {
+            while (*name) {
+                int cmp = (**name == key) ? 0 :
+                #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3
+                    (PyUnicode_GET_SIZE(**name) != PyUnicode_GET_SIZE(key)) ? 1 :
+                #endif
+                    PyUnicode_Compare(**name, key);
+                if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad;
+                if (cmp == 0) {
+                    values[name-argnames] = value;
+                    break;
+                }
+                name++;
+            }
+            if (*name) continue;
+            else {
+                PyObject*** argname = argnames;
+                while (argname != first_kw_arg) {
+                    int cmp = (**argname == key) ? 0 :
+                    #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3
+                        (PyUnicode_GET_SIZE(**argname) != PyUnicode_GET_SIZE(key)) ? 1 :
+                    #endif
+                        PyUnicode_Compare(**argname, key);
+                    if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad;
+                    if (cmp == 0) goto arg_passed_twice;
+                    argname++;
+                }
+            }
+        } else
+            goto invalid_keyword_type;
+        if (kwds2) {
+            if (unlikely(PyDict_SetItem(kwds2, key, value))) goto bad;
+        } else {
+            goto invalid_keyword;
+        }
+    }
+    return 0;
+arg_passed_twice:
+    __Pyx_RaiseDoubleKeywordsError(function_name, key);
+    goto bad;
+invalid_keyword_type:
+    PyErr_Format(PyExc_TypeError,
+        "%.200s() keywords must be strings", function_name);
+    goto bad;
+invalid_keyword:
+    PyErr_Format(PyExc_TypeError,
+    #if PY_MAJOR_VERSION < 3
+        "%.200s() got an unexpected keyword argument '%.200s'",
+        function_name, PyString_AsString(key));
+    #else
+        "%s() got an unexpected keyword argument '%U'",
+        function_name, key);
+    #endif
+bad:
+    return -1;
+}
+
+/* DictGetItem */
+#if PY_MAJOR_VERSION >= 3 && !CYTHON_COMPILING_IN_PYPY
+static PyObject *__Pyx_PyDict_GetItem(PyObject *d, PyObject* key) {
+    PyObject *value;
+    value = PyDict_GetItemWithError(d, key);
+    if (unlikely(!value)) {
+        if (!PyErr_Occurred()) {
+            if (unlikely(PyTuple_Check(key))) {
+                PyObject* args = PyTuple_Pack(1, key);
+                if (likely(args)) {
+                    PyErr_SetObject(PyExc_KeyError, args);
+                    Py_DECREF(args);
+                }
+            } else {
+                PyErr_SetObject(PyExc_KeyError, key);
+            }
+        }
+        return NULL;
+    }
+    Py_INCREF(value);
+    return value;
+}
+#endif
+
+/* PyCFunctionFastCall */
+#if CYTHON_FAST_PYCCALL
+static CYTHON_INLINE PyObject * __Pyx_PyCFunction_FastCall(PyObject *func_obj, PyObject **args, Py_ssize_t nargs) {
+    PyCFunctionObject *func = (PyCFunctionObject*)func_obj;
+    PyCFunction meth = PyCFunction_GET_FUNCTION(func);
+    PyObject *self = PyCFunction_GET_SELF(func);
+    int flags = PyCFunction_GET_FLAGS(func);
+    assert(PyCFunction_Check(func));
+    assert(METH_FASTCALL == (flags & ~(METH_CLASS | METH_STATIC | METH_COEXIST | METH_KEYWORDS | METH_STACKLESS)));
+    assert(nargs >= 0);
+    assert(nargs == 0 || args != NULL);
+    /* _PyCFunction_FastCallDict() must not be called with an exception set,
+       because it may clear it (directly or indirectly) and so the
+       caller loses its exception */
+    assert(!PyErr_Occurred());
+    if ((PY_VERSION_HEX < 0x030700A0) || unlikely(flags & METH_KEYWORDS)) {
+        return (*((__Pyx_PyCFunctionFastWithKeywords)(void*)meth)) (self, args, nargs, NULL);
+    } else {
+        return (*((__Pyx_PyCFunctionFast)(void*)meth)) (self, args, nargs);
+    }
+}
+#endif
+
+/* PyFunctionFastCall */
+#if CYTHON_FAST_PYCALL
+static PyObject* __Pyx_PyFunction_FastCallNoKw(PyCodeObject *co, PyObject **args, Py_ssize_t na,
+                                               PyObject *globals) {
+    PyFrameObject *f;
+    PyThreadState *tstate = __Pyx_PyThreadState_Current;
+    PyObject **fastlocals;
+    Py_ssize_t i;
+    PyObject *result;
+    assert(globals != NULL);
+    /* XXX Perhaps we should create a specialized
+       PyFrame_New() that doesn't take locals, but does
+       take builtins without sanity checking them.
+       */
+    assert(tstate != NULL);
+    f = PyFrame_New(tstate, co, globals, NULL);
+    if (f == NULL) {
+        return NULL;
+    }
+    fastlocals = __Pyx_PyFrame_GetLocalsplus(f);
+    for (i = 0; i < na; i++) {
+        Py_INCREF(*args);
+        fastlocals[i] = *args++;
+    }
+    result = PyEval_EvalFrameEx(f,0);
+    ++tstate->recursion_depth;
+    Py_DECREF(f);
+    --tstate->recursion_depth;
+    return result;
+}
+#if 1 || PY_VERSION_HEX < 0x030600B1
+static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args, int nargs, PyObject *kwargs) {
+    PyCodeObject *co = (PyCodeObject *)PyFunction_GET_CODE(func);
+    PyObject *globals = PyFunction_GET_GLOBALS(func);
+    PyObject *argdefs = PyFunction_GET_DEFAULTS(func);
+    PyObject *closure;
+#if PY_MAJOR_VERSION >= 3
+    PyObject *kwdefs;
+#endif
+    PyObject *kwtuple, **k;
+    PyObject **d;
+    Py_ssize_t nd;
+    Py_ssize_t nk;
+    PyObject *result;
+    assert(kwargs == NULL || PyDict_Check(kwargs));
+    nk = kwargs ? PyDict_Size(kwargs) : 0;
+    if (Py_EnterRecursiveCall((char*)" while calling a Python object")) {
+        return NULL;
+    }
+    if (
+#if PY_MAJOR_VERSION >= 3
+            co->co_kwonlyargcount == 0 &&
+#endif
+            likely(kwargs == NULL || nk == 0) &&
+            co->co_flags == (CO_OPTIMIZED | CO_NEWLOCALS | CO_NOFREE)) {
+        if (argdefs == NULL && co->co_argcount == nargs) {
+            result = __Pyx_PyFunction_FastCallNoKw(co, args, nargs, globals);
+            goto done;
+        }
+        else if (nargs == 0 && argdefs != NULL
+                 && co->co_argcount == Py_SIZE(argdefs)) {
+            /* function called with no arguments, but all parameters have
+               a default value: use default values as arguments .*/
+            args = &PyTuple_GET_ITEM(argdefs, 0);
+            result =__Pyx_PyFunction_FastCallNoKw(co, args, Py_SIZE(argdefs), globals);
+            goto done;
+        }
+    }
+    if (kwargs != NULL) {
+        Py_ssize_t pos, i;
+        kwtuple = PyTuple_New(2 * nk);
+        if (kwtuple == NULL) {
+            result = NULL;
+            goto done;
+        }
+        k = &PyTuple_GET_ITEM(kwtuple, 0);
+        pos = i = 0;
+        while (PyDict_Next(kwargs, &pos, &k[i], &k[i+1])) {
+            Py_INCREF(k[i]);
+            Py_INCREF(k[i+1]);
+            i += 2;
+        }
+        nk = i / 2;
+    }
+    else {
+        kwtuple = NULL;
+        k = NULL;
+    }
+    closure = PyFunction_GET_CLOSURE(func);
+#if PY_MAJOR_VERSION >= 3
+    kwdefs = PyFunction_GET_KW_DEFAULTS(func);
+#endif
+    if (argdefs != NULL) {
+        d = &PyTuple_GET_ITEM(argdefs, 0);
+        nd = Py_SIZE(argdefs);
+    }
+    else {
+        d = NULL;
+        nd = 0;
+    }
+#if PY_MAJOR_VERSION >= 3
+    result = PyEval_EvalCodeEx((PyObject*)co, globals, (PyObject *)NULL,
+                               args, nargs,
+                               k, (int)nk,
+                               d, (int)nd, kwdefs, closure);
+#else
+    result = PyEval_EvalCodeEx(co, globals, (PyObject *)NULL,
+                               args, nargs,
+                               k, (int)nk,
+                               d, (int)nd, closure);
+#endif
+    Py_XDECREF(kwtuple);
+done:
+    Py_LeaveRecursiveCall();
+    return result;
+}
+#endif
+#endif
+
+/* PyObjectCall */
+#if CYTHON_COMPILING_IN_CPYTHON
+static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw) {
+    PyObject *result;
+    ternaryfunc call = func->ob_type->tp_call;
+    if (unlikely(!call))
+        return PyObject_Call(func, arg, kw);
+    if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object")))
+        return NULL;
+    result = (*call)(func, arg, kw);
+    Py_LeaveRecursiveCall();
+    if (unlikely(!result) && unlikely(!PyErr_Occurred())) {
+        PyErr_SetString(
+            PyExc_SystemError,
+            "NULL result without error in PyObject_Call");
+    }
+    return result;
+}
+#endif
+
+/* PyObjectCallMethO */
+#if CYTHON_COMPILING_IN_CPYTHON
+static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg) {
+    PyObject *self, *result;
+    PyCFunction cfunc;
+    cfunc = PyCFunction_GET_FUNCTION(func);
+    self = PyCFunction_GET_SELF(func);
+    if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object")))
+        return NULL;
+    result = cfunc(self, arg);
+    Py_LeaveRecursiveCall();
+    if (unlikely(!result) && unlikely(!PyErr_Occurred())) {
+        PyErr_SetString(
+            PyExc_SystemError,
+            "NULL result without error in PyObject_Call");
+    }
+    return result;
+}
+#endif
+
+/* PyObjectCallOneArg */
+#if CYTHON_COMPILING_IN_CPYTHON
+static PyObject* __Pyx__PyObject_CallOneArg(PyObject *func, PyObject *arg) {
+    PyObject *result;
+    PyObject *args = PyTuple_New(1);
+    if (unlikely(!args)) return NULL;
+    Py_INCREF(arg);
+    PyTuple_SET_ITEM(args, 0, arg);
+    result = __Pyx_PyObject_Call(func, args, NULL);
+    Py_DECREF(args);
+    return result;
+}
+static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg) {
+#if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(func)) {
+        return __Pyx_PyFunction_FastCall(func, &arg, 1);
+    }
+#endif
+    if (likely(PyCFunction_Check(func))) {
+        if (likely(PyCFunction_GET_FLAGS(func) & METH_O)) {
+            return __Pyx_PyObject_CallMethO(func, arg);
+#if CYTHON_FAST_PYCCALL
+        } else if (PyCFunction_GET_FLAGS(func) & METH_FASTCALL) {
+            return __Pyx_PyCFunction_FastCall(func, &arg, 1);
+#endif
+        }
+    }
+    return __Pyx__PyObject_CallOneArg(func, arg);
+}
+#else
+static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg) {
+    PyObject *result;
+    PyObject *args = PyTuple_Pack(1, arg);
+    if (unlikely(!args)) return NULL;
+    result = __Pyx_PyObject_Call(func, args, NULL);
+    Py_DECREF(args);
+    return result;
+}
+#endif
+
+/* PyErrFetchRestore */
+#if CYTHON_FAST_THREAD_STATE
+static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb) {
+    PyObject *tmp_type, *tmp_value, *tmp_tb;
+    tmp_type = tstate->curexc_type;
+    tmp_value = tstate->curexc_value;
+    tmp_tb = tstate->curexc_traceback;
+    tstate->curexc_type = type;
+    tstate->curexc_value = value;
+    tstate->curexc_traceback = tb;
+    Py_XDECREF(tmp_type);
+    Py_XDECREF(tmp_value);
+    Py_XDECREF(tmp_tb);
+}
+static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) {
+    *type = tstate->curexc_type;
+    *value = tstate->curexc_value;
+    *tb = tstate->curexc_traceback;
+    tstate->curexc_type = 0;
+    tstate->curexc_value = 0;
+    tstate->curexc_traceback = 0;
+}
+#endif
+
+/* RaiseException */
+#if PY_MAJOR_VERSION < 3
+static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb,
+                        CYTHON_UNUSED PyObject *cause) {
+    __Pyx_PyThreadState_declare
+    Py_XINCREF(type);
+    if (!value || value == Py_None)
+        value = NULL;
+    else
+        Py_INCREF(value);
+    if (!tb || tb == Py_None)
+        tb = NULL;
+    else {
+        Py_INCREF(tb);
+        if (!PyTraceBack_Check(tb)) {
+            PyErr_SetString(PyExc_TypeError,
+                "raise: arg 3 must be a traceback or None");
+            goto raise_error;
+        }
+    }
+    if (PyType_Check(type)) {
+#if CYTHON_COMPILING_IN_PYPY
+        if (!value) {
+            Py_INCREF(Py_None);
+            value = Py_None;
+        }
+#endif
+        PyErr_NormalizeException(&type, &value, &tb);
+    } else {
+        if (value) {
+            PyErr_SetString(PyExc_TypeError,
+                "instance exception may not have a separate value");
+            goto raise_error;
+        }
+        value = type;
+        type = (PyObject*) Py_TYPE(type);
+        Py_INCREF(type);
+        if (!PyType_IsSubtype((PyTypeObject *)type, (PyTypeObject *)PyExc_BaseException)) {
+            PyErr_SetString(PyExc_TypeError,
+                "raise: exception class must be a subclass of BaseException");
+            goto raise_error;
+        }
+    }
+    __Pyx_PyThreadState_assign
+    __Pyx_ErrRestore(type, value, tb);
+    return;
+raise_error:
+    Py_XDECREF(value);
+    Py_XDECREF(type);
+    Py_XDECREF(tb);
+    return;
+}
+#else
+static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause) {
+    PyObject* owned_instance = NULL;
+    if (tb == Py_None) {
+        tb = 0;
+    } else if (tb && !PyTraceBack_Check(tb)) {
+        PyErr_SetString(PyExc_TypeError,
+            "raise: arg 3 must be a traceback or None");
+        goto bad;
+    }
+    if (value == Py_None)
+        value = 0;
+    if (PyExceptionInstance_Check(type)) {
+        if (value) {
+            PyErr_SetString(PyExc_TypeError,
+                "instance exception may not have a separate value");
+            goto bad;
+        }
+        value = type;
+        type = (PyObject*) Py_TYPE(value);
+    } else if (PyExceptionClass_Check(type)) {
+        PyObject *instance_class = NULL;
+        if (value && PyExceptionInstance_Check(value)) {
+            instance_class = (PyObject*) Py_TYPE(value);
+            if (instance_class != type) {
+                int is_subclass = PyObject_IsSubclass(instance_class, type);
+                if (!is_subclass) {
+                    instance_class = NULL;
+                } else if (unlikely(is_subclass == -1)) {
+                    goto bad;
+                } else {
+                    type = instance_class;
+                }
+            }
+        }
+        if (!instance_class) {
+            PyObject *args;
+            if (!value)
+                args = PyTuple_New(0);
+            else if (PyTuple_Check(value)) {
+                Py_INCREF(value);
+                args = value;
+            } else
+                args = PyTuple_Pack(1, value);
+            if (!args)
+                goto bad;
+            owned_instance = PyObject_Call(type, args, NULL);
+            Py_DECREF(args);
+            if (!owned_instance)
+                goto bad;
+            value = owned_instance;
+            if (!PyExceptionInstance_Check(value)) {
+                PyErr_Format(PyExc_TypeError,
+                             "calling %R should have returned an instance of "
+                             "BaseException, not %R",
+                             type, Py_TYPE(value));
+                goto bad;
+            }
+        }
+    } else {
+        PyErr_SetString(PyExc_TypeError,
+            "raise: exception class must be a subclass of BaseException");
+        goto bad;
+    }
+    if (cause) {
+        PyObject *fixed_cause;
+        if (cause == Py_None) {
+            fixed_cause = NULL;
+        } else if (PyExceptionClass_Check(cause)) {
+            fixed_cause = PyObject_CallObject(cause, NULL);
+            if (fixed_cause == NULL)
+                goto bad;
+        } else if (PyExceptionInstance_Check(cause)) {
+            fixed_cause = cause;
+            Py_INCREF(fixed_cause);
+        } else {
+            PyErr_SetString(PyExc_TypeError,
+                            "exception causes must derive from "
+                            "BaseException");
+            goto bad;
+        }
+        PyException_SetCause(value, fixed_cause);
+    }
+    PyErr_SetObject(type, value);
+    if (tb) {
+#if CYTHON_COMPILING_IN_PYPY
+        PyObject *tmp_type, *tmp_value, *tmp_tb;
+        PyErr_Fetch(&tmp_type, &tmp_value, &tmp_tb);
+        Py_INCREF(tb);
+        PyErr_Restore(tmp_type, tmp_value, tb);
+        Py_XDECREF(tmp_tb);
+#else
+        PyThreadState *tstate = __Pyx_PyThreadState_Current;
+        PyObject* tmp_tb = tstate->curexc_traceback;
+        if (tb != tmp_tb) {
+            Py_INCREF(tb);
+            tstate->curexc_traceback = tb;
+            Py_XDECREF(tmp_tb);
+        }
+#endif
+    }
+bad:
+    Py_XDECREF(owned_instance);
+    return;
+}
+#endif
+
+/* UnicodeAsUCS4 */
+static CYTHON_INLINE Py_UCS4 __Pyx_PyUnicode_AsPy_UCS4(PyObject* x) {
+   Py_ssize_t length;
+   #if CYTHON_PEP393_ENABLED
+   length = PyUnicode_GET_LENGTH(x);
+   if (likely(length == 1)) {
+       return PyUnicode_READ_CHAR(x, 0);
+   }
+   #else
+   length = PyUnicode_GET_SIZE(x);
+   if (likely(length == 1)) {
+       return PyUnicode_AS_UNICODE(x)[0];
+   }
+   #if Py_UNICODE_SIZE == 2
+   else if (PyUnicode_GET_SIZE(x) == 2) {
+       Py_UCS4 high_val = PyUnicode_AS_UNICODE(x)[0];
+       if (high_val >= 0xD800 && high_val <= 0xDBFF) {
+           Py_UCS4 low_val = PyUnicode_AS_UNICODE(x)[1];
+           if (low_val >= 0xDC00 && low_val <= 0xDFFF) {
+               return 0x10000 + (((high_val & ((1<<10)-1)) << 10) | (low_val & ((1<<10)-1)));
+           }
+       }
+   }
+   #endif
+   #endif
+   PyErr_Format(PyExc_ValueError,
+                "only single character unicode strings can be converted to Py_UCS4, "
+                "got length %" CYTHON_FORMAT_SSIZE_T "d", length);
+   return (Py_UCS4)-1;
+}
+
+/* object_ord */
+static long __Pyx__PyObject_Ord(PyObject* c) {
+    Py_ssize_t size;
+    if (PyBytes_Check(c)) {
+        size = PyBytes_GET_SIZE(c);
+        if (likely(size == 1)) {
+            return (unsigned char) PyBytes_AS_STRING(c)[0];
+        }
+#if PY_MAJOR_VERSION < 3
+    } else if (PyUnicode_Check(c)) {
+        return (long)__Pyx_PyUnicode_AsPy_UCS4(c);
+#endif
+#if (!CYTHON_COMPILING_IN_PYPY) || (defined(PyByteArray_AS_STRING) && defined(PyByteArray_GET_SIZE))
+    } else if (PyByteArray_Check(c)) {
+        size = PyByteArray_GET_SIZE(c);
+        if (likely(size == 1)) {
+            return (unsigned char) PyByteArray_AS_STRING(c)[0];
+        }
+#endif
+    } else {
+        PyErr_Format(PyExc_TypeError,
+            "ord() expected string of length 1, but %.200s found", c->ob_type->tp_name);
+        return (long)(Py_UCS4)-1;
+    }
+    PyErr_Format(PyExc_TypeError,
+        "ord() expected a character, but string of length %zd found", size);
+    return (long)(Py_UCS4)-1;
+}
+
+/* SetItemInt */
+static int __Pyx_SetItemInt_Generic(PyObject *o, PyObject *j, PyObject *v) {
+    int r;
+    if (!j) return -1;
+    r = PyObject_SetItem(o, j, v);
+    Py_DECREF(j);
+    return r;
+}
+static CYTHON_INLINE int __Pyx_SetItemInt_Fast(PyObject *o, Py_ssize_t i, PyObject *v, int is_list,
+                                               CYTHON_NCP_UNUSED int wraparound, CYTHON_NCP_UNUSED int boundscheck) {
+#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS && CYTHON_USE_TYPE_SLOTS
+    if (is_list || PyList_CheckExact(o)) {
+        Py_ssize_t n = (!wraparound) ? i : ((likely(i >= 0)) ? i : i + PyList_GET_SIZE(o));
+        if ((!boundscheck) || likely(__Pyx_is_valid_index(n, PyList_GET_SIZE(o)))) {
+            PyObject* old = PyList_GET_ITEM(o, n);
+            Py_INCREF(v);
+            PyList_SET_ITEM(o, n, v);
+            Py_DECREF(old);
+            return 1;
+        }
+    } else {
+        PySequenceMethods *m = Py_TYPE(o)->tp_as_sequence;
+        if (likely(m && m->sq_ass_item)) {
+            if (wraparound && unlikely(i < 0) && likely(m->sq_length)) {
+                Py_ssize_t l = m->sq_length(o);
+                if (likely(l >= 0)) {
+                    i += l;
+                } else {
+                    if (!PyErr_ExceptionMatches(PyExc_OverflowError))
+                        return -1;
+                    PyErr_Clear();
+                }
+            }
+            return m->sq_ass_item(o, i, v);
+        }
+    }
+#else
+#if CYTHON_COMPILING_IN_PYPY
+    if (is_list || (PySequence_Check(o) && !PyDict_Check(o)))
+#else
+    if (is_list || PySequence_Check(o))
+#endif
+    {
+        return PySequence_SetItem(o, i, v);
+    }
+#endif
+    return __Pyx_SetItemInt_Generic(o, PyInt_FromSsize_t(i), v);
+}
+
+/* IterFinish */
+static CYTHON_INLINE int __Pyx_IterFinish(void) {
+#if CYTHON_FAST_THREAD_STATE
+    PyThreadState *tstate = __Pyx_PyThreadState_Current;
+    PyObject* exc_type = tstate->curexc_type;
+    if (unlikely(exc_type)) {
+        if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) {
+            PyObject *exc_value, *exc_tb;
+            exc_value = tstate->curexc_value;
+            exc_tb = tstate->curexc_traceback;
+            tstate->curexc_type = 0;
+            tstate->curexc_value = 0;
+            tstate->curexc_traceback = 0;
+            Py_DECREF(exc_type);
+            Py_XDECREF(exc_value);
+            Py_XDECREF(exc_tb);
+            return 0;
+        } else {
+            return -1;
+        }
+    }
+    return 0;
+#else
+    if (unlikely(PyErr_Occurred())) {
+        if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) {
+            PyErr_Clear();
+            return 0;
+        } else {
+            return -1;
+        }
+    }
+    return 0;
+#endif
+}
+
+/* PyObjectCallNoArg */
+#if CYTHON_COMPILING_IN_CPYTHON
+static CYTHON_INLINE PyObject* __Pyx_PyObject_CallNoArg(PyObject *func) {
+#if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(func)) {
+        return __Pyx_PyFunction_FastCall(func, NULL, 0);
+    }
+#endif
+#ifdef __Pyx_CyFunction_USED
+    if (likely(PyCFunction_Check(func) || __Pyx_CyFunction_Check(func)))
+#else
+    if (likely(PyCFunction_Check(func)))
+#endif
+    {
+        if (likely(PyCFunction_GET_FLAGS(func) & METH_NOARGS)) {
+            return __Pyx_PyObject_CallMethO(func, NULL);
+        }
+    }
+    return __Pyx_PyObject_Call(func, __pyx_empty_tuple, NULL);
+}
+#endif
+
+/* PyObjectGetMethod */
+static int __Pyx_PyObject_GetMethod(PyObject *obj, PyObject *name, PyObject **method) {
+    PyObject *attr;
+#if CYTHON_UNPACK_METHODS && CYTHON_COMPILING_IN_CPYTHON && CYTHON_USE_PYTYPE_LOOKUP
+    PyTypeObject *tp = Py_TYPE(obj);
+    PyObject *descr;
+    descrgetfunc f = NULL;
+    PyObject **dictptr, *dict;
+    int meth_found = 0;
+    assert (*method == NULL);
+    if (unlikely(tp->tp_getattro != PyObject_GenericGetAttr)) {
+        attr = __Pyx_PyObject_GetAttrStr(obj, name);
+        goto try_unpack;
+    }
+    if (unlikely(tp->tp_dict == NULL) && unlikely(PyType_Ready(tp) < 0)) {
+        return 0;
+    }
+    descr = _PyType_Lookup(tp, name);
+    if (likely(descr != NULL)) {
+        Py_INCREF(descr);
+#if PY_MAJOR_VERSION >= 3
+        #ifdef __Pyx_CyFunction_USED
+        if (likely(PyFunction_Check(descr) || (Py_TYPE(descr) == &PyMethodDescr_Type) || __Pyx_CyFunction_Check(descr)))
+        #else
+        if (likely(PyFunction_Check(descr) || (Py_TYPE(descr) == &PyMethodDescr_Type)))
+        #endif
+#else
+        #ifdef __Pyx_CyFunction_USED
+        if (likely(PyFunction_Check(descr) || __Pyx_CyFunction_Check(descr)))
+        #else
+        if (likely(PyFunction_Check(descr)))
+        #endif
+#endif
+        {
+            meth_found = 1;
+        } else {
+            f = Py_TYPE(descr)->tp_descr_get;
+            if (f != NULL && PyDescr_IsData(descr)) {
+                attr = f(descr, obj, (PyObject *)Py_TYPE(obj));
+                Py_DECREF(descr);
+                goto try_unpack;
+            }
+        }
+    }
+    dictptr = _PyObject_GetDictPtr(obj);
+    if (dictptr != NULL && (dict = *dictptr) != NULL) {
+        Py_INCREF(dict);
+        attr = __Pyx_PyDict_GetItemStr(dict, name);
+        if (attr != NULL) {
+            Py_INCREF(attr);
+            Py_DECREF(dict);
+            Py_XDECREF(descr);
+            goto try_unpack;
+        }
+        Py_DECREF(dict);
+    }
+    if (meth_found) {
+        *method = descr;
+        return 1;
+    }
+    if (f != NULL) {
+        attr = f(descr, obj, (PyObject *)Py_TYPE(obj));
+        Py_DECREF(descr);
+        goto try_unpack;
+    }
+    if (descr != NULL) {
+        *method = descr;
+        return 0;
+    }
+    PyErr_Format(PyExc_AttributeError,
+#if PY_MAJOR_VERSION >= 3
+                 "'%.50s' object has no attribute '%U'",
+                 tp->tp_name, name);
+#else
+                 "'%.50s' object has no attribute '%.400s'",
+                 tp->tp_name, PyString_AS_STRING(name));
+#endif
+    return 0;
+#else
+    attr = __Pyx_PyObject_GetAttrStr(obj, name);
+    goto try_unpack;
+#endif
+try_unpack:
+#if CYTHON_UNPACK_METHODS
+    if (likely(attr) && PyMethod_Check(attr) && likely(PyMethod_GET_SELF(attr) == obj)) {
+        PyObject *function = PyMethod_GET_FUNCTION(attr);
+        Py_INCREF(function);
+        Py_DECREF(attr);
+        *method = function;
+        return 1;
+    }
+#endif
+    *method = attr;
+    return 0;
+}
+
+/* PyObjectCallMethod0 */
+static PyObject* __Pyx_PyObject_CallMethod0(PyObject* obj, PyObject* method_name) {
+    PyObject *method = NULL, *result = NULL;
+    int is_method = __Pyx_PyObject_GetMethod(obj, method_name, &method);
+    if (likely(is_method)) {
+        result = __Pyx_PyObject_CallOneArg(method, obj);
+        Py_DECREF(method);
+        return result;
+    }
+    if (unlikely(!method)) goto bad;
+    result = __Pyx_PyObject_CallNoArg(method);
+    Py_DECREF(method);
+bad:
+    return result;
+}
+
+/* RaiseNeedMoreValuesToUnpack */
+static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index) {
+    PyErr_Format(PyExc_ValueError,
+                 "need more than %" CYTHON_FORMAT_SSIZE_T "d value%.1s to unpack",
+                 index, (index == 1) ? "" : "s");
+}
+
+/* RaiseTooManyValuesToUnpack */
+static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected) {
+    PyErr_Format(PyExc_ValueError,
+                 "too many values to unpack (expected %" CYTHON_FORMAT_SSIZE_T "d)", expected);
+}
+
+/* UnpackItemEndCheck */
+static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected) {
+    if (unlikely(retval)) {
+        Py_DECREF(retval);
+        __Pyx_RaiseTooManyValuesError(expected);
+        return -1;
+    } else {
+        return __Pyx_IterFinish();
+    }
+    return 0;
+}
+
+/* RaiseNoneIterError */
+static CYTHON_INLINE void __Pyx_RaiseNoneNotIterableError(void) {
+    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
+}
+
+/* UnpackTupleError */
+static void __Pyx_UnpackTupleError(PyObject *t, Py_ssize_t index) {
+    if (t == Py_None) {
+      __Pyx_RaiseNoneNotIterableError();
+    } else if (PyTuple_GET_SIZE(t) < index) {
+      __Pyx_RaiseNeedMoreValuesError(PyTuple_GET_SIZE(t));
+    } else {
+      __Pyx_RaiseTooManyValuesError(index);
+    }
+}
+
+/* UnpackTuple2 */
+static CYTHON_INLINE int __Pyx_unpack_tuple2_exact(
+        PyObject* tuple, PyObject** pvalue1, PyObject** pvalue2, int decref_tuple) {
+    PyObject *value1 = NULL, *value2 = NULL;
+#if CYTHON_COMPILING_IN_PYPY
+    value1 = PySequence_ITEM(tuple, 0);  if (unlikely(!value1)) goto bad;
+    value2 = PySequence_ITEM(tuple, 1);  if (unlikely(!value2)) goto bad;
+#else
+    value1 = PyTuple_GET_ITEM(tuple, 0);  Py_INCREF(value1);
+    value2 = PyTuple_GET_ITEM(tuple, 1);  Py_INCREF(value2);
+#endif
+    if (decref_tuple) {
+        Py_DECREF(tuple);
+    }
+    *pvalue1 = value1;
+    *pvalue2 = value2;
+    return 0;
+#if CYTHON_COMPILING_IN_PYPY
+bad:
+    Py_XDECREF(value1);
+    Py_XDECREF(value2);
+    if (decref_tuple) { Py_XDECREF(tuple); }
+    return -1;
+#endif
+}
+static int __Pyx_unpack_tuple2_generic(PyObject* tuple, PyObject** pvalue1, PyObject** pvalue2,
+                                       int has_known_size, int decref_tuple) {
+    Py_ssize_t index;
+    PyObject *value1 = NULL, *value2 = NULL, *iter = NULL;
+    iternextfunc iternext;
+    iter = PyObject_GetIter(tuple);
+    if (unlikely(!iter)) goto bad;
+    if (decref_tuple) { Py_DECREF(tuple); tuple = NULL; }
+    iternext = Py_TYPE(iter)->tp_iternext;
+    value1 = iternext(iter); if (unlikely(!value1)) { index = 0; goto unpacking_failed; }
+    value2 = iternext(iter); if (unlikely(!value2)) { index = 1; goto unpacking_failed; }
+    if (!has_known_size && unlikely(__Pyx_IternextUnpackEndCheck(iternext(iter), 2))) goto bad;
+    Py_DECREF(iter);
+    *pvalue1 = value1;
+    *pvalue2 = value2;
+    return 0;
+unpacking_failed:
+    if (!has_known_size && __Pyx_IterFinish() == 0)
+        __Pyx_RaiseNeedMoreValuesError(index);
+bad:
+    Py_XDECREF(iter);
+    Py_XDECREF(value1);
+    Py_XDECREF(value2);
+    if (decref_tuple) { Py_XDECREF(tuple); }
+    return -1;
+}
+
+/* dict_iter */
+static CYTHON_INLINE PyObject* __Pyx_dict_iterator(PyObject* iterable, int is_dict, PyObject* method_name,
+                                                   Py_ssize_t* p_orig_length, int* p_source_is_dict) {
+    is_dict = is_dict || likely(PyDict_CheckExact(iterable));
+    *p_source_is_dict = is_dict;
+    if (is_dict) {
+#if !CYTHON_COMPILING_IN_PYPY
+        *p_orig_length = PyDict_Size(iterable);
+        Py_INCREF(iterable);
+        return iterable;
+#elif PY_MAJOR_VERSION >= 3
+        static PyObject *py_items = NULL, *py_keys = NULL, *py_values = NULL;
+        PyObject **pp = NULL;
+        if (method_name) {
+            const char *name = PyUnicode_AsUTF8(method_name);
+            if (strcmp(name, "iteritems") == 0) pp = &py_items;
+            else if (strcmp(name, "iterkeys") == 0) pp = &py_keys;
+            else if (strcmp(name, "itervalues") == 0) pp = &py_values;
+            if (pp) {
+                if (!*pp) {
+                    *pp = PyUnicode_FromString(name + 4);
+                    if (!*pp)
+                        return NULL;
+                }
+                method_name = *pp;
+            }
+        }
+#endif
+    }
+    *p_orig_length = 0;
+    if (method_name) {
+        PyObject* iter;
+        iterable = __Pyx_PyObject_CallMethod0(iterable, method_name);
+        if (!iterable)
+            return NULL;
+#if !CYTHON_COMPILING_IN_PYPY
+        if (PyTuple_CheckExact(iterable) || PyList_CheckExact(iterable))
+            return iterable;
+#endif
+        iter = PyObject_GetIter(iterable);
+        Py_DECREF(iterable);
+        return iter;
+    }
+    return PyObject_GetIter(iterable);
+}
+static CYTHON_INLINE int __Pyx_dict_iter_next(
+        PyObject* iter_obj, CYTHON_NCP_UNUSED Py_ssize_t orig_length, CYTHON_NCP_UNUSED Py_ssize_t* ppos,
+        PyObject** pkey, PyObject** pvalue, PyObject** pitem, int source_is_dict) {
+    PyObject* next_item;
+#if !CYTHON_COMPILING_IN_PYPY
+    if (source_is_dict) {
+        PyObject *key, *value;
+        if (unlikely(orig_length != PyDict_Size(iter_obj))) {
+            PyErr_SetString(PyExc_RuntimeError, "dictionary changed size during iteration");
+            return -1;
+        }
+        if (unlikely(!PyDict_Next(iter_obj, ppos, &key, &value))) {
+            return 0;
+        }
+        if (pitem) {
+            PyObject* tuple = PyTuple_New(2);
+            if (unlikely(!tuple)) {
+                return -1;
+            }
+            Py_INCREF(key);
+            Py_INCREF(value);
+            PyTuple_SET_ITEM(tuple, 0, key);
+            PyTuple_SET_ITEM(tuple, 1, value);
+            *pitem = tuple;
+        } else {
+            if (pkey) {
+                Py_INCREF(key);
+                *pkey = key;
+            }
+            if (pvalue) {
+                Py_INCREF(value);
+                *pvalue = value;
+            }
+        }
+        return 1;
+    } else if (PyTuple_CheckExact(iter_obj)) {
+        Py_ssize_t pos = *ppos;
+        if (unlikely(pos >= PyTuple_GET_SIZE(iter_obj))) return 0;
+        *ppos = pos + 1;
+        next_item = PyTuple_GET_ITEM(iter_obj, pos);
+        Py_INCREF(next_item);
+    } else if (PyList_CheckExact(iter_obj)) {
+        Py_ssize_t pos = *ppos;
+        if (unlikely(pos >= PyList_GET_SIZE(iter_obj))) return 0;
+        *ppos = pos + 1;
+        next_item = PyList_GET_ITEM(iter_obj, pos);
+        Py_INCREF(next_item);
+    } else
+#endif
+    {
+        next_item = PyIter_Next(iter_obj);
+        if (unlikely(!next_item)) {
+            return __Pyx_IterFinish();
+        }
+    }
+    if (pitem) {
+        *pitem = next_item;
+    } else if (pkey && pvalue) {
+        if (__Pyx_unpack_tuple2(next_item, pkey, pvalue, source_is_dict, source_is_dict, 1))
+            return -1;
+    } else if (pkey) {
+        *pkey = next_item;
+    } else {
+        *pvalue = next_item;
+    }
+    return 1;
+}
+
+/* PyObjectCall2Args */
+static CYTHON_UNUSED PyObject* __Pyx_PyObject_Call2Args(PyObject* function, PyObject* arg1, PyObject* arg2) {
+    PyObject *args, *result = NULL;
+    #if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(function)) {
+        PyObject *args[2] = {arg1, arg2};
+        return __Pyx_PyFunction_FastCall(function, args, 2);
+    }
+    #endif
+    #if CYTHON_FAST_PYCCALL
+    if (__Pyx_PyFastCFunction_Check(function)) {
+        PyObject *args[2] = {arg1, arg2};
+        return __Pyx_PyCFunction_FastCall(function, args, 2);
+    }
+    #endif
+    args = PyTuple_New(2);
+    if (unlikely(!args)) goto done;
+    Py_INCREF(arg1);
+    PyTuple_SET_ITEM(args, 0, arg1);
+    Py_INCREF(arg2);
+    PyTuple_SET_ITEM(args, 1, arg2);
+    Py_INCREF(function);
+    result = __Pyx_PyObject_Call(function, args, NULL);
+    Py_DECREF(args);
+    Py_DECREF(function);
+done:
+    return result;
+}
+
+/* GetItemInt */
+static PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j) {
+    PyObject *r;
+    if (!j) return NULL;
+    r = PyObject_GetItem(o, j);
+    Py_DECREF(j);
+    return r;
+}
+static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i,
+                                                              CYTHON_NCP_UNUSED int wraparound,
+                                                              CYTHON_NCP_UNUSED int boundscheck) {
+#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+    Py_ssize_t wrapped_i = i;
+    if (wraparound & unlikely(i < 0)) {
+        wrapped_i += PyList_GET_SIZE(o);
+    }
+    if ((!boundscheck) || likely(__Pyx_is_valid_index(wrapped_i, PyList_GET_SIZE(o)))) {
+        PyObject *r = PyList_GET_ITEM(o, wrapped_i);
+        Py_INCREF(r);
+        return r;
+    }
+    return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i));
+#else
+    return PySequence_GetItem(o, i);
+#endif
+}
+static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i,
+                                                              CYTHON_NCP_UNUSED int wraparound,
+                                                              CYTHON_NCP_UNUSED int boundscheck) {
+#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+    Py_ssize_t wrapped_i = i;
+    if (wraparound & unlikely(i < 0)) {
+        wrapped_i += PyTuple_GET_SIZE(o);
+    }
+    if ((!boundscheck) || likely(__Pyx_is_valid_index(wrapped_i, PyTuple_GET_SIZE(o)))) {
+        PyObject *r = PyTuple_GET_ITEM(o, wrapped_i);
+        Py_INCREF(r);
+        return r;
+    }
+    return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i));
+#else
+    return PySequence_GetItem(o, i);
+#endif
+}
+static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i, int is_list,
+                                                     CYTHON_NCP_UNUSED int wraparound,
+                                                     CYTHON_NCP_UNUSED int boundscheck) {
+#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS && CYTHON_USE_TYPE_SLOTS
+    if (is_list || PyList_CheckExact(o)) {
+        Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyList_GET_SIZE(o);
+        if ((!boundscheck) || (likely(__Pyx_is_valid_index(n, PyList_GET_SIZE(o))))) {
+            PyObject *r = PyList_GET_ITEM(o, n);
+            Py_INCREF(r);
+            return r;
+        }
+    }
+    else if (PyTuple_CheckExact(o)) {
+        Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyTuple_GET_SIZE(o);
+        if ((!boundscheck) || likely(__Pyx_is_valid_index(n, PyTuple_GET_SIZE(o)))) {
+            PyObject *r = PyTuple_GET_ITEM(o, n);
+            Py_INCREF(r);
+            return r;
+        }
+    } else {
+        PySequenceMethods *m = Py_TYPE(o)->tp_as_sequence;
+        if (likely(m && m->sq_item)) {
+            if (wraparound && unlikely(i < 0) && likely(m->sq_length)) {
+                Py_ssize_t l = m->sq_length(o);
+                if (likely(l >= 0)) {
+                    i += l;
+                } else {
+                    if (!PyErr_ExceptionMatches(PyExc_OverflowError))
+                        return NULL;
+                    PyErr_Clear();
+                }
+            }
+            return m->sq_item(o, i);
+        }
+    }
+#else
+    if (is_list || PySequence_Check(o)) {
+        return PySequence_GetItem(o, i);
+    }
+#endif
+    return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i));
+}
+
+/* IsLittleEndian */
+static CYTHON_INLINE int __Pyx_Is_Little_Endian(void)
+{
+  union {
+    uint32_t u32;
+    uint8_t u8[4];
+  } S;
+  S.u32 = 0x01020304;
+  return S.u8[0] == 4;
+}
+
+/* BufferFormatCheck */
+static void __Pyx_BufFmt_Init(__Pyx_BufFmt_Context* ctx,
+                              __Pyx_BufFmt_StackElem* stack,
+                              __Pyx_TypeInfo* type) {
+  stack[0].field = &ctx->root;
+  stack[0].parent_offset = 0;
+  ctx->root.type = type;
+  ctx->root.name = "buffer dtype";
+  ctx->root.offset = 0;
+  ctx->head = stack;
+  ctx->head->field = &ctx->root;
+  ctx->fmt_offset = 0;
+  ctx->head->parent_offset = 0;
+  ctx->new_packmode = '@';
+  ctx->enc_packmode = '@';
+  ctx->new_count = 1;
+  ctx->enc_count = 0;
+  ctx->enc_type = 0;
+  ctx->is_complex = 0;
+  ctx->is_valid_array = 0;
+  ctx->struct_alignment = 0;
+  while (type->typegroup == 'S') {
+    ++ctx->head;
+    ctx->head->field = type->fields;
+    ctx->head->parent_offset = 0;
+    type = type->fields->type;
+  }
+}
+static int __Pyx_BufFmt_ParseNumber(const char** ts) {
+    int count;
+    const char* t = *ts;
+    if (*t < '0' || *t > '9') {
+      return -1;
+    } else {
+        count = *t++ - '0';
+        while (*t >= '0' && *t < '9') {
+            count *= 10;
+            count += *t++ - '0';
+        }
+    }
+    *ts = t;
+    return count;
+}
+static int __Pyx_BufFmt_ExpectNumber(const char **ts) {
+    int number = __Pyx_BufFmt_ParseNumber(ts);
+    if (number == -1)
+        PyErr_Format(PyExc_ValueError,\
+                     "Does not understand character buffer dtype format string ('%c')", **ts);
+    return number;
+}
+static void __Pyx_BufFmt_RaiseUnexpectedChar(char ch) {
+  PyErr_Format(PyExc_ValueError,
+               "Unexpected format string character: '%c'", ch);
+}
+static const char* __Pyx_BufFmt_DescribeTypeChar(char ch, int is_complex) {
+  switch (ch) {
+    case 'c': return "'char'";
+    case 'b': return "'signed char'";
+    case 'B': return "'unsigned char'";
+    case 'h': return "'short'";
+    case 'H': return "'unsigned short'";
+    case 'i': return "'int'";
+    case 'I': return "'unsigned int'";
+    case 'l': return "'long'";
+    case 'L': return "'unsigned long'";
+    case 'q': return "'long long'";
+    case 'Q': return "'unsigned long long'";
+    case 'f': return (is_complex ? "'complex float'" : "'float'");
+    case 'd': return (is_complex ? "'complex double'" : "'double'");
+    case 'g': return (is_complex ? "'complex long double'" : "'long double'");
+    case 'T': return "a struct";
+    case 'O': return "Python object";
+    case 'P': return "a pointer";
+    case 's': case 'p': return "a string";
+    case 0: return "end";
+    default: return "unparseable format string";
+  }
+}
+static size_t __Pyx_BufFmt_TypeCharToStandardSize(char ch, int is_complex) {
+  switch (ch) {
+    case '?': case 'c': case 'b': case 'B': case 's': case 'p': return 1;
+    case 'h': case 'H': return 2;
+    case 'i': case 'I': case 'l': case 'L': return 4;
+    case 'q': case 'Q': return 8;
+    case 'f': return (is_complex ? 8 : 4);
+    case 'd': return (is_complex ? 16 : 8);
+    case 'g': {
+      PyErr_SetString(PyExc_ValueError, "Python does not define a standard format string size for long double ('g')..");
+      return 0;
+    }
+    case 'O': case 'P': return sizeof(void*);
+    default:
+      __Pyx_BufFmt_RaiseUnexpectedChar(ch);
+      return 0;
+    }
+}
+static size_t __Pyx_BufFmt_TypeCharToNativeSize(char ch, int is_complex) {
+  switch (ch) {
+    case 'c': case 'b': case 'B': case 's': case 'p': return 1;
+    case 'h': case 'H': return sizeof(short);
+    case 'i': case 'I': return sizeof(int);
+    case 'l': case 'L': return sizeof(long);
+    #ifdef HAVE_LONG_LONG
+    case 'q': case 'Q': return sizeof(PY_LONG_LONG);
+    #endif
+    case 'f': return sizeof(float) * (is_complex ? 2 : 1);
+    case 'd': return sizeof(double) * (is_complex ? 2 : 1);
+    case 'g': return sizeof(long double) * (is_complex ? 2 : 1);
+    case 'O': case 'P': return sizeof(void*);
+    default: {
+      __Pyx_BufFmt_RaiseUnexpectedChar(ch);
+      return 0;
+    }
+  }
+}
+typedef struct { char c; short x; } __Pyx_st_short;
+typedef struct { char c; int x; } __Pyx_st_int;
+typedef struct { char c; long x; } __Pyx_st_long;
+typedef struct { char c; float x; } __Pyx_st_float;
+typedef struct { char c; double x; } __Pyx_st_double;
+typedef struct { char c; long double x; } __Pyx_st_longdouble;
+typedef struct { char c; void *x; } __Pyx_st_void_p;
+#ifdef HAVE_LONG_LONG
+typedef struct { char c; PY_LONG_LONG x; } __Pyx_st_longlong;
+#endif
+static size_t __Pyx_BufFmt_TypeCharToAlignment(char ch, CYTHON_UNUSED int is_complex) {
+  switch (ch) {
+    case '?': case 'c': case 'b': case 'B': case 's': case 'p': return 1;
+    case 'h': case 'H': return sizeof(__Pyx_st_short) - sizeof(short);
+    case 'i': case 'I': return sizeof(__Pyx_st_int) - sizeof(int);
+    case 'l': case 'L': return sizeof(__Pyx_st_long) - sizeof(long);
+#ifdef HAVE_LONG_LONG
+    case 'q': case 'Q': return sizeof(__Pyx_st_longlong) - sizeof(PY_LONG_LONG);
+#endif
+    case 'f': return sizeof(__Pyx_st_float) - sizeof(float);
+    case 'd': return sizeof(__Pyx_st_double) - sizeof(double);
+    case 'g': return sizeof(__Pyx_st_longdouble) - sizeof(long double);
+    case 'P': case 'O': return sizeof(__Pyx_st_void_p) - sizeof(void*);
+    default:
+      __Pyx_BufFmt_RaiseUnexpectedChar(ch);
+      return 0;
+    }
+}
+/* These are for computing the padding at the end of the struct to align
+   on the first member of the struct. This will probably the same as above,
+   but we don't have any guarantees.
+ */
+typedef struct { short x; char c; } __Pyx_pad_short;
+typedef struct { int x; char c; } __Pyx_pad_int;
+typedef struct { long x; char c; } __Pyx_pad_long;
+typedef struct { float x; char c; } __Pyx_pad_float;
+typedef struct { double x; char c; } __Pyx_pad_double;
+typedef struct { long double x; char c; } __Pyx_pad_longdouble;
+typedef struct { void *x; char c; } __Pyx_pad_void_p;
+#ifdef HAVE_LONG_LONG
+typedef struct { PY_LONG_LONG x; char c; } __Pyx_pad_longlong;
+#endif
+static size_t __Pyx_BufFmt_TypeCharToPadding(char ch, CYTHON_UNUSED int is_complex) {
+  switch (ch) {
+    case '?': case 'c': case 'b': case 'B': case 's': case 'p': return 1;
+    case 'h': case 'H': return sizeof(__Pyx_pad_short) - sizeof(short);
+    case 'i': case 'I': return sizeof(__Pyx_pad_int) - sizeof(int);
+    case 'l': case 'L': return sizeof(__Pyx_pad_long) - sizeof(long);
+#ifdef HAVE_LONG_LONG
+    case 'q': case 'Q': return sizeof(__Pyx_pad_longlong) - sizeof(PY_LONG_LONG);
+#endif
+    case 'f': return sizeof(__Pyx_pad_float) - sizeof(float);
+    case 'd': return sizeof(__Pyx_pad_double) - sizeof(double);
+    case 'g': return sizeof(__Pyx_pad_longdouble) - sizeof(long double);
+    case 'P': case 'O': return sizeof(__Pyx_pad_void_p) - sizeof(void*);
+    default:
+      __Pyx_BufFmt_RaiseUnexpectedChar(ch);
+      return 0;
+    }
+}
+static char __Pyx_BufFmt_TypeCharToGroup(char ch, int is_complex) {
+  switch (ch) {
+    case 'c':
+        return 'H';
+    case 'b': case 'h': case 'i':
+    case 'l': case 'q': case 's': case 'p':
+        return 'I';
+    case 'B': case 'H': case 'I': case 'L': case 'Q':
+        return 'U';
+    case 'f': case 'd': case 'g':
+        return (is_complex ? 'C' : 'R');
+    case 'O':
+        return 'O';
+    case 'P':
+        return 'P';
+    default: {
+      __Pyx_BufFmt_RaiseUnexpectedChar(ch);
+      return 0;
+    }
+  }
+}
+static void __Pyx_BufFmt_RaiseExpected(__Pyx_BufFmt_Context* ctx) {
+  if (ctx->head == NULL || ctx->head->field == &ctx->root) {
+    const char* expected;
+    const char* quote;
+    if (ctx->head == NULL) {
+      expected = "end";
+      quote = "";
+    } else {
+      expected = ctx->head->field->type->name;
+      quote = "'";
+    }
+    PyErr_Format(PyExc_ValueError,
+                 "Buffer dtype mismatch, expected %s%s%s but got %s",
+                 quote, expected, quote,
+                 __Pyx_BufFmt_DescribeTypeChar(ctx->enc_type, ctx->is_complex));
+  } else {
+    __Pyx_StructField* field = ctx->head->field;
+    __Pyx_StructField* parent = (ctx->head - 1)->field;
+    PyErr_Format(PyExc_ValueError,
+                 "Buffer dtype mismatch, expected '%s' but got %s in '%s.%s'",
+                 field->type->name, __Pyx_BufFmt_DescribeTypeChar(ctx->enc_type, ctx->is_complex),
+                 parent->type->name, field->name);
+  }
+}
+static int __Pyx_BufFmt_ProcessTypeChunk(__Pyx_BufFmt_Context* ctx) {
+  char group;
+  size_t size, offset, arraysize = 1;
+  if (ctx->enc_type == 0) return 0;
+  if (ctx->head->field->type->arraysize[0]) {
+    int i, ndim = 0;
+    if (ctx->enc_type == 's' || ctx->enc_type == 'p') {
+        ctx->is_valid_array = ctx->head->field->type->ndim == 1;
+        ndim = 1;
+        if (ctx->enc_count != ctx->head->field->type->arraysize[0]) {
+            PyErr_Format(PyExc_ValueError,
+                         "Expected a dimension of size %zu, got %zu",
+                         ctx->head->field->type->arraysize[0], ctx->enc_count);
+            return -1;
+        }
+    }
+    if (!ctx->is_valid_array) {
+      PyErr_Format(PyExc_ValueError, "Expected %d dimensions, got %d",
+                   ctx->head->field->type->ndim, ndim);
+      return -1;
+    }
+    for (i = 0; i < ctx->head->field->type->ndim; i++) {
+      arraysize *= ctx->head->field->type->arraysize[i];
+    }
+    ctx->is_valid_array = 0;
+    ctx->enc_count = 1;
+  }
+  group = __Pyx_BufFmt_TypeCharToGroup(ctx->enc_type, ctx->is_complex);
+  do {
+    __Pyx_StructField* field = ctx->head->field;
+    __Pyx_TypeInfo* type = field->type;
+    if (ctx->enc_packmode == '@' || ctx->enc_packmode == '^') {
+      size = __Pyx_BufFmt_TypeCharToNativeSize(ctx->enc_type, ctx->is_complex);
+    } else {
+      size = __Pyx_BufFmt_TypeCharToStandardSize(ctx->enc_type, ctx->is_complex);
+    }
+    if (ctx->enc_packmode == '@') {
+      size_t align_at = __Pyx_BufFmt_TypeCharToAlignment(ctx->enc_type, ctx->is_complex);
+      size_t align_mod_offset;
+      if (align_at == 0) return -1;
+      align_mod_offset = ctx->fmt_offset % align_at;
+      if (align_mod_offset > 0) ctx->fmt_offset += align_at - align_mod_offset;
+      if (ctx->struct_alignment == 0)
+          ctx->struct_alignment = __Pyx_BufFmt_TypeCharToPadding(ctx->enc_type,
+                                                                 ctx->is_complex);
+    }
+    if (type->size != size || type->typegroup != group) {
+      if (type->typegroup == 'C' && type->fields != NULL) {
+        size_t parent_offset = ctx->head->parent_offset + field->offset;
+        ++ctx->head;
+        ctx->head->field = type->fields;
+        ctx->head->parent_offset = parent_offset;
+        continue;
+      }
+      if ((type->typegroup == 'H' || group == 'H') && type->size == size) {
+      } else {
+          __Pyx_BufFmt_RaiseExpected(ctx);
+          return -1;
+      }
+    }
+    offset = ctx->head->parent_offset + field->offset;
+    if (ctx->fmt_offset != offset) {
+      PyErr_Format(PyExc_ValueError,
+                   "Buffer dtype mismatch; next field is at offset %" CYTHON_FORMAT_SSIZE_T "d but %" CYTHON_FORMAT_SSIZE_T "d expected",
+                   (Py_ssize_t)ctx->fmt_offset, (Py_ssize_t)offset);
+      return -1;
+    }
+    ctx->fmt_offset += size;
+    if (arraysize)
+      ctx->fmt_offset += (arraysize - 1) * size;
+    --ctx->enc_count;
+    while (1) {
+      if (field == &ctx->root) {
+        ctx->head = NULL;
+        if (ctx->enc_count != 0) {
+          __Pyx_BufFmt_RaiseExpected(ctx);
+          return -1;
+        }
+        break;
+      }
+      ctx->head->field = ++field;
+      if (field->type == NULL) {
+        --ctx->head;
+        field = ctx->head->field;
+        continue;
+      } else if (field->type->typegroup == 'S') {
+        size_t parent_offset = ctx->head->parent_offset + field->offset;
+        if (field->type->fields->type == NULL) continue;
+        field = field->type->fields;
+        ++ctx->head;
+        ctx->head->field = field;
+        ctx->head->parent_offset = parent_offset;
+        break;
+      } else {
+        break;
+      }
+    }
+  } while (ctx->enc_count);
+  ctx->enc_type = 0;
+  ctx->is_complex = 0;
+  return 0;
+}
+static PyObject *
+__pyx_buffmt_parse_array(__Pyx_BufFmt_Context* ctx, const char** tsp)
+{
+    const char *ts = *tsp;
+    int i = 0, number;
+    int ndim = ctx->head->field->type->ndim;
+;
+    ++ts;
+    if (ctx->new_count != 1) {
+        PyErr_SetString(PyExc_ValueError,
+                        "Cannot handle repeated arrays in format string");
+        return NULL;
+    }
+    if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL;
+    while (*ts && *ts != ')') {
+        switch (*ts) {
+            case ' ': case '\f': case '\r': case '\n': case '\t': case '\v':  continue;
+            default:  break;
+        }
+        number = __Pyx_BufFmt_ExpectNumber(&ts);
+        if (number == -1) return NULL;
+        if (i < ndim && (size_t) number != ctx->head->field->type->arraysize[i])
+            return PyErr_Format(PyExc_ValueError,
+                        "Expected a dimension of size %zu, got %d",
+                        ctx->head->field->type->arraysize[i], number);
+        if (*ts != ',' && *ts != ')')
+            return PyErr_Format(PyExc_ValueError,
+                                "Expected a comma in format string, got '%c'", *ts);
+        if (*ts == ',') ts++;
+        i++;
+    }
+    if (i != ndim)
+        return PyErr_Format(PyExc_ValueError, "Expected %d dimension(s), got %d",
+                            ctx->head->field->type->ndim, i);
+    if (!*ts) {
+        PyErr_SetString(PyExc_ValueError,
+                        "Unexpected end of format string, expected ')'");
+        return NULL;
+    }
+    ctx->is_valid_array = 1;
+    ctx->new_count = 1;
+    *tsp = ++ts;
+    return Py_None;
+}
+static const char* __Pyx_BufFmt_CheckString(__Pyx_BufFmt_Context* ctx, const char* ts) {
+  int got_Z = 0;
+  while (1) {
+    switch(*ts) {
+      case 0:
+        if (ctx->enc_type != 0 && ctx->head == NULL) {
+          __Pyx_BufFmt_RaiseExpected(ctx);
+          return NULL;
+        }
+        if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL;
+        if (ctx->head != NULL) {
+          __Pyx_BufFmt_RaiseExpected(ctx);
+          return NULL;
+        }
+        return ts;
+      case ' ':
+      case '\r':
+      case '\n':
+        ++ts;
+        break;
+      case '<':
+        if (!__Pyx_Is_Little_Endian()) {
+          PyErr_SetString(PyExc_ValueError, "Little-endian buffer not supported on big-endian compiler");
+          return NULL;
+        }
+        ctx->new_packmode = '=';
+        ++ts;
+        break;
+      case '>':
+      case '!':
+        if (__Pyx_Is_Little_Endian()) {
+          PyErr_SetString(PyExc_ValueError, "Big-endian buffer not supported on little-endian compiler");
+          return NULL;
+        }
+        ctx->new_packmode = '=';
+        ++ts;
+        break;
+      case '=':
+      case '@':
+      case '^':
+        ctx->new_packmode = *ts++;
+        break;
+      case 'T':
+        {
+          const char* ts_after_sub;
+          size_t i, struct_count = ctx->new_count;
+          size_t struct_alignment = ctx->struct_alignment;
+          ctx->new_count = 1;
+          ++ts;
+          if (*ts != '{') {
+            PyErr_SetString(PyExc_ValueError, "Buffer acquisition: Expected '{' after 'T'");
+            return NULL;
+          }
+          if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL;
+          ctx->enc_type = 0;
+          ctx->enc_count = 0;
+          ctx->struct_alignment = 0;
+          ++ts;
+          ts_after_sub = ts;
+          for (i = 0; i != struct_count; ++i) {
+            ts_after_sub = __Pyx_BufFmt_CheckString(ctx, ts);
+            if (!ts_after_sub) return NULL;
+          }
+          ts = ts_after_sub;
+          if (struct_alignment) ctx->struct_alignment = struct_alignment;
+        }
+        break;
+      case '}':
+        {
+          size_t alignment = ctx->struct_alignment;
+          ++ts;
+          if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL;
+          ctx->enc_type = 0;
+          if (alignment && ctx->fmt_offset % alignment) {
+            ctx->fmt_offset += alignment - (ctx->fmt_offset % alignment);
+          }
+        }
+        return ts;
+      case 'x':
+        if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL;
+        ctx->fmt_offset += ctx->new_count;
+        ctx->new_count = 1;
+        ctx->enc_count = 0;
+        ctx->enc_type = 0;
+        ctx->enc_packmode = ctx->new_packmode;
+        ++ts;
+        break;
+      case 'Z':
+        got_Z = 1;
+        ++ts;
+        if (*ts != 'f' && *ts != 'd' && *ts != 'g') {
+          __Pyx_BufFmt_RaiseUnexpectedChar('Z');
+          return NULL;
+        }
+        CYTHON_FALLTHROUGH;
+      case 'c': case 'b': case 'B': case 'h': case 'H': case 'i': case 'I':
+      case 'l': case 'L': case 'q': case 'Q':
+      case 'f': case 'd': case 'g':
+      case 'O': case 'p':
+        if (ctx->enc_type == *ts && got_Z == ctx->is_complex &&
+            ctx->enc_packmode == ctx->new_packmode) {
+          ctx->enc_count += ctx->new_count;
+          ctx->new_count = 1;
+          got_Z = 0;
+          ++ts;
+          break;
+        }
+        CYTHON_FALLTHROUGH;
+      case 's':
+        if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL;
+        ctx->enc_count = ctx->new_count;
+        ctx->enc_packmode = ctx->new_packmode;
+        ctx->enc_type = *ts;
+        ctx->is_complex = got_Z;
+        ++ts;
+        ctx->new_count = 1;
+        got_Z = 0;
+        break;
+      case ':':
+        ++ts;
+        while(*ts != ':') ++ts;
+        ++ts;
+        break;
+      case '(':
+        if (!__pyx_buffmt_parse_array(ctx, &ts)) return NULL;
+        break;
+      default:
+        {
+          int number = __Pyx_BufFmt_ExpectNumber(&ts);
+          if (number == -1) return NULL;
+          ctx->new_count = (size_t)number;
+        }
+    }
+  }
+}
+
+/* BufferGetAndValidate */
+  static CYTHON_INLINE void __Pyx_SafeReleaseBuffer(Py_buffer* info) {
+  if (unlikely(info->buf == NULL)) return;
+  if (info->suboffsets == __Pyx_minusones) info->suboffsets = NULL;
+  __Pyx_ReleaseBuffer(info);
+}
+static void __Pyx_ZeroBuffer(Py_buffer* buf) {
+  buf->buf = NULL;
+  buf->obj = NULL;
+  buf->strides = __Pyx_zeros;
+  buf->shape = __Pyx_zeros;
+  buf->suboffsets = __Pyx_minusones;
+}
+static int __Pyx__GetBufferAndValidate(
+        Py_buffer* buf, PyObject* obj,  __Pyx_TypeInfo* dtype, int flags,
+        int nd, int cast, __Pyx_BufFmt_StackElem* stack)
+{
+  buf->buf = NULL;
+  if (unlikely(__Pyx_GetBuffer(obj, buf, flags) == -1)) {
+    __Pyx_ZeroBuffer(buf);
+    return -1;
+  }
+  if (unlikely(buf->ndim != nd)) {
+    PyErr_Format(PyExc_ValueError,
+                 "Buffer has wrong number of dimensions (expected %d, got %d)",
+                 nd, buf->ndim);
+    goto fail;
+  }
+  if (!cast) {
+    __Pyx_BufFmt_Context ctx;
+    __Pyx_BufFmt_Init(&ctx, stack, dtype);
+    if (!__Pyx_BufFmt_CheckString(&ctx, buf->format)) goto fail;
+  }
+  if (unlikely((size_t)buf->itemsize != dtype->size)) {
+    PyErr_Format(PyExc_ValueError,
+      "Item size of buffer (%" CYTHON_FORMAT_SSIZE_T "d byte%s) does not match size of '%s' (%" CYTHON_FORMAT_SSIZE_T "d byte%s)",
+      buf->itemsize, (buf->itemsize > 1) ? "s" : "",
+      dtype->name, (Py_ssize_t)dtype->size, (dtype->size > 1) ? "s" : "");
+    goto fail;
+  }
+  if (buf->suboffsets == NULL) buf->suboffsets = __Pyx_minusones;
+  return 0;
+fail:;
+  __Pyx_SafeReleaseBuffer(buf);
+  return -1;
+}
+
+
+static CYTHON_INLINE void* __Pyx_BufPtrFull2d_imp(void* buf, Py_ssize_t i0, Py_ssize_t s0, Py_ssize_t o0, Py_ssize_t i1, Py_ssize_t s1, Py_ssize_t o1) {
+  char* ptr = (char*)buf;
+ptr += s0 * i0;
+if (o0 >= 0) ptr = *((char**)ptr) + o0;
+ptr += s1 * i1;
+if (o1 >= 0) ptr = *((char**)ptr) + o1;
+
+return ptr;
+}
+  
+static CYTHON_INLINE void* __Pyx_BufPtrFull3d_imp(void* buf, Py_ssize_t i0, Py_ssize_t s0, Py_ssize_t o0, Py_ssize_t i1, Py_ssize_t s1, Py_ssize_t o1, Py_ssize_t i2, Py_ssize_t s2, Py_ssize_t o2) {
+  char* ptr = (char*)buf;
+ptr += s0 * i0;
+if (o0 >= 0) ptr = *((char**)ptr) + o0;
+ptr += s1 * i1;
+if (o1 >= 0) ptr = *((char**)ptr) + o1;
+ptr += s2 * i2;
+if (o2 >= 0) ptr = *((char**)ptr) + o2;
+
+return ptr;
+}
+  /* ArgTypeTest */
+  static int __Pyx__ArgTypeTest(PyObject *obj, PyTypeObject *type, const char *name, int exact)
+{
+    if (unlikely(!type)) {
+        PyErr_SetString(PyExc_SystemError, "Missing type object");
+        return 0;
+    }
+    else if (exact) {
+        #if PY_MAJOR_VERSION == 2
+        if ((type == &PyBaseString_Type) && likely(__Pyx_PyBaseString_CheckExact(obj))) return 1;
+        #endif
+    }
+    else {
+        if (likely(__Pyx_TypeCheck(obj, type))) return 1;
+    }
+    PyErr_Format(PyExc_TypeError,
+        "Argument '%.200s' has incorrect type (expected %.200s, got %.200s)",
+        name, type->tp_name, Py_TYPE(obj)->tp_name);
+    return 0;
+}
+
+/* BytesEquals */
+  static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals) {
+#if CYTHON_COMPILING_IN_PYPY
+    return PyObject_RichCompareBool(s1, s2, equals);
+#else
+    if (s1 == s2) {
+        return (equals == Py_EQ);
+    } else if (PyBytes_CheckExact(s1) & PyBytes_CheckExact(s2)) {
+        const char *ps1, *ps2;
+        Py_ssize_t length = PyBytes_GET_SIZE(s1);
+        if (length != PyBytes_GET_SIZE(s2))
+            return (equals == Py_NE);
+        ps1 = PyBytes_AS_STRING(s1);
+        ps2 = PyBytes_AS_STRING(s2);
+        if (ps1[0] != ps2[0]) {
+            return (equals == Py_NE);
+        } else if (length == 1) {
+            return (equals == Py_EQ);
+        } else {
+            int result;
+#if CYTHON_USE_UNICODE_INTERNALS
+            Py_hash_t hash1, hash2;
+            hash1 = ((PyBytesObject*)s1)->ob_shash;
+            hash2 = ((PyBytesObject*)s2)->ob_shash;
+            if (hash1 != hash2 && hash1 != -1 && hash2 != -1) {
+                return (equals == Py_NE);
+            }
+#endif
+            result = memcmp(ps1, ps2, (size_t)length);
+            return (equals == Py_EQ) ? (result == 0) : (result != 0);
+        }
+    } else if ((s1 == Py_None) & PyBytes_CheckExact(s2)) {
+        return (equals == Py_NE);
+    } else if ((s2 == Py_None) & PyBytes_CheckExact(s1)) {
+        return (equals == Py_NE);
+    } else {
+        int result;
+        PyObject* py_result = PyObject_RichCompare(s1, s2, equals);
+        if (!py_result)
+            return -1;
+        result = __Pyx_PyObject_IsTrue(py_result);
+        Py_DECREF(py_result);
+        return result;
+    }
+#endif
+}
+
+/* UnicodeEquals */
+  static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals) {
+#if CYTHON_COMPILING_IN_PYPY
+    return PyObject_RichCompareBool(s1, s2, equals);
+#else
+#if PY_MAJOR_VERSION < 3
+    PyObject* owned_ref = NULL;
+#endif
+    int s1_is_unicode, s2_is_unicode;
+    if (s1 == s2) {
+        goto return_eq;
+    }
+    s1_is_unicode = PyUnicode_CheckExact(s1);
+    s2_is_unicode = PyUnicode_CheckExact(s2);
+#if PY_MAJOR_VERSION < 3
+    if ((s1_is_unicode & (!s2_is_unicode)) && PyString_CheckExact(s2)) {
+        owned_ref = PyUnicode_FromObject(s2);
+        if (unlikely(!owned_ref))
+            return -1;
+        s2 = owned_ref;
+        s2_is_unicode = 1;
+    } else if ((s2_is_unicode & (!s1_is_unicode)) && PyString_CheckExact(s1)) {
+        owned_ref = PyUnicode_FromObject(s1);
+        if (unlikely(!owned_ref))
+            return -1;
+        s1 = owned_ref;
+        s1_is_unicode = 1;
+    } else if (((!s2_is_unicode) & (!s1_is_unicode))) {
+        return __Pyx_PyBytes_Equals(s1, s2, equals);
+    }
+#endif
+    if (s1_is_unicode & s2_is_unicode) {
+        Py_ssize_t length;
+        int kind;
+        void *data1, *data2;
+        if (unlikely(__Pyx_PyUnicode_READY(s1) < 0) || unlikely(__Pyx_PyUnicode_READY(s2) < 0))
+            return -1;
+        length = __Pyx_PyUnicode_GET_LENGTH(s1);
+        if (length != __Pyx_PyUnicode_GET_LENGTH(s2)) {
+            goto return_ne;
+        }
+#if CYTHON_USE_UNICODE_INTERNALS
+        {
+            Py_hash_t hash1, hash2;
+        #if CYTHON_PEP393_ENABLED
+            hash1 = ((PyASCIIObject*)s1)->hash;
+            hash2 = ((PyASCIIObject*)s2)->hash;
+        #else
+            hash1 = ((PyUnicodeObject*)s1)->hash;
+            hash2 = ((PyUnicodeObject*)s2)->hash;
+        #endif
+            if (hash1 != hash2 && hash1 != -1 && hash2 != -1) {
+                goto return_ne;
+            }
+        }
+#endif
+        kind = __Pyx_PyUnicode_KIND(s1);
+        if (kind != __Pyx_PyUnicode_KIND(s2)) {
+            goto return_ne;
+        }
+        data1 = __Pyx_PyUnicode_DATA(s1);
+        data2 = __Pyx_PyUnicode_DATA(s2);
+        if (__Pyx_PyUnicode_READ(kind, data1, 0) != __Pyx_PyUnicode_READ(kind, data2, 0)) {
+            goto return_ne;
+        } else if (length == 1) {
+            goto return_eq;
+        } else {
+            int result = memcmp(data1, data2, (size_t)(length * kind));
+            #if PY_MAJOR_VERSION < 3
+            Py_XDECREF(owned_ref);
+            #endif
+            return (equals == Py_EQ) ? (result == 0) : (result != 0);
+        }
+    } else if ((s1 == Py_None) & s2_is_unicode) {
+        goto return_ne;
+    } else if ((s2 == Py_None) & s1_is_unicode) {
+        goto return_ne;
+    } else {
+        int result;
+        PyObject* py_result = PyObject_RichCompare(s1, s2, equals);
+        #if PY_MAJOR_VERSION < 3
+        Py_XDECREF(owned_ref);
+        #endif
+        if (!py_result)
+            return -1;
+        result = __Pyx_PyObject_IsTrue(py_result);
+        Py_DECREF(py_result);
+        return result;
+    }
+return_eq:
+    #if PY_MAJOR_VERSION < 3
+    Py_XDECREF(owned_ref);
+    #endif
+    return (equals == Py_EQ);
+return_ne:
+    #if PY_MAJOR_VERSION < 3
+    Py_XDECREF(owned_ref);
+    #endif
+    return (equals == Py_NE);
+#endif
+}
+
+/* None */
+  static CYTHON_INLINE Py_ssize_t __Pyx_div_Py_ssize_t(Py_ssize_t a, Py_ssize_t b) {
+    Py_ssize_t q = a / b;
+    Py_ssize_t r = a - q*b;
+    q -= ((r != 0) & ((r ^ b) < 0));
+    return q;
+}
+
+/* GetAttr */
+  static CYTHON_INLINE PyObject *__Pyx_GetAttr(PyObject *o, PyObject *n) {
+#if CYTHON_USE_TYPE_SLOTS
+#if PY_MAJOR_VERSION >= 3
+    if (likely(PyUnicode_Check(n)))
+#else
+    if (likely(PyString_Check(n)))
+#endif
+        return __Pyx_PyObject_GetAttrStr(o, n);
+#endif
+    return PyObject_GetAttr(o, n);
+}
+
+/* ObjectGetItem */
+  #if CYTHON_USE_TYPE_SLOTS
+static PyObject *__Pyx_PyObject_GetIndex(PyObject *obj, PyObject* index) {
+    PyObject *runerr;
+    Py_ssize_t key_value;
+    PySequenceMethods *m = Py_TYPE(obj)->tp_as_sequence;
+    if (unlikely(!(m && m->sq_item))) {
+        PyErr_Format(PyExc_TypeError, "'%.200s' object is not subscriptable", Py_TYPE(obj)->tp_name);
+        return NULL;
+    }
+    key_value = __Pyx_PyIndex_AsSsize_t(index);
+    if (likely(key_value != -1 || !(runerr = PyErr_Occurred()))) {
+        return __Pyx_GetItemInt_Fast(obj, key_value, 0, 1, 1);
+    }
+    if (PyErr_GivenExceptionMatches(runerr, PyExc_OverflowError)) {
+        PyErr_Clear();
+        PyErr_Format(PyExc_IndexError, "cannot fit '%.200s' into an index-sized integer", Py_TYPE(index)->tp_name);
+    }
+    return NULL;
+}
+static PyObject *__Pyx_PyObject_GetItem(PyObject *obj, PyObject* key) {
+    PyMappingMethods *m = Py_TYPE(obj)->tp_as_mapping;
+    if (likely(m && m->mp_subscript)) {
+        return m->mp_subscript(obj, key);
+    }
+    return __Pyx_PyObject_GetIndex(obj, key);
+}
+#endif
+
+/* decode_c_string */
+  static CYTHON_INLINE PyObject* __Pyx_decode_c_string(
+         const char* cstring, Py_ssize_t start, Py_ssize_t stop,
+         const char* encoding, const char* errors,
+         PyObject* (*decode_func)(const char *s, Py_ssize_t size, const char *errors)) {
+    Py_ssize_t length;
+    if (unlikely((start < 0) | (stop < 0))) {
+        size_t slen = strlen(cstring);
+        if (unlikely(slen > (size_t) PY_SSIZE_T_MAX)) {
+            PyErr_SetString(PyExc_OverflowError,
+                            "c-string too long to convert to Python");
+            return NULL;
+        }
+        length = (Py_ssize_t) slen;
+        if (start < 0) {
+            start += length;
+            if (start < 0)
+                start = 0;
+        }
+        if (stop < 0)
+            stop += length;
+    }
+    length = stop - start;
+    if (unlikely(length <= 0))
+        return PyUnicode_FromUnicode(NULL, 0);
+    cstring += start;
+    if (decode_func) {
+        return decode_func(cstring, length, errors);
+    } else {
+        return PyUnicode_Decode(cstring, length, encoding, errors);
+    }
+}
+
+/* PyErrExceptionMatches */
+  #if CYTHON_FAST_THREAD_STATE
+static int __Pyx_PyErr_ExceptionMatchesTuple(PyObject *exc_type, PyObject *tuple) {
+    Py_ssize_t i, n;
+    n = PyTuple_GET_SIZE(tuple);
+#if PY_MAJOR_VERSION >= 3
+    for (i=0; i<n; i++) {
+        if (exc_type == PyTuple_GET_ITEM(tuple, i)) return 1;
+    }
+#endif
+    for (i=0; i<n; i++) {
+        if (__Pyx_PyErr_GivenExceptionMatches(exc_type, PyTuple_GET_ITEM(tuple, i))) return 1;
+    }
+    return 0;
+}
+static CYTHON_INLINE int __Pyx_PyErr_ExceptionMatchesInState(PyThreadState* tstate, PyObject* err) {
+    PyObject *exc_type = tstate->curexc_type;
+    if (exc_type == err) return 1;
+    if (unlikely(!exc_type)) return 0;
+    if (unlikely(PyTuple_Check(err)))
+        return __Pyx_PyErr_ExceptionMatchesTuple(exc_type, err);
+    return __Pyx_PyErr_GivenExceptionMatches(exc_type, err);
+}
+#endif
+
+/* GetAttr3 */
+  static PyObject *__Pyx_GetAttr3Default(PyObject *d) {
+    __Pyx_PyThreadState_declare
+    __Pyx_PyThreadState_assign
+    if (unlikely(!__Pyx_PyErr_ExceptionMatches(PyExc_AttributeError)))
+        return NULL;
+    __Pyx_PyErr_Clear();
+    Py_INCREF(d);
+    return d;
+}
+static CYTHON_INLINE PyObject *__Pyx_GetAttr3(PyObject *o, PyObject *n, PyObject *d) {
+    PyObject *r = __Pyx_GetAttr(o, n);
+    return (likely(r)) ? r : __Pyx_GetAttr3Default(d);
+}
+
+/* PyDictVersioning */
+  #if CYTHON_USE_DICT_VERSIONS
+static CYTHON_INLINE PY_UINT64_T __Pyx_get_tp_dict_version(PyObject *obj) {
+    PyObject *dict = Py_TYPE(obj)->tp_dict;
+    return dict ? __PYX_GET_DICT_VERSION(dict) : 0;
+}
+static CYTHON_INLINE PY_UINT64_T __Pyx_get_object_dict_version(PyObject *obj) {
+    PyObject **dictptr = NULL;
+    Py_ssize_t offset = Py_TYPE(obj)->tp_dictoffset;
+    if (offset) {
+        dictptr = (offset > 0) ? (PyObject **) ((char *)obj + offset) : _PyObject_GetDictPtr(obj);
+    }
+    return (dictptr && *dictptr) ? __PYX_GET_DICT_VERSION(*dictptr) : 0;
+}
+static CYTHON_INLINE int __Pyx_object_dict_version_matches(PyObject* obj, PY_UINT64_T tp_dict_version, PY_UINT64_T obj_dict_version) {
+    PyObject *dict = Py_TYPE(obj)->tp_dict;
+    if (!dict || tp_dict_version != __PYX_GET_DICT_VERSION(dict))
+        return 0;
+    return obj_dict_version == __Pyx_get_object_dict_version(obj);
+}
+#endif
+
+/* GetModuleGlobalName */
+  #if CYTHON_USE_DICT_VERSIONS
+static PyObject *__Pyx__GetModuleGlobalName(PyObject *name, PY_UINT64_T *dict_version, PyObject **dict_cached_value)
+#else
+static CYTHON_INLINE PyObject *__Pyx__GetModuleGlobalName(PyObject *name)
+#endif
+{
+    PyObject *result;
+#if !CYTHON_AVOID_BORROWED_REFS
+#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030500A1
+    result = _PyDict_GetItem_KnownHash(__pyx_d, name, ((PyASCIIObject *) name)->hash);
+    __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version)
+    if (likely(result)) {
+        return __Pyx_NewRef(result);
+    } else if (unlikely(PyErr_Occurred())) {
+        return NULL;
+    }
+#else
+    result = PyDict_GetItem(__pyx_d, name);
+    __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version)
+    if (likely(result)) {
+        return __Pyx_NewRef(result);
+    }
+#endif
+#else
+    result = PyObject_GetItem(__pyx_d, name);
+    __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version)
+    if (likely(result)) {
+        return __Pyx_NewRef(result);
+    }
+    PyErr_Clear();
+#endif
+    return __Pyx_GetBuiltinName(name);
+}
+
+/* ExtTypeTest */
+  static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type) {
+    if (unlikely(!type)) {
+        PyErr_SetString(PyExc_SystemError, "Missing type object");
+        return 0;
+    }
+    if (likely(__Pyx_TypeCheck(obj, type)))
+        return 1;
+    PyErr_Format(PyExc_TypeError, "Cannot convert %.200s to %.200s",
+                 Py_TYPE(obj)->tp_name, type->tp_name);
+    return 0;
+}
+
+/* GetTopmostException */
+  #if CYTHON_USE_EXC_INFO_STACK
+static _PyErr_StackItem *
+__Pyx_PyErr_GetTopmostException(PyThreadState *tstate)
+{
+    _PyErr_StackItem *exc_info = tstate->exc_info;
+    while ((exc_info->exc_type == NULL || exc_info->exc_type == Py_None) &&
+           exc_info->previous_item != NULL)
+    {
+        exc_info = exc_info->previous_item;
+    }
+    return exc_info;
+}
+#endif
+
+/* SaveResetException */
+  #if CYTHON_FAST_THREAD_STATE
+static CYTHON_INLINE void __Pyx__ExceptionSave(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) {
+    #if CYTHON_USE_EXC_INFO_STACK
+    _PyErr_StackItem *exc_info = __Pyx_PyErr_GetTopmostException(tstate);
+    *type = exc_info->exc_type;
+    *value = exc_info->exc_value;
+    *tb = exc_info->exc_traceback;
+    #else
+    *type = tstate->exc_type;
+    *value = tstate->exc_value;
+    *tb = tstate->exc_traceback;
+    #endif
+    Py_XINCREF(*type);
+    Py_XINCREF(*value);
+    Py_XINCREF(*tb);
+}
+static CYTHON_INLINE void __Pyx__ExceptionReset(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb) {
+    PyObject *tmp_type, *tmp_value, *tmp_tb;
+    #if CYTHON_USE_EXC_INFO_STACK
+    _PyErr_StackItem *exc_info = tstate->exc_info;
+    tmp_type = exc_info->exc_type;
+    tmp_value = exc_info->exc_value;
+    tmp_tb = exc_info->exc_traceback;
+    exc_info->exc_type = type;
+    exc_info->exc_value = value;
+    exc_info->exc_traceback = tb;
+    #else
+    tmp_type = tstate->exc_type;
+    tmp_value = tstate->exc_value;
+    tmp_tb = tstate->exc_traceback;
+    tstate->exc_type = type;
+    tstate->exc_value = value;
+    tstate->exc_traceback = tb;
+    #endif
+    Py_XDECREF(tmp_type);
+    Py_XDECREF(tmp_value);
+    Py_XDECREF(tmp_tb);
+}
+#endif
+
+/* GetException */
+  #if CYTHON_FAST_THREAD_STATE
+static int __Pyx__GetException(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb)
+#else
+static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb)
+#endif
+{
+    PyObject *local_type, *local_value, *local_tb;
+#if CYTHON_FAST_THREAD_STATE
+    PyObject *tmp_type, *tmp_value, *tmp_tb;
+    local_type = tstate->curexc_type;
+    local_value = tstate->curexc_value;
+    local_tb = tstate->curexc_traceback;
+    tstate->curexc_type = 0;
+    tstate->curexc_value = 0;
+    tstate->curexc_traceback = 0;
+#else
+    PyErr_Fetch(&local_type, &local_value, &local_tb);
+#endif
+    PyErr_NormalizeException(&local_type, &local_value, &local_tb);
+#if CYTHON_FAST_THREAD_STATE
+    if (unlikely(tstate->curexc_type))
+#else
+    if (unlikely(PyErr_Occurred()))
+#endif
+        goto bad;
+    #if PY_MAJOR_VERSION >= 3
+    if (local_tb) {
+        if (unlikely(PyException_SetTraceback(local_value, local_tb) < 0))
+            goto bad;
+    }
+    #endif
+    Py_XINCREF(local_tb);
+    Py_XINCREF(local_type);
+    Py_XINCREF(local_value);
+    *type = local_type;
+    *value = local_value;
+    *tb = local_tb;
+#if CYTHON_FAST_THREAD_STATE
+    #if CYTHON_USE_EXC_INFO_STACK
+    {
+        _PyErr_StackItem *exc_info = tstate->exc_info;
+        tmp_type = exc_info->exc_type;
+        tmp_value = exc_info->exc_value;
+        tmp_tb = exc_info->exc_traceback;
+        exc_info->exc_type = local_type;
+        exc_info->exc_value = local_value;
+        exc_info->exc_traceback = local_tb;
+    }
+    #else
+    tmp_type = tstate->exc_type;
+    tmp_value = tstate->exc_value;
+    tmp_tb = tstate->exc_traceback;
+    tstate->exc_type = local_type;
+    tstate->exc_value = local_value;
+    tstate->exc_traceback = local_tb;
+    #endif
+    Py_XDECREF(tmp_type);
+    Py_XDECREF(tmp_value);
+    Py_XDECREF(tmp_tb);
+#else
+    PyErr_SetExcInfo(local_type, local_value, local_tb);
+#endif
+    return 0;
+bad:
+    *type = 0;
+    *value = 0;
+    *tb = 0;
+    Py_XDECREF(local_type);
+    Py_XDECREF(local_value);
+    Py_XDECREF(local_tb);
+    return -1;
+}
+
+/* SwapException */
+  #if CYTHON_FAST_THREAD_STATE
+static CYTHON_INLINE void __Pyx__ExceptionSwap(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) {
+    PyObject *tmp_type, *tmp_value, *tmp_tb;
+    #if CYTHON_USE_EXC_INFO_STACK
+    _PyErr_StackItem *exc_info = tstate->exc_info;
+    tmp_type = exc_info->exc_type;
+    tmp_value = exc_info->exc_value;
+    tmp_tb = exc_info->exc_traceback;
+    exc_info->exc_type = *type;
+    exc_info->exc_value = *value;
+    exc_info->exc_traceback = *tb;
+    #else
+    tmp_type = tstate->exc_type;
+    tmp_value = tstate->exc_value;
+    tmp_tb = tstate->exc_traceback;
+    tstate->exc_type = *type;
+    tstate->exc_value = *value;
+    tstate->exc_traceback = *tb;
+    #endif
+    *type = tmp_type;
+    *value = tmp_value;
+    *tb = tmp_tb;
+}
+#else
+static CYTHON_INLINE void __Pyx_ExceptionSwap(PyObject **type, PyObject **value, PyObject **tb) {
+    PyObject *tmp_type, *tmp_value, *tmp_tb;
+    PyErr_GetExcInfo(&tmp_type, &tmp_value, &tmp_tb);
+    PyErr_SetExcInfo(*type, *value, *tb);
+    *type = tmp_type;
+    *value = tmp_value;
+    *tb = tmp_tb;
+}
+#endif
+
+/* Import */
+  static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level) {
+    PyObject *empty_list = 0;
+    PyObject *module = 0;
+    PyObject *global_dict = 0;
+    PyObject *empty_dict = 0;
+    PyObject *list;
+    #if PY_MAJOR_VERSION < 3
+    PyObject *py_import;
+    py_import = __Pyx_PyObject_GetAttrStr(__pyx_b, __pyx_n_s_import);
+    if (!py_import)
+        goto bad;
+    #endif
+    if (from_list)
+        list = from_list;
+    else {
+        empty_list = PyList_New(0);
+        if (!empty_list)
+            goto bad;
+        list = empty_list;
+    }
+    global_dict = PyModule_GetDict(__pyx_m);
+    if (!global_dict)
+        goto bad;
+    empty_dict = PyDict_New();
+    if (!empty_dict)
+        goto bad;
+    {
+        #if PY_MAJOR_VERSION >= 3
+        if (level == -1) {
+            if (strchr(__Pyx_MODULE_NAME, '.')) {
+                module = PyImport_ImportModuleLevelObject(
+                    name, global_dict, empty_dict, list, 1);
+                if (!module) {
+                    if (!PyErr_ExceptionMatches(PyExc_ImportError))
+                        goto bad;
+                    PyErr_Clear();
+                }
+            }
+            level = 0;
+        }
+        #endif
+        if (!module) {
+            #if PY_MAJOR_VERSION < 3
+            PyObject *py_level = PyInt_FromLong(level);
+            if (!py_level)
+                goto bad;
+            module = PyObject_CallFunctionObjArgs(py_import,
+                name, global_dict, empty_dict, list, py_level, (PyObject *)NULL);
+            Py_DECREF(py_level);
+            #else
+            module = PyImport_ImportModuleLevelObject(
+                name, global_dict, empty_dict, list, level);
+            #endif
+        }
+    }
+bad:
+    #if PY_MAJOR_VERSION < 3
+    Py_XDECREF(py_import);
+    #endif
+    Py_XDECREF(empty_list);
+    Py_XDECREF(empty_dict);
+    return module;
+}
+
+/* FastTypeChecks */
+  #if CYTHON_COMPILING_IN_CPYTHON
+static int __Pyx_InBases(PyTypeObject *a, PyTypeObject *b) {
+    while (a) {
+        a = a->tp_base;
+        if (a == b)
+            return 1;
+    }
+    return b == &PyBaseObject_Type;
+}
+static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b) {
+    PyObject *mro;
+    if (a == b) return 1;
+    mro = a->tp_mro;
+    if (likely(mro)) {
+        Py_ssize_t i, n;
+        n = PyTuple_GET_SIZE(mro);
+        for (i = 0; i < n; i++) {
+            if (PyTuple_GET_ITEM(mro, i) == (PyObject *)b)
+                return 1;
+        }
+        return 0;
+    }
+    return __Pyx_InBases(a, b);
+}
+#if PY_MAJOR_VERSION == 2
+static int __Pyx_inner_PyErr_GivenExceptionMatches2(PyObject *err, PyObject* exc_type1, PyObject* exc_type2) {
+    PyObject *exception, *value, *tb;
+    int res;
+    __Pyx_PyThreadState_declare
+    __Pyx_PyThreadState_assign
+    __Pyx_ErrFetch(&exception, &value, &tb);
+    res = exc_type1 ? PyObject_IsSubclass(err, exc_type1) : 0;
+    if (unlikely(res == -1)) {
+        PyErr_WriteUnraisable(err);
+        res = 0;
+    }
+    if (!res) {
+        res = PyObject_IsSubclass(err, exc_type2);
+        if (unlikely(res == -1)) {
+            PyErr_WriteUnraisable(err);
+            res = 0;
+        }
+    }
+    __Pyx_ErrRestore(exception, value, tb);
+    return res;
+}
+#else
+static CYTHON_INLINE int __Pyx_inner_PyErr_GivenExceptionMatches2(PyObject *err, PyObject* exc_type1, PyObject *exc_type2) {
+    int res = exc_type1 ? __Pyx_IsSubtype((PyTypeObject*)err, (PyTypeObject*)exc_type1) : 0;
+    if (!res) {
+        res = __Pyx_IsSubtype((PyTypeObject*)err, (PyTypeObject*)exc_type2);
+    }
+    return res;
+}
+#endif
+static int __Pyx_PyErr_GivenExceptionMatchesTuple(PyObject *exc_type, PyObject *tuple) {
+    Py_ssize_t i, n;
+    assert(PyExceptionClass_Check(exc_type));
+    n = PyTuple_GET_SIZE(tuple);
+#if PY_MAJOR_VERSION >= 3
+    for (i=0; i<n; i++) {
+        if (exc_type == PyTuple_GET_ITEM(tuple, i)) return 1;
+    }
+#endif
+    for (i=0; i<n; i++) {
+        PyObject *t = PyTuple_GET_ITEM(tuple, i);
+        #if PY_MAJOR_VERSION < 3
+        if (likely(exc_type == t)) return 1;
+        #endif
+        if (likely(PyExceptionClass_Check(t))) {
+            if (__Pyx_inner_PyErr_GivenExceptionMatches2(exc_type, NULL, t)) return 1;
+        } else {
+        }
+    }
+    return 0;
+}
+static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches(PyObject *err, PyObject* exc_type) {
+    if (likely(err == exc_type)) return 1;
+    if (likely(PyExceptionClass_Check(err))) {
+        if (likely(PyExceptionClass_Check(exc_type))) {
+            return __Pyx_inner_PyErr_GivenExceptionMatches2(err, NULL, exc_type);
+        } else if (likely(PyTuple_Check(exc_type))) {
+            return __Pyx_PyErr_GivenExceptionMatchesTuple(err, exc_type);
+        } else {
+        }
+    }
+    return PyErr_GivenExceptionMatches(err, exc_type);
+}
+static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches2(PyObject *err, PyObject *exc_type1, PyObject *exc_type2) {
+    assert(PyExceptionClass_Check(exc_type1));
+    assert(PyExceptionClass_Check(exc_type2));
+    if (likely(err == exc_type1 || err == exc_type2)) return 1;
+    if (likely(PyExceptionClass_Check(err))) {
+        return __Pyx_inner_PyErr_GivenExceptionMatches2(err, exc_type1, exc_type2);
+    }
+    return (PyErr_GivenExceptionMatches(err, exc_type1) || PyErr_GivenExceptionMatches(err, exc_type2));
+}
+#endif
+
+/* PyIntBinop */
+  #if !CYTHON_COMPILING_IN_PYPY
+static PyObject* __Pyx_PyInt_AddObjC(PyObject *op1, PyObject *op2, CYTHON_UNUSED long intval, int inplace, int zerodivision_check) {
+    (void)inplace;
+    (void)zerodivision_check;
+    #if PY_MAJOR_VERSION < 3
+    if (likely(PyInt_CheckExact(op1))) {
+        const long b = intval;
+        long x;
+        long a = PyInt_AS_LONG(op1);
+            x = (long)((unsigned long)a + b);
+            if (likely((x^a) >= 0 || (x^b) >= 0))
+                return PyInt_FromLong(x);
+            return PyLong_Type.tp_as_number->nb_add(op1, op2);
+    }
+    #endif
+    #if CYTHON_USE_PYLONG_INTERNALS
+    if (likely(PyLong_CheckExact(op1))) {
+        const long b = intval;
+        long a, x;
+#ifdef HAVE_LONG_LONG
+        const PY_LONG_LONG llb = intval;
+        PY_LONG_LONG lla, llx;
+#endif
+        const digit* digits = ((PyLongObject*)op1)->ob_digit;
+        const Py_ssize_t size = Py_SIZE(op1);
+        if (likely(__Pyx_sst_abs(size) <= 1)) {
+            a = likely(size) ? digits[0] : 0;
+            if (size == -1) a = -a;
+        } else {
+            switch (size) {
+                case -2:
+                    if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) {
+                        a = -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
+                        break;
+#ifdef HAVE_LONG_LONG
+                    } else if (8 * sizeof(PY_LONG_LONG) - 1 > 2 * PyLong_SHIFT) {
+                        lla = -(PY_LONG_LONG) (((((unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0]));
+                        goto long_long;
+#endif
+                    }
+                    CYTHON_FALLTHROUGH;
+                case 2:
+                    if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) {
+                        a = (long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
+                        break;
+#ifdef HAVE_LONG_LONG
+                    } else if (8 * sizeof(PY_LONG_LONG) - 1 > 2 * PyLong_SHIFT) {
+                        lla = (PY_LONG_LONG) (((((unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0]));
+                        goto long_long;
+#endif
+                    }
+                    CYTHON_FALLTHROUGH;
+                case -3:
+                    if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) {
+                        a = -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
+                        break;
+#ifdef HAVE_LONG_LONG
+                    } else if (8 * sizeof(PY_LONG_LONG) - 1 > 3 * PyLong_SHIFT) {
+                        lla = -(PY_LONG_LONG) (((((((unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0]));
+                        goto long_long;
+#endif
+                    }
+                    CYTHON_FALLTHROUGH;
+                case 3:
+                    if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) {
+                        a = (long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
+                        break;
+#ifdef HAVE_LONG_LONG
+                    } else if (8 * sizeof(PY_LONG_LONG) - 1 > 3 * PyLong_SHIFT) {
+                        lla = (PY_LONG_LONG) (((((((unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0]));
+                        goto long_long;
+#endif
+                    }
+                    CYTHON_FALLTHROUGH;
+                case -4:
+                    if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) {
+                        a = -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
+                        break;
+#ifdef HAVE_LONG_LONG
+                    } else if (8 * sizeof(PY_LONG_LONG) - 1 > 4 * PyLong_SHIFT) {
+                        lla = -(PY_LONG_LONG) (((((((((unsigned PY_LONG_LONG)digits[3]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0]));
+                        goto long_long;
+#endif
+                    }
+                    CYTHON_FALLTHROUGH;
+                case 4:
+                    if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) {
+                        a = (long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
+                        break;
+#ifdef HAVE_LONG_LONG
+                    } else if (8 * sizeof(PY_LONG_LONG) - 1 > 4 * PyLong_SHIFT) {
+                        lla = (PY_LONG_LONG) (((((((((unsigned PY_LONG_LONG)digits[3]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0]));
+                        goto long_long;
+#endif
+                    }
+                    CYTHON_FALLTHROUGH;
+                default: return PyLong_Type.tp_as_number->nb_add(op1, op2);
+            }
+        }
+                x = a + b;
+            return PyLong_FromLong(x);
+#ifdef HAVE_LONG_LONG
+        long_long:
+                llx = lla + llb;
+            return PyLong_FromLongLong(llx);
+#endif
+        
+        
+    }
+    #endif
+    if (PyFloat_CheckExact(op1)) {
+        const long b = intval;
+        double a = PyFloat_AS_DOUBLE(op1);
+            double result;
+            PyFPE_START_PROTECT("add", return NULL)
+            result = ((double)a) + (double)b;
+            PyFPE_END_PROTECT(result)
+            return PyFloat_FromDouble(result);
+    }
+    return (inplace ? PyNumber_InPlaceAdd : PyNumber_Add)(op1, op2);
+}
+#endif
+
+/* None */
+  static CYTHON_INLINE void __Pyx_RaiseUnboundLocalError(const char *varname) {
+    PyErr_Format(PyExc_UnboundLocalError, "local variable '%s' referenced before assignment", varname);
+}
+
+/* None */
+  static CYTHON_INLINE long __Pyx_div_long(long a, long b) {
+    long q = a / b;
+    long r = a - q*b;
+    q -= ((r != 0) & ((r ^ b) < 0));
+    return q;
+}
+
+/* WriteUnraisableException */
+  static void __Pyx_WriteUnraisable(const char *name, CYTHON_UNUSED int clineno,
+                                  CYTHON_UNUSED int lineno, CYTHON_UNUSED const char *filename,
+                                  int full_traceback, CYTHON_UNUSED int nogil) {
+    PyObject *old_exc, *old_val, *old_tb;
+    PyObject *ctx;
+    __Pyx_PyThreadState_declare
+#ifdef WITH_THREAD
+    PyGILState_STATE state;
+    if (nogil)
+        state = PyGILState_Ensure();
+#ifdef _MSC_VER
+    else state = (PyGILState_STATE)-1;
+#endif
+#endif
+    __Pyx_PyThreadState_assign
+    __Pyx_ErrFetch(&old_exc, &old_val, &old_tb);
+    if (full_traceback) {
+        Py_XINCREF(old_exc);
+        Py_XINCREF(old_val);
+        Py_XINCREF(old_tb);
+        __Pyx_ErrRestore(old_exc, old_val, old_tb);
+        PyErr_PrintEx(1);
+    }
+    #if PY_MAJOR_VERSION < 3
+    ctx = PyString_FromString(name);
+    #else
+    ctx = PyUnicode_FromString(name);
+    #endif
+    __Pyx_ErrRestore(old_exc, old_val, old_tb);
+    if (!ctx) {
+        PyErr_WriteUnraisable(Py_None);
+    } else {
+        PyErr_WriteUnraisable(ctx);
+        Py_DECREF(ctx);
+    }
+#ifdef WITH_THREAD
+    if (nogil)
+        PyGILState_Release(state);
+#endif
+}
+
+/* ImportFrom */
+  static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name) {
+    PyObject* value = __Pyx_PyObject_GetAttrStr(module, name);
+    if (unlikely(!value) && PyErr_ExceptionMatches(PyExc_AttributeError)) {
+        PyErr_Format(PyExc_ImportError,
+        #if PY_MAJOR_VERSION < 3
+            "cannot import name %.230s", PyString_AS_STRING(name));
+        #else
+            "cannot import name %S", name);
+        #endif
+    }
+    return value;
+}
+
+/* HasAttr */
+  static CYTHON_INLINE int __Pyx_HasAttr(PyObject *o, PyObject *n) {
+    PyObject *r;
+    if (unlikely(!__Pyx_PyBaseString_Check(n))) {
+        PyErr_SetString(PyExc_TypeError,
+                        "hasattr(): attribute name must be string");
+        return -1;
+    }
+    r = __Pyx_GetAttr(o, n);
+    if (unlikely(!r)) {
+        PyErr_Clear();
+        return 0;
+    } else {
+        Py_DECREF(r);
+        return 1;
+    }
+}
+
+/* PyObject_GenericGetAttrNoDict */
+  #if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000
+static PyObject *__Pyx_RaiseGenericGetAttributeError(PyTypeObject *tp, PyObject *attr_name) {
+    PyErr_Format(PyExc_AttributeError,
+#if PY_MAJOR_VERSION >= 3
+                 "'%.50s' object has no attribute '%U'",
+                 tp->tp_name, attr_name);
+#else
+                 "'%.50s' object has no attribute '%.400s'",
+                 tp->tp_name, PyString_AS_STRING(attr_name));
+#endif
+    return NULL;
+}
+static CYTHON_INLINE PyObject* __Pyx_PyObject_GenericGetAttrNoDict(PyObject* obj, PyObject* attr_name) {
+    PyObject *descr;
+    PyTypeObject *tp = Py_TYPE(obj);
+    if (unlikely(!PyString_Check(attr_name))) {
+        return PyObject_GenericGetAttr(obj, attr_name);
+    }
+    assert(!tp->tp_dictoffset);
+    descr = _PyType_Lookup(tp, attr_name);
+    if (unlikely(!descr)) {
+        return __Pyx_RaiseGenericGetAttributeError(tp, attr_name);
+    }
+    Py_INCREF(descr);
+    #if PY_MAJOR_VERSION < 3
+    if (likely(PyType_HasFeature(Py_TYPE(descr), Py_TPFLAGS_HAVE_CLASS)))
+    #endif
+    {
+        descrgetfunc f = Py_TYPE(descr)->tp_descr_get;
+        if (unlikely(f)) {
+            PyObject *res = f(descr, obj, (PyObject *)tp);
+            Py_DECREF(descr);
+            return res;
+        }
+    }
+    return descr;
+}
+#endif
+
+/* PyObject_GenericGetAttr */
+  #if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000
+static PyObject* __Pyx_PyObject_GenericGetAttr(PyObject* obj, PyObject* attr_name) {
+    if (unlikely(Py_TYPE(obj)->tp_dictoffset)) {
+        return PyObject_GenericGetAttr(obj, attr_name);
+    }
+    return __Pyx_PyObject_GenericGetAttrNoDict(obj, attr_name);
+}
+#endif
+
+/* SetVTable */
+  static int __Pyx_SetVtable(PyObject *dict, void *vtable) {
+#if PY_VERSION_HEX >= 0x02070000
+    PyObject *ob = PyCapsule_New(vtable, 0, 0);
+#else
+    PyObject *ob = PyCObject_FromVoidPtr(vtable, 0);
+#endif
+    if (!ob)
+        goto bad;
+    if (PyDict_SetItem(dict, __pyx_n_s_pyx_vtable, ob) < 0)
+        goto bad;
+    Py_DECREF(ob);
+    return 0;
+bad:
+    Py_XDECREF(ob);
+    return -1;
+}
+
+/* SetupReduce */
+  static int __Pyx_setup_reduce_is_named(PyObject* meth, PyObject* name) {
+  int ret;
+  PyObject *name_attr;
+  name_attr = __Pyx_PyObject_GetAttrStr(meth, __pyx_n_s_name_2);
+  if (likely(name_attr)) {
+      ret = PyObject_RichCompareBool(name_attr, name, Py_EQ);
+  } else {
+      ret = -1;
+  }
+  if (unlikely(ret < 0)) {
+      PyErr_Clear();
+      ret = 0;
+  }
+  Py_XDECREF(name_attr);
+  return ret;
+}
+static int __Pyx_setup_reduce(PyObject* type_obj) {
+    int ret = 0;
+    PyObject *object_reduce = NULL;
+    PyObject *object_reduce_ex = NULL;
+    PyObject *reduce = NULL;
+    PyObject *reduce_ex = NULL;
+    PyObject *reduce_cython = NULL;
+    PyObject *setstate = NULL;
+    PyObject *setstate_cython = NULL;
+#if CYTHON_USE_PYTYPE_LOOKUP
+    if (_PyType_Lookup((PyTypeObject*)type_obj, __pyx_n_s_getstate)) goto GOOD;
+#else
+    if (PyObject_HasAttr(type_obj, __pyx_n_s_getstate)) goto GOOD;
+#endif
+#if CYTHON_USE_PYTYPE_LOOKUP
+    object_reduce_ex = _PyType_Lookup(&PyBaseObject_Type, __pyx_n_s_reduce_ex); if (!object_reduce_ex) goto BAD;
+#else
+    object_reduce_ex = __Pyx_PyObject_GetAttrStr((PyObject*)&PyBaseObject_Type, __pyx_n_s_reduce_ex); if (!object_reduce_ex) goto BAD;
+#endif
+    reduce_ex = __Pyx_PyObject_GetAttrStr(type_obj, __pyx_n_s_reduce_ex); if (unlikely(!reduce_ex)) goto BAD;
+    if (reduce_ex == object_reduce_ex) {
+#if CYTHON_USE_PYTYPE_LOOKUP
+        object_reduce = _PyType_Lookup(&PyBaseObject_Type, __pyx_n_s_reduce); if (!object_reduce) goto BAD;
+#else
+        object_reduce = __Pyx_PyObject_GetAttrStr((PyObject*)&PyBaseObject_Type, __pyx_n_s_reduce); if (!object_reduce) goto BAD;
+#endif
+        reduce = __Pyx_PyObject_GetAttrStr(type_obj, __pyx_n_s_reduce); if (unlikely(!reduce)) goto BAD;
+        if (reduce == object_reduce || __Pyx_setup_reduce_is_named(reduce, __pyx_n_s_reduce_cython)) {
+            reduce_cython = __Pyx_PyObject_GetAttrStr(type_obj, __pyx_n_s_reduce_cython); if (unlikely(!reduce_cython)) goto BAD;
+            ret = PyDict_SetItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_reduce, reduce_cython); if (unlikely(ret < 0)) goto BAD;
+            ret = PyDict_DelItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_reduce_cython); if (unlikely(ret < 0)) goto BAD;
+            setstate = __Pyx_PyObject_GetAttrStr(type_obj, __pyx_n_s_setstate);
+            if (!setstate) PyErr_Clear();
+            if (!setstate || __Pyx_setup_reduce_is_named(setstate, __pyx_n_s_setstate_cython)) {
+                setstate_cython = __Pyx_PyObject_GetAttrStr(type_obj, __pyx_n_s_setstate_cython); if (unlikely(!setstate_cython)) goto BAD;
+                ret = PyDict_SetItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_setstate, setstate_cython); if (unlikely(ret < 0)) goto BAD;
+                ret = PyDict_DelItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_setstate_cython); if (unlikely(ret < 0)) goto BAD;
+            }
+            PyType_Modified((PyTypeObject*)type_obj);
+        }
+    }
+    goto GOOD;
+BAD:
+    if (!PyErr_Occurred())
+        PyErr_Format(PyExc_RuntimeError, "Unable to initialize pickling for %s", ((PyTypeObject*)type_obj)->tp_name);
+    ret = -1;
+GOOD:
+#if !CYTHON_USE_PYTYPE_LOOKUP
+    Py_XDECREF(object_reduce);
+    Py_XDECREF(object_reduce_ex);
+#endif
+    Py_XDECREF(reduce);
+    Py_XDECREF(reduce_ex);
+    Py_XDECREF(reduce_cython);
+    Py_XDECREF(setstate);
+    Py_XDECREF(setstate_cython);
+    return ret;
+}
+
+/* FetchCommonType */
+  static PyTypeObject* __Pyx_FetchCommonType(PyTypeObject* type) {
+    PyObject* fake_module;
+    PyTypeObject* cached_type = NULL;
+    fake_module = PyImport_AddModule((char*) "_cython_" CYTHON_ABI);
+    if (!fake_module) return NULL;
+    Py_INCREF(fake_module);
+    cached_type = (PyTypeObject*) PyObject_GetAttrString(fake_module, type->tp_name);
+    if (cached_type) {
+        if (!PyType_Check((PyObject*)cached_type)) {
+            PyErr_Format(PyExc_TypeError,
+                "Shared Cython type %.200s is not a type object",
+                type->tp_name);
+            goto bad;
+        }
+        if (cached_type->tp_basicsize != type->tp_basicsize) {
+            PyErr_Format(PyExc_TypeError,
+                "Shared Cython type %.200s has the wrong size, try recompiling",
+                type->tp_name);
+            goto bad;
+        }
+    } else {
+        if (!PyErr_ExceptionMatches(PyExc_AttributeError)) goto bad;
+        PyErr_Clear();
+        if (PyType_Ready(type) < 0) goto bad;
+        if (PyObject_SetAttrString(fake_module, type->tp_name, (PyObject*) type) < 0)
+            goto bad;
+        Py_INCREF(type);
+        cached_type = type;
+    }
+done:
+    Py_DECREF(fake_module);
+    return cached_type;
+bad:
+    Py_XDECREF(cached_type);
+    cached_type = NULL;
+    goto done;
+}
+
+/* CythonFunction */
+  #include <structmember.h>
+static PyObject *
+__Pyx_CyFunction_get_doc(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *closure)
+{
+    if (unlikely(op->func_doc == NULL)) {
+        if (op->func.m_ml->ml_doc) {
+#if PY_MAJOR_VERSION >= 3
+            op->func_doc = PyUnicode_FromString(op->func.m_ml->ml_doc);
+#else
+            op->func_doc = PyString_FromString(op->func.m_ml->ml_doc);
+#endif
+            if (unlikely(op->func_doc == NULL))
+                return NULL;
+        } else {
+            Py_INCREF(Py_None);
+            return Py_None;
+        }
+    }
+    Py_INCREF(op->func_doc);
+    return op->func_doc;
+}
+static int
+__Pyx_CyFunction_set_doc(__pyx_CyFunctionObject *op, PyObject *value, CYTHON_UNUSED void *context)
+{
+    PyObject *tmp = op->func_doc;
+    if (value == NULL) {
+        value = Py_None;
+    }
+    Py_INCREF(value);
+    op->func_doc = value;
+    Py_XDECREF(tmp);
+    return 0;
+}
+static PyObject *
+__Pyx_CyFunction_get_name(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *context)
+{
+    if (unlikely(op->func_name == NULL)) {
+#if PY_MAJOR_VERSION >= 3
+        op->func_name = PyUnicode_InternFromString(op->func.m_ml->ml_name);
+#else
+        op->func_name = PyString_InternFromString(op->func.m_ml->ml_name);
+#endif
+        if (unlikely(op->func_name == NULL))
+            return NULL;
+    }
+    Py_INCREF(op->func_name);
+    return op->func_name;
+}
+static int
+__Pyx_CyFunction_set_name(__pyx_CyFunctionObject *op, PyObject *value, CYTHON_UNUSED void *context)
+{
+    PyObject *tmp;
+#if PY_MAJOR_VERSION >= 3
+    if (unlikely(value == NULL || !PyUnicode_Check(value)))
+#else
+    if (unlikely(value == NULL || !PyString_Check(value)))
+#endif
+    {
+        PyErr_SetString(PyExc_TypeError,
+                        "__name__ must be set to a string object");
+        return -1;
+    }
+    tmp = op->func_name;
+    Py_INCREF(value);
+    op->func_name = value;
+    Py_XDECREF(tmp);
+    return 0;
+}
+static PyObject *
+__Pyx_CyFunction_get_qualname(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *context)
+{
+    Py_INCREF(op->func_qualname);
+    return op->func_qualname;
+}
+static int
+__Pyx_CyFunction_set_qualname(__pyx_CyFunctionObject *op, PyObject *value, CYTHON_UNUSED void *context)
+{
+    PyObject *tmp;
+#if PY_MAJOR_VERSION >= 3
+    if (unlikely(value == NULL || !PyUnicode_Check(value)))
+#else
+    if (unlikely(value == NULL || !PyString_Check(value)))
+#endif
+    {
+        PyErr_SetString(PyExc_TypeError,
+                        "__qualname__ must be set to a string object");
+        return -1;
+    }
+    tmp = op->func_qualname;
+    Py_INCREF(value);
+    op->func_qualname = value;
+    Py_XDECREF(tmp);
+    return 0;
+}
+static PyObject *
+__Pyx_CyFunction_get_self(__pyx_CyFunctionObject *m, CYTHON_UNUSED void *closure)
+{
+    PyObject *self;
+    self = m->func_closure;
+    if (self == NULL)
+        self = Py_None;
+    Py_INCREF(self);
+    return self;
+}
+static PyObject *
+__Pyx_CyFunction_get_dict(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *context)
+{
+    if (unlikely(op->func_dict == NULL)) {
+        op->func_dict = PyDict_New();
+        if (unlikely(op->func_dict == NULL))
+            return NULL;
+    }
+    Py_INCREF(op->func_dict);
+    return op->func_dict;
+}
+static int
+__Pyx_CyFunction_set_dict(__pyx_CyFunctionObject *op, PyObject *value, CYTHON_UNUSED void *context)
+{
+    PyObject *tmp;
+    if (unlikely(value == NULL)) {
+        PyErr_SetString(PyExc_TypeError,
+               "function's dictionary may not be deleted");
+        return -1;
+    }
+    if (unlikely(!PyDict_Check(value))) {
+        PyErr_SetString(PyExc_TypeError,
+               "setting function's dictionary to a non-dict");
+        return -1;
+    }
+    tmp = op->func_dict;
+    Py_INCREF(value);
+    op->func_dict = value;
+    Py_XDECREF(tmp);
+    return 0;
+}
+static PyObject *
+__Pyx_CyFunction_get_globals(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *context)
+{
+    Py_INCREF(op->func_globals);
+    return op->func_globals;
+}
+static PyObject *
+__Pyx_CyFunction_get_closure(CYTHON_UNUSED __pyx_CyFunctionObject *op, CYTHON_UNUSED void *context)
+{
+    Py_INCREF(Py_None);
+    return Py_None;
+}
+static PyObject *
+__Pyx_CyFunction_get_code(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *context)
+{
+    PyObject* result = (op->func_code) ? op->func_code : Py_None;
+    Py_INCREF(result);
+    return result;
+}
+static int
+__Pyx_CyFunction_init_defaults(__pyx_CyFunctionObject *op) {
+    int result = 0;
+    PyObject *res = op->defaults_getter((PyObject *) op);
+    if (unlikely(!res))
+        return -1;
+    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+    op->defaults_tuple = PyTuple_GET_ITEM(res, 0);
+    Py_INCREF(op->defaults_tuple);
+    op->defaults_kwdict = PyTuple_GET_ITEM(res, 1);
+    Py_INCREF(op->defaults_kwdict);
+    #else
+    op->defaults_tuple = PySequence_ITEM(res, 0);
+    if (unlikely(!op->defaults_tuple)) result = -1;
+    else {
+        op->defaults_kwdict = PySequence_ITEM(res, 1);
+        if (unlikely(!op->defaults_kwdict)) result = -1;
+    }
+    #endif
+    Py_DECREF(res);
+    return result;
+}
+static int
+__Pyx_CyFunction_set_defaults(__pyx_CyFunctionObject *op, PyObject* value, CYTHON_UNUSED void *context) {
+    PyObject* tmp;
+    if (!value) {
+        value = Py_None;
+    } else if (value != Py_None && !PyTuple_Check(value)) {
+        PyErr_SetString(PyExc_TypeError,
+                        "__defaults__ must be set to a tuple object");
+        return -1;
+    }
+    Py_INCREF(value);
+    tmp = op->defaults_tuple;
+    op->defaults_tuple = value;
+    Py_XDECREF(tmp);
+    return 0;
+}
+static PyObject *
+__Pyx_CyFunction_get_defaults(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *context) {
+    PyObject* result = op->defaults_tuple;
+    if (unlikely(!result)) {
+        if (op->defaults_getter) {
+            if (__Pyx_CyFunction_init_defaults(op) < 0) return NULL;
+            result = op->defaults_tuple;
+        } else {
+            result = Py_None;
+        }
+    }
+    Py_INCREF(result);
+    return result;
+}
+static int
+__Pyx_CyFunction_set_kwdefaults(__pyx_CyFunctionObject *op, PyObject* value, CYTHON_UNUSED void *context) {
+    PyObject* tmp;
+    if (!value) {
+        value = Py_None;
+    } else if (value != Py_None && !PyDict_Check(value)) {
+        PyErr_SetString(PyExc_TypeError,
+                        "__kwdefaults__ must be set to a dict object");
+        return -1;
+    }
+    Py_INCREF(value);
+    tmp = op->defaults_kwdict;
+    op->defaults_kwdict = value;
+    Py_XDECREF(tmp);
+    return 0;
+}
+static PyObject *
+__Pyx_CyFunction_get_kwdefaults(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *context) {
+    PyObject* result = op->defaults_kwdict;
+    if (unlikely(!result)) {
+        if (op->defaults_getter) {
+            if (__Pyx_CyFunction_init_defaults(op) < 0) return NULL;
+            result = op->defaults_kwdict;
+        } else {
+            result = Py_None;
+        }
+    }
+    Py_INCREF(result);
+    return result;
+}
+static int
+__Pyx_CyFunction_set_annotations(__pyx_CyFunctionObject *op, PyObject* value, CYTHON_UNUSED void *context) {
+    PyObject* tmp;
+    if (!value || value == Py_None) {
+        value = NULL;
+    } else if (!PyDict_Check(value)) {
+        PyErr_SetString(PyExc_TypeError,
+                        "__annotations__ must be set to a dict object");
+        return -1;
+    }
+    Py_XINCREF(value);
+    tmp = op->func_annotations;
+    op->func_annotations = value;
+    Py_XDECREF(tmp);
+    return 0;
+}
+static PyObject *
+__Pyx_CyFunction_get_annotations(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *context) {
+    PyObject* result = op->func_annotations;
+    if (unlikely(!result)) {
+        result = PyDict_New();
+        if (unlikely(!result)) return NULL;
+        op->func_annotations = result;
+    }
+    Py_INCREF(result);
+    return result;
+}
+static PyGetSetDef __pyx_CyFunction_getsets[] = {
+    {(char *) "func_doc", (getter)__Pyx_CyFunction_get_doc, (setter)__Pyx_CyFunction_set_doc, 0, 0},
+    {(char *) "__doc__",  (getter)__Pyx_CyFunction_get_doc, (setter)__Pyx_CyFunction_set_doc, 0, 0},
+    {(char *) "func_name", (getter)__Pyx_CyFunction_get_name, (setter)__Pyx_CyFunction_set_name, 0, 0},
+    {(char *) "__name__", (getter)__Pyx_CyFunction_get_name, (setter)__Pyx_CyFunction_set_name, 0, 0},
+    {(char *) "__qualname__", (getter)__Pyx_CyFunction_get_qualname, (setter)__Pyx_CyFunction_set_qualname, 0, 0},
+    {(char *) "__self__", (getter)__Pyx_CyFunction_get_self, 0, 0, 0},
+    {(char *) "func_dict", (getter)__Pyx_CyFunction_get_dict, (setter)__Pyx_CyFunction_set_dict, 0, 0},
+    {(char *) "__dict__", (getter)__Pyx_CyFunction_get_dict, (setter)__Pyx_CyFunction_set_dict, 0, 0},
+    {(char *) "func_globals", (getter)__Pyx_CyFunction_get_globals, 0, 0, 0},
+    {(char *) "__globals__", (getter)__Pyx_CyFunction_get_globals, 0, 0, 0},
+    {(char *) "func_closure", (getter)__Pyx_CyFunction_get_closure, 0, 0, 0},
+    {(char *) "__closure__", (getter)__Pyx_CyFunction_get_closure, 0, 0, 0},
+    {(char *) "func_code", (getter)__Pyx_CyFunction_get_code, 0, 0, 0},
+    {(char *) "__code__", (getter)__Pyx_CyFunction_get_code, 0, 0, 0},
+    {(char *) "func_defaults", (getter)__Pyx_CyFunction_get_defaults, (setter)__Pyx_CyFunction_set_defaults, 0, 0},
+    {(char *) "__defaults__", (getter)__Pyx_CyFunction_get_defaults, (setter)__Pyx_CyFunction_set_defaults, 0, 0},
+    {(char *) "__kwdefaults__", (getter)__Pyx_CyFunction_get_kwdefaults, (setter)__Pyx_CyFunction_set_kwdefaults, 0, 0},
+    {(char *) "__annotations__", (getter)__Pyx_CyFunction_get_annotations, (setter)__Pyx_CyFunction_set_annotations, 0, 0},
+    {0, 0, 0, 0, 0}
+};
+static PyMemberDef __pyx_CyFunction_members[] = {
+    {(char *) "__module__", T_OBJECT, offsetof(PyCFunctionObject, m_module), PY_WRITE_RESTRICTED, 0},
+    {0, 0, 0,  0, 0}
+};
+static PyObject *
+__Pyx_CyFunction_reduce(__pyx_CyFunctionObject *m, CYTHON_UNUSED PyObject *args)
+{
+#if PY_MAJOR_VERSION >= 3
+    return PyUnicode_FromString(m->func.m_ml->ml_name);
+#else
+    return PyString_FromString(m->func.m_ml->ml_name);
+#endif
+}
+static PyMethodDef __pyx_CyFunction_methods[] = {
+    {"__reduce__", (PyCFunction)__Pyx_CyFunction_reduce, METH_VARARGS, 0},
+    {0, 0, 0, 0}
+};
+#if PY_VERSION_HEX < 0x030500A0
+#define __Pyx_CyFunction_weakreflist(cyfunc) ((cyfunc)->func_weakreflist)
+#else
+#define __Pyx_CyFunction_weakreflist(cyfunc) ((cyfunc)->func.m_weakreflist)
+#endif
+static PyObject *__Pyx_CyFunction_New(PyTypeObject *type, PyMethodDef *ml, int flags, PyObject* qualname,
+                                      PyObject *closure, PyObject *module, PyObject* globals, PyObject* code) {
+    __pyx_CyFunctionObject *op = PyObject_GC_New(__pyx_CyFunctionObject, type);
+    if (op == NULL)
+        return NULL;
+    op->flags = flags;
+    __Pyx_CyFunction_weakreflist(op) = NULL;
+    op->func.m_ml = ml;
+    op->func.m_self = (PyObject *) op;
+    Py_XINCREF(closure);
+    op->func_closure = closure;
+    Py_XINCREF(module);
+    op->func.m_module = module;
+    op->func_dict = NULL;
+    op->func_name = NULL;
+    Py_INCREF(qualname);
+    op->func_qualname = qualname;
+    op->func_doc = NULL;
+    op->func_classobj = NULL;
+    op->func_globals = globals;
+    Py_INCREF(op->func_globals);
+    Py_XINCREF(code);
+    op->func_code = code;
+    op->defaults_pyobjects = 0;
+    op->defaults = NULL;
+    op->defaults_tuple = NULL;
+    op->defaults_kwdict = NULL;
+    op->defaults_getter = NULL;
+    op->func_annotations = NULL;
+    PyObject_GC_Track(op);
+    return (PyObject *) op;
+}
+static int
+__Pyx_CyFunction_clear(__pyx_CyFunctionObject *m)
+{
+    Py_CLEAR(m->func_closure);
+    Py_CLEAR(m->func.m_module);
+    Py_CLEAR(m->func_dict);
+    Py_CLEAR(m->func_name);
+    Py_CLEAR(m->func_qualname);
+    Py_CLEAR(m->func_doc);
+    Py_CLEAR(m->func_globals);
+    Py_CLEAR(m->func_code);
+    Py_CLEAR(m->func_classobj);
+    Py_CLEAR(m->defaults_tuple);
+    Py_CLEAR(m->defaults_kwdict);
+    Py_CLEAR(m->func_annotations);
+    if (m->defaults) {
+        PyObject **pydefaults = __Pyx_CyFunction_Defaults(PyObject *, m);
+        int i;
+        for (i = 0; i < m->defaults_pyobjects; i++)
+            Py_XDECREF(pydefaults[i]);
+        PyObject_Free(m->defaults);
+        m->defaults = NULL;
+    }
+    return 0;
+}
+static void __Pyx__CyFunction_dealloc(__pyx_CyFunctionObject *m)
+{
+    if (__Pyx_CyFunction_weakreflist(m) != NULL)
+        PyObject_ClearWeakRefs((PyObject *) m);
+    __Pyx_CyFunction_clear(m);
+    PyObject_GC_Del(m);
+}
+static void __Pyx_CyFunction_dealloc(__pyx_CyFunctionObject *m)
+{
+    PyObject_GC_UnTrack(m);
+    __Pyx__CyFunction_dealloc(m);
+}
+static int __Pyx_CyFunction_traverse(__pyx_CyFunctionObject *m, visitproc visit, void *arg)
+{
+    Py_VISIT(m->func_closure);
+    Py_VISIT(m->func.m_module);
+    Py_VISIT(m->func_dict);
+    Py_VISIT(m->func_name);
+    Py_VISIT(m->func_qualname);
+    Py_VISIT(m->func_doc);
+    Py_VISIT(m->func_globals);
+    Py_VISIT(m->func_code);
+    Py_VISIT(m->func_classobj);
+    Py_VISIT(m->defaults_tuple);
+    Py_VISIT(m->defaults_kwdict);
+    if (m->defaults) {
+        PyObject **pydefaults = __Pyx_CyFunction_Defaults(PyObject *, m);
+        int i;
+        for (i = 0; i < m->defaults_pyobjects; i++)
+            Py_VISIT(pydefaults[i]);
+    }
+    return 0;
+}
+static PyObject *__Pyx_CyFunction_descr_get(PyObject *func, PyObject *obj, PyObject *type)
+{
+    __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func;
+    if (m->flags & __Pyx_CYFUNCTION_STATICMETHOD) {
+        Py_INCREF(func);
+        return func;
+    }
+    if (m->flags & __Pyx_CYFUNCTION_CLASSMETHOD) {
+        if (type == NULL)
+            type = (PyObject *)(Py_TYPE(obj));
+        return __Pyx_PyMethod_New(func, type, (PyObject *)(Py_TYPE(type)));
+    }
+    if (obj == Py_None)
+        obj = NULL;
+    return __Pyx_PyMethod_New(func, obj, type);
+}
+static PyObject*
+__Pyx_CyFunction_repr(__pyx_CyFunctionObject *op)
+{
+#if PY_MAJOR_VERSION >= 3
+    return PyUnicode_FromFormat("<cyfunction %U at %p>",
+                                op->func_qualname, (void *)op);
+#else
+    return PyString_FromFormat("<cyfunction %s at %p>",
+                               PyString_AsString(op->func_qualname), (void *)op);
+#endif
+}
+static PyObject * __Pyx_CyFunction_CallMethod(PyObject *func, PyObject *self, PyObject *arg, PyObject *kw) {
+    PyCFunctionObject* f = (PyCFunctionObject*)func;
+    PyCFunction meth = f->m_ml->ml_meth;
+    Py_ssize_t size;
+    switch (f->m_ml->ml_flags & (METH_VARARGS | METH_KEYWORDS | METH_NOARGS | METH_O)) {
+    case METH_VARARGS:
+        if (likely(kw == NULL || PyDict_Size(kw) == 0))
+            return (*meth)(self, arg);
+        break;
+    case METH_VARARGS | METH_KEYWORDS:
+        return (*(PyCFunctionWithKeywords)(void*)meth)(self, arg, kw);
+    case METH_NOARGS:
+        if (likely(kw == NULL || PyDict_Size(kw) == 0)) {
+            size = PyTuple_GET_SIZE(arg);
+            if (likely(size == 0))
+                return (*meth)(self, NULL);
+            PyErr_Format(PyExc_TypeError,
+                "%.200s() takes no arguments (%" CYTHON_FORMAT_SSIZE_T "d given)",
+                f->m_ml->ml_name, size);
+            return NULL;
+        }
+        break;
+    case METH_O:
+        if (likely(kw == NULL || PyDict_Size(kw) == 0)) {
+            size = PyTuple_GET_SIZE(arg);
+            if (likely(size == 1)) {
+                PyObject *result, *arg0;
+                #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+                arg0 = PyTuple_GET_ITEM(arg, 0);
+                #else
+                arg0 = PySequence_ITEM(arg, 0); if (unlikely(!arg0)) return NULL;
+                #endif
+                result = (*meth)(self, arg0);
+                #if !(CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS)
+                Py_DECREF(arg0);
+                #endif
+                return result;
+            }
+            PyErr_Format(PyExc_TypeError,
+                "%.200s() takes exactly one argument (%" CYTHON_FORMAT_SSIZE_T "d given)",
+                f->m_ml->ml_name, size);
+            return NULL;
+        }
+        break;
+    default:
+        PyErr_SetString(PyExc_SystemError, "Bad call flags in "
+                        "__Pyx_CyFunction_Call. METH_OLDARGS is no "
+                        "longer supported!");
+        return NULL;
+    }
+    PyErr_Format(PyExc_TypeError, "%.200s() takes no keyword arguments",
+                 f->m_ml->ml_name);
+    return NULL;
+}
+static CYTHON_INLINE PyObject *__Pyx_CyFunction_Call(PyObject *func, PyObject *arg, PyObject *kw) {
+    return __Pyx_CyFunction_CallMethod(func, ((PyCFunctionObject*)func)->m_self, arg, kw);
+}
+static PyObject *__Pyx_CyFunction_CallAsMethod(PyObject *func, PyObject *args, PyObject *kw) {
+    PyObject *result;
+    __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *) func;
+    if ((cyfunc->flags & __Pyx_CYFUNCTION_CCLASS) && !(cyfunc->flags & __Pyx_CYFUNCTION_STATICMETHOD)) {
+        Py_ssize_t argc;
+        PyObject *new_args;
+        PyObject *self;
+        argc = PyTuple_GET_SIZE(args);
+        new_args = PyTuple_GetSlice(args, 1, argc);
+        if (unlikely(!new_args))
+            return NULL;
+        self = PyTuple_GetItem(args, 0);
+        if (unlikely(!self)) {
+            Py_DECREF(new_args);
+            return NULL;
+        }
+        result = __Pyx_CyFunction_CallMethod(func, self, new_args, kw);
+        Py_DECREF(new_args);
+    } else {
+        result = __Pyx_CyFunction_Call(func, args, kw);
+    }
+    return result;
+}
+static PyTypeObject __pyx_CyFunctionType_type = {
+    PyVarObject_HEAD_INIT(0, 0)
+    "cython_function_or_method",
+    sizeof(__pyx_CyFunctionObject),
+    0,
+    (destructor) __Pyx_CyFunction_dealloc,
+    0,
+    0,
+    0,
+#if PY_MAJOR_VERSION < 3
+    0,
+#else
+    0,
+#endif
+    (reprfunc) __Pyx_CyFunction_repr,
+    0,
+    0,
+    0,
+    0,
+    __Pyx_CyFunction_CallAsMethod,
+    0,
+    0,
+    0,
+    0,
+    Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC,
+    0,
+    (traverseproc) __Pyx_CyFunction_traverse,
+    (inquiry) __Pyx_CyFunction_clear,
+    0,
+#if PY_VERSION_HEX < 0x030500A0
+    offsetof(__pyx_CyFunctionObject, func_weakreflist),
+#else
+    offsetof(PyCFunctionObject, m_weakreflist),
+#endif
+    0,
+    0,
+    __pyx_CyFunction_methods,
+    __pyx_CyFunction_members,
+    __pyx_CyFunction_getsets,
+    0,
+    0,
+    __Pyx_CyFunction_descr_get,
+    0,
+    offsetof(__pyx_CyFunctionObject, func_dict),
+    0,
+    0,
+    0,
+    0,
+    0,
+    0,
+    0,
+    0,
+    0,
+    0,
+    0,
+    0,
+#if PY_VERSION_HEX >= 0x030400a1
+    0,
+#endif
+};
+static int __pyx_CyFunction_init(void) {
+    __pyx_CyFunctionType = __Pyx_FetchCommonType(&__pyx_CyFunctionType_type);
+    if (unlikely(__pyx_CyFunctionType == NULL)) {
+        return -1;
+    }
+    return 0;
+}
+static CYTHON_INLINE void *__Pyx_CyFunction_InitDefaults(PyObject *func, size_t size, int pyobjects) {
+    __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func;
+    m->defaults = PyObject_Malloc(size);
+    if (unlikely(!m->defaults))
+        return PyErr_NoMemory();
+    memset(m->defaults, 0, size);
+    m->defaults_pyobjects = pyobjects;
+    return m->defaults;
+}
+static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsTuple(PyObject *func, PyObject *tuple) {
+    __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func;
+    m->defaults_tuple = tuple;
+    Py_INCREF(tuple);
+}
+static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsKwDict(PyObject *func, PyObject *dict) {
+    __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func;
+    m->defaults_kwdict = dict;
+    Py_INCREF(dict);
+}
+static CYTHON_INLINE void __Pyx_CyFunction_SetAnnotationsDict(PyObject *func, PyObject *dict) {
+    __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func;
+    m->func_annotations = dict;
+    Py_INCREF(dict);
+}
+
+/* FusedFunction */
+  static PyObject *
+__pyx_FusedFunction_New(PyTypeObject *type, PyMethodDef *ml, int flags,
+                        PyObject *qualname, PyObject *self,
+                        PyObject *module, PyObject *globals,
+                        PyObject *code)
+{
+    __pyx_FusedFunctionObject *fusedfunc =
+        (__pyx_FusedFunctionObject *) __Pyx_CyFunction_New(type, ml, flags, qualname,
+                                                           self, module, globals, code);
+    if (!fusedfunc)
+        return NULL;
+    fusedfunc->__signatures__ = NULL;
+    fusedfunc->type = NULL;
+    fusedfunc->self = NULL;
+    return (PyObject *) fusedfunc;
+}
+static void
+__pyx_FusedFunction_dealloc(__pyx_FusedFunctionObject *self)
+{
+    PyObject_GC_UnTrack(self);
+    Py_CLEAR(self->self);
+    Py_CLEAR(self->type);
+    Py_CLEAR(self->__signatures__);
+    __Pyx__CyFunction_dealloc((__pyx_CyFunctionObject *) self);
+}
+static int
+__pyx_FusedFunction_traverse(__pyx_FusedFunctionObject *self,
+                             visitproc visit,
+                             void *arg)
+{
+    Py_VISIT(self->self);
+    Py_VISIT(self->type);
+    Py_VISIT(self->__signatures__);
+    return __Pyx_CyFunction_traverse((__pyx_CyFunctionObject *) self, visit, arg);
+}
+static int
+__pyx_FusedFunction_clear(__pyx_FusedFunctionObject *self)
+{
+    Py_CLEAR(self->self);
+    Py_CLEAR(self->type);
+    Py_CLEAR(self->__signatures__);
+    return __Pyx_CyFunction_clear((__pyx_CyFunctionObject *) self);
+}
+static PyObject *
+__pyx_FusedFunction_descr_get(PyObject *self, PyObject *obj, PyObject *type)
+{
+    __pyx_FusedFunctionObject *func, *meth;
+    func = (__pyx_FusedFunctionObject *) self;
+    if (func->self || func->func.flags & __Pyx_CYFUNCTION_STATICMETHOD) {
+        Py_INCREF(self);
+        return self;
+    }
+    if (obj == Py_None)
+        obj = NULL;
+    meth = (__pyx_FusedFunctionObject *) __pyx_FusedFunction_NewEx(
+                    ((PyCFunctionObject *) func)->m_ml,
+                    ((__pyx_CyFunctionObject *) func)->flags,
+                    ((__pyx_CyFunctionObject *) func)->func_qualname,
+                    ((__pyx_CyFunctionObject *) func)->func_closure,
+                    ((PyCFunctionObject *) func)->m_module,
+                    ((__pyx_CyFunctionObject *) func)->func_globals,
+                    ((__pyx_CyFunctionObject *) func)->func_code);
+    if (!meth)
+        return NULL;
+    Py_XINCREF(func->func.func_classobj);
+    meth->func.func_classobj = func->func.func_classobj;
+    Py_XINCREF(func->__signatures__);
+    meth->__signatures__ = func->__signatures__;
+    Py_XINCREF(type);
+    meth->type = type;
+    Py_XINCREF(func->func.defaults_tuple);
+    meth->func.defaults_tuple = func->func.defaults_tuple;
+    if (func->func.flags & __Pyx_CYFUNCTION_CLASSMETHOD)
+        obj = type;
+    Py_XINCREF(obj);
+    meth->self = obj;
+    return (PyObject *) meth;
+}
+static PyObject *
+_obj_to_str(PyObject *obj)
+{
+    if (PyType_Check(obj))
+        return PyObject_GetAttr(obj, __pyx_n_s_name_2);
+    else
+        return PyObject_Str(obj);
+}
+static PyObject *
+__pyx_FusedFunction_getitem(__pyx_FusedFunctionObject *self, PyObject *idx)
+{
+    PyObject *signature = NULL;
+    PyObject *unbound_result_func;
+    PyObject *result_func = NULL;
+    if (self->__signatures__ == NULL) {
+        PyErr_SetString(PyExc_TypeError, "Function is not fused");
+        return NULL;
+    }
+    if (PyTuple_Check(idx)) {
+        PyObject *list = PyList_New(0);
+        Py_ssize_t n = PyTuple_GET_SIZE(idx);
+        PyObject *string = NULL;
+        PyObject *sep = NULL;
+        int i;
+        if (!list)
+            return NULL;
+        for (i = 0; i < n; i++) {
+#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+            PyObject *item = PyTuple_GET_ITEM(idx, i);
+#else
+            PyObject *item = PySequence_ITEM(idx, i);
+#endif
+            string = _obj_to_str(item);
+#if !(CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS)
+            Py_DECREF(item);
+#endif
+            if (!string || PyList_Append(list, string) < 0)
+                goto __pyx_err;
+            Py_DECREF(string);
+        }
+        sep = PyUnicode_FromString("|");
+        if (sep)
+            signature = PyUnicode_Join(sep, list);
+__pyx_err:
+;
+        Py_DECREF(list);
+        Py_XDECREF(sep);
+    } else {
+        signature = _obj_to_str(idx);
+    }
+    if (!signature)
+        return NULL;
+    unbound_result_func = PyObject_GetItem(self->__signatures__, signature);
+    if (unbound_result_func) {
+        if (self->self || self->type) {
+            __pyx_FusedFunctionObject *unbound = (__pyx_FusedFunctionObject *) unbound_result_func;
+            Py_CLEAR(unbound->func.func_classobj);
+            Py_XINCREF(self->func.func_classobj);
+            unbound->func.func_classobj = self->func.func_classobj;
+            result_func = __pyx_FusedFunction_descr_get(unbound_result_func,
+                                                        self->self, self->type);
+        } else {
+            result_func = unbound_result_func;
+            Py_INCREF(result_func);
+        }
+    }
+    Py_DECREF(signature);
+    Py_XDECREF(unbound_result_func);
+    return result_func;
+}
+static PyObject *
+__pyx_FusedFunction_callfunction(PyObject *func, PyObject *args, PyObject *kw)
+{
+     __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *) func;
+    int static_specialized = (cyfunc->flags & __Pyx_CYFUNCTION_STATICMETHOD &&
+                              !((__pyx_FusedFunctionObject *) func)->__signatures__);
+    if (cyfunc->flags & __Pyx_CYFUNCTION_CCLASS && !static_specialized) {
+        return __Pyx_CyFunction_CallAsMethod(func, args, kw);
+    } else {
+        return __Pyx_CyFunction_Call(func, args, kw);
+    }
+}
+static PyObject *
+__pyx_FusedFunction_call(PyObject *func, PyObject *args, PyObject *kw)
+{
+    __pyx_FusedFunctionObject *binding_func = (__pyx_FusedFunctionObject *) func;
+    Py_ssize_t argc = PyTuple_GET_SIZE(args);
+    PyObject *new_args = NULL;
+    __pyx_FusedFunctionObject *new_func = NULL;
+    PyObject *result = NULL;
+    PyObject *self = NULL;
+    int is_staticmethod = binding_func->func.flags & __Pyx_CYFUNCTION_STATICMETHOD;
+    int is_classmethod = binding_func->func.flags & __Pyx_CYFUNCTION_CLASSMETHOD;
+    if (binding_func->self) {
+        Py_ssize_t i;
+        new_args = PyTuple_New(argc + 1);
+        if (!new_args)
+            return NULL;
+        self = binding_func->self;
+#if !(CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS)
+        Py_INCREF(self);
+#endif
+        Py_INCREF(self);
+        PyTuple_SET_ITEM(new_args, 0, self);
+        for (i = 0; i < argc; i++) {
+#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+            PyObject *item = PyTuple_GET_ITEM(args, i);
+            Py_INCREF(item);
+#else
+            PyObject *item = PySequence_ITEM(args, i);  if (unlikely(!item)) goto bad;
+#endif
+            PyTuple_SET_ITEM(new_args, i + 1, item);
+        }
+        args = new_args;
+    } else if (binding_func->type) {
+        if (argc < 1) {
+            PyErr_SetString(PyExc_TypeError, "Need at least one argument, 0 given.");
+            return NULL;
+        }
+#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+        self = PyTuple_GET_ITEM(args, 0);
+#else
+        self = PySequence_ITEM(args, 0);  if (unlikely(!self)) return NULL;
+#endif
+    }
+    if (self && !is_classmethod && !is_staticmethod) {
+        int is_instance = PyObject_IsInstance(self, binding_func->type);
+        if (unlikely(!is_instance)) {
+            PyErr_Format(PyExc_TypeError,
+                         "First argument should be of type %.200s, got %.200s.",
+                         ((PyTypeObject *) binding_func->type)->tp_name,
+                         self->ob_type->tp_name);
+            goto bad;
+        } else if (unlikely(is_instance == -1)) {
+            goto bad;
+        }
+    }
+#if !(CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS)
+    Py_XDECREF(self);
+    self = NULL;
+#endif
+    if (binding_func->__signatures__) {
+        PyObject *tup;
+        if (is_staticmethod && binding_func->func.flags & __Pyx_CYFUNCTION_CCLASS) {
+            tup = PyTuple_Pack(3, args,
+                               kw == NULL ? Py_None : kw,
+                               binding_func->func.defaults_tuple);
+            if (unlikely(!tup)) goto bad;
+            new_func = (__pyx_FusedFunctionObject *) __Pyx_CyFunction_CallMethod(
+                func, binding_func->__signatures__, tup, NULL);
+        } else {
+            tup = PyTuple_Pack(4, binding_func->__signatures__, args,
+                               kw == NULL ? Py_None : kw,
+                               binding_func->func.defaults_tuple);
+            if (unlikely(!tup)) goto bad;
+            new_func = (__pyx_FusedFunctionObject *) __pyx_FusedFunction_callfunction(func, tup, NULL);
+        }
+        Py_DECREF(tup);
+        if (unlikely(!new_func))
+            goto bad;
+        Py_XINCREF(binding_func->func.func_classobj);
+        Py_CLEAR(new_func->func.func_classobj);
+        new_func->func.func_classobj = binding_func->func.func_classobj;
+        func = (PyObject *) new_func;
+    }
+    result = __pyx_FusedFunction_callfunction(func, args, kw);
+bad:
+#if !(CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS)
+    Py_XDECREF(self);
+#endif
+    Py_XDECREF(new_args);
+    Py_XDECREF((PyObject *) new_func);
+    return result;
+}
+static PyMemberDef __pyx_FusedFunction_members[] = {
+    {(char *) "__signatures__",
+     T_OBJECT,
+     offsetof(__pyx_FusedFunctionObject, __signatures__),
+     READONLY,
+     0},
+    {0, 0, 0, 0, 0},
+};
+static PyMappingMethods __pyx_FusedFunction_mapping_methods = {
+    0,
+    (binaryfunc) __pyx_FusedFunction_getitem,
+    0,
+};
+static PyTypeObject __pyx_FusedFunctionType_type = {
+    PyVarObject_HEAD_INIT(0, 0)
+    "fused_cython_function",
+    sizeof(__pyx_FusedFunctionObject),
+    0,
+    (destructor) __pyx_FusedFunction_dealloc,
+    0,
+    0,
+    0,
+#if PY_MAJOR_VERSION < 3
+    0,
+#else
+    0,
+#endif
+    0,
+    0,
+    0,
+    &__pyx_FusedFunction_mapping_methods,
+    0,
+    (ternaryfunc) __pyx_FusedFunction_call,
+    0,
+    0,
+    0,
+    0,
+    Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_BASETYPE,
+    0,
+    (traverseproc) __pyx_FusedFunction_traverse,
+    (inquiry) __pyx_FusedFunction_clear,
+    0,
+    0,
+    0,
+    0,
+    0,
+    __pyx_FusedFunction_members,
+    __pyx_CyFunction_getsets,
+    &__pyx_CyFunctionType_type,
+    0,
+    __pyx_FusedFunction_descr_get,
+    0,
+    0,
+    0,
+    0,
+    0,
+    0,
+    0,
+    0,
+    0,
+    0,
+    0,
+    0,
+    0,
+    0,
+#if PY_VERSION_HEX >= 0x030400a1
+    0,
+#endif
+};
+static int __pyx_FusedFunction_init(void) {
+    __pyx_FusedFunctionType = __Pyx_FetchCommonType(&__pyx_FusedFunctionType_type);
+    if (__pyx_FusedFunctionType == NULL) {
+        return -1;
+    }
+    return 0;
+}
+
+/* CLineInTraceback */
+  #ifndef CYTHON_CLINE_IN_TRACEBACK
+static int __Pyx_CLineForTraceback(PyThreadState *tstate, int c_line) {
+    PyObject *use_cline;
+    PyObject *ptype, *pvalue, *ptraceback;
+#if CYTHON_COMPILING_IN_CPYTHON
+    PyObject **cython_runtime_dict;
+#endif
+    if (unlikely(!__pyx_cython_runtime)) {
+        return c_line;
+    }
+    __Pyx_ErrFetchInState(tstate, &ptype, &pvalue, &ptraceback);
+#if CYTHON_COMPILING_IN_CPYTHON
+    cython_runtime_dict = _PyObject_GetDictPtr(__pyx_cython_runtime);
+    if (likely(cython_runtime_dict)) {
+        __PYX_PY_DICT_LOOKUP_IF_MODIFIED(
+            use_cline, *cython_runtime_dict,
+            __Pyx_PyDict_GetItemStr(*cython_runtime_dict, __pyx_n_s_cline_in_traceback))
+    } else
+#endif
+    {
+      PyObject *use_cline_obj = __Pyx_PyObject_GetAttrStr(__pyx_cython_runtime, __pyx_n_s_cline_in_traceback);
+      if (use_cline_obj) {
+        use_cline = PyObject_Not(use_cline_obj) ? Py_False : Py_True;
+        Py_DECREF(use_cline_obj);
+      } else {
+        PyErr_Clear();
+        use_cline = NULL;
+      }
+    }
+    if (!use_cline) {
+        c_line = 0;
+        PyObject_SetAttr(__pyx_cython_runtime, __pyx_n_s_cline_in_traceback, Py_False);
+    }
+    else if (use_cline == Py_False || (use_cline != Py_True && PyObject_Not(use_cline) != 0)) {
+        c_line = 0;
+    }
+    __Pyx_ErrRestoreInState(tstate, ptype, pvalue, ptraceback);
+    return c_line;
+}
+#endif
+
+/* CodeObjectCache */
+  static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line) {
+    int start = 0, mid = 0, end = count - 1;
+    if (end >= 0 && code_line > entries[end].code_line) {
+        return count;
+    }
+    while (start < end) {
+        mid = start + (end - start) / 2;
+        if (code_line < entries[mid].code_line) {
+            end = mid;
+        } else if (code_line > entries[mid].code_line) {
+             start = mid + 1;
+        } else {
+            return mid;
+        }
+    }
+    if (code_line <= entries[mid].code_line) {
+        return mid;
+    } else {
+        return mid + 1;
+    }
+}
+static PyCodeObject *__pyx_find_code_object(int code_line) {
+    PyCodeObject* code_object;
+    int pos;
+    if (unlikely(!code_line) || unlikely(!__pyx_code_cache.entries)) {
+        return NULL;
+    }
+    pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line);
+    if (unlikely(pos >= __pyx_code_cache.count) || unlikely(__pyx_code_cache.entries[pos].code_line != code_line)) {
+        return NULL;
+    }
+    code_object = __pyx_code_cache.entries[pos].code_object;
+    Py_INCREF(code_object);
+    return code_object;
+}
+static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object) {
+    int pos, i;
+    __Pyx_CodeObjectCacheEntry* entries = __pyx_code_cache.entries;
+    if (unlikely(!code_line)) {
+        return;
+    }
+    if (unlikely(!entries)) {
+        entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Malloc(64*sizeof(__Pyx_CodeObjectCacheEntry));
+        if (likely(entries)) {
+            __pyx_code_cache.entries = entries;
+            __pyx_code_cache.max_count = 64;
+            __pyx_code_cache.count = 1;
+            entries[0].code_line = code_line;
+            entries[0].code_object = code_object;
+            Py_INCREF(code_object);
+        }
+        return;
+    }
+    pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line);
+    if ((pos < __pyx_code_cache.count) && unlikely(__pyx_code_cache.entries[pos].code_line == code_line)) {
+        PyCodeObject* tmp = entries[pos].code_object;
+        entries[pos].code_object = code_object;
+        Py_DECREF(tmp);
+        return;
+    }
+    if (__pyx_code_cache.count == __pyx_code_cache.max_count) {
+        int new_max = __pyx_code_cache.max_count + 64;
+        entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Realloc(
+            __pyx_code_cache.entries, (size_t)new_max*sizeof(__Pyx_CodeObjectCacheEntry));
+        if (unlikely(!entries)) {
+            return;
+        }
+        __pyx_code_cache.entries = entries;
+        __pyx_code_cache.max_count = new_max;
+    }
+    for (i=__pyx_code_cache.count; i>pos; i--) {
+        entries[i] = entries[i-1];
+    }
+    entries[pos].code_line = code_line;
+    entries[pos].code_object = code_object;
+    __pyx_code_cache.count++;
+    Py_INCREF(code_object);
+}
+
+/* AddTraceback */
+  #include "compile.h"
+#include "frameobject.h"
+#include "traceback.h"
+static PyCodeObject* __Pyx_CreateCodeObjectForTraceback(
+            const char *funcname, int c_line,
+            int py_line, const char *filename) {
+    PyCodeObject *py_code = 0;
+    PyObject *py_srcfile = 0;
+    PyObject *py_funcname = 0;
+    #if PY_MAJOR_VERSION < 3
+    py_srcfile = PyString_FromString(filename);
+    #else
+    py_srcfile = PyUnicode_FromString(filename);
+    #endif
+    if (!py_srcfile) goto bad;
+    if (c_line) {
+        #if PY_MAJOR_VERSION < 3
+        py_funcname = PyString_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line);
+        #else
+        py_funcname = PyUnicode_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line);
+        #endif
+    }
+    else {
+        #if PY_MAJOR_VERSION < 3
+        py_funcname = PyString_FromString(funcname);
+        #else
+        py_funcname = PyUnicode_FromString(funcname);
+        #endif
+    }
+    if (!py_funcname) goto bad;
+    py_code = __Pyx_PyCode_New(
+        0,
+        0,
+        0,
+        0,
+        0,
+        __pyx_empty_bytes, /*PyObject *code,*/
+        __pyx_empty_tuple, /*PyObject *consts,*/
+        __pyx_empty_tuple, /*PyObject *names,*/
+        __pyx_empty_tuple, /*PyObject *varnames,*/
+        __pyx_empty_tuple, /*PyObject *freevars,*/
+        __pyx_empty_tuple, /*PyObject *cellvars,*/
+        py_srcfile,   /*PyObject *filename,*/
+        py_funcname,  /*PyObject *name,*/
+        py_line,
+        __pyx_empty_bytes  /*PyObject *lnotab*/
+    );
+    Py_DECREF(py_srcfile);
+    Py_DECREF(py_funcname);
+    return py_code;
+bad:
+    Py_XDECREF(py_srcfile);
+    Py_XDECREF(py_funcname);
+    return NULL;
+}
+static void __Pyx_AddTraceback(const char *funcname, int c_line,
+                               int py_line, const char *filename) {
+    PyCodeObject *py_code = 0;
+    PyFrameObject *py_frame = 0;
+    PyThreadState *tstate = __Pyx_PyThreadState_Current;
+    if (c_line) {
+        c_line = __Pyx_CLineForTraceback(tstate, c_line);
+    }
+    py_code = __pyx_find_code_object(c_line ? -c_line : py_line);
+    if (!py_code) {
+        py_code = __Pyx_CreateCodeObjectForTraceback(
+            funcname, c_line, py_line, filename);
+        if (!py_code) goto bad;
+        __pyx_insert_code_object(c_line ? -c_line : py_line, py_code);
+    }
+    py_frame = PyFrame_New(
+        tstate,            /*PyThreadState *tstate,*/
+        py_code,           /*PyCodeObject *code,*/
+        __pyx_d,    /*PyObject *globals,*/
+        0                  /*PyObject *locals*/
+    );
+    if (!py_frame) goto bad;
+    __Pyx_PyFrame_SetLineNumber(py_frame, py_line);
+    PyTraceBack_Here(py_frame);
+bad:
+    Py_XDECREF(py_code);
+    Py_XDECREF(py_frame);
+}
+
+#if PY_MAJOR_VERSION < 3
+static int __Pyx_GetBuffer(PyObject *obj, Py_buffer *view, int flags) {
+    if (PyObject_CheckBuffer(obj)) return PyObject_GetBuffer(obj, view, flags);
+        if (__Pyx_TypeCheck(obj, __pyx_array_type)) return __pyx_array_getbuffer(obj, view, flags);
+        if (__Pyx_TypeCheck(obj, __pyx_memoryview_type)) return __pyx_memoryview_getbuffer(obj, view, flags);
+    PyErr_Format(PyExc_TypeError, "'%.200s' does not have the buffer interface", Py_TYPE(obj)->tp_name);
+    return -1;
+}
+static void __Pyx_ReleaseBuffer(Py_buffer *view) {
+    PyObject *obj = view->obj;
+    if (!obj) return;
+    if (PyObject_CheckBuffer(obj)) {
+        PyBuffer_Release(view);
+        return;
+    }
+    if ((0)) {}
+    view->obj = NULL;
+    Py_DECREF(obj);
+}
+#endif
+
+
+  /* MemviewSliceIsContig */
+  static int
+__pyx_memviewslice_is_contig(const __Pyx_memviewslice mvs, char order, int ndim)
+{
+    int i, index, step, start;
+    Py_ssize_t itemsize = mvs.memview->view.itemsize;
+    if (order == 'F') {
+        step = 1;
+        start = 0;
+    } else {
+        step = -1;
+        start = ndim - 1;
+    }
+    for (i = 0; i < ndim; i++) {
+        index = start + step * i;
+        if (mvs.suboffsets[index] >= 0 || mvs.strides[index] != itemsize)
+            return 0;
+        itemsize *= mvs.shape[index];
+    }
+    return 1;
+}
+
+/* OverlappingSlices */
+  static void
+__pyx_get_array_memory_extents(__Pyx_memviewslice *slice,
+                               void **out_start, void **out_end,
+                               int ndim, size_t itemsize)
+{
+    char *start, *end;
+    int i;
+    start = end = slice->data;
+    for (i = 0; i < ndim; i++) {
+        Py_ssize_t stride = slice->strides[i];
+        Py_ssize_t extent = slice->shape[i];
+        if (extent == 0) {
+            *out_start = *out_end = start;
+            return;
+        } else {
+            if (stride > 0)
+                end += stride * (extent - 1);
+            else
+                start += stride * (extent - 1);
+        }
+    }
+    *out_start = start;
+    *out_end = end + itemsize;
+}
+static int
+__pyx_slices_overlap(__Pyx_memviewslice *slice1,
+                     __Pyx_memviewslice *slice2,
+                     int ndim, size_t itemsize)
+{
+    void *start1, *end1, *start2, *end2;
+    __pyx_get_array_memory_extents(slice1, &start1, &end1, ndim, itemsize);
+    __pyx_get_array_memory_extents(slice2, &start2, &end2, ndim, itemsize);
+    return (start1 < end2) && (start2 < end1);
+}
+
+/* Capsule */
+  static CYTHON_INLINE PyObject *
+__pyx_capsule_create(void *p, CYTHON_UNUSED const char *sig)
+{
+    PyObject *cobj;
+#if PY_VERSION_HEX >= 0x02070000
+    cobj = PyCapsule_New(p, sig, NULL);
+#else
+    cobj = PyCObject_FromVoidPtr(p, NULL);
+#endif
+    return cobj;
+}
+
+/* TypeInfoCompare */
+  static int
+__pyx_typeinfo_cmp(__Pyx_TypeInfo *a, __Pyx_TypeInfo *b)
+{
+    int i;
+    if (!a || !b)
+        return 0;
+    if (a == b)
+        return 1;
+    if (a->size != b->size || a->typegroup != b->typegroup ||
+            a->is_unsigned != b->is_unsigned || a->ndim != b->ndim) {
+        if (a->typegroup == 'H' || b->typegroup == 'H') {
+            return a->size == b->size;
+        } else {
+            return 0;
+        }
+    }
+    if (a->ndim) {
+        for (i = 0; i < a->ndim; i++)
+            if (a->arraysize[i] != b->arraysize[i])
+                return 0;
+    }
+    if (a->typegroup == 'S') {
+        if (a->flags != b->flags)
+            return 0;
+        if (a->fields || b->fields) {
+            if (!(a->fields && b->fields))
+                return 0;
+            for (i = 0; a->fields[i].type && b->fields[i].type; i++) {
+                __Pyx_StructField *field_a = a->fields + i;
+                __Pyx_StructField *field_b = b->fields + i;
+                if (field_a->offset != field_b->offset ||
+                    !__pyx_typeinfo_cmp(field_a->type, field_b->type))
+                    return 0;
+            }
+            return !a->fields[i].type && !b->fields[i].type;
+        }
+    }
+    return 1;
+}
+
+/* MemviewSliceValidateAndInit */
+  static int
+__pyx_check_strides(Py_buffer *buf, int dim, int ndim, int spec)
+{
+    if (buf->shape[dim] <= 1)
+        return 1;
+    if (buf->strides) {
+        if (spec & __Pyx_MEMVIEW_CONTIG) {
+            if (spec & (__Pyx_MEMVIEW_PTR|__Pyx_MEMVIEW_FULL)) {
+                if (buf->strides[dim] != sizeof(void *)) {
+                    PyErr_Format(PyExc_ValueError,
+                                 "Buffer is not indirectly contiguous "
+                                 "in dimension %d.", dim);
+                    goto fail;
+                }
+            } else if (buf->strides[dim] != buf->itemsize) {
+                PyErr_SetString(PyExc_ValueError,
+                                "Buffer and memoryview are not contiguous "
+                                "in the same dimension.");
+                goto fail;
+            }
+        }
+        if (spec & __Pyx_MEMVIEW_FOLLOW) {
+            Py_ssize_t stride = buf->strides[dim];
+            if (stride < 0)
+                stride = -stride;
+            if (stride < buf->itemsize) {
+                PyErr_SetString(PyExc_ValueError,
+                                "Buffer and memoryview are not contiguous "
+                                "in the same dimension.");
+                goto fail;
+            }
+        }
+    } else {
+        if (spec & __Pyx_MEMVIEW_CONTIG && dim != ndim - 1) {
+            PyErr_Format(PyExc_ValueError,
+                         "C-contiguous buffer is not contiguous in "
+                         "dimension %d", dim);
+            goto fail;
+        } else if (spec & (__Pyx_MEMVIEW_PTR)) {
+            PyErr_Format(PyExc_ValueError,
+                         "C-contiguous buffer is not indirect in "
+                         "dimension %d", dim);
+            goto fail;
+        } else if (buf->suboffsets) {
+            PyErr_SetString(PyExc_ValueError,
+                            "Buffer exposes suboffsets but no strides");
+            goto fail;
+        }
+    }
+    return 1;
+fail:
+    return 0;
+}
+static int
+__pyx_check_suboffsets(Py_buffer *buf, int dim, CYTHON_UNUSED int ndim, int spec)
+{
+    if (spec & __Pyx_MEMVIEW_DIRECT) {
+        if (buf->suboffsets && buf->suboffsets[dim] >= 0) {
+            PyErr_Format(PyExc_ValueError,
+                         "Buffer not compatible with direct access "
+                         "in dimension %d.", dim);
+            goto fail;
+        }
+    }
+    if (spec & __Pyx_MEMVIEW_PTR) {
+        if (!buf->suboffsets || (buf->suboffsets[dim] < 0)) {
+            PyErr_Format(PyExc_ValueError,
+                         "Buffer is not indirectly accessible "
+                         "in dimension %d.", dim);
+            goto fail;
+        }
+    }
+    return 1;
+fail:
+    return 0;
+}
+static int
+__pyx_verify_contig(Py_buffer *buf, int ndim, int c_or_f_flag)
+{
+    int i;
+    if (c_or_f_flag & __Pyx_IS_F_CONTIG) {
+        Py_ssize_t stride = 1;
+        for (i = 0; i < ndim; i++) {
+            if (stride * buf->itemsize != buf->strides[i] &&
+                    buf->shape[i] > 1)
+            {
+                PyErr_SetString(PyExc_ValueError,
+                    "Buffer not fortran contiguous.");
+                goto fail;
+            }
+            stride = stride * buf->shape[i];
+        }
+    } else if (c_or_f_flag & __Pyx_IS_C_CONTIG) {
+        Py_ssize_t stride = 1;
+        for (i = ndim - 1; i >- 1; i--) {
+            if (stride * buf->itemsize != buf->strides[i] &&
+                    buf->shape[i] > 1) {
+                PyErr_SetString(PyExc_ValueError,
+                    "Buffer not C contiguous.");
+                goto fail;
+            }
+            stride = stride * buf->shape[i];
+        }
+    }
+    return 1;
+fail:
+    return 0;
+}
+static int __Pyx_ValidateAndInit_memviewslice(
+                int *axes_specs,
+                int c_or_f_flag,
+                int buf_flags,
+                int ndim,
+                __Pyx_TypeInfo *dtype,
+                __Pyx_BufFmt_StackElem stack[],
+                __Pyx_memviewslice *memviewslice,
+                PyObject *original_obj)
+{
+    struct __pyx_memoryview_obj *memview, *new_memview;
+    __Pyx_RefNannyDeclarations
+    Py_buffer *buf;
+    int i, spec = 0, retval = -1;
+    __Pyx_BufFmt_Context ctx;
+    int from_memoryview = __pyx_memoryview_check(original_obj);
+    __Pyx_RefNannySetupContext("ValidateAndInit_memviewslice", 0);
+    if (from_memoryview && __pyx_typeinfo_cmp(dtype, ((struct __pyx_memoryview_obj *)
+                                                            original_obj)->typeinfo)) {
+        memview = (struct __pyx_memoryview_obj *) original_obj;
+        new_memview = NULL;
+    } else {
+        memview = (struct __pyx_memoryview_obj *) __pyx_memoryview_new(
+                                            original_obj, buf_flags, 0, dtype);
+        new_memview = memview;
+        if (unlikely(!memview))
+            goto fail;
+    }
+    buf = &memview->view;
+    if (buf->ndim != ndim) {
+        PyErr_Format(PyExc_ValueError,
+                "Buffer has wrong number of dimensions (expected %d, got %d)",
+                ndim, buf->ndim);
+        goto fail;
+    }
+    if (new_memview) {
+        __Pyx_BufFmt_Init(&ctx, stack, dtype);
+        if (!__Pyx_BufFmt_CheckString(&ctx, buf->format)) goto fail;
+    }
+    if ((unsigned) buf->itemsize != dtype->size) {
+        PyErr_Format(PyExc_ValueError,
+                     "Item size of buffer (%" CYTHON_FORMAT_SSIZE_T "u byte%s) "
+                     "does not match size of '%s' (%" CYTHON_FORMAT_SSIZE_T "u byte%s)",
+                     buf->itemsize,
+                     (buf->itemsize > 1) ? "s" : "",
+                     dtype->name,
+                     dtype->size,
+                     (dtype->size > 1) ? "s" : "");
+        goto fail;
+    }
+    for (i = 0; i < ndim; i++) {
+        spec = axes_specs[i];
+        if (!__pyx_check_strides(buf, i, ndim, spec))
+            goto fail;
+        if (!__pyx_check_suboffsets(buf, i, ndim, spec))
+            goto fail;
+    }
+    if (buf->strides && !__pyx_verify_contig(buf, ndim, c_or_f_flag))
+        goto fail;
+    if (unlikely(__Pyx_init_memviewslice(memview, ndim, memviewslice,
+                                         new_memview != NULL) == -1)) {
+        goto fail;
+    }
+    retval = 0;
+    goto no_fail;
+fail:
+    Py_XDECREF(new_memview);
+    retval = -1;
+no_fail:
+    __Pyx_RefNannyFinishContext();
+    return retval;
+}
+
+/* ObjectToMemviewSlice */
+  static CYTHON_INLINE __Pyx_memviewslice __Pyx_PyObject_to_MemoryviewSlice_dsds_short(PyObject *obj, int writable_flag) {
+    __Pyx_memviewslice result = { 0, 0, { 0 }, { 0 }, { 0 } };
+    __Pyx_BufFmt_StackElem stack[1];
+    int axes_specs[] = { (__Pyx_MEMVIEW_DIRECT | __Pyx_MEMVIEW_STRIDED), (__Pyx_MEMVIEW_DIRECT | __Pyx_MEMVIEW_STRIDED) };
+    int retcode;
+    if (obj == Py_None) {
+        result.memview = (struct __pyx_memoryview_obj *) Py_None;
+        return result;
+    }
+    retcode = __Pyx_ValidateAndInit_memviewslice(axes_specs, 0,
+                                                 PyBUF_RECORDS_RO | writable_flag, 2,
+                                                 &__Pyx_TypeInfo_short, stack,
+                                                 &result, obj);
+    if (unlikely(retcode == -1))
+        goto __pyx_fail;
+    return result;
+__pyx_fail:
+    result.memview = NULL;
+    result.data = NULL;
+    return result;
+}
+
+/* ObjectToMemviewSlice */
+  static CYTHON_INLINE __Pyx_memviewslice __Pyx_PyObject_to_MemoryviewSlice_dsds_int(PyObject *obj, int writable_flag) {
+    __Pyx_memviewslice result = { 0, 0, { 0 }, { 0 }, { 0 } };
+    __Pyx_BufFmt_StackElem stack[1];
+    int axes_specs[] = { (__Pyx_MEMVIEW_DIRECT | __Pyx_MEMVIEW_STRIDED), (__Pyx_MEMVIEW_DIRECT | __Pyx_MEMVIEW_STRIDED) };
+    int retcode;
+    if (obj == Py_None) {
+        result.memview = (struct __pyx_memoryview_obj *) Py_None;
+        return result;
+    }
+    retcode = __Pyx_ValidateAndInit_memviewslice(axes_specs, 0,
+                                                 PyBUF_RECORDS_RO | writable_flag, 2,
+                                                 &__Pyx_TypeInfo_int, stack,
+                                                 &result, obj);
+    if (unlikely(retcode == -1))
+        goto __pyx_fail;
+    return result;
+__pyx_fail:
+    result.memview = NULL;
+    result.data = NULL;
+    return result;
+}
+
+/* ObjectToMemviewSlice */
+  static CYTHON_INLINE __Pyx_memviewslice __Pyx_PyObject_to_MemoryviewSlice_dsds_long(PyObject *obj, int writable_flag) {
+    __Pyx_memviewslice result = { 0, 0, { 0 }, { 0 }, { 0 } };
+    __Pyx_BufFmt_StackElem stack[1];
+    int axes_specs[] = { (__Pyx_MEMVIEW_DIRECT | __Pyx_MEMVIEW_STRIDED), (__Pyx_MEMVIEW_DIRECT | __Pyx_MEMVIEW_STRIDED) };
+    int retcode;
+    if (obj == Py_None) {
+        result.memview = (struct __pyx_memoryview_obj *) Py_None;
+        return result;
+    }
+    retcode = __Pyx_ValidateAndInit_memviewslice(axes_specs, 0,
+                                                 PyBUF_RECORDS_RO | writable_flag, 2,
+                                                 &__Pyx_TypeInfo_long, stack,
+                                                 &result, obj);
+    if (unlikely(retcode == -1))
+        goto __pyx_fail;
+    return result;
+__pyx_fail:
+    result.memview = NULL;
+    result.data = NULL;
+    return result;
+}
+
+/* ObjectToMemviewSlice */
+  static CYTHON_INLINE __Pyx_memviewslice __Pyx_PyObject_to_MemoryviewSlice_dsds_PY_LONG_LONG(PyObject *obj, int writable_flag) {
+    __Pyx_memviewslice result = { 0, 0, { 0 }, { 0 }, { 0 } };
+    __Pyx_BufFmt_StackElem stack[1];
+    int axes_specs[] = { (__Pyx_MEMVIEW_DIRECT | __Pyx_MEMVIEW_STRIDED), (__Pyx_MEMVIEW_DIRECT | __Pyx_MEMVIEW_STRIDED) };
+    int retcode;
+    if (obj == Py_None) {
+        result.memview = (struct __pyx_memoryview_obj *) Py_None;
+        return result;
+    }
+    retcode = __Pyx_ValidateAndInit_memviewslice(axes_specs, 0,
+                                                 PyBUF_RECORDS_RO | writable_flag, 2,
+                                                 &__Pyx_TypeInfo_PY_LONG_LONG, stack,
+                                                 &result, obj);
+    if (unlikely(retcode == -1))
+        goto __pyx_fail;
+    return result;
+__pyx_fail:
+    result.memview = NULL;
+    result.data = NULL;
+    return result;
+}
+
+/* ObjectToMemviewSlice */
+  static CYTHON_INLINE __Pyx_memviewslice __Pyx_PyObject_to_MemoryviewSlice_dsds_unsigned_short(PyObject *obj, int writable_flag) {
+    __Pyx_memviewslice result = { 0, 0, { 0 }, { 0 }, { 0 } };
+    __Pyx_BufFmt_StackElem stack[1];
+    int axes_specs[] = { (__Pyx_MEMVIEW_DIRECT | __Pyx_MEMVIEW_STRIDED), (__Pyx_MEMVIEW_DIRECT | __Pyx_MEMVIEW_STRIDED) };
+    int retcode;
+    if (obj == Py_None) {
+        result.memview = (struct __pyx_memoryview_obj *) Py_None;
+        return result;
+    }
+    retcode = __Pyx_ValidateAndInit_memviewslice(axes_specs, 0,
+                                                 PyBUF_RECORDS_RO | writable_flag, 2,
+                                                 &__Pyx_TypeInfo_unsigned_short, stack,
+                                                 &result, obj);
+    if (unlikely(retcode == -1))
+        goto __pyx_fail;
+    return result;
+__pyx_fail:
+    result.memview = NULL;
+    result.data = NULL;
+    return result;
+}
+
+/* ObjectToMemviewSlice */
+  static CYTHON_INLINE __Pyx_memviewslice __Pyx_PyObject_to_MemoryviewSlice_dsds_unsigned_int(PyObject *obj, int writable_flag) {
+    __Pyx_memviewslice result = { 0, 0, { 0 }, { 0 }, { 0 } };
+    __Pyx_BufFmt_StackElem stack[1];
+    int axes_specs[] = { (__Pyx_MEMVIEW_DIRECT | __Pyx_MEMVIEW_STRIDED), (__Pyx_MEMVIEW_DIRECT | __Pyx_MEMVIEW_STRIDED) };
+    int retcode;
+    if (obj == Py_None) {
+        result.memview = (struct __pyx_memoryview_obj *) Py_None;
+        return result;
+    }
+    retcode = __Pyx_ValidateAndInit_memviewslice(axes_specs, 0,
+                                                 PyBUF_RECORDS_RO | writable_flag, 2,
+                                                 &__Pyx_TypeInfo_unsigned_int, stack,
+                                                 &result, obj);
+    if (unlikely(retcode == -1))
+        goto __pyx_fail;
+    return result;
+__pyx_fail:
+    result.memview = NULL;
+    result.data = NULL;
+    return result;
+}
+
+/* ObjectToMemviewSlice */
+  static CYTHON_INLINE __Pyx_memviewslice __Pyx_PyObject_to_MemoryviewSlice_dsds_unsigned_long(PyObject *obj, int writable_flag) {
+    __Pyx_memviewslice result = { 0, 0, { 0 }, { 0 }, { 0 } };
+    __Pyx_BufFmt_StackElem stack[1];
+    int axes_specs[] = { (__Pyx_MEMVIEW_DIRECT | __Pyx_MEMVIEW_STRIDED), (__Pyx_MEMVIEW_DIRECT | __Pyx_MEMVIEW_STRIDED) };
+    int retcode;
+    if (obj == Py_None) {
+        result.memview = (struct __pyx_memoryview_obj *) Py_None;
+        return result;
+    }
+    retcode = __Pyx_ValidateAndInit_memviewslice(axes_specs, 0,
+                                                 PyBUF_RECORDS_RO | writable_flag, 2,
+                                                 &__Pyx_TypeInfo_unsigned_long, stack,
+                                                 &result, obj);
+    if (unlikely(retcode == -1))
+        goto __pyx_fail;
+    return result;
+__pyx_fail:
+    result.memview = NULL;
+    result.data = NULL;
+    return result;
+}
+
+/* ObjectToMemviewSlice */
+  static CYTHON_INLINE __Pyx_memviewslice __Pyx_PyObject_to_MemoryviewSlice_dsdsds_short(PyObject *obj, int writable_flag) {
+    __Pyx_memviewslice result = { 0, 0, { 0 }, { 0 }, { 0 } };
+    __Pyx_BufFmt_StackElem stack[1];
+    int axes_specs[] = { (__Pyx_MEMVIEW_DIRECT | __Pyx_MEMVIEW_STRIDED), (__Pyx_MEMVIEW_DIRECT | __Pyx_MEMVIEW_STRIDED), (__Pyx_MEMVIEW_DIRECT | __Pyx_MEMVIEW_STRIDED) };
+    int retcode;
+    if (obj == Py_None) {
+        result.memview = (struct __pyx_memoryview_obj *) Py_None;
+        return result;
+    }
+    retcode = __Pyx_ValidateAndInit_memviewslice(axes_specs, 0,
+                                                 PyBUF_RECORDS_RO | writable_flag, 3,
+                                                 &__Pyx_TypeInfo_short, stack,
+                                                 &result, obj);
+    if (unlikely(retcode == -1))
+        goto __pyx_fail;
+    return result;
+__pyx_fail:
+    result.memview = NULL;
+    result.data = NULL;
+    return result;
+}
+
+/* ObjectToMemviewSlice */
+  static CYTHON_INLINE __Pyx_memviewslice __Pyx_PyObject_to_MemoryviewSlice_dsdsds_int(PyObject *obj, int writable_flag) {
+    __Pyx_memviewslice result = { 0, 0, { 0 }, { 0 }, { 0 } };
+    __Pyx_BufFmt_StackElem stack[1];
+    int axes_specs[] = { (__Pyx_MEMVIEW_DIRECT | __Pyx_MEMVIEW_STRIDED), (__Pyx_MEMVIEW_DIRECT | __Pyx_MEMVIEW_STRIDED), (__Pyx_MEMVIEW_DIRECT | __Pyx_MEMVIEW_STRIDED) };
+    int retcode;
+    if (obj == Py_None) {
+        result.memview = (struct __pyx_memoryview_obj *) Py_None;
+        return result;
+    }
+    retcode = __Pyx_ValidateAndInit_memviewslice(axes_specs, 0,
+                                                 PyBUF_RECORDS_RO | writable_flag, 3,
+                                                 &__Pyx_TypeInfo_int, stack,
+                                                 &result, obj);
+    if (unlikely(retcode == -1))
+        goto __pyx_fail;
+    return result;
+__pyx_fail:
+    result.memview = NULL;
+    result.data = NULL;
+    return result;
+}
+
+/* ObjectToMemviewSlice */
+  static CYTHON_INLINE __Pyx_memviewslice __Pyx_PyObject_to_MemoryviewSlice_dsdsds_long(PyObject *obj, int writable_flag) {
+    __Pyx_memviewslice result = { 0, 0, { 0 }, { 0 }, { 0 } };
+    __Pyx_BufFmt_StackElem stack[1];
+    int axes_specs[] = { (__Pyx_MEMVIEW_DIRECT | __Pyx_MEMVIEW_STRIDED), (__Pyx_MEMVIEW_DIRECT | __Pyx_MEMVIEW_STRIDED), (__Pyx_MEMVIEW_DIRECT | __Pyx_MEMVIEW_STRIDED) };
+    int retcode;
+    if (obj == Py_None) {
+        result.memview = (struct __pyx_memoryview_obj *) Py_None;
+        return result;
+    }
+    retcode = __Pyx_ValidateAndInit_memviewslice(axes_specs, 0,
+                                                 PyBUF_RECORDS_RO | writable_flag, 3,
+                                                 &__Pyx_TypeInfo_long, stack,
+                                                 &result, obj);
+    if (unlikely(retcode == -1))
+        goto __pyx_fail;
+    return result;
+__pyx_fail:
+    result.memview = NULL;
+    result.data = NULL;
+    return result;
+}
+
+/* ObjectToMemviewSlice */
+  static CYTHON_INLINE __Pyx_memviewslice __Pyx_PyObject_to_MemoryviewSlice_dsdsds_PY_LONG_LONG(PyObject *obj, int writable_flag) {
+    __Pyx_memviewslice result = { 0, 0, { 0 }, { 0 }, { 0 } };
+    __Pyx_BufFmt_StackElem stack[1];
+    int axes_specs[] = { (__Pyx_MEMVIEW_DIRECT | __Pyx_MEMVIEW_STRIDED), (__Pyx_MEMVIEW_DIRECT | __Pyx_MEMVIEW_STRIDED), (__Pyx_MEMVIEW_DIRECT | __Pyx_MEMVIEW_STRIDED) };
+    int retcode;
+    if (obj == Py_None) {
+        result.memview = (struct __pyx_memoryview_obj *) Py_None;
+        return result;
+    }
+    retcode = __Pyx_ValidateAndInit_memviewslice(axes_specs, 0,
+                                                 PyBUF_RECORDS_RO | writable_flag, 3,
+                                                 &__Pyx_TypeInfo_PY_LONG_LONG, stack,
+                                                 &result, obj);
+    if (unlikely(retcode == -1))
+        goto __pyx_fail;
+    return result;
+__pyx_fail:
+    result.memview = NULL;
+    result.data = NULL;
+    return result;
+}
+
+/* ObjectToMemviewSlice */
+  static CYTHON_INLINE __Pyx_memviewslice __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_short(PyObject *obj, int writable_flag) {
+    __Pyx_memviewslice result = { 0, 0, { 0 }, { 0 }, { 0 } };
+    __Pyx_BufFmt_StackElem stack[1];
+    int axes_specs[] = { (__Pyx_MEMVIEW_DIRECT | __Pyx_MEMVIEW_STRIDED), (__Pyx_MEMVIEW_DIRECT | __Pyx_MEMVIEW_STRIDED), (__Pyx_MEMVIEW_DIRECT | __Pyx_MEMVIEW_STRIDED) };
+    int retcode;
+    if (obj == Py_None) {
+        result.memview = (struct __pyx_memoryview_obj *) Py_None;
+        return result;
+    }
+    retcode = __Pyx_ValidateAndInit_memviewslice(axes_specs, 0,
+                                                 PyBUF_RECORDS_RO | writable_flag, 3,
+                                                 &__Pyx_TypeInfo_unsigned_short, stack,
+                                                 &result, obj);
+    if (unlikely(retcode == -1))
+        goto __pyx_fail;
+    return result;
+__pyx_fail:
+    result.memview = NULL;
+    result.data = NULL;
+    return result;
+}
+
+/* ObjectToMemviewSlice */
+  static CYTHON_INLINE __Pyx_memviewslice __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_int(PyObject *obj, int writable_flag) {
+    __Pyx_memviewslice result = { 0, 0, { 0 }, { 0 }, { 0 } };
+    __Pyx_BufFmt_StackElem stack[1];
+    int axes_specs[] = { (__Pyx_MEMVIEW_DIRECT | __Pyx_MEMVIEW_STRIDED), (__Pyx_MEMVIEW_DIRECT | __Pyx_MEMVIEW_STRIDED), (__Pyx_MEMVIEW_DIRECT | __Pyx_MEMVIEW_STRIDED) };
+    int retcode;
+    if (obj == Py_None) {
+        result.memview = (struct __pyx_memoryview_obj *) Py_None;
+        return result;
+    }
+    retcode = __Pyx_ValidateAndInit_memviewslice(axes_specs, 0,
+                                                 PyBUF_RECORDS_RO | writable_flag, 3,
+                                                 &__Pyx_TypeInfo_unsigned_int, stack,
+                                                 &result, obj);
+    if (unlikely(retcode == -1))
+        goto __pyx_fail;
+    return result;
+__pyx_fail:
+    result.memview = NULL;
+    result.data = NULL;
+    return result;
+}
+
+/* ObjectToMemviewSlice */
+  static CYTHON_INLINE __Pyx_memviewslice __Pyx_PyObject_to_MemoryviewSlice_dsdsds_unsigned_long(PyObject *obj, int writable_flag) {
+    __Pyx_memviewslice result = { 0, 0, { 0 }, { 0 }, { 0 } };
+    __Pyx_BufFmt_StackElem stack[1];
+    int axes_specs[] = { (__Pyx_MEMVIEW_DIRECT | __Pyx_MEMVIEW_STRIDED), (__Pyx_MEMVIEW_DIRECT | __Pyx_MEMVIEW_STRIDED), (__Pyx_MEMVIEW_DIRECT | __Pyx_MEMVIEW_STRIDED) };
+    int retcode;
+    if (obj == Py_None) {
+        result.memview = (struct __pyx_memoryview_obj *) Py_None;
+        return result;
+    }
+    retcode = __Pyx_ValidateAndInit_memviewslice(axes_specs, 0,
+                                                 PyBUF_RECORDS_RO | writable_flag, 3,
+                                                 &__Pyx_TypeInfo_unsigned_long, stack,
+                                                 &result, obj);
+    if (unlikely(retcode == -1))
+        goto __pyx_fail;
+    return result;
+__pyx_fail:
+    result.memview = NULL;
+    result.data = NULL;
+    return result;
+}
+
+/* CIntFromPyVerify */
+  #define __PYX_VERIFY_RETURN_INT(target_type, func_type, func_value)\
+    __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, 0)
+#define __PYX_VERIFY_RETURN_INT_EXC(target_type, func_type, func_value)\
+    __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, 1)
+#define __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, exc)\
+    {\
+        func_type value = func_value;\
+        if (sizeof(target_type) < sizeof(func_type)) {\
+            if (unlikely(value != (func_type) (target_type) value)) {\
+                func_type zero = 0;\
+                if (exc && unlikely(value == (func_type)-1 && PyErr_Occurred()))\
+                    return (target_type) -1;\
+                if (is_unsigned && unlikely(value < zero))\
+                    goto raise_neg_overflow;\
+                else\
+                    goto raise_overflow;\
+            }\
+        }\
+        return (target_type) value;\
+    }
+
+/* CIntToPy */
+  static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value) {
+    const long neg_one = (long) ((long) 0 - (long) 1), const_zero = (long) 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (is_unsigned) {
+        if (sizeof(long) < sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(long) <= sizeof(unsigned long)) {
+            return PyLong_FromUnsignedLong((unsigned long) value);
+#ifdef HAVE_LONG_LONG
+        } else if (sizeof(long) <= sizeof(unsigned PY_LONG_LONG)) {
+            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+#endif
+        }
+    } else {
+        if (sizeof(long) <= sizeof(long)) {
+            return PyInt_FromLong((long) value);
+#ifdef HAVE_LONG_LONG
+        } else if (sizeof(long) <= sizeof(PY_LONG_LONG)) {
+            return PyLong_FromLongLong((PY_LONG_LONG) value);
+#endif
+        }
+    }
+    {
+        int one = 1; int little = (int)*(unsigned char *)&one;
+        unsigned char *bytes = (unsigned char *)&value;
+        return _PyLong_FromByteArray(bytes, sizeof(long),
+                                     little, !is_unsigned);
+    }
+}
+
+/* CIntToPy */
+  static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value) {
+    const int neg_one = (int) ((int) 0 - (int) 1), const_zero = (int) 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (is_unsigned) {
+        if (sizeof(int) < sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(int) <= sizeof(unsigned long)) {
+            return PyLong_FromUnsignedLong((unsigned long) value);
+#ifdef HAVE_LONG_LONG
+        } else if (sizeof(int) <= sizeof(unsigned PY_LONG_LONG)) {
+            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+#endif
+        }
+    } else {
+        if (sizeof(int) <= sizeof(long)) {
+            return PyInt_FromLong((long) value);
+#ifdef HAVE_LONG_LONG
+        } else if (sizeof(int) <= sizeof(PY_LONG_LONG)) {
+            return PyLong_FromLongLong((PY_LONG_LONG) value);
+#endif
+        }
+    }
+    {
+        int one = 1; int little = (int)*(unsigned char *)&one;
+        unsigned char *bytes = (unsigned char *)&value;
+        return _PyLong_FromByteArray(bytes, sizeof(int),
+                                     little, !is_unsigned);
+    }
+}
+
+/* MemviewSliceCopyTemplate */
+  static __Pyx_memviewslice
+__pyx_memoryview_copy_new_contig(const __Pyx_memviewslice *from_mvs,
+                                 const char *mode, int ndim,
+                                 size_t sizeof_dtype, int contig_flag,
+                                 int dtype_is_object)
+{
+    __Pyx_RefNannyDeclarations
+    int i;
+    __Pyx_memviewslice new_mvs = { 0, 0, { 0 }, { 0 }, { 0 } };
+    struct __pyx_memoryview_obj *from_memview = from_mvs->memview;
+    Py_buffer *buf = &from_memview->view;
+    PyObject *shape_tuple = NULL;
+    PyObject *temp_int = NULL;
+    struct __pyx_array_obj *array_obj = NULL;
+    struct __pyx_memoryview_obj *memview_obj = NULL;
+    __Pyx_RefNannySetupContext("__pyx_memoryview_copy_new_contig", 0);
+    for (i = 0; i < ndim; i++) {
+        if (from_mvs->suboffsets[i] >= 0) {
+            PyErr_Format(PyExc_ValueError, "Cannot copy memoryview slice with "
+                                           "indirect dimensions (axis %d)", i);
+            goto fail;
+        }
+    }
+    shape_tuple = PyTuple_New(ndim);
+    if (unlikely(!shape_tuple)) {
+        goto fail;
+    }
+    __Pyx_GOTREF(shape_tuple);
+    for(i = 0; i < ndim; i++) {
+        temp_int = PyInt_FromSsize_t(from_mvs->shape[i]);
+        if(unlikely(!temp_int)) {
+            goto fail;
+        } else {
+            PyTuple_SET_ITEM(shape_tuple, i, temp_int);
+            temp_int = NULL;
+        }
+    }
+    array_obj = __pyx_array_new(shape_tuple, sizeof_dtype, buf->format, (char *) mode, NULL);
+    if (unlikely(!array_obj)) {
+        goto fail;
+    }
+    __Pyx_GOTREF(array_obj);
+    memview_obj = (struct __pyx_memoryview_obj *) __pyx_memoryview_new(
+                                    (PyObject *) array_obj, contig_flag,
+                                    dtype_is_object,
+                                    from_mvs->memview->typeinfo);
+    if (unlikely(!memview_obj))
+        goto fail;
+    if (unlikely(__Pyx_init_memviewslice(memview_obj, ndim, &new_mvs, 1) < 0))
+        goto fail;
+    if (unlikely(__pyx_memoryview_copy_contents(*from_mvs, new_mvs, ndim, ndim,
+                                                dtype_is_object) < 0))
+        goto fail;
+    goto no_fail;
+fail:
+    __Pyx_XDECREF(new_mvs.memview);
+    new_mvs.memview = NULL;
+    new_mvs.data = NULL;
+no_fail:
+    __Pyx_XDECREF(shape_tuple);
+    __Pyx_XDECREF(temp_int);
+    __Pyx_XDECREF(array_obj);
+    __Pyx_RefNannyFinishContext();
+    return new_mvs;
+}
+
+/* MemviewSliceInit */
+  static int
+__Pyx_init_memviewslice(struct __pyx_memoryview_obj *memview,
+                        int ndim,
+                        __Pyx_memviewslice *memviewslice,
+                        int memview_is_new_reference)
+{
+    __Pyx_RefNannyDeclarations
+    int i, retval=-1;
+    Py_buffer *buf = &memview->view;
+    __Pyx_RefNannySetupContext("init_memviewslice", 0);
+    if (memviewslice->memview || memviewslice->data) {
+        PyErr_SetString(PyExc_ValueError,
+            "memviewslice is already initialized!");
+        goto fail;
+    }
+    if (buf->strides) {
+        for (i = 0; i < ndim; i++) {
+            memviewslice->strides[i] = buf->strides[i];
+        }
+    } else {
+        Py_ssize_t stride = buf->itemsize;
+        for (i = ndim - 1; i >= 0; i--) {
+            memviewslice->strides[i] = stride;
+            stride *= buf->shape[i];
+        }
+    }
+    for (i = 0; i < ndim; i++) {
+        memviewslice->shape[i]   = buf->shape[i];
+        if (buf->suboffsets) {
+            memviewslice->suboffsets[i] = buf->suboffsets[i];
+        } else {
+            memviewslice->suboffsets[i] = -1;
+        }
+    }
+    memviewslice->memview = memview;
+    memviewslice->data = (char *)buf->buf;
+    if (__pyx_add_acquisition_count(memview) == 0 && !memview_is_new_reference) {
+        Py_INCREF(memview);
+    }
+    retval = 0;
+    goto no_fail;
+fail:
+    memviewslice->memview = 0;
+    memviewslice->data = 0;
+    retval = -1;
+no_fail:
+    __Pyx_RefNannyFinishContext();
+    return retval;
+}
+#ifndef Py_NO_RETURN
+#define Py_NO_RETURN
+#endif
+static void __pyx_fatalerror(const char *fmt, ...) Py_NO_RETURN {
+    va_list vargs;
+    char msg[200];
+#ifdef HAVE_STDARG_PROTOTYPES
+    va_start(vargs, fmt);
+#else
+    va_start(vargs);
+#endif
+    vsnprintf(msg, 200, fmt, vargs);
+    va_end(vargs);
+    Py_FatalError(msg);
+}
+static CYTHON_INLINE int
+__pyx_add_acquisition_count_locked(__pyx_atomic_int *acquisition_count,
+                                   PyThread_type_lock lock)
+{
+    int result;
+    PyThread_acquire_lock(lock, 1);
+    result = (*acquisition_count)++;
+    PyThread_release_lock(lock);
+    return result;
+}
+static CYTHON_INLINE int
+__pyx_sub_acquisition_count_locked(__pyx_atomic_int *acquisition_count,
+                                   PyThread_type_lock lock)
+{
+    int result;
+    PyThread_acquire_lock(lock, 1);
+    result = (*acquisition_count)--;
+    PyThread_release_lock(lock);
+    return result;
+}
+static CYTHON_INLINE void
+__Pyx_INC_MEMVIEW(__Pyx_memviewslice *memslice, int have_gil, int lineno)
+{
+    int first_time;
+    struct __pyx_memoryview_obj *memview = memslice->memview;
+    if (!memview || (PyObject *) memview == Py_None)
+        return;
+    if (__pyx_get_slice_count(memview) < 0)
+        __pyx_fatalerror("Acquisition count is %d (line %d)",
+                         __pyx_get_slice_count(memview), lineno);
+    first_time = __pyx_add_acquisition_count(memview) == 0;
+    if (first_time) {
+        if (have_gil) {
+            Py_INCREF((PyObject *) memview);
+        } else {
+            PyGILState_STATE _gilstate = PyGILState_Ensure();
+            Py_INCREF((PyObject *) memview);
+            PyGILState_Release(_gilstate);
+        }
+    }
+}
+static CYTHON_INLINE void __Pyx_XDEC_MEMVIEW(__Pyx_memviewslice *memslice,
+                                             int have_gil, int lineno) {
+    int last_time;
+    struct __pyx_memoryview_obj *memview = memslice->memview;
+    if (!memview ) {
+        return;
+    } else if ((PyObject *) memview == Py_None) {
+        memslice->memview = NULL;
+        return;
+    }
+    if (__pyx_get_slice_count(memview) <= 0)
+        __pyx_fatalerror("Acquisition count is %d (line %d)",
+                         __pyx_get_slice_count(memview), lineno);
+    last_time = __pyx_sub_acquisition_count(memview) == 1;
+    memslice->data = NULL;
+    if (last_time) {
+        if (have_gil) {
+            Py_CLEAR(memslice->memview);
+        } else {
+            PyGILState_STATE _gilstate = PyGILState_Ensure();
+            Py_CLEAR(memslice->memview);
+            PyGILState_Release(_gilstate);
+        }
+    } else {
+        memslice->memview = NULL;
+    }
+}
+
+/* CIntFromPy */
+  static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) {
+    const int neg_one = (int) ((int) 0 - (int) 1), const_zero = (int) 0;
+    const int is_unsigned = neg_one > const_zero;
+#if PY_MAJOR_VERSION < 3
+    if (likely(PyInt_Check(x))) {
+        if (sizeof(int) < sizeof(long)) {
+            __PYX_VERIFY_RETURN_INT(int, long, PyInt_AS_LONG(x))
+        } else {
+            long val = PyInt_AS_LONG(x);
+            if (is_unsigned && unlikely(val < 0)) {
+                goto raise_neg_overflow;
+            }
+            return (int) val;
+        }
+    } else
+#endif
+    if (likely(PyLong_Check(x))) {
+        if (is_unsigned) {
+#if CYTHON_USE_PYLONG_INTERNALS
+            const digit* digits = ((PyLongObject*)x)->ob_digit;
+            switch (Py_SIZE(x)) {
+                case  0: return (int) 0;
+                case  1: __PYX_VERIFY_RETURN_INT(int, digit, digits[0])
+                case 2:
+                    if (8 * sizeof(int) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(int) >= 2 * PyLong_SHIFT) {
+                            return (int) (((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0]));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(int) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(int) >= 3 * PyLong_SHIFT) {
+                            return (int) (((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(int) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(int) >= 4 * PyLong_SHIFT) {
+                            return (int) (((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]));
+                        }
+                    }
+                    break;
+            }
+#endif
+#if CYTHON_COMPILING_IN_CPYTHON
+            if (unlikely(Py_SIZE(x) < 0)) {
+                goto raise_neg_overflow;
+            }
+#else
+            {
+                int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
+                if (unlikely(result < 0))
+                    return (int) -1;
+                if (unlikely(result == 1))
+                    goto raise_neg_overflow;
+            }
+#endif
+            if (sizeof(int) <= sizeof(unsigned long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(int, unsigned long, PyLong_AsUnsignedLong(x))
+#ifdef HAVE_LONG_LONG
+            } else if (sizeof(int) <= sizeof(unsigned PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(int, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
+#endif
+            }
+        } else {
+#if CYTHON_USE_PYLONG_INTERNALS
+            const digit* digits = ((PyLongObject*)x)->ob_digit;
+            switch (Py_SIZE(x)) {
+                case  0: return (int) 0;
+                case -1: __PYX_VERIFY_RETURN_INT(int, sdigit, (sdigit) (-(sdigit)digits[0]))
+                case  1: __PYX_VERIFY_RETURN_INT(int,  digit, +digits[0])
+                case -2:
+                    if (8 * sizeof(int) - 1 > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(int) - 1 > 2 * PyLong_SHIFT) {
+                            return (int) (((int)-1)*(((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));
+                        }
+                    }
+                    break;
+                case 2:
+                    if (8 * sizeof(int) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(int) - 1 > 2 * PyLong_SHIFT) {
+                            return (int) ((((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));
+                        }
+                    }
+                    break;
+                case -3:
+                    if (8 * sizeof(int) - 1 > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(int) - 1 > 3 * PyLong_SHIFT) {
+                            return (int) (((int)-1)*(((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(int) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(int) - 1 > 3 * PyLong_SHIFT) {
+                            return (int) ((((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));
+                        }
+                    }
+                    break;
+                case -4:
+                    if (8 * sizeof(int) - 1 > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(int) - 1 > 4 * PyLong_SHIFT) {
+                            return (int) (((int)-1)*(((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(int) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(int) - 1 > 4 * PyLong_SHIFT) {
+                            return (int) ((((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));
+                        }
+                    }
+                    break;
+            }
+#endif
+            if (sizeof(int) <= sizeof(long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(int, long, PyLong_AsLong(x))
+#ifdef HAVE_LONG_LONG
+            } else if (sizeof(int) <= sizeof(PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(int, PY_LONG_LONG, PyLong_AsLongLong(x))
+#endif
+            }
+        }
+        {
+#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray)
+            PyErr_SetString(PyExc_RuntimeError,
+                            "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers");
+#else
+            int val;
+            PyObject *v = __Pyx_PyNumber_IntOrLong(x);
+ #if PY_MAJOR_VERSION < 3
+            if (likely(v) && !PyLong_Check(v)) {
+                PyObject *tmp = v;
+                v = PyNumber_Long(tmp);
+                Py_DECREF(tmp);
+            }
+ #endif
+            if (likely(v)) {
+                int one = 1; int is_little = (int)*(unsigned char *)&one;
+                unsigned char *bytes = (unsigned char *)&val;
+                int ret = _PyLong_AsByteArray((PyLongObject *)v,
+                                              bytes, sizeof(val),
+                                              is_little, !is_unsigned);
+                Py_DECREF(v);
+                if (likely(!ret))
+                    return val;
+            }
+#endif
+            return (int) -1;
+        }
+    } else {
+        int val;
+        PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
+        if (!tmp) return (int) -1;
+        val = __Pyx_PyInt_As_int(tmp);
+        Py_DECREF(tmp);
+        return val;
+    }
+raise_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "value too large to convert to int");
+    return (int) -1;
+raise_neg_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "can't convert negative value to int");
+    return (int) -1;
+}
+
+/* CIntFromPy */
+  static CYTHON_INLINE short __Pyx_PyInt_As_short(PyObject *x) {
+    const short neg_one = (short) ((short) 0 - (short) 1), const_zero = (short) 0;
+    const int is_unsigned = neg_one > const_zero;
+#if PY_MAJOR_VERSION < 3
+    if (likely(PyInt_Check(x))) {
+        if (sizeof(short) < sizeof(long)) {
+            __PYX_VERIFY_RETURN_INT(short, long, PyInt_AS_LONG(x))
+        } else {
+            long val = PyInt_AS_LONG(x);
+            if (is_unsigned && unlikely(val < 0)) {
+                goto raise_neg_overflow;
+            }
+            return (short) val;
+        }
+    } else
+#endif
+    if (likely(PyLong_Check(x))) {
+        if (is_unsigned) {
+#if CYTHON_USE_PYLONG_INTERNALS
+            const digit* digits = ((PyLongObject*)x)->ob_digit;
+            switch (Py_SIZE(x)) {
+                case  0: return (short) 0;
+                case  1: __PYX_VERIFY_RETURN_INT(short, digit, digits[0])
+                case 2:
+                    if (8 * sizeof(short) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(short, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(short) >= 2 * PyLong_SHIFT) {
+                            return (short) (((((short)digits[1]) << PyLong_SHIFT) | (short)digits[0]));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(short) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(short, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(short) >= 3 * PyLong_SHIFT) {
+                            return (short) (((((((short)digits[2]) << PyLong_SHIFT) | (short)digits[1]) << PyLong_SHIFT) | (short)digits[0]));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(short) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(short, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(short) >= 4 * PyLong_SHIFT) {
+                            return (short) (((((((((short)digits[3]) << PyLong_SHIFT) | (short)digits[2]) << PyLong_SHIFT) | (short)digits[1]) << PyLong_SHIFT) | (short)digits[0]));
+                        }
+                    }
+                    break;
+            }
+#endif
+#if CYTHON_COMPILING_IN_CPYTHON
+            if (unlikely(Py_SIZE(x) < 0)) {
+                goto raise_neg_overflow;
+            }
+#else
+            {
+                int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
+                if (unlikely(result < 0))
+                    return (short) -1;
+                if (unlikely(result == 1))
+                    goto raise_neg_overflow;
+            }
+#endif
+            if (sizeof(short) <= sizeof(unsigned long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(short, unsigned long, PyLong_AsUnsignedLong(x))
+#ifdef HAVE_LONG_LONG
+            } else if (sizeof(short) <= sizeof(unsigned PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(short, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
+#endif
+            }
+        } else {
+#if CYTHON_USE_PYLONG_INTERNALS
+            const digit* digits = ((PyLongObject*)x)->ob_digit;
+            switch (Py_SIZE(x)) {
+                case  0: return (short) 0;
+                case -1: __PYX_VERIFY_RETURN_INT(short, sdigit, (sdigit) (-(sdigit)digits[0]))
+                case  1: __PYX_VERIFY_RETURN_INT(short,  digit, +digits[0])
+                case -2:
+                    if (8 * sizeof(short) - 1 > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(short, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(short) - 1 > 2 * PyLong_SHIFT) {
+                            return (short) (((short)-1)*(((((short)digits[1]) << PyLong_SHIFT) | (short)digits[0])));
+                        }
+                    }
+                    break;
+                case 2:
+                    if (8 * sizeof(short) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(short, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(short) - 1 > 2 * PyLong_SHIFT) {
+                            return (short) ((((((short)digits[1]) << PyLong_SHIFT) | (short)digits[0])));
+                        }
+                    }
+                    break;
+                case -3:
+                    if (8 * sizeof(short) - 1 > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(short, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(short) - 1 > 3 * PyLong_SHIFT) {
+                            return (short) (((short)-1)*(((((((short)digits[2]) << PyLong_SHIFT) | (short)digits[1]) << PyLong_SHIFT) | (short)digits[0])));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(short) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(short, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(short) - 1 > 3 * PyLong_SHIFT) {
+                            return (short) ((((((((short)digits[2]) << PyLong_SHIFT) | (short)digits[1]) << PyLong_SHIFT) | (short)digits[0])));
+                        }
+                    }
+                    break;
+                case -4:
+                    if (8 * sizeof(short) - 1 > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(short, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(short) - 1 > 4 * PyLong_SHIFT) {
+                            return (short) (((short)-1)*(((((((((short)digits[3]) << PyLong_SHIFT) | (short)digits[2]) << PyLong_SHIFT) | (short)digits[1]) << PyLong_SHIFT) | (short)digits[0])));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(short) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(short, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(short) - 1 > 4 * PyLong_SHIFT) {
+                            return (short) ((((((((((short)digits[3]) << PyLong_SHIFT) | (short)digits[2]) << PyLong_SHIFT) | (short)digits[1]) << PyLong_SHIFT) | (short)digits[0])));
+                        }
+                    }
+                    break;
+            }
+#endif
+            if (sizeof(short) <= sizeof(long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(short, long, PyLong_AsLong(x))
+#ifdef HAVE_LONG_LONG
+            } else if (sizeof(short) <= sizeof(PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(short, PY_LONG_LONG, PyLong_AsLongLong(x))
+#endif
+            }
+        }
+        {
+#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray)
+            PyErr_SetString(PyExc_RuntimeError,
+                            "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers");
+#else
+            short val;
+            PyObject *v = __Pyx_PyNumber_IntOrLong(x);
+ #if PY_MAJOR_VERSION < 3
+            if (likely(v) && !PyLong_Check(v)) {
+                PyObject *tmp = v;
+                v = PyNumber_Long(tmp);
+                Py_DECREF(tmp);
+            }
+ #endif
+            if (likely(v)) {
+                int one = 1; int is_little = (int)*(unsigned char *)&one;
+                unsigned char *bytes = (unsigned char *)&val;
+                int ret = _PyLong_AsByteArray((PyLongObject *)v,
+                                              bytes, sizeof(val),
+                                              is_little, !is_unsigned);
+                Py_DECREF(v);
+                if (likely(!ret))
+                    return val;
+            }
+#endif
+            return (short) -1;
+        }
+    } else {
+        short val;
+        PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
+        if (!tmp) return (short) -1;
+        val = __Pyx_PyInt_As_short(tmp);
+        Py_DECREF(tmp);
+        return val;
+    }
+raise_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "value too large to convert to short");
+    return (short) -1;
+raise_neg_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "can't convert negative value to short");
+    return (short) -1;
+}
+
+/* CIntFromPy */
+  static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) {
+    const long neg_one = (long) ((long) 0 - (long) 1), const_zero = (long) 0;
+    const int is_unsigned = neg_one > const_zero;
+#if PY_MAJOR_VERSION < 3
+    if (likely(PyInt_Check(x))) {
+        if (sizeof(long) < sizeof(long)) {
+            __PYX_VERIFY_RETURN_INT(long, long, PyInt_AS_LONG(x))
+        } else {
+            long val = PyInt_AS_LONG(x);
+            if (is_unsigned && unlikely(val < 0)) {
+                goto raise_neg_overflow;
+            }
+            return (long) val;
+        }
+    } else
+#endif
+    if (likely(PyLong_Check(x))) {
+        if (is_unsigned) {
+#if CYTHON_USE_PYLONG_INTERNALS
+            const digit* digits = ((PyLongObject*)x)->ob_digit;
+            switch (Py_SIZE(x)) {
+                case  0: return (long) 0;
+                case  1: __PYX_VERIFY_RETURN_INT(long, digit, digits[0])
+                case 2:
+                    if (8 * sizeof(long) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(long) >= 2 * PyLong_SHIFT) {
+                            return (long) (((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0]));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(long) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(long) >= 3 * PyLong_SHIFT) {
+                            return (long) (((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(long) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(long) >= 4 * PyLong_SHIFT) {
+                            return (long) (((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]));
+                        }
+                    }
+                    break;
+            }
+#endif
+#if CYTHON_COMPILING_IN_CPYTHON
+            if (unlikely(Py_SIZE(x) < 0)) {
+                goto raise_neg_overflow;
+            }
+#else
+            {
+                int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
+                if (unlikely(result < 0))
+                    return (long) -1;
+                if (unlikely(result == 1))
+                    goto raise_neg_overflow;
+            }
+#endif
+            if (sizeof(long) <= sizeof(unsigned long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(long, unsigned long, PyLong_AsUnsignedLong(x))
+#ifdef HAVE_LONG_LONG
+            } else if (sizeof(long) <= sizeof(unsigned PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(long, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
+#endif
+            }
+        } else {
+#if CYTHON_USE_PYLONG_INTERNALS
+            const digit* digits = ((PyLongObject*)x)->ob_digit;
+            switch (Py_SIZE(x)) {
+                case  0: return (long) 0;
+                case -1: __PYX_VERIFY_RETURN_INT(long, sdigit, (sdigit) (-(sdigit)digits[0]))
+                case  1: __PYX_VERIFY_RETURN_INT(long,  digit, +digits[0])
+                case -2:
+                    if (8 * sizeof(long) - 1 > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) {
+                            return (long) (((long)-1)*(((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0])));
+                        }
+                    }
+                    break;
+                case 2:
+                    if (8 * sizeof(long) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) {
+                            return (long) ((((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0])));
+                        }
+                    }
+                    break;
+                case -3:
+                    if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) {
+                            return (long) (((long)-1)*(((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(long) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) {
+                            return (long) ((((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])));
+                        }
+                    }
+                    break;
+                case -4:
+                    if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) {
+                            return (long) (((long)-1)*(((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(long) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) {
+                            return (long) ((((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])));
+                        }
+                    }
+                    break;
+            }
+#endif
+            if (sizeof(long) <= sizeof(long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(long, long, PyLong_AsLong(x))
+#ifdef HAVE_LONG_LONG
+            } else if (sizeof(long) <= sizeof(PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(long, PY_LONG_LONG, PyLong_AsLongLong(x))
+#endif
+            }
+        }
+        {
+#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray)
+            PyErr_SetString(PyExc_RuntimeError,
+                            "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers");
+#else
+            long val;
+            PyObject *v = __Pyx_PyNumber_IntOrLong(x);
+ #if PY_MAJOR_VERSION < 3
+            if (likely(v) && !PyLong_Check(v)) {
+                PyObject *tmp = v;
+                v = PyNumber_Long(tmp);
+                Py_DECREF(tmp);
+            }
+ #endif
+            if (likely(v)) {
+                int one = 1; int is_little = (int)*(unsigned char *)&one;
+                unsigned char *bytes = (unsigned char *)&val;
+                int ret = _PyLong_AsByteArray((PyLongObject *)v,
+                                              bytes, sizeof(val),
+                                              is_little, !is_unsigned);
+                Py_DECREF(v);
+                if (likely(!ret))
+                    return val;
+            }
+#endif
+            return (long) -1;
+        }
+    } else {
+        long val;
+        PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
+        if (!tmp) return (long) -1;
+        val = __Pyx_PyInt_As_long(tmp);
+        Py_DECREF(tmp);
+        return val;
+    }
+raise_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "value too large to convert to long");
+    return (long) -1;
+raise_neg_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "can't convert negative value to long");
+    return (long) -1;
+}
+
+/* CIntFromPy */
+  static CYTHON_INLINE PY_LONG_LONG __Pyx_PyInt_As_PY_LONG_LONG(PyObject *x) {
+    const PY_LONG_LONG neg_one = (PY_LONG_LONG) ((PY_LONG_LONG) 0 - (PY_LONG_LONG) 1), const_zero = (PY_LONG_LONG) 0;
+    const int is_unsigned = neg_one > const_zero;
+#if PY_MAJOR_VERSION < 3
+    if (likely(PyInt_Check(x))) {
+        if (sizeof(PY_LONG_LONG) < sizeof(long)) {
+            __PYX_VERIFY_RETURN_INT(PY_LONG_LONG, long, PyInt_AS_LONG(x))
+        } else {
+            long val = PyInt_AS_LONG(x);
+            if (is_unsigned && unlikely(val < 0)) {
+                goto raise_neg_overflow;
+            }
+            return (PY_LONG_LONG) val;
+        }
+    } else
+#endif
+    if (likely(PyLong_Check(x))) {
+        if (is_unsigned) {
+#if CYTHON_USE_PYLONG_INTERNALS
+            const digit* digits = ((PyLongObject*)x)->ob_digit;
+            switch (Py_SIZE(x)) {
+                case  0: return (PY_LONG_LONG) 0;
+                case  1: __PYX_VERIFY_RETURN_INT(PY_LONG_LONG, digit, digits[0])
+                case 2:
+                    if (8 * sizeof(PY_LONG_LONG) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PY_LONG_LONG, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PY_LONG_LONG) >= 2 * PyLong_SHIFT) {
+                            return (PY_LONG_LONG) (((((PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (PY_LONG_LONG)digits[0]));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(PY_LONG_LONG) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PY_LONG_LONG, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PY_LONG_LONG) >= 3 * PyLong_SHIFT) {
+                            return (PY_LONG_LONG) (((((((PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (PY_LONG_LONG)digits[0]));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(PY_LONG_LONG) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PY_LONG_LONG, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PY_LONG_LONG) >= 4 * PyLong_SHIFT) {
+                            return (PY_LONG_LONG) (((((((((PY_LONG_LONG)digits[3]) << PyLong_SHIFT) | (PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (PY_LONG_LONG)digits[0]));
+                        }
+                    }
+                    break;
+            }
+#endif
+#if CYTHON_COMPILING_IN_CPYTHON
+            if (unlikely(Py_SIZE(x) < 0)) {
+                goto raise_neg_overflow;
+            }
+#else
+            {
+                int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
+                if (unlikely(result < 0))
+                    return (PY_LONG_LONG) -1;
+                if (unlikely(result == 1))
+                    goto raise_neg_overflow;
+            }
+#endif
+            if (sizeof(PY_LONG_LONG) <= sizeof(unsigned long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(PY_LONG_LONG, unsigned long, PyLong_AsUnsignedLong(x))
+#ifdef HAVE_LONG_LONG
+            } else if (sizeof(PY_LONG_LONG) <= sizeof(unsigned PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(PY_LONG_LONG, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
+#endif
+            }
+        } else {
+#if CYTHON_USE_PYLONG_INTERNALS
+            const digit* digits = ((PyLongObject*)x)->ob_digit;
+            switch (Py_SIZE(x)) {
+                case  0: return (PY_LONG_LONG) 0;
+                case -1: __PYX_VERIFY_RETURN_INT(PY_LONG_LONG, sdigit, (sdigit) (-(sdigit)digits[0]))
+                case  1: __PYX_VERIFY_RETURN_INT(PY_LONG_LONG,  digit, +digits[0])
+                case -2:
+                    if (8 * sizeof(PY_LONG_LONG) - 1 > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PY_LONG_LONG, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PY_LONG_LONG) - 1 > 2 * PyLong_SHIFT) {
+                            return (PY_LONG_LONG) (((PY_LONG_LONG)-1)*(((((PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (PY_LONG_LONG)digits[0])));
+                        }
+                    }
+                    break;
+                case 2:
+                    if (8 * sizeof(PY_LONG_LONG) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PY_LONG_LONG, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PY_LONG_LONG) - 1 > 2 * PyLong_SHIFT) {
+                            return (PY_LONG_LONG) ((((((PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (PY_LONG_LONG)digits[0])));
+                        }
+                    }
+                    break;
+                case -3:
+                    if (8 * sizeof(PY_LONG_LONG) - 1 > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PY_LONG_LONG, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PY_LONG_LONG) - 1 > 3 * PyLong_SHIFT) {
+                            return (PY_LONG_LONG) (((PY_LONG_LONG)-1)*(((((((PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (PY_LONG_LONG)digits[0])));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(PY_LONG_LONG) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PY_LONG_LONG, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PY_LONG_LONG) - 1 > 3 * PyLong_SHIFT) {
+                            return (PY_LONG_LONG) ((((((((PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (PY_LONG_LONG)digits[0])));
+                        }
+                    }
+                    break;
+                case -4:
+                    if (8 * sizeof(PY_LONG_LONG) - 1 > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PY_LONG_LONG, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PY_LONG_LONG) - 1 > 4 * PyLong_SHIFT) {
+                            return (PY_LONG_LONG) (((PY_LONG_LONG)-1)*(((((((((PY_LONG_LONG)digits[3]) << PyLong_SHIFT) | (PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (PY_LONG_LONG)digits[0])));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(PY_LONG_LONG) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PY_LONG_LONG, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PY_LONG_LONG) - 1 > 4 * PyLong_SHIFT) {
+                            return (PY_LONG_LONG) ((((((((((PY_LONG_LONG)digits[3]) << PyLong_SHIFT) | (PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (PY_LONG_LONG)digits[0])));
+                        }
+                    }
+                    break;
+            }
+#endif
+            if (sizeof(PY_LONG_LONG) <= sizeof(long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(PY_LONG_LONG, long, PyLong_AsLong(x))
+#ifdef HAVE_LONG_LONG
+            } else if (sizeof(PY_LONG_LONG) <= sizeof(PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(PY_LONG_LONG, PY_LONG_LONG, PyLong_AsLongLong(x))
+#endif
+            }
+        }
+        {
+#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray)
+            PyErr_SetString(PyExc_RuntimeError,
+                            "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers");
+#else
+            PY_LONG_LONG val;
+            PyObject *v = __Pyx_PyNumber_IntOrLong(x);
+ #if PY_MAJOR_VERSION < 3
+            if (likely(v) && !PyLong_Check(v)) {
+                PyObject *tmp = v;
+                v = PyNumber_Long(tmp);
+                Py_DECREF(tmp);
+            }
+ #endif
+            if (likely(v)) {
+                int one = 1; int is_little = (int)*(unsigned char *)&one;
+                unsigned char *bytes = (unsigned char *)&val;
+                int ret = _PyLong_AsByteArray((PyLongObject *)v,
+                                              bytes, sizeof(val),
+                                              is_little, !is_unsigned);
+                Py_DECREF(v);
+                if (likely(!ret))
+                    return val;
+            }
+#endif
+            return (PY_LONG_LONG) -1;
+        }
+    } else {
+        PY_LONG_LONG val;
+        PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
+        if (!tmp) return (PY_LONG_LONG) -1;
+        val = __Pyx_PyInt_As_PY_LONG_LONG(tmp);
+        Py_DECREF(tmp);
+        return val;
+    }
+raise_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "value too large to convert to PY_LONG_LONG");
+    return (PY_LONG_LONG) -1;
+raise_neg_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "can't convert negative value to PY_LONG_LONG");
+    return (PY_LONG_LONG) -1;
+}
+
+/* CIntFromPy */
+  static CYTHON_INLINE unsigned short __Pyx_PyInt_As_unsigned_short(PyObject *x) {
+    const unsigned short neg_one = (unsigned short) ((unsigned short) 0 - (unsigned short) 1), const_zero = (unsigned short) 0;
+    const int is_unsigned = neg_one > const_zero;
+#if PY_MAJOR_VERSION < 3
+    if (likely(PyInt_Check(x))) {
+        if (sizeof(unsigned short) < sizeof(long)) {
+            __PYX_VERIFY_RETURN_INT(unsigned short, long, PyInt_AS_LONG(x))
+        } else {
+            long val = PyInt_AS_LONG(x);
+            if (is_unsigned && unlikely(val < 0)) {
+                goto raise_neg_overflow;
+            }
+            return (unsigned short) val;
+        }
+    } else
+#endif
+    if (likely(PyLong_Check(x))) {
+        if (is_unsigned) {
+#if CYTHON_USE_PYLONG_INTERNALS
+            const digit* digits = ((PyLongObject*)x)->ob_digit;
+            switch (Py_SIZE(x)) {
+                case  0: return (unsigned short) 0;
+                case  1: __PYX_VERIFY_RETURN_INT(unsigned short, digit, digits[0])
+                case 2:
+                    if (8 * sizeof(unsigned short) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(unsigned short, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(unsigned short) >= 2 * PyLong_SHIFT) {
+                            return (unsigned short) (((((unsigned short)digits[1]) << PyLong_SHIFT) | (unsigned short)digits[0]));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(unsigned short) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(unsigned short, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(unsigned short) >= 3 * PyLong_SHIFT) {
+                            return (unsigned short) (((((((unsigned short)digits[2]) << PyLong_SHIFT) | (unsigned short)digits[1]) << PyLong_SHIFT) | (unsigned short)digits[0]));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(unsigned short) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(unsigned short, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(unsigned short) >= 4 * PyLong_SHIFT) {
+                            return (unsigned short) (((((((((unsigned short)digits[3]) << PyLong_SHIFT) | (unsigned short)digits[2]) << PyLong_SHIFT) | (unsigned short)digits[1]) << PyLong_SHIFT) | (unsigned short)digits[0]));
+                        }
+                    }
+                    break;
+            }
+#endif
+#if CYTHON_COMPILING_IN_CPYTHON
+            if (unlikely(Py_SIZE(x) < 0)) {
+                goto raise_neg_overflow;
+            }
+#else
+            {
+                int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
+                if (unlikely(result < 0))
+                    return (unsigned short) -1;
+                if (unlikely(result == 1))
+                    goto raise_neg_overflow;
+            }
+#endif
+            if (sizeof(unsigned short) <= sizeof(unsigned long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(unsigned short, unsigned long, PyLong_AsUnsignedLong(x))
+#ifdef HAVE_LONG_LONG
+            } else if (sizeof(unsigned short) <= sizeof(unsigned PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(unsigned short, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
+#endif
+            }
+        } else {
+#if CYTHON_USE_PYLONG_INTERNALS
+            const digit* digits = ((PyLongObject*)x)->ob_digit;
+            switch (Py_SIZE(x)) {
+                case  0: return (unsigned short) 0;
+                case -1: __PYX_VERIFY_RETURN_INT(unsigned short, sdigit, (sdigit) (-(sdigit)digits[0]))
+                case  1: __PYX_VERIFY_RETURN_INT(unsigned short,  digit, +digits[0])
+                case -2:
+                    if (8 * sizeof(unsigned short) - 1 > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(unsigned short, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(unsigned short) - 1 > 2 * PyLong_SHIFT) {
+                            return (unsigned short) (((unsigned short)-1)*(((((unsigned short)digits[1]) << PyLong_SHIFT) | (unsigned short)digits[0])));
+                        }
+                    }
+                    break;
+                case 2:
+                    if (8 * sizeof(unsigned short) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(unsigned short, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(unsigned short) - 1 > 2 * PyLong_SHIFT) {
+                            return (unsigned short) ((((((unsigned short)digits[1]) << PyLong_SHIFT) | (unsigned short)digits[0])));
+                        }
+                    }
+                    break;
+                case -3:
+                    if (8 * sizeof(unsigned short) - 1 > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(unsigned short, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(unsigned short) - 1 > 3 * PyLong_SHIFT) {
+                            return (unsigned short) (((unsigned short)-1)*(((((((unsigned short)digits[2]) << PyLong_SHIFT) | (unsigned short)digits[1]) << PyLong_SHIFT) | (unsigned short)digits[0])));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(unsigned short) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(unsigned short, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(unsigned short) - 1 > 3 * PyLong_SHIFT) {
+                            return (unsigned short) ((((((((unsigned short)digits[2]) << PyLong_SHIFT) | (unsigned short)digits[1]) << PyLong_SHIFT) | (unsigned short)digits[0])));
+                        }
+                    }
+                    break;
+                case -4:
+                    if (8 * sizeof(unsigned short) - 1 > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(unsigned short, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(unsigned short) - 1 > 4 * PyLong_SHIFT) {
+                            return (unsigned short) (((unsigned short)-1)*(((((((((unsigned short)digits[3]) << PyLong_SHIFT) | (unsigned short)digits[2]) << PyLong_SHIFT) | (unsigned short)digits[1]) << PyLong_SHIFT) | (unsigned short)digits[0])));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(unsigned short) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(unsigned short, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(unsigned short) - 1 > 4 * PyLong_SHIFT) {
+                            return (unsigned short) ((((((((((unsigned short)digits[3]) << PyLong_SHIFT) | (unsigned short)digits[2]) << PyLong_SHIFT) | (unsigned short)digits[1]) << PyLong_SHIFT) | (unsigned short)digits[0])));
+                        }
+                    }
+                    break;
+            }
+#endif
+            if (sizeof(unsigned short) <= sizeof(long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(unsigned short, long, PyLong_AsLong(x))
+#ifdef HAVE_LONG_LONG
+            } else if (sizeof(unsigned short) <= sizeof(PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(unsigned short, PY_LONG_LONG, PyLong_AsLongLong(x))
+#endif
+            }
+        }
+        {
+#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray)
+            PyErr_SetString(PyExc_RuntimeError,
+                            "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers");
+#else
+            unsigned short val;
+            PyObject *v = __Pyx_PyNumber_IntOrLong(x);
+ #if PY_MAJOR_VERSION < 3
+            if (likely(v) && !PyLong_Check(v)) {
+                PyObject *tmp = v;
+                v = PyNumber_Long(tmp);
+                Py_DECREF(tmp);
+            }
+ #endif
+            if (likely(v)) {
+                int one = 1; int is_little = (int)*(unsigned char *)&one;
+                unsigned char *bytes = (unsigned char *)&val;
+                int ret = _PyLong_AsByteArray((PyLongObject *)v,
+                                              bytes, sizeof(val),
+                                              is_little, !is_unsigned);
+                Py_DECREF(v);
+                if (likely(!ret))
+                    return val;
+            }
+#endif
+            return (unsigned short) -1;
+        }
+    } else {
+        unsigned short val;
+        PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
+        if (!tmp) return (unsigned short) -1;
+        val = __Pyx_PyInt_As_unsigned_short(tmp);
+        Py_DECREF(tmp);
+        return val;
+    }
+raise_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "value too large to convert to unsigned short");
+    return (unsigned short) -1;
+raise_neg_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "can't convert negative value to unsigned short");
+    return (unsigned short) -1;
+}
+
+/* CIntFromPy */
+  static CYTHON_INLINE unsigned int __Pyx_PyInt_As_unsigned_int(PyObject *x) {
+    const unsigned int neg_one = (unsigned int) ((unsigned int) 0 - (unsigned int) 1), const_zero = (unsigned int) 0;
+    const int is_unsigned = neg_one > const_zero;
+#if PY_MAJOR_VERSION < 3
+    if (likely(PyInt_Check(x))) {
+        if (sizeof(unsigned int) < sizeof(long)) {
+            __PYX_VERIFY_RETURN_INT(unsigned int, long, PyInt_AS_LONG(x))
+        } else {
+            long val = PyInt_AS_LONG(x);
+            if (is_unsigned && unlikely(val < 0)) {
+                goto raise_neg_overflow;
+            }
+            return (unsigned int) val;
+        }
+    } else
+#endif
+    if (likely(PyLong_Check(x))) {
+        if (is_unsigned) {
+#if CYTHON_USE_PYLONG_INTERNALS
+            const digit* digits = ((PyLongObject*)x)->ob_digit;
+            switch (Py_SIZE(x)) {
+                case  0: return (unsigned int) 0;
+                case  1: __PYX_VERIFY_RETURN_INT(unsigned int, digit, digits[0])
+                case 2:
+                    if (8 * sizeof(unsigned int) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(unsigned int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(unsigned int) >= 2 * PyLong_SHIFT) {
+                            return (unsigned int) (((((unsigned int)digits[1]) << PyLong_SHIFT) | (unsigned int)digits[0]));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(unsigned int) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(unsigned int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(unsigned int) >= 3 * PyLong_SHIFT) {
+                            return (unsigned int) (((((((unsigned int)digits[2]) << PyLong_SHIFT) | (unsigned int)digits[1]) << PyLong_SHIFT) | (unsigned int)digits[0]));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(unsigned int) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(unsigned int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(unsigned int) >= 4 * PyLong_SHIFT) {
+                            return (unsigned int) (((((((((unsigned int)digits[3]) << PyLong_SHIFT) | (unsigned int)digits[2]) << PyLong_SHIFT) | (unsigned int)digits[1]) << PyLong_SHIFT) | (unsigned int)digits[0]));
+                        }
+                    }
+                    break;
+            }
+#endif
+#if CYTHON_COMPILING_IN_CPYTHON
+            if (unlikely(Py_SIZE(x) < 0)) {
+                goto raise_neg_overflow;
+            }
+#else
+            {
+                int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
+                if (unlikely(result < 0))
+                    return (unsigned int) -1;
+                if (unlikely(result == 1))
+                    goto raise_neg_overflow;
+            }
+#endif
+            if (sizeof(unsigned int) <= sizeof(unsigned long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(unsigned int, unsigned long, PyLong_AsUnsignedLong(x))
+#ifdef HAVE_LONG_LONG
+            } else if (sizeof(unsigned int) <= sizeof(unsigned PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(unsigned int, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
+#endif
+            }
+        } else {
+#if CYTHON_USE_PYLONG_INTERNALS
+            const digit* digits = ((PyLongObject*)x)->ob_digit;
+            switch (Py_SIZE(x)) {
+                case  0: return (unsigned int) 0;
+                case -1: __PYX_VERIFY_RETURN_INT(unsigned int, sdigit, (sdigit) (-(sdigit)digits[0]))
+                case  1: __PYX_VERIFY_RETURN_INT(unsigned int,  digit, +digits[0])
+                case -2:
+                    if (8 * sizeof(unsigned int) - 1 > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(unsigned int, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(unsigned int) - 1 > 2 * PyLong_SHIFT) {
+                            return (unsigned int) (((unsigned int)-1)*(((((unsigned int)digits[1]) << PyLong_SHIFT) | (unsigned int)digits[0])));
+                        }
+                    }
+                    break;
+                case 2:
+                    if (8 * sizeof(unsigned int) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(unsigned int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(unsigned int) - 1 > 2 * PyLong_SHIFT) {
+                            return (unsigned int) ((((((unsigned int)digits[1]) << PyLong_SHIFT) | (unsigned int)digits[0])));
+                        }
+                    }
+                    break;
+                case -3:
+                    if (8 * sizeof(unsigned int) - 1 > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(unsigned int, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(unsigned int) - 1 > 3 * PyLong_SHIFT) {
+                            return (unsigned int) (((unsigned int)-1)*(((((((unsigned int)digits[2]) << PyLong_SHIFT) | (unsigned int)digits[1]) << PyLong_SHIFT) | (unsigned int)digits[0])));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(unsigned int) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(unsigned int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(unsigned int) - 1 > 3 * PyLong_SHIFT) {
+                            return (unsigned int) ((((((((unsigned int)digits[2]) << PyLong_SHIFT) | (unsigned int)digits[1]) << PyLong_SHIFT) | (unsigned int)digits[0])));
+                        }
+                    }
+                    break;
+                case -4:
+                    if (8 * sizeof(unsigned int) - 1 > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(unsigned int, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(unsigned int) - 1 > 4 * PyLong_SHIFT) {
+                            return (unsigned int) (((unsigned int)-1)*(((((((((unsigned int)digits[3]) << PyLong_SHIFT) | (unsigned int)digits[2]) << PyLong_SHIFT) | (unsigned int)digits[1]) << PyLong_SHIFT) | (unsigned int)digits[0])));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(unsigned int) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(unsigned int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(unsigned int) - 1 > 4 * PyLong_SHIFT) {
+                            return (unsigned int) ((((((((((unsigned int)digits[3]) << PyLong_SHIFT) | (unsigned int)digits[2]) << PyLong_SHIFT) | (unsigned int)digits[1]) << PyLong_SHIFT) | (unsigned int)digits[0])));
+                        }
+                    }
+                    break;
+            }
+#endif
+            if (sizeof(unsigned int) <= sizeof(long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(unsigned int, long, PyLong_AsLong(x))
+#ifdef HAVE_LONG_LONG
+            } else if (sizeof(unsigned int) <= sizeof(PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(unsigned int, PY_LONG_LONG, PyLong_AsLongLong(x))
+#endif
+            }
+        }
+        {
+#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray)
+            PyErr_SetString(PyExc_RuntimeError,
+                            "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers");
+#else
+            unsigned int val;
+            PyObject *v = __Pyx_PyNumber_IntOrLong(x);
+ #if PY_MAJOR_VERSION < 3
+            if (likely(v) && !PyLong_Check(v)) {
+                PyObject *tmp = v;
+                v = PyNumber_Long(tmp);
+                Py_DECREF(tmp);
+            }
+ #endif
+            if (likely(v)) {
+                int one = 1; int is_little = (int)*(unsigned char *)&one;
+                unsigned char *bytes = (unsigned char *)&val;
+                int ret = _PyLong_AsByteArray((PyLongObject *)v,
+                                              bytes, sizeof(val),
+                                              is_little, !is_unsigned);
+                Py_DECREF(v);
+                if (likely(!ret))
+                    return val;
+            }
+#endif
+            return (unsigned int) -1;
+        }
+    } else {
+        unsigned int val;
+        PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
+        if (!tmp) return (unsigned int) -1;
+        val = __Pyx_PyInt_As_unsigned_int(tmp);
+        Py_DECREF(tmp);
+        return val;
+    }
+raise_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "value too large to convert to unsigned int");
+    return (unsigned int) -1;
+raise_neg_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "can't convert negative value to unsigned int");
+    return (unsigned int) -1;
+}
+
+/* CIntFromPy */
+  static CYTHON_INLINE unsigned long __Pyx_PyInt_As_unsigned_long(PyObject *x) {
+    const unsigned long neg_one = (unsigned long) ((unsigned long) 0 - (unsigned long) 1), const_zero = (unsigned long) 0;
+    const int is_unsigned = neg_one > const_zero;
+#if PY_MAJOR_VERSION < 3
+    if (likely(PyInt_Check(x))) {
+        if (sizeof(unsigned long) < sizeof(long)) {
+            __PYX_VERIFY_RETURN_INT(unsigned long, long, PyInt_AS_LONG(x))
+        } else {
+            long val = PyInt_AS_LONG(x);
+            if (is_unsigned && unlikely(val < 0)) {
+                goto raise_neg_overflow;
+            }
+            return (unsigned long) val;
+        }
+    } else
+#endif
+    if (likely(PyLong_Check(x))) {
+        if (is_unsigned) {
+#if CYTHON_USE_PYLONG_INTERNALS
+            const digit* digits = ((PyLongObject*)x)->ob_digit;
+            switch (Py_SIZE(x)) {
+                case  0: return (unsigned long) 0;
+                case  1: __PYX_VERIFY_RETURN_INT(unsigned long, digit, digits[0])
+                case 2:
+                    if (8 * sizeof(unsigned long) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(unsigned long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(unsigned long) >= 2 * PyLong_SHIFT) {
+                            return (unsigned long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(unsigned long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(unsigned long) >= 3 * PyLong_SHIFT) {
+                            return (unsigned long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(unsigned long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(unsigned long) >= 4 * PyLong_SHIFT) {
+                            return (unsigned long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
+                        }
+                    }
+                    break;
+            }
+#endif
+#if CYTHON_COMPILING_IN_CPYTHON
+            if (unlikely(Py_SIZE(x) < 0)) {
+                goto raise_neg_overflow;
+            }
+#else
+            {
+                int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
+                if (unlikely(result < 0))
+                    return (unsigned long) -1;
+                if (unlikely(result == 1))
+                    goto raise_neg_overflow;
+            }
+#endif
+            if (sizeof(unsigned long) <= sizeof(unsigned long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(unsigned long, unsigned long, PyLong_AsUnsignedLong(x))
+#ifdef HAVE_LONG_LONG
+            } else if (sizeof(unsigned long) <= sizeof(unsigned PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(unsigned long, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
+#endif
+            }
+        } else {
+#if CYTHON_USE_PYLONG_INTERNALS
+            const digit* digits = ((PyLongObject*)x)->ob_digit;
+            switch (Py_SIZE(x)) {
+                case  0: return (unsigned long) 0;
+                case -1: __PYX_VERIFY_RETURN_INT(unsigned long, sdigit, (sdigit) (-(sdigit)digits[0]))
+                case  1: __PYX_VERIFY_RETURN_INT(unsigned long,  digit, +digits[0])
+                case -2:
+                    if (8 * sizeof(unsigned long) - 1 > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(unsigned long, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(unsigned long) - 1 > 2 * PyLong_SHIFT) {
+                            return (unsigned long) (((unsigned long)-1)*(((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])));
+                        }
+                    }
+                    break;
+                case 2:
+                    if (8 * sizeof(unsigned long) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(unsigned long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(unsigned long) - 1 > 2 * PyLong_SHIFT) {
+                            return (unsigned long) ((((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])));
+                        }
+                    }
+                    break;
+                case -3:
+                    if (8 * sizeof(unsigned long) - 1 > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(unsigned long, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(unsigned long) - 1 > 3 * PyLong_SHIFT) {
+                            return (unsigned long) (((unsigned long)-1)*(((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(unsigned long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(unsigned long) - 1 > 3 * PyLong_SHIFT) {
+                            return (unsigned long) ((((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])));
+                        }
+                    }
+                    break;
+                case -4:
+                    if (8 * sizeof(unsigned long) - 1 > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(unsigned long, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(unsigned long) - 1 > 4 * PyLong_SHIFT) {
+                            return (unsigned long) (((unsigned long)-1)*(((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(unsigned long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(unsigned long) - 1 > 4 * PyLong_SHIFT) {
+                            return (unsigned long) ((((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])));
+                        }
+                    }
+                    break;
+            }
+#endif
+            if (sizeof(unsigned long) <= sizeof(long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(unsigned long, long, PyLong_AsLong(x))
+#ifdef HAVE_LONG_LONG
+            } else if (sizeof(unsigned long) <= sizeof(PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(unsigned long, PY_LONG_LONG, PyLong_AsLongLong(x))
+#endif
+            }
+        }
+        {
+#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray)
+            PyErr_SetString(PyExc_RuntimeError,
+                            "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers");
+#else
+            unsigned long val;
+            PyObject *v = __Pyx_PyNumber_IntOrLong(x);
+ #if PY_MAJOR_VERSION < 3
+            if (likely(v) && !PyLong_Check(v)) {
+                PyObject *tmp = v;
+                v = PyNumber_Long(tmp);
+                Py_DECREF(tmp);
+            }
+ #endif
+            if (likely(v)) {
+                int one = 1; int is_little = (int)*(unsigned char *)&one;
+                unsigned char *bytes = (unsigned char *)&val;
+                int ret = _PyLong_AsByteArray((PyLongObject *)v,
+                                              bytes, sizeof(val),
+                                              is_little, !is_unsigned);
+                Py_DECREF(v);
+                if (likely(!ret))
+                    return val;
+            }
+#endif
+            return (unsigned long) -1;
+        }
+    } else {
+        unsigned long val;
+        PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
+        if (!tmp) return (unsigned long) -1;
+        val = __Pyx_PyInt_As_unsigned_long(tmp);
+        Py_DECREF(tmp);
+        return val;
+    }
+raise_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "value too large to convert to unsigned long");
+    return (unsigned long) -1;
+raise_neg_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "can't convert negative value to unsigned long");
+    return (unsigned long) -1;
+}
+
+/* BytesContains */
+  static CYTHON_INLINE int __Pyx_BytesContains(PyObject* bytes, char character) {
+    const Py_ssize_t length = PyBytes_GET_SIZE(bytes);
+    char* char_start = PyBytes_AS_STRING(bytes);
+    return memchr(char_start, (unsigned char)character, (size_t)length) != NULL;
+}
+
+/* ImportNumPyArray */
+  static PyObject* __Pyx__ImportNumPyArray(void) {
+    PyObject *numpy_module, *ndarray_object = NULL;
+    numpy_module = __Pyx_Import(__pyx_n_s_numpy, NULL, 0);
+    if (likely(numpy_module)) {
+        ndarray_object = PyObject_GetAttrString(numpy_module, "ndarray");
+        Py_DECREF(numpy_module);
+    }
+    if (unlikely(!ndarray_object)) {
+        PyErr_Clear();
+    }
+    if (unlikely(!ndarray_object || !PyObject_TypeCheck(ndarray_object, &PyType_Type))) {
+        Py_XDECREF(ndarray_object);
+        Py_INCREF(Py_None);
+        ndarray_object = Py_None;
+    }
+    return ndarray_object;
+}
+static CYTHON_INLINE PyObject* __Pyx_ImportNumPyArrayTypeIfAvailable(void) {
+    if (unlikely(!__pyx_numpy_ndarray)) {
+        __pyx_numpy_ndarray = __Pyx__ImportNumPyArray();
+    }
+    Py_INCREF(__pyx_numpy_ndarray);
+    return __pyx_numpy_ndarray;
+}
+
+/* CIntFromPy */
+  static CYTHON_INLINE char __Pyx_PyInt_As_char(PyObject *x) {
+    const char neg_one = (char) ((char) 0 - (char) 1), const_zero = (char) 0;
+    const int is_unsigned = neg_one > const_zero;
+#if PY_MAJOR_VERSION < 3
+    if (likely(PyInt_Check(x))) {
+        if (sizeof(char) < sizeof(long)) {
+            __PYX_VERIFY_RETURN_INT(char, long, PyInt_AS_LONG(x))
+        } else {
+            long val = PyInt_AS_LONG(x);
+            if (is_unsigned && unlikely(val < 0)) {
+                goto raise_neg_overflow;
+            }
+            return (char) val;
+        }
+    } else
+#endif
+    if (likely(PyLong_Check(x))) {
+        if (is_unsigned) {
+#if CYTHON_USE_PYLONG_INTERNALS
+            const digit* digits = ((PyLongObject*)x)->ob_digit;
+            switch (Py_SIZE(x)) {
+                case  0: return (char) 0;
+                case  1: __PYX_VERIFY_RETURN_INT(char, digit, digits[0])
+                case 2:
+                    if (8 * sizeof(char) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(char, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(char) >= 2 * PyLong_SHIFT) {
+                            return (char) (((((char)digits[1]) << PyLong_SHIFT) | (char)digits[0]));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(char) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(char, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(char) >= 3 * PyLong_SHIFT) {
+                            return (char) (((((((char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0]));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(char) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(char, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(char) >= 4 * PyLong_SHIFT) {
+                            return (char) (((((((((char)digits[3]) << PyLong_SHIFT) | (char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0]));
+                        }
+                    }
+                    break;
+            }
+#endif
+#if CYTHON_COMPILING_IN_CPYTHON
+            if (unlikely(Py_SIZE(x) < 0)) {
+                goto raise_neg_overflow;
+            }
+#else
+            {
+                int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
+                if (unlikely(result < 0))
+                    return (char) -1;
+                if (unlikely(result == 1))
+                    goto raise_neg_overflow;
+            }
+#endif
+            if (sizeof(char) <= sizeof(unsigned long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(char, unsigned long, PyLong_AsUnsignedLong(x))
+#ifdef HAVE_LONG_LONG
+            } else if (sizeof(char) <= sizeof(unsigned PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(char, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
+#endif
+            }
+        } else {
+#if CYTHON_USE_PYLONG_INTERNALS
+            const digit* digits = ((PyLongObject*)x)->ob_digit;
+            switch (Py_SIZE(x)) {
+                case  0: return (char) 0;
+                case -1: __PYX_VERIFY_RETURN_INT(char, sdigit, (sdigit) (-(sdigit)digits[0]))
+                case  1: __PYX_VERIFY_RETURN_INT(char,  digit, +digits[0])
+                case -2:
+                    if (8 * sizeof(char) - 1 > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(char, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(char) - 1 > 2 * PyLong_SHIFT) {
+                            return (char) (((char)-1)*(((((char)digits[1]) << PyLong_SHIFT) | (char)digits[0])));
+                        }
+                    }
+                    break;
+                case 2:
+                    if (8 * sizeof(char) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(char, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(char) - 1 > 2 * PyLong_SHIFT) {
+                            return (char) ((((((char)digits[1]) << PyLong_SHIFT) | (char)digits[0])));
+                        }
+                    }
+                    break;
+                case -3:
+                    if (8 * sizeof(char) - 1 > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(char, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(char) - 1 > 3 * PyLong_SHIFT) {
+                            return (char) (((char)-1)*(((((((char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0])));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(char) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(char, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(char) - 1 > 3 * PyLong_SHIFT) {
+                            return (char) ((((((((char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0])));
+                        }
+                    }
+                    break;
+                case -4:
+                    if (8 * sizeof(char) - 1 > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(char, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(char) - 1 > 4 * PyLong_SHIFT) {
+                            return (char) (((char)-1)*(((((((((char)digits[3]) << PyLong_SHIFT) | (char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0])));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(char) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(char, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(char) - 1 > 4 * PyLong_SHIFT) {
+                            return (char) ((((((((((char)digits[3]) << PyLong_SHIFT) | (char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0])));
+                        }
+                    }
+                    break;
+            }
+#endif
+            if (sizeof(char) <= sizeof(long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(char, long, PyLong_AsLong(x))
+#ifdef HAVE_LONG_LONG
+            } else if (sizeof(char) <= sizeof(PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(char, PY_LONG_LONG, PyLong_AsLongLong(x))
+#endif
+            }
+        }
+        {
+#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray)
+            PyErr_SetString(PyExc_RuntimeError,
+                            "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers");
+#else
+            char val;
+            PyObject *v = __Pyx_PyNumber_IntOrLong(x);
+ #if PY_MAJOR_VERSION < 3
+            if (likely(v) && !PyLong_Check(v)) {
+                PyObject *tmp = v;
+                v = PyNumber_Long(tmp);
+                Py_DECREF(tmp);
+            }
+ #endif
+            if (likely(v)) {
+                int one = 1; int is_little = (int)*(unsigned char *)&one;
+                unsigned char *bytes = (unsigned char *)&val;
+                int ret = _PyLong_AsByteArray((PyLongObject *)v,
+                                              bytes, sizeof(val),
+                                              is_little, !is_unsigned);
+                Py_DECREF(v);
+                if (likely(!ret))
+                    return val;
+            }
+#endif
+            return (char) -1;
+        }
+    } else {
+        char val;
+        PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
+        if (!tmp) return (char) -1;
+        val = __Pyx_PyInt_As_char(tmp);
+        Py_DECREF(tmp);
+        return val;
+    }
+raise_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "value too large to convert to char");
+    return (char) -1;
+raise_neg_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "can't convert negative value to char");
+    return (char) -1;
+}
+
+/* CheckBinaryVersion */
+  static int __Pyx_check_binary_version(void) {
+    char ctversion[4], rtversion[4];
+    PyOS_snprintf(ctversion, 4, "%d.%d", PY_MAJOR_VERSION, PY_MINOR_VERSION);
+    PyOS_snprintf(rtversion, 4, "%s", Py_GetVersion());
+    if (ctversion[0] != rtversion[0] || ctversion[2] != rtversion[2]) {
+        char message[200];
+        PyOS_snprintf(message, sizeof(message),
+                      "compiletime version %s of module '%.100s' "
+                      "does not match runtime version %s",
+                      ctversion, __Pyx_MODULE_NAME, rtversion);
+        return PyErr_WarnEx(NULL, message, 1);
+    }
+    return 0;
+}
+
+/* InitStrings */
+  static int __Pyx_InitStrings(__Pyx_StringTabEntry *t) {
+    while (t->p) {
+        #if PY_MAJOR_VERSION < 3
+        if (t->is_unicode) {
+            *t->p = PyUnicode_DecodeUTF8(t->s, t->n - 1, NULL);
+        } else if (t->intern) {
+            *t->p = PyString_InternFromString(t->s);
+        } else {
+            *t->p = PyString_FromStringAndSize(t->s, t->n - 1);
+        }
+        #else
+        if (t->is_unicode | t->is_str) {
+            if (t->intern) {
+                *t->p = PyUnicode_InternFromString(t->s);
+            } else if (t->encoding) {
+                *t->p = PyUnicode_Decode(t->s, t->n - 1, t->encoding, NULL);
+            } else {
+                *t->p = PyUnicode_FromStringAndSize(t->s, t->n - 1);
+            }
+        } else {
+            *t->p = PyBytes_FromStringAndSize(t->s, t->n - 1);
+        }
+        #endif
+        if (!*t->p)
+            return -1;
+        if (PyObject_Hash(*t->p) == -1)
+            return -1;
+        ++t;
+    }
+    return 0;
+}
+
+static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char* c_str) {
+    return __Pyx_PyUnicode_FromStringAndSize(c_str, (Py_ssize_t)strlen(c_str));
+}
+static CYTHON_INLINE const char* __Pyx_PyObject_AsString(PyObject* o) {
+    Py_ssize_t ignore;
+    return __Pyx_PyObject_AsStringAndSize(o, &ignore);
+}
+#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT
+#if !CYTHON_PEP393_ENABLED
+static const char* __Pyx_PyUnicode_AsStringAndSize(PyObject* o, Py_ssize_t *length) {
+    char* defenc_c;
+    PyObject* defenc = _PyUnicode_AsDefaultEncodedString(o, NULL);
+    if (!defenc) return NULL;
+    defenc_c = PyBytes_AS_STRING(defenc);
+#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII
+    {
+        char* end = defenc_c + PyBytes_GET_SIZE(defenc);
+        char* c;
+        for (c = defenc_c; c < end; c++) {
+            if ((unsigned char) (*c) >= 128) {
+                PyUnicode_AsASCIIString(o);
+                return NULL;
+            }
+        }
+    }
+#endif
+    *length = PyBytes_GET_SIZE(defenc);
+    return defenc_c;
+}
+#else
+static CYTHON_INLINE const char* __Pyx_PyUnicode_AsStringAndSize(PyObject* o, Py_ssize_t *length) {
+    if (unlikely(__Pyx_PyUnicode_READY(o) == -1)) return NULL;
+#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII
+    if (likely(PyUnicode_IS_ASCII(o))) {
+        *length = PyUnicode_GET_LENGTH(o);
+        return PyUnicode_AsUTF8(o);
+    } else {
+        PyUnicode_AsASCIIString(o);
+        return NULL;
+    }
+#else
+    return PyUnicode_AsUTF8AndSize(o, length);
+#endif
+}
+#endif
+#endif
+static CYTHON_INLINE const char* __Pyx_PyObject_AsStringAndSize(PyObject* o, Py_ssize_t *length) {
+#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT
+    if (
+#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII
+            __Pyx_sys_getdefaultencoding_not_ascii &&
+#endif
+            PyUnicode_Check(o)) {
+        return __Pyx_PyUnicode_AsStringAndSize(o, length);
+    } else
+#endif
+#if (!CYTHON_COMPILING_IN_PYPY) || (defined(PyByteArray_AS_STRING) && defined(PyByteArray_GET_SIZE))
+    if (PyByteArray_Check(o)) {
+        *length = PyByteArray_GET_SIZE(o);
+        return PyByteArray_AS_STRING(o);
+    } else
+#endif
+    {
+        char* result;
+        int r = PyBytes_AsStringAndSize(o, &result, length);
+        if (unlikely(r < 0)) {
+            return NULL;
+        } else {
+            return result;
+        }
+    }
+}
+static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject* x) {
+   int is_true = x == Py_True;
+   if (is_true | (x == Py_False) | (x == Py_None)) return is_true;
+   else return PyObject_IsTrue(x);
+}
+static CYTHON_INLINE int __Pyx_PyObject_IsTrueAndDecref(PyObject* x) {
+    int retval;
+    if (unlikely(!x)) return -1;
+    retval = __Pyx_PyObject_IsTrue(x);
+    Py_DECREF(x);
+    return retval;
+}
+static PyObject* __Pyx_PyNumber_IntOrLongWrongResultType(PyObject* result, const char* type_name) {
+#if PY_MAJOR_VERSION >= 3
+    if (PyLong_Check(result)) {
+        if (PyErr_WarnFormat(PyExc_DeprecationWarning, 1,
+                "__int__ returned non-int (type %.200s).  "
+                "The ability to return an instance of a strict subclass of int "
+                "is deprecated, and may be removed in a future version of Python.",
+                Py_TYPE(result)->tp_name)) {
+            Py_DECREF(result);
+            return NULL;
+        }
+        return result;
+    }
+#endif
+    PyErr_Format(PyExc_TypeError,
+                 "__%.4s__ returned non-%.4s (type %.200s)",
+                 type_name, type_name, Py_TYPE(result)->tp_name);
+    Py_DECREF(result);
+    return NULL;
+}
+static CYTHON_INLINE PyObject* __Pyx_PyNumber_IntOrLong(PyObject* x) {
+#if CYTHON_USE_TYPE_SLOTS
+  PyNumberMethods *m;
+#endif
+  const char *name = NULL;
+  PyObject *res = NULL;
+#if PY_MAJOR_VERSION < 3
+  if (likely(PyInt_Check(x) || PyLong_Check(x)))
+#else
+  if (likely(PyLong_Check(x)))
+#endif
+    return __Pyx_NewRef(x);
+#if CYTHON_USE_TYPE_SLOTS
+  m = Py_TYPE(x)->tp_as_number;
+  #if PY_MAJOR_VERSION < 3
+  if (m && m->nb_int) {
+    name = "int";
+    res = m->nb_int(x);
+  }
+  else if (m && m->nb_long) {
+    name = "long";
+    res = m->nb_long(x);
+  }
+  #else
+  if (likely(m && m->nb_int)) {
+    name = "int";
+    res = m->nb_int(x);
+  }
+  #endif
+#else
+  if (!PyBytes_CheckExact(x) && !PyUnicode_CheckExact(x)) {
+    res = PyNumber_Int(x);
+  }
+#endif
+  if (likely(res)) {
+#if PY_MAJOR_VERSION < 3
+    if (unlikely(!PyInt_Check(res) && !PyLong_Check(res))) {
+#else
+    if (unlikely(!PyLong_CheckExact(res))) {
+#endif
+        return __Pyx_PyNumber_IntOrLongWrongResultType(res, name);
+    }
+  }
+  else if (!PyErr_Occurred()) {
+    PyErr_SetString(PyExc_TypeError,
+                    "an integer is required");
+  }
+  return res;
+}
+static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) {
+  Py_ssize_t ival;
+  PyObject *x;
+#if PY_MAJOR_VERSION < 3
+  if (likely(PyInt_CheckExact(b))) {
+    if (sizeof(Py_ssize_t) >= sizeof(long))
+        return PyInt_AS_LONG(b);
+    else
+        return PyInt_AsSsize_t(b);
+  }
+#endif
+  if (likely(PyLong_CheckExact(b))) {
+    #if CYTHON_USE_PYLONG_INTERNALS
+    const digit* digits = ((PyLongObject*)b)->ob_digit;
+    const Py_ssize_t size = Py_SIZE(b);
+    if (likely(__Pyx_sst_abs(size) <= 1)) {
+        ival = likely(size) ? digits[0] : 0;
+        if (size == -1) ival = -ival;
+        return ival;
+    } else {
+      switch (size) {
+         case 2:
+           if (8 * sizeof(Py_ssize_t) > 2 * PyLong_SHIFT) {
+             return (Py_ssize_t) (((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0]));
+           }
+           break;
+         case -2:
+           if (8 * sizeof(Py_ssize_t) > 2 * PyLong_SHIFT) {
+             return -(Py_ssize_t) (((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0]));
+           }
+           break;
+         case 3:
+           if (8 * sizeof(Py_ssize_t) > 3 * PyLong_SHIFT) {
+             return (Py_ssize_t) (((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0]));
+           }
+           break;
+         case -3:
+           if (8 * sizeof(Py_ssize_t) > 3 * PyLong_SHIFT) {
+             return -(Py_ssize_t) (((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0]));
+           }
+           break;
+         case 4:
+           if (8 * sizeof(Py_ssize_t) > 4 * PyLong_SHIFT) {
+             return (Py_ssize_t) (((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0]));
+           }
+           break;
+         case -4:
+           if (8 * sizeof(Py_ssize_t) > 4 * PyLong_SHIFT) {
+             return -(Py_ssize_t) (((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0]));
+           }
+           break;
+      }
+    }
+    #endif
+    return PyLong_AsSsize_t(b);
+  }
+  x = PyNumber_Index(b);
+  if (!x) return -1;
+  ival = PyInt_AsSsize_t(x);
+  Py_DECREF(x);
+  return ival;
+}
+static CYTHON_INLINE PyObject * __Pyx_PyBool_FromLong(long b) {
+  return b ? __Pyx_NewRef(Py_True) : __Pyx_NewRef(Py_False);
+}
+static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t ival) {
+    return PyInt_FromSize_t(ival);
+}
+
+
+#endif /* Py_PYTHON_H */
diff --git a/pystencils/boundaries/createindexlistcython.pyx b/pystencils/boundaries/createindexlistcython.pyx
index b196f26f269c755a5bc77615f428b8eb397e0c54..0931fdc7fe1038a7445f4e97a65ea24074e684fe 100644
--- a/pystencils/boundaries/createindexlistcython.pyx
+++ b/pystencils/boundaries/createindexlistcython.pyx
@@ -1,3 +1,4 @@
+# distutils: language=c
 # Workaround for cython bug
 # see https://stackoverflow.com/questions/8024805/cython-compiled-c-extension-importerror-dynamic-module-does-not-define-init-fu
 WORKAROUND = "Something"
diff --git a/pystencils/boundaries/inkernel.py b/pystencils/boundaries/inkernel.py
index 73da40beefc81826430fdcf67fec5c0b5beb98c8..1d78814db6fadcc8a161353638f4dc61be36c0e4 100644
--- a/pystencils/boundaries/inkernel.py
+++ b/pystencils/boundaries/inkernel.py
@@ -1,21 +1,26 @@
 import sympy as sp
-from pystencils import Field, TypedSymbol
-from pystencils.integer_functions import bitwise_and
+
 from pystencils.boundaries.boundaryhandling import DEFAULT_FLAG_TYPE
-from pystencils.data_types import create_type
+from pystencils.data_types import TypedSymbol, create_type
+from pystencils.field import Field
+from pystencils.integer_functions import bitwise_and
 
 
 def add_neumann_boundary(eqs, fields, flag_field, boundary_flag="neumann_flag", inverse_flag=False):
     """
     Replaces all neighbor accesses by flag field guarded accesses.
     If flag in neighboring cell is set, the center value is used instead
-    :param eqs: list of equations containing field accesses to direct neighbors
-    :param fields: fields for which the Neumann boundary should be applied
-    :param flag_field: integer field marking boundary cells
-    :param boundary_flag: if flag field has value 'boundary_flag' (no bit operations yet)
-                          the cell is assumed to be boundary
-    :param inverse_flag: if true, boundary cells are where flag field has not the value of boundary_flag
-    :return: list of equations with guarded field accesses
+
+    Args:
+        eqs: list of equations containing field accesses to direct neighbors
+        fields: fields for which the Neumann boundary should be applied
+        flag_field: integer field marking boundary cells
+        boundary_flag: if flag field has value 'boundary_flag' (no bit operations yet)
+                       the cell is assumed to be boundary
+        inverse_flag: if true, boundary cells are where flag field has not the value of boundary_flag
+
+    Returns:
+        list of equations with guarded field accesses
     """
     if not hasattr(fields, "__len__"):
         fields = [fields]
diff --git a/pystencils/cpu/__init__.py b/pystencils/cpu/__init__.py
index 900a32eab83e3fc1ae5fe88553d98d75d802b679..e15bc8cf0b2a33eaa486c8e95e3cb50404cfa5e6 100644
--- a/pystencils/cpu/__init__.py
+++ b/pystencils/cpu/__init__.py
@@ -1,4 +1,4 @@
-from pystencils.cpu.kernelcreation import create_kernel, create_indexed_kernel, add_openmp
 from pystencils.cpu.cpujit import make_python_function
+from pystencils.cpu.kernelcreation import add_openmp, create_indexed_kernel, create_kernel
 
 __all__ = ['create_kernel', 'create_indexed_kernel', 'add_openmp', 'make_python_function']
diff --git a/pystencils/cpu/cpujit.py b/pystencils/cpu/cpujit.py
index 76255c1ec0f553c7c001e317b2025d3ab7bda632..d93955751d48c85b8da06dc84281e2ac7992d328 100644
--- a/pystencils/cpu/cpujit.py
+++ b/pystencils/cpu/cpujit.py
@@ -402,9 +402,19 @@ def create_module_boilerplate_code(module_name, names):
 
 def load_kernel_from_file(module_name, function_name, path):
     from importlib.util import spec_from_file_location, module_from_spec
-    spec = spec_from_file_location(name=module_name, location=path)
-    mod = module_from_spec(spec)
-    spec.loader.exec_module(mod)
+    try:
+        spec = spec_from_file_location(name=module_name, location=path)
+        mod = module_from_spec(spec)
+        spec.loader.exec_module(mod)
+    except ImportError:
+        import time
+        import warnings
+        warnings.warn("Could not load " + path + ", trying on more time...")
+        time.sleep(1)
+        spec = spec_from_file_location(name=module_name, location=path)
+        mod = module_from_spec(spec)
+        spec.loader.exec_module(mod)
+
     return getattr(mod, function_name)
 
 
diff --git a/pystencils/cpu/kernelcreation.py b/pystencils/cpu/kernelcreation.py
index 6b94b6de32eb61d77f77f4e8afd2e873d7c63b41..fc6765e589e341b40ebbc778c7c26839531ae826 100644
--- a/pystencils/cpu/kernelcreation.py
+++ b/pystencils/cpu/kernelcreation.py
@@ -1,15 +1,17 @@
+from typing import List, Union
+
 import sympy as sp
-from functools import partial
-from pystencils.astnodes import SympyAssignment, Block, LoopOverCoordinate, KernelFunction
-from pystencils.transformations import resolve_buffer_accesses, resolve_field_accesses, make_loop_over_domain, \
-    add_types, get_optimal_loop_ordering, parse_base_pointer_info, move_constants_before_loop, \
-    split_inner_loop, get_base_buffer_index, filtered_tree_iteration
-from pystencils.data_types import TypedSymbol, BasicType, StructType, create_type
-from pystencils.field import Field, FieldType
+
 import pystencils.astnodes as ast
-from pystencils.cpu.cpujit import make_python_function
 from pystencils.assignment import Assignment
-from typing import List, Union
+from pystencils.astnodes import Block, KernelFunction, LoopOverCoordinate, SympyAssignment
+from pystencils.cpu.cpujit import make_python_function
+from pystencils.data_types import BasicType, StructType, TypedSymbol, create_type
+from pystencils.field import Field, FieldType
+from pystencils.transformations import (
+    add_types, filtered_tree_iteration, get_base_buffer_index, get_optimal_loop_ordering,
+    make_loop_over_domain, move_constants_before_loop, parse_base_pointer_info,
+    resolve_buffer_accesses, resolve_field_accesses, split_inner_loop)
 
 AssignmentOrAstNodeList = List[Union[Assignment, ast.Node]]
 
@@ -61,9 +63,10 @@ def create_kernel(assignments: AssignmentOrAstNodeList, function_name: str = "ke
 
     body = ast.Block(assignments)
     loop_order = get_optimal_loop_ordering(fields_without_buffers)
-    ast_node = make_loop_over_domain(body, function_name, iteration_slice=iteration_slice,
-                                     ghost_layers=ghost_layers, loop_order=loop_order)
-    ast_node.target = 'cpu'
+    loop_node, ghost_layer_info = make_loop_over_domain(body, iteration_slice=iteration_slice,
+                                                        ghost_layers=ghost_layers, loop_order=loop_order)
+    ast_node = KernelFunction(loop_node, 'cpu', 'c', compile_function=make_python_function,
+                              ghost_layers=ghost_layer_info, function_name=function_name)
 
     if split_groups:
         typed_split_groups = [[type_symbol(s) for s in split_group] for split_group in split_groups]
@@ -83,7 +86,6 @@ def create_kernel(assignments: AssignmentOrAstNodeList, function_name: str = "ke
         resolve_buffer_accesses(ast_node, get_base_buffer_index(ast_node), read_only_fields)
     resolve_field_accesses(ast_node, read_only_fields, field_to_base_pointer_info=base_pointer_info)
     move_constants_before_loop(ast_node)
-    ast_node.compile = partial(make_python_function, ast_node)
     return ast_node
 
 
@@ -141,14 +143,14 @@ def create_indexed_kernel(assignments: AssignmentOrAstNodeList, index_fields, fu
         loop_body.append(assignment)
 
     function_body = Block([loop_node])
-    ast_node = KernelFunction(function_body, backend="cpu", function_name=function_name)
+    ast_node = KernelFunction(function_body, "cpu", "c", make_python_function,
+                              ghost_layers=None, function_name=function_name)
 
     fixed_coordinate_mapping = {f.name: coordinate_typed_symbols for f in non_index_fields}
 
     read_only_fields = set([f.name for f in fields_read - fields_written])
     resolve_field_accesses(ast_node, read_only_fields, field_to_fixed_coordinates=fixed_coordinate_mapping)
     move_constants_before_loop(ast_node)
-    ast_node.compile = partial(make_python_function, ast_node)
     return ast_node
 
 
diff --git a/pystencils/cpu/msvc_detection.py b/pystencils/cpu/msvc_detection.py
index be0fb9189ae3d4516472ec1f76da6b15284847a3..94b2bcf5bc978c70c083ab3c2d0a6a6e0b2aea62 100644
--- a/pystencils/cpu/msvc_detection.py
+++ b/pystencils/cpu/msvc_detection.py
@@ -1,5 +1,5 @@
-import subprocess
 import os
+import subprocess
 
 
 def get_environment(version_specifier, arch='x64'):
diff --git a/pystencils/cpu/vectorization.py b/pystencils/cpu/vectorization.py
index 619a55ad0edac4fbdac7c6cecfb1afd0125f5ac8..6bf3a26def2dba238eeb4c64e325a41d58fd2afa 100644
--- a/pystencils/cpu/vectorization.py
+++ b/pystencils/cpu/vectorization.py
@@ -1,15 +1,19 @@
-import sympy as sp
 import warnings
-from typing import Union, Container
-from pystencils.backends.simd_instruction_sets import get_vector_instruction_set
-from pystencils.fast_approximation import fast_division, fast_sqrt, fast_inv_sqrt
-from pystencils.integer_functions import modulo_floor, modulo_ceil
-from pystencils.sympyextensions import fast_subs
-from pystencils.data_types import TypedSymbol, VectorType, get_type_of_expression, vector_memory_access, cast_func, \
-    collate_types, PointerType
+from typing import Container, Union
+
+import sympy as sp
+
 import pystencils.astnodes as ast
-from pystencils.transformations import cut_loop, filtered_tree_iteration, replace_inner_stride_with_one
+from pystencils.backends.simd_instruction_sets import get_vector_instruction_set
+from pystencils.data_types import (
+    PointerType, TypedSymbol, VectorType, cast_func, collate_types, get_type_of_expression,
+    vector_memory_access)
+from pystencils.fast_approximation import fast_division, fast_inv_sqrt, fast_sqrt
 from pystencils.field import Field
+from pystencils.integer_functions import modulo_ceil, modulo_floor
+from pystencils.sympyextensions import fast_subs
+from pystencils.transformations import (
+    cut_loop, filtered_tree_iteration, replace_inner_stride_with_one)
 
 
 # noinspection PyPep8Naming
diff --git a/pystencils/data_types.py b/pystencils/data_types.py
index 3f1a02c6833756985308282c49148fe0ecaa0153..8bf28e777e9bf9deec30f21cafe8cb3b7ac77b17 100644
--- a/pystencils/data_types.py
+++ b/pystencils/data_types.py
@@ -1,17 +1,18 @@
 import ctypes
-import sympy as sp
+
 import numpy as np
+import sympy as sp
+from sympy.core.cache import cacheit
+from sympy.logic.boolalg import Boolean
+
+from pystencils.cache import memorycache
+from pystencils.utils import all_equal
 
 try:
     import llvmlite.ir as ir
 except ImportError as e:
     ir = None
     _ir_importerror = e
-from sympy.core.cache import cacheit
-
-from pystencils.cache import memorycache
-from pystencils.utils import all_equal
-from sympy.logic.boolalg import Boolean
 
 
 # noinspection PyPep8Naming
diff --git a/pystencils/datahandling/__init__.py b/pystencils/datahandling/__init__.py
index 5b617bf4972835e4c25ed11d92d47e5a8de83da5..583f121b09ffbfdc6dc2103ec6e300e639791891 100644
--- a/pystencils/datahandling/__init__.py
+++ b/pystencils/datahandling/__init__.py
@@ -1,6 +1,7 @@
 from typing import Tuple, Union
-from .serial_datahandling import SerialDataHandling
+
 from .datahandling_interface import DataHandling
+from .serial_datahandling import SerialDataHandling
 
 try:
     # noinspection PyPep8Naming
diff --git a/pystencils/datahandling/blockiteration.py b/pystencils/datahandling/blockiteration.py
index 04297087bf6147dc885a060a2c25ecbc6013e8bc..fdf2b97e8f677db586e28c61ca66c08f9426c708 100644
--- a/pystencils/datahandling/blockiteration.py
+++ b/pystencils/datahandling/blockiteration.py
@@ -7,6 +7,7 @@ import numpy as np
 
 from pystencils.datahandling.datahandling_interface import Block
 from pystencils.slicing import normalize_slice
+
 try:
     # noinspection PyPep8Naming
     import waLBerla as wlb
diff --git a/pystencils/datahandling/datahandling_interface.py b/pystencils/datahandling/datahandling_interface.py
index da2108bfbdbdc3d09abfc4b6a55cda1c1850b63c..ce153ff7a95e6a3e2875aa5b02566874c3238662 100644
--- a/pystencils/datahandling/datahandling_interface.py
+++ b/pystencils/datahandling/datahandling_interface.py
@@ -1,6 +1,8 @@
-import numpy as np
 from abc import ABC, abstractmethod
-from typing import Optional, Callable, Sequence, Iterable, Tuple, Dict, Union
+from typing import Callable, Dict, Iterable, Optional, Sequence, Tuple, Union
+
+import numpy as np
+
 from pystencils.field import Field
 
 
diff --git a/pystencils/datahandling/parallel_datahandling.py b/pystencils/datahandling/parallel_datahandling.py
index 31ca00e2cde997490a8010010e70b96ca2ec9963..4e8d965d4335725e5e0a00b842bbffeab9497924 100644
--- a/pystencils/datahandling/parallel_datahandling.py
+++ b/pystencils/datahandling/parallel_datahandling.py
@@ -1,13 +1,15 @@
 import os
-import numpy as np
 import warnings
-from pystencils import Field
+
+import numpy as np
+# noinspection PyPep8Naming
+import waLBerla as wlb
+
+from pystencils.datahandling.blockiteration import block_iteration, sliced_block_iteration
 from pystencils.datahandling.datahandling_interface import DataHandling
-from pystencils.datahandling.blockiteration import sliced_block_iteration, block_iteration
+from pystencils.field import Field
 from pystencils.kernelparameters import FieldPointerSymbol
 from pystencils.utils import DotDict
-# noinspection PyPep8Naming
-import waLBerla as wlb
 
 
 class ParallelDataHandling(DataHandling):
diff --git a/pystencils/datahandling/serial_datahandling.py b/pystencils/datahandling/serial_datahandling.py
index 7e4d19cd8e24aa485a48893d4c992d34078a0f13..8c79a0931f06fad7c7ab58143cf7058a3f52dbac 100644
--- a/pystencils/datahandling/serial_datahandling.py
+++ b/pystencils/datahandling/serial_datahandling.py
@@ -1,11 +1,13 @@
 import itertools
+import time
 from typing import Sequence, Union
+
 import numpy as np
-import time
-from pystencils import Field
-from pystencils.datahandling.datahandling_interface import DataHandling
-from pystencils.field import layout_string_to_tuple, spatial_layout_string_to_tuple, create_numpy_array_with_layout
+
 from pystencils.datahandling.blockiteration import SerialBlock
+from pystencils.datahandling.datahandling_interface import DataHandling
+from pystencils.field import (
+    Field, create_numpy_array_with_layout, layout_string_to_tuple, spatial_layout_string_to_tuple)
 from pystencils.slicing import normalize_slice, remove_ghost_layers
 from pystencils.utils import DotDict
 
diff --git a/pystencils/datahandling/vtk.py b/pystencils/datahandling/vtk.py
index dcdf2d2d07f9a54c2fd519a5fcbcedf43e33218f..9c5f27fa88961673b1707fcb354b7771d091bb91 100644
--- a/pystencils/datahandling/vtk.py
+++ b/pystencils/datahandling/vtk.py
@@ -1,5 +1,5 @@
-from pyevtk.vtk import VtkFile, VtkImageData
 from pyevtk.hl import _addDataToFile, _appendDataToFile
+from pyevtk.vtk import VtkFile, VtkImageData
 
 
 def image_to_vtk(path, cell_data, origin=(0.0, 0.0, 0.0), spacing=(1.0, 1.0, 1.0)):
diff --git a/pystencils/fast_approximation.py b/pystencils/fast_approximation.py
index 0dbdab241151a5e211efa0c9a4847fcbd9211fae..f33009600c9dd57a89ca63695063237792b6d8d1 100644
--- a/pystencils/fast_approximation.py
+++ b/pystencils/fast_approximation.py
@@ -1,6 +1,7 @@
-import sympy as sp
 from typing import List, Union
 
+import sympy as sp
+
 from pystencils.astnodes import Node
 from pystencils.simp import AssignmentCollection
 
diff --git a/pystencils/fd/__init__.py b/pystencils/fd/__init__.py
index 62b11e4e79f6abe60d0352fb7e3888b02774a0f9..0997634114077a5e105d717b1fbe570e34e9158a 100644
--- a/pystencils/fd/__init__.py
+++ b/pystencils/fd/__init__.py
@@ -1,8 +1,8 @@
-from .derivative import Diff, DiffOperator, \
-    diff_terms, collect_diffs, zero_diffs, evaluate_diffs, normalize_diff_order, \
-    expand_diff_full, expand_diff_linear, expand_diff_products, combine_diff_products, \
-    functional_derivative, diff
-from .finitedifferences import advection, diffusion, transient, Discretization2ndOrder
+from .derivative import (
+    Diff, DiffOperator, collect_diffs, combine_diff_products, diff, diff_terms, evaluate_diffs,
+    expand_diff_full, expand_diff_linear, expand_diff_products, functional_derivative,
+    normalize_diff_order, zero_diffs)
+from .finitedifferences import Discretization2ndOrder, advection, diffusion, transient
 from .spatial import discretize_spatial, discretize_spatial_staggered
 
 __all__ = ['Diff', 'diff', 'DiffOperator', 'diff_terms', 'collect_diffs',
diff --git a/pystencils/fd/derivation.py b/pystencils/fd/derivation.py
index 0d0d1e08dedc8622d0ec343124d6adf481454fc3..451648ef334a553aa0a13d6b3a6d9a7bab7779c9 100644
--- a/pystencils/fd/derivation.py
+++ b/pystencils/fd/derivation.py
@@ -1,8 +1,10 @@
-import sympy as sp
 from collections import defaultdict
+
+import sympy as sp
+
 from pystencils.field import Field
-from pystencils.sympyextensions import prod, multidimensional_sum
-from pystencils.utils import fully_contains, LinearEquationSystem
+from pystencils.sympyextensions import multidimensional_sum, prod
+from pystencils.utils import LinearEquationSystem, fully_contains
 
 
 class FiniteDifferenceStencilDerivation:
diff --git a/pystencils/fd/derivative.py b/pystencils/fd/derivative.py
index 0557a2d503699fc9a336c1b42594e0638676df55..7acd245059615ded27e2c1fe023e344b48c34a6e 100644
--- a/pystencils/fd/derivative.py
+++ b/pystencils/fd/derivative.py
@@ -1,6 +1,8 @@
+from collections import defaultdict, namedtuple
+
 import sympy as sp
-from collections import namedtuple, defaultdict
-from pystencils import Field
+
+from pystencils.field import Field
 from pystencils.sympyextensions import normalize_product, prod
 
 
diff --git a/pystencils/fd/finitedifferences.py b/pystencils/fd/finitedifferences.py
index 3cb7e6db7054953c348ff163300f2d6d6d07ff21..d5bce66e96d8aa5d296df68906c8871d40c08bba 100644
--- a/pystencils/fd/finitedifferences.py
+++ b/pystencils/fd/finitedifferences.py
@@ -1,14 +1,15 @@
+from typing import Optional, Union
+
 import numpy as np
 import sympy as sp
-from typing import Union, Optional
 
-from pystencils import Field, AssignmentCollection
 from pystencils.fd import Diff
 from pystencils.fd.derivative import diff_args
 from pystencils.fd.spatial import fd_stencils_standard
+from pystencils.field import Field
+from pystencils.simp.assignment_collection import AssignmentCollection
 from pystencils.sympyextensions import fast_subs
 
-
 FieldOrFieldAccess = Union[Field, Field.Access]
 
 
diff --git a/pystencils/fd/spatial.py b/pystencils/fd/spatial.py
index 0f9ba7571c2c7b1a9d4b9965490e02151d91a55e..fda6773ce48314416c14bf2381614b95cf413d03 100644
--- a/pystencils/fd/spatial.py
+++ b/pystencils/fd/spatial.py
@@ -1,12 +1,15 @@
 from typing import Tuple
+
 import sympy as sp
+
 from pystencils.astnodes import LoopOverCoordinate
 from pystencils.cache import memorycache
-from pystencils import Field
 from pystencils.fd import Diff
+from pystencils.field import Field
 from pystencils.transformations import generic_visit
-from .derivative import diff_args
+
 from .derivation import FiniteDifferenceStencilDerivation
+from .derivative import diff_args
 
 
 def fd_stencils_standard(indices, dx, fa):
diff --git a/pystencils/field.py b/pystencils/field.py
index 0c3af6dfa4edec15cb0f1cdff4822083eaacc017..5fa456c68f6b8dd4799ea7c73f346885da9814f4 100644
--- a/pystencils/field.py
+++ b/pystencils/field.py
@@ -1,17 +1,19 @@
+import hashlib
+import pickle
+import re
 from enum import Enum
 from itertools import chain
-from typing import Tuple, Sequence, Optional, List, Set
+from typing import List, Optional, Sequence, Set, Tuple
+
 import numpy as np
 import sympy as sp
-import re
 from sympy.core.cache import cacheit
+
 from pystencils.alignedarray import aligned_empty
-from pystencils.data_types import create_type, StructType
+from pystencils.data_types import StructType, create_type
 from pystencils.kernelparameters import FieldShapeSymbol, FieldStrideSymbol
-from pystencils.stencil import offset_to_direction_string, direction_string_to_offset
+from pystencils.stencil import direction_string_to_offset, offset_to_direction_string
 from pystencils.sympyextensions import is_integer_sequence
-import pickle
-import hashlib
 
 __all__ = ['Field', 'fields', 'FieldType', 'AbstractField']
 
diff --git a/pystencils/gpucuda/__init__.py b/pystencils/gpucuda/__init__.py
index 9b178c47023963ee47110d49cf83e93ba6a94420..e7be5452768f059dffdadf5a375f1dfce036efc9 100644
--- a/pystencils/gpucuda/__init__.py
+++ b/pystencils/gpucuda/__init__.py
@@ -1,5 +1,7 @@
-from pystencils.gpucuda.kernelcreation import create_cuda_kernel, created_indexed_cuda_kernel
 from pystencils.gpucuda.cudajit import make_python_function
+from pystencils.gpucuda.kernelcreation import create_cuda_kernel, created_indexed_cuda_kernel
+
 from .indexing import AbstractIndexing, BlockIndexing, LineIndexing
+
 __all__ = ['create_cuda_kernel', 'created_indexed_cuda_kernel', 'make_python_function',
            'AbstractIndexing', 'BlockIndexing', 'LineIndexing']
diff --git a/pystencils/gpucuda/cudajit.py b/pystencils/gpucuda/cudajit.py
index 21465433c68fb8e408aab5333ace42663e5ce002..92738e1e7df9c35dca87ff5f3de84ceeb5bcad8a 100644
--- a/pystencils/gpucuda/cudajit.py
+++ b/pystencils/gpucuda/cudajit.py
@@ -1,10 +1,10 @@
 import numpy as np
+
 from pystencils.backends.cbackend import generate_c, get_headers
-from pystencils.kernelparameters import FieldPointerSymbol
 from pystencils.data_types import StructType
 from pystencils.field import FieldType
 from pystencils.include import get_pystencils_include_path
-
+from pystencils.kernelparameters import FieldPointerSymbol
 
 USE_FAST_MATH = True
 
diff --git a/pystencils/gpucuda/indexing.py b/pystencils/gpucuda/indexing.py
index 5864c4f82bd488b2ac2844faf45210a620efe09a..f6f1fbe80c3da6c1dea78cf687fe96dc6810ec10 100644
--- a/pystencils/gpucuda/indexing.py
+++ b/pystencils/gpucuda/indexing.py
@@ -1,13 +1,14 @@
 import abc
+from functools import partial
 from typing import Tuple  # noqa
+
 import sympy as sp
-from pystencils.astnodes import Conditional, Block
+
+from pystencils.astnodes import Block, Conditional
+from pystencils.data_types import TypedSymbol, create_type
 from pystencils.integer_functions import div_ceil, div_floor
 from pystencils.slicing import normalize_slice
-from pystencils.data_types import TypedSymbol, create_type
-from functools import partial
-
-from pystencils.sympyextensions import prod, is_integer_sequence
+from pystencils.sympyextensions import is_integer_sequence, prod
 
 BLOCK_IDX = [TypedSymbol("blockIdx." + coord, create_type("int")) for coord in ('x', 'y', 'z')]
 THREAD_IDX = [TypedSymbol("threadIdx." + coord, create_type("int")) for coord in ('x', 'y', 'z')]
diff --git a/pystencils/gpucuda/kernelcreation.py b/pystencils/gpucuda/kernelcreation.py
index 2bc0327d644764402e22a481740979e17861f683..bc6de8d3a1982437bc236bfea6b8298d995caa4c 100644
--- a/pystencils/gpucuda/kernelcreation.py
+++ b/pystencils/gpucuda/kernelcreation.py
@@ -1,12 +1,11 @@
-from functools import partial
-
-from pystencils.gpucuda.indexing import BlockIndexing
-from pystencils.transformations import resolve_field_accesses, add_types, parse_base_pointer_info, \
-    get_common_shape, resolve_buffer_accesses, unify_shape_symbols, get_base_buffer_index
-from pystencils.astnodes import Block, KernelFunction, SympyAssignment, LoopOverCoordinate
-from pystencils.data_types import TypedSymbol, BasicType, StructType
-from pystencils import Field, FieldType
+from pystencils.astnodes import Block, KernelFunction, LoopOverCoordinate, SympyAssignment
+from pystencils.data_types import BasicType, StructType, TypedSymbol
+from pystencils.field import Field, FieldType
 from pystencils.gpucuda.cudajit import make_python_function
+from pystencils.gpucuda.indexing import BlockIndexing
+from pystencils.transformations import (
+    add_types, get_base_buffer_index, get_common_shape, parse_base_pointer_info,
+    resolve_buffer_accesses, resolve_field_accesses, unify_shape_symbols)
 
 
 def create_cuda_kernel(assignments, function_name="kernel", type_info=None, indexing_creator=BlockIndexing,
@@ -55,7 +54,7 @@ def create_cuda_kernel(assignments, function_name="kernel", type_info=None, inde
     block = indexing.guard(block, common_shape)
     unify_shape_symbols(block, common_shape=common_shape, fields=fields_without_buffers)
 
-    ast = KernelFunction(block, function_name=function_name, ghost_layers=ghost_layers, backend='gpucuda')
+    ast = KernelFunction(block, 'gpu', 'gpucuda', make_python_function, ghost_layers, function_name)
     ast.global_variables.update(indexing.index_variables)
 
     base_pointer_spec = [['spatialInner0']]
@@ -84,7 +83,6 @@ def create_cuda_kernel(assignments, function_name="kernel", type_info=None, inde
         ast.body.insert_front(SympyAssignment(loop_counter, indexing.coordinates[i]))
 
     ast.indexing = indexing
-    ast.compile = partial(make_python_function, ast)
     return ast
 
 
@@ -124,7 +122,7 @@ def created_indexed_cuda_kernel(assignments, index_fields, function_name="kernel
 
     function_body = Block(coordinate_symbol_assignments + assignments)
     function_body = indexing.guard(function_body, get_common_shape(index_fields))
-    ast = KernelFunction(function_body, function_name=function_name, backend='gpucuda')
+    ast = KernelFunction(function_body, 'gpu', 'gpucuda', make_python_function, function_name)
     ast.global_variables.update(indexing.index_variables)
 
     coord_mapping = indexing.coordinates
@@ -141,5 +139,4 @@ def created_indexed_cuda_kernel(assignments, index_fields, function_name="kernel
     # add the function which determines #blocks and #threads as additional member to KernelFunction node
     # this is used by the jit
     ast.indexing = indexing
-    ast.compile = partial(make_python_function, ast)
     return ast
diff --git a/pystencils/gpucuda/periodicity.py b/pystencils/gpucuda/periodicity.py
index 5657d4618623b421c0d3ef25a60774085d85bb32..e94a1796e3a66da626fc4e13fcc0413f5f93961d 100644
--- a/pystencils/gpucuda/periodicity.py
+++ b/pystencils/gpucuda/periodicity.py
@@ -1,8 +1,9 @@
 import numpy as np
-from pystencils import Field, Assignment
-from pystencils.slicing import normalize_slice, get_periodic_boundary_src_dst_slices
+
+from pystencils import Assignment, Field
 from pystencils.gpucuda import make_python_function
 from pystencils.gpucuda.kernelcreation import create_cuda_kernel
+from pystencils.slicing import get_periodic_boundary_src_dst_slices, normalize_slice
 
 
 def create_copy_kernel(domain_size, from_slice, to_slice, index_dimensions=0, index_dim_shape=1, dtype=np.float64):
diff --git a/pystencils/integer_functions.py b/pystencils/integer_functions.py
index 2fbc1ed673a230112ff7266922a7dc0f06a0eba2..4e583d9ab53469deef93c665c26876ae08364f4a 100644
--- a/pystencils/integer_functions.py
+++ b/pystencils/integer_functions.py
@@ -1,6 +1,6 @@
 import sympy as sp
 
-from pystencils.data_types import get_type_of_expression, collate_types
+from pystencils.data_types import collate_types, get_type_of_expression
 from pystencils.sympyextensions import is_integer_sequence
 
 bitwise_xor = sp.Function("bitwise_xor")
diff --git a/pystencils/integer_set_analysis.py b/pystencils/integer_set_analysis.py
index fc4a60b130f2671907e938020527580f0078e280..3560ba6ca1ad3f10ba456564aa74669273ef8dae 100644
--- a/pystencils/integer_set_analysis.py
+++ b/pystencils/integer_set_analysis.py
@@ -1,7 +1,7 @@
 """Transformations using integer sets based on ISL library"""
 
-import sympy as sp
 import islpy as isl
+import sympy as sp
 
 import pystencils.astnodes as ast
 from pystencils.transformations import parents_of_type
diff --git a/pystencils/jupyter.py b/pystencils/jupyter.py
index 08d71a4cdd56606b60a6333c5e1279053d57474b..f977e87c0b9c1b835eccf6670c4e4ec63eccd086 100644
--- a/pystencils/jupyter.py
+++ b/pystencils/jupyter.py
@@ -1,9 +1,11 @@
-import pystencils.plot as plt
-import matplotlib.animation as animation
-from IPython.display import HTML
-from tempfile import NamedTemporaryFile
 import base64
+from tempfile import NamedTemporaryFile
+
+import matplotlib.animation as animation
 import sympy as sp
+from IPython.display import HTML
+
+import pystencils.plot as plt
 
 __all__ = ['log_progress', 'make_imshow_animation', 'display_animation', 'set_display_mode']
 
diff --git a/pystencils/kerncraft_coupling/__init__.py b/pystencils/kerncraft_coupling/__init__.py
index 7822b3b540cef889035ca0654efcf374eab73469..8d2c3ad506692ad52c265ff61bb616fce6021f4e 100644
--- a/pystencils/kerncraft_coupling/__init__.py
+++ b/pystencils/kerncraft_coupling/__init__.py
@@ -1,4 +1,4 @@
-from .kerncraft_interface import PyStencilsKerncraftKernel, KerncraftParameters
 from .generate_benchmark import generate_benchmark, run_c_benchmark
+from .kerncraft_interface import KerncraftParameters, PyStencilsKerncraftKernel
 
 __all__ = ['PyStencilsKerncraftKernel', 'KerncraftParameters', 'generate_benchmark', 'run_c_benchmark']
diff --git a/pystencils/kerncraft_coupling/generate_benchmark.py b/pystencils/kerncraft_coupling/generate_benchmark.py
index f63be049a1fcfb2e6a5867bc8f7dc94123759165..c95c420d6c62d4428354f934a4e36fb7e7398b9d 100644
--- a/pystencils/kerncraft_coupling/generate_benchmark.py
+++ b/pystencils/kerncraft_coupling/generate_benchmark.py
@@ -1,12 +1,14 @@
-from jinja2 import Template
 import os
 import subprocess
-from pystencils.include import get_pystencils_include_path
-from pystencils.cpu.cpujit import get_compiler_config, run_compile_step
+
+from jinja2 import Template
+
+from pystencils.astnodes import PragmaBlock
 from pystencils.backends.cbackend import generate_c, get_headers
-from pystencils.sympyextensions import prod
+from pystencils.cpu.cpujit import get_compiler_config, run_compile_step
 from pystencils.data_types import get_base_type
-from pystencils.astnodes import PragmaBlock
+from pystencils.include import get_pystencils_include_path
+from pystencils.sympyextensions import prod
 
 benchmark_template = Template("""
 #include "kerncraft.h"
diff --git a/pystencils/kerncraft_coupling/kerncraft_interface.py b/pystencils/kerncraft_coupling/kerncraft_interface.py
index b58ccb96a28af75994837183b400807fbde9acb1..37a5109de80b0c975a5cb30043316e1c1e8e9e9e 100644
--- a/pystencils/kerncraft_coupling/kerncraft_interface.py
+++ b/pystencils/kerncraft_coupling/kerncraft_interface.py
@@ -1,19 +1,20 @@
+import warnings
+from collections import defaultdict
 from tempfile import TemporaryDirectory
+from typing import Optional
 
-import sympy as sp
-from collections import defaultdict
 import kerncraft
+import sympy as sp
 from kerncraft.kerncraft import KernelCode
-from typing import Optional
 from kerncraft.machinemodel import MachineModel
 
-from pystencils.kerncraft_coupling.generate_benchmark import generate_benchmark
-from pystencils.astnodes import LoopOverCoordinate, SympyAssignment, ResolvedFieldAccess, KernelFunction
+from pystencils.astnodes import (
+    KernelFunction, LoopOverCoordinate, ResolvedFieldAccess, SympyAssignment)
 from pystencils.field import get_layout_from_strides
+from pystencils.kerncraft_coupling.generate_benchmark import generate_benchmark
 from pystencils.sympyextensions import count_operations_in_ast
 from pystencils.transformations import filtered_tree_iteration
 from pystencils.utils import DotDict
-import warnings
 
 
 class PyStencilsKerncraftKernel(KernelCode):
diff --git a/pystencils/kernel_decorator.py b/pystencils/kernel_decorator.py
index 0063865b22b5a84839990637f3bdafad18e8d711..1ea8dcfbc4c671d8d0ba5634f2c55a93a39d9f23 100644
--- a/pystencils/kernel_decorator.py
+++ b/pystencils/kernel_decorator.py
@@ -1,9 +1,11 @@
 import ast
 import inspect
-import sympy as sp
 import textwrap
-from pystencils.sympyextensions import SymbolCreator
+
+import sympy as sp
+
 from pystencils.assignment import Assignment
+from pystencils.sympyextensions import SymbolCreator
 
 __all__ = ['kernel']
 
diff --git a/pystencils/kernelcreation.py b/pystencils/kernelcreation.py
index e8de7d2455ab159df5d9bb496c7abd410b60b6c0..ade980f55969a4005f2c5055ad27f861ab5524de 100644
--- a/pystencils/kernelcreation.py
+++ b/pystencils/kernelcreation.py
@@ -1,13 +1,15 @@
+import itertools
 from types import MappingProxyType
+
 import sympy as sp
-import itertools
+
 from pystencils.assignment import Assignment
-from pystencils.astnodes import LoopOverCoordinate, Conditional, Block, SympyAssignment
+from pystencils.astnodes import Block, Conditional, LoopOverCoordinate, SympyAssignment
 from pystencils.cpu.vectorization import vectorize
-from pystencils.simp.assignment_collection import AssignmentCollection
 from pystencils.gpucuda.indexing import indexing_creator_from_params
-from pystencils.transformations import remove_conditionals_in_staggered_kernel, loop_blocking, \
-    move_constants_before_loop
+from pystencils.simp.assignment_collection import AssignmentCollection
+from pystencils.transformations import (
+    loop_blocking, move_constants_before_loop, remove_conditionals_in_staggered_kernel)
 
 
 def create_kernel(assignments, target='cpu', data_type="double", iteration_slice=None, ghost_layers=None,
diff --git a/pystencils/kernelparameters.py b/pystencils/kernelparameters.py
index f6e19ef83def4331d0c3f4c3a45d08605263e984..11d30e09c8e351cb67ed3f7c3020c9243fba7557 100644
--- a/pystencils/kernelparameters.py
+++ b/pystencils/kernelparameters.py
@@ -14,7 +14,9 @@ e.g. `FieldShapeSymbol`, since a Field contains `FieldShapeSymbol`s in its shape
 would reference back to the field.
 """
 from sympy.core.cache import cacheit
-from pystencils.data_types import TypedSymbol, create_composite_type_from_string, PointerType, get_base_type
+
+from pystencils.data_types import (
+    PointerType, TypedSymbol, create_composite_type_from_string, get_base_type)
 
 SHAPE_DTYPE = create_composite_type_from_string("const int64")
 STRIDE_DTYPE = create_composite_type_from_string("const int64")
diff --git a/pystencils/llvm/kernelcreation.py b/pystencils/llvm/kernelcreation.py
index bb822b48131dd5ca5cc344d52a28fd2125ebe9d1..38ac7fe6be818729eae3a935a4c14003f066e849 100644
--- a/pystencils/llvm/kernelcreation.py
+++ b/pystencils/llvm/kernelcreation.py
@@ -1,6 +1,5 @@
-from pystencils.transformations import insert_casts
-from functools import partial
 from pystencils.llvm.llvmjit import make_python_function
+from pystencils.transformations import insert_casts
 
 
 def create_kernel(assignments, function_name="kernel", type_info=None, split_groups=(),
@@ -10,23 +9,25 @@ def create_kernel(assignments, function_name="kernel", type_info=None, split_gro
 
     Loops are created according to the field accesses in the equations.
 
-    :param assignments: list of sympy equations, containing accesses to :class:`pystencils.field.Field`.
-           Defining the update rules of the kernel
-    :param function_name: name of the generated function - only important if generated code is written out
-    :param type_info: a map from symbol name to a C type specifier. If not specified all symbols are assumed to
-           be of type 'double' except symbols which occur on the left hand side of equations where the
-           right hand side is a sympy Boolean which are assumed to be 'bool' .
-    :param split_groups: Specification on how to split up inner loop into multiple loops. For details see
-           transformation :func:`pystencils.transformation.split_inner_loop`
-    :param iteration_slice: if not None, iteration is done only over this slice of the field
-    :param ghost_layers: a sequence of pairs for each coordinate with lower and upper nr of ghost layers
-                        if None, the number of ghost layers is determined automatically and assumed to be equal for a
-                        all dimensions
+    Args:
+    assignments: list of sympy equations, containing accesses to :class:`pystencils.field.Field`.
+                 Defining the update rules of the kernel
+    function_name: name of the generated function - only important if generated code is written out
+                   type_info: a map from symbol name to a C type specifier. If not specified all symbols are assumed to
+                   be of type 'double' except symbols which occur on the left hand side of equations where the
+                   right hand side is a sympy Boolean which are assumed to be 'bool' .
+    split_groups: Specification on how to split up inner loop into multiple loops. For details see
+                  transformation :func:`pystencils.transformation.split_inner_loop`
+    iteration_slice: if not None, iteration is done only over this slice of the field
+    ghost_layers: a sequence of pairs for each coordinate with lower and upper nr of ghost layers
+                 if None, the number of ghost layers is determined automatically and assumed to be equal for a
+                 all dimensions
 
     :return: :class:`pystencils.ast.KernelFunction` node
     """
     from pystencils.cpu import create_kernel
     code = create_kernel(assignments, function_name, type_info, split_groups, iteration_slice, ghost_layers)
-    code = insert_casts(code)
-    code.compile = partial(make_python_function, code)
+    code.body = insert_casts(code.body)
+    code._compile_function = make_python_function
+    code._backend = 'llvm'
     return code
diff --git a/pystencils/llvm/llvm.py b/pystencils/llvm/llvm.py
index c71fb5ab666fcb15b94bfe30af2611edbdfe3322..cf2207c0831f0d365033dc25ee4c3c701af9940e 100644
--- a/pystencils/llvm/llvm.py
+++ b/pystencils/llvm/llvm.py
@@ -1,12 +1,15 @@
-import sympy as sp
 import functools
-from sympy import S, Indexed
-from sympy.printing.printer import Printer
+
 import llvmlite.ir as ir
+import sympy as sp
+from sympy import Indexed, S
+from sympy.printing.printer import Printer
+
 from pystencils.assignment import Assignment
+from pystencils.data_types import (
+    collate_types, create_composite_type_from_string, create_type, get_type_of_expression,
+    to_llvm_type)
 from pystencils.llvm.control_flow import Loop
-from pystencils.data_types import create_type, to_llvm_type, get_type_of_expression, collate_types, \
-    create_composite_type_from_string
 
 
 def generate_llvm(ast_node, module=None, builder=None):
diff --git a/pystencils/llvm/llvmjit.py b/pystencils/llvm/llvmjit.py
index 545454cb9bb98bf29de3881260cd70962de62ed2..6dc40151e4495d5fa67f9c6081a442a558b1d09a 100644
--- a/pystencils/llvm/llvmjit.py
+++ b/pystencils/llvm/llvmjit.py
@@ -1,12 +1,15 @@
-import llvmlite.ir as ir
+import ctypes as ct
+
 import llvmlite.binding as llvm
+import llvmlite.ir as ir
 import numpy as np
-import ctypes as ct
+
 from pystencils.data_types import create_composite_type_from_string
-from ..data_types import to_ctypes, ctypes_from_llvm, StructType
-from .llvm import generate_llvm
 from pystencils.field import FieldType
 
+from ..data_types import StructType, ctypes_from_llvm, to_ctypes
+from .llvm import generate_llvm
+
 
 def build_ctypes_argument_list(parameter_specification, argument_dict):
     argument_dict = {k: v for k, v in argument_dict.items()}
diff --git a/pystencils/placeholder_function.py b/pystencils/placeholder_function.py
index aca93d16937d7efa37668b3c15d03f4aa7069166..18a0574b82292ecd9da0bff50f68d86811b472c7 100644
--- a/pystencils/placeholder_function.py
+++ b/pystencils/placeholder_function.py
@@ -1,5 +1,7 @@
-import sympy as sp
 from typing import List
+
+import sympy as sp
+
 from pystencils.assignment import Assignment
 from pystencils.astnodes import Node
 from pystencils.sympyextensions import is_constant
diff --git a/pystencils/plot.py b/pystencils/plot.py
index 24a8cdce7b9895b176985aef8d89a1fdff668a61..de1b1e32ebdf1ffd036ed1f95bb564485c91b7a0 100644
--- a/pystencils/plot.py
+++ b/pystencils/plot.py
@@ -3,9 +3,10 @@ This module extends the pyplot module with functions to show scalar and vector f
 simulation coordinate system (y-axis goes up), instead of the "image coordinate system" (y axis goes down) that
 matplotlib normally uses.
 """
-from matplotlib.pyplot import *
 from itertools import cycle
 
+from matplotlib.pyplot import *
+
 
 def vector_field(array, step=2, **kwargs):
     """Plots given vector field as quiver (arrow) plot.
diff --git a/pystencils/rng.py b/pystencils/rng.py
index 7e84e23f0ec0da3e0a5200df085d589ff9bbc7bd..eae916410eee6246b4cefcc11c31f9f0210e2ad9 100644
--- a/pystencils/rng.py
+++ b/pystencils/rng.py
@@ -1,5 +1,6 @@
-import sympy as sp
 import numpy as np
+import sympy as sp
+
 from pystencils import TypedSymbol
 from pystencils.astnodes import LoopOverCoordinate
 from pystencils.backends.cbackend import CustomCodeNode
diff --git a/pystencils/runhelper/db.py b/pystencils/runhelper/db.py
index e0655db3238b4ea9f4d70fb47695201bb0f00c38..acf5c6f7436fe43c76336deb709be635b5cec990 100644
--- a/pystencils/runhelper/db.py
+++ b/pystencils/runhelper/db.py
@@ -1,7 +1,9 @@
-import time
 import socket
-from typing import Dict, Sequence, Iterator
+import time
+from typing import Dict, Iterator, Sequence
+
 import blitzdb
+
 from pystencils.cpu.cpujit import get_compiler_config
 
 
diff --git a/pystencils/runhelper/parameterstudy.py b/pystencils/runhelper/parameterstudy.py
index 22d2bf2e3964e176a4e86895b2684ab508f170f5..0ad27fd5bdd426b74c515a37d500da29eb805864 100644
--- a/pystencils/runhelper/parameterstudy.py
+++ b/pystencils/runhelper/parameterstudy.py
@@ -1,16 +1,16 @@
-import json
 import datetime
+import itertools
+import json
 import os
 import socket
-import itertools
-from copy import deepcopy
 from collections import namedtuple
+from copy import deepcopy
 from time import sleep
-from typing import Dict, Callable, Sequence, Any, Tuple, Optional
+from typing import Any, Callable, Dict, Optional, Sequence, Tuple
+
 from pystencils.runhelper import Database
 from pystencils.utils import DotDict
 
-
 ParameterDict = Dict[str, Any]
 WeightFunction = Callable[[Dict], int]
 FilterFunction = Callable[[ParameterDict], Optional[ParameterDict]]
diff --git a/pystencils/session.py b/pystencils/session.py
index 53287ee9e444c31c355f5e90727615e6c198fa5a..51d2ef627282dba4caea1da53c2132c5ee97aca6 100644
--- a/pystencils/session.py
+++ b/pystencils/session.py
@@ -1,9 +1,9 @@
-import pystencils.sympy_gmpy_bug_workaround
-import pystencils.jupyter
-import sympy as sp
 import numpy as np
+import sympy as sp
+
 import pystencils as ps
+import pystencils.jupyter
 import pystencils.plot as plt
-
+import pystencils.sympy_gmpy_bug_workaround
 
 __all__ = ['sp', 'np', 'ps', 'plt']
diff --git a/pystencils/simp/__init__.py b/pystencils/simp/__init__.py
index 36efb062ded6ff27f2594193156762b3682e7932..ab0d608fb8efcd659d8811ef0e274f28e72c1cf0 100644
--- a/pystencils/simp/__init__.py
+++ b/pystencils/simp/__init__.py
@@ -1,8 +1,10 @@
 from .assignment_collection import AssignmentCollection
+from .simplifications import (
+    add_subexpressions_for_divisions, add_subexpressions_for_field_reads,
+    apply_on_all_subexpressions, apply_to_all_assignments,
+    subexpression_substitution_in_existing_subexpressions,
+    subexpression_substitution_in_main_assignments, sympy_cse, sympy_cse_on_assignment_list)
 from .simplificationstrategy import SimplificationStrategy
-from .simplifications import sympy_cse, sympy_cse_on_assignment_list, \
-    apply_to_all_assignments, apply_on_all_subexpressions, subexpression_substitution_in_existing_subexpressions, \
-    subexpression_substitution_in_main_assignments, add_subexpressions_for_divisions, add_subexpressions_for_field_reads
 
 __all__ = ['AssignmentCollection', 'SimplificationStrategy',
            'sympy_cse', 'sympy_cse_on_assignment_list', 'apply_to_all_assignments',
diff --git a/pystencils/simp/assignment_collection.py b/pystencils/simp/assignment_collection.py
index 8f0b481ce57aed9c1d64e62f062a6ed0f1c4168d..b15b87a4fc948c1fd86add59c64d5b16dce89afa 100644
--- a/pystencils/simp/assignment_collection.py
+++ b/pystencils/simp/assignment_collection.py
@@ -1,8 +1,10 @@
-import sympy as sp
 from copy import copy
-from typing import List, Optional, Dict, Any, Set, Sequence, Iterator, Iterable, Union
+from typing import Any, Dict, Iterable, Iterator, List, Optional, Sequence, Set, Union
+
+import sympy as sp
+
 from pystencils.assignment import Assignment
-from pystencils.sympyextensions import fast_subs, count_operations, sort_assignments_topologically
+from pystencils.sympyextensions import count_operations, fast_subs, sort_assignments_topologically
 
 
 class AssignmentCollection:
diff --git a/pystencils/simp/simplifications.py b/pystencils/simp/simplifications.py
index d6077b8f6b494819289e7fbe1e4ce599b2cdac2d..22ff1bee22a25a66d00e51700dc07cf2b86856d7 100644
--- a/pystencils/simp/simplifications.py
+++ b/pystencils/simp/simplifications.py
@@ -1,9 +1,9 @@
-import sympy as sp
 from typing import Callable, List
 
-from pystencils import Field
+import sympy as sp
+
 from pystencils.assignment import Assignment
-from pystencils.field import AbstractField
+from pystencils.field import AbstractField, Field
 from pystencils.simp.assignment_collection import AssignmentCollection
 from pystencils.sympyextensions import subs_additive
 
diff --git a/pystencils/simp/simplificationstrategy.py b/pystencils/simp/simplificationstrategy.py
index f80734bab97f7f2e4c3db8baba6e8aa6af15002e..d9bcafa46262d4a9132e238666823556dfe20b23 100644
--- a/pystencils/simp/simplificationstrategy.py
+++ b/pystencils/simp/simplificationstrategy.py
@@ -1,6 +1,8 @@
-import sympy as sp
 from collections import namedtuple
-from typing import Callable, Any, Optional, Sequence
+from typing import Any, Callable, Optional, Sequence
+
+import sympy as sp
+
 from pystencils.simp.assignment_collection import AssignmentCollection
 
 
diff --git a/pystencils/slicing.py b/pystencils/slicing.py
index 0fab3678c7fbc6de5a61da2f47d07f46fb8e857a..2f44a00a91ba42d4fc6834a20fb21023080e4653 100644
--- a/pystencils/slicing.py
+++ b/pystencils/slicing.py
@@ -1,4 +1,5 @@
 import sympy as sp
+
 from pystencils.field import create_numpy_array_with_layout, get_layout_of_array
 
 
diff --git a/pystencils/stencil.py b/pystencils/stencil.py
index a6224e0792bdaa0e0eb4650173b2d43faa4816fd..f2201ccc1153e2a1fb65da38eec44d7bdbeeb275 100644
--- a/pystencils/stencil.py
+++ b/pystencils/stencil.py
@@ -1,8 +1,9 @@
 """This submodule offers functions to work with stencils in expression an offset-list form."""
+from collections import defaultdict
 from typing import Sequence
+
 import numpy as np
 import sympy as sp
-from collections import defaultdict
 
 
 def inverse_direction(direction):
@@ -91,7 +92,7 @@ def coefficient_dict(expr):
         >>> sorted(coeffs.items())
         [((-1, 0), 3), ((0, 1), 2)]
     """
-    from pystencils import Field
+    from pystencils.field import Field
     expr = expr.expand()
     field_accesses = expr.atoms(Field.Access)
     fields = set(fa.field for fa in field_accesses)
diff --git a/pystencils/sympyextensions.py b/pystencils/sympyextensions.py
index 6df8eedab803766895f4ffccd808caec22c29cce..2741f7ca51f1d3a7503c821e9ca183ac349ac859 100644
--- a/pystencils/sympyextensions.py
+++ b/pystencils/sympyextensions.py
@@ -1,13 +1,15 @@
 import itertools
-import warnings
 import operator
-from functools import reduce, partial
-from collections import defaultdict, Counter
+import warnings
+from collections import Counter, defaultdict
+from functools import partial, reduce
+from typing import Callable, Dict, Iterable, List, Optional, Sequence, Tuple, TypeVar, Union
+
 import sympy as sp
 from sympy.functions import Abs
-from typing import Optional, Union, List, TypeVar, Iterable, Sequence, Callable, Dict, Tuple
-from pystencils.data_types import get_type_of_expression, get_base_type, cast_func
+
 from pystencils.assignment import Assignment
+from pystencils.data_types import cast_func, get_base_type, get_type_of_expression
 
 T = TypeVar('T')
 
diff --git a/pystencils/transformations.py b/pystencils/transformations.py
index 8f05b20f416ff9de8c3da94945afb8881be7ba86..60a22d812578db85d7f375a74144352e431ffc62 100644
--- a/pystencils/transformations.py
+++ b/pystencils/transformations.py
@@ -1,19 +1,22 @@
+import hashlib
+import pickle
 import warnings
-from collections import defaultdict, OrderedDict, namedtuple
+from collections import OrderedDict, defaultdict, namedtuple
 from copy import deepcopy
 from types import MappingProxyType
-import pickle
-import hashlib
+
 import sympy as sp
 from sympy.logic.boolalg import Boolean
-from pystencils.simp.assignment_collection import AssignmentCollection
+
+import pystencils.astnodes as ast
 from pystencils.assignment import Assignment
-from pystencils.field import AbstractField, FieldType, Field
-from pystencils.data_types import TypedSymbol, PointerType, StructType, get_base_type, reinterpret_cast_func, \
-    cast_func, pointer_arithmetic_func, get_type_of_expression, collate_types, create_type
+from pystencils.data_types import (
+    PointerType, StructType, TypedSymbol, cast_func, collate_types, create_type, get_base_type,
+    get_type_of_expression, pointer_arithmetic_func, reinterpret_cast_func)
+from pystencils.field import AbstractField, Field, FieldType
 from pystencils.kernelparameters import FieldPointerSymbol
+from pystencils.simp.assignment_collection import AssignmentCollection
 from pystencils.slicing import normalize_slice
-import pystencils.astnodes as ast
 
 
 class NestedScopes:
@@ -143,12 +146,11 @@ def get_common_shape(field_set):
     return shape
 
 
-def make_loop_over_domain(body, function_name, iteration_slice=None, ghost_layers=None, loop_order=None):
+def make_loop_over_domain(body, iteration_slice=None, ghost_layers=None, loop_order=None):
     """Uses :class:`pystencils.field.Field.Access` to create (multiple) loops around given AST.
 
     Args:
         body: Block object with inner loop contents
-        function_name: name of generated C function
         iteration_slice: if not None, iteration is done only over this slice of the field
         ghost_layers: a sequence of pairs for each coordinate with lower and upper nr of ghost layers
              if None, the number of ghost layers is determined automatically and assumed to be equal for a
@@ -156,7 +158,7 @@ def make_loop_over_domain(body, function_name, iteration_slice=None, ghost_layer
         loop_order: loop ordering from outer to inner loop (optimal ordering is same as layout)
 
     Returns:
-        :class:`LoopOverCoordinate` instance with nested loops, ordered according to field layouts
+        tuple of loop-node, ghost_layer_info
     """
     # find correct ordering by inspecting participating FieldAccesses
     field_accesses = body.atoms(AbstractField.AbstractAccess)
@@ -199,8 +201,7 @@ def make_loop_over_domain(body, function_name, iteration_slice=None, ghost_layer
                                                  sp.sympify(slice_component))
                 current_body.insert_front(assignment)
 
-    ast_node = ast.KernelFunction(current_body, ghost_layers=ghost_layers, function_name=function_name, backend='cpu')
-    return ast_node
+    return current_body, ghost_layers
 
 
 def create_intermediate_base_pointer(field_access, coordinates, previous_ptr):
diff --git a/pystencils/utils.py b/pystencils/utils.py
index 6e620b5f28ff6aee874d666e0881d889c1fdf033..5b97f7f24dbb33b14a324ca23ba9b676eab0057a 100644
--- a/pystencils/utils.py
+++ b/pystencils/utils.py
@@ -1,11 +1,11 @@
 import os
-from tempfile import NamedTemporaryFile
+from collections import Counter
 from contextlib import contextmanager
+from tempfile import NamedTemporaryFile
 from typing import Mapping
-from collections import Counter
 
-import sympy as sp
 import numpy as np
+import sympy as sp
 
 
 class DotDict(dict):
diff --git a/pystencils_tests/benchmark/benchmark.py b/pystencils_tests/benchmark/benchmark.py
index 6ecb6aaa828f9a2c42d53e09c4190ea11ee8cb84..29066127cea347299dfc3f52825a1ddf5d75e247 100644
--- a/pystencils_tests/benchmark/benchmark.py
+++ b/pystencils_tests/benchmark/benchmark.py
@@ -1,15 +1,17 @@
-import os
 import math
+import os
 import time
+
 import numpy as np
 import sympy as sp
-from influxdb import InfluxDBClient
 from git import Repo
-from kerncraft.models import ECM, Benchmark, Roofline, RooflineIACA
+from influxdb import InfluxDBClient
 from kerncraft.machinemodel import MachineModel
+from kerncraft.models import ECM, Benchmark, Roofline, RooflineIACA
 from kerncraft.prefixedunit import PrefixedUnit
+
+from pystencils import Assignment, Field, create_kernel
 from pystencils.kerncraft_coupling import KerncraftParameters, PyStencilsKerncraftKernel
-from pystencils import Field, Assignment, create_kernel
 
 
 def output_benchmark(analysis):
diff --git a/pystencils_tests/benchmark/generate.py b/pystencils_tests/benchmark/generate.py
index 09e2769e2289525089e92649e48713cc5e9e593d..fba398489ce1f19982ae1a3611bc5437f204af6b 100644
--- a/pystencils_tests/benchmark/generate.py
+++ b/pystencils_tests/benchmark/generate.py
@@ -1,6 +1,7 @@
-import sympy as sp
 import numpy as np
-from pystencils import Field, Assignment, create_kernel
+import sympy as sp
+
+from pystencils import Assignment, Field, create_kernel
 
 
 def meassure():
@@ -47,5 +48,3 @@ def meassure():
 
 if __name__ == "__main__":
     meassure()
-
-
diff --git a/pystencils_tests/test_address_of.py b/pystencils_tests/test_address_of.py
index 8de48e2bb0783dc66452a0bf31a7a7529d8d8292..6e23d5ffd6513cba16acb2d711a9de0cf16c222e 100644
--- a/pystencils_tests/test_address_of.py
+++ b/pystencils_tests/test_address_of.py
@@ -3,10 +3,11 @@
 Test of pystencils.data_types.address_of
 """
 
-from pystencils.data_types import address_of, cast_func, PointerType
+import sympy
+
 import pystencils
+from pystencils.data_types import PointerType, address_of, cast_func
 from pystencils.simp.simplifications import sympy_cse
-import sympy
 
 
 def test_address_of():
diff --git a/pystencils_tests/test_assignment_collection.py b/pystencils_tests/test_assignment_collection.py
index 4bf27b22e9a2a6ff7dc6f7944841bf61e8679542..1a8f6f9dc5b4f7091e302741ff73b9994f4ed3a2 100644
--- a/pystencils_tests/test_assignment_collection.py
+++ b/pystencils_tests/test_assignment_collection.py
@@ -1,4 +1,5 @@
 import sympy as sp
+
 from pystencils import Assignment, AssignmentCollection
 from pystencils.simp.assignment_collection import SymbolGen
 
diff --git a/pystencils_tests/test_assignment_from_stencil.py b/pystencils_tests/test_assignment_from_stencil.py
index b3b193f8e1966e963dbf8d3815e98cfebb641e2d..a4bb705d693403af3ea8cc3d44142f52d92b8668 100644
--- a/pystencils_tests/test_assignment_from_stencil.py
+++ b/pystencils_tests/test_assignment_from_stencil.py
@@ -1,6 +1,7 @@
-import pystencils
 import numpy as np
 
+import pystencils
+
 
 def test_assignment_from_stencil():
 
diff --git a/pystencils_tests/test_blocking.py b/pystencils_tests/test_blocking.py
index c554da74daefc618850028595c30a9eb1cf2754a..579ba41997cec4990ad4da00ae811cdb0b564bd2 100644
--- a/pystencils_tests/test_blocking.py
+++ b/pystencils_tests/test_blocking.py
@@ -1,5 +1,6 @@
-import sympy as sp
 import numpy as np
+import sympy as sp
+
 import pystencils as ps
 
 
@@ -58,4 +59,3 @@ def test_jacobi3d_fixed_size():
     arr = np.empty([8*4, 16*2, 4*3])
     src, dst = ps.fields("src, dst: double[3D]", src=arr, dst=arr)
     check_equivalence(jacobi(dst, src), arr)
-
diff --git a/pystencils_tests/test_blocking_staggered.py b/pystencils_tests/test_blocking_staggered.py
index d32e601736721f4a4be4cb69da582672fa3e22c1..207d05a280f790c5c0b74a50e7ecfb252bd04276 100644
--- a/pystencils_tests/test_blocking_staggered.py
+++ b/pystencils_tests/test_blocking_staggered.py
@@ -1,4 +1,5 @@
 import numpy as np
+
 import pystencils as ps
 
 
diff --git a/pystencils_tests/test_boundary.py b/pystencils_tests/test_boundary.py
index 6aaf4e696bd27766ae0fc06186fa6521e6d9a8e7..096b1348fc59181e14eb15042d8db0098e71c521 100644
--- a/pystencils_tests/test_boundary.py
+++ b/pystencils_tests/test_boundary.py
@@ -1,9 +1,10 @@
-from tempfile import TemporaryDirectory
 import os
+from tempfile import TemporaryDirectory
+
 import numpy as np
 
-from pystencils import create_kernel, Assignment
-from pystencils.boundaries import add_neumann_boundary, Neumann, BoundaryHandling
+from pystencils import Assignment, create_kernel
+from pystencils.boundaries import BoundaryHandling, Neumann, add_neumann_boundary
 from pystencils.datahandling import SerialDataHandling
 from pystencils.slicing import slice_from_direction
 
diff --git a/pystencils_tests/test_buffer.py b/pystencils_tests/test_buffer.py
index 3f513a1f5a8dc298b7ed085aaa0289e6de096405..7ea7fd2a19759201f9a6ebd6a63877a29675710e 100644
--- a/pystencils_tests/test_buffer.py
+++ b/pystencils_tests/test_buffer.py
@@ -1,11 +1,12 @@
 """Tests  (un)packing (from)to buffers."""
 
 import numpy as np
-from pystencils import Field, FieldType, Assignment, create_kernel
-from pystencils.field import layout_string_to_tuple, create_numpy_array_with_layout
-from pystencils.stencil import direction_string_to_offset
-from pystencils.slicing import add_ghost_layers, get_slice_before_ghost_layer, get_ghost_region_slice
 
+from pystencils import Assignment, Field, FieldType, create_kernel
+from pystencils.field import create_numpy_array_with_layout, layout_string_to_tuple
+from pystencils.slicing import (
+    add_ghost_layers, get_ghost_region_slice, get_slice_before_ghost_layer)
+from pystencils.stencil import direction_string_to_offset
 
 FIELD_SIZES = [(32, 10), (10, 8, 6)]
 
diff --git a/pystencils_tests/test_buffer_gpu.py b/pystencils_tests/test_buffer_gpu.py
index 1af0e6cf5b9add003c33e84d847457064898d4c3..fc27a2331be1690b8bb1d0da043b47b3ba6fcfc9 100644
--- a/pystencils_tests/test_buffer_gpu.py
+++ b/pystencils_tests/test_buffer_gpu.py
@@ -1,12 +1,15 @@
 """Tests for the (un)packing (from)to buffers on a CUDA GPU."""
 
 import numpy as np
-from pystencils import Field, FieldType, Assignment
-from pystencils.field import layout_string_to_tuple, create_numpy_array_with_layout
-from pystencils.stencil import direction_string_to_offset
-from pystencils.gpucuda import make_python_function, create_cuda_kernel
-from pystencils.slicing import add_ghost_layers, get_slice_before_ghost_layer, get_ghost_region_slice
 import pytest
+
+from pystencils import Assignment, Field, FieldType
+from pystencils.field import create_numpy_array_with_layout, layout_string_to_tuple
+from pystencils.gpucuda import create_cuda_kernel, make_python_function
+from pystencils.slicing import (
+    add_ghost_layers, get_ghost_region_slice, get_slice_before_ghost_layer)
+from pystencils.stencil import direction_string_to_offset
+
 try:
     # noinspection PyUnresolvedReferences
     import pycuda.autoinit
diff --git a/pystencils_tests/test_conditional_vec.py b/pystencils_tests/test_conditional_vec.py
index b66cffcb862ca1332aa735373e44c8249f9d64c4..d3fc3dc66b4254e4b78a7699ce23316afb830132 100644
--- a/pystencils_tests/test_conditional_vec.py
+++ b/pystencils_tests/test_conditional_vec.py
@@ -1,7 +1,8 @@
-import pystencils as ps
-import sympy as sp
 import numpy as np
-from pystencils.astnodes import Conditional, Block
+import sympy as sp
+
+import pystencils as ps
+from pystencils.astnodes import Block, Conditional
 from pystencils.cpu.vectorization import vec_all, vec_any
 
 
diff --git a/pystencils_tests/test_cudagpu.py b/pystencils_tests/test_cudagpu.py
index ad13ac96f3d36c6c5480bfdd33c957b7722063e9..77790229f48b736258d343a4670c06e66a417838 100644
--- a/pystencils_tests/test_cudagpu.py
+++ b/pystencils_tests/test_cudagpu.py
@@ -1,13 +1,14 @@
 import numpy as np
-import sympy as sp
-from pystencils import Field, Assignment, fields
-from pystencils.simp import sympy_cse_on_assignment_list
-from pystencils.gpucuda.indexing import LineIndexing
-from pystencils.slicing import remove_ghost_layers, add_ghost_layers, make_slice
-from pystencils.gpucuda import make_python_function, create_cuda_kernel, BlockIndexing
 import pycuda.gpuarray as gpuarray
+import sympy as sp
 from scipy.ndimage import convolve
 
+from pystencils import Assignment, Field, fields
+from pystencils.gpucuda import BlockIndexing, create_cuda_kernel, make_python_function
+from pystencils.gpucuda.indexing import LineIndexing
+from pystencils.simp import sympy_cse_on_assignment_list
+from pystencils.slicing import add_ghost_layers, make_slice, remove_ghost_layers
+
 
 def test_averaging_kernel():
     size = (40, 55)
diff --git a/pystencils_tests/test_datahandling.py b/pystencils_tests/test_datahandling.py
index 887c855dbb1c0be11847f0d3a34f849edea08ce9..cdee059c218a67ad9adc824f41fa09ae3df2f19b 100644
--- a/pystencils_tests/test_datahandling.py
+++ b/pystencils_tests/test_datahandling.py
@@ -1,8 +1,10 @@
-import numpy as np
 import os
 from tempfile import TemporaryDirectory
+
+import numpy as np
+
 import pystencils as ps
-from pystencils import create_kernel, create_data_handling
+from pystencils import create_data_handling, create_kernel
 
 
 def basic_iteration(dh):
diff --git a/pystencils_tests/test_datahandling_parallel.py b/pystencils_tests/test_datahandling_parallel.py
index 5111bd247eda4be951686095ecdfa94e8df54bfa..52ccb6bce34b2ca115b19a8d00fa31da622b8ff4 100644
--- a/pystencils_tests/test_datahandling_parallel.py
+++ b/pystencils_tests/test_datahandling_parallel.py
@@ -1,9 +1,10 @@
 import numpy as np
-from pystencils.datahandling.parallel_datahandling import ParallelDataHandling
-from pystencils_tests.test_datahandling import access_and_gather, synchronization, kernel_execution_jacobi, vtk_output, \
-    reduction
 import waLBerla as wlb
 
+from pystencils.datahandling.parallel_datahandling import ParallelDataHandling
+from pystencils_tests.test_datahandling import (
+    access_and_gather, kernel_execution_jacobi, reduction, synchronization, vtk_output)
+
 
 def test_access_and_gather():
     block_size = (4, 7, 1)
diff --git a/pystencils_tests/test_derivative.py b/pystencils_tests/test_derivative.py
index 74ad02e38c8cee23fa7e1d99a0abbe4a748c7cf1..82738429c4c99789d1c719ebd03d8f6cf8c46641 100644
--- a/pystencils_tests/test_derivative.py
+++ b/pystencils_tests/test_derivative.py
@@ -1,8 +1,9 @@
 import sympy as sp
-import pystencils as ps
+from sympy.abc import a, b, t, x, y, z
 from sympy.printing.latex import LatexPrinter
+
+import pystencils as ps
 from pystencils.fd import *
-from sympy.abc import a, b, t, x, y, z
 
 
 def test_derivative_basic():
diff --git a/pystencils_tests/test_dtype_check.py b/pystencils_tests/test_dtype_check.py
index fdbcb9b224b982fa974589f777e1259008204b73..842e89c247d16b0abea7be81ec1ae7dd8db7f6bd 100644
--- a/pystencils_tests/test_dtype_check.py
+++ b/pystencils_tests/test_dtype_check.py
@@ -1,7 +1,8 @@
-import pystencils
 import numpy as np
 import pytest
 
+import pystencils
+
 
 def test_dtype_check_wrong_type():
     array = np.ones((10, 20)).astype(np.float32)
diff --git a/pystencils_tests/test_fast_approximation.py b/pystencils_tests/test_fast_approximation.py
index bc07ae9b8c133fb136fcca25aeea00c256e181d1..76bef174eb7451234dcf347818fdb2d456ce7005 100644
--- a/pystencils_tests/test_fast_approximation.py
+++ b/pystencils_tests/test_fast_approximation.py
@@ -1,7 +1,8 @@
 import sympy as sp
+
 import pystencils as ps
-from pystencils.fast_approximation import insert_fast_divisions, insert_fast_sqrts, fast_sqrt, fast_inv_sqrt, \
-    fast_division
+from pystencils.fast_approximation import (
+    fast_division, fast_inv_sqrt, fast_sqrt, insert_fast_divisions, insert_fast_sqrts)
 
 
 def test_fast_sqrt():
diff --git a/pystencils_tests/test_fd_derivation.py b/pystencils_tests/test_fd_derivation.py
index 6de6e6a2834e2be08dbe4d7cc08fcb07fd7666cc..73d38dc10031ea3bb287d313c174bbbb96f8ff13 100644
--- a/pystencils_tests/test_fd_derivation.py
+++ b/pystencils_tests/test_fd_derivation.py
@@ -1,5 +1,6 @@
 import pytest
 import sympy as sp
+
 from pystencils.utils import LinearEquationSystem
 
 
diff --git a/pystencils_tests/test_field.py b/pystencils_tests/test_field.py
index 67b34e7980d2d2b4538b768b7f956487ce54a26f..4742282630dbf7046d73df791da8cbd02524e6b5 100644
--- a/pystencils_tests/test_field.py
+++ b/pystencils_tests/test_field.py
@@ -1,8 +1,9 @@
-import pytest
 import numpy as np
+import pytest
 import sympy as sp
+
 import pystencils as ps
-from pystencils import Field, FieldType
+from pystencils.field import Field, FieldType
 from pystencils.field import layout_string_to_tuple
 
 
diff --git a/pystencils_tests/test_finite_differences.py b/pystencils_tests/test_finite_differences.py
index be2dacd3a5f313efa5dc8a036c34b9b29b260dc0..2491247c2aa49d2775be39a929a3e66b1b3439f2 100644
--- a/pystencils_tests/test_finite_differences.py
+++ b/pystencils_tests/test_finite_differences.py
@@ -1,8 +1,9 @@
 import sympy as sp
+
 import pystencils as ps
 from pystencils.astnodes import LoopOverCoordinate
-from pystencils.fd.spatial import fd_stencils_standard, fd_stencils_isotropic, discretize_spatial
 from pystencils.fd import diff
+from pystencils.fd.spatial import discretize_spatial, fd_stencils_isotropic, fd_stencils_standard
 
 
 def test_spatial_2d_unit_sum():
diff --git a/pystencils_tests/test_indexed_kernels.py b/pystencils_tests/test_indexed_kernels.py
index 13dbbd4982555adb6237f3eb796302da1b979cad..fd994c7f9326d0b175a1adf7042e43938e621ad3 100644
--- a/pystencils_tests/test_indexed_kernels.py
+++ b/pystencils_tests/test_indexed_kernels.py
@@ -1,5 +1,6 @@
 import numpy as np
-from pystencils import Field, Assignment
+
+from pystencils import Assignment, Field
 from pystencils.cpu import create_indexed_kernel, make_python_function
 
 
diff --git a/pystencils_tests/test_jacobi_cbackend.py b/pystencils_tests/test_jacobi_cbackend.py
index 6fbf9d5ba1e82b637f1991aa2da2482d4951de84..9206aeedaf4bb035444f9280cf58968c9ca385c9 100644
--- a/pystencils_tests/test_jacobi_cbackend.py
+++ b/pystencils_tests/test_jacobi_cbackend.py
@@ -1,9 +1,11 @@
 import numpy as np
+
 from pystencils import show_code
-from pystencils.transformations import move_constants_before_loop, make_loop_over_domain, resolve_field_accesses
-from pystencils.field import Field
-from pystencils.astnodes import SympyAssignment, Block
+from pystencils.astnodes import Block, KernelFunction, SympyAssignment
 from pystencils.cpu import make_python_function
+from pystencils.field import Field
+from pystencils.transformations import (
+    make_loop_over_domain, move_constants_before_loop, resolve_field_accesses)
 
 
 def test_jacobi_fixed_field_size():
@@ -19,7 +21,8 @@ def test_jacobi_fixed_field_size():
 
     jacobi = SympyAssignment(d[0, 0], (f[1, 0] + f[-1, 0] + f[0, 1] + f[0, -1]) / 4)
     body = Block([jacobi])
-    ast_node = make_loop_over_domain(body, "kernel")
+    loop_node, gl_info = make_loop_over_domain(body)
+    ast_node = KernelFunction(loop_node, 'cpu', 'c', make_python_function, ghost_layers=gl_info)
     resolve_field_accesses(ast_node)
     move_constants_before_loop(ast_node)
 
@@ -28,7 +31,7 @@ def test_jacobi_fixed_field_size():
             dst_field_py[x, y] = 0.25 * (src_field_py[x - 1, y] + src_field_py[x + 1, y] +
                                          src_field_py[x, y - 1] + src_field_py[x, y + 1])
 
-    kernel = make_python_function(ast_node)
+    kernel = ast_node.compile()
     kernel(f=src_field_c, d=dst_field_c)
     error = np.sum(np.abs(dst_field_py - dst_field_c))
     np.testing.assert_allclose(error, 0.0, atol=1e-13)
@@ -44,7 +47,8 @@ def test_jacobi_variable_field_size():
     d = Field.create_generic("d", 3)
     jacobi = SympyAssignment(d[0, 0, 0], (f[1, 0, 0] + f[-1, 0, 0] + f[0, 1, 0] + f[0, -1, 0]) / 4)
     body = Block([jacobi])
-    ast_node = make_loop_over_domain(body, "kernel")
+    loop_node, gl_info = make_loop_over_domain(body)
+    ast_node = KernelFunction(loop_node, 'cpu', 'c', make_python_function, ghost_layers=gl_info)
     resolve_field_accesses(ast_node)
     move_constants_before_loop(ast_node)
 
@@ -59,7 +63,7 @@ def test_jacobi_variable_field_size():
                 dst_field_py[x, y, z] = 0.25 * (src_field_py[x - 1, y, z] + src_field_py[x + 1, y, z] +
                                                 src_field_py[x, y - 1, z] + src_field_py[x, y + 1, z])
 
-    kernel = make_python_function(ast_node)
+    kernel = ast_node.compile()
     kernel(f=src_field_c, d=dst_field_c)
     error = np.sum(np.abs(dst_field_py-dst_field_c))
     np.testing.assert_allclose(error, 0.0, atol=1e-13)
diff --git a/pystencils_tests/test_jacobi_llvm.py b/pystencils_tests/test_jacobi_llvm.py
index f6e4825735cc4eedba5eabde720e601d6b20b398..2965cf245c6bf34e001d1ac67ad5b350c1219247 100644
--- a/pystencils_tests/test_jacobi_llvm.py
+++ b/pystencils_tests/test_jacobi_llvm.py
@@ -1,4 +1,5 @@
 import numpy as np
+
 from pystencils import Assignment, Field
 from pystencils.llvm import create_kernel, make_python_function
 from pystencils.llvm.llvmjit import generate_and_jit
diff --git a/pystencils_tests/test_kerncraft_coupling.py b/pystencils_tests/test_kerncraft_coupling.py
index 5d3485e4ab3f26e5d8d728d30ec06dcbaa5a4d2a..058c35c2a284da6d84928505587e6fbf12477843 100644
--- a/pystencils_tests/test_kerncraft_coupling.py
+++ b/pystencils_tests/test_kerncraft_coupling.py
@@ -1,16 +1,14 @@
 import os
+
 import numpy as np
-import sympy as sp
-from pystencils import Field, Assignment
-from pystencils.kerncraft_coupling import PyStencilsKerncraftKernel, KerncraftParameters
-from pystencils.kerncraft_coupling.generate_benchmark import generate_benchmark
-from pystencils.cpu import create_kernel
 import pytest
+import sympy as sp
+import kerncraft
 
-from kerncraft.models import ECMData, ECM, Benchmark
-from kerncraft.machinemodel import MachineModel
-from kerncraft.kernel import KernelCode
-
+from pystencils import Assignment, Field
+from pystencils.cpu import create_kernel
+from pystencils.kerncraft_coupling import KerncraftParameters, PyStencilsKerncraftKernel
+from pystencils.kerncraft_coupling.generate_benchmark import generate_benchmark
 
 SCRIPT_FOLDER = os.path.dirname(os.path.realpath(__file__))
 INPUT_FOLDER = os.path.join(SCRIPT_FOLDER, "kerncraft_inputs")
@@ -19,11 +17,11 @@ INPUT_FOLDER = os.path.join(SCRIPT_FOLDER, "kerncraft_inputs")
 @pytest.mark.kernkraft
 def test_compilation():
     machine_file_path = os.path.join(INPUT_FOLDER, "default_machine_file.yaml")
-    machine = MachineModel(path_to_yaml=machine_file_path)
+    machine = kerncraft.machinemodel.MachineModel(path_to_yaml=machine_file_path)
 
     kernel_file_path = os.path.join(INPUT_FOLDER, "2d-5pt.c")
     with open(kernel_file_path) as kernel_file:
-        reference_kernel = KernelCode(kernel_file.read(), machine=machine, filename=kernel_file_path)
+        reference_kernel = kerncraft.kernel.KernelCode(kernel_file.read(), machine=machine, filename=kernel_file_path)
         reference_kernel.as_code('likwid')
 
     size = [30, 50, 3]
@@ -41,17 +39,17 @@ def test_compilation():
 @pytest.mark.kernkraft
 def analysis(kernel, model='ecmdata'):
     machine_file_path = os.path.join(INPUT_FOLDER, "default_machine_file.yaml")
-    machine = MachineModel(path_to_yaml=machine_file_path)
+    machine = kerncraft.machinemodel.MachineModel(path_to_yaml=machine_file_path)
     if model == 'ecmdata':
-        model = ECMData(kernel, machine, KerncraftParameters())
+        model = kerncraft.models.ECMData(kernel, machine, KerncraftParameters())
     elif model == 'ecm':
-        model = ECM(kernel, machine, KerncraftParameters())
+        model = kerncraft.models.ECM(kernel, machine, KerncraftParameters())
         # model.analyze()
         # model.plot()
     elif model == 'benchmark':
-        model = Benchmark(kernel, machine, KerncraftParameters())
+        model = kerncraft.models.Benchmark(kernel, machine, KerncraftParameters())
     else:
-        model = ECM(kernel, machine, KerncraftParameters())
+        model = kerncraft.models.ECM(kernel, machine, KerncraftParameters())
     model.analyze()
     return model
 
@@ -62,9 +60,9 @@ def test_3d_7pt_iaca():
     size = [20, 200, 200]
     kernel_file_path = os.path.join(INPUT_FOLDER, "3d-7pt.c")
     machine_file_path = os.path.join(INPUT_FOLDER, "default_machine_file.yaml")
-    machine = MachineModel(path_to_yaml=machine_file_path)
+    machine = kerncraft.machinemodel.MachineModel(path_to_yaml=machine_file_path)
     with open(kernel_file_path) as kernel_file:
-        reference_kernel = KernelCode(kernel_file.read(), machine=machine, filename=kernel_file_path)
+        reference_kernel = kerncraft.kernel.KernelCode(kernel_file.read(), machine=machine, filename=kernel_file_path)
     reference_kernel.set_constant('M', size[0])
     reference_kernel.set_constant('N', size[1])
     assert size[1] == size[2]
@@ -89,7 +87,7 @@ def test_2d_5pt():
     size = [30, 50, 3]
     kernel_file_path = os.path.join(INPUT_FOLDER, "2d-5pt.c")
     with open(kernel_file_path) as kernel_file:
-        reference_kernel = KernelCode(kernel_file.read(), machine=None, filename=kernel_file_path)
+        reference_kernel = kerncraft.kernel.KernelCode(kernel_file.read(), machine=None, filename=kernel_file_path)
     reference = analysis(reference_kernel)
 
     arr = np.zeros(size)
@@ -111,7 +109,7 @@ def test_3d_7pt():
     size = [30, 50, 50]
     kernel_file_path = os.path.join(INPUT_FOLDER, "3d-7pt.c")
     with open(kernel_file_path) as kernel_file:
-        reference_kernel = KernelCode(kernel_file.read(), machine=None, filename=kernel_file_path)
+        reference_kernel = kerncraft.kernel.KernelCode(kernel_file.read(), machine=None, filename=kernel_file_path)
     reference_kernel.set_constant('M', size[0])
     reference_kernel.set_constant('N', size[1])
     assert size[1] == size[2]
diff --git a/pystencils_tests/test_loop_cutting.py b/pystencils_tests/test_loop_cutting.py
index 163b6cebb29ec98320b50ff274380bf25fc4e9f3..58126928daea4e7e6df5e0e71b3e57ac1491cff2 100644
--- a/pystencils_tests/test_loop_cutting.py
+++ b/pystencils_tests/test_loop_cutting.py
@@ -1,13 +1,14 @@
-import sympy as sp
 import numpy as np
+import sympy as sp
+
 import pystencils as ps
-from pystencils import Field
-from pystencils.cpu import create_kernel, make_python_function
+import pystencils.astnodes as ast
+from pystencils.field import Field
 from pystencils.astnodes import Conditional, LoopOverCoordinate, SympyAssignment
+from pystencils.cpu import create_kernel, make_python_function
 from pystencils.kernelcreation import create_staggered_kernel
-from pystencils.transformations import move_constants_before_loop
-import pystencils.astnodes as ast
-from pystencils.transformations import simplify_conditionals, cleanup_blocks, cut_loop
+from pystencils.transformations import (
+    cleanup_blocks, cut_loop, move_constants_before_loop, simplify_conditionals)
 
 
 def offsets_in_plane(normal_plane, offset_int, dimension):
diff --git a/pystencils_tests/test_move_constant_before_loop.py b/pystencils_tests/test_move_constant_before_loop.py
index a76ab82c2ee914451a005378283598c1bb1991d7..bec180deea5a82c3123f9bf14cd6045dbccfe91b 100644
--- a/pystencils_tests/test_move_constant_before_loop.py
+++ b/pystencils_tests/test_move_constant_before_loop.py
@@ -1,6 +1,7 @@
-import pystencils as ps
 import numpy as np
-from pystencils.astnodes import LoopOverCoordinate, Block, SympyAssignment, TypedSymbol
+
+import pystencils as ps
+from pystencils.astnodes import Block, LoopOverCoordinate, SympyAssignment, TypedSymbol
 from pystencils.transformations import move_constants_before_loop
 
 
diff --git a/pystencils_tests/test_parameterstudy.py b/pystencils_tests/test_parameterstudy.py
index 2b58e756671ef91814204fc2e3f76942990733fb..be5058d6cd32afc75a9340282e8db307f28c803a 100644
--- a/pystencils_tests/test_parameterstudy.py
+++ b/pystencils_tests/test_parameterstudy.py
@@ -1,7 +1,8 @@
 import io
 import json
-from http.server import HTTPServer, BaseHTTPRequestHandler
+from http.server import BaseHTTPRequestHandler, HTTPServer
 from tempfile import TemporaryDirectory
+
 from pystencils.runhelper import ParameterStudy
 
 
diff --git a/pystencils_tests/test_pickle_support.py b/pystencils_tests/test_pickle_support.py
index 82d8e1f3607e21b9ab61a7ceafe0efffa7be0dee..462645198881a54ec5a33ba10c2ccea69e44d702 100644
--- a/pystencils_tests/test_pickle_support.py
+++ b/pystencils_tests/test_pickle_support.py
@@ -1,6 +1,8 @@
-from pystencils import Field, TypedSymbol
 from copy import copy, deepcopy
 
+from pystencils.field import Field
+from pystencils.data_types import TypedSymbol
+
 
 def test_field_access():
     field = Field.create_generic('some_field', spatial_dimensions=2, index_dimensions=0)
diff --git a/pystencils_tests/test_plot.py b/pystencils_tests/test_plot.py
index 2e51343ec46779f934191933c86815d2dd30736c..6234334bb91352c80c643c474c76c15b968ce1c7 100644
--- a/pystencils_tests/test_plot.py
+++ b/pystencils_tests/test_plot.py
@@ -1,6 +1,8 @@
 import os
 from tempfile import TemporaryDirectory
+
 import numpy as np
+
 import pystencils.plot as plt
 
 
diff --git a/pystencils_tests/test_random.py b/pystencils_tests/test_random.py
index 2995cbdd6a81d289d020daf27d1903d0fd46b763..f86644875acce6679473336705b929f5f3083e6e 100644
--- a/pystencils_tests/test_random.py
+++ b/pystencils_tests/test_random.py
@@ -1,6 +1,7 @@
 import numpy as np
+
 import pystencils as ps
-from pystencils.rng import PhiloxTwoDoubles, PhiloxFourFloats
+from pystencils.rng import PhiloxFourFloats, PhiloxTwoDoubles
 
 
 def test_philox_double():
diff --git a/pystencils_tests/test_simplification_strategy.py b/pystencils_tests/test_simplification_strategy.py
index 957bee2ba7bd0ca79037b3fb8cfe8a95da702a15..189482c006197160e1f49771dc534206f8d0ef9e 100644
--- a/pystencils_tests/test_simplification_strategy.py
+++ b/pystencils_tests/test_simplification_strategy.py
@@ -1,7 +1,9 @@
 import sympy as sp
+
 from pystencils import Assignment, AssignmentCollection
-from pystencils.simp import SimplificationStrategy, apply_on_all_subexpressions, \
-    subexpression_substitution_in_existing_subexpressions
+from pystencils.simp import (
+    SimplificationStrategy, apply_on_all_subexpressions,
+    subexpression_substitution_in_existing_subexpressions)
 
 
 def test_simplification_strategy():
diff --git a/pystencils_tests/test_size_and_layout_checks.py b/pystencils_tests/test_size_and_layout_checks.py
index ecc454638e401004686bf41b5926ed16b3c2f8b9..597bf2c4d1ca32074e964141054e14313a288bea 100644
--- a/pystencils_tests/test_size_and_layout_checks.py
+++ b/pystencils_tests/test_size_and_layout_checks.py
@@ -1,8 +1,9 @@
 import numpy as np
 import pytest
-from pystencils import Field, Assignment, fields, create_kernel
 import sympy as sp
 
+from pystencils import Assignment, Field, create_kernel, fields
+
 
 def test_size_check():
     """Kernel with two fixed-sized fields creating with same size but calling with wrong size"""
diff --git a/pystencils_tests/test_size_and_layout_checks_llvm.py b/pystencils_tests/test_size_and_layout_checks_llvm.py
index 96b9bc05427aea1b34fcbf71292aa0d3a03cd809..8de8018f99f5be73dc899b6a649fc4d3a5e1923a 100644
--- a/pystencils_tests/test_size_and_layout_checks_llvm.py
+++ b/pystencils_tests/test_size_and_layout_checks_llvm.py
@@ -1,5 +1,6 @@
 import numpy as np
-from pystencils import Field, Assignment
+
+from pystencils import Assignment, Field
 from pystencils.llvm import create_kernel, make_python_function
 
 
diff --git a/pystencils_tests/test_sliced_iteration.py b/pystencils_tests/test_sliced_iteration.py
index 756937998171a56a31cb534d7f06508d1b31febc..1749745684872e75c199602b281e9622c02a257b 100644
--- a/pystencils_tests/test_sliced_iteration.py
+++ b/pystencils_tests/test_sliced_iteration.py
@@ -1,6 +1,7 @@
 import numpy as np
 import sympy as sp
-from pystencils import TypedSymbol, make_slice, Assignment, create_kernel, Field
+
+from pystencils import Assignment, Field, TypedSymbol, create_kernel, make_slice
 from pystencils.simp import sympy_cse_on_assignment_list
 
 
diff --git a/pystencils_tests/test_stencils.py b/pystencils_tests/test_stencils.py
index ea040a371a5ca20ec60c9d2fae6243260c14c5fa..bf1418e053d41ebeb80b6ae623f1834b24a8a713 100644
--- a/pystencils_tests/test_stencils.py
+++ b/pystencils_tests/test_stencils.py
@@ -1,3 +1 @@
 import pystencils as ps
-
-
diff --git a/pystencils_tests/test_struct_types.py b/pystencils_tests/test_struct_types.py
index 0a20ca28a6a98b1f0d604ca680c4d9035cdc7877..5d8de3da654dbedbef1df30cb011e26bb18716a7 100644
--- a/pystencils_tests/test_struct_types.py
+++ b/pystencils_tests/test_struct_types.py
@@ -1,5 +1,6 @@
 import numpy as np
-from pystencils import Field, create_kernel, Assignment
+
+from pystencils import Assignment, Field, create_kernel
 
 
 def test_fixed_sized_field():
diff --git a/pystencils_tests/test_vectorization.py b/pystencils_tests/test_vectorization.py
index 2f7d0f91956278f8769852ad10d6395ba5663415..1505c7543ee632d1a80a0405fef8e7080fc9bd22 100644
--- a/pystencils_tests/test_vectorization.py
+++ b/pystencils_tests/test_vectorization.py
@@ -1,5 +1,6 @@
 import numpy as np
 import sympy as sp
+
 import pystencils as ps
 from pystencils.backends.simd_instruction_sets import get_supported_instruction_sets
 from pystencils.cpu.vectorization import vectorize
diff --git a/setup.py b/setup.py
index 3110d16f1ec0d74b143c0ff52b87ea43a508843c..be7f9bfa5af9f75636578dac3acc6285d46babea 100644
--- a/setup.py
+++ b/setup.py
@@ -3,10 +3,15 @@ import sys
 import io
 from setuptools import setup, find_packages
 import distutils
+from distutils.extension import Extension
 from contextlib import redirect_stdout
 from importlib import import_module
-sys.path.insert(0, os.path.abspath('doc'))
-from version_from_git import version_number_from_git
+
+if '--use-cython' in sys.argv:
+    USE_CYTHON = True
+    sys.argv.remove('--use-cython')
+else:
+    USE_CYTHON = False
 
 
 quick_tests = [
@@ -52,18 +57,38 @@ def readme():
         return f.read()
 
 
+def cython_extensions(*extensions):
+    ext = '.pyx' if USE_CYTHON else '.c'
+    result = [Extension(e, [e.replace('.', '/') + ext]) for e in extensions]
+    if USE_CYTHON:
+        from Cython.Build import cythonize
+        result = cythonize(result, language_level=3)
+    return result
+
+
+try:
+    sys.path.insert(0, os.path.abspath('doc'))
+    from version_from_git import version_number_from_git
+    version=version_number_from_git()
+    with open("RELEASE-VERSION", "w") as f:
+        f.write(version)
+except ImportError:
+    version = open('RELEASE-VERSION', 'r').read()
+
+
 setup(name='pystencils',
-      version=version_number_from_git(),
       description='Speeding up stencil computations on CPUs and GPUs',
+      version=version,
       long_description=readme(),
       long_description_content_type="text/markdown",
       author='Martin Bauer',
       license='AGPLv3',
       author_email='martin.bauer@fau.de',
-      url='https://i10git.cs.fau.de/software/pystencils/',
+      url='https://i10git.cs.fau.de/pycodegen/pystencils/',
       packages=['pystencils'] + ['pystencils.' + s for s in find_packages('pystencils')],
       install_requires=['sympy>=1.1', 'numpy', 'appdirs', 'joblib'],
       package_data={'pystencils': ['include/*.h']},
+      ext_modules = cython_extensions("pystencils.boundaries.createindexlistcython"),
       classifiers=[
           'Development Status :: 4 - Beta',
           'Framework :: Jupyter',
@@ -73,6 +98,11 @@ setup(name='pystencils',
           'Intended Audience :: Science/Research',
           'License :: OSI Approved :: GNU Affero General Public License v3 or later (AGPLv3+)',
       ],
+      project_urls={
+          "Bug Tracker": "https://i10git.cs.fau.de/pycodegen/pystencils/issues",
+          "Documentation": "http://pycodegen.pages.walberla.net/pystencils/",
+          "Source Code": "https://i10git.cs.fau.de/pycodegen/pystencils",
+      },
       extras_require={
           'gpu': ['pycuda'],
           'alltrafos': ['islpy', 'py-cpuinfo'],
@@ -85,5 +115,5 @@ setup(name='pystencils',
       python_requires=">=3.6",
       cmdclass={
           'quicktest': SimpleTestRunner
-      }
+      },
       )