diff --git a/.github/workflows/python-publish.yml b/.github/workflows/python-publish.yml new file mode 100644 index 0000000..f80697e --- /dev/null +++ b/.github/workflows/python-publish.yml @@ -0,0 +1,45 @@ +# This workflow will upload a Python Package using Twine when a release is created +# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-python#publishing-to-package-registries + +# This workflow uses actions that are not certified by GitHub. +# They are provided by a third-party and are governed by +# separate terms of service, privacy policy, and support +# documentation. + +name: Upload Python Package + +on: + release: + types: [published] + +permissions: + contents: read + +jobs: + deploy: + + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + - name: Set up Python + uses: docker://quay.io/pypa/manylinux2014_x86_64 + with: + python-version: '3.x' + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install setuptools wheel twine auditwheel + - name: Build package + run: | + python3 -m pip install --upgrade build + python3 -m build + - name: Repair wheels + run: | + auditwheel repair --wheel-dir dist dist/*.whl + rm -rf dist/*linux_x86_64*.whl + - name: Publish package + uses: pypa/gh-action-pypi-publish@27b31702a0e7fc50959f5ad993c78deac1bdfc29 + with: + user: __token__ + password: ${{ secrets.PYPI_API_TOKEN_GITHUB }} diff --git a/MANIFEST.in b/MANIFEST.in index 5f06e49..e55be1c 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1,3 +1,2 @@ -include fa2/fa2util.c -include fa2/fa2util.pxd +include fa2_modified/fa2util.pxd include examples/* \ No newline at end of file diff --git a/README.md b/README.md index 5e09275..efc5faf 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,11 @@ -## ForceAtlas2 for Python +## ForceAtlas2 for Python3 (modified/maintained version) -A port of Gephi's Force Atlas 2 layout algorithm to Python 2 and Python 3 (with a wrapper for NetworkX and igraph). This is the fastest python implementation available with most of the features complete. It also supports Barnes Hut approximation for maximum speedup. +#### This is a maintained version of fa2 [python library](https://github.com/bhargavchippada/forceatlas2). The source code is same as fa2, but this repo can be installed on Python 3.9+ whereas the original fa2 only runs on Python <3.8. +-------- + + + +A port of Gephi's Force Atlas 2 layout algorithm to Python 3 (with a wrapper for NetworkX and igraph). This is the fastest python implementation available with most of the features complete. It also supports Barnes Hut approximation for maximum speedup. ForceAtlas2 is a very fast layout algorithm for force-directed graphs. It's used to spatialize a **weighted undirected** graph in 2D (Edge weight defines the strength of the connection). The implementation is based on this [paper](http://journals.plos.org/plosone/article?id=10.1371/journal.pone.0098679) and the corresponding [gephi-java-code](https://github.com/gephi/gephi/blob/master/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/forceAtlas2/ForceAtlas2.java). Its really quick compared to the fruchterman reingold algorithm (spring layout) of networkx and scales well to high number of nodes (>10000). @@ -15,7 +20,7 @@ ForceAtlas2 is a very fast layout algorithm for force-directed graphs. It's used Install from pip: - pip install fa2 + pip install fa2_modified To build and install run from source: @@ -41,7 +46,7 @@ To build and install run from source: ## Usage -from fa2 import ForceAtlas2 +from fa2_modified import ForceAtlas2 Create a ForceAtlas2 object with the appropriate settings. ForceAtlas2 class contains three important methods: ```python @@ -70,7 +75,7 @@ Below is an example usage. You can also see the feature settings of ForceAtlas2 ```python import networkx as nx -from fa2 import ForceAtlas2 +from fa2_modified import ForceAtlas2 import matplotlib.pyplot as plt G = nx.random_geometric_graph(400, 0.2) diff --git a/examples/forceatlas2-layout.ipynb b/examples/forceatlas2-layout.ipynb index faf4e17..1fd0de3 100644 --- a/examples/forceatlas2-layout.ipynb +++ b/examples/forceatlas2-layout.ipynb @@ -8,7 +8,7 @@ "source": [ "import networkx as nx\n", "import matplotlib.pyplot as plt\n", - "from fa2 import ForceAtlas2\n", + "from fa2_modified import ForceAtlas2\n", "import numpy as np" ] }, @@ -84,7 +84,7 @@ }, { "data": { - "image/png": "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\n", + "image/png": "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", "text/plain": [ "
" ] @@ -147,7 +147,7 @@ }, { "data": { - "image/png": "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\n", + "image/png": "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", "text/plain": [ "
" ] @@ -200,7 +200,7 @@ }, { "data": { - "image/png": "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\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXIAAAD4CAYAAADxeG0DAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvOIA7rQAAFPdJREFUeJzt3fuzXXV5x/H3QxJAEkiAgCEkgqh4A8UKQkEUQUd7cUatzqhjq7U6Vi79oeP0h077P3TU2KvTi63X1tph2tpWQBDFCyoqiqIgmIRbRMI1QoCnP6x1PHuHJOe29/6u71rv18yeZAKT/cycnM959nrW91mRmUiS6nVI6QIkSStjkEtS5QxySaqcQS5JlTPIJalyBrkkVc4gl6TKGeSSVDmDXJIqZ5BLUuUMckmqnEEuSZUzyIcgYi0RJxKxtnQpkiZvdekCNGURpwMXA2uAvURsI/PGwlVJmiA78j5rOvCLgYeAHe2vl9iZS/1ikPfbBmDNXXDI5XD2/8CpN8PJl8GZEbGudHGSJsNLK/22O2HvzfD8k2DnRnjyYTj+c/As4JyIeBTY3r52AHdn5hNFK5a0ZOETgvrtoxGvez782dnwo1XwGLCNzBsjIoBjga3AlvbXDcAdNKG+HdiRmQ+Xql3S4hjkPdaG9XvPgm99He4EdnOQYI6Iw4ETaUJ9a/v7Rxjv2u/JzCenXrykRTPIeywiXgicB/xtLuML3f4gOI7xrv1IYCfjXfueiRUtackM8p6KiFU0d6z8V2beMsG/92nMh/pWYDPwIONd+67l/OCQtDwGeU9FxEuB04B/mmaoRsQhwPGMh/sRNF37XLjvzMxfTqsGaegM8h6KiDXAZcCnMnNngfdfy3ywb6Hp2ncz37FvB+61a5cmwyDvoYg4D9iSmZ8qXQv86jLP0xnv2g9jPtTnuvbHihUpVcwg75n2GvZlwN9n5q7S9RxIRBzJeNd+AnAv4137fXbt0sIM8p6JiIuAdZn5H6VrWYq2az+B8a59FeNd+x2ZubdYkVJHGeQ90na5FwN/lZn3l65npSLiKOZDfQvN5ZldjHft99u1a+gM8h6JiN8C9mbm/5auZRoiYjXN4HS0a09G7mmn6dofL1akVIBB3hMRcQzwHuDDmflI6XpmoT2wtJ7xrv044G5GLslk5gPFipRmwCDviYj4HZqDONeUrqWkiDiUp3btjzN+YOlOl4OpT9x+2AMRsQl4JnB56VpKa29hvK19zXXtRzMf6mcAx0TEXYx37Q+VqFeaBDvyHoiIdwA3Z+bXS9dSg4g4jGYh2Ojtj670VbXsyCsXESfTrKP9ZtlK6pGZjwK3tq+5rn10pe+ZwIaIcKWvqmBHXrE2gP4A+Hpmfrd0PX3iSl/VxI68bs+leaiyD1OesHbJ1y3ta38rfc8BjowIV/qqODvySrVbB98P/F9m3ly6niFypa+6wiCvVEScAfwazU4Vv4gdMLLSd/RBHK701dQZ5BVqTzheCnw2M39Wuh4d2D4rfbfS7JNxpa8myiCvUEScA5ySmR8vXYuWZmSl72jX7kpfrYhBXpn2Hug/onnyz92l69HK7bPSdyuwCVf6agkM8spExAXAMZn52dK1aDraS2ebcKWvFskgr0h7vfVS4G8y877S9Wh2ImI948F+PK70Vcsgr0hEvI7ma/bfpWtRWe1zWfd9EMfoSt/tNMvBXOk7AAZ5JSJiA/A+YJsLnrQvV/oOm0FeiYh4A81H56tK16I6uNJ3OAzyCkTE8cA7gQ95mETLtZ+VvluAYwBX+lbOIK9ARLwVuD0zrytdi/rFlb79YJB3XERsBd5M0407uNJU7bPSdy7YNwCu9O0wg7zD2m+qdwE3ZOa3C5ejgWpX+m5hvmt3pW/HuMa2254NrAW+U7oQDVc7l/lJ+5pbDraR+a7dlb6F2ZF3VNuNvw+4OjNvKl2PdDARcQTjXbsrfWfIIO+oiDidptP5O//xqzau9J0tg7yD2g15lwCXZ+ZPS9cjTYIrfafHIO+giDgLeF5mfqx0LdK0uNJ3cgzyjmlP410GfCIz7yhdjzRLrvRdHoO8YyLifGBTZn6mdC1SaSMrfUe7dlf67sMg75B28n8p8NHMvLd0PVIXudL3qQzyDomI1wCHZ+blpWuRajGy0ne0ax/USl+DvCMi4ijg/cBHMvPB0vVItWrPYGxgvGvfSI9X+hrkHRERrwf2ZOYXStci9c3ISt/Rrr03K30N8g6IiI3Au2kWY3msWZqytms/hvGtj9Wu9DXIOyAi3kLTDVxbuhZpqGpe6WuQFxYRm4G3AR8c+i1UUpfUtNLXIC8sIn4P+EFmXl+6FkkHt5+VvluAh1nMSt9mRcEGYDcTDn/X2BYUEafQfGHdNS5VYNkrfZuV1BcDa4C9RGwj88ZJ1WVHXkj7se29wFdygl9QSWXtu9L3ODj5c/Dq1fDzU+DHGyGAdcAHJtWZ25GX83yaL+j3SxciaXIy8xHg5vbF7ogtAadeC+v3wpaNzZ8fTfNpfCJBfsgk/hItTftx7ELgiiEdI5aGaAPcdyjsWQVHnga30zz1ay/NCt+JMMjLOAN4CLildCGSpizz4T+Bb54ED66H42guq2yb5MDTSysz1u6FuAD4tN241H8RcTRw5PHw+38OhzKFu1Ycds5YRJwLPCMzP1m6FknTFxFvonny0dXTeg8vrcxQew/qecCVpWuRNH0RsQk4BfjqNN/HIJ+tc4EfZ+Y9pQuRNBMXAl/KzEen+SYG+YxExDrgLOCLhUuRNAMRcRLNQy++Oe33Mshn5xXADZk5sVuOJHVTe+DvIuCqWTzQwiCfgXZqfRrgdkNpGE4FDge+N4s3M8hn41XA17qwJU3SdLUH/i6iOfD31OVZU2CQT9msptaSOuN0mj3mN8/qDQ3y6ZvJ1FpSeRGxmuYT+BdmeeDPIJ+iWU6tJXXCS4FdmXn7LN/UIJ+Sdmr9amY0tZZUVvuouPOBK2b93gb59JwKHMaMptaSijsH+Glm3jXrNzbIp6DE1FpSOe3DJM4Grirx/gb5dMx8ai2pqPOBGzPzFyXe3CCfsFJTa0llRMR6mmcMXFOqBoN88opMrSUVcwHwjcx8qFQBBvkElZxaS5q9iDiO5saGr5SswyCfrGJTa0lFXAh8OTN/WbIIg3xCImItBafWkmYrIrYAJwLfKF2LQT45L6fg1FrS7Iwc+PtiZu4tXY9BPgFdmFpLmqlnAeuAG0oXAgb5pFxA4am1pNkYeWjElV058GeQr1BXptaSZuaFQAI3lS5kjkG+cp2YWkuavohYRfM936kDfwb5CnRpai1pJl4C7M7MW0sXMsogX6auTa0lTVdErAFeSQcP/Bnky9epqbWkqTsb2J6ZO0sXsi+DfBm6OLWWND0R8TTgXODK0rXsj0G+PJ2bWkuaqvOAH2bmz0sXsj8G+RJ1dWotaToi4iiaraZfLFzKARnkS9fJqbWkqXkF8K3MfKB0IQdikC9Bl6fWkiYvIo4FXgBcW7qWgzHIl6azU2tJU/Eq4LrM3FO6kIMxyBep61NrSZMVEScAJwFfK13LQgzyxev01FrSxF0EXJOZj5UuZCEG+SLUMLWWNDkR8UzgWOBbpWtZDIN8cTo/tZY0GSPrN67MzCdK17MYBvkCaplaS5qY5wGrgBtLF7JYBvnCqphaS1q5iDiE5sDfFTUd+DPID6KmqbWkiXgx8Ajwk9KFLIVBfnDVTK0lrUxErKZ5bGN16zcM8gOobWotacXOAu7KzO2lC1kqg3w/apxaS1q+iDgMeDmVrt8wyPevuqm1pBU5F/hJZt5TupDlMMj3UevUWtLyRMQ64GXAVaVrWS6D/KmqnFpLWrbzge9k5u7ShSyXQT6i5qm1pKWLiKOBFwFfKl3LShjk46qdWktalguAr2Xmw6ULWQmDvFX71FrS0kTE04FnA9eVrmWlDPJ5VU+tJS3ZhcCXMvPR0oWslEFOP6bWkhYvIp4BbAKuL13LJBjkjeqn1pIWZ+TA31WZ+XjpeiZh8EHel6m1pEV7DvA04LulC5mUwQc5PZlaS1pY241fRHPg78nS9UzKoIO8T1NrSYtyOrAX+FHpQiZp0EFOj6bWkg4uIlbRPCimdwf+BhvkfZtaS1rQS4F7M/O20oVM2iCDvI9Ta0kHFhGH0jxEvZcH/gYZ5PRwai3poM4BbsvMO0sXMg2DC/K+Tq0l7V9EHEET5FeWrmVaBhfk9HRqLemAXg78IDN/UbqQaRlUkPd5ai3pqSJiPfAS4OrStUzToIKcHk+tJe3XK4HrM/PB0oVM02CCvO9Ta0njImIjzfN3v1y6lmkbTJDT86m1pKe4EPhyZv6ydCHTNoggH8LUWtK8iDgR2AJ8vXQtszCIIKeZWn+/z1NrSWMuAq7OzL2lC5mF3gf5yNT6mtK1SJq+iHgWsB64oXQts9L7IGcgU2tJYwf+rszMJ0rXMyu9DvIhTa0lAfCC9tcfFK1ixnod5Axoai0NXXvg70Ka9RuDOvDX2yAf2tRaEmcADwC3li5k1nob5Axsai0NWUSsoZmHDXL9Ri+DPCJOYWBTa2ngXgbszMydpQspoXdBPvLQiEFNraWhiojDgXMZ8IG/3gU5A51aSwN2HnBzZu4qXUgpvQryIU+tpSGKiCOBM4EvFi6lqF4FOQOeWksD9Qrg25l5f+lCSupNkA99ai0NTUQcA7wQuLZ0LaX1JsgZ+NRaGqBXAV/NzEdKF1JaL4LcqbU0LBGxCXgm8NXStXRBL4Icp9bS0FwEXJOZj5UupAuqD3Kn1tKwRMTJwEbgm2Ur6Y7qgxyn1tJgjBz4u8oDf/OqDnKn1tLgPBdYA9xYupAuqTrIcWotDUZEHEJzbfyKzHyydD1dUm2QO7WWBudFwB7gx6UL6Zpqgxyn1tJgRMRq4AI88LdfVQa5U2tpcM4E7snMn5UupIvqCvKItXsiTtwMv4FTa2kQIuIw4OXAFaVr6arVpQtYtIjTgYvvh43/Cse/DL5UuiRJM/HrwK2ZeXfpQrqqjo48Yi1wccJD18GG9bAj4NL2zyX1VDTf42cDV5WupcvqCHLYAKwJeHgr7LwVjr4OXvoKeE9EXBgRp0bEEaWLlDRx5wPfy8z7ShfSZbVcWtkN7AXWngm3AbsehfXZ/JTeSPPRa3NEPAjsALa3r11OuKU6RcQG4MXAttK1dF1Uk3MRpwGX0Jzq2gtsI/PG+f8chwDHA1uAre3rCGAnTajvAHZk5i9nXLmkZYiINwD3Z6aXVRZQT5DD3LXyDcBuMh9e+H+PtcwH+xZgM013P9q132vXLnVLRBwPvBP4kM3XwuoK8hVqn+n5dMa79sOYD/YdNA+neLRYkZKIiLcCt2fmdaVrqcGggnx/2jW4o137CcC9jHft99m1S7MREVuBN9N044+XrqcGgw/yfbVd+wmMd+2rmQ/1ua59b7EipZ5q19S+C7ghM79duJxqGOSLEBFHMR/qW2guz+xivGu/365dWpmIeA7wWuAjbjhcPIN8GdoFPpsZ79phvmPfDtzhx0Jp8dpu/H3A1Zl5U+l6alLLfeSd0gb0z9rX3D/A9cyH+guB4yLiHkYuyfgUI+mgTgOeAH5YupDa2JFPSUQcynjXvoXmH+lo136ni7+kX82mLgEuz8yflq6nNgb5jLRd+9HMh/pW4FjgLsa79geLFSkVEhFnAc/LzI+VrqVGBnlB7XrOzYwPUh9lvGu/265dfdZ+er0M+ERm3lG6nhoZ5B3Sdu3HMt61bwDuZLxrX/BUq1SLiDgf2JSZnyldS60M8o6LiMOBE5nv2k8EHmG8a7/HW7VUo4h4Gk03/tHMvLd0PbUyyCvTdu3HMd61HwncwXjXvqdYkdIiRcRrgMMz8/LStdTMIO+BtqsZvad9M/Ag4127K33VKe1Bu/cDf5mZD5Sup2YGeQ8tYqXvdpo1A26VUzER8XpgT2Z+oXQttTPIB8KVvuqSiNgIvJtmMZaXAVfIIB8oV/qqpIh4C82BuGtL19IHBrl+ZT8rfTcBv8CVvpqgiNgMvA34oFtEJ8Mg1wEdYKXvKp7atfvNqEWLiN8FbsrM60vX0hcGuZbElb5aiYg4BfhtYJsnlifHINeKLLDSd65rd6Wv5s5AvBf4So48OF0r5xpbrcgiVvqeRrPS925GunbvGx6k5wMBfL90IX1jR66pW2Cl71zX7krfHmvPNlwMfD4zf1K6nr6xI9fUZeZjwG3ta38rfc8Ajo2IOxkZpLrSt1fOAB4CbildSB/ZkasTXOnbXxGxhmYx1qczc0fpevrIIFcnudK3PyLiXOAZmfnJ0rX0lUGuarjStz7t1+wy4B8z857S9fSVQa5qudK3+yLiQuCozPxc6Vr6zCBXr7jStzsiYh3NA5X/OjN3l66nzwxy9ZorfcuJiN8EnszMz5eupe8Mcg3OQVb6jnbtrvRdgYg4muYU5zYH0tNnkGvwFrHSd65rf6xYkZWJiDfR/DC8unQtQ2CQS/uxn5W+JwD3Mt61u9J3PyJiE/AOmodGuM9+BgxyaREWsdJ3O81ysMGv9I2ItwO3ZObXStcyFAa5tEyu9H2qiDgJeCPwYTdezo5BLk3I0Ff6tvf1vxu4PjO/U7qeIXFpljQhrvTlVJoh8fdKFzI0duTSDPV1pW97v/4fAldk5o9K1zM0duTSDC1ype8xEXEX4137QyXqXYLTabZV3ly6kCGyI5c6ZoGVvnNde2dW+razgUuBf8/M20vXM0QGudRxB1npewfjD+IocoIyIs4Gnp2Z/1Li/WWQS1VaYKXvXNc+9ZW+7aeHy4B/zsy7pvleOjCDXOqBg6z03cl41z7Rlb4R8UpgY2b+2yT/Xi2NQS711AIrfee69mWv9G2Xj10C/F1m/mIiRWtZDHJpIEZW+o527UfQBPpc177olb4R8VpgdWb+53Qq1mIZ5NKALWulb8Taz8DWS+HN98BfVHBrZO8Z5JJ+ZaGVvv8AR7wd3vhjOGUV7Hku/CmZN5arWGCQS1rA3ErfZ8GzPw5/vAtWPw4Pvw5uOgwOBz6AD48oypOdkg4qMx8EbiLiAeCWJ2BnQqyGJ2nujNkAGOQFHVK6AEnV2A3sXQVHtCG+Ftjb/rkKMsglLU5z+WQbsI7mGvo6YJuXVcrzGrmkpWnudNkA7DbEu8Egl6TKeWlFkipnkEtS5QxySaqcQS5JlTPIJalyBrkkVc4gl6TKGeSSVDmDXJIqZ5BLUuUMckmqnEEuSZUzyCWpcga5JFXOIJekyhnkklQ5g1ySKmeQS1LlDHJJqpxBLkmVM8glqXIGuSRVziCXpMoZ5JJUOYNckipnkEtS5QxySaqcQS5JlTPIJaly/w/gVxuV9KecvAAAAABJRU5ErkJggg==", "text/plain": [ "
" ] @@ -255,7 +255,7 @@ }, { "data": { - "image/png": "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\n", + "image/png": "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", "text/plain": [ "
" ] diff --git a/examples/test.py b/examples/test.py new file mode 100644 index 0000000..f4cca71 --- /dev/null +++ b/examples/test.py @@ -0,0 +1,32 @@ +import networkx as nx +from fa2_modified import ForceAtlas2 +import matplotlib.pyplot as plt + +G = nx.random_geometric_graph(400, 0.2) + +forceatlas2 = ForceAtlas2( + # Behavior alternatives + outboundAttractionDistribution=True, # Dissuade hubs + linLogMode=False, # NOT IMPLEMENTED + adjustSizes=False, # Prevent overlap (NOT IMPLEMENTED) + edgeWeightInfluence=1.0, + + # Performance + jitterTolerance=1.0, # Tolerance + barnesHutOptimize=True, + barnesHutTheta=1.2, + multiThreaded=False, # NOT IMPLEMENTED + + # Tuning + scalingRatio=2.0, + strongGravityMode=False, + gravity=1.0, + + # Log + verbose=True) + +positions = forceatlas2.forceatlas2_networkx_layout(G, pos=None, iterations=2000) +nx.draw_networkx_nodes(G, positions, node_size=20, node_color="blue", alpha=0.4) +nx.draw_networkx_edges(G, positions, edge_color="green", alpha=0.05) +plt.axis('off') +plt.show() \ No newline at end of file diff --git a/fa2/fa2util.c b/fa2/fa2util.c deleted file mode 100644 index 406d8f8..0000000 --- a/fa2/fa2util.c +++ /dev/null @@ -1,14812 +0,0 @@ -/* Generated by Cython 0.29.15 */ - -#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_15" -#define CYTHON_HEX_VERSION 0x001D0FF0 -#define CYTHON_FUTURE_DIVISION 0 -#include -#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 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 -#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" -#if PY_VERSION_HEX >= 0x030800A4 && PY_VERSION_HEX < 0x030800B2 - #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ - PyCode_New(a, 0, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) -#else - #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) -#endif - #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 -#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__fa2__fa2util -#define __PYX_HAVE_API__fa2__fa2util -/* Early includes */ -#ifdef _OPENMP -#include -#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_UTF8 0 -#define __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT (PY_MAJOR_VERSION >= 3 && __PYX_DEFAULT_STRING_ENCODING_IS_UTF8) -#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 - #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[] = { - "fa2util.pxd", - "stringsource", - "fa2util.py", -}; - -/*--- Type declarations ---*/ -struct __pyx_obj_3fa2_7fa2util_Node; -struct __pyx_obj_3fa2_7fa2util_Edge; -struct __pyx_obj_3fa2_7fa2util_Region; -struct __pyx_opt_args_3fa2_7fa2util_linRepulsion; -struct __pyx_opt_args_3fa2_7fa2util_linRepulsion_region; -struct __pyx_opt_args_3fa2_7fa2util_strongGravity; -struct __pyx_opt_args_3fa2_7fa2util_linAttraction; -struct __pyx_opt_args_3fa2_7fa2util_apply_gravity; -struct __pyx_opt_args_3fa2_7fa2util_6Region_applyForce; -struct __pyx_opt_args_3fa2_7fa2util_6Region_applyForceOnNodes; - -/* "fa2/fa2util.pxd":38 - * distance2 = cython.double, - * factor = cython.double) - * cdef void linRepulsion(Node n1, Node n2, double coefficient=*) # <<<<<<<<<<<<<< - * - * @cython.locals(xDist = cython.double, - */ -struct __pyx_opt_args_3fa2_7fa2util_linRepulsion { - int __pyx_n; - double coefficient; -}; - -/* "fa2/fa2util.pxd":44 - * distance2 = cython.double, - * factor = cython.double) - * cdef void linRepulsion_region(Node n, Region r, double coefficient=*) # <<<<<<<<<<<<<< - * - * - */ -struct __pyx_opt_args_3fa2_7fa2util_linRepulsion_region { - int __pyx_n; - double coefficient; -}; - -/* "fa2/fa2util.pxd":57 - * yDist = cython.double, - * factor = cython.double) - * cdef void strongGravity(Node n, double g, double coefficient=*) # <<<<<<<<<<<<<< - * - * @cython.locals(xDist = cython.double, - */ -struct __pyx_opt_args_3fa2_7fa2util_strongGravity { - int __pyx_n; - double coefficient; -}; - -/* "fa2/fa2util.pxd":62 - * yDist = cython.double, - * factor = cython.double) - * cpdef void linAttraction(Node n1, Node n2, double e, bint distributedAttraction, double coefficient=*) # <<<<<<<<<<<<<< - * - * @cython.locals(i = cython.int, - */ -struct __pyx_opt_args_3fa2_7fa2util_linAttraction { - int __pyx_n; - double coefficient; -}; - -/* "fa2/fa2util.pxd":71 - * - * @cython.locals(n = Node) - * cpdef void apply_gravity(list nodes, double gravity, double scalingRatio, bint useStrongGravity=*) # <<<<<<<<<<<<<< - * - * @cython.locals(edge = Edge) - */ -struct __pyx_opt_args_3fa2_7fa2util_apply_gravity { - int __pyx_n; - int useStrongGravity; -}; - -/* "fa2/fa2util.pxd":100 - * @cython.locals(distance = cython.double, - * subregion = Region) - * cdef void applyForce(self, Node n, double theta, double coefficient=*) # <<<<<<<<<<<<<< - * - * @cython.locals(n = Node) - */ -struct __pyx_opt_args_3fa2_7fa2util_6Region_applyForce { - int __pyx_n; - double coefficient; -}; - -/* "fa2/fa2util.pxd":103 - * - * @cython.locals(n = Node) - * cpdef applyForceOnNodes(self, list nodes, double theta, double coefficient=*) # <<<<<<<<<<<<<< - * - * @cython.locals(totalSwinging = cython.double, - */ -struct __pyx_opt_args_3fa2_7fa2util_6Region_applyForceOnNodes { - int __pyx_n; - double coefficient; -}; - -/* "fa2/fa2util.pxd":18 - * - * # This will substitute for the nLayout object - * cdef class Node: # <<<<<<<<<<<<<< - * cdef public double mass - * cdef public double old_dx, old_dy - */ -struct __pyx_obj_3fa2_7fa2util_Node { - PyObject_HEAD - double mass; - double old_dx; - double old_dy; - double dx; - double dy; - double x; - double y; -}; - - -/* "fa2/fa2util.pxd":26 - * # This is not in the original java function, but it makes it easier to - * # deal with edges. - * cdef class Edge: # <<<<<<<<<<<<<< - * cdef public int node1, node2 - * cdef public double weight - */ -struct __pyx_obj_3fa2_7fa2util_Edge { - PyObject_HEAD - int node1; - int node2; - double weight; -}; - - -/* "fa2/fa2util.pxd":76 - * cpdef void apply_attraction(list nodes, list edges, bint distributedAttraction, double coefficient, double edgeWeightInfluence) - * - * cdef class Region: # <<<<<<<<<<<<<< - * cdef public double mass - * cdef public double massCenterX, massCenterY - */ -struct __pyx_obj_3fa2_7fa2util_Region { - PyObject_HEAD - struct __pyx_vtabstruct_3fa2_7fa2util_Region *__pyx_vtab; - double mass; - double massCenterX; - double massCenterY; - double size; - PyObject *nodes; - PyObject *subregions; -}; - - - -/* "fa2/fa2util.py":149 - * - * # For Barnes Hut Optimization - * class Region: # <<<<<<<<<<<<<< - * def __init__(self, nodes): - * self.mass = 0.0 - */ - -struct __pyx_vtabstruct_3fa2_7fa2util_Region { - void (*updateMassAndGeometry)(struct __pyx_obj_3fa2_7fa2util_Region *); - void (*buildSubRegions)(struct __pyx_obj_3fa2_7fa2util_Region *, int __pyx_skip_dispatch); - void (*applyForce)(struct __pyx_obj_3fa2_7fa2util_Region *, struct __pyx_obj_3fa2_7fa2util_Node *, double, struct __pyx_opt_args_3fa2_7fa2util_6Region_applyForce *__pyx_optional_args); - PyObject *(*applyForceOnNodes)(struct __pyx_obj_3fa2_7fa2util_Region *, PyObject *, double, int __pyx_skip_dispatch, struct __pyx_opt_args_3fa2_7fa2util_6Region_applyForceOnNodes *__pyx_optional_args); -}; -static struct __pyx_vtabstruct_3fa2_7fa2util_Region *__pyx_vtabptr_3fa2_7fa2util_Region; - -/* --- 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) - -/* 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); - -/* KeywordStringCheck.proto */ -static int __Pyx_CheckKeywordStrings(PyObject *kwdict, const char* function_name, int kw_allowed); - -/* 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 - -/* 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 - -/* 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 - -/* GetAttr.proto */ -static CYTHON_INLINE PyObject *__Pyx_GetAttr(PyObject *, PyObject *); - -/* GetAttr3.proto */ -static CYTHON_INLINE PyObject *__Pyx_GetAttr3(PyObject *, PyObject *, PyObject *); - -/* GetBuiltinName.proto */ -static PyObject *__Pyx_GetBuiltinName(PyObject *name); - -/* PyDictVersioning.proto */ -#if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_TYPE_SLOTS -#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 - -/* WriteUnraisableException.proto */ -static void __Pyx_WriteUnraisable(const char *name, int clineno, - int lineno, const char *filename, - int full_traceback, int nogil); - -/* 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, Py_ssize_t 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 - -/* PyObjectCall2Args.proto */ -static CYTHON_UNUSED PyObject* __Pyx_PyObject_Call2Args(PyObject* function, PyObject* arg1, PyObject* arg2); - -/* 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); - -/* 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); - -/* 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); - -/* ExtTypeTest.proto */ -static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type); - -/* 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); - -/* pow2.proto */ -#define __Pyx_PyNumber_Power2(a, b) PyNumber_Power(a, b, Py_None) - -/* 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 - -/* 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 - -/* pyobject_as_double.proto */ -static double __Pyx__PyObject_AsDouble(PyObject* obj); -#if CYTHON_COMPILING_IN_PYPY -#define __Pyx_PyObject_AsDouble(obj)\ -(likely(PyFloat_CheckExact(obj)) ? PyFloat_AS_DOUBLE(obj) :\ - likely(PyInt_CheckExact(obj)) ?\ - PyFloat_AsDouble(obj) : __Pyx__PyObject_AsDouble(obj)) -#else -#define __Pyx_PyObject_AsDouble(obj)\ -((likely(PyFloat_CheckExact(obj))) ?\ - PyFloat_AS_DOUBLE(obj) : __Pyx__PyObject_AsDouble(obj)) -#endif - -/* PyFloatBinop.proto */ -#if !CYTHON_COMPILING_IN_PYPY -static PyObject* __Pyx_PyFloat_AddCObj(PyObject *op1, PyObject *op2, double floatval, int inplace, int zerodivision_check); -#else -#define __Pyx_PyFloat_AddCObj(op1, op2, floatval, inplace, zerodivision_check)\ - (inplace ? PyNumber_InPlaceAdd(op1, op2) : PyNumber_Add(op1, op2)) -#endif - -/* Import.proto */ -static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level); - -/* ImportFrom.proto */ -static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name); - -/* RaiseException.proto */ -static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause); - -/* 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 - -/* SetupReduce.proto */ -static int __Pyx_setup_reduce(PyObject* type_obj); - -/* SetVTable.proto */ -static int __Pyx_SetVtable(PyObject *dict, void *vtable); - -/* 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); - -/* 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 - -/* 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); - -/* CIntToPy.proto */ -static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value); - -/* Print.proto */ -static int __Pyx_Print(PyObject*, PyObject *, int); -#if CYTHON_COMPILING_IN_PYPY || PY_MAJOR_VERSION >= 3 -static PyObject* __pyx_print = 0; -static PyObject* __pyx_print_kwargs = 0; -#endif - -/* CIntToPy.proto */ -static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value); - -/* CIntFromPy.proto */ -static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *); - -/* PrintOne.proto */ -static int __Pyx_PrintOne(PyObject* stream, PyObject *o); - -/* CIntFromPy.proto */ -static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *); - -/* 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) - -/* CheckBinaryVersion.proto */ -static int __Pyx_check_binary_version(void); - -/* FunctionExport.proto */ -static int __Pyx_ExportFunction(const char *name, void (*f)(void), const char *sig); - -/* InitStrings.proto */ -static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); - -static void __pyx_f_3fa2_7fa2util_6Region_updateMassAndGeometry(struct __pyx_obj_3fa2_7fa2util_Region *__pyx_v_self); /* proto*/ -static void __pyx_f_3fa2_7fa2util_6Region_buildSubRegions(struct __pyx_obj_3fa2_7fa2util_Region *__pyx_v_self, int __pyx_skip_dispatch); /* proto*/ -static void __pyx_f_3fa2_7fa2util_6Region_applyForce(struct __pyx_obj_3fa2_7fa2util_Region *__pyx_v_self, struct __pyx_obj_3fa2_7fa2util_Node *__pyx_v_n, double __pyx_v_theta, struct __pyx_opt_args_3fa2_7fa2util_6Region_applyForce *__pyx_optional_args); /* proto*/ -static PyObject *__pyx_f_3fa2_7fa2util_6Region_applyForceOnNodes(struct __pyx_obj_3fa2_7fa2util_Region *__pyx_v_self, PyObject *__pyx_v_nodes, double __pyx_v_theta, int __pyx_skip_dispatch, struct __pyx_opt_args_3fa2_7fa2util_6Region_applyForceOnNodes *__pyx_optional_args); /* proto*/ - -/* Module declarations from 'cython' */ - -/* Module declarations from 'fa2.fa2util' */ -static PyTypeObject *__pyx_ptype_3fa2_7fa2util_Node = 0; -static PyTypeObject *__pyx_ptype_3fa2_7fa2util_Edge = 0; -static PyTypeObject *__pyx_ptype_3fa2_7fa2util_Region = 0; -static void __pyx_f_3fa2_7fa2util_linRepulsion(struct __pyx_obj_3fa2_7fa2util_Node *, struct __pyx_obj_3fa2_7fa2util_Node *, struct __pyx_opt_args_3fa2_7fa2util_linRepulsion *__pyx_optional_args); /*proto*/ -static void __pyx_f_3fa2_7fa2util_linRepulsion_region(struct __pyx_obj_3fa2_7fa2util_Node *, struct __pyx_obj_3fa2_7fa2util_Region *, struct __pyx_opt_args_3fa2_7fa2util_linRepulsion_region *__pyx_optional_args); /*proto*/ -static void __pyx_f_3fa2_7fa2util_linGravity(struct __pyx_obj_3fa2_7fa2util_Node *, double); /*proto*/ -static void __pyx_f_3fa2_7fa2util_strongGravity(struct __pyx_obj_3fa2_7fa2util_Node *, double, struct __pyx_opt_args_3fa2_7fa2util_strongGravity *__pyx_optional_args); /*proto*/ -static void __pyx_f_3fa2_7fa2util_linAttraction(struct __pyx_obj_3fa2_7fa2util_Node *, struct __pyx_obj_3fa2_7fa2util_Node *, double, int, int __pyx_skip_dispatch, struct __pyx_opt_args_3fa2_7fa2util_linAttraction *__pyx_optional_args); /*proto*/ -static void __pyx_f_3fa2_7fa2util_apply_repulsion(PyObject *, double, int __pyx_skip_dispatch); /*proto*/ -static void __pyx_f_3fa2_7fa2util_apply_gravity(PyObject *, double, double, int __pyx_skip_dispatch, struct __pyx_opt_args_3fa2_7fa2util_apply_gravity *__pyx_optional_args); /*proto*/ -static void __pyx_f_3fa2_7fa2util_apply_attraction(PyObject *, PyObject *, int, double, double, int __pyx_skip_dispatch); /*proto*/ -static PyObject *__pyx_f_3fa2_7fa2util_adjustSpeedAndApplyForces(PyObject *, double, double, double, int __pyx_skip_dispatch); /*proto*/ -static PyObject *__pyx_f_3fa2_7fa2util___pyx_unpickle_Node__set_state(struct __pyx_obj_3fa2_7fa2util_Node *, PyObject *); /*proto*/ -static PyObject *__pyx_f_3fa2_7fa2util___pyx_unpickle_Edge__set_state(struct __pyx_obj_3fa2_7fa2util_Edge *, PyObject *); /*proto*/ -static PyObject *__pyx_f_3fa2_7fa2util___pyx_unpickle_Region__set_state(struct __pyx_obj_3fa2_7fa2util_Region *, PyObject *); /*proto*/ -#define __Pyx_MODULE_NAME "fa2.fa2util" -extern int __pyx_module_is_main_fa2__fa2util; -int __pyx_module_is_main_fa2__fa2util = 0; - -/* Implementation of 'fa2.fa2util' */ -static const char __pyx_k_e[] = "e"; -static const char __pyx_k_n1[] = "n1"; -static const char __pyx_k_n2[] = "n2"; -static const char __pyx_k_end[] = "end"; -static const char __pyx_k_inf[] = "inf"; -static const char __pyx_k_new[] = "__new__"; -static const char __pyx_k_Edge[] = "Edge"; -static const char __pyx_k_Node[] = "Node"; -static const char __pyx_k_dict[] = "__dict__"; -static const char __pyx_k_file[] = "file"; -static const char __pyx_k_main[] = "__main__"; -static const char __pyx_k_math[] = "math"; -static const char __pyx_k_name[] = "__name__"; -static const char __pyx_k_self[] = "self"; -static const char __pyx_k_sqrt[] = "sqrt"; -static const char __pyx_k_test[] = "__test__"; -static const char __pyx_k_edges[] = "edges"; -static const char __pyx_k_nodes[] = "nodes"; -static const char __pyx_k_print[] = "print"; -static const char __pyx_k_speed[] = "speed"; -static const char __pyx_k_state[] = "state"; -static const char __pyx_k_theta[] = "theta"; -static const char __pyx_k_Region[] = "Region"; -static const char __pyx_k_dict_2[] = "_dict"; -static const char __pyx_k_import[] = "__import__"; -static const char __pyx_k_pickle[] = "pickle"; -static const char __pyx_k_reduce[] = "__reduce__"; -static const char __pyx_k_update[] = "update"; -static const char __pyx_k_gravity[] = "gravity"; -static const char __pyx_k_getstate[] = "__getstate__"; -static const char __pyx_k_pyx_type[] = "__pyx_type"; -static const char __pyx_k_setstate[] = "__setstate__"; -static const char __pyx_k_pyx_state[] = "__pyx_state"; -static const char __pyx_k_reduce_ex[] = "__reduce_ex__"; -static const char __pyx_k_fa2util_py[] = "fa2util.py"; -static const char __pyx_k_pyx_result[] = "__pyx_result"; -static const char __pyx_k_pyx_vtable[] = "__pyx_vtable__"; -static const char __pyx_k_PickleError[] = "PickleError"; -static const char __pyx_k_coefficient[] = "coefficient"; -static const char __pyx_k_fa2_fa2util[] = "fa2.fa2util"; -static const char __pyx_k_pyx_checksum[] = "__pyx_checksum"; -static const char __pyx_k_scalingRatio[] = "scalingRatio"; -static const char __pyx_k_stringsource[] = "stringsource"; -static const char __pyx_k_use_setstate[] = "use_setstate"; -static const char __pyx_k_apply_gravity[] = "apply_gravity"; -static const char __pyx_k_linAttraction[] = "linAttraction"; -static const char __pyx_k_reduce_cython[] = "__reduce_cython__"; -static const char __pyx_k_apply_repulsion[] = "apply_repulsion"; -static const char __pyx_k_buildSubRegions[] = "buildSubRegions"; -static const char __pyx_k_jitterTolerance[] = "jitterTolerance"; -static const char __pyx_k_pyx_PickleError[] = "__pyx_PickleError"; -static const char __pyx_k_setstate_cython[] = "__setstate_cython__"; -static const char __pyx_k_speedEfficiency[] = "speedEfficiency"; -static const char __pyx_k_apply_attraction[] = "apply_attraction"; -static const char __pyx_k_useStrongGravity[] = "useStrongGravity"; -static const char __pyx_k_applyForceOnNodes[] = "applyForceOnNodes"; -static const char __pyx_k_pyx_unpickle_Edge[] = "__pyx_unpickle_Edge"; -static const char __pyx_k_pyx_unpickle_Node[] = "__pyx_unpickle_Node"; -static const char __pyx_k_cline_in_traceback[] = "cline_in_traceback"; -static const char __pyx_k_edgeWeightInfluence[] = "edgeWeightInfluence"; -static const char __pyx_k_pyx_unpickle_Region[] = "__pyx_unpickle_Region"; -static const char __pyx_k_Edge___reduce_cython[] = "Edge.__reduce_cython__"; -static const char __pyx_k_Node___reduce_cython[] = "Node.__reduce_cython__"; -static const char __pyx_k_distributedAttraction[] = "distributedAttraction"; -static const char __pyx_k_Edge___setstate_cython[] = "Edge.__setstate_cython__"; -static const char __pyx_k_Node___setstate_cython[] = "Node.__setstate_cython__"; -static const char __pyx_k_Region___reduce_cython[] = "Region.__reduce_cython__"; -static const char __pyx_k_Region_buildSubRegions[] = "Region.buildSubRegions"; -static const char __pyx_k_Region___setstate_cython[] = "Region.__setstate_cython__"; -static const char __pyx_k_Region_applyForceOnNodes[] = "Region.applyForceOnNodes"; -static const char __pyx_k_adjustSpeedAndApplyForces[] = "adjustSpeedAndApplyForces"; -static const char __pyx_k_Incompatible_checksums_s_vs_0x2f[] = "Incompatible checksums (%s vs 0x2f233dd = (dx, dy, mass, old_dx, old_dy, x, y))"; -static const char __pyx_k_Incompatible_checksums_s_vs_0x66[] = "Incompatible checksums (%s vs 0x66ef4c7 = (mass, massCenterX, massCenterY, nodes, size, subregions))"; -static const char __pyx_k_Incompatible_checksums_s_vs_0xb4[] = "Incompatible checksums (%s vs 0xb469544 = (node1, node2, weight))"; -static const char __pyx_k_No_cython_detected_Install_cytho[] = "No cython detected. Install cython and compile the fa2util module for a 10-100x speed boost."; -static const char __pyx_k_Warning_uncompiled_fa2util_modul[] = "Warning: uncompiled fa2util module. Compile with cython for a 10-100x speed boost."; -static PyObject *__pyx_n_s_Edge; -static PyObject *__pyx_n_s_Edge___reduce_cython; -static PyObject *__pyx_n_s_Edge___setstate_cython; -static PyObject *__pyx_kp_s_Incompatible_checksums_s_vs_0x2f; -static PyObject *__pyx_kp_s_Incompatible_checksums_s_vs_0x66; -static PyObject *__pyx_kp_s_Incompatible_checksums_s_vs_0xb4; -static PyObject *__pyx_kp_s_No_cython_detected_Install_cytho; -static PyObject *__pyx_n_s_Node; -static PyObject *__pyx_n_s_Node___reduce_cython; -static PyObject *__pyx_n_s_Node___setstate_cython; -static PyObject *__pyx_n_s_PickleError; -static PyObject *__pyx_n_s_Region; -static PyObject *__pyx_n_s_Region___reduce_cython; -static PyObject *__pyx_n_s_Region___setstate_cython; -static PyObject *__pyx_n_s_Region_applyForceOnNodes; -static PyObject *__pyx_n_s_Region_buildSubRegions; -static PyObject *__pyx_kp_s_Warning_uncompiled_fa2util_modul; -static PyObject *__pyx_n_s_adjustSpeedAndApplyForces; -static PyObject *__pyx_n_s_applyForceOnNodes; -static PyObject *__pyx_n_s_apply_attraction; -static PyObject *__pyx_n_s_apply_gravity; -static PyObject *__pyx_n_s_apply_repulsion; -static PyObject *__pyx_n_s_buildSubRegions; -static PyObject *__pyx_n_s_cline_in_traceback; -static PyObject *__pyx_n_s_coefficient; -static PyObject *__pyx_n_s_dict; -static PyObject *__pyx_n_s_dict_2; -static PyObject *__pyx_n_s_distributedAttraction; -static PyObject *__pyx_n_s_e; -static PyObject *__pyx_n_s_edgeWeightInfluence; -static PyObject *__pyx_n_s_edges; -static PyObject *__pyx_n_s_end; -static PyObject *__pyx_n_s_fa2_fa2util; -static PyObject *__pyx_kp_s_fa2util_py; -static PyObject *__pyx_n_s_file; -static PyObject *__pyx_n_s_getstate; -static PyObject *__pyx_n_s_gravity; -static PyObject *__pyx_n_s_import; -static PyObject *__pyx_n_s_inf; -static PyObject *__pyx_n_s_jitterTolerance; -static PyObject *__pyx_n_s_linAttraction; -static PyObject *__pyx_n_s_main; -static PyObject *__pyx_n_s_math; -static PyObject *__pyx_n_s_n1; -static PyObject *__pyx_n_s_n2; -static PyObject *__pyx_n_s_name; -static PyObject *__pyx_n_s_new; -static PyObject *__pyx_n_s_nodes; -static PyObject *__pyx_n_s_pickle; -static PyObject *__pyx_n_s_print; -static PyObject *__pyx_n_s_pyx_PickleError; -static PyObject *__pyx_n_s_pyx_checksum; -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_Edge; -static PyObject *__pyx_n_s_pyx_unpickle_Node; -static PyObject *__pyx_n_s_pyx_unpickle_Region; -static PyObject *__pyx_n_s_pyx_vtable; -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_scalingRatio; -static PyObject *__pyx_n_s_self; -static PyObject *__pyx_n_s_setstate; -static PyObject *__pyx_n_s_setstate_cython; -static PyObject *__pyx_n_s_speed; -static PyObject *__pyx_n_s_speedEfficiency; -static PyObject *__pyx_n_s_sqrt; -static PyObject *__pyx_n_s_state; -static PyObject *__pyx_kp_s_stringsource; -static PyObject *__pyx_n_s_test; -static PyObject *__pyx_n_s_theta; -static PyObject *__pyx_n_s_update; -static PyObject *__pyx_n_s_useStrongGravity; -static PyObject *__pyx_n_s_use_setstate; -static int __pyx_pf_3fa2_7fa2util_4Node___init__(struct __pyx_obj_3fa2_7fa2util_Node *__pyx_v_self); /* proto */ -static PyObject *__pyx_pf_3fa2_7fa2util_4Node_4mass___get__(struct __pyx_obj_3fa2_7fa2util_Node *__pyx_v_self); /* proto */ -static int __pyx_pf_3fa2_7fa2util_4Node_4mass_2__set__(struct __pyx_obj_3fa2_7fa2util_Node *__pyx_v_self, PyObject *__pyx_v_value); /* proto */ -static PyObject *__pyx_pf_3fa2_7fa2util_4Node_6old_dx___get__(struct __pyx_obj_3fa2_7fa2util_Node *__pyx_v_self); /* proto */ -static int __pyx_pf_3fa2_7fa2util_4Node_6old_dx_2__set__(struct __pyx_obj_3fa2_7fa2util_Node *__pyx_v_self, PyObject *__pyx_v_value); /* proto */ -static PyObject *__pyx_pf_3fa2_7fa2util_4Node_6old_dy___get__(struct __pyx_obj_3fa2_7fa2util_Node *__pyx_v_self); /* proto */ -static int __pyx_pf_3fa2_7fa2util_4Node_6old_dy_2__set__(struct __pyx_obj_3fa2_7fa2util_Node *__pyx_v_self, PyObject *__pyx_v_value); /* proto */ -static PyObject *__pyx_pf_3fa2_7fa2util_4Node_2dx___get__(struct __pyx_obj_3fa2_7fa2util_Node *__pyx_v_self); /* proto */ -static int __pyx_pf_3fa2_7fa2util_4Node_2dx_2__set__(struct __pyx_obj_3fa2_7fa2util_Node *__pyx_v_self, PyObject *__pyx_v_value); /* proto */ -static PyObject *__pyx_pf_3fa2_7fa2util_4Node_2dy___get__(struct __pyx_obj_3fa2_7fa2util_Node *__pyx_v_self); /* proto */ -static int __pyx_pf_3fa2_7fa2util_4Node_2dy_2__set__(struct __pyx_obj_3fa2_7fa2util_Node *__pyx_v_self, PyObject *__pyx_v_value); /* proto */ -static PyObject *__pyx_pf_3fa2_7fa2util_4Node_1x___get__(struct __pyx_obj_3fa2_7fa2util_Node *__pyx_v_self); /* proto */ -static int __pyx_pf_3fa2_7fa2util_4Node_1x_2__set__(struct __pyx_obj_3fa2_7fa2util_Node *__pyx_v_self, PyObject *__pyx_v_value); /* proto */ -static PyObject *__pyx_pf_3fa2_7fa2util_4Node_1y___get__(struct __pyx_obj_3fa2_7fa2util_Node *__pyx_v_self); /* proto */ -static int __pyx_pf_3fa2_7fa2util_4Node_1y_2__set__(struct __pyx_obj_3fa2_7fa2util_Node *__pyx_v_self, PyObject *__pyx_v_value); /* proto */ -static PyObject *__pyx_pf_3fa2_7fa2util_4Node_2__reduce_cython__(struct __pyx_obj_3fa2_7fa2util_Node *__pyx_v_self); /* proto */ -static PyObject *__pyx_pf_3fa2_7fa2util_4Node_4__setstate_cython__(struct __pyx_obj_3fa2_7fa2util_Node *__pyx_v_self, PyObject *__pyx_v___pyx_state); /* proto */ -static int __pyx_pf_3fa2_7fa2util_4Edge___init__(struct __pyx_obj_3fa2_7fa2util_Edge *__pyx_v_self); /* proto */ -static PyObject *__pyx_pf_3fa2_7fa2util_4Edge_5node1___get__(struct __pyx_obj_3fa2_7fa2util_Edge *__pyx_v_self); /* proto */ -static int __pyx_pf_3fa2_7fa2util_4Edge_5node1_2__set__(struct __pyx_obj_3fa2_7fa2util_Edge *__pyx_v_self, PyObject *__pyx_v_value); /* proto */ -static PyObject *__pyx_pf_3fa2_7fa2util_4Edge_5node2___get__(struct __pyx_obj_3fa2_7fa2util_Edge *__pyx_v_self); /* proto */ -static int __pyx_pf_3fa2_7fa2util_4Edge_5node2_2__set__(struct __pyx_obj_3fa2_7fa2util_Edge *__pyx_v_self, PyObject *__pyx_v_value); /* proto */ -static PyObject *__pyx_pf_3fa2_7fa2util_4Edge_6weight___get__(struct __pyx_obj_3fa2_7fa2util_Edge *__pyx_v_self); /* proto */ -static int __pyx_pf_3fa2_7fa2util_4Edge_6weight_2__set__(struct __pyx_obj_3fa2_7fa2util_Edge *__pyx_v_self, PyObject *__pyx_v_value); /* proto */ -static PyObject *__pyx_pf_3fa2_7fa2util_4Edge_2__reduce_cython__(struct __pyx_obj_3fa2_7fa2util_Edge *__pyx_v_self); /* proto */ -static PyObject *__pyx_pf_3fa2_7fa2util_4Edge_4__setstate_cython__(struct __pyx_obj_3fa2_7fa2util_Edge *__pyx_v_self, PyObject *__pyx_v___pyx_state); /* proto */ -static PyObject *__pyx_pf_3fa2_7fa2util_linAttraction(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_3fa2_7fa2util_Node *__pyx_v_n1, struct __pyx_obj_3fa2_7fa2util_Node *__pyx_v_n2, double __pyx_v_e, int __pyx_v_distributedAttraction, double __pyx_v_coefficient); /* proto */ -static PyObject *__pyx_pf_3fa2_7fa2util_2apply_repulsion(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_nodes, double __pyx_v_coefficient); /* proto */ -static PyObject *__pyx_pf_3fa2_7fa2util_4apply_gravity(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_nodes, double __pyx_v_gravity, double __pyx_v_scalingRatio, int __pyx_v_useStrongGravity); /* proto */ -static PyObject *__pyx_pf_3fa2_7fa2util_6apply_attraction(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_nodes, PyObject *__pyx_v_edges, int __pyx_v_distributedAttraction, double __pyx_v_coefficient, double __pyx_v_edgeWeightInfluence); /* proto */ -static int __pyx_pf_3fa2_7fa2util_6Region___init__(struct __pyx_obj_3fa2_7fa2util_Region *__pyx_v_self, PyObject *__pyx_v_nodes); /* proto */ -static PyObject *__pyx_pf_3fa2_7fa2util_6Region_2buildSubRegions(struct __pyx_obj_3fa2_7fa2util_Region *__pyx_v_self); /* proto */ -static PyObject *__pyx_pf_3fa2_7fa2util_6Region_4applyForceOnNodes(struct __pyx_obj_3fa2_7fa2util_Region *__pyx_v_self, PyObject *__pyx_v_nodes, double __pyx_v_theta, double __pyx_v_coefficient); /* proto */ -static PyObject *__pyx_pf_3fa2_7fa2util_6Region_4mass___get__(struct __pyx_obj_3fa2_7fa2util_Region *__pyx_v_self); /* proto */ -static int __pyx_pf_3fa2_7fa2util_6Region_4mass_2__set__(struct __pyx_obj_3fa2_7fa2util_Region *__pyx_v_self, PyObject *__pyx_v_value); /* proto */ -static PyObject *__pyx_pf_3fa2_7fa2util_6Region_11massCenterX___get__(struct __pyx_obj_3fa2_7fa2util_Region *__pyx_v_self); /* proto */ -static int __pyx_pf_3fa2_7fa2util_6Region_11massCenterX_2__set__(struct __pyx_obj_3fa2_7fa2util_Region *__pyx_v_self, PyObject *__pyx_v_value); /* proto */ -static PyObject *__pyx_pf_3fa2_7fa2util_6Region_11massCenterY___get__(struct __pyx_obj_3fa2_7fa2util_Region *__pyx_v_self); /* proto */ -static int __pyx_pf_3fa2_7fa2util_6Region_11massCenterY_2__set__(struct __pyx_obj_3fa2_7fa2util_Region *__pyx_v_self, PyObject *__pyx_v_value); /* proto */ -static PyObject *__pyx_pf_3fa2_7fa2util_6Region_4size___get__(struct __pyx_obj_3fa2_7fa2util_Region *__pyx_v_self); /* proto */ -static int __pyx_pf_3fa2_7fa2util_6Region_4size_2__set__(struct __pyx_obj_3fa2_7fa2util_Region *__pyx_v_self, PyObject *__pyx_v_value); /* proto */ -static PyObject *__pyx_pf_3fa2_7fa2util_6Region_5nodes___get__(struct __pyx_obj_3fa2_7fa2util_Region *__pyx_v_self); /* proto */ -static int __pyx_pf_3fa2_7fa2util_6Region_5nodes_2__set__(struct __pyx_obj_3fa2_7fa2util_Region *__pyx_v_self, PyObject *__pyx_v_value); /* proto */ -static int __pyx_pf_3fa2_7fa2util_6Region_5nodes_4__del__(struct __pyx_obj_3fa2_7fa2util_Region *__pyx_v_self); /* proto */ -static PyObject *__pyx_pf_3fa2_7fa2util_6Region_10subregions___get__(struct __pyx_obj_3fa2_7fa2util_Region *__pyx_v_self); /* proto */ -static int __pyx_pf_3fa2_7fa2util_6Region_10subregions_2__set__(struct __pyx_obj_3fa2_7fa2util_Region *__pyx_v_self, PyObject *__pyx_v_value); /* proto */ -static int __pyx_pf_3fa2_7fa2util_6Region_10subregions_4__del__(struct __pyx_obj_3fa2_7fa2util_Region *__pyx_v_self); /* proto */ -static PyObject *__pyx_pf_3fa2_7fa2util_6Region_6__reduce_cython__(struct __pyx_obj_3fa2_7fa2util_Region *__pyx_v_self); /* proto */ -static PyObject *__pyx_pf_3fa2_7fa2util_6Region_8__setstate_cython__(struct __pyx_obj_3fa2_7fa2util_Region *__pyx_v_self, PyObject *__pyx_v___pyx_state); /* proto */ -static PyObject *__pyx_pf_3fa2_7fa2util_8adjustSpeedAndApplyForces(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_nodes, double __pyx_v_speed, double __pyx_v_speedEfficiency, double __pyx_v_jitterTolerance); /* proto */ -static PyObject *__pyx_pf_3fa2_7fa2util_10__pyx_unpickle_Node(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state); /* proto */ -static PyObject *__pyx_pf_3fa2_7fa2util_12__pyx_unpickle_Edge(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state); /* proto */ -static PyObject *__pyx_pf_3fa2_7fa2util_14__pyx_unpickle_Region(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_3fa2_7fa2util_Node(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ -static PyObject *__pyx_tp_new_3fa2_7fa2util_Edge(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ -static PyObject *__pyx_tp_new_3fa2_7fa2util_Region(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ -static PyObject *__pyx_float__05; -static PyObject *__pyx_float_1_0; -static PyObject *__pyx_int_49427421; -static PyObject *__pyx_int_107934919; -static PyObject *__pyx_int_189175108; -static PyObject *__pyx_tuple_; -static PyObject *__pyx_tuple__3; -static PyObject *__pyx_tuple__5; -static PyObject *__pyx_tuple__7; -static PyObject *__pyx_tuple__9; -static PyObject *__pyx_tuple__11; -static PyObject *__pyx_tuple__13; -static PyObject *__pyx_tuple__15; -static PyObject *__pyx_tuple__17; -static PyObject *__pyx_tuple__19; -static PyObject *__pyx_tuple__21; -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_codeobj__2; -static PyObject *__pyx_codeobj__4; -static PyObject *__pyx_codeobj__6; -static PyObject *__pyx_codeobj__8; -static PyObject *__pyx_codeobj__10; -static PyObject *__pyx_codeobj__12; -static PyObject *__pyx_codeobj__14; -static PyObject *__pyx_codeobj__16; -static PyObject *__pyx_codeobj__18; -static PyObject *__pyx_codeobj__20; -static PyObject *__pyx_codeobj__22; -static PyObject *__pyx_codeobj__24; -static PyObject *__pyx_codeobj__26; -static PyObject *__pyx_codeobj__28; -static PyObject *__pyx_codeobj__30; -static PyObject *__pyx_codeobj__32; -/* Late includes */ - -/* "fa2/fa2util.py":18 - * # This will substitute for the nLayout object - * class Node: - * def __init__(self): # <<<<<<<<<<<<<< - * self.mass = 0.0 - * self.old_dx = 0.0 - */ - -/* Python wrapper */ -static int __pyx_pw_3fa2_7fa2util_4Node_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static int __pyx_pw_3fa2_7fa2util_4Node_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - int __pyx_r; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__init__ (wrapper)", 0); - if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) { - __Pyx_RaiseArgtupleInvalid("__init__", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return -1;} - if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__init__", 0))) return -1; - __pyx_r = __pyx_pf_3fa2_7fa2util_4Node___init__(((struct __pyx_obj_3fa2_7fa2util_Node *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static int __pyx_pf_3fa2_7fa2util_4Node___init__(struct __pyx_obj_3fa2_7fa2util_Node *__pyx_v_self) { - int __pyx_r; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__init__", 0); - - /* "fa2/fa2util.py":19 - * class Node: - * def __init__(self): - * self.mass = 0.0 # <<<<<<<<<<<<<< - * self.old_dx = 0.0 - * self.old_dy = 0.0 - */ - __pyx_v_self->mass = 0.0; - - /* "fa2/fa2util.py":20 - * def __init__(self): - * self.mass = 0.0 - * self.old_dx = 0.0 # <<<<<<<<<<<<<< - * self.old_dy = 0.0 - * self.dx = 0.0 - */ - __pyx_v_self->old_dx = 0.0; - - /* "fa2/fa2util.py":21 - * self.mass = 0.0 - * self.old_dx = 0.0 - * self.old_dy = 0.0 # <<<<<<<<<<<<<< - * self.dx = 0.0 - * self.dy = 0.0 - */ - __pyx_v_self->old_dy = 0.0; - - /* "fa2/fa2util.py":22 - * self.old_dx = 0.0 - * self.old_dy = 0.0 - * self.dx = 0.0 # <<<<<<<<<<<<<< - * self.dy = 0.0 - * self.x = 0.0 - */ - __pyx_v_self->dx = 0.0; - - /* "fa2/fa2util.py":23 - * self.old_dy = 0.0 - * self.dx = 0.0 - * self.dy = 0.0 # <<<<<<<<<<<<<< - * self.x = 0.0 - * self.y = 0.0 - */ - __pyx_v_self->dy = 0.0; - - /* "fa2/fa2util.py":24 - * self.dx = 0.0 - * self.dy = 0.0 - * self.x = 0.0 # <<<<<<<<<<<<<< - * self.y = 0.0 - * - */ - __pyx_v_self->x = 0.0; - - /* "fa2/fa2util.py":25 - * self.dy = 0.0 - * self.x = 0.0 - * self.y = 0.0 # <<<<<<<<<<<<<< - * - * - */ - __pyx_v_self->y = 0.0; - - /* "fa2/fa2util.py":18 - * # This will substitute for the nLayout object - * class Node: - * def __init__(self): # <<<<<<<<<<<<<< - * self.mass = 0.0 - * self.old_dx = 0.0 - */ - - /* function exit code */ - __pyx_r = 0; - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "fa2/fa2util.pxd":19 - * # This will substitute for the nLayout object - * cdef class Node: - * cdef public double mass # <<<<<<<<<<<<<< - * cdef public double old_dx, old_dy - * cdef public double dx, dy - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3fa2_7fa2util_4Node_4mass_1__get__(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_pw_3fa2_7fa2util_4Node_4mass_1__get__(PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); - __pyx_r = __pyx_pf_3fa2_7fa2util_4Node_4mass___get__(((struct __pyx_obj_3fa2_7fa2util_Node *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3fa2_7fa2util_4Node_4mass___get__(struct __pyx_obj_3fa2_7fa2util_Node *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - __Pyx_RefNannySetupContext("__get__", 0); - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = PyFloat_FromDouble(__pyx_v_self->mass); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 19, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L0; - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("fa2.fa2util.Node.mass.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* Python wrapper */ -static int __pyx_pw_3fa2_7fa2util_4Node_4mass_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/ -static int __pyx_pw_3fa2_7fa2util_4Node_4mass_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) { - int __pyx_r; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__set__ (wrapper)", 0); - __pyx_r = __pyx_pf_3fa2_7fa2util_4Node_4mass_2__set__(((struct __pyx_obj_3fa2_7fa2util_Node *)__pyx_v_self), ((PyObject *)__pyx_v_value)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static int __pyx_pf_3fa2_7fa2util_4Node_4mass_2__set__(struct __pyx_obj_3fa2_7fa2util_Node *__pyx_v_self, PyObject *__pyx_v_value) { - int __pyx_r; - __Pyx_RefNannyDeclarations - double __pyx_t_1; - __Pyx_RefNannySetupContext("__set__", 0); - __pyx_t_1 = __pyx_PyFloat_AsDouble(__pyx_v_value); if (unlikely((__pyx_t_1 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 19, __pyx_L1_error) - __pyx_v_self->mass = __pyx_t_1; - - /* function exit code */ - __pyx_r = 0; - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_AddTraceback("fa2.fa2util.Node.mass.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = -1; - __pyx_L0:; - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "fa2/fa2util.pxd":20 - * cdef class Node: - * cdef public double mass - * cdef public double old_dx, old_dy # <<<<<<<<<<<<<< - * cdef public double dx, dy - * cdef public double x, y - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3fa2_7fa2util_4Node_6old_dx_1__get__(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_pw_3fa2_7fa2util_4Node_6old_dx_1__get__(PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); - __pyx_r = __pyx_pf_3fa2_7fa2util_4Node_6old_dx___get__(((struct __pyx_obj_3fa2_7fa2util_Node *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3fa2_7fa2util_4Node_6old_dx___get__(struct __pyx_obj_3fa2_7fa2util_Node *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - __Pyx_RefNannySetupContext("__get__", 0); - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = PyFloat_FromDouble(__pyx_v_self->old_dx); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 20, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L0; - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("fa2.fa2util.Node.old_dx.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* Python wrapper */ -static int __pyx_pw_3fa2_7fa2util_4Node_6old_dx_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/ -static int __pyx_pw_3fa2_7fa2util_4Node_6old_dx_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) { - int __pyx_r; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__set__ (wrapper)", 0); - __pyx_r = __pyx_pf_3fa2_7fa2util_4Node_6old_dx_2__set__(((struct __pyx_obj_3fa2_7fa2util_Node *)__pyx_v_self), ((PyObject *)__pyx_v_value)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static int __pyx_pf_3fa2_7fa2util_4Node_6old_dx_2__set__(struct __pyx_obj_3fa2_7fa2util_Node *__pyx_v_self, PyObject *__pyx_v_value) { - int __pyx_r; - __Pyx_RefNannyDeclarations - double __pyx_t_1; - __Pyx_RefNannySetupContext("__set__", 0); - __pyx_t_1 = __pyx_PyFloat_AsDouble(__pyx_v_value); if (unlikely((__pyx_t_1 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 20, __pyx_L1_error) - __pyx_v_self->old_dx = __pyx_t_1; - - /* function exit code */ - __pyx_r = 0; - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_AddTraceback("fa2.fa2util.Node.old_dx.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = -1; - __pyx_L0:; - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* Python wrapper */ -static PyObject *__pyx_pw_3fa2_7fa2util_4Node_6old_dy_1__get__(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_pw_3fa2_7fa2util_4Node_6old_dy_1__get__(PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); - __pyx_r = __pyx_pf_3fa2_7fa2util_4Node_6old_dy___get__(((struct __pyx_obj_3fa2_7fa2util_Node *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3fa2_7fa2util_4Node_6old_dy___get__(struct __pyx_obj_3fa2_7fa2util_Node *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - __Pyx_RefNannySetupContext("__get__", 0); - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = PyFloat_FromDouble(__pyx_v_self->old_dy); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 20, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L0; - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("fa2.fa2util.Node.old_dy.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* Python wrapper */ -static int __pyx_pw_3fa2_7fa2util_4Node_6old_dy_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/ -static int __pyx_pw_3fa2_7fa2util_4Node_6old_dy_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) { - int __pyx_r; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__set__ (wrapper)", 0); - __pyx_r = __pyx_pf_3fa2_7fa2util_4Node_6old_dy_2__set__(((struct __pyx_obj_3fa2_7fa2util_Node *)__pyx_v_self), ((PyObject *)__pyx_v_value)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static int __pyx_pf_3fa2_7fa2util_4Node_6old_dy_2__set__(struct __pyx_obj_3fa2_7fa2util_Node *__pyx_v_self, PyObject *__pyx_v_value) { - int __pyx_r; - __Pyx_RefNannyDeclarations - double __pyx_t_1; - __Pyx_RefNannySetupContext("__set__", 0); - __pyx_t_1 = __pyx_PyFloat_AsDouble(__pyx_v_value); if (unlikely((__pyx_t_1 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 20, __pyx_L1_error) - __pyx_v_self->old_dy = __pyx_t_1; - - /* function exit code */ - __pyx_r = 0; - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_AddTraceback("fa2.fa2util.Node.old_dy.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = -1; - __pyx_L0:; - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "fa2/fa2util.pxd":21 - * cdef public double mass - * cdef public double old_dx, old_dy - * cdef public double dx, dy # <<<<<<<<<<<<<< - * cdef public double x, y - * - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3fa2_7fa2util_4Node_2dx_1__get__(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_pw_3fa2_7fa2util_4Node_2dx_1__get__(PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); - __pyx_r = __pyx_pf_3fa2_7fa2util_4Node_2dx___get__(((struct __pyx_obj_3fa2_7fa2util_Node *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3fa2_7fa2util_4Node_2dx___get__(struct __pyx_obj_3fa2_7fa2util_Node *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - __Pyx_RefNannySetupContext("__get__", 0); - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = PyFloat_FromDouble(__pyx_v_self->dx); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 21, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L0; - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("fa2.fa2util.Node.dx.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* Python wrapper */ -static int __pyx_pw_3fa2_7fa2util_4Node_2dx_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/ -static int __pyx_pw_3fa2_7fa2util_4Node_2dx_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) { - int __pyx_r; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__set__ (wrapper)", 0); - __pyx_r = __pyx_pf_3fa2_7fa2util_4Node_2dx_2__set__(((struct __pyx_obj_3fa2_7fa2util_Node *)__pyx_v_self), ((PyObject *)__pyx_v_value)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static int __pyx_pf_3fa2_7fa2util_4Node_2dx_2__set__(struct __pyx_obj_3fa2_7fa2util_Node *__pyx_v_self, PyObject *__pyx_v_value) { - int __pyx_r; - __Pyx_RefNannyDeclarations - double __pyx_t_1; - __Pyx_RefNannySetupContext("__set__", 0); - __pyx_t_1 = __pyx_PyFloat_AsDouble(__pyx_v_value); if (unlikely((__pyx_t_1 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 21, __pyx_L1_error) - __pyx_v_self->dx = __pyx_t_1; - - /* function exit code */ - __pyx_r = 0; - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_AddTraceback("fa2.fa2util.Node.dx.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = -1; - __pyx_L0:; - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* Python wrapper */ -static PyObject *__pyx_pw_3fa2_7fa2util_4Node_2dy_1__get__(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_pw_3fa2_7fa2util_4Node_2dy_1__get__(PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); - __pyx_r = __pyx_pf_3fa2_7fa2util_4Node_2dy___get__(((struct __pyx_obj_3fa2_7fa2util_Node *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3fa2_7fa2util_4Node_2dy___get__(struct __pyx_obj_3fa2_7fa2util_Node *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - __Pyx_RefNannySetupContext("__get__", 0); - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = PyFloat_FromDouble(__pyx_v_self->dy); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 21, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L0; - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("fa2.fa2util.Node.dy.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* Python wrapper */ -static int __pyx_pw_3fa2_7fa2util_4Node_2dy_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/ -static int __pyx_pw_3fa2_7fa2util_4Node_2dy_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) { - int __pyx_r; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__set__ (wrapper)", 0); - __pyx_r = __pyx_pf_3fa2_7fa2util_4Node_2dy_2__set__(((struct __pyx_obj_3fa2_7fa2util_Node *)__pyx_v_self), ((PyObject *)__pyx_v_value)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static int __pyx_pf_3fa2_7fa2util_4Node_2dy_2__set__(struct __pyx_obj_3fa2_7fa2util_Node *__pyx_v_self, PyObject *__pyx_v_value) { - int __pyx_r; - __Pyx_RefNannyDeclarations - double __pyx_t_1; - __Pyx_RefNannySetupContext("__set__", 0); - __pyx_t_1 = __pyx_PyFloat_AsDouble(__pyx_v_value); if (unlikely((__pyx_t_1 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 21, __pyx_L1_error) - __pyx_v_self->dy = __pyx_t_1; - - /* function exit code */ - __pyx_r = 0; - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_AddTraceback("fa2.fa2util.Node.dy.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = -1; - __pyx_L0:; - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "fa2/fa2util.pxd":22 - * cdef public double old_dx, old_dy - * cdef public double dx, dy - * cdef public double x, y # <<<<<<<<<<<<<< - * - * # This is not in the original java function, but it makes it easier to - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3fa2_7fa2util_4Node_1x_1__get__(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_pw_3fa2_7fa2util_4Node_1x_1__get__(PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); - __pyx_r = __pyx_pf_3fa2_7fa2util_4Node_1x___get__(((struct __pyx_obj_3fa2_7fa2util_Node *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3fa2_7fa2util_4Node_1x___get__(struct __pyx_obj_3fa2_7fa2util_Node *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - __Pyx_RefNannySetupContext("__get__", 0); - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = PyFloat_FromDouble(__pyx_v_self->x); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 22, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L0; - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("fa2.fa2util.Node.x.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* Python wrapper */ -static int __pyx_pw_3fa2_7fa2util_4Node_1x_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/ -static int __pyx_pw_3fa2_7fa2util_4Node_1x_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) { - int __pyx_r; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__set__ (wrapper)", 0); - __pyx_r = __pyx_pf_3fa2_7fa2util_4Node_1x_2__set__(((struct __pyx_obj_3fa2_7fa2util_Node *)__pyx_v_self), ((PyObject *)__pyx_v_value)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static int __pyx_pf_3fa2_7fa2util_4Node_1x_2__set__(struct __pyx_obj_3fa2_7fa2util_Node *__pyx_v_self, PyObject *__pyx_v_value) { - int __pyx_r; - __Pyx_RefNannyDeclarations - double __pyx_t_1; - __Pyx_RefNannySetupContext("__set__", 0); - __pyx_t_1 = __pyx_PyFloat_AsDouble(__pyx_v_value); if (unlikely((__pyx_t_1 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 22, __pyx_L1_error) - __pyx_v_self->x = __pyx_t_1; - - /* function exit code */ - __pyx_r = 0; - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_AddTraceback("fa2.fa2util.Node.x.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = -1; - __pyx_L0:; - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* Python wrapper */ -static PyObject *__pyx_pw_3fa2_7fa2util_4Node_1y_1__get__(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_pw_3fa2_7fa2util_4Node_1y_1__get__(PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); - __pyx_r = __pyx_pf_3fa2_7fa2util_4Node_1y___get__(((struct __pyx_obj_3fa2_7fa2util_Node *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3fa2_7fa2util_4Node_1y___get__(struct __pyx_obj_3fa2_7fa2util_Node *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - __Pyx_RefNannySetupContext("__get__", 0); - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = PyFloat_FromDouble(__pyx_v_self->y); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 22, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L0; - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("fa2.fa2util.Node.y.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* Python wrapper */ -static int __pyx_pw_3fa2_7fa2util_4Node_1y_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/ -static int __pyx_pw_3fa2_7fa2util_4Node_1y_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) { - int __pyx_r; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__set__ (wrapper)", 0); - __pyx_r = __pyx_pf_3fa2_7fa2util_4Node_1y_2__set__(((struct __pyx_obj_3fa2_7fa2util_Node *)__pyx_v_self), ((PyObject *)__pyx_v_value)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static int __pyx_pf_3fa2_7fa2util_4Node_1y_2__set__(struct __pyx_obj_3fa2_7fa2util_Node *__pyx_v_self, PyObject *__pyx_v_value) { - int __pyx_r; - __Pyx_RefNannyDeclarations - double __pyx_t_1; - __Pyx_RefNannySetupContext("__set__", 0); - __pyx_t_1 = __pyx_PyFloat_AsDouble(__pyx_v_value); if (unlikely((__pyx_t_1 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 22, __pyx_L1_error) - __pyx_v_self->y = __pyx_t_1; - - /* function exit code */ - __pyx_r = 0; - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_AddTraceback("fa2.fa2util.Node.y.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = -1; - __pyx_L0:; - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "(tree fragment)":1 - * def __reduce_cython__(self): # <<<<<<<<<<<<<< - * cdef tuple state - * cdef object _dict - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3fa2_7fa2util_4Node_3__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ -static PyMethodDef __pyx_mdef_3fa2_7fa2util_4Node_3__reduce_cython__ = {"__reduce_cython__", (PyCFunction)__pyx_pw_3fa2_7fa2util_4Node_3__reduce_cython__, METH_NOARGS, 0}; -static PyObject *__pyx_pw_3fa2_7fa2util_4Node_3__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_3fa2_7fa2util_4Node_2__reduce_cython__(((struct __pyx_obj_3fa2_7fa2util_Node *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3fa2_7fa2util_4Node_2__reduce_cython__(struct __pyx_obj_3fa2_7fa2util_Node *__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; - 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; - int __pyx_t_9; - int __pyx_t_10; - __Pyx_RefNannySetupContext("__reduce_cython__", 0); - - /* "(tree fragment)":5 - * cdef object _dict - * cdef bint use_setstate - * state = (self.dx, self.dy, self.mass, self.old_dx, self.old_dy, self.x, self.y) # <<<<<<<<<<<<<< - * _dict = getattr(self, '__dict__', None) - * if _dict is not None: - */ - __pyx_t_1 = PyFloat_FromDouble(__pyx_v_self->dx); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = PyFloat_FromDouble(__pyx_v_self->dy); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = PyFloat_FromDouble(__pyx_v_self->mass); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 5, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = PyFloat_FromDouble(__pyx_v_self->old_dx); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = PyFloat_FromDouble(__pyx_v_self->old_dy); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 5, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_6 = PyFloat_FromDouble(__pyx_v_self->x); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 5, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = PyFloat_FromDouble(__pyx_v_self->y); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 5, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_8 = PyTuple_New(7); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 5, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_1); - __Pyx_GIVEREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_2); - __Pyx_GIVEREF(__pyx_t_3); - PyTuple_SET_ITEM(__pyx_t_8, 2, __pyx_t_3); - __Pyx_GIVEREF(__pyx_t_4); - PyTuple_SET_ITEM(__pyx_t_8, 3, __pyx_t_4); - __Pyx_GIVEREF(__pyx_t_5); - PyTuple_SET_ITEM(__pyx_t_8, 4, __pyx_t_5); - __Pyx_GIVEREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_8, 5, __pyx_t_6); - __Pyx_GIVEREF(__pyx_t_7); - PyTuple_SET_ITEM(__pyx_t_8, 6, __pyx_t_7); - __pyx_t_1 = 0; - __pyx_t_2 = 0; - __pyx_t_3 = 0; - __pyx_t_4 = 0; - __pyx_t_5 = 0; - __pyx_t_6 = 0; - __pyx_t_7 = 0; - __pyx_v_state = ((PyObject*)__pyx_t_8); - __pyx_t_8 = 0; - - /* "(tree fragment)":6 - * cdef bint use_setstate - * state = (self.dx, self.dy, self.mass, self.old_dx, self.old_dy, self.x, self.y) - * _dict = getattr(self, '__dict__', None) # <<<<<<<<<<<<<< - * if _dict is not None: - * state += (_dict,) - */ - __pyx_t_8 = __Pyx_GetAttr3(((PyObject *)__pyx_v_self), __pyx_n_s_dict, Py_None); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 6, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_v__dict = __pyx_t_8; - __pyx_t_8 = 0; - - /* "(tree fragment)":7 - * state = (self.dx, self.dy, self.mass, self.old_dx, self.old_dy, self.x, self.y) - * _dict = getattr(self, '__dict__', None) - * if _dict is not None: # <<<<<<<<<<<<<< - * state += (_dict,) - * use_setstate = True - */ - __pyx_t_9 = (__pyx_v__dict != Py_None); - __pyx_t_10 = (__pyx_t_9 != 0); - if (__pyx_t_10) { - - /* "(tree fragment)":8 - * _dict = getattr(self, '__dict__', None) - * if _dict is not None: - * state += (_dict,) # <<<<<<<<<<<<<< - * use_setstate = True - * else: - */ - __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 8, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_INCREF(__pyx_v__dict); - __Pyx_GIVEREF(__pyx_v__dict); - PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_v__dict); - __pyx_t_7 = PyNumber_InPlaceAdd(__pyx_v_state, __pyx_t_8); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 8, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF_SET(__pyx_v_state, ((PyObject*)__pyx_t_7)); - __pyx_t_7 = 0; - - /* "(tree fragment)":9 - * if _dict is not None: - * state += (_dict,) - * use_setstate = True # <<<<<<<<<<<<<< - * else: - * use_setstate = False - */ - __pyx_v_use_setstate = 1; - - /* "(tree fragment)":7 - * state = (self.dx, self.dy, self.mass, self.old_dx, self.old_dy, self.x, self.y) - * _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 = False # <<<<<<<<<<<<<< - * if use_setstate: - * return __pyx_unpickle_Node, (type(self), 0x2f233dd, None), state - */ - /*else*/ { - __pyx_v_use_setstate = 0; - } - __pyx_L3:; - - /* "(tree fragment)":12 - * else: - * use_setstate = False - * if use_setstate: # <<<<<<<<<<<<<< - * return __pyx_unpickle_Node, (type(self), 0x2f233dd, None), state - * else: - */ - __pyx_t_10 = (__pyx_v_use_setstate != 0); - if (__pyx_t_10) { - - /* "(tree fragment)":13 - * use_setstate = False - * if use_setstate: - * return __pyx_unpickle_Node, (type(self), 0x2f233dd, None), state # <<<<<<<<<<<<<< - * else: - * return __pyx_unpickle_Node, (type(self), 0x2f233dd, state) - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_pyx_unpickle_Node); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 13, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_8 = PyTuple_New(3); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 13, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); - __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); - PyTuple_SET_ITEM(__pyx_t_8, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); - __Pyx_INCREF(__pyx_int_49427421); - __Pyx_GIVEREF(__pyx_int_49427421); - PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_int_49427421); - __Pyx_INCREF(Py_None); - __Pyx_GIVEREF(Py_None); - PyTuple_SET_ITEM(__pyx_t_8, 2, Py_None); - __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 13, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GIVEREF(__pyx_t_7); - PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_7); - __Pyx_GIVEREF(__pyx_t_8); - PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_8); - __Pyx_INCREF(__pyx_v_state); - __Pyx_GIVEREF(__pyx_v_state); - PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_v_state); - __pyx_t_7 = 0; - __pyx_t_8 = 0; - __pyx_r = __pyx_t_6; - __pyx_t_6 = 0; - goto __pyx_L0; - - /* "(tree fragment)":12 - * else: - * use_setstate = False - * if use_setstate: # <<<<<<<<<<<<<< - * return __pyx_unpickle_Node, (type(self), 0x2f233dd, None), state - * else: - */ - } - - /* "(tree fragment)":15 - * return __pyx_unpickle_Node, (type(self), 0x2f233dd, None), state - * else: - * return __pyx_unpickle_Node, (type(self), 0x2f233dd, state) # <<<<<<<<<<<<<< - * def __setstate_cython__(self, __pyx_state): - * __pyx_unpickle_Node__set_state(self, __pyx_state) - */ - /*else*/ { - __Pyx_XDECREF(__pyx_r); - __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_pyx_unpickle_Node); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 15, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_8 = PyTuple_New(3); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 15, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); - __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); - PyTuple_SET_ITEM(__pyx_t_8, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); - __Pyx_INCREF(__pyx_int_49427421); - __Pyx_GIVEREF(__pyx_int_49427421); - PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_int_49427421); - __Pyx_INCREF(__pyx_v_state); - __Pyx_GIVEREF(__pyx_v_state); - PyTuple_SET_ITEM(__pyx_t_8, 2, __pyx_v_state); - __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 15, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_GIVEREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_6); - __Pyx_GIVEREF(__pyx_t_8); - PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_8); - __pyx_t_6 = 0; - __pyx_t_8 = 0; - __pyx_r = __pyx_t_7; - __pyx_t_7 = 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_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_AddTraceback("fa2.fa2util.Node.__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_Node, (type(self), 0x2f233dd, state) - * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< - * __pyx_unpickle_Node__set_state(self, __pyx_state) - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3fa2_7fa2util_4Node_5__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/ -static PyMethodDef __pyx_mdef_3fa2_7fa2util_4Node_5__setstate_cython__ = {"__setstate_cython__", (PyCFunction)__pyx_pw_3fa2_7fa2util_4Node_5__setstate_cython__, METH_O, 0}; -static PyObject *__pyx_pw_3fa2_7fa2util_4Node_5__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_3fa2_7fa2util_4Node_4__setstate_cython__(((struct __pyx_obj_3fa2_7fa2util_Node *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3fa2_7fa2util_4Node_4__setstate_cython__(struct __pyx_obj_3fa2_7fa2util_Node *__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_Node, (type(self), 0x2f233dd, state) - * def __setstate_cython__(self, __pyx_state): - * __pyx_unpickle_Node__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_f_3fa2_7fa2util___pyx_unpickle_Node__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_Node, (type(self), 0x2f233dd, state) - * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< - * __pyx_unpickle_Node__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("fa2.fa2util.Node.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "fa2/fa2util.py":30 - * # This is not in the original java code, but it makes it easier to deal with edges - * class Edge: - * def __init__(self): # <<<<<<<<<<<<<< - * self.node1 = -1 - * self.node2 = -1 - */ - -/* Python wrapper */ -static int __pyx_pw_3fa2_7fa2util_4Edge_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static int __pyx_pw_3fa2_7fa2util_4Edge_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - int __pyx_r; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__init__ (wrapper)", 0); - if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) { - __Pyx_RaiseArgtupleInvalid("__init__", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return -1;} - if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__init__", 0))) return -1; - __pyx_r = __pyx_pf_3fa2_7fa2util_4Edge___init__(((struct __pyx_obj_3fa2_7fa2util_Edge *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static int __pyx_pf_3fa2_7fa2util_4Edge___init__(struct __pyx_obj_3fa2_7fa2util_Edge *__pyx_v_self) { - int __pyx_r; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__init__", 0); - - /* "fa2/fa2util.py":31 - * class Edge: - * def __init__(self): - * self.node1 = -1 # <<<<<<<<<<<<<< - * self.node2 = -1 - * self.weight = 0.0 - */ - __pyx_v_self->node1 = -1; - - /* "fa2/fa2util.py":32 - * def __init__(self): - * self.node1 = -1 - * self.node2 = -1 # <<<<<<<<<<<<<< - * self.weight = 0.0 - * - */ - __pyx_v_self->node2 = -1; - - /* "fa2/fa2util.py":33 - * self.node1 = -1 - * self.node2 = -1 - * self.weight = 0.0 # <<<<<<<<<<<<<< - * - * - */ - __pyx_v_self->weight = 0.0; - - /* "fa2/fa2util.py":30 - * # This is not in the original java code, but it makes it easier to deal with edges - * class Edge: - * def __init__(self): # <<<<<<<<<<<<<< - * self.node1 = -1 - * self.node2 = -1 - */ - - /* function exit code */ - __pyx_r = 0; - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "fa2/fa2util.pxd":27 - * # deal with edges. - * cdef class Edge: - * cdef public int node1, node2 # <<<<<<<<<<<<<< - * cdef public double weight - * - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3fa2_7fa2util_4Edge_5node1_1__get__(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_pw_3fa2_7fa2util_4Edge_5node1_1__get__(PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); - __pyx_r = __pyx_pf_3fa2_7fa2util_4Edge_5node1___get__(((struct __pyx_obj_3fa2_7fa2util_Edge *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3fa2_7fa2util_4Edge_5node1___get__(struct __pyx_obj_3fa2_7fa2util_Edge *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - __Pyx_RefNannySetupContext("__get__", 0); - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->node1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 27, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L0; - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("fa2.fa2util.Edge.node1.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* Python wrapper */ -static int __pyx_pw_3fa2_7fa2util_4Edge_5node1_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/ -static int __pyx_pw_3fa2_7fa2util_4Edge_5node1_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) { - int __pyx_r; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__set__ (wrapper)", 0); - __pyx_r = __pyx_pf_3fa2_7fa2util_4Edge_5node1_2__set__(((struct __pyx_obj_3fa2_7fa2util_Edge *)__pyx_v_self), ((PyObject *)__pyx_v_value)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static int __pyx_pf_3fa2_7fa2util_4Edge_5node1_2__set__(struct __pyx_obj_3fa2_7fa2util_Edge *__pyx_v_self, PyObject *__pyx_v_value) { - int __pyx_r; - __Pyx_RefNannyDeclarations - int __pyx_t_1; - __Pyx_RefNannySetupContext("__set__", 0); - __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 27, __pyx_L1_error) - __pyx_v_self->node1 = __pyx_t_1; - - /* function exit code */ - __pyx_r = 0; - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_AddTraceback("fa2.fa2util.Edge.node1.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = -1; - __pyx_L0:; - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* Python wrapper */ -static PyObject *__pyx_pw_3fa2_7fa2util_4Edge_5node2_1__get__(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_pw_3fa2_7fa2util_4Edge_5node2_1__get__(PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); - __pyx_r = __pyx_pf_3fa2_7fa2util_4Edge_5node2___get__(((struct __pyx_obj_3fa2_7fa2util_Edge *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3fa2_7fa2util_4Edge_5node2___get__(struct __pyx_obj_3fa2_7fa2util_Edge *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - __Pyx_RefNannySetupContext("__get__", 0); - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->node2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 27, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L0; - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("fa2.fa2util.Edge.node2.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* Python wrapper */ -static int __pyx_pw_3fa2_7fa2util_4Edge_5node2_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/ -static int __pyx_pw_3fa2_7fa2util_4Edge_5node2_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) { - int __pyx_r; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__set__ (wrapper)", 0); - __pyx_r = __pyx_pf_3fa2_7fa2util_4Edge_5node2_2__set__(((struct __pyx_obj_3fa2_7fa2util_Edge *)__pyx_v_self), ((PyObject *)__pyx_v_value)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static int __pyx_pf_3fa2_7fa2util_4Edge_5node2_2__set__(struct __pyx_obj_3fa2_7fa2util_Edge *__pyx_v_self, PyObject *__pyx_v_value) { - int __pyx_r; - __Pyx_RefNannyDeclarations - int __pyx_t_1; - __Pyx_RefNannySetupContext("__set__", 0); - __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 27, __pyx_L1_error) - __pyx_v_self->node2 = __pyx_t_1; - - /* function exit code */ - __pyx_r = 0; - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_AddTraceback("fa2.fa2util.Edge.node2.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = -1; - __pyx_L0:; - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "fa2/fa2util.pxd":28 - * cdef class Edge: - * cdef public int node1, node2 - * cdef public double weight # <<<<<<<<<<<<<< - * - * # Repulsion function. `n1` and `n2` should be nodes. This will - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3fa2_7fa2util_4Edge_6weight_1__get__(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_pw_3fa2_7fa2util_4Edge_6weight_1__get__(PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); - __pyx_r = __pyx_pf_3fa2_7fa2util_4Edge_6weight___get__(((struct __pyx_obj_3fa2_7fa2util_Edge *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3fa2_7fa2util_4Edge_6weight___get__(struct __pyx_obj_3fa2_7fa2util_Edge *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - __Pyx_RefNannySetupContext("__get__", 0); - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = PyFloat_FromDouble(__pyx_v_self->weight); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 28, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L0; - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("fa2.fa2util.Edge.weight.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* Python wrapper */ -static int __pyx_pw_3fa2_7fa2util_4Edge_6weight_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/ -static int __pyx_pw_3fa2_7fa2util_4Edge_6weight_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) { - int __pyx_r; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__set__ (wrapper)", 0); - __pyx_r = __pyx_pf_3fa2_7fa2util_4Edge_6weight_2__set__(((struct __pyx_obj_3fa2_7fa2util_Edge *)__pyx_v_self), ((PyObject *)__pyx_v_value)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static int __pyx_pf_3fa2_7fa2util_4Edge_6weight_2__set__(struct __pyx_obj_3fa2_7fa2util_Edge *__pyx_v_self, PyObject *__pyx_v_value) { - int __pyx_r; - __Pyx_RefNannyDeclarations - double __pyx_t_1; - __Pyx_RefNannySetupContext("__set__", 0); - __pyx_t_1 = __pyx_PyFloat_AsDouble(__pyx_v_value); if (unlikely((__pyx_t_1 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 28, __pyx_L1_error) - __pyx_v_self->weight = __pyx_t_1; - - /* function exit code */ - __pyx_r = 0; - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_AddTraceback("fa2.fa2util.Edge.weight.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = -1; - __pyx_L0:; - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "(tree fragment)":1 - * def __reduce_cython__(self): # <<<<<<<<<<<<<< - * cdef tuple state - * cdef object _dict - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3fa2_7fa2util_4Edge_3__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ -static PyMethodDef __pyx_mdef_3fa2_7fa2util_4Edge_3__reduce_cython__ = {"__reduce_cython__", (PyCFunction)__pyx_pw_3fa2_7fa2util_4Edge_3__reduce_cython__, METH_NOARGS, 0}; -static PyObject *__pyx_pw_3fa2_7fa2util_4Edge_3__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_3fa2_7fa2util_4Edge_2__reduce_cython__(((struct __pyx_obj_3fa2_7fa2util_Edge *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3fa2_7fa2util_4Edge_2__reduce_cython__(struct __pyx_obj_3fa2_7fa2util_Edge *__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; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - int __pyx_t_5; - int __pyx_t_6; - __Pyx_RefNannySetupContext("__reduce_cython__", 0); - - /* "(tree fragment)":5 - * cdef object _dict - * cdef bint use_setstate - * state = (self.node1, self.node2, self.weight) # <<<<<<<<<<<<<< - * _dict = getattr(self, '__dict__', None) - * if _dict is not None: - */ - __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->node1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_self->node2); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = PyFloat_FromDouble(__pyx_v_self->weight); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 5, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5, __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; - __pyx_v_state = ((PyObject*)__pyx_t_4); - __pyx_t_4 = 0; - - /* "(tree fragment)":6 - * cdef bint use_setstate - * state = (self.node1, self.node2, self.weight) - * _dict = getattr(self, '__dict__', None) # <<<<<<<<<<<<<< - * if _dict is not None: - * state += (_dict,) - */ - __pyx_t_4 = __Pyx_GetAttr3(((PyObject *)__pyx_v_self), __pyx_n_s_dict, Py_None); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 6, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_v__dict = __pyx_t_4; - __pyx_t_4 = 0; - - /* "(tree fragment)":7 - * state = (self.node1, self.node2, self.weight) - * _dict = getattr(self, '__dict__', None) - * if _dict is not None: # <<<<<<<<<<<<<< - * state += (_dict,) - * use_setstate = True - */ - __pyx_t_5 = (__pyx_v__dict != Py_None); - __pyx_t_6 = (__pyx_t_5 != 0); - if (__pyx_t_6) { - - /* "(tree fragment)":8 - * _dict = getattr(self, '__dict__', None) - * if _dict is not None: - * state += (_dict,) # <<<<<<<<<<<<<< - * use_setstate = True - * else: - */ - __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 8, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_INCREF(__pyx_v__dict); - __Pyx_GIVEREF(__pyx_v__dict); - PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v__dict); - __pyx_t_3 = PyNumber_InPlaceAdd(__pyx_v_state, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 8, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF_SET(__pyx_v_state, ((PyObject*)__pyx_t_3)); - __pyx_t_3 = 0; - - /* "(tree fragment)":9 - * if _dict is not None: - * state += (_dict,) - * use_setstate = True # <<<<<<<<<<<<<< - * else: - * use_setstate = False - */ - __pyx_v_use_setstate = 1; - - /* "(tree fragment)":7 - * state = (self.node1, self.node2, self.weight) - * _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 = False # <<<<<<<<<<<<<< - * if use_setstate: - * return __pyx_unpickle_Edge, (type(self), 0xb469544, None), state - */ - /*else*/ { - __pyx_v_use_setstate = 0; - } - __pyx_L3:; - - /* "(tree fragment)":12 - * else: - * use_setstate = False - * if use_setstate: # <<<<<<<<<<<<<< - * return __pyx_unpickle_Edge, (type(self), 0xb469544, None), state - * else: - */ - __pyx_t_6 = (__pyx_v_use_setstate != 0); - if (__pyx_t_6) { - - /* "(tree fragment)":13 - * use_setstate = False - * if use_setstate: - * return __pyx_unpickle_Edge, (type(self), 0xb469544, None), state # <<<<<<<<<<<<<< - * else: - * return __pyx_unpickle_Edge, (type(self), 0xb469544, state) - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_pyx_unpickle_Edge); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 13, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 13, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); - __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); - PyTuple_SET_ITEM(__pyx_t_4, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); - __Pyx_INCREF(__pyx_int_189175108); - __Pyx_GIVEREF(__pyx_int_189175108); - PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_int_189175108); - __Pyx_INCREF(Py_None); - __Pyx_GIVEREF(Py_None); - PyTuple_SET_ITEM(__pyx_t_4, 2, Py_None); - __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 13, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_GIVEREF(__pyx_t_3); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3); - __Pyx_GIVEREF(__pyx_t_4); - PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_4); - __Pyx_INCREF(__pyx_v_state); - __Pyx_GIVEREF(__pyx_v_state); - PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_v_state); - __pyx_t_3 = 0; - __pyx_t_4 = 0; - __pyx_r = __pyx_t_2; - __pyx_t_2 = 0; - goto __pyx_L0; - - /* "(tree fragment)":12 - * else: - * use_setstate = False - * if use_setstate: # <<<<<<<<<<<<<< - * return __pyx_unpickle_Edge, (type(self), 0xb469544, None), state - * else: - */ - } - - /* "(tree fragment)":15 - * return __pyx_unpickle_Edge, (type(self), 0xb469544, None), state - * else: - * return __pyx_unpickle_Edge, (type(self), 0xb469544, state) # <<<<<<<<<<<<<< - * def __setstate_cython__(self, __pyx_state): - * __pyx_unpickle_Edge__set_state(self, __pyx_state) - */ - /*else*/ { - __Pyx_XDECREF(__pyx_r); - __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_pyx_unpickle_Edge); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 15, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 15, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); - __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); - PyTuple_SET_ITEM(__pyx_t_4, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); - __Pyx_INCREF(__pyx_int_189175108); - __Pyx_GIVEREF(__pyx_int_189175108); - PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_int_189175108); - __Pyx_INCREF(__pyx_v_state); - __Pyx_GIVEREF(__pyx_v_state); - PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_v_state); - __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 15, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_GIVEREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2); - __Pyx_GIVEREF(__pyx_t_4); - PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_4); - __pyx_t_2 = 0; - __pyx_t_4 = 0; - __pyx_r = __pyx_t_3; - __pyx_t_3 = 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_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_4); - __Pyx_AddTraceback("fa2.fa2util.Edge.__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_Edge, (type(self), 0xb469544, state) - * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< - * __pyx_unpickle_Edge__set_state(self, __pyx_state) - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3fa2_7fa2util_4Edge_5__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/ -static PyMethodDef __pyx_mdef_3fa2_7fa2util_4Edge_5__setstate_cython__ = {"__setstate_cython__", (PyCFunction)__pyx_pw_3fa2_7fa2util_4Edge_5__setstate_cython__, METH_O, 0}; -static PyObject *__pyx_pw_3fa2_7fa2util_4Edge_5__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_3fa2_7fa2util_4Edge_4__setstate_cython__(((struct __pyx_obj_3fa2_7fa2util_Edge *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3fa2_7fa2util_4Edge_4__setstate_cython__(struct __pyx_obj_3fa2_7fa2util_Edge *__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_Edge, (type(self), 0xb469544, state) - * def __setstate_cython__(self, __pyx_state): - * __pyx_unpickle_Edge__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_f_3fa2_7fa2util___pyx_unpickle_Edge__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_Edge, (type(self), 0xb469544, state) - * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< - * __pyx_unpickle_Edge__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("fa2.fa2util.Edge.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "fa2/fa2util.py":41 - * # Repulsion function. `n1` and `n2` should be nodes. This will - * # adjust the dx and dy values of `n1` `n2` - * def linRepulsion(n1, n2, coefficient=0): # <<<<<<<<<<<<<< - * xDist = n1.x - n2.x - * yDist = n1.y - n2.y - */ - -static void __pyx_f_3fa2_7fa2util_linRepulsion(struct __pyx_obj_3fa2_7fa2util_Node *__pyx_v_n1, struct __pyx_obj_3fa2_7fa2util_Node *__pyx_v_n2, struct __pyx_opt_args_3fa2_7fa2util_linRepulsion *__pyx_optional_args) { - double __pyx_v_coefficient = ((double)0.0); - double __pyx_v_xDist; - double __pyx_v_yDist; - double __pyx_v_distance2; - double __pyx_v_factor; - __Pyx_RefNannyDeclarations - int __pyx_t_1; - double __pyx_t_2; - __Pyx_RefNannySetupContext("linRepulsion", 0); - if (__pyx_optional_args) { - if (__pyx_optional_args->__pyx_n > 0) { - __pyx_v_coefficient = __pyx_optional_args->coefficient; - } - } - - /* "fa2/fa2util.py":42 - * # adjust the dx and dy values of `n1` `n2` - * def linRepulsion(n1, n2, coefficient=0): - * xDist = n1.x - n2.x # <<<<<<<<<<<<<< - * yDist = n1.y - n2.y - * distance2 = xDist * xDist + yDist * yDist # Distance squared - */ - __pyx_v_xDist = (__pyx_v_n1->x - __pyx_v_n2->x); - - /* "fa2/fa2util.py":43 - * def linRepulsion(n1, n2, coefficient=0): - * xDist = n1.x - n2.x - * yDist = n1.y - n2.y # <<<<<<<<<<<<<< - * distance2 = xDist * xDist + yDist * yDist # Distance squared - * - */ - __pyx_v_yDist = (__pyx_v_n1->y - __pyx_v_n2->y); - - /* "fa2/fa2util.py":44 - * xDist = n1.x - n2.x - * yDist = n1.y - n2.y - * distance2 = xDist * xDist + yDist * yDist # Distance squared # <<<<<<<<<<<<<< - * - * if distance2 > 0: - */ - __pyx_v_distance2 = ((__pyx_v_xDist * __pyx_v_xDist) + (__pyx_v_yDist * __pyx_v_yDist)); - - /* "fa2/fa2util.py":46 - * distance2 = xDist * xDist + yDist * yDist # Distance squared - * - * if distance2 > 0: # <<<<<<<<<<<<<< - * factor = coefficient * n1.mass * n2.mass / distance2 - * n1.dx += xDist * factor - */ - __pyx_t_1 = ((__pyx_v_distance2 > 0.0) != 0); - if (__pyx_t_1) { - - /* "fa2/fa2util.py":47 - * - * if distance2 > 0: - * factor = coefficient * n1.mass * n2.mass / distance2 # <<<<<<<<<<<<<< - * n1.dx += xDist * factor - * n1.dy += yDist * factor - */ - __pyx_t_2 = ((__pyx_v_coefficient * __pyx_v_n1->mass) * __pyx_v_n2->mass); - if (unlikely(__pyx_v_distance2 == 0)) { - PyErr_SetString(PyExc_ZeroDivisionError, "float division"); - __PYX_ERR(2, 47, __pyx_L1_error) - } - __pyx_v_factor = (__pyx_t_2 / __pyx_v_distance2); - - /* "fa2/fa2util.py":48 - * if distance2 > 0: - * factor = coefficient * n1.mass * n2.mass / distance2 - * n1.dx += xDist * factor # <<<<<<<<<<<<<< - * n1.dy += yDist * factor - * n2.dx -= xDist * factor - */ - __pyx_v_n1->dx = (__pyx_v_n1->dx + (__pyx_v_xDist * __pyx_v_factor)); - - /* "fa2/fa2util.py":49 - * factor = coefficient * n1.mass * n2.mass / distance2 - * n1.dx += xDist * factor - * n1.dy += yDist * factor # <<<<<<<<<<<<<< - * n2.dx -= xDist * factor - * n2.dy -= yDist * factor - */ - __pyx_v_n1->dy = (__pyx_v_n1->dy + (__pyx_v_yDist * __pyx_v_factor)); - - /* "fa2/fa2util.py":50 - * n1.dx += xDist * factor - * n1.dy += yDist * factor - * n2.dx -= xDist * factor # <<<<<<<<<<<<<< - * n2.dy -= yDist * factor - * - */ - __pyx_v_n2->dx = (__pyx_v_n2->dx - (__pyx_v_xDist * __pyx_v_factor)); - - /* "fa2/fa2util.py":51 - * n1.dy += yDist * factor - * n2.dx -= xDist * factor - * n2.dy -= yDist * factor # <<<<<<<<<<<<<< - * - * - */ - __pyx_v_n2->dy = (__pyx_v_n2->dy - (__pyx_v_yDist * __pyx_v_factor)); - - /* "fa2/fa2util.py":46 - * distance2 = xDist * xDist + yDist * yDist # Distance squared - * - * if distance2 > 0: # <<<<<<<<<<<<<< - * factor = coefficient * n1.mass * n2.mass / distance2 - * n1.dx += xDist * factor - */ - } - - /* "fa2/fa2util.py":41 - * # Repulsion function. `n1` and `n2` should be nodes. This will - * # adjust the dx and dy values of `n1` `n2` - * def linRepulsion(n1, n2, coefficient=0): # <<<<<<<<<<<<<< - * xDist = n1.x - n2.x - * yDist = n1.y - n2.y - */ - - /* function exit code */ - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_WriteUnraisable("fa2.fa2util.linRepulsion", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0); - __pyx_L0:; - __Pyx_RefNannyFinishContext(); -} - -/* "fa2/fa2util.py":55 - * - * # Repulsion function. 'n' is node and 'r' is region - * def linRepulsion_region(n, r, coefficient=0): # <<<<<<<<<<<<<< - * xDist = n.x - r.massCenterX - * yDist = n.y - r.massCenterY - */ - -static void __pyx_f_3fa2_7fa2util_linRepulsion_region(struct __pyx_obj_3fa2_7fa2util_Node *__pyx_v_n, struct __pyx_obj_3fa2_7fa2util_Region *__pyx_v_r, struct __pyx_opt_args_3fa2_7fa2util_linRepulsion_region *__pyx_optional_args) { - double __pyx_v_coefficient = ((double)0.0); - double __pyx_v_xDist; - double __pyx_v_yDist; - double __pyx_v_distance2; - double __pyx_v_factor; - __Pyx_RefNannyDeclarations - int __pyx_t_1; - double __pyx_t_2; - __Pyx_RefNannySetupContext("linRepulsion_region", 0); - if (__pyx_optional_args) { - if (__pyx_optional_args->__pyx_n > 0) { - __pyx_v_coefficient = __pyx_optional_args->coefficient; - } - } - - /* "fa2/fa2util.py":56 - * # Repulsion function. 'n' is node and 'r' is region - * def linRepulsion_region(n, r, coefficient=0): - * xDist = n.x - r.massCenterX # <<<<<<<<<<<<<< - * yDist = n.y - r.massCenterY - * distance2 = xDist * xDist + yDist * yDist - */ - __pyx_v_xDist = (__pyx_v_n->x - __pyx_v_r->massCenterX); - - /* "fa2/fa2util.py":57 - * def linRepulsion_region(n, r, coefficient=0): - * xDist = n.x - r.massCenterX - * yDist = n.y - r.massCenterY # <<<<<<<<<<<<<< - * distance2 = xDist * xDist + yDist * yDist - * - */ - __pyx_v_yDist = (__pyx_v_n->y - __pyx_v_r->massCenterY); - - /* "fa2/fa2util.py":58 - * xDist = n.x - r.massCenterX - * yDist = n.y - r.massCenterY - * distance2 = xDist * xDist + yDist * yDist # <<<<<<<<<<<<<< - * - * if distance2 > 0: - */ - __pyx_v_distance2 = ((__pyx_v_xDist * __pyx_v_xDist) + (__pyx_v_yDist * __pyx_v_yDist)); - - /* "fa2/fa2util.py":60 - * distance2 = xDist * xDist + yDist * yDist - * - * if distance2 > 0: # <<<<<<<<<<<<<< - * factor = coefficient * n.mass * r.mass / distance2 - * n.dx += xDist * factor - */ - __pyx_t_1 = ((__pyx_v_distance2 > 0.0) != 0); - if (__pyx_t_1) { - - /* "fa2/fa2util.py":61 - * - * if distance2 > 0: - * factor = coefficient * n.mass * r.mass / distance2 # <<<<<<<<<<<<<< - * n.dx += xDist * factor - * n.dy += yDist * factor - */ - __pyx_t_2 = ((__pyx_v_coefficient * __pyx_v_n->mass) * __pyx_v_r->mass); - if (unlikely(__pyx_v_distance2 == 0)) { - PyErr_SetString(PyExc_ZeroDivisionError, "float division"); - __PYX_ERR(2, 61, __pyx_L1_error) - } - __pyx_v_factor = (__pyx_t_2 / __pyx_v_distance2); - - /* "fa2/fa2util.py":62 - * if distance2 > 0: - * factor = coefficient * n.mass * r.mass / distance2 - * n.dx += xDist * factor # <<<<<<<<<<<<<< - * n.dy += yDist * factor - * - */ - __pyx_v_n->dx = (__pyx_v_n->dx + (__pyx_v_xDist * __pyx_v_factor)); - - /* "fa2/fa2util.py":63 - * factor = coefficient * n.mass * r.mass / distance2 - * n.dx += xDist * factor - * n.dy += yDist * factor # <<<<<<<<<<<<<< - * - * - */ - __pyx_v_n->dy = (__pyx_v_n->dy + (__pyx_v_yDist * __pyx_v_factor)); - - /* "fa2/fa2util.py":60 - * distance2 = xDist * xDist + yDist * yDist - * - * if distance2 > 0: # <<<<<<<<<<<<<< - * factor = coefficient * n.mass * r.mass / distance2 - * n.dx += xDist * factor - */ - } - - /* "fa2/fa2util.py":55 - * - * # Repulsion function. 'n' is node and 'r' is region - * def linRepulsion_region(n, r, coefficient=0): # <<<<<<<<<<<<<< - * xDist = n.x - r.massCenterX - * yDist = n.y - r.massCenterY - */ - - /* function exit code */ - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_WriteUnraisable("fa2.fa2util.linRepulsion_region", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0); - __pyx_L0:; - __Pyx_RefNannyFinishContext(); -} - -/* "fa2/fa2util.py":71 - * # nodes repelling each other, and b. gravity is actually an - * # attraction) - * def linGravity(n, g): # <<<<<<<<<<<<<< - * xDist = n.x - * yDist = n.y - */ - -static void __pyx_f_3fa2_7fa2util_linGravity(struct __pyx_obj_3fa2_7fa2util_Node *__pyx_v_n, double __pyx_v_g) { - double __pyx_v_xDist; - double __pyx_v_yDist; - double __pyx_v_distance; - double __pyx_v_factor; - __Pyx_RefNannyDeclarations - double __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("linGravity", 0); - - /* "fa2/fa2util.py":72 - * # attraction) - * def linGravity(n, g): - * xDist = n.x # <<<<<<<<<<<<<< - * yDist = n.y - * distance = sqrt(xDist * xDist + yDist * yDist) - */ - __pyx_t_1 = __pyx_v_n->x; - __pyx_v_xDist = __pyx_t_1; - - /* "fa2/fa2util.py":73 - * def linGravity(n, g): - * xDist = n.x - * yDist = n.y # <<<<<<<<<<<<<< - * distance = sqrt(xDist * xDist + yDist * yDist) - * - */ - __pyx_t_1 = __pyx_v_n->y; - __pyx_v_yDist = __pyx_t_1; - - /* "fa2/fa2util.py":74 - * xDist = n.x - * yDist = n.y - * distance = sqrt(xDist * xDist + yDist * yDist) # <<<<<<<<<<<<<< - * - * if distance > 0: - */ - __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_sqrt); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 74, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = PyFloat_FromDouble(((__pyx_v_xDist * __pyx_v_xDist) + (__pyx_v_yDist * __pyx_v_yDist))); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 74, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) { - __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_3); - if (likely(__pyx_t_5)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); - __Pyx_INCREF(__pyx_t_5); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_3, function); - } - } - __pyx_t_2 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_5, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __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_2)) __PYX_ERR(2, 74, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_1 = __pyx_PyFloat_AsDouble(__pyx_t_2); if (unlikely((__pyx_t_1 == (double)-1) && PyErr_Occurred())) __PYX_ERR(2, 74, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_v_distance = __pyx_t_1; - - /* "fa2/fa2util.py":76 - * distance = sqrt(xDist * xDist + yDist * yDist) - * - * if distance > 0: # <<<<<<<<<<<<<< - * factor = n.mass * g / distance - * n.dx -= xDist * factor - */ - __pyx_t_6 = ((__pyx_v_distance > 0.0) != 0); - if (__pyx_t_6) { - - /* "fa2/fa2util.py":77 - * - * if distance > 0: - * factor = n.mass * g / distance # <<<<<<<<<<<<<< - * n.dx -= xDist * factor - * n.dy -= yDist * factor - */ - __pyx_t_1 = (__pyx_v_n->mass * __pyx_v_g); - if (unlikely(__pyx_v_distance == 0)) { - PyErr_SetString(PyExc_ZeroDivisionError, "float division"); - __PYX_ERR(2, 77, __pyx_L1_error) - } - __pyx_v_factor = (__pyx_t_1 / __pyx_v_distance); - - /* "fa2/fa2util.py":78 - * if distance > 0: - * factor = n.mass * g / distance - * n.dx -= xDist * factor # <<<<<<<<<<<<<< - * n.dy -= yDist * factor - * - */ - __pyx_v_n->dx = (__pyx_v_n->dx - (__pyx_v_xDist * __pyx_v_factor)); - - /* "fa2/fa2util.py":79 - * factor = n.mass * g / distance - * n.dx -= xDist * factor - * n.dy -= yDist * factor # <<<<<<<<<<<<<< - * - * - */ - __pyx_v_n->dy = (__pyx_v_n->dy - (__pyx_v_yDist * __pyx_v_factor)); - - /* "fa2/fa2util.py":76 - * distance = sqrt(xDist * xDist + yDist * yDist) - * - * if distance > 0: # <<<<<<<<<<<<<< - * factor = n.mass * g / distance - * n.dx -= xDist * factor - */ - } - - /* "fa2/fa2util.py":71 - * # nodes repelling each other, and b. gravity is actually an - * # attraction) - * def linGravity(n, g): # <<<<<<<<<<<<<< - * xDist = n.x - * yDist = n.y - */ - - /* function exit code */ - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_WriteUnraisable("fa2.fa2util.linGravity", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0); - __pyx_L0:; - __Pyx_RefNannyFinishContext(); -} - -/* "fa2/fa2util.py":84 - * # Strong gravity force function. `n` should be a node, and `g` - * # should be a constant by which to apply the force. - * def strongGravity(n, g, coefficient=0): # <<<<<<<<<<<<<< - * xDist = n.x - * yDist = n.y - */ - -static void __pyx_f_3fa2_7fa2util_strongGravity(struct __pyx_obj_3fa2_7fa2util_Node *__pyx_v_n, double __pyx_v_g, struct __pyx_opt_args_3fa2_7fa2util_strongGravity *__pyx_optional_args) { - double __pyx_v_coefficient = ((double)0.0); - double __pyx_v_xDist; - double __pyx_v_yDist; - double __pyx_v_factor; - __Pyx_RefNannyDeclarations - double __pyx_t_1; - int __pyx_t_2; - int __pyx_t_3; - __Pyx_RefNannySetupContext("strongGravity", 0); - if (__pyx_optional_args) { - if (__pyx_optional_args->__pyx_n > 0) { - __pyx_v_coefficient = __pyx_optional_args->coefficient; - } - } - - /* "fa2/fa2util.py":85 - * # should be a constant by which to apply the force. - * def strongGravity(n, g, coefficient=0): - * xDist = n.x # <<<<<<<<<<<<<< - * yDist = n.y - * - */ - __pyx_t_1 = __pyx_v_n->x; - __pyx_v_xDist = __pyx_t_1; - - /* "fa2/fa2util.py":86 - * def strongGravity(n, g, coefficient=0): - * xDist = n.x - * yDist = n.y # <<<<<<<<<<<<<< - * - * if xDist != 0 and yDist != 0: - */ - __pyx_t_1 = __pyx_v_n->y; - __pyx_v_yDist = __pyx_t_1; - - /* "fa2/fa2util.py":88 - * yDist = n.y - * - * if xDist != 0 and yDist != 0: # <<<<<<<<<<<<<< - * factor = coefficient * n.mass * g - * n.dx -= xDist * factor - */ - __pyx_t_3 = ((__pyx_v_xDist != 0.0) != 0); - if (__pyx_t_3) { - } else { - __pyx_t_2 = __pyx_t_3; - goto __pyx_L4_bool_binop_done; - } - __pyx_t_3 = ((__pyx_v_yDist != 0.0) != 0); - __pyx_t_2 = __pyx_t_3; - __pyx_L4_bool_binop_done:; - if (__pyx_t_2) { - - /* "fa2/fa2util.py":89 - * - * if xDist != 0 and yDist != 0: - * factor = coefficient * n.mass * g # <<<<<<<<<<<<<< - * n.dx -= xDist * factor - * n.dy -= yDist * factor - */ - __pyx_v_factor = ((__pyx_v_coefficient * __pyx_v_n->mass) * __pyx_v_g); - - /* "fa2/fa2util.py":90 - * if xDist != 0 and yDist != 0: - * factor = coefficient * n.mass * g - * n.dx -= xDist * factor # <<<<<<<<<<<<<< - * n.dy -= yDist * factor - * - */ - __pyx_v_n->dx = (__pyx_v_n->dx - (__pyx_v_xDist * __pyx_v_factor)); - - /* "fa2/fa2util.py":91 - * factor = coefficient * n.mass * g - * n.dx -= xDist * factor - * n.dy -= yDist * factor # <<<<<<<<<<<<<< - * - * - */ - __pyx_v_n->dy = (__pyx_v_n->dy - (__pyx_v_yDist * __pyx_v_factor)); - - /* "fa2/fa2util.py":88 - * yDist = n.y - * - * if xDist != 0 and yDist != 0: # <<<<<<<<<<<<<< - * factor = coefficient * n.mass * g - * n.dx -= xDist * factor - */ - } - - /* "fa2/fa2util.py":84 - * # Strong gravity force function. `n` should be a node, and `g` - * # should be a constant by which to apply the force. - * def strongGravity(n, g, coefficient=0): # <<<<<<<<<<<<<< - * xDist = n.x - * yDist = n.y - */ - - /* function exit code */ - __Pyx_RefNannyFinishContext(); -} - -/* "fa2/fa2util.py":97 - * # adjust the dx and dy values of `n1` and `n2`. It does - * # not return anything. - * def linAttraction(n1, n2, e, distributedAttraction, coefficient=0): # <<<<<<<<<<<<<< - * xDist = n1.x - n2.x - * yDist = n1.y - n2.y - */ - -static PyObject *__pyx_pw_3fa2_7fa2util_1linAttraction(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static void __pyx_f_3fa2_7fa2util_linAttraction(struct __pyx_obj_3fa2_7fa2util_Node *__pyx_v_n1, struct __pyx_obj_3fa2_7fa2util_Node *__pyx_v_n2, double __pyx_v_e, int __pyx_v_distributedAttraction, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_3fa2_7fa2util_linAttraction *__pyx_optional_args) { - double __pyx_v_coefficient = ((double)0.0); - double __pyx_v_xDist; - double __pyx_v_yDist; - double __pyx_v_factor; - __Pyx_RefNannyDeclarations - int __pyx_t_1; - double __pyx_t_2; - __Pyx_RefNannySetupContext("linAttraction", 0); - if (__pyx_optional_args) { - if (__pyx_optional_args->__pyx_n > 0) { - __pyx_v_coefficient = __pyx_optional_args->coefficient; - } - } - - /* "fa2/fa2util.py":98 - * # not return anything. - * def linAttraction(n1, n2, e, distributedAttraction, coefficient=0): - * xDist = n1.x - n2.x # <<<<<<<<<<<<<< - * yDist = n1.y - n2.y - * if not distributedAttraction: - */ - __pyx_v_xDist = (__pyx_v_n1->x - __pyx_v_n2->x); - - /* "fa2/fa2util.py":99 - * def linAttraction(n1, n2, e, distributedAttraction, coefficient=0): - * xDist = n1.x - n2.x - * yDist = n1.y - n2.y # <<<<<<<<<<<<<< - * if not distributedAttraction: - * factor = -coefficient * e - */ - __pyx_v_yDist = (__pyx_v_n1->y - __pyx_v_n2->y); - - /* "fa2/fa2util.py":100 - * xDist = n1.x - n2.x - * yDist = n1.y - n2.y - * if not distributedAttraction: # <<<<<<<<<<<<<< - * factor = -coefficient * e - * else: - */ - __pyx_t_1 = ((!(__pyx_v_distributedAttraction != 0)) != 0); - if (__pyx_t_1) { - - /* "fa2/fa2util.py":101 - * yDist = n1.y - n2.y - * if not distributedAttraction: - * factor = -coefficient * e # <<<<<<<<<<<<<< - * else: - * factor = -coefficient * e / n1.mass - */ - __pyx_v_factor = ((-__pyx_v_coefficient) * __pyx_v_e); - - /* "fa2/fa2util.py":100 - * xDist = n1.x - n2.x - * yDist = n1.y - n2.y - * if not distributedAttraction: # <<<<<<<<<<<<<< - * factor = -coefficient * e - * else: - */ - goto __pyx_L3; - } - - /* "fa2/fa2util.py":103 - * factor = -coefficient * e - * else: - * factor = -coefficient * e / n1.mass # <<<<<<<<<<<<<< - * n1.dx += xDist * factor - * n1.dy += yDist * factor - */ - /*else*/ { - __pyx_t_2 = ((-__pyx_v_coefficient) * __pyx_v_e); - if (unlikely(__pyx_v_n1->mass == 0)) { - PyErr_SetString(PyExc_ZeroDivisionError, "float division"); - __PYX_ERR(2, 103, __pyx_L1_error) - } - __pyx_v_factor = (__pyx_t_2 / __pyx_v_n1->mass); - } - __pyx_L3:; - - /* "fa2/fa2util.py":104 - * else: - * factor = -coefficient * e / n1.mass - * n1.dx += xDist * factor # <<<<<<<<<<<<<< - * n1.dy += yDist * factor - * n2.dx -= xDist * factor - */ - __pyx_v_n1->dx = (__pyx_v_n1->dx + (__pyx_v_xDist * __pyx_v_factor)); - - /* "fa2/fa2util.py":105 - * factor = -coefficient * e / n1.mass - * n1.dx += xDist * factor - * n1.dy += yDist * factor # <<<<<<<<<<<<<< - * n2.dx -= xDist * factor - * n2.dy -= yDist * factor - */ - __pyx_v_n1->dy = (__pyx_v_n1->dy + (__pyx_v_yDist * __pyx_v_factor)); - - /* "fa2/fa2util.py":106 - * n1.dx += xDist * factor - * n1.dy += yDist * factor - * n2.dx -= xDist * factor # <<<<<<<<<<<<<< - * n2.dy -= yDist * factor - * - */ - __pyx_v_n2->dx = (__pyx_v_n2->dx - (__pyx_v_xDist * __pyx_v_factor)); - - /* "fa2/fa2util.py":107 - * n1.dy += yDist * factor - * n2.dx -= xDist * factor - * n2.dy -= yDist * factor # <<<<<<<<<<<<<< - * - * - */ - __pyx_v_n2->dy = (__pyx_v_n2->dy - (__pyx_v_yDist * __pyx_v_factor)); - - /* "fa2/fa2util.py":97 - * # adjust the dx and dy values of `n1` and `n2`. It does - * # not return anything. - * def linAttraction(n1, n2, e, distributedAttraction, coefficient=0): # <<<<<<<<<<<<<< - * xDist = n1.x - n2.x - * yDist = n1.y - n2.y - */ - - /* function exit code */ - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_WriteUnraisable("fa2.fa2util.linAttraction", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0); - __pyx_L0:; - __Pyx_RefNannyFinishContext(); -} - -/* Python wrapper */ -static PyObject *__pyx_pw_3fa2_7fa2util_1linAttraction(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3fa2_7fa2util_1linAttraction = {"linAttraction", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_3fa2_7fa2util_1linAttraction, METH_VARARGS|METH_KEYWORDS, 0}; -static PyObject *__pyx_pw_3fa2_7fa2util_1linAttraction(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - struct __pyx_obj_3fa2_7fa2util_Node *__pyx_v_n1 = 0; - struct __pyx_obj_3fa2_7fa2util_Node *__pyx_v_n2 = 0; - double __pyx_v_e; - int __pyx_v_distributedAttraction; - double __pyx_v_coefficient; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("linAttraction (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_n1,&__pyx_n_s_n2,&__pyx_n_s_e,&__pyx_n_s_distributedAttraction,&__pyx_n_s_coefficient,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_n1)) != 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_n2)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("linAttraction", 0, 4, 5, 1); __PYX_ERR(2, 97, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 2: - if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_e)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("linAttraction", 0, 4, 5, 2); __PYX_ERR(2, 97, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 3: - if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_distributedAttraction)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("linAttraction", 0, 4, 5, 3); __PYX_ERR(2, 97, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 4: - if (kw_args > 0) { - PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_coefficient); - if (value) { values[4] = value; kw_args--; } - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "linAttraction") < 0)) __PYX_ERR(2, 97, __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); - 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_n1 = ((struct __pyx_obj_3fa2_7fa2util_Node *)values[0]); - __pyx_v_n2 = ((struct __pyx_obj_3fa2_7fa2util_Node *)values[1]); - __pyx_v_e = __pyx_PyFloat_AsDouble(values[2]); if (unlikely((__pyx_v_e == (double)-1) && PyErr_Occurred())) __PYX_ERR(2, 97, __pyx_L3_error) - __pyx_v_distributedAttraction = __Pyx_PyObject_IsTrue(values[3]); if (unlikely((__pyx_v_distributedAttraction == (int)-1) && PyErr_Occurred())) __PYX_ERR(2, 97, __pyx_L3_error) - if (values[4]) { - __pyx_v_coefficient = __pyx_PyFloat_AsDouble(values[4]); if (unlikely((__pyx_v_coefficient == (double)-1) && PyErr_Occurred())) __PYX_ERR(2, 97, __pyx_L3_error) - } else { - __pyx_v_coefficient = ((double)0.0); - } - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("linAttraction", 0, 4, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(2, 97, __pyx_L3_error) - __pyx_L3_error:; - __Pyx_AddTraceback("fa2.fa2util.linAttraction", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_n1), __pyx_ptype_3fa2_7fa2util_Node, 1, "n1", 0))) __PYX_ERR(2, 97, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_n2), __pyx_ptype_3fa2_7fa2util_Node, 1, "n2", 0))) __PYX_ERR(2, 97, __pyx_L1_error) - __pyx_r = __pyx_pf_3fa2_7fa2util_linAttraction(__pyx_self, __pyx_v_n1, __pyx_v_n2, __pyx_v_e, __pyx_v_distributedAttraction, __pyx_v_coefficient); - - /* function exit code */ - goto __pyx_L0; - __pyx_L1_error:; - __pyx_r = NULL; - __pyx_L0:; - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3fa2_7fa2util_linAttraction(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_3fa2_7fa2util_Node *__pyx_v_n1, struct __pyx_obj_3fa2_7fa2util_Node *__pyx_v_n2, double __pyx_v_e, int __pyx_v_distributedAttraction, double __pyx_v_coefficient) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - struct __pyx_opt_args_3fa2_7fa2util_linAttraction __pyx_t_1; - PyObject *__pyx_t_2 = NULL; - __Pyx_RefNannySetupContext("linAttraction", 0); - __Pyx_XDECREF(__pyx_r); - __pyx_t_1.__pyx_n = 1; - __pyx_t_1.coefficient = __pyx_v_coefficient; - __pyx_f_3fa2_7fa2util_linAttraction(__pyx_v_n1, __pyx_v_n2, __pyx_v_e, __pyx_v_distributedAttraction, 0, &__pyx_t_1); - __pyx_t_2 = __Pyx_void_to_None(NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 97, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_r = __pyx_t_2; - __pyx_t_2 = 0; - goto __pyx_L0; - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_2); - __Pyx_AddTraceback("fa2.fa2util.linAttraction", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "fa2/fa2util.py":113 - * # the forces directly to the node objects. These iterations are here - * # instead of the main file because Python is slow with loops. - * def apply_repulsion(nodes, coefficient): # <<<<<<<<<<<<<< - * i = 0 - * for n1 in nodes: - */ - -static PyObject *__pyx_pw_3fa2_7fa2util_3apply_repulsion(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static void __pyx_f_3fa2_7fa2util_apply_repulsion(PyObject *__pyx_v_nodes, double __pyx_v_coefficient, CYTHON_UNUSED int __pyx_skip_dispatch) { - int __pyx_v_i; - int __pyx_v_j; - struct __pyx_obj_3fa2_7fa2util_Node *__pyx_v_n1 = 0; - struct __pyx_obj_3fa2_7fa2util_Node *__pyx_v_n2 = 0; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - Py_ssize_t __pyx_t_2; - PyObject *__pyx_t_3 = NULL; - Py_ssize_t __pyx_t_4; - PyObject *__pyx_t_5 = NULL; - int __pyx_t_6; - struct __pyx_opt_args_3fa2_7fa2util_linRepulsion __pyx_t_7; - __Pyx_RefNannySetupContext("apply_repulsion", 0); - - /* "fa2/fa2util.py":114 - * # instead of the main file because Python is slow with loops. - * def apply_repulsion(nodes, coefficient): - * i = 0 # <<<<<<<<<<<<<< - * for n1 in nodes: - * j = i - */ - __pyx_v_i = 0; - - /* "fa2/fa2util.py":115 - * def apply_repulsion(nodes, coefficient): - * i = 0 - * for n1 in nodes: # <<<<<<<<<<<<<< - * j = i - * for n2 in nodes: - */ - if (unlikely(__pyx_v_nodes == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); - __PYX_ERR(2, 115, __pyx_L1_error) - } - __pyx_t_1 = __pyx_v_nodes; __Pyx_INCREF(__pyx_t_1); __pyx_t_2 = 0; - for (;;) { - if (__pyx_t_2 >= PyList_GET_SIZE(__pyx_t_1)) break; - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_3 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_3); __pyx_t_2++; if (unlikely(0 < 0)) __PYX_ERR(2, 115, __pyx_L1_error) - #else - __pyx_t_3 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 115, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - #endif - if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_3fa2_7fa2util_Node))))) __PYX_ERR(2, 115, __pyx_L1_error) - __Pyx_XDECREF_SET(__pyx_v_n1, ((struct __pyx_obj_3fa2_7fa2util_Node *)__pyx_t_3)); - __pyx_t_3 = 0; - - /* "fa2/fa2util.py":116 - * i = 0 - * for n1 in nodes: - * j = i # <<<<<<<<<<<<<< - * for n2 in nodes: - * if j == 0: - */ - __pyx_v_j = __pyx_v_i; - - /* "fa2/fa2util.py":117 - * for n1 in nodes: - * j = i - * for n2 in nodes: # <<<<<<<<<<<<<< - * if j == 0: - * break - */ - if (unlikely(__pyx_v_nodes == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); - __PYX_ERR(2, 117, __pyx_L1_error) - } - __pyx_t_3 = __pyx_v_nodes; __Pyx_INCREF(__pyx_t_3); __pyx_t_4 = 0; - for (;;) { - if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_3)) break; - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_5 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_5); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(2, 117, __pyx_L1_error) - #else - __pyx_t_5 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 117, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - #endif - if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_3fa2_7fa2util_Node))))) __PYX_ERR(2, 117, __pyx_L1_error) - __Pyx_XDECREF_SET(__pyx_v_n2, ((struct __pyx_obj_3fa2_7fa2util_Node *)__pyx_t_5)); - __pyx_t_5 = 0; - - /* "fa2/fa2util.py":118 - * j = i - * for n2 in nodes: - * if j == 0: # <<<<<<<<<<<<<< - * break - * linRepulsion(n1, n2, coefficient) - */ - __pyx_t_6 = ((__pyx_v_j == 0) != 0); - if (__pyx_t_6) { - - /* "fa2/fa2util.py":119 - * for n2 in nodes: - * if j == 0: - * break # <<<<<<<<<<<<<< - * linRepulsion(n1, n2, coefficient) - * j -= 1 - */ - goto __pyx_L6_break; - - /* "fa2/fa2util.py":118 - * j = i - * for n2 in nodes: - * if j == 0: # <<<<<<<<<<<<<< - * break - * linRepulsion(n1, n2, coefficient) - */ - } - - /* "fa2/fa2util.py":120 - * if j == 0: - * break - * linRepulsion(n1, n2, coefficient) # <<<<<<<<<<<<<< - * j -= 1 - * i += 1 - */ - __pyx_t_7.__pyx_n = 1; - __pyx_t_7.coefficient = __pyx_v_coefficient; - __pyx_f_3fa2_7fa2util_linRepulsion(__pyx_v_n1, __pyx_v_n2, &__pyx_t_7); - - /* "fa2/fa2util.py":121 - * break - * linRepulsion(n1, n2, coefficient) - * j -= 1 # <<<<<<<<<<<<<< - * i += 1 - * - */ - __pyx_v_j = (__pyx_v_j - 1); - - /* "fa2/fa2util.py":117 - * for n1 in nodes: - * j = i - * for n2 in nodes: # <<<<<<<<<<<<<< - * if j == 0: - * break - */ - } - __pyx_L6_break:; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "fa2/fa2util.py":122 - * linRepulsion(n1, n2, coefficient) - * j -= 1 - * i += 1 # <<<<<<<<<<<<<< - * - * - */ - __pyx_v_i = (__pyx_v_i + 1); - - /* "fa2/fa2util.py":115 - * def apply_repulsion(nodes, coefficient): - * i = 0 - * for n1 in nodes: # <<<<<<<<<<<<<< - * j = i - * for n2 in nodes: - */ - } - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "fa2/fa2util.py":113 - * # the forces directly to the node objects. These iterations are here - * # instead of the main file because Python is slow with loops. - * def apply_repulsion(nodes, coefficient): # <<<<<<<<<<<<<< - * i = 0 - * for n1 in nodes: - */ - - /* function exit code */ - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_WriteUnraisable("fa2.fa2util.apply_repulsion", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0); - __pyx_L0:; - __Pyx_XDECREF((PyObject *)__pyx_v_n1); - __Pyx_XDECREF((PyObject *)__pyx_v_n2); - __Pyx_RefNannyFinishContext(); -} - -/* Python wrapper */ -static PyObject *__pyx_pw_3fa2_7fa2util_3apply_repulsion(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3fa2_7fa2util_3apply_repulsion = {"apply_repulsion", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_3fa2_7fa2util_3apply_repulsion, METH_VARARGS|METH_KEYWORDS, 0}; -static PyObject *__pyx_pw_3fa2_7fa2util_3apply_repulsion(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_nodes = 0; - double __pyx_v_coefficient; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("apply_repulsion (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_nodes,&__pyx_n_s_coefficient,0}; - PyObject* values[2] = {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 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_nodes)) != 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_coefficient)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("apply_repulsion", 1, 2, 2, 1); __PYX_ERR(2, 113, __pyx_L3_error) - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "apply_repulsion") < 0)) __PYX_ERR(2, 113, __pyx_L3_error) - } - } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { - goto __pyx_L5_argtuple_error; - } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - } - __pyx_v_nodes = ((PyObject*)values[0]); - __pyx_v_coefficient = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_coefficient == (double)-1) && PyErr_Occurred())) __PYX_ERR(2, 113, __pyx_L3_error) - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("apply_repulsion", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(2, 113, __pyx_L3_error) - __pyx_L3_error:; - __Pyx_AddTraceback("fa2.fa2util.apply_repulsion", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_nodes), (&PyList_Type), 1, "nodes", 1))) __PYX_ERR(2, 113, __pyx_L1_error) - __pyx_r = __pyx_pf_3fa2_7fa2util_2apply_repulsion(__pyx_self, __pyx_v_nodes, __pyx_v_coefficient); - - /* function exit code */ - goto __pyx_L0; - __pyx_L1_error:; - __pyx_r = NULL; - __pyx_L0:; - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3fa2_7fa2util_2apply_repulsion(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_nodes, double __pyx_v_coefficient) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - __Pyx_RefNannySetupContext("apply_repulsion", 0); - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_void_to_None(__pyx_f_3fa2_7fa2util_apply_repulsion(__pyx_v_nodes, __pyx_v_coefficient, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 113, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L0; - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("fa2.fa2util.apply_repulsion", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "fa2/fa2util.py":125 - * - * - * def apply_gravity(nodes, gravity, scalingRatio, useStrongGravity=False): # <<<<<<<<<<<<<< - * if not useStrongGravity: - * for n in nodes: - */ - -static PyObject *__pyx_pw_3fa2_7fa2util_5apply_gravity(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static void __pyx_f_3fa2_7fa2util_apply_gravity(PyObject *__pyx_v_nodes, double __pyx_v_gravity, double __pyx_v_scalingRatio, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_3fa2_7fa2util_apply_gravity *__pyx_optional_args) { - int __pyx_v_useStrongGravity = ((int)0); - struct __pyx_obj_3fa2_7fa2util_Node *__pyx_v_n = 0; - __Pyx_RefNannyDeclarations - int __pyx_t_1; - PyObject *__pyx_t_2 = NULL; - Py_ssize_t __pyx_t_3; - PyObject *__pyx_t_4 = NULL; - struct __pyx_opt_args_3fa2_7fa2util_strongGravity __pyx_t_5; - __Pyx_RefNannySetupContext("apply_gravity", 0); - if (__pyx_optional_args) { - if (__pyx_optional_args->__pyx_n > 0) { - __pyx_v_useStrongGravity = __pyx_optional_args->useStrongGravity; - } - } - - /* "fa2/fa2util.py":126 - * - * def apply_gravity(nodes, gravity, scalingRatio, useStrongGravity=False): - * if not useStrongGravity: # <<<<<<<<<<<<<< - * for n in nodes: - * linGravity(n, gravity) - */ - __pyx_t_1 = ((!(__pyx_v_useStrongGravity != 0)) != 0); - if (__pyx_t_1) { - - /* "fa2/fa2util.py":127 - * def apply_gravity(nodes, gravity, scalingRatio, useStrongGravity=False): - * if not useStrongGravity: - * for n in nodes: # <<<<<<<<<<<<<< - * linGravity(n, gravity) - * else: - */ - if (unlikely(__pyx_v_nodes == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); - __PYX_ERR(2, 127, __pyx_L1_error) - } - __pyx_t_2 = __pyx_v_nodes; __Pyx_INCREF(__pyx_t_2); __pyx_t_3 = 0; - for (;;) { - if (__pyx_t_3 >= PyList_GET_SIZE(__pyx_t_2)) break; - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_4 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_4); __pyx_t_3++; if (unlikely(0 < 0)) __PYX_ERR(2, 127, __pyx_L1_error) - #else - __pyx_t_4 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 127, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - #endif - if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_3fa2_7fa2util_Node))))) __PYX_ERR(2, 127, __pyx_L1_error) - __Pyx_XDECREF_SET(__pyx_v_n, ((struct __pyx_obj_3fa2_7fa2util_Node *)__pyx_t_4)); - __pyx_t_4 = 0; - - /* "fa2/fa2util.py":128 - * if not useStrongGravity: - * for n in nodes: - * linGravity(n, gravity) # <<<<<<<<<<<<<< - * else: - * for n in nodes: - */ - __pyx_f_3fa2_7fa2util_linGravity(__pyx_v_n, __pyx_v_gravity); - - /* "fa2/fa2util.py":127 - * def apply_gravity(nodes, gravity, scalingRatio, useStrongGravity=False): - * if not useStrongGravity: - * for n in nodes: # <<<<<<<<<<<<<< - * linGravity(n, gravity) - * else: - */ - } - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "fa2/fa2util.py":126 - * - * def apply_gravity(nodes, gravity, scalingRatio, useStrongGravity=False): - * if not useStrongGravity: # <<<<<<<<<<<<<< - * for n in nodes: - * linGravity(n, gravity) - */ - goto __pyx_L3; - } - - /* "fa2/fa2util.py":130 - * linGravity(n, gravity) - * else: - * for n in nodes: # <<<<<<<<<<<<<< - * strongGravity(n, gravity, scalingRatio) - * - */ - /*else*/ { - if (unlikely(__pyx_v_nodes == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); - __PYX_ERR(2, 130, __pyx_L1_error) - } - __pyx_t_2 = __pyx_v_nodes; __Pyx_INCREF(__pyx_t_2); __pyx_t_3 = 0; - for (;;) { - if (__pyx_t_3 >= PyList_GET_SIZE(__pyx_t_2)) break; - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_4 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_4); __pyx_t_3++; if (unlikely(0 < 0)) __PYX_ERR(2, 130, __pyx_L1_error) - #else - __pyx_t_4 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 130, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - #endif - if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_3fa2_7fa2util_Node))))) __PYX_ERR(2, 130, __pyx_L1_error) - __Pyx_XDECREF_SET(__pyx_v_n, ((struct __pyx_obj_3fa2_7fa2util_Node *)__pyx_t_4)); - __pyx_t_4 = 0; - - /* "fa2/fa2util.py":131 - * else: - * for n in nodes: - * strongGravity(n, gravity, scalingRatio) # <<<<<<<<<<<<<< - * - * - */ - __pyx_t_5.__pyx_n = 1; - __pyx_t_5.coefficient = __pyx_v_scalingRatio; - __pyx_f_3fa2_7fa2util_strongGravity(__pyx_v_n, __pyx_v_gravity, &__pyx_t_5); - - /* "fa2/fa2util.py":130 - * linGravity(n, gravity) - * else: - * for n in nodes: # <<<<<<<<<<<<<< - * strongGravity(n, gravity, scalingRatio) - * - */ - } - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - } - __pyx_L3:; - - /* "fa2/fa2util.py":125 - * - * - * def apply_gravity(nodes, gravity, scalingRatio, useStrongGravity=False): # <<<<<<<<<<<<<< - * if not useStrongGravity: - * for n in nodes: - */ - - /* function exit code */ - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_4); - __Pyx_WriteUnraisable("fa2.fa2util.apply_gravity", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0); - __pyx_L0:; - __Pyx_XDECREF((PyObject *)__pyx_v_n); - __Pyx_RefNannyFinishContext(); -} - -/* Python wrapper */ -static PyObject *__pyx_pw_3fa2_7fa2util_5apply_gravity(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3fa2_7fa2util_5apply_gravity = {"apply_gravity", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_3fa2_7fa2util_5apply_gravity, METH_VARARGS|METH_KEYWORDS, 0}; -static PyObject *__pyx_pw_3fa2_7fa2util_5apply_gravity(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_nodes = 0; - double __pyx_v_gravity; - double __pyx_v_scalingRatio; - int __pyx_v_useStrongGravity; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("apply_gravity (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_nodes,&__pyx_n_s_gravity,&__pyx_n_s_scalingRatio,&__pyx_n_s_useStrongGravity,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_nodes)) != 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_gravity)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("apply_gravity", 0, 3, 4, 1); __PYX_ERR(2, 125, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 2: - if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_scalingRatio)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("apply_gravity", 0, 3, 4, 2); __PYX_ERR(2, 125, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 3: - if (kw_args > 0) { - PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_useStrongGravity); - if (value) { values[3] = value; kw_args--; } - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "apply_gravity") < 0)) __PYX_ERR(2, 125, __pyx_L3_error) - } - } else { - switch (PyTuple_GET_SIZE(__pyx_args)) { - 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_nodes = ((PyObject*)values[0]); - __pyx_v_gravity = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_gravity == (double)-1) && PyErr_Occurred())) __PYX_ERR(2, 125, __pyx_L3_error) - __pyx_v_scalingRatio = __pyx_PyFloat_AsDouble(values[2]); if (unlikely((__pyx_v_scalingRatio == (double)-1) && PyErr_Occurred())) __PYX_ERR(2, 125, __pyx_L3_error) - if (values[3]) { - __pyx_v_useStrongGravity = __Pyx_PyObject_IsTrue(values[3]); if (unlikely((__pyx_v_useStrongGravity == (int)-1) && PyErr_Occurred())) __PYX_ERR(2, 125, __pyx_L3_error) - } else { - __pyx_v_useStrongGravity = ((int)0); - } - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("apply_gravity", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(2, 125, __pyx_L3_error) - __pyx_L3_error:; - __Pyx_AddTraceback("fa2.fa2util.apply_gravity", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_nodes), (&PyList_Type), 1, "nodes", 1))) __PYX_ERR(2, 125, __pyx_L1_error) - __pyx_r = __pyx_pf_3fa2_7fa2util_4apply_gravity(__pyx_self, __pyx_v_nodes, __pyx_v_gravity, __pyx_v_scalingRatio, __pyx_v_useStrongGravity); - - /* function exit code */ - goto __pyx_L0; - __pyx_L1_error:; - __pyx_r = NULL; - __pyx_L0:; - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3fa2_7fa2util_4apply_gravity(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_nodes, double __pyx_v_gravity, double __pyx_v_scalingRatio, int __pyx_v_useStrongGravity) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - struct __pyx_opt_args_3fa2_7fa2util_apply_gravity __pyx_t_1; - PyObject *__pyx_t_2 = NULL; - __Pyx_RefNannySetupContext("apply_gravity", 0); - __Pyx_XDECREF(__pyx_r); - __pyx_t_1.__pyx_n = 1; - __pyx_t_1.useStrongGravity = __pyx_v_useStrongGravity; - __pyx_f_3fa2_7fa2util_apply_gravity(__pyx_v_nodes, __pyx_v_gravity, __pyx_v_scalingRatio, 0, &__pyx_t_1); - __pyx_t_2 = __Pyx_void_to_None(NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 125, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_r = __pyx_t_2; - __pyx_t_2 = 0; - goto __pyx_L0; - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_2); - __Pyx_AddTraceback("fa2.fa2util.apply_gravity", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "fa2/fa2util.py":134 - * - * - * def apply_attraction(nodes, edges, distributedAttraction, coefficient, edgeWeightInfluence): # <<<<<<<<<<<<<< - * # Optimization, since usually edgeWeightInfluence is 0 or 1, and pow is slow - * if edgeWeightInfluence == 0: - */ - -static PyObject *__pyx_pw_3fa2_7fa2util_7apply_attraction(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static void __pyx_f_3fa2_7fa2util_apply_attraction(PyObject *__pyx_v_nodes, PyObject *__pyx_v_edges, int __pyx_v_distributedAttraction, double __pyx_v_coefficient, double __pyx_v_edgeWeightInfluence, CYTHON_UNUSED int __pyx_skip_dispatch) { - struct __pyx_obj_3fa2_7fa2util_Edge *__pyx_v_edge = 0; - __Pyx_RefNannyDeclarations - int __pyx_t_1; - PyObject *__pyx_t_2 = NULL; - Py_ssize_t __pyx_t_3; - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - struct __pyx_opt_args_3fa2_7fa2util_linAttraction __pyx_t_6; - PyObject *__pyx_t_7 = NULL; - PyObject *__pyx_t_8 = NULL; - PyObject *__pyx_t_9 = NULL; - double __pyx_t_10; - __Pyx_RefNannySetupContext("apply_attraction", 0); - - /* "fa2/fa2util.py":136 - * def apply_attraction(nodes, edges, distributedAttraction, coefficient, edgeWeightInfluence): - * # Optimization, since usually edgeWeightInfluence is 0 or 1, and pow is slow - * if edgeWeightInfluence == 0: # <<<<<<<<<<<<<< - * for edge in edges: - * linAttraction(nodes[edge.node1], nodes[edge.node2], 1, distributedAttraction, coefficient) - */ - __pyx_t_1 = ((__pyx_v_edgeWeightInfluence == 0.0) != 0); - if (__pyx_t_1) { - - /* "fa2/fa2util.py":137 - * # Optimization, since usually edgeWeightInfluence is 0 or 1, and pow is slow - * if edgeWeightInfluence == 0: - * for edge in edges: # <<<<<<<<<<<<<< - * linAttraction(nodes[edge.node1], nodes[edge.node2], 1, distributedAttraction, coefficient) - * elif edgeWeightInfluence == 1: - */ - if (unlikely(__pyx_v_edges == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); - __PYX_ERR(2, 137, __pyx_L1_error) - } - __pyx_t_2 = __pyx_v_edges; __Pyx_INCREF(__pyx_t_2); __pyx_t_3 = 0; - for (;;) { - if (__pyx_t_3 >= PyList_GET_SIZE(__pyx_t_2)) break; - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_4 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_4); __pyx_t_3++; if (unlikely(0 < 0)) __PYX_ERR(2, 137, __pyx_L1_error) - #else - __pyx_t_4 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 137, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - #endif - if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_3fa2_7fa2util_Edge))))) __PYX_ERR(2, 137, __pyx_L1_error) - __Pyx_XDECREF_SET(__pyx_v_edge, ((struct __pyx_obj_3fa2_7fa2util_Edge *)__pyx_t_4)); - __pyx_t_4 = 0; - - /* "fa2/fa2util.py":138 - * if edgeWeightInfluence == 0: - * for edge in edges: - * linAttraction(nodes[edge.node1], nodes[edge.node2], 1, distributedAttraction, coefficient) # <<<<<<<<<<<<<< - * elif edgeWeightInfluence == 1: - * for edge in edges: - */ - if (unlikely(__pyx_v_nodes == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); - __PYX_ERR(2, 138, __pyx_L1_error) - } - __pyx_t_4 = __Pyx_GetItemInt_List(__pyx_v_nodes, __pyx_v_edge->node1, int, 1, __Pyx_PyInt_From_int, 1, 1, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 138, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_3fa2_7fa2util_Node))))) __PYX_ERR(2, 138, __pyx_L1_error) - if (unlikely(__pyx_v_nodes == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); - __PYX_ERR(2, 138, __pyx_L1_error) - } - __pyx_t_5 = __Pyx_GetItemInt_List(__pyx_v_nodes, __pyx_v_edge->node2, int, 1, __Pyx_PyInt_From_int, 1, 1, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 138, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_3fa2_7fa2util_Node))))) __PYX_ERR(2, 138, __pyx_L1_error) - __pyx_t_6.__pyx_n = 1; - __pyx_t_6.coefficient = __pyx_v_coefficient; - __pyx_f_3fa2_7fa2util_linAttraction(((struct __pyx_obj_3fa2_7fa2util_Node *)__pyx_t_4), ((struct __pyx_obj_3fa2_7fa2util_Node *)__pyx_t_5), 1.0, __pyx_v_distributedAttraction, 0, &__pyx_t_6); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - - /* "fa2/fa2util.py":137 - * # Optimization, since usually edgeWeightInfluence is 0 or 1, and pow is slow - * if edgeWeightInfluence == 0: - * for edge in edges: # <<<<<<<<<<<<<< - * linAttraction(nodes[edge.node1], nodes[edge.node2], 1, distributedAttraction, coefficient) - * elif edgeWeightInfluence == 1: - */ - } - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "fa2/fa2util.py":136 - * def apply_attraction(nodes, edges, distributedAttraction, coefficient, edgeWeightInfluence): - * # Optimization, since usually edgeWeightInfluence is 0 or 1, and pow is slow - * if edgeWeightInfluence == 0: # <<<<<<<<<<<<<< - * for edge in edges: - * linAttraction(nodes[edge.node1], nodes[edge.node2], 1, distributedAttraction, coefficient) - */ - goto __pyx_L3; - } - - /* "fa2/fa2util.py":139 - * for edge in edges: - * linAttraction(nodes[edge.node1], nodes[edge.node2], 1, distributedAttraction, coefficient) - * elif edgeWeightInfluence == 1: # <<<<<<<<<<<<<< - * for edge in edges: - * linAttraction(nodes[edge.node1], nodes[edge.node2], edge.weight, distributedAttraction, coefficient) - */ - __pyx_t_1 = ((__pyx_v_edgeWeightInfluence == 1.0) != 0); - if (__pyx_t_1) { - - /* "fa2/fa2util.py":140 - * linAttraction(nodes[edge.node1], nodes[edge.node2], 1, distributedAttraction, coefficient) - * elif edgeWeightInfluence == 1: - * for edge in edges: # <<<<<<<<<<<<<< - * linAttraction(nodes[edge.node1], nodes[edge.node2], edge.weight, distributedAttraction, coefficient) - * else: - */ - if (unlikely(__pyx_v_edges == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); - __PYX_ERR(2, 140, __pyx_L1_error) - } - __pyx_t_2 = __pyx_v_edges; __Pyx_INCREF(__pyx_t_2); __pyx_t_3 = 0; - for (;;) { - 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(2, 140, __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(2, 140, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - #endif - if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_3fa2_7fa2util_Edge))))) __PYX_ERR(2, 140, __pyx_L1_error) - __Pyx_XDECREF_SET(__pyx_v_edge, ((struct __pyx_obj_3fa2_7fa2util_Edge *)__pyx_t_5)); - __pyx_t_5 = 0; - - /* "fa2/fa2util.py":141 - * elif edgeWeightInfluence == 1: - * for edge in edges: - * linAttraction(nodes[edge.node1], nodes[edge.node2], edge.weight, distributedAttraction, coefficient) # <<<<<<<<<<<<<< - * else: - * for edge in edges: - */ - if (unlikely(__pyx_v_nodes == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); - __PYX_ERR(2, 141, __pyx_L1_error) - } - __pyx_t_5 = __Pyx_GetItemInt_List(__pyx_v_nodes, __pyx_v_edge->node1, int, 1, __Pyx_PyInt_From_int, 1, 1, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 141, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_3fa2_7fa2util_Node))))) __PYX_ERR(2, 141, __pyx_L1_error) - if (unlikely(__pyx_v_nodes == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); - __PYX_ERR(2, 141, __pyx_L1_error) - } - __pyx_t_4 = __Pyx_GetItemInt_List(__pyx_v_nodes, __pyx_v_edge->node2, int, 1, __Pyx_PyInt_From_int, 1, 1, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 141, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_3fa2_7fa2util_Node))))) __PYX_ERR(2, 141, __pyx_L1_error) - __pyx_t_6.__pyx_n = 1; - __pyx_t_6.coefficient = __pyx_v_coefficient; - __pyx_f_3fa2_7fa2util_linAttraction(((struct __pyx_obj_3fa2_7fa2util_Node *)__pyx_t_5), ((struct __pyx_obj_3fa2_7fa2util_Node *)__pyx_t_4), __pyx_v_edge->weight, __pyx_v_distributedAttraction, 0, &__pyx_t_6); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "fa2/fa2util.py":140 - * linAttraction(nodes[edge.node1], nodes[edge.node2], 1, distributedAttraction, coefficient) - * elif edgeWeightInfluence == 1: - * for edge in edges: # <<<<<<<<<<<<<< - * linAttraction(nodes[edge.node1], nodes[edge.node2], edge.weight, distributedAttraction, coefficient) - * else: - */ - } - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "fa2/fa2util.py":139 - * for edge in edges: - * linAttraction(nodes[edge.node1], nodes[edge.node2], 1, distributedAttraction, coefficient) - * elif edgeWeightInfluence == 1: # <<<<<<<<<<<<<< - * for edge in edges: - * linAttraction(nodes[edge.node1], nodes[edge.node2], edge.weight, distributedAttraction, coefficient) - */ - goto __pyx_L3; - } - - /* "fa2/fa2util.py":143 - * linAttraction(nodes[edge.node1], nodes[edge.node2], edge.weight, distributedAttraction, coefficient) - * else: - * for edge in edges: # <<<<<<<<<<<<<< - * linAttraction(nodes[edge.node1], nodes[edge.node2], pow(edge.weight, edgeWeightInfluence), - * distributedAttraction, coefficient) - */ - /*else*/ { - if (unlikely(__pyx_v_edges == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); - __PYX_ERR(2, 143, __pyx_L1_error) - } - __pyx_t_2 = __pyx_v_edges; __Pyx_INCREF(__pyx_t_2); __pyx_t_3 = 0; - for (;;) { - if (__pyx_t_3 >= PyList_GET_SIZE(__pyx_t_2)) break; - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_4 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_4); __pyx_t_3++; if (unlikely(0 < 0)) __PYX_ERR(2, 143, __pyx_L1_error) - #else - __pyx_t_4 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 143, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - #endif - if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_3fa2_7fa2util_Edge))))) __PYX_ERR(2, 143, __pyx_L1_error) - __Pyx_XDECREF_SET(__pyx_v_edge, ((struct __pyx_obj_3fa2_7fa2util_Edge *)__pyx_t_4)); - __pyx_t_4 = 0; - - /* "fa2/fa2util.py":144 - * else: - * for edge in edges: - * linAttraction(nodes[edge.node1], nodes[edge.node2], pow(edge.weight, edgeWeightInfluence), # <<<<<<<<<<<<<< - * distributedAttraction, coefficient) - * - */ - if (unlikely(__pyx_v_nodes == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); - __PYX_ERR(2, 144, __pyx_L1_error) - } - __pyx_t_4 = __Pyx_GetItemInt_List(__pyx_v_nodes, __pyx_v_edge->node1, int, 1, __Pyx_PyInt_From_int, 1, 1, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 144, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_3fa2_7fa2util_Node))))) __PYX_ERR(2, 144, __pyx_L1_error) - if (unlikely(__pyx_v_nodes == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); - __PYX_ERR(2, 144, __pyx_L1_error) - } - __pyx_t_5 = __Pyx_GetItemInt_List(__pyx_v_nodes, __pyx_v_edge->node2, int, 1, __Pyx_PyInt_From_int, 1, 1, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 144, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_3fa2_7fa2util_Node))))) __PYX_ERR(2, 144, __pyx_L1_error) - __pyx_t_7 = PyFloat_FromDouble(__pyx_v_edge->weight); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 144, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_8 = PyFloat_FromDouble(__pyx_v_edgeWeightInfluence); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 144, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_9 = __Pyx_PyNumber_Power2(__pyx_t_7, __pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 144, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_10 = __pyx_PyFloat_AsDouble(__pyx_t_9); if (unlikely((__pyx_t_10 == (double)-1) && PyErr_Occurred())) __PYX_ERR(2, 144, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - - /* "fa2/fa2util.py":145 - * for edge in edges: - * linAttraction(nodes[edge.node1], nodes[edge.node2], pow(edge.weight, edgeWeightInfluence), - * distributedAttraction, coefficient) # <<<<<<<<<<<<<< - * - * - */ - __pyx_t_6.__pyx_n = 1; - __pyx_t_6.coefficient = __pyx_v_coefficient; - __pyx_f_3fa2_7fa2util_linAttraction(((struct __pyx_obj_3fa2_7fa2util_Node *)__pyx_t_4), ((struct __pyx_obj_3fa2_7fa2util_Node *)__pyx_t_5), __pyx_t_10, __pyx_v_distributedAttraction, 0, &__pyx_t_6); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - - /* "fa2/fa2util.py":143 - * linAttraction(nodes[edge.node1], nodes[edge.node2], edge.weight, distributedAttraction, coefficient) - * else: - * for edge in edges: # <<<<<<<<<<<<<< - * linAttraction(nodes[edge.node1], nodes[edge.node2], pow(edge.weight, edgeWeightInfluence), - * distributedAttraction, coefficient) - */ - } - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - } - __pyx_L3:; - - /* "fa2/fa2util.py":134 - * - * - * def apply_attraction(nodes, edges, distributedAttraction, coefficient, edgeWeightInfluence): # <<<<<<<<<<<<<< - * # Optimization, since usually edgeWeightInfluence is 0 or 1, and pow is slow - * if edgeWeightInfluence == 0: - */ - - /* function exit code */ - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_7); - __Pyx_XDECREF(__pyx_t_8); - __Pyx_XDECREF(__pyx_t_9); - __Pyx_WriteUnraisable("fa2.fa2util.apply_attraction", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0); - __pyx_L0:; - __Pyx_XDECREF((PyObject *)__pyx_v_edge); - __Pyx_RefNannyFinishContext(); -} - -/* Python wrapper */ -static PyObject *__pyx_pw_3fa2_7fa2util_7apply_attraction(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3fa2_7fa2util_7apply_attraction = {"apply_attraction", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_3fa2_7fa2util_7apply_attraction, METH_VARARGS|METH_KEYWORDS, 0}; -static PyObject *__pyx_pw_3fa2_7fa2util_7apply_attraction(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_nodes = 0; - PyObject *__pyx_v_edges = 0; - int __pyx_v_distributedAttraction; - double __pyx_v_coefficient; - double __pyx_v_edgeWeightInfluence; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("apply_attraction (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_nodes,&__pyx_n_s_edges,&__pyx_n_s_distributedAttraction,&__pyx_n_s_coefficient,&__pyx_n_s_edgeWeightInfluence,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_nodes)) != 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_edges)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("apply_attraction", 1, 5, 5, 1); __PYX_ERR(2, 134, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 2: - if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_distributedAttraction)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("apply_attraction", 1, 5, 5, 2); __PYX_ERR(2, 134, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 3: - if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_coefficient)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("apply_attraction", 1, 5, 5, 3); __PYX_ERR(2, 134, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 4: - if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_edgeWeightInfluence)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("apply_attraction", 1, 5, 5, 4); __PYX_ERR(2, 134, __pyx_L3_error) - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "apply_attraction") < 0)) __PYX_ERR(2, 134, __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_nodes = ((PyObject*)values[0]); - __pyx_v_edges = ((PyObject*)values[1]); - __pyx_v_distributedAttraction = __Pyx_PyObject_IsTrue(values[2]); if (unlikely((__pyx_v_distributedAttraction == (int)-1) && PyErr_Occurred())) __PYX_ERR(2, 134, __pyx_L3_error) - __pyx_v_coefficient = __pyx_PyFloat_AsDouble(values[3]); if (unlikely((__pyx_v_coefficient == (double)-1) && PyErr_Occurred())) __PYX_ERR(2, 134, __pyx_L3_error) - __pyx_v_edgeWeightInfluence = __pyx_PyFloat_AsDouble(values[4]); if (unlikely((__pyx_v_edgeWeightInfluence == (double)-1) && PyErr_Occurred())) __PYX_ERR(2, 134, __pyx_L3_error) - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("apply_attraction", 1, 5, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(2, 134, __pyx_L3_error) - __pyx_L3_error:; - __Pyx_AddTraceback("fa2.fa2util.apply_attraction", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_nodes), (&PyList_Type), 1, "nodes", 1))) __PYX_ERR(2, 134, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_edges), (&PyList_Type), 1, "edges", 1))) __PYX_ERR(2, 134, __pyx_L1_error) - __pyx_r = __pyx_pf_3fa2_7fa2util_6apply_attraction(__pyx_self, __pyx_v_nodes, __pyx_v_edges, __pyx_v_distributedAttraction, __pyx_v_coefficient, __pyx_v_edgeWeightInfluence); - - /* function exit code */ - goto __pyx_L0; - __pyx_L1_error:; - __pyx_r = NULL; - __pyx_L0:; - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3fa2_7fa2util_6apply_attraction(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_nodes, PyObject *__pyx_v_edges, int __pyx_v_distributedAttraction, double __pyx_v_coefficient, double __pyx_v_edgeWeightInfluence) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - __Pyx_RefNannySetupContext("apply_attraction", 0); - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_void_to_None(__pyx_f_3fa2_7fa2util_apply_attraction(__pyx_v_nodes, __pyx_v_edges, __pyx_v_distributedAttraction, __pyx_v_coefficient, __pyx_v_edgeWeightInfluence, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 134, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L0; - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("fa2.fa2util.apply_attraction", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "fa2/fa2util.py":150 - * # For Barnes Hut Optimization - * class Region: - * def __init__(self, nodes): # <<<<<<<<<<<<<< - * self.mass = 0.0 - * self.massCenterX = 0.0 - */ - -/* Python wrapper */ -static int __pyx_pw_3fa2_7fa2util_6Region_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static int __pyx_pw_3fa2_7fa2util_6Region_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_nodes = 0; - int __pyx_r; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__init__ (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_nodes,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_nodes)) != 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(2, 150, __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_nodes = 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(2, 150, __pyx_L3_error) - __pyx_L3_error:; - __Pyx_AddTraceback("fa2.fa2util.Region.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return -1; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3fa2_7fa2util_6Region___init__(((struct __pyx_obj_3fa2_7fa2util_Region *)__pyx_v_self), __pyx_v_nodes); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static int __pyx_pf_3fa2_7fa2util_6Region___init__(struct __pyx_obj_3fa2_7fa2util_Region *__pyx_v_self, PyObject *__pyx_v_nodes) { - int __pyx_r; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - __Pyx_RefNannySetupContext("__init__", 0); - - /* "fa2/fa2util.py":151 - * class Region: - * def __init__(self, nodes): - * self.mass = 0.0 # <<<<<<<<<<<<<< - * self.massCenterX = 0.0 - * self.massCenterY = 0.0 - */ - __pyx_v_self->mass = 0.0; - - /* "fa2/fa2util.py":152 - * def __init__(self, nodes): - * self.mass = 0.0 - * self.massCenterX = 0.0 # <<<<<<<<<<<<<< - * self.massCenterY = 0.0 - * self.size = 0.0 - */ - __pyx_v_self->massCenterX = 0.0; - - /* "fa2/fa2util.py":153 - * self.mass = 0.0 - * self.massCenterX = 0.0 - * self.massCenterY = 0.0 # <<<<<<<<<<<<<< - * self.size = 0.0 - * self.nodes = nodes - */ - __pyx_v_self->massCenterY = 0.0; - - /* "fa2/fa2util.py":154 - * self.massCenterX = 0.0 - * self.massCenterY = 0.0 - * self.size = 0.0 # <<<<<<<<<<<<<< - * self.nodes = nodes - * self.subregions = [] - */ - __pyx_v_self->size = 0.0; - - /* "fa2/fa2util.py":155 - * self.massCenterY = 0.0 - * self.size = 0.0 - * self.nodes = nodes # <<<<<<<<<<<<<< - * self.subregions = [] - * self.updateMassAndGeometry() - */ - if (!(likely(PyList_CheckExact(__pyx_v_nodes))||((__pyx_v_nodes) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "list", Py_TYPE(__pyx_v_nodes)->tp_name), 0))) __PYX_ERR(2, 155, __pyx_L1_error) - __pyx_t_1 = __pyx_v_nodes; - __Pyx_INCREF(__pyx_t_1); - __Pyx_GIVEREF(__pyx_t_1); - __Pyx_GOTREF(__pyx_v_self->nodes); - __Pyx_DECREF(__pyx_v_self->nodes); - __pyx_v_self->nodes = ((PyObject*)__pyx_t_1); - __pyx_t_1 = 0; - - /* "fa2/fa2util.py":156 - * self.size = 0.0 - * self.nodes = nodes - * self.subregions = [] # <<<<<<<<<<<<<< - * self.updateMassAndGeometry() - * - */ - __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 156, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_GIVEREF(__pyx_t_1); - __Pyx_GOTREF(__pyx_v_self->subregions); - __Pyx_DECREF(__pyx_v_self->subregions); - __pyx_v_self->subregions = ((PyObject*)__pyx_t_1); - __pyx_t_1 = 0; - - /* "fa2/fa2util.py":157 - * self.nodes = nodes - * self.subregions = [] - * self.updateMassAndGeometry() # <<<<<<<<<<<<<< - * - * def updateMassAndGeometry(self): - */ - ((struct __pyx_vtabstruct_3fa2_7fa2util_Region *)__pyx_v_self->__pyx_vtab)->updateMassAndGeometry(__pyx_v_self); - - /* "fa2/fa2util.py":150 - * # For Barnes Hut Optimization - * class Region: - * def __init__(self, nodes): # <<<<<<<<<<<<<< - * self.mass = 0.0 - * self.massCenterX = 0.0 - */ - - /* function exit code */ - __pyx_r = 0; - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("fa2.fa2util.Region.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = -1; - __pyx_L0:; - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "fa2/fa2util.py":159 - * self.updateMassAndGeometry() - * - * def updateMassAndGeometry(self): # <<<<<<<<<<<<<< - * if len(self.nodes) > 1: - * self.mass = 0 - */ - -static void __pyx_f_3fa2_7fa2util_6Region_updateMassAndGeometry(struct __pyx_obj_3fa2_7fa2util_Region *__pyx_v_self) { - double __pyx_v_massSumX; - double __pyx_v_massSumY; - struct __pyx_obj_3fa2_7fa2util_Node *__pyx_v_n = 0; - double __pyx_v_distance; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - Py_ssize_t __pyx_t_2; - int __pyx_t_3; - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - PyObject *__pyx_t_6 = NULL; - PyObject *__pyx_t_7 = NULL; - double __pyx_t_8; - double __pyx_t_9; - double __pyx_t_10; - __Pyx_RefNannySetupContext("updateMassAndGeometry", 0); - - /* "fa2/fa2util.py":160 - * - * def updateMassAndGeometry(self): - * if len(self.nodes) > 1: # <<<<<<<<<<<<<< - * self.mass = 0 - * massSumX = 0 - */ - __pyx_t_1 = __pyx_v_self->nodes; - __Pyx_INCREF(__pyx_t_1); - if (unlikely(__pyx_t_1 == Py_None)) { - PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); - __PYX_ERR(2, 160, __pyx_L1_error) - } - __pyx_t_2 = PyList_GET_SIZE(__pyx_t_1); if (unlikely(__pyx_t_2 == ((Py_ssize_t)-1))) __PYX_ERR(2, 160, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_3 = ((__pyx_t_2 > 1) != 0); - if (__pyx_t_3) { - - /* "fa2/fa2util.py":161 - * def updateMassAndGeometry(self): - * if len(self.nodes) > 1: - * self.mass = 0 # <<<<<<<<<<<<<< - * massSumX = 0 - * massSumY = 0 - */ - __pyx_v_self->mass = 0.0; - - /* "fa2/fa2util.py":162 - * if len(self.nodes) > 1: - * self.mass = 0 - * massSumX = 0 # <<<<<<<<<<<<<< - * massSumY = 0 - * for n in self.nodes: - */ - __pyx_v_massSumX = 0.0; - - /* "fa2/fa2util.py":163 - * self.mass = 0 - * massSumX = 0 - * massSumY = 0 # <<<<<<<<<<<<<< - * for n in self.nodes: - * self.mass += n.mass - */ - __pyx_v_massSumY = 0.0; - - /* "fa2/fa2util.py":164 - * massSumX = 0 - * massSumY = 0 - * for n in self.nodes: # <<<<<<<<<<<<<< - * self.mass += n.mass - * massSumX += n.x * n.mass - */ - if (unlikely(__pyx_v_self->nodes == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); - __PYX_ERR(2, 164, __pyx_L1_error) - } - __pyx_t_1 = __pyx_v_self->nodes; __Pyx_INCREF(__pyx_t_1); __pyx_t_2 = 0; - for (;;) { - if (__pyx_t_2 >= PyList_GET_SIZE(__pyx_t_1)) break; - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_4 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++; if (unlikely(0 < 0)) __PYX_ERR(2, 164, __pyx_L1_error) - #else - __pyx_t_4 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 164, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - #endif - if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_3fa2_7fa2util_Node))))) __PYX_ERR(2, 164, __pyx_L1_error) - __Pyx_XDECREF_SET(__pyx_v_n, ((struct __pyx_obj_3fa2_7fa2util_Node *)__pyx_t_4)); - __pyx_t_4 = 0; - - /* "fa2/fa2util.py":165 - * massSumY = 0 - * for n in self.nodes: - * self.mass += n.mass # <<<<<<<<<<<<<< - * massSumX += n.x * n.mass - * massSumY += n.y * n.mass - */ - __pyx_v_self->mass = (__pyx_v_self->mass + __pyx_v_n->mass); - - /* "fa2/fa2util.py":166 - * for n in self.nodes: - * self.mass += n.mass - * massSumX += n.x * n.mass # <<<<<<<<<<<<<< - * massSumY += n.y * n.mass - * self.massCenterX = massSumX / self.mass - */ - __pyx_v_massSumX = (__pyx_v_massSumX + (__pyx_v_n->x * __pyx_v_n->mass)); - - /* "fa2/fa2util.py":167 - * self.mass += n.mass - * massSumX += n.x * n.mass - * massSumY += n.y * n.mass # <<<<<<<<<<<<<< - * self.massCenterX = massSumX / self.mass - * self.massCenterY = massSumY / self.mass - */ - __pyx_v_massSumY = (__pyx_v_massSumY + (__pyx_v_n->y * __pyx_v_n->mass)); - - /* "fa2/fa2util.py":164 - * massSumX = 0 - * massSumY = 0 - * for n in self.nodes: # <<<<<<<<<<<<<< - * self.mass += n.mass - * massSumX += n.x * n.mass - */ - } - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "fa2/fa2util.py":168 - * massSumX += n.x * n.mass - * massSumY += n.y * n.mass - * self.massCenterX = massSumX / self.mass # <<<<<<<<<<<<<< - * self.massCenterY = massSumY / self.mass - * - */ - if (unlikely(__pyx_v_self->mass == 0)) { - PyErr_SetString(PyExc_ZeroDivisionError, "float division"); - __PYX_ERR(2, 168, __pyx_L1_error) - } - __pyx_v_self->massCenterX = (__pyx_v_massSumX / __pyx_v_self->mass); - - /* "fa2/fa2util.py":169 - * massSumY += n.y * n.mass - * self.massCenterX = massSumX / self.mass - * self.massCenterY = massSumY / self.mass # <<<<<<<<<<<<<< - * - * self.size = 0.0 - */ - if (unlikely(__pyx_v_self->mass == 0)) { - PyErr_SetString(PyExc_ZeroDivisionError, "float division"); - __PYX_ERR(2, 169, __pyx_L1_error) - } - __pyx_v_self->massCenterY = (__pyx_v_massSumY / __pyx_v_self->mass); - - /* "fa2/fa2util.py":171 - * self.massCenterY = massSumY / self.mass - * - * self.size = 0.0 # <<<<<<<<<<<<<< - * for n in self.nodes: - * distance = sqrt((n.x - self.massCenterX) ** 2 + (n.y - self.massCenterY) ** 2) - */ - __pyx_v_self->size = 0.0; - - /* "fa2/fa2util.py":172 - * - * self.size = 0.0 - * for n in self.nodes: # <<<<<<<<<<<<<< - * distance = sqrt((n.x - self.massCenterX) ** 2 + (n.y - self.massCenterY) ** 2) - * self.size = max(self.size, 2 * distance) - */ - if (unlikely(__pyx_v_self->nodes == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); - __PYX_ERR(2, 172, __pyx_L1_error) - } - __pyx_t_1 = __pyx_v_self->nodes; __Pyx_INCREF(__pyx_t_1); __pyx_t_2 = 0; - for (;;) { - if (__pyx_t_2 >= PyList_GET_SIZE(__pyx_t_1)) break; - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_4 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++; if (unlikely(0 < 0)) __PYX_ERR(2, 172, __pyx_L1_error) - #else - __pyx_t_4 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 172, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - #endif - if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_3fa2_7fa2util_Node))))) __PYX_ERR(2, 172, __pyx_L1_error) - __Pyx_XDECREF_SET(__pyx_v_n, ((struct __pyx_obj_3fa2_7fa2util_Node *)__pyx_t_4)); - __pyx_t_4 = 0; - - /* "fa2/fa2util.py":173 - * self.size = 0.0 - * for n in self.nodes: - * distance = sqrt((n.x - self.massCenterX) ** 2 + (n.y - self.massCenterY) ** 2) # <<<<<<<<<<<<<< - * self.size = max(self.size, 2 * distance) - * - */ - __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_sqrt); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 173, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_6 = PyFloat_FromDouble((pow((__pyx_v_n->x - __pyx_v_self->massCenterX), 2.0) + pow((__pyx_v_n->y - __pyx_v_self->massCenterY), 2.0))); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 173, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(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_4 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_7, __pyx_t_6) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_6); - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 173, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_8 = __pyx_PyFloat_AsDouble(__pyx_t_4); if (unlikely((__pyx_t_8 == (double)-1) && PyErr_Occurred())) __PYX_ERR(2, 173, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_v_distance = __pyx_t_8; - - /* "fa2/fa2util.py":174 - * for n in self.nodes: - * distance = sqrt((n.x - self.massCenterX) ** 2 + (n.y - self.massCenterY) ** 2) - * self.size = max(self.size, 2 * distance) # <<<<<<<<<<<<<< - * - * def buildSubRegions(self): - */ - __pyx_t_8 = (2.0 * __pyx_v_distance); - __pyx_t_9 = __pyx_v_self->size; - if (((__pyx_t_8 > __pyx_t_9) != 0)) { - __pyx_t_10 = __pyx_t_8; - } else { - __pyx_t_10 = __pyx_t_9; - } - __pyx_v_self->size = __pyx_t_10; - - /* "fa2/fa2util.py":172 - * - * self.size = 0.0 - * for n in self.nodes: # <<<<<<<<<<<<<< - * distance = sqrt((n.x - self.massCenterX) ** 2 + (n.y - self.massCenterY) ** 2) - * self.size = max(self.size, 2 * distance) - */ - } - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "fa2/fa2util.py":160 - * - * def updateMassAndGeometry(self): - * if len(self.nodes) > 1: # <<<<<<<<<<<<<< - * self.mass = 0 - * massSumX = 0 - */ - } - - /* "fa2/fa2util.py":159 - * self.updateMassAndGeometry() - * - * def updateMassAndGeometry(self): # <<<<<<<<<<<<<< - * if len(self.nodes) > 1: - * self.mass = 0 - */ - - /* function exit code */ - 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_7); - __Pyx_WriteUnraisable("fa2.fa2util.Region.updateMassAndGeometry", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0); - __pyx_L0:; - __Pyx_XDECREF((PyObject *)__pyx_v_n); - __Pyx_RefNannyFinishContext(); -} - -/* "fa2/fa2util.py":176 - * self.size = max(self.size, 2 * distance) - * - * def buildSubRegions(self): # <<<<<<<<<<<<<< - * if len(self.nodes) > 1: - * topleftNodes = [] - */ - -static PyObject *__pyx_pw_3fa2_7fa2util_6Region_3buildSubRegions(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ -static void __pyx_f_3fa2_7fa2util_6Region_buildSubRegions(struct __pyx_obj_3fa2_7fa2util_Region *__pyx_v_self, int __pyx_skip_dispatch) { - struct __pyx_obj_3fa2_7fa2util_Node *__pyx_v_n = 0; - PyObject *__pyx_v_topleftNodes = 0; - PyObject *__pyx_v_bottomleftNodes = 0; - PyObject *__pyx_v_toprightNodes = 0; - PyObject *__pyx_v_bottomrightNodes = 0; - struct __pyx_obj_3fa2_7fa2util_Region *__pyx_v_subregion = 0; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - Py_ssize_t __pyx_t_5; - int __pyx_t_6; - int __pyx_t_7; - Py_ssize_t __pyx_t_8; - __Pyx_RefNannySetupContext("buildSubRegions", 0); - /* Check if called by wrapper */ - if (unlikely(__pyx_skip_dispatch)) ; - /* Check if overridden in Python */ - else if (unlikely((Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0) || (Py_TYPE(((PyObject *)__pyx_v_self))->tp_flags & (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)))) { - #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS - static PY_UINT64_T __pyx_tp_dict_version = __PYX_DICT_VERSION_INIT, __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT; - if (unlikely(!__Pyx_object_dict_version_matches(((PyObject *)__pyx_v_self), __pyx_tp_dict_version, __pyx_obj_dict_version))) { - PY_UINT64_T __pyx_type_dict_guard = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self)); - #endif - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_buildSubRegions); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 176, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)(void*)__pyx_pw_3fa2_7fa2util_6Region_3buildSubRegions)) { - __Pyx_INCREF(__pyx_t_1); - __pyx_t_3 = __pyx_t_1; __pyx_t_4 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) { - __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3); - if (likely(__pyx_t_4)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); - __Pyx_INCREF(__pyx_t_4); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_3, function); - } - } - __pyx_t_2 = (__pyx_t_4) ? __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4) : __Pyx_PyObject_CallNoArg(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 176, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - goto __pyx_L0; - } - #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS - __pyx_tp_dict_version = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self)); - __pyx_obj_dict_version = __Pyx_get_object_dict_version(((PyObject *)__pyx_v_self)); - if (unlikely(__pyx_type_dict_guard != __pyx_tp_dict_version)) { - __pyx_tp_dict_version = __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT; - } - #endif - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS - } - #endif - } - - /* "fa2/fa2util.py":177 - * - * def buildSubRegions(self): - * if len(self.nodes) > 1: # <<<<<<<<<<<<<< - * topleftNodes = [] - * bottomleftNodes = [] - */ - __pyx_t_1 = __pyx_v_self->nodes; - __Pyx_INCREF(__pyx_t_1); - if (unlikely(__pyx_t_1 == Py_None)) { - PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); - __PYX_ERR(2, 177, __pyx_L1_error) - } - __pyx_t_5 = PyList_GET_SIZE(__pyx_t_1); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(2, 177, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_6 = ((__pyx_t_5 > 1) != 0); - if (__pyx_t_6) { - - /* "fa2/fa2util.py":178 - * def buildSubRegions(self): - * if len(self.nodes) > 1: - * topleftNodes = [] # <<<<<<<<<<<<<< - * bottomleftNodes = [] - * toprightNodes = [] - */ - __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 178, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_v_topleftNodes = ((PyObject*)__pyx_t_1); - __pyx_t_1 = 0; - - /* "fa2/fa2util.py":179 - * if len(self.nodes) > 1: - * topleftNodes = [] - * bottomleftNodes = [] # <<<<<<<<<<<<<< - * toprightNodes = [] - * bottomrightNodes = [] - */ - __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 179, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_v_bottomleftNodes = ((PyObject*)__pyx_t_1); - __pyx_t_1 = 0; - - /* "fa2/fa2util.py":180 - * topleftNodes = [] - * bottomleftNodes = [] - * toprightNodes = [] # <<<<<<<<<<<<<< - * bottomrightNodes = [] - * # Optimization: The distribution of self.nodes into - */ - __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 180, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_v_toprightNodes = ((PyObject*)__pyx_t_1); - __pyx_t_1 = 0; - - /* "fa2/fa2util.py":181 - * bottomleftNodes = [] - * toprightNodes = [] - * bottomrightNodes = [] # <<<<<<<<<<<<<< - * # Optimization: The distribution of self.nodes into - * # subregions now requires only one for loop. Removed - */ - __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 181, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_v_bottomrightNodes = ((PyObject*)__pyx_t_1); - __pyx_t_1 = 0; - - /* "fa2/fa2util.py":185 - * # subregions now requires only one for loop. Removed - * # topNodes and bottomNodes arrays: memory space saving. - * for n in self.nodes: # <<<<<<<<<<<<<< - * if n.x < self.massCenterX: - * if n.y < self.massCenterY: - */ - if (unlikely(__pyx_v_self->nodes == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); - __PYX_ERR(2, 185, __pyx_L1_error) - } - __pyx_t_1 = __pyx_v_self->nodes; __Pyx_INCREF(__pyx_t_1); __pyx_t_5 = 0; - for (;;) { - if (__pyx_t_5 >= PyList_GET_SIZE(__pyx_t_1)) break; - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_2 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_5); __Pyx_INCREF(__pyx_t_2); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(2, 185, __pyx_L1_error) - #else - __pyx_t_2 = PySequence_ITEM(__pyx_t_1, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 185, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - #endif - if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_3fa2_7fa2util_Node))))) __PYX_ERR(2, 185, __pyx_L1_error) - __Pyx_XDECREF_SET(__pyx_v_n, ((struct __pyx_obj_3fa2_7fa2util_Node *)__pyx_t_2)); - __pyx_t_2 = 0; - - /* "fa2/fa2util.py":186 - * # topNodes and bottomNodes arrays: memory space saving. - * for n in self.nodes: - * if n.x < self.massCenterX: # <<<<<<<<<<<<<< - * if n.y < self.massCenterY: - * bottomleftNodes.append(n) - */ - __pyx_t_6 = ((__pyx_v_n->x < __pyx_v_self->massCenterX) != 0); - if (__pyx_t_6) { - - /* "fa2/fa2util.py":187 - * for n in self.nodes: - * if n.x < self.massCenterX: - * if n.y < self.massCenterY: # <<<<<<<<<<<<<< - * bottomleftNodes.append(n) - * else: - */ - __pyx_t_6 = ((__pyx_v_n->y < __pyx_v_self->massCenterY) != 0); - if (__pyx_t_6) { - - /* "fa2/fa2util.py":188 - * if n.x < self.massCenterX: - * if n.y < self.massCenterY: - * bottomleftNodes.append(n) # <<<<<<<<<<<<<< - * else: - * topleftNodes.append(n) - */ - __pyx_t_7 = __Pyx_PyList_Append(__pyx_v_bottomleftNodes, ((PyObject *)__pyx_v_n)); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(2, 188, __pyx_L1_error) - - /* "fa2/fa2util.py":187 - * for n in self.nodes: - * if n.x < self.massCenterX: - * if n.y < self.massCenterY: # <<<<<<<<<<<<<< - * bottomleftNodes.append(n) - * else: - */ - goto __pyx_L7; - } - - /* "fa2/fa2util.py":190 - * bottomleftNodes.append(n) - * else: - * topleftNodes.append(n) # <<<<<<<<<<<<<< - * else: - * if n.y < self.massCenterY: - */ - /*else*/ { - __pyx_t_7 = __Pyx_PyList_Append(__pyx_v_topleftNodes, ((PyObject *)__pyx_v_n)); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(2, 190, __pyx_L1_error) - } - __pyx_L7:; - - /* "fa2/fa2util.py":186 - * # topNodes and bottomNodes arrays: memory space saving. - * for n in self.nodes: - * if n.x < self.massCenterX: # <<<<<<<<<<<<<< - * if n.y < self.massCenterY: - * bottomleftNodes.append(n) - */ - goto __pyx_L6; - } - - /* "fa2/fa2util.py":192 - * topleftNodes.append(n) - * else: - * if n.y < self.massCenterY: # <<<<<<<<<<<<<< - * bottomrightNodes.append(n) - * else: - */ - /*else*/ { - __pyx_t_6 = ((__pyx_v_n->y < __pyx_v_self->massCenterY) != 0); - if (__pyx_t_6) { - - /* "fa2/fa2util.py":193 - * else: - * if n.y < self.massCenterY: - * bottomrightNodes.append(n) # <<<<<<<<<<<<<< - * else: - * toprightNodes.append(n) - */ - __pyx_t_7 = __Pyx_PyList_Append(__pyx_v_bottomrightNodes, ((PyObject *)__pyx_v_n)); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(2, 193, __pyx_L1_error) - - /* "fa2/fa2util.py":192 - * topleftNodes.append(n) - * else: - * if n.y < self.massCenterY: # <<<<<<<<<<<<<< - * bottomrightNodes.append(n) - * else: - */ - goto __pyx_L8; - } - - /* "fa2/fa2util.py":195 - * bottomrightNodes.append(n) - * else: - * toprightNodes.append(n) # <<<<<<<<<<<<<< - * - * if len(topleftNodes) > 0: - */ - /*else*/ { - __pyx_t_7 = __Pyx_PyList_Append(__pyx_v_toprightNodes, ((PyObject *)__pyx_v_n)); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(2, 195, __pyx_L1_error) - } - __pyx_L8:; - } - __pyx_L6:; - - /* "fa2/fa2util.py":185 - * # subregions now requires only one for loop. Removed - * # topNodes and bottomNodes arrays: memory space saving. - * for n in self.nodes: # <<<<<<<<<<<<<< - * if n.x < self.massCenterX: - * if n.y < self.massCenterY: - */ - } - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "fa2/fa2util.py":197 - * toprightNodes.append(n) - * - * if len(topleftNodes) > 0: # <<<<<<<<<<<<<< - * if len(topleftNodes) < len(self.nodes): - * subregion = Region(topleftNodes) - */ - __pyx_t_5 = PyList_GET_SIZE(__pyx_v_topleftNodes); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(2, 197, __pyx_L1_error) - __pyx_t_6 = ((__pyx_t_5 > 0) != 0); - if (__pyx_t_6) { - - /* "fa2/fa2util.py":198 - * - * if len(topleftNodes) > 0: - * if len(topleftNodes) < len(self.nodes): # <<<<<<<<<<<<<< - * subregion = Region(topleftNodes) - * self.subregions.append(subregion) - */ - __pyx_t_5 = PyList_GET_SIZE(__pyx_v_topleftNodes); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(2, 198, __pyx_L1_error) - __pyx_t_1 = __pyx_v_self->nodes; - __Pyx_INCREF(__pyx_t_1); - if (unlikely(__pyx_t_1 == Py_None)) { - PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); - __PYX_ERR(2, 198, __pyx_L1_error) - } - __pyx_t_8 = PyList_GET_SIZE(__pyx_t_1); if (unlikely(__pyx_t_8 == ((Py_ssize_t)-1))) __PYX_ERR(2, 198, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_6 = ((__pyx_t_5 < __pyx_t_8) != 0); - if (__pyx_t_6) { - - /* "fa2/fa2util.py":199 - * if len(topleftNodes) > 0: - * if len(topleftNodes) < len(self.nodes): - * subregion = Region(topleftNodes) # <<<<<<<<<<<<<< - * self.subregions.append(subregion) - * else: - */ - __pyx_t_1 = __Pyx_PyObject_CallOneArg(((PyObject *)__pyx_ptype_3fa2_7fa2util_Region), __pyx_v_topleftNodes); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 199, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_v_subregion = ((struct __pyx_obj_3fa2_7fa2util_Region *)__pyx_t_1); - __pyx_t_1 = 0; - - /* "fa2/fa2util.py":200 - * if len(topleftNodes) < len(self.nodes): - * subregion = Region(topleftNodes) - * self.subregions.append(subregion) # <<<<<<<<<<<<<< - * else: - * for n in topleftNodes: - */ - if (unlikely(__pyx_v_self->subregions == Py_None)) { - PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "append"); - __PYX_ERR(2, 200, __pyx_L1_error) - } - __pyx_t_7 = __Pyx_PyList_Append(__pyx_v_self->subregions, ((PyObject *)__pyx_v_subregion)); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(2, 200, __pyx_L1_error) - - /* "fa2/fa2util.py":198 - * - * if len(topleftNodes) > 0: - * if len(topleftNodes) < len(self.nodes): # <<<<<<<<<<<<<< - * subregion = Region(topleftNodes) - * self.subregions.append(subregion) - */ - goto __pyx_L10; - } - - /* "fa2/fa2util.py":202 - * self.subregions.append(subregion) - * else: - * for n in topleftNodes: # <<<<<<<<<<<<<< - * subregion = Region([n]) - * self.subregions.append(subregion) - */ - /*else*/ { - __pyx_t_1 = __pyx_v_topleftNodes; __Pyx_INCREF(__pyx_t_1); __pyx_t_8 = 0; - for (;;) { - if (__pyx_t_8 >= PyList_GET_SIZE(__pyx_t_1)) break; - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_2 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_8); __Pyx_INCREF(__pyx_t_2); __pyx_t_8++; if (unlikely(0 < 0)) __PYX_ERR(2, 202, __pyx_L1_error) - #else - __pyx_t_2 = PySequence_ITEM(__pyx_t_1, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 202, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - #endif - if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_3fa2_7fa2util_Node))))) __PYX_ERR(2, 202, __pyx_L1_error) - __Pyx_XDECREF_SET(__pyx_v_n, ((struct __pyx_obj_3fa2_7fa2util_Node *)__pyx_t_2)); - __pyx_t_2 = 0; - - /* "fa2/fa2util.py":203 - * else: - * for n in topleftNodes: - * subregion = Region([n]) # <<<<<<<<<<<<<< - * self.subregions.append(subregion) - * - */ - __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 203, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(((PyObject *)__pyx_v_n)); - __Pyx_GIVEREF(((PyObject *)__pyx_v_n)); - PyList_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_v_n)); - __pyx_t_3 = __Pyx_PyObject_CallOneArg(((PyObject *)__pyx_ptype_3fa2_7fa2util_Region), __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 203, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_XDECREF_SET(__pyx_v_subregion, ((struct __pyx_obj_3fa2_7fa2util_Region *)__pyx_t_3)); - __pyx_t_3 = 0; - - /* "fa2/fa2util.py":204 - * for n in topleftNodes: - * subregion = Region([n]) - * self.subregions.append(subregion) # <<<<<<<<<<<<<< - * - * if len(bottomleftNodes) > 0: - */ - if (unlikely(__pyx_v_self->subregions == Py_None)) { - PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "append"); - __PYX_ERR(2, 204, __pyx_L1_error) - } - __pyx_t_7 = __Pyx_PyList_Append(__pyx_v_self->subregions, ((PyObject *)__pyx_v_subregion)); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(2, 204, __pyx_L1_error) - - /* "fa2/fa2util.py":202 - * self.subregions.append(subregion) - * else: - * for n in topleftNodes: # <<<<<<<<<<<<<< - * subregion = Region([n]) - * self.subregions.append(subregion) - */ - } - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - } - __pyx_L10:; - - /* "fa2/fa2util.py":197 - * toprightNodes.append(n) - * - * if len(topleftNodes) > 0: # <<<<<<<<<<<<<< - * if len(topleftNodes) < len(self.nodes): - * subregion = Region(topleftNodes) - */ - } - - /* "fa2/fa2util.py":206 - * self.subregions.append(subregion) - * - * if len(bottomleftNodes) > 0: # <<<<<<<<<<<<<< - * if len(bottomleftNodes) < len(self.nodes): - * subregion = Region(bottomleftNodes) - */ - __pyx_t_8 = PyList_GET_SIZE(__pyx_v_bottomleftNodes); if (unlikely(__pyx_t_8 == ((Py_ssize_t)-1))) __PYX_ERR(2, 206, __pyx_L1_error) - __pyx_t_6 = ((__pyx_t_8 > 0) != 0); - if (__pyx_t_6) { - - /* "fa2/fa2util.py":207 - * - * if len(bottomleftNodes) > 0: - * if len(bottomleftNodes) < len(self.nodes): # <<<<<<<<<<<<<< - * subregion = Region(bottomleftNodes) - * self.subregions.append(subregion) - */ - __pyx_t_8 = PyList_GET_SIZE(__pyx_v_bottomleftNodes); if (unlikely(__pyx_t_8 == ((Py_ssize_t)-1))) __PYX_ERR(2, 207, __pyx_L1_error) - __pyx_t_1 = __pyx_v_self->nodes; - __Pyx_INCREF(__pyx_t_1); - if (unlikely(__pyx_t_1 == Py_None)) { - PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); - __PYX_ERR(2, 207, __pyx_L1_error) - } - __pyx_t_5 = PyList_GET_SIZE(__pyx_t_1); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(2, 207, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_6 = ((__pyx_t_8 < __pyx_t_5) != 0); - if (__pyx_t_6) { - - /* "fa2/fa2util.py":208 - * if len(bottomleftNodes) > 0: - * if len(bottomleftNodes) < len(self.nodes): - * subregion = Region(bottomleftNodes) # <<<<<<<<<<<<<< - * self.subregions.append(subregion) - * else: - */ - __pyx_t_1 = __Pyx_PyObject_CallOneArg(((PyObject *)__pyx_ptype_3fa2_7fa2util_Region), __pyx_v_bottomleftNodes); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 208, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_XDECREF_SET(__pyx_v_subregion, ((struct __pyx_obj_3fa2_7fa2util_Region *)__pyx_t_1)); - __pyx_t_1 = 0; - - /* "fa2/fa2util.py":209 - * if len(bottomleftNodes) < len(self.nodes): - * subregion = Region(bottomleftNodes) - * self.subregions.append(subregion) # <<<<<<<<<<<<<< - * else: - * for n in bottomleftNodes: - */ - if (unlikely(__pyx_v_self->subregions == Py_None)) { - PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "append"); - __PYX_ERR(2, 209, __pyx_L1_error) - } - __pyx_t_7 = __Pyx_PyList_Append(__pyx_v_self->subregions, ((PyObject *)__pyx_v_subregion)); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(2, 209, __pyx_L1_error) - - /* "fa2/fa2util.py":207 - * - * if len(bottomleftNodes) > 0: - * if len(bottomleftNodes) < len(self.nodes): # <<<<<<<<<<<<<< - * subregion = Region(bottomleftNodes) - * self.subregions.append(subregion) - */ - goto __pyx_L14; - } - - /* "fa2/fa2util.py":211 - * self.subregions.append(subregion) - * else: - * for n in bottomleftNodes: # <<<<<<<<<<<<<< - * subregion = Region([n]) - * self.subregions.append(subregion) - */ - /*else*/ { - __pyx_t_1 = __pyx_v_bottomleftNodes; __Pyx_INCREF(__pyx_t_1); __pyx_t_5 = 0; - for (;;) { - if (__pyx_t_5 >= PyList_GET_SIZE(__pyx_t_1)) break; - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_3 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_5); __Pyx_INCREF(__pyx_t_3); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(2, 211, __pyx_L1_error) - #else - __pyx_t_3 = PySequence_ITEM(__pyx_t_1, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 211, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - #endif - if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_3fa2_7fa2util_Node))))) __PYX_ERR(2, 211, __pyx_L1_error) - __Pyx_XDECREF_SET(__pyx_v_n, ((struct __pyx_obj_3fa2_7fa2util_Node *)__pyx_t_3)); - __pyx_t_3 = 0; - - /* "fa2/fa2util.py":212 - * else: - * for n in bottomleftNodes: - * subregion = Region([n]) # <<<<<<<<<<<<<< - * self.subregions.append(subregion) - * - */ - __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 212, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_INCREF(((PyObject *)__pyx_v_n)); - __Pyx_GIVEREF(((PyObject *)__pyx_v_n)); - PyList_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_v_n)); - __pyx_t_2 = __Pyx_PyObject_CallOneArg(((PyObject *)__pyx_ptype_3fa2_7fa2util_Region), __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 212, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_XDECREF_SET(__pyx_v_subregion, ((struct __pyx_obj_3fa2_7fa2util_Region *)__pyx_t_2)); - __pyx_t_2 = 0; - - /* "fa2/fa2util.py":213 - * for n in bottomleftNodes: - * subregion = Region([n]) - * self.subregions.append(subregion) # <<<<<<<<<<<<<< - * - * if len(toprightNodes) > 0: - */ - if (unlikely(__pyx_v_self->subregions == Py_None)) { - PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "append"); - __PYX_ERR(2, 213, __pyx_L1_error) - } - __pyx_t_7 = __Pyx_PyList_Append(__pyx_v_self->subregions, ((PyObject *)__pyx_v_subregion)); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(2, 213, __pyx_L1_error) - - /* "fa2/fa2util.py":211 - * self.subregions.append(subregion) - * else: - * for n in bottomleftNodes: # <<<<<<<<<<<<<< - * subregion = Region([n]) - * self.subregions.append(subregion) - */ - } - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - } - __pyx_L14:; - - /* "fa2/fa2util.py":206 - * self.subregions.append(subregion) - * - * if len(bottomleftNodes) > 0: # <<<<<<<<<<<<<< - * if len(bottomleftNodes) < len(self.nodes): - * subregion = Region(bottomleftNodes) - */ - } - - /* "fa2/fa2util.py":215 - * self.subregions.append(subregion) - * - * if len(toprightNodes) > 0: # <<<<<<<<<<<<<< - * if len(toprightNodes) < len(self.nodes): - * subregion = Region(toprightNodes) - */ - __pyx_t_5 = PyList_GET_SIZE(__pyx_v_toprightNodes); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(2, 215, __pyx_L1_error) - __pyx_t_6 = ((__pyx_t_5 > 0) != 0); - if (__pyx_t_6) { - - /* "fa2/fa2util.py":216 - * - * if len(toprightNodes) > 0: - * if len(toprightNodes) < len(self.nodes): # <<<<<<<<<<<<<< - * subregion = Region(toprightNodes) - * self.subregions.append(subregion) - */ - __pyx_t_5 = PyList_GET_SIZE(__pyx_v_toprightNodes); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(2, 216, __pyx_L1_error) - __pyx_t_1 = __pyx_v_self->nodes; - __Pyx_INCREF(__pyx_t_1); - if (unlikely(__pyx_t_1 == Py_None)) { - PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); - __PYX_ERR(2, 216, __pyx_L1_error) - } - __pyx_t_8 = PyList_GET_SIZE(__pyx_t_1); if (unlikely(__pyx_t_8 == ((Py_ssize_t)-1))) __PYX_ERR(2, 216, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_6 = ((__pyx_t_5 < __pyx_t_8) != 0); - if (__pyx_t_6) { - - /* "fa2/fa2util.py":217 - * if len(toprightNodes) > 0: - * if len(toprightNodes) < len(self.nodes): - * subregion = Region(toprightNodes) # <<<<<<<<<<<<<< - * self.subregions.append(subregion) - * else: - */ - __pyx_t_1 = __Pyx_PyObject_CallOneArg(((PyObject *)__pyx_ptype_3fa2_7fa2util_Region), __pyx_v_toprightNodes); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 217, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_XDECREF_SET(__pyx_v_subregion, ((struct __pyx_obj_3fa2_7fa2util_Region *)__pyx_t_1)); - __pyx_t_1 = 0; - - /* "fa2/fa2util.py":218 - * if len(toprightNodes) < len(self.nodes): - * subregion = Region(toprightNodes) - * self.subregions.append(subregion) # <<<<<<<<<<<<<< - * else: - * for n in toprightNodes: - */ - if (unlikely(__pyx_v_self->subregions == Py_None)) { - PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "append"); - __PYX_ERR(2, 218, __pyx_L1_error) - } - __pyx_t_7 = __Pyx_PyList_Append(__pyx_v_self->subregions, ((PyObject *)__pyx_v_subregion)); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(2, 218, __pyx_L1_error) - - /* "fa2/fa2util.py":216 - * - * if len(toprightNodes) > 0: - * if len(toprightNodes) < len(self.nodes): # <<<<<<<<<<<<<< - * subregion = Region(toprightNodes) - * self.subregions.append(subregion) - */ - goto __pyx_L18; - } - - /* "fa2/fa2util.py":220 - * self.subregions.append(subregion) - * else: - * for n in toprightNodes: # <<<<<<<<<<<<<< - * subregion = Region([n]) - * self.subregions.append(subregion) - */ - /*else*/ { - __pyx_t_1 = __pyx_v_toprightNodes; __Pyx_INCREF(__pyx_t_1); __pyx_t_8 = 0; - for (;;) { - if (__pyx_t_8 >= PyList_GET_SIZE(__pyx_t_1)) break; - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_2 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_8); __Pyx_INCREF(__pyx_t_2); __pyx_t_8++; if (unlikely(0 < 0)) __PYX_ERR(2, 220, __pyx_L1_error) - #else - __pyx_t_2 = PySequence_ITEM(__pyx_t_1, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 220, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - #endif - if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_3fa2_7fa2util_Node))))) __PYX_ERR(2, 220, __pyx_L1_error) - __Pyx_XDECREF_SET(__pyx_v_n, ((struct __pyx_obj_3fa2_7fa2util_Node *)__pyx_t_2)); - __pyx_t_2 = 0; - - /* "fa2/fa2util.py":221 - * else: - * for n in toprightNodes: - * subregion = Region([n]) # <<<<<<<<<<<<<< - * self.subregions.append(subregion) - * - */ - __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 221, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(((PyObject *)__pyx_v_n)); - __Pyx_GIVEREF(((PyObject *)__pyx_v_n)); - PyList_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_v_n)); - __pyx_t_3 = __Pyx_PyObject_CallOneArg(((PyObject *)__pyx_ptype_3fa2_7fa2util_Region), __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 221, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_XDECREF_SET(__pyx_v_subregion, ((struct __pyx_obj_3fa2_7fa2util_Region *)__pyx_t_3)); - __pyx_t_3 = 0; - - /* "fa2/fa2util.py":222 - * for n in toprightNodes: - * subregion = Region([n]) - * self.subregions.append(subregion) # <<<<<<<<<<<<<< - * - * if len(bottomrightNodes) > 0: - */ - if (unlikely(__pyx_v_self->subregions == Py_None)) { - PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "append"); - __PYX_ERR(2, 222, __pyx_L1_error) - } - __pyx_t_7 = __Pyx_PyList_Append(__pyx_v_self->subregions, ((PyObject *)__pyx_v_subregion)); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(2, 222, __pyx_L1_error) - - /* "fa2/fa2util.py":220 - * self.subregions.append(subregion) - * else: - * for n in toprightNodes: # <<<<<<<<<<<<<< - * subregion = Region([n]) - * self.subregions.append(subregion) - */ - } - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - } - __pyx_L18:; - - /* "fa2/fa2util.py":215 - * self.subregions.append(subregion) - * - * if len(toprightNodes) > 0: # <<<<<<<<<<<<<< - * if len(toprightNodes) < len(self.nodes): - * subregion = Region(toprightNodes) - */ - } - - /* "fa2/fa2util.py":224 - * self.subregions.append(subregion) - * - * if len(bottomrightNodes) > 0: # <<<<<<<<<<<<<< - * if len(bottomrightNodes) < len(self.nodes): - * subregion = Region(bottomrightNodes) - */ - __pyx_t_8 = PyList_GET_SIZE(__pyx_v_bottomrightNodes); if (unlikely(__pyx_t_8 == ((Py_ssize_t)-1))) __PYX_ERR(2, 224, __pyx_L1_error) - __pyx_t_6 = ((__pyx_t_8 > 0) != 0); - if (__pyx_t_6) { - - /* "fa2/fa2util.py":225 - * - * if len(bottomrightNodes) > 0: - * if len(bottomrightNodes) < len(self.nodes): # <<<<<<<<<<<<<< - * subregion = Region(bottomrightNodes) - * self.subregions.append(subregion) - */ - __pyx_t_8 = PyList_GET_SIZE(__pyx_v_bottomrightNodes); if (unlikely(__pyx_t_8 == ((Py_ssize_t)-1))) __PYX_ERR(2, 225, __pyx_L1_error) - __pyx_t_1 = __pyx_v_self->nodes; - __Pyx_INCREF(__pyx_t_1); - if (unlikely(__pyx_t_1 == Py_None)) { - PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); - __PYX_ERR(2, 225, __pyx_L1_error) - } - __pyx_t_5 = PyList_GET_SIZE(__pyx_t_1); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(2, 225, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_6 = ((__pyx_t_8 < __pyx_t_5) != 0); - if (__pyx_t_6) { - - /* "fa2/fa2util.py":226 - * if len(bottomrightNodes) > 0: - * if len(bottomrightNodes) < len(self.nodes): - * subregion = Region(bottomrightNodes) # <<<<<<<<<<<<<< - * self.subregions.append(subregion) - * else: - */ - __pyx_t_1 = __Pyx_PyObject_CallOneArg(((PyObject *)__pyx_ptype_3fa2_7fa2util_Region), __pyx_v_bottomrightNodes); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 226, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_XDECREF_SET(__pyx_v_subregion, ((struct __pyx_obj_3fa2_7fa2util_Region *)__pyx_t_1)); - __pyx_t_1 = 0; - - /* "fa2/fa2util.py":227 - * if len(bottomrightNodes) < len(self.nodes): - * subregion = Region(bottomrightNodes) - * self.subregions.append(subregion) # <<<<<<<<<<<<<< - * else: - * for n in bottomrightNodes: - */ - if (unlikely(__pyx_v_self->subregions == Py_None)) { - PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "append"); - __PYX_ERR(2, 227, __pyx_L1_error) - } - __pyx_t_7 = __Pyx_PyList_Append(__pyx_v_self->subregions, ((PyObject *)__pyx_v_subregion)); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(2, 227, __pyx_L1_error) - - /* "fa2/fa2util.py":225 - * - * if len(bottomrightNodes) > 0: - * if len(bottomrightNodes) < len(self.nodes): # <<<<<<<<<<<<<< - * subregion = Region(bottomrightNodes) - * self.subregions.append(subregion) - */ - goto __pyx_L22; - } - - /* "fa2/fa2util.py":229 - * self.subregions.append(subregion) - * else: - * for n in bottomrightNodes: # <<<<<<<<<<<<<< - * subregion = Region([n]) - * self.subregions.append(subregion) - */ - /*else*/ { - __pyx_t_1 = __pyx_v_bottomrightNodes; __Pyx_INCREF(__pyx_t_1); __pyx_t_5 = 0; - for (;;) { - if (__pyx_t_5 >= PyList_GET_SIZE(__pyx_t_1)) break; - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_3 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_5); __Pyx_INCREF(__pyx_t_3); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(2, 229, __pyx_L1_error) - #else - __pyx_t_3 = PySequence_ITEM(__pyx_t_1, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 229, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - #endif - if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_3fa2_7fa2util_Node))))) __PYX_ERR(2, 229, __pyx_L1_error) - __Pyx_XDECREF_SET(__pyx_v_n, ((struct __pyx_obj_3fa2_7fa2util_Node *)__pyx_t_3)); - __pyx_t_3 = 0; - - /* "fa2/fa2util.py":230 - * else: - * for n in bottomrightNodes: - * subregion = Region([n]) # <<<<<<<<<<<<<< - * self.subregions.append(subregion) - * - */ - __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 230, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_INCREF(((PyObject *)__pyx_v_n)); - __Pyx_GIVEREF(((PyObject *)__pyx_v_n)); - PyList_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_v_n)); - __pyx_t_2 = __Pyx_PyObject_CallOneArg(((PyObject *)__pyx_ptype_3fa2_7fa2util_Region), __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 230, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_XDECREF_SET(__pyx_v_subregion, ((struct __pyx_obj_3fa2_7fa2util_Region *)__pyx_t_2)); - __pyx_t_2 = 0; - - /* "fa2/fa2util.py":231 - * for n in bottomrightNodes: - * subregion = Region([n]) - * self.subregions.append(subregion) # <<<<<<<<<<<<<< - * - * for subregion in self.subregions: - */ - if (unlikely(__pyx_v_self->subregions == Py_None)) { - PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "append"); - __PYX_ERR(2, 231, __pyx_L1_error) - } - __pyx_t_7 = __Pyx_PyList_Append(__pyx_v_self->subregions, ((PyObject *)__pyx_v_subregion)); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(2, 231, __pyx_L1_error) - - /* "fa2/fa2util.py":229 - * self.subregions.append(subregion) - * else: - * for n in bottomrightNodes: # <<<<<<<<<<<<<< - * subregion = Region([n]) - * self.subregions.append(subregion) - */ - } - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - } - __pyx_L22:; - - /* "fa2/fa2util.py":224 - * self.subregions.append(subregion) - * - * if len(bottomrightNodes) > 0: # <<<<<<<<<<<<<< - * if len(bottomrightNodes) < len(self.nodes): - * subregion = Region(bottomrightNodes) - */ - } - - /* "fa2/fa2util.py":233 - * self.subregions.append(subregion) - * - * for subregion in self.subregions: # <<<<<<<<<<<<<< - * subregion.buildSubRegions() - * - */ - if (unlikely(__pyx_v_self->subregions == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); - __PYX_ERR(2, 233, __pyx_L1_error) - } - __pyx_t_1 = __pyx_v_self->subregions; __Pyx_INCREF(__pyx_t_1); __pyx_t_5 = 0; - for (;;) { - if (__pyx_t_5 >= PyList_GET_SIZE(__pyx_t_1)) break; - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_2 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_5); __Pyx_INCREF(__pyx_t_2); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(2, 233, __pyx_L1_error) - #else - __pyx_t_2 = PySequence_ITEM(__pyx_t_1, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 233, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - #endif - if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_3fa2_7fa2util_Region))))) __PYX_ERR(2, 233, __pyx_L1_error) - __Pyx_XDECREF_SET(__pyx_v_subregion, ((struct __pyx_obj_3fa2_7fa2util_Region *)__pyx_t_2)); - __pyx_t_2 = 0; - - /* "fa2/fa2util.py":234 - * - * for subregion in self.subregions: - * subregion.buildSubRegions() # <<<<<<<<<<<<<< - * - * def applyForce(self, n, theta, coefficient=0): - */ - ((struct __pyx_vtabstruct_3fa2_7fa2util_Region *)__pyx_v_subregion->__pyx_vtab)->buildSubRegions(__pyx_v_subregion, 0); - - /* "fa2/fa2util.py":233 - * self.subregions.append(subregion) - * - * for subregion in self.subregions: # <<<<<<<<<<<<<< - * subregion.buildSubRegions() - * - */ - } - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "fa2/fa2util.py":177 - * - * def buildSubRegions(self): - * if len(self.nodes) > 1: # <<<<<<<<<<<<<< - * topleftNodes = [] - * bottomleftNodes = [] - */ - } - - /* "fa2/fa2util.py":176 - * self.size = max(self.size, 2 * distance) - * - * def buildSubRegions(self): # <<<<<<<<<<<<<< - * if len(self.nodes) > 1: - * topleftNodes = [] - */ - - /* function exit 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_WriteUnraisable("fa2.fa2util.Region.buildSubRegions", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0); - __pyx_L0:; - __Pyx_XDECREF((PyObject *)__pyx_v_n); - __Pyx_XDECREF(__pyx_v_topleftNodes); - __Pyx_XDECREF(__pyx_v_bottomleftNodes); - __Pyx_XDECREF(__pyx_v_toprightNodes); - __Pyx_XDECREF(__pyx_v_bottomrightNodes); - __Pyx_XDECREF((PyObject *)__pyx_v_subregion); - __Pyx_RefNannyFinishContext(); -} - -/* Python wrapper */ -static PyObject *__pyx_pw_3fa2_7fa2util_6Region_3buildSubRegions(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ -static PyMethodDef __pyx_mdef_3fa2_7fa2util_6Region_3buildSubRegions = {"buildSubRegions", (PyCFunction)__pyx_pw_3fa2_7fa2util_6Region_3buildSubRegions, METH_NOARGS, 0}; -static PyObject *__pyx_pw_3fa2_7fa2util_6Region_3buildSubRegions(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("buildSubRegions (wrapper)", 0); - __pyx_r = __pyx_pf_3fa2_7fa2util_6Region_2buildSubRegions(((struct __pyx_obj_3fa2_7fa2util_Region *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3fa2_7fa2util_6Region_2buildSubRegions(struct __pyx_obj_3fa2_7fa2util_Region *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - __Pyx_RefNannySetupContext("buildSubRegions", 0); - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_void_to_None(__pyx_f_3fa2_7fa2util_6Region_buildSubRegions(__pyx_v_self, 1)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 176, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L0; - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("fa2.fa2util.Region.buildSubRegions", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "fa2/fa2util.py":236 - * subregion.buildSubRegions() - * - * def applyForce(self, n, theta, coefficient=0): # <<<<<<<<<<<<<< - * if len(self.nodes) < 2: - * linRepulsion(n, self.nodes[0], coefficient) - */ - -static void __pyx_f_3fa2_7fa2util_6Region_applyForce(struct __pyx_obj_3fa2_7fa2util_Region *__pyx_v_self, struct __pyx_obj_3fa2_7fa2util_Node *__pyx_v_n, double __pyx_v_theta, struct __pyx_opt_args_3fa2_7fa2util_6Region_applyForce *__pyx_optional_args) { - double __pyx_v_coefficient = ((double)0.0); - double __pyx_v_distance; - struct __pyx_obj_3fa2_7fa2util_Region *__pyx_v_subregion = 0; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - Py_ssize_t __pyx_t_2; - int __pyx_t_3; - struct __pyx_opt_args_3fa2_7fa2util_linRepulsion __pyx_t_4; - PyObject *__pyx_t_5 = NULL; - PyObject *__pyx_t_6 = NULL; - PyObject *__pyx_t_7 = NULL; - double __pyx_t_8; - struct __pyx_opt_args_3fa2_7fa2util_linRepulsion_region __pyx_t_9; - struct __pyx_opt_args_3fa2_7fa2util_6Region_applyForce __pyx_t_10; - __Pyx_RefNannySetupContext("applyForce", 0); - if (__pyx_optional_args) { - if (__pyx_optional_args->__pyx_n > 0) { - __pyx_v_coefficient = __pyx_optional_args->coefficient; - } - } - - /* "fa2/fa2util.py":237 - * - * def applyForce(self, n, theta, coefficient=0): - * if len(self.nodes) < 2: # <<<<<<<<<<<<<< - * linRepulsion(n, self.nodes[0], coefficient) - * else: - */ - __pyx_t_1 = __pyx_v_self->nodes; - __Pyx_INCREF(__pyx_t_1); - if (unlikely(__pyx_t_1 == Py_None)) { - PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); - __PYX_ERR(2, 237, __pyx_L1_error) - } - __pyx_t_2 = PyList_GET_SIZE(__pyx_t_1); if (unlikely(__pyx_t_2 == ((Py_ssize_t)-1))) __PYX_ERR(2, 237, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_3 = ((__pyx_t_2 < 2) != 0); - if (__pyx_t_3) { - - /* "fa2/fa2util.py":238 - * def applyForce(self, n, theta, coefficient=0): - * if len(self.nodes) < 2: - * linRepulsion(n, self.nodes[0], coefficient) # <<<<<<<<<<<<<< - * else: - * distance = sqrt((n.x - self.massCenterX) ** 2 + (n.y - self.massCenterY) ** 2) - */ - if (unlikely(__pyx_v_self->nodes == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); - __PYX_ERR(2, 238, __pyx_L1_error) - } - __pyx_t_1 = __Pyx_GetItemInt_List(__pyx_v_self->nodes, 0, long, 1, __Pyx_PyInt_From_long, 1, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 238, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_3fa2_7fa2util_Node))))) __PYX_ERR(2, 238, __pyx_L1_error) - __pyx_t_4.__pyx_n = 1; - __pyx_t_4.coefficient = __pyx_v_coefficient; - __pyx_f_3fa2_7fa2util_linRepulsion(__pyx_v_n, ((struct __pyx_obj_3fa2_7fa2util_Node *)__pyx_t_1), &__pyx_t_4); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "fa2/fa2util.py":237 - * - * def applyForce(self, n, theta, coefficient=0): - * if len(self.nodes) < 2: # <<<<<<<<<<<<<< - * linRepulsion(n, self.nodes[0], coefficient) - * else: - */ - goto __pyx_L3; - } - - /* "fa2/fa2util.py":240 - * linRepulsion(n, self.nodes[0], coefficient) - * else: - * distance = sqrt((n.x - self.massCenterX) ** 2 + (n.y - self.massCenterY) ** 2) # <<<<<<<<<<<<<< - * if distance * theta > self.size: - * linRepulsion_region(n, self, coefficient) - */ - /*else*/ { - __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_sqrt); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 240, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_6 = PyFloat_FromDouble((pow((__pyx_v_n->x - __pyx_v_self->massCenterX), 2.0) + pow((__pyx_v_n->y - __pyx_v_self->massCenterY), 2.0))); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 240, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(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_1 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_7, __pyx_t_6) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_6); - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 240, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_8 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_8 == (double)-1) && PyErr_Occurred())) __PYX_ERR(2, 240, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_distance = __pyx_t_8; - - /* "fa2/fa2util.py":241 - * else: - * distance = sqrt((n.x - self.massCenterX) ** 2 + (n.y - self.massCenterY) ** 2) - * if distance * theta > self.size: # <<<<<<<<<<<<<< - * linRepulsion_region(n, self, coefficient) - * else: - */ - __pyx_t_3 = (((__pyx_v_distance * __pyx_v_theta) > __pyx_v_self->size) != 0); - if (__pyx_t_3) { - - /* "fa2/fa2util.py":242 - * distance = sqrt((n.x - self.massCenterX) ** 2 + (n.y - self.massCenterY) ** 2) - * if distance * theta > self.size: - * linRepulsion_region(n, self, coefficient) # <<<<<<<<<<<<<< - * else: - * for subregion in self.subregions: - */ - __pyx_t_9.__pyx_n = 1; - __pyx_t_9.coefficient = __pyx_v_coefficient; - __pyx_f_3fa2_7fa2util_linRepulsion_region(__pyx_v_n, __pyx_v_self, &__pyx_t_9); - - /* "fa2/fa2util.py":241 - * else: - * distance = sqrt((n.x - self.massCenterX) ** 2 + (n.y - self.massCenterY) ** 2) - * if distance * theta > self.size: # <<<<<<<<<<<<<< - * linRepulsion_region(n, self, coefficient) - * else: - */ - goto __pyx_L4; - } - - /* "fa2/fa2util.py":244 - * linRepulsion_region(n, self, coefficient) - * else: - * for subregion in self.subregions: # <<<<<<<<<<<<<< - * subregion.applyForce(n, theta, coefficient) - * - */ - /*else*/ { - if (unlikely(__pyx_v_self->subregions == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); - __PYX_ERR(2, 244, __pyx_L1_error) - } - __pyx_t_1 = __pyx_v_self->subregions; __Pyx_INCREF(__pyx_t_1); __pyx_t_2 = 0; - for (;;) { - if (__pyx_t_2 >= PyList_GET_SIZE(__pyx_t_1)) break; - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_5 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_5); __pyx_t_2++; if (unlikely(0 < 0)) __PYX_ERR(2, 244, __pyx_L1_error) - #else - __pyx_t_5 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 244, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - #endif - if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_3fa2_7fa2util_Region))))) __PYX_ERR(2, 244, __pyx_L1_error) - __Pyx_XDECREF_SET(__pyx_v_subregion, ((struct __pyx_obj_3fa2_7fa2util_Region *)__pyx_t_5)); - __pyx_t_5 = 0; - - /* "fa2/fa2util.py":245 - * else: - * for subregion in self.subregions: - * subregion.applyForce(n, theta, coefficient) # <<<<<<<<<<<<<< - * - * def applyForceOnNodes(self, nodes, theta, coefficient=0): - */ - __pyx_t_10.__pyx_n = 1; - __pyx_t_10.coefficient = __pyx_v_coefficient; - ((struct __pyx_vtabstruct_3fa2_7fa2util_Region *)__pyx_v_subregion->__pyx_vtab)->applyForce(__pyx_v_subregion, __pyx_v_n, __pyx_v_theta, &__pyx_t_10); - - /* "fa2/fa2util.py":244 - * linRepulsion_region(n, self, coefficient) - * else: - * for subregion in self.subregions: # <<<<<<<<<<<<<< - * subregion.applyForce(n, theta, coefficient) - * - */ - } - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - } - __pyx_L4:; - } - __pyx_L3:; - - /* "fa2/fa2util.py":236 - * subregion.buildSubRegions() - * - * def applyForce(self, n, theta, coefficient=0): # <<<<<<<<<<<<<< - * if len(self.nodes) < 2: - * linRepulsion(n, self.nodes[0], coefficient) - */ - - /* function exit code */ - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_7); - __Pyx_WriteUnraisable("fa2.fa2util.Region.applyForce", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0); - __pyx_L0:; - __Pyx_XDECREF((PyObject *)__pyx_v_subregion); - __Pyx_RefNannyFinishContext(); -} - -/* "fa2/fa2util.py":247 - * subregion.applyForce(n, theta, coefficient) - * - * def applyForceOnNodes(self, nodes, theta, coefficient=0): # <<<<<<<<<<<<<< - * for n in nodes: - * self.applyForce(n, theta, coefficient) - */ - -static PyObject *__pyx_pw_3fa2_7fa2util_6Region_5applyForceOnNodes(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyObject *__pyx_f_3fa2_7fa2util_6Region_applyForceOnNodes(struct __pyx_obj_3fa2_7fa2util_Region *__pyx_v_self, PyObject *__pyx_v_nodes, double __pyx_v_theta, int __pyx_skip_dispatch, struct __pyx_opt_args_3fa2_7fa2util_6Region_applyForceOnNodes *__pyx_optional_args) { - double __pyx_v_coefficient = ((double)0.0); - struct __pyx_obj_3fa2_7fa2util_Node *__pyx_v_n = 0; - 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; - int __pyx_t_7; - PyObject *__pyx_t_8 = NULL; - Py_ssize_t __pyx_t_9; - struct __pyx_opt_args_3fa2_7fa2util_6Region_applyForce __pyx_t_10; - __Pyx_RefNannySetupContext("applyForceOnNodes", 0); - if (__pyx_optional_args) { - if (__pyx_optional_args->__pyx_n > 0) { - __pyx_v_coefficient = __pyx_optional_args->coefficient; - } - } - /* Check if called by wrapper */ - if (unlikely(__pyx_skip_dispatch)) ; - /* Check if overridden in Python */ - else if (unlikely((Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0) || (Py_TYPE(((PyObject *)__pyx_v_self))->tp_flags & (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)))) { - #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS - static PY_UINT64_T __pyx_tp_dict_version = __PYX_DICT_VERSION_INIT, __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT; - if (unlikely(!__Pyx_object_dict_version_matches(((PyObject *)__pyx_v_self), __pyx_tp_dict_version, __pyx_obj_dict_version))) { - PY_UINT64_T __pyx_type_dict_guard = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self)); - #endif - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_applyForceOnNodes); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 247, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)(void*)__pyx_pw_3fa2_7fa2util_6Region_5applyForceOnNodes)) { - __Pyx_XDECREF(__pyx_r); - __pyx_t_3 = PyFloat_FromDouble(__pyx_v_theta); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 247, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = PyFloat_FromDouble(__pyx_v_coefficient); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 247, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_INCREF(__pyx_t_1); - __pyx_t_5 = __pyx_t_1; __pyx_t_6 = NULL; - __pyx_t_7 = 0; - if (CYTHON_UNPACK_METHODS && unlikely(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_7 = 1; - } - } - #if CYTHON_FAST_PYCALL - if (PyFunction_Check(__pyx_t_5)) { - PyObject *__pyx_temp[4] = {__pyx_t_6, __pyx_v_nodes, __pyx_t_3, __pyx_t_4}; - __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_7, 3+__pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 247, __pyx_L1_error) - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - } else - #endif - #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) { - PyObject *__pyx_temp[4] = {__pyx_t_6, __pyx_v_nodes, __pyx_t_3, __pyx_t_4}; - __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_7, 3+__pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 247, __pyx_L1_error) - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - } else - #endif - { - __pyx_t_8 = PyTuple_New(3+__pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 247, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - if (__pyx_t_6) { - __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_6); __pyx_t_6 = NULL; - } - __Pyx_INCREF(__pyx_v_nodes); - __Pyx_GIVEREF(__pyx_v_nodes); - PyTuple_SET_ITEM(__pyx_t_8, 0+__pyx_t_7, __pyx_v_nodes); - __Pyx_GIVEREF(__pyx_t_3); - PyTuple_SET_ITEM(__pyx_t_8, 1+__pyx_t_7, __pyx_t_3); - __Pyx_GIVEREF(__pyx_t_4); - PyTuple_SET_ITEM(__pyx_t_8, 2+__pyx_t_7, __pyx_t_4); - __pyx_t_3 = 0; - __pyx_t_4 = 0; - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_8, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 247, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - } - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_r = __pyx_t_2; - __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - goto __pyx_L0; - } - #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS - __pyx_tp_dict_version = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self)); - __pyx_obj_dict_version = __Pyx_get_object_dict_version(((PyObject *)__pyx_v_self)); - if (unlikely(__pyx_type_dict_guard != __pyx_tp_dict_version)) { - __pyx_tp_dict_version = __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT; - } - #endif - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS - } - #endif - } - - /* "fa2/fa2util.py":248 - * - * def applyForceOnNodes(self, nodes, theta, coefficient=0): - * for n in nodes: # <<<<<<<<<<<<<< - * self.applyForce(n, theta, coefficient) - * - */ - if (unlikely(__pyx_v_nodes == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); - __PYX_ERR(2, 248, __pyx_L1_error) - } - __pyx_t_1 = __pyx_v_nodes; __Pyx_INCREF(__pyx_t_1); __pyx_t_9 = 0; - for (;;) { - if (__pyx_t_9 >= PyList_GET_SIZE(__pyx_t_1)) break; - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_2 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_9); __Pyx_INCREF(__pyx_t_2); __pyx_t_9++; if (unlikely(0 < 0)) __PYX_ERR(2, 248, __pyx_L1_error) - #else - __pyx_t_2 = PySequence_ITEM(__pyx_t_1, __pyx_t_9); __pyx_t_9++; if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 248, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - #endif - if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_3fa2_7fa2util_Node))))) __PYX_ERR(2, 248, __pyx_L1_error) - __Pyx_XDECREF_SET(__pyx_v_n, ((struct __pyx_obj_3fa2_7fa2util_Node *)__pyx_t_2)); - __pyx_t_2 = 0; - - /* "fa2/fa2util.py":249 - * def applyForceOnNodes(self, nodes, theta, coefficient=0): - * for n in nodes: - * self.applyForce(n, theta, coefficient) # <<<<<<<<<<<<<< - * - * - */ - __pyx_t_10.__pyx_n = 1; - __pyx_t_10.coefficient = __pyx_v_coefficient; - ((struct __pyx_vtabstruct_3fa2_7fa2util_Region *)__pyx_v_self->__pyx_vtab)->applyForce(__pyx_v_self, __pyx_v_n, __pyx_v_theta, &__pyx_t_10); - - /* "fa2/fa2util.py":248 - * - * def applyForceOnNodes(self, nodes, theta, coefficient=0): - * for n in nodes: # <<<<<<<<<<<<<< - * self.applyForce(n, theta, coefficient) - * - */ - } - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "fa2/fa2util.py":247 - * subregion.applyForce(n, theta, coefficient) - * - * def applyForceOnNodes(self, nodes, theta, coefficient=0): # <<<<<<<<<<<<<< - * for n in nodes: - * self.applyForce(n, theta, coefficient) - */ - - /* 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_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_8); - __Pyx_AddTraceback("fa2.fa2util.Region.applyForceOnNodes", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - __pyx_L0:; - __Pyx_XDECREF((PyObject *)__pyx_v_n); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* Python wrapper */ -static PyObject *__pyx_pw_3fa2_7fa2util_6Region_5applyForceOnNodes(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3fa2_7fa2util_6Region_5applyForceOnNodes = {"applyForceOnNodes", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_3fa2_7fa2util_6Region_5applyForceOnNodes, METH_VARARGS|METH_KEYWORDS, 0}; -static PyObject *__pyx_pw_3fa2_7fa2util_6Region_5applyForceOnNodes(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_nodes = 0; - double __pyx_v_theta; - double __pyx_v_coefficient; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("applyForceOnNodes (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_nodes,&__pyx_n_s_theta,&__pyx_n_s_coefficient,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_nodes)) != 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_theta)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("applyForceOnNodes", 0, 2, 3, 1); __PYX_ERR(2, 247, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 2: - if (kw_args > 0) { - PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_coefficient); - if (value) { values[2] = value; kw_args--; } - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "applyForceOnNodes") < 0)) __PYX_ERR(2, 247, __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_nodes = ((PyObject*)values[0]); - __pyx_v_theta = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_theta == (double)-1) && PyErr_Occurred())) __PYX_ERR(2, 247, __pyx_L3_error) - if (values[2]) { - __pyx_v_coefficient = __pyx_PyFloat_AsDouble(values[2]); if (unlikely((__pyx_v_coefficient == (double)-1) && PyErr_Occurred())) __PYX_ERR(2, 247, __pyx_L3_error) - } else { - __pyx_v_coefficient = ((double)0.0); - } - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("applyForceOnNodes", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(2, 247, __pyx_L3_error) - __pyx_L3_error:; - __Pyx_AddTraceback("fa2.fa2util.Region.applyForceOnNodes", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_nodes), (&PyList_Type), 1, "nodes", 1))) __PYX_ERR(2, 247, __pyx_L1_error) - __pyx_r = __pyx_pf_3fa2_7fa2util_6Region_4applyForceOnNodes(((struct __pyx_obj_3fa2_7fa2util_Region *)__pyx_v_self), __pyx_v_nodes, __pyx_v_theta, __pyx_v_coefficient); - - /* function exit code */ - goto __pyx_L0; - __pyx_L1_error:; - __pyx_r = NULL; - __pyx_L0:; - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3fa2_7fa2util_6Region_4applyForceOnNodes(struct __pyx_obj_3fa2_7fa2util_Region *__pyx_v_self, PyObject *__pyx_v_nodes, double __pyx_v_theta, double __pyx_v_coefficient) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - struct __pyx_opt_args_3fa2_7fa2util_6Region_applyForceOnNodes __pyx_t_2; - __Pyx_RefNannySetupContext("applyForceOnNodes", 0); - __Pyx_XDECREF(__pyx_r); - __pyx_t_2.__pyx_n = 1; - __pyx_t_2.coefficient = __pyx_v_coefficient; - __pyx_t_1 = __pyx_vtabptr_3fa2_7fa2util_Region->applyForceOnNodes(__pyx_v_self, __pyx_v_nodes, __pyx_v_theta, 1, &__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 247, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L0; - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("fa2.fa2util.Region.applyForceOnNodes", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "fa2/fa2util.pxd":77 - * - * cdef class Region: - * cdef public double mass # <<<<<<<<<<<<<< - * cdef public double massCenterX, massCenterY - * cdef public double size - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3fa2_7fa2util_6Region_4mass_1__get__(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_pw_3fa2_7fa2util_6Region_4mass_1__get__(PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); - __pyx_r = __pyx_pf_3fa2_7fa2util_6Region_4mass___get__(((struct __pyx_obj_3fa2_7fa2util_Region *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3fa2_7fa2util_6Region_4mass___get__(struct __pyx_obj_3fa2_7fa2util_Region *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - __Pyx_RefNannySetupContext("__get__", 0); - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = PyFloat_FromDouble(__pyx_v_self->mass); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 77, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L0; - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("fa2.fa2util.Region.mass.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* Python wrapper */ -static int __pyx_pw_3fa2_7fa2util_6Region_4mass_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/ -static int __pyx_pw_3fa2_7fa2util_6Region_4mass_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) { - int __pyx_r; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__set__ (wrapper)", 0); - __pyx_r = __pyx_pf_3fa2_7fa2util_6Region_4mass_2__set__(((struct __pyx_obj_3fa2_7fa2util_Region *)__pyx_v_self), ((PyObject *)__pyx_v_value)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static int __pyx_pf_3fa2_7fa2util_6Region_4mass_2__set__(struct __pyx_obj_3fa2_7fa2util_Region *__pyx_v_self, PyObject *__pyx_v_value) { - int __pyx_r; - __Pyx_RefNannyDeclarations - double __pyx_t_1; - __Pyx_RefNannySetupContext("__set__", 0); - __pyx_t_1 = __pyx_PyFloat_AsDouble(__pyx_v_value); if (unlikely((__pyx_t_1 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 77, __pyx_L1_error) - __pyx_v_self->mass = __pyx_t_1; - - /* function exit code */ - __pyx_r = 0; - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_AddTraceback("fa2.fa2util.Region.mass.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = -1; - __pyx_L0:; - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "fa2/fa2util.pxd":78 - * cdef class Region: - * cdef public double mass - * cdef public double massCenterX, massCenterY # <<<<<<<<<<<<<< - * cdef public double size - * cdef public list nodes - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3fa2_7fa2util_6Region_11massCenterX_1__get__(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_pw_3fa2_7fa2util_6Region_11massCenterX_1__get__(PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); - __pyx_r = __pyx_pf_3fa2_7fa2util_6Region_11massCenterX___get__(((struct __pyx_obj_3fa2_7fa2util_Region *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3fa2_7fa2util_6Region_11massCenterX___get__(struct __pyx_obj_3fa2_7fa2util_Region *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - __Pyx_RefNannySetupContext("__get__", 0); - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = PyFloat_FromDouble(__pyx_v_self->massCenterX); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 78, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L0; - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("fa2.fa2util.Region.massCenterX.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* Python wrapper */ -static int __pyx_pw_3fa2_7fa2util_6Region_11massCenterX_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/ -static int __pyx_pw_3fa2_7fa2util_6Region_11massCenterX_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) { - int __pyx_r; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__set__ (wrapper)", 0); - __pyx_r = __pyx_pf_3fa2_7fa2util_6Region_11massCenterX_2__set__(((struct __pyx_obj_3fa2_7fa2util_Region *)__pyx_v_self), ((PyObject *)__pyx_v_value)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static int __pyx_pf_3fa2_7fa2util_6Region_11massCenterX_2__set__(struct __pyx_obj_3fa2_7fa2util_Region *__pyx_v_self, PyObject *__pyx_v_value) { - int __pyx_r; - __Pyx_RefNannyDeclarations - double __pyx_t_1; - __Pyx_RefNannySetupContext("__set__", 0); - __pyx_t_1 = __pyx_PyFloat_AsDouble(__pyx_v_value); if (unlikely((__pyx_t_1 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 78, __pyx_L1_error) - __pyx_v_self->massCenterX = __pyx_t_1; - - /* function exit code */ - __pyx_r = 0; - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_AddTraceback("fa2.fa2util.Region.massCenterX.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = -1; - __pyx_L0:; - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* Python wrapper */ -static PyObject *__pyx_pw_3fa2_7fa2util_6Region_11massCenterY_1__get__(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_pw_3fa2_7fa2util_6Region_11massCenterY_1__get__(PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); - __pyx_r = __pyx_pf_3fa2_7fa2util_6Region_11massCenterY___get__(((struct __pyx_obj_3fa2_7fa2util_Region *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3fa2_7fa2util_6Region_11massCenterY___get__(struct __pyx_obj_3fa2_7fa2util_Region *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - __Pyx_RefNannySetupContext("__get__", 0); - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = PyFloat_FromDouble(__pyx_v_self->massCenterY); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 78, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L0; - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("fa2.fa2util.Region.massCenterY.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* Python wrapper */ -static int __pyx_pw_3fa2_7fa2util_6Region_11massCenterY_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/ -static int __pyx_pw_3fa2_7fa2util_6Region_11massCenterY_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) { - int __pyx_r; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__set__ (wrapper)", 0); - __pyx_r = __pyx_pf_3fa2_7fa2util_6Region_11massCenterY_2__set__(((struct __pyx_obj_3fa2_7fa2util_Region *)__pyx_v_self), ((PyObject *)__pyx_v_value)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static int __pyx_pf_3fa2_7fa2util_6Region_11massCenterY_2__set__(struct __pyx_obj_3fa2_7fa2util_Region *__pyx_v_self, PyObject *__pyx_v_value) { - int __pyx_r; - __Pyx_RefNannyDeclarations - double __pyx_t_1; - __Pyx_RefNannySetupContext("__set__", 0); - __pyx_t_1 = __pyx_PyFloat_AsDouble(__pyx_v_value); if (unlikely((__pyx_t_1 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 78, __pyx_L1_error) - __pyx_v_self->massCenterY = __pyx_t_1; - - /* function exit code */ - __pyx_r = 0; - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_AddTraceback("fa2.fa2util.Region.massCenterY.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = -1; - __pyx_L0:; - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "fa2/fa2util.pxd":79 - * cdef public double mass - * cdef public double massCenterX, massCenterY - * cdef public double size # <<<<<<<<<<<<<< - * cdef public list nodes - * cdef public list subregions - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3fa2_7fa2util_6Region_4size_1__get__(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_pw_3fa2_7fa2util_6Region_4size_1__get__(PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); - __pyx_r = __pyx_pf_3fa2_7fa2util_6Region_4size___get__(((struct __pyx_obj_3fa2_7fa2util_Region *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3fa2_7fa2util_6Region_4size___get__(struct __pyx_obj_3fa2_7fa2util_Region *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - __Pyx_RefNannySetupContext("__get__", 0); - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = PyFloat_FromDouble(__pyx_v_self->size); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 79, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L0; - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("fa2.fa2util.Region.size.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* Python wrapper */ -static int __pyx_pw_3fa2_7fa2util_6Region_4size_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/ -static int __pyx_pw_3fa2_7fa2util_6Region_4size_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) { - int __pyx_r; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__set__ (wrapper)", 0); - __pyx_r = __pyx_pf_3fa2_7fa2util_6Region_4size_2__set__(((struct __pyx_obj_3fa2_7fa2util_Region *)__pyx_v_self), ((PyObject *)__pyx_v_value)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static int __pyx_pf_3fa2_7fa2util_6Region_4size_2__set__(struct __pyx_obj_3fa2_7fa2util_Region *__pyx_v_self, PyObject *__pyx_v_value) { - int __pyx_r; - __Pyx_RefNannyDeclarations - double __pyx_t_1; - __Pyx_RefNannySetupContext("__set__", 0); - __pyx_t_1 = __pyx_PyFloat_AsDouble(__pyx_v_value); if (unlikely((__pyx_t_1 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 79, __pyx_L1_error) - __pyx_v_self->size = __pyx_t_1; - - /* function exit code */ - __pyx_r = 0; - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_AddTraceback("fa2.fa2util.Region.size.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = -1; - __pyx_L0:; - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "fa2/fa2util.pxd":80 - * cdef public double massCenterX, massCenterY - * cdef public double size - * cdef public list nodes # <<<<<<<<<<<<<< - * cdef public list subregions - * - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3fa2_7fa2util_6Region_5nodes_1__get__(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_pw_3fa2_7fa2util_6Region_5nodes_1__get__(PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); - __pyx_r = __pyx_pf_3fa2_7fa2util_6Region_5nodes___get__(((struct __pyx_obj_3fa2_7fa2util_Region *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3fa2_7fa2util_6Region_5nodes___get__(struct __pyx_obj_3fa2_7fa2util_Region *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__", 0); - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v_self->nodes); - __pyx_r = __pyx_v_self->nodes; - goto __pyx_L0; - - /* function exit code */ - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* Python wrapper */ -static int __pyx_pw_3fa2_7fa2util_6Region_5nodes_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/ -static int __pyx_pw_3fa2_7fa2util_6Region_5nodes_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) { - int __pyx_r; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__set__ (wrapper)", 0); - __pyx_r = __pyx_pf_3fa2_7fa2util_6Region_5nodes_2__set__(((struct __pyx_obj_3fa2_7fa2util_Region *)__pyx_v_self), ((PyObject *)__pyx_v_value)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static int __pyx_pf_3fa2_7fa2util_6Region_5nodes_2__set__(struct __pyx_obj_3fa2_7fa2util_Region *__pyx_v_self, PyObject *__pyx_v_value) { - int __pyx_r; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - __Pyx_RefNannySetupContext("__set__", 0); - if (!(likely(PyList_CheckExact(__pyx_v_value))||((__pyx_v_value) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "list", Py_TYPE(__pyx_v_value)->tp_name), 0))) __PYX_ERR(0, 80, __pyx_L1_error) - __pyx_t_1 = __pyx_v_value; - __Pyx_INCREF(__pyx_t_1); - __Pyx_GIVEREF(__pyx_t_1); - __Pyx_GOTREF(__pyx_v_self->nodes); - __Pyx_DECREF(__pyx_v_self->nodes); - __pyx_v_self->nodes = ((PyObject*)__pyx_t_1); - __pyx_t_1 = 0; - - /* function exit code */ - __pyx_r = 0; - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("fa2.fa2util.Region.nodes.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = -1; - __pyx_L0:; - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* Python wrapper */ -static int __pyx_pw_3fa2_7fa2util_6Region_5nodes_5__del__(PyObject *__pyx_v_self); /*proto*/ -static int __pyx_pw_3fa2_7fa2util_6Region_5nodes_5__del__(PyObject *__pyx_v_self) { - int __pyx_r; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__del__ (wrapper)", 0); - __pyx_r = __pyx_pf_3fa2_7fa2util_6Region_5nodes_4__del__(((struct __pyx_obj_3fa2_7fa2util_Region *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static int __pyx_pf_3fa2_7fa2util_6Region_5nodes_4__del__(struct __pyx_obj_3fa2_7fa2util_Region *__pyx_v_self) { - int __pyx_r; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__del__", 0); - __Pyx_INCREF(Py_None); - __Pyx_GIVEREF(Py_None); - __Pyx_GOTREF(__pyx_v_self->nodes); - __Pyx_DECREF(__pyx_v_self->nodes); - __pyx_v_self->nodes = ((PyObject*)Py_None); - - /* function exit code */ - __pyx_r = 0; - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "fa2/fa2util.pxd":81 - * cdef public double size - * cdef public list nodes - * cdef public list subregions # <<<<<<<<<<<<<< - * - * @cython.locals(massSumX = cython.double, - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3fa2_7fa2util_6Region_10subregions_1__get__(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_pw_3fa2_7fa2util_6Region_10subregions_1__get__(PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); - __pyx_r = __pyx_pf_3fa2_7fa2util_6Region_10subregions___get__(((struct __pyx_obj_3fa2_7fa2util_Region *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3fa2_7fa2util_6Region_10subregions___get__(struct __pyx_obj_3fa2_7fa2util_Region *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__", 0); - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v_self->subregions); - __pyx_r = __pyx_v_self->subregions; - goto __pyx_L0; - - /* function exit code */ - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* Python wrapper */ -static int __pyx_pw_3fa2_7fa2util_6Region_10subregions_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/ -static int __pyx_pw_3fa2_7fa2util_6Region_10subregions_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) { - int __pyx_r; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__set__ (wrapper)", 0); - __pyx_r = __pyx_pf_3fa2_7fa2util_6Region_10subregions_2__set__(((struct __pyx_obj_3fa2_7fa2util_Region *)__pyx_v_self), ((PyObject *)__pyx_v_value)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static int __pyx_pf_3fa2_7fa2util_6Region_10subregions_2__set__(struct __pyx_obj_3fa2_7fa2util_Region *__pyx_v_self, PyObject *__pyx_v_value) { - int __pyx_r; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - __Pyx_RefNannySetupContext("__set__", 0); - if (!(likely(PyList_CheckExact(__pyx_v_value))||((__pyx_v_value) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "list", Py_TYPE(__pyx_v_value)->tp_name), 0))) __PYX_ERR(0, 81, __pyx_L1_error) - __pyx_t_1 = __pyx_v_value; - __Pyx_INCREF(__pyx_t_1); - __Pyx_GIVEREF(__pyx_t_1); - __Pyx_GOTREF(__pyx_v_self->subregions); - __Pyx_DECREF(__pyx_v_self->subregions); - __pyx_v_self->subregions = ((PyObject*)__pyx_t_1); - __pyx_t_1 = 0; - - /* function exit code */ - __pyx_r = 0; - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("fa2.fa2util.Region.subregions.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = -1; - __pyx_L0:; - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* Python wrapper */ -static int __pyx_pw_3fa2_7fa2util_6Region_10subregions_5__del__(PyObject *__pyx_v_self); /*proto*/ -static int __pyx_pw_3fa2_7fa2util_6Region_10subregions_5__del__(PyObject *__pyx_v_self) { - int __pyx_r; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__del__ (wrapper)", 0); - __pyx_r = __pyx_pf_3fa2_7fa2util_6Region_10subregions_4__del__(((struct __pyx_obj_3fa2_7fa2util_Region *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static int __pyx_pf_3fa2_7fa2util_6Region_10subregions_4__del__(struct __pyx_obj_3fa2_7fa2util_Region *__pyx_v_self) { - int __pyx_r; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__del__", 0); - __Pyx_INCREF(Py_None); - __Pyx_GIVEREF(Py_None); - __Pyx_GOTREF(__pyx_v_self->subregions); - __Pyx_DECREF(__pyx_v_self->subregions); - __pyx_v_self->subregions = ((PyObject*)Py_None); - - /* function exit code */ - __pyx_r = 0; - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "(tree fragment)":1 - * def __reduce_cython__(self): # <<<<<<<<<<<<<< - * cdef tuple state - * cdef object _dict - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3fa2_7fa2util_6Region_7__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ -static PyMethodDef __pyx_mdef_3fa2_7fa2util_6Region_7__reduce_cython__ = {"__reduce_cython__", (PyCFunction)__pyx_pw_3fa2_7fa2util_6Region_7__reduce_cython__, METH_NOARGS, 0}; -static PyObject *__pyx_pw_3fa2_7fa2util_6Region_7__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_3fa2_7fa2util_6Region_6__reduce_cython__(((struct __pyx_obj_3fa2_7fa2util_Region *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3fa2_7fa2util_6Region_6__reduce_cython__(struct __pyx_obj_3fa2_7fa2util_Region *__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; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - int __pyx_t_6; - int __pyx_t_7; - int __pyx_t_8; - __Pyx_RefNannySetupContext("__reduce_cython__", 0); - - /* "(tree fragment)":5 - * cdef object _dict - * cdef bint use_setstate - * state = (self.mass, self.massCenterX, self.massCenterY, self.nodes, self.size, self.subregions) # <<<<<<<<<<<<<< - * _dict = getattr(self, '__dict__', None) - * if _dict is not None: - */ - __pyx_t_1 = PyFloat_FromDouble(__pyx_v_self->mass); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = PyFloat_FromDouble(__pyx_v_self->massCenterX); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = PyFloat_FromDouble(__pyx_v_self->massCenterY); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 5, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = PyFloat_FromDouble(__pyx_v_self->size); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = PyTuple_New(6); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 5, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_1); - __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_INCREF(__pyx_v_self->nodes); - __Pyx_GIVEREF(__pyx_v_self->nodes); - PyTuple_SET_ITEM(__pyx_t_5, 3, __pyx_v_self->nodes); - __Pyx_GIVEREF(__pyx_t_4); - PyTuple_SET_ITEM(__pyx_t_5, 4, __pyx_t_4); - __Pyx_INCREF(__pyx_v_self->subregions); - __Pyx_GIVEREF(__pyx_v_self->subregions); - PyTuple_SET_ITEM(__pyx_t_5, 5, __pyx_v_self->subregions); - __pyx_t_1 = 0; - __pyx_t_2 = 0; - __pyx_t_3 = 0; - __pyx_t_4 = 0; - __pyx_v_state = ((PyObject*)__pyx_t_5); - __pyx_t_5 = 0; - - /* "(tree fragment)":6 - * cdef bint use_setstate - * state = (self.mass, self.massCenterX, self.massCenterY, self.nodes, self.size, self.subregions) - * _dict = getattr(self, '__dict__', None) # <<<<<<<<<<<<<< - * if _dict is not None: - * state += (_dict,) - */ - __pyx_t_5 = __Pyx_GetAttr3(((PyObject *)__pyx_v_self), __pyx_n_s_dict, Py_None); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 6, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __pyx_v__dict = __pyx_t_5; - __pyx_t_5 = 0; - - /* "(tree fragment)":7 - * state = (self.mass, self.massCenterX, self.massCenterY, self.nodes, self.size, self.subregions) - * _dict = getattr(self, '__dict__', None) - * if _dict is not None: # <<<<<<<<<<<<<< - * state += (_dict,) - * use_setstate = True - */ - __pyx_t_6 = (__pyx_v__dict != Py_None); - __pyx_t_7 = (__pyx_t_6 != 0); - if (__pyx_t_7) { - - /* "(tree fragment)":8 - * _dict = getattr(self, '__dict__', None) - * if _dict is not None: - * state += (_dict,) # <<<<<<<<<<<<<< - * use_setstate = True - * else: - */ - __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 8, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_INCREF(__pyx_v__dict); - __Pyx_GIVEREF(__pyx_v__dict); - PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v__dict); - __pyx_t_4 = PyNumber_InPlaceAdd(__pyx_v_state, __pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 8, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 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.nodes is not None or self.subregions is not None - */ - __pyx_v_use_setstate = 1; - - /* "(tree fragment)":7 - * state = (self.mass, self.massCenterX, self.massCenterY, self.nodes, self.size, self.subregions) - * _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.nodes is not None or self.subregions is not None # <<<<<<<<<<<<<< - * if use_setstate: - * return __pyx_unpickle_Region, (type(self), 0x66ef4c7, None), state - */ - /*else*/ { - __pyx_t_6 = (__pyx_v_self->nodes != ((PyObject*)Py_None)); - __pyx_t_8 = (__pyx_t_6 != 0); - if (!__pyx_t_8) { - } else { - __pyx_t_7 = __pyx_t_8; - goto __pyx_L4_bool_binop_done; - } - __pyx_t_8 = (__pyx_v_self->subregions != ((PyObject*)Py_None)); - __pyx_t_6 = (__pyx_t_8 != 0); - __pyx_t_7 = __pyx_t_6; - __pyx_L4_bool_binop_done:; - __pyx_v_use_setstate = __pyx_t_7; - } - __pyx_L3:; - - /* "(tree fragment)":12 - * else: - * use_setstate = self.nodes is not None or self.subregions is not None - * if use_setstate: # <<<<<<<<<<<<<< - * return __pyx_unpickle_Region, (type(self), 0x66ef4c7, None), state - * else: - */ - __pyx_t_7 = (__pyx_v_use_setstate != 0); - if (__pyx_t_7) { - - /* "(tree fragment)":13 - * use_setstate = self.nodes is not None or self.subregions is not None - * if use_setstate: - * return __pyx_unpickle_Region, (type(self), 0x66ef4c7, None), state # <<<<<<<<<<<<<< - * else: - * return __pyx_unpickle_Region, (type(self), 0x66ef4c7, state) - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_pyx_unpickle_Region); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 13, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 13, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); - __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); - PyTuple_SET_ITEM(__pyx_t_5, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); - __Pyx_INCREF(__pyx_int_107934919); - __Pyx_GIVEREF(__pyx_int_107934919); - PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_int_107934919); - __Pyx_INCREF(Py_None); - __Pyx_GIVEREF(Py_None); - PyTuple_SET_ITEM(__pyx_t_5, 2, Py_None); - __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 13, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_GIVEREF(__pyx_t_4); - PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_4); - __Pyx_GIVEREF(__pyx_t_5); - PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_5); - __Pyx_INCREF(__pyx_v_state); - __Pyx_GIVEREF(__pyx_v_state); - PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_v_state); - __pyx_t_4 = 0; - __pyx_t_5 = 0; - __pyx_r = __pyx_t_3; - __pyx_t_3 = 0; - goto __pyx_L0; - - /* "(tree fragment)":12 - * else: - * use_setstate = self.nodes is not None or self.subregions is not None - * if use_setstate: # <<<<<<<<<<<<<< - * return __pyx_unpickle_Region, (type(self), 0x66ef4c7, None), state - * else: - */ - } - - /* "(tree fragment)":15 - * return __pyx_unpickle_Region, (type(self), 0x66ef4c7, None), state - * else: - * return __pyx_unpickle_Region, (type(self), 0x66ef4c7, state) # <<<<<<<<<<<<<< - * def __setstate_cython__(self, __pyx_state): - * __pyx_unpickle_Region__set_state(self, __pyx_state) - */ - /*else*/ { - __Pyx_XDECREF(__pyx_r); - __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_pyx_unpickle_Region); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 15, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 15, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); - __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); - PyTuple_SET_ITEM(__pyx_t_5, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); - __Pyx_INCREF(__pyx_int_107934919); - __Pyx_GIVEREF(__pyx_int_107934919); - PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_int_107934919); - __Pyx_INCREF(__pyx_v_state); - __Pyx_GIVEREF(__pyx_v_state); - PyTuple_SET_ITEM(__pyx_t_5, 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_3); - PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); - __Pyx_GIVEREF(__pyx_t_5); - PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_5); - __pyx_t_3 = 0; - __pyx_t_5 = 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_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_AddTraceback("fa2.fa2util.Region.__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_Region, (type(self), 0x66ef4c7, state) - * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< - * __pyx_unpickle_Region__set_state(self, __pyx_state) - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3fa2_7fa2util_6Region_9__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/ -static PyMethodDef __pyx_mdef_3fa2_7fa2util_6Region_9__setstate_cython__ = {"__setstate_cython__", (PyCFunction)__pyx_pw_3fa2_7fa2util_6Region_9__setstate_cython__, METH_O, 0}; -static PyObject *__pyx_pw_3fa2_7fa2util_6Region_9__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_3fa2_7fa2util_6Region_8__setstate_cython__(((struct __pyx_obj_3fa2_7fa2util_Region *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3fa2_7fa2util_6Region_8__setstate_cython__(struct __pyx_obj_3fa2_7fa2util_Region *__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_Region, (type(self), 0x66ef4c7, state) - * def __setstate_cython__(self, __pyx_state): - * __pyx_unpickle_Region__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_f_3fa2_7fa2util___pyx_unpickle_Region__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_Region, (type(self), 0x66ef4c7, state) - * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< - * __pyx_unpickle_Region__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("fa2.fa2util.Region.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "fa2/fa2util.py":253 - * - * # Adjust speed and apply forces step - * def adjustSpeedAndApplyForces(nodes, speed, speedEfficiency, jitterTolerance): # <<<<<<<<<<<<<< - * # Auto adjust speed. - * totalSwinging = 0.0 # How much irregular movement - */ - -static PyObject *__pyx_pw_3fa2_7fa2util_9adjustSpeedAndApplyForces(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyObject *__pyx_f_3fa2_7fa2util_adjustSpeedAndApplyForces(PyObject *__pyx_v_nodes, double __pyx_v_speed, double __pyx_v_speedEfficiency, double __pyx_v_jitterTolerance, CYTHON_UNUSED int __pyx_skip_dispatch) { - double __pyx_v_totalSwinging; - double __pyx_v_totalEffectiveTraction; - struct __pyx_obj_3fa2_7fa2util_Node *__pyx_v_n = 0; - double __pyx_v_swinging; - double __pyx_v_estimatedOptimalJitterTolerance; - double __pyx_v_minJT; - double __pyx_v_maxJT; - double __pyx_v_jt; - double __pyx_v_minSpeedEfficiency; - double __pyx_v_targetSpeed; - double __pyx_v_maxRise; - double __pyx_v_factor; - PyObject *__pyx_v_values = 0; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - Py_ssize_t __pyx_t_2; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - PyObject *__pyx_t_6 = NULL; - double __pyx_t_7; - PyObject *__pyx_t_8 = NULL; - PyObject *__pyx_t_9 = NULL; - Py_ssize_t __pyx_t_10; - Py_ssize_t __pyx_t_11; - double __pyx_t_12; - double __pyx_t_13; - int __pyx_t_14; - int __pyx_t_15; - __Pyx_RefNannySetupContext("adjustSpeedAndApplyForces", 0); - - /* "fa2/fa2util.py":255 - * def adjustSpeedAndApplyForces(nodes, speed, speedEfficiency, jitterTolerance): - * # Auto adjust speed. - * totalSwinging = 0.0 # How much irregular movement # <<<<<<<<<<<<<< - * totalEffectiveTraction = 0.0 # How much useful movement - * for n in nodes: - */ - __pyx_v_totalSwinging = 0.0; - - /* "fa2/fa2util.py":256 - * # Auto adjust speed. - * totalSwinging = 0.0 # How much irregular movement - * totalEffectiveTraction = 0.0 # How much useful movement # <<<<<<<<<<<<<< - * for n in nodes: - * swinging = sqrt((n.old_dx - n.dx) * (n.old_dx - n.dx) + (n.old_dy - n.dy) * (n.old_dy - n.dy)) - */ - __pyx_v_totalEffectiveTraction = 0.0; - - /* "fa2/fa2util.py":257 - * totalSwinging = 0.0 # How much irregular movement - * totalEffectiveTraction = 0.0 # How much useful movement - * for n in nodes: # <<<<<<<<<<<<<< - * swinging = sqrt((n.old_dx - n.dx) * (n.old_dx - n.dx) + (n.old_dy - n.dy) * (n.old_dy - n.dy)) - * totalSwinging += n.mass * swinging - */ - if (unlikely(__pyx_v_nodes == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); - __PYX_ERR(2, 257, __pyx_L1_error) - } - __pyx_t_1 = __pyx_v_nodes; __Pyx_INCREF(__pyx_t_1); __pyx_t_2 = 0; - for (;;) { - if (__pyx_t_2 >= PyList_GET_SIZE(__pyx_t_1)) break; - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_3 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_3); __pyx_t_2++; if (unlikely(0 < 0)) __PYX_ERR(2, 257, __pyx_L1_error) - #else - __pyx_t_3 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 257, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - #endif - if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_3fa2_7fa2util_Node))))) __PYX_ERR(2, 257, __pyx_L1_error) - __Pyx_XDECREF_SET(__pyx_v_n, ((struct __pyx_obj_3fa2_7fa2util_Node *)__pyx_t_3)); - __pyx_t_3 = 0; - - /* "fa2/fa2util.py":258 - * totalEffectiveTraction = 0.0 # How much useful movement - * for n in nodes: - * swinging = sqrt((n.old_dx - n.dx) * (n.old_dx - n.dx) + (n.old_dy - n.dy) * (n.old_dy - n.dy)) # <<<<<<<<<<<<<< - * totalSwinging += n.mass * swinging - * totalEffectiveTraction += .5 * n.mass * sqrt( - */ - __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_sqrt); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 258, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = PyFloat_FromDouble((((__pyx_v_n->old_dx - __pyx_v_n->dx) * (__pyx_v_n->old_dx - __pyx_v_n->dx)) + ((__pyx_v_n->old_dy - __pyx_v_n->dy) * (__pyx_v_n->old_dy - __pyx_v_n->dy)))); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 258, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_6 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_4); - if (likely(__pyx_t_6)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); - __Pyx_INCREF(__pyx_t_6); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_4, function); - } - } - __pyx_t_3 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_6, __pyx_t_5) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5); - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 258, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_7 = __pyx_PyFloat_AsDouble(__pyx_t_3); if (unlikely((__pyx_t_7 == (double)-1) && PyErr_Occurred())) __PYX_ERR(2, 258, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_v_swinging = __pyx_t_7; - - /* "fa2/fa2util.py":259 - * for n in nodes: - * swinging = sqrt((n.old_dx - n.dx) * (n.old_dx - n.dx) + (n.old_dy - n.dy) * (n.old_dy - n.dy)) - * totalSwinging += n.mass * swinging # <<<<<<<<<<<<<< - * totalEffectiveTraction += .5 * n.mass * sqrt( - * (n.old_dx + n.dx) * (n.old_dx + n.dx) + (n.old_dy + n.dy) * (n.old_dy + n.dy)) - */ - __pyx_v_totalSwinging = (__pyx_v_totalSwinging + (__pyx_v_n->mass * __pyx_v_swinging)); - - /* "fa2/fa2util.py":260 - * swinging = sqrt((n.old_dx - n.dx) * (n.old_dx - n.dx) + (n.old_dy - n.dy) * (n.old_dy - n.dy)) - * totalSwinging += n.mass * swinging - * totalEffectiveTraction += .5 * n.mass * sqrt( # <<<<<<<<<<<<<< - * (n.old_dx + n.dx) * (n.old_dx + n.dx) + (n.old_dy + n.dy) * (n.old_dy + n.dy)) - * - */ - __pyx_t_3 = PyFloat_FromDouble(__pyx_v_totalEffectiveTraction); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 260, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = PyFloat_FromDouble((.5 * __pyx_v_n->mass)); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 260, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_sqrt); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 260, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - - /* "fa2/fa2util.py":261 - * totalSwinging += n.mass * swinging - * totalEffectiveTraction += .5 * n.mass * sqrt( - * (n.old_dx + n.dx) * (n.old_dx + n.dx) + (n.old_dy + n.dy) * (n.old_dy + n.dy)) # <<<<<<<<<<<<<< - * - * # Optimize jitter tolerance. The 'right' jitter tolerance for - */ - __pyx_t_8 = PyFloat_FromDouble((((__pyx_v_n->old_dx + __pyx_v_n->dx) * (__pyx_v_n->old_dx + __pyx_v_n->dx)) + ((__pyx_v_n->old_dy + __pyx_v_n->dy) * (__pyx_v_n->old_dy + __pyx_v_n->dy)))); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 261, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_9 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_6))) { - __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_6); - if (likely(__pyx_t_9)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); - __Pyx_INCREF(__pyx_t_9); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_6, function); - } - } - __pyx_t_5 = (__pyx_t_9) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_9, __pyx_t_8) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_8); - __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 260, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - - /* "fa2/fa2util.py":260 - * swinging = sqrt((n.old_dx - n.dx) * (n.old_dx - n.dx) + (n.old_dy - n.dy) * (n.old_dy - n.dy)) - * totalSwinging += n.mass * swinging - * totalEffectiveTraction += .5 * n.mass * sqrt( # <<<<<<<<<<<<<< - * (n.old_dx + n.dx) * (n.old_dx + n.dx) + (n.old_dy + n.dy) * (n.old_dy + n.dy)) - * - */ - __pyx_t_6 = PyNumber_Multiply(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 260, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_5 = PyNumber_InPlaceAdd(__pyx_t_3, __pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 260, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_t_7 = __pyx_PyFloat_AsDouble(__pyx_t_5); if (unlikely((__pyx_t_7 == (double)-1) && PyErr_Occurred())) __PYX_ERR(2, 260, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_v_totalEffectiveTraction = __pyx_t_7; - - /* "fa2/fa2util.py":257 - * totalSwinging = 0.0 # How much irregular movement - * totalEffectiveTraction = 0.0 # How much useful movement - * for n in nodes: # <<<<<<<<<<<<<< - * swinging = sqrt((n.old_dx - n.dx) * (n.old_dx - n.dx) + (n.old_dy - n.dy) * (n.old_dy - n.dy)) - * totalSwinging += n.mass * swinging - */ - } - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "fa2/fa2util.py":266 - * # this network. Bigger networks need more tolerance. Denser - * # networks need less tolerance. Totally empiric. - * estimatedOptimalJitterTolerance = .05 * sqrt(len(nodes)) # <<<<<<<<<<<<<< - * minJT = sqrt(estimatedOptimalJitterTolerance) - * maxJT = 10 - */ - __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_sqrt); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 266, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - if (unlikely(__pyx_v_nodes == Py_None)) { - PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); - __PYX_ERR(2, 266, __pyx_L1_error) - } - __pyx_t_2 = PyList_GET_SIZE(__pyx_v_nodes); if (unlikely(__pyx_t_2 == ((Py_ssize_t)-1))) __PYX_ERR(2, 266, __pyx_L1_error) - __pyx_t_6 = PyInt_FromSsize_t(__pyx_t_2); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 266, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_3 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) { - __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_5); - if (likely(__pyx_t_3)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); - __Pyx_INCREF(__pyx_t_3); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_5, function); - } - } - __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_3, __pyx_t_6) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_6); - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 266, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_5 = PyNumber_Multiply(__pyx_float__05, __pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 266, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_7 = __pyx_PyFloat_AsDouble(__pyx_t_5); if (unlikely((__pyx_t_7 == (double)-1) && PyErr_Occurred())) __PYX_ERR(2, 266, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_v_estimatedOptimalJitterTolerance = __pyx_t_7; - - /* "fa2/fa2util.py":267 - * # networks need less tolerance. Totally empiric. - * estimatedOptimalJitterTolerance = .05 * sqrt(len(nodes)) - * minJT = sqrt(estimatedOptimalJitterTolerance) # <<<<<<<<<<<<<< - * maxJT = 10 - * jt = jitterTolerance * max(minJT, - */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_sqrt); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 267, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_6 = PyFloat_FromDouble(__pyx_v_estimatedOptimalJitterTolerance); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 267, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_3 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) { - __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1); - if (likely(__pyx_t_3)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); - __Pyx_INCREF(__pyx_t_3); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_1, function); - } - } - __pyx_t_5 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_3, __pyx_t_6) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_6); - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 267, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_7 = __pyx_PyFloat_AsDouble(__pyx_t_5); if (unlikely((__pyx_t_7 == (double)-1) && PyErr_Occurred())) __PYX_ERR(2, 267, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_v_minJT = __pyx_t_7; - - /* "fa2/fa2util.py":268 - * estimatedOptimalJitterTolerance = .05 * sqrt(len(nodes)) - * minJT = sqrt(estimatedOptimalJitterTolerance) - * maxJT = 10 # <<<<<<<<<<<<<< - * jt = jitterTolerance * max(minJT, - * min(maxJT, estimatedOptimalJitterTolerance * totalEffectiveTraction / ( - */ - __pyx_v_maxJT = 10.0; - - /* "fa2/fa2util.py":270 - * maxJT = 10 - * jt = jitterTolerance * max(minJT, - * min(maxJT, estimatedOptimalJitterTolerance * totalEffectiveTraction / ( # <<<<<<<<<<<<<< - * len(nodes) * len(nodes)))) - * - */ - __pyx_t_7 = (__pyx_v_estimatedOptimalJitterTolerance * __pyx_v_totalEffectiveTraction); - - /* "fa2/fa2util.py":271 - * jt = jitterTolerance * max(minJT, - * min(maxJT, estimatedOptimalJitterTolerance * totalEffectiveTraction / ( - * len(nodes) * len(nodes)))) # <<<<<<<<<<<<<< - * - * minSpeedEfficiency = 0.05 - */ - if (unlikely(__pyx_v_nodes == Py_None)) { - PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); - __PYX_ERR(2, 271, __pyx_L1_error) - } - __pyx_t_2 = PyList_GET_SIZE(__pyx_v_nodes); if (unlikely(__pyx_t_2 == ((Py_ssize_t)-1))) __PYX_ERR(2, 271, __pyx_L1_error) - if (unlikely(__pyx_v_nodes == Py_None)) { - PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); - __PYX_ERR(2, 271, __pyx_L1_error) - } - __pyx_t_10 = PyList_GET_SIZE(__pyx_v_nodes); if (unlikely(__pyx_t_10 == ((Py_ssize_t)-1))) __PYX_ERR(2, 271, __pyx_L1_error) - __pyx_t_11 = (__pyx_t_2 * __pyx_t_10); - - /* "fa2/fa2util.py":270 - * maxJT = 10 - * jt = jitterTolerance * max(minJT, - * min(maxJT, estimatedOptimalJitterTolerance * totalEffectiveTraction / ( # <<<<<<<<<<<<<< - * len(nodes) * len(nodes)))) - * - */ - if (unlikely(__pyx_t_11 == 0)) { - PyErr_SetString(PyExc_ZeroDivisionError, "float division"); - __PYX_ERR(2, 270, __pyx_L1_error) - } - __pyx_t_12 = (__pyx_t_7 / __pyx_t_11); - __pyx_t_7 = __pyx_v_maxJT; - if (((__pyx_t_12 < __pyx_t_7) != 0)) { - __pyx_t_13 = __pyx_t_12; - } else { - __pyx_t_13 = __pyx_t_7; - } - __pyx_t_12 = __pyx_t_13; - - /* "fa2/fa2util.py":269 - * minJT = sqrt(estimatedOptimalJitterTolerance) - * maxJT = 10 - * jt = jitterTolerance * max(minJT, # <<<<<<<<<<<<<< - * min(maxJT, estimatedOptimalJitterTolerance * totalEffectiveTraction / ( - * len(nodes) * len(nodes)))) - */ - __pyx_t_13 = __pyx_v_minJT; - - /* "fa2/fa2util.py":270 - * maxJT = 10 - * jt = jitterTolerance * max(minJT, - * min(maxJT, estimatedOptimalJitterTolerance * totalEffectiveTraction / ( # <<<<<<<<<<<<<< - * len(nodes) * len(nodes)))) - * - */ - if (((__pyx_t_12 > __pyx_t_13) != 0)) { - __pyx_t_7 = __pyx_t_12; - } else { - __pyx_t_7 = __pyx_t_13; - } - - /* "fa2/fa2util.py":269 - * minJT = sqrt(estimatedOptimalJitterTolerance) - * maxJT = 10 - * jt = jitterTolerance * max(minJT, # <<<<<<<<<<<<<< - * min(maxJT, estimatedOptimalJitterTolerance * totalEffectiveTraction / ( - * len(nodes) * len(nodes)))) - */ - __pyx_v_jt = (__pyx_v_jitterTolerance * __pyx_t_7); - - /* "fa2/fa2util.py":273 - * len(nodes) * len(nodes)))) - * - * minSpeedEfficiency = 0.05 # <<<<<<<<<<<<<< - * - * # Protective against erratic behavior - */ - __pyx_v_minSpeedEfficiency = 0.05; - - /* "fa2/fa2util.py":276 - * - * # Protective against erratic behavior - * if totalEffectiveTraction and totalSwinging / totalEffectiveTraction > 2.0: # <<<<<<<<<<<<<< - * if speedEfficiency > minSpeedEfficiency: - * speedEfficiency *= .5 - */ - __pyx_t_15 = (__pyx_v_totalEffectiveTraction != 0); - if (__pyx_t_15) { - } else { - __pyx_t_14 = __pyx_t_15; - goto __pyx_L6_bool_binop_done; - } - if (unlikely(__pyx_v_totalEffectiveTraction == 0)) { - PyErr_SetString(PyExc_ZeroDivisionError, "float division"); - __PYX_ERR(2, 276, __pyx_L1_error) - } - __pyx_t_15 = (((__pyx_v_totalSwinging / __pyx_v_totalEffectiveTraction) > 2.0) != 0); - __pyx_t_14 = __pyx_t_15; - __pyx_L6_bool_binop_done:; - if (__pyx_t_14) { - - /* "fa2/fa2util.py":277 - * # Protective against erratic behavior - * if totalEffectiveTraction and totalSwinging / totalEffectiveTraction > 2.0: - * if speedEfficiency > minSpeedEfficiency: # <<<<<<<<<<<<<< - * speedEfficiency *= .5 - * jt = max(jt, jitterTolerance) - */ - __pyx_t_14 = ((__pyx_v_speedEfficiency > __pyx_v_minSpeedEfficiency) != 0); - if (__pyx_t_14) { - - /* "fa2/fa2util.py":278 - * if totalEffectiveTraction and totalSwinging / totalEffectiveTraction > 2.0: - * if speedEfficiency > minSpeedEfficiency: - * speedEfficiency *= .5 # <<<<<<<<<<<<<< - * jt = max(jt, jitterTolerance) - * - */ - __pyx_v_speedEfficiency = (__pyx_v_speedEfficiency * .5); - - /* "fa2/fa2util.py":277 - * # Protective against erratic behavior - * if totalEffectiveTraction and totalSwinging / totalEffectiveTraction > 2.0: - * if speedEfficiency > minSpeedEfficiency: # <<<<<<<<<<<<<< - * speedEfficiency *= .5 - * jt = max(jt, jitterTolerance) - */ - } - - /* "fa2/fa2util.py":279 - * if speedEfficiency > minSpeedEfficiency: - * speedEfficiency *= .5 - * jt = max(jt, jitterTolerance) # <<<<<<<<<<<<<< - * - * if totalSwinging == 0: - */ - __pyx_t_7 = __pyx_v_jitterTolerance; - __pyx_t_12 = __pyx_v_jt; - if (((__pyx_t_7 > __pyx_t_12) != 0)) { - __pyx_t_13 = __pyx_t_7; - } else { - __pyx_t_13 = __pyx_t_12; - } - __pyx_v_jt = __pyx_t_13; - - /* "fa2/fa2util.py":276 - * - * # Protective against erratic behavior - * if totalEffectiveTraction and totalSwinging / totalEffectiveTraction > 2.0: # <<<<<<<<<<<<<< - * if speedEfficiency > minSpeedEfficiency: - * speedEfficiency *= .5 - */ - } - - /* "fa2/fa2util.py":281 - * jt = max(jt, jitterTolerance) - * - * if totalSwinging == 0: # <<<<<<<<<<<<<< - * targetSpeed = float('inf') - * else: - */ - __pyx_t_14 = ((__pyx_v_totalSwinging == 0.0) != 0); - if (__pyx_t_14) { - - /* "fa2/fa2util.py":282 - * - * if totalSwinging == 0: - * targetSpeed = float('inf') # <<<<<<<<<<<<<< - * else: - * targetSpeed = jt * speedEfficiency * totalEffectiveTraction / totalSwinging - */ - __pyx_t_13 = __Pyx_PyObject_AsDouble(__pyx_n_s_inf); if (unlikely(__pyx_t_13 == ((double)((double)-1)) && PyErr_Occurred())) __PYX_ERR(2, 282, __pyx_L1_error) - __pyx_v_targetSpeed = __pyx_t_13; - - /* "fa2/fa2util.py":281 - * jt = max(jt, jitterTolerance) - * - * if totalSwinging == 0: # <<<<<<<<<<<<<< - * targetSpeed = float('inf') - * else: - */ - goto __pyx_L9; - } - - /* "fa2/fa2util.py":284 - * targetSpeed = float('inf') - * else: - * targetSpeed = jt * speedEfficiency * totalEffectiveTraction / totalSwinging # <<<<<<<<<<<<<< - * - * if totalSwinging > jt * totalEffectiveTraction: - */ - /*else*/ { - __pyx_t_13 = ((__pyx_v_jt * __pyx_v_speedEfficiency) * __pyx_v_totalEffectiveTraction); - if (unlikely(__pyx_v_totalSwinging == 0)) { - PyErr_SetString(PyExc_ZeroDivisionError, "float division"); - __PYX_ERR(2, 284, __pyx_L1_error) - } - __pyx_v_targetSpeed = (__pyx_t_13 / __pyx_v_totalSwinging); - } - __pyx_L9:; - - /* "fa2/fa2util.py":286 - * targetSpeed = jt * speedEfficiency * totalEffectiveTraction / totalSwinging - * - * if totalSwinging > jt * totalEffectiveTraction: # <<<<<<<<<<<<<< - * if speedEfficiency > minSpeedEfficiency: - * speedEfficiency *= .7 - */ - __pyx_t_14 = ((__pyx_v_totalSwinging > (__pyx_v_jt * __pyx_v_totalEffectiveTraction)) != 0); - if (__pyx_t_14) { - - /* "fa2/fa2util.py":287 - * - * if totalSwinging > jt * totalEffectiveTraction: - * if speedEfficiency > minSpeedEfficiency: # <<<<<<<<<<<<<< - * speedEfficiency *= .7 - * elif speed < 1000: - */ - __pyx_t_14 = ((__pyx_v_speedEfficiency > __pyx_v_minSpeedEfficiency) != 0); - if (__pyx_t_14) { - - /* "fa2/fa2util.py":288 - * if totalSwinging > jt * totalEffectiveTraction: - * if speedEfficiency > minSpeedEfficiency: - * speedEfficiency *= .7 # <<<<<<<<<<<<<< - * elif speed < 1000: - * speedEfficiency *= 1.3 - */ - __pyx_v_speedEfficiency = (__pyx_v_speedEfficiency * .7); - - /* "fa2/fa2util.py":287 - * - * if totalSwinging > jt * totalEffectiveTraction: - * if speedEfficiency > minSpeedEfficiency: # <<<<<<<<<<<<<< - * speedEfficiency *= .7 - * elif speed < 1000: - */ - } - - /* "fa2/fa2util.py":286 - * targetSpeed = jt * speedEfficiency * totalEffectiveTraction / totalSwinging - * - * if totalSwinging > jt * totalEffectiveTraction: # <<<<<<<<<<<<<< - * if speedEfficiency > minSpeedEfficiency: - * speedEfficiency *= .7 - */ - goto __pyx_L10; - } - - /* "fa2/fa2util.py":289 - * if speedEfficiency > minSpeedEfficiency: - * speedEfficiency *= .7 - * elif speed < 1000: # <<<<<<<<<<<<<< - * speedEfficiency *= 1.3 - * - */ - __pyx_t_14 = ((__pyx_v_speed < 1000.0) != 0); - if (__pyx_t_14) { - - /* "fa2/fa2util.py":290 - * speedEfficiency *= .7 - * elif speed < 1000: - * speedEfficiency *= 1.3 # <<<<<<<<<<<<<< - * - * # But the speed shoudn't rise too much too quickly, since it would - */ - __pyx_v_speedEfficiency = (__pyx_v_speedEfficiency * 1.3); - - /* "fa2/fa2util.py":289 - * if speedEfficiency > minSpeedEfficiency: - * speedEfficiency *= .7 - * elif speed < 1000: # <<<<<<<<<<<<<< - * speedEfficiency *= 1.3 - * - */ - } - __pyx_L10:; - - /* "fa2/fa2util.py":294 - * # But the speed shoudn't rise too much too quickly, since it would - * # make the convergence drop dramatically. - * maxRise = .5 # <<<<<<<<<<<<<< - * speed = speed + min(targetSpeed - speed, maxRise * speed) - * - */ - __pyx_v_maxRise = .5; - - /* "fa2/fa2util.py":295 - * # make the convergence drop dramatically. - * maxRise = .5 - * speed = speed + min(targetSpeed - speed, maxRise * speed) # <<<<<<<<<<<<<< - * - * # Apply forces. - */ - __pyx_t_13 = (__pyx_v_maxRise * __pyx_v_speed); - __pyx_t_7 = (__pyx_v_targetSpeed - __pyx_v_speed); - if (((__pyx_t_13 < __pyx_t_7) != 0)) { - __pyx_t_12 = __pyx_t_13; - } else { - __pyx_t_12 = __pyx_t_7; - } - __pyx_v_speed = (__pyx_v_speed + __pyx_t_12); - - /* "fa2/fa2util.py":301 - * # Need to add a case if adjustSizes ("prevent overlap") is - * # implemented. - * for n in nodes: # <<<<<<<<<<<<<< - * swinging = n.mass * sqrt((n.old_dx - n.dx) * (n.old_dx - n.dx) + (n.old_dy - n.dy) * (n.old_dy - n.dy)) - * factor = speed / (1.0 + sqrt(speed * swinging)) - */ - if (unlikely(__pyx_v_nodes == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); - __PYX_ERR(2, 301, __pyx_L1_error) - } - __pyx_t_5 = __pyx_v_nodes; __Pyx_INCREF(__pyx_t_5); __pyx_t_11 = 0; - for (;;) { - if (__pyx_t_11 >= PyList_GET_SIZE(__pyx_t_5)) break; - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_1 = PyList_GET_ITEM(__pyx_t_5, __pyx_t_11); __Pyx_INCREF(__pyx_t_1); __pyx_t_11++; if (unlikely(0 < 0)) __PYX_ERR(2, 301, __pyx_L1_error) - #else - __pyx_t_1 = PySequence_ITEM(__pyx_t_5, __pyx_t_11); __pyx_t_11++; if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 301, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - #endif - if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_3fa2_7fa2util_Node))))) __PYX_ERR(2, 301, __pyx_L1_error) - __Pyx_XDECREF_SET(__pyx_v_n, ((struct __pyx_obj_3fa2_7fa2util_Node *)__pyx_t_1)); - __pyx_t_1 = 0; - - /* "fa2/fa2util.py":302 - * # implemented. - * for n in nodes: - * swinging = n.mass * sqrt((n.old_dx - n.dx) * (n.old_dx - n.dx) + (n.old_dy - n.dy) * (n.old_dy - n.dy)) # <<<<<<<<<<<<<< - * factor = speed / (1.0 + sqrt(speed * swinging)) - * n.x = n.x + (n.dx * factor) - */ - __pyx_t_1 = PyFloat_FromDouble(__pyx_v_n->mass); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 302, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_sqrt); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 302, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = PyFloat_FromDouble((((__pyx_v_n->old_dx - __pyx_v_n->dx) * (__pyx_v_n->old_dx - __pyx_v_n->dx)) + ((__pyx_v_n->old_dy - __pyx_v_n->dy) * (__pyx_v_n->old_dy - __pyx_v_n->dy)))); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 302, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_8 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) { - __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_3); - if (likely(__pyx_t_8)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); - __Pyx_INCREF(__pyx_t_8); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_3, function); - } - } - __pyx_t_6 = (__pyx_t_8) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_8, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); - __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 302, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = PyNumber_Multiply(__pyx_t_1, __pyx_t_6); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 302, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_t_12 = __pyx_PyFloat_AsDouble(__pyx_t_3); if (unlikely((__pyx_t_12 == (double)-1) && PyErr_Occurred())) __PYX_ERR(2, 302, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_v_swinging = __pyx_t_12; - - /* "fa2/fa2util.py":303 - * for n in nodes: - * swinging = n.mass * sqrt((n.old_dx - n.dx) * (n.old_dx - n.dx) + (n.old_dy - n.dy) * (n.old_dy - n.dy)) - * factor = speed / (1.0 + sqrt(speed * swinging)) # <<<<<<<<<<<<<< - * n.x = n.x + (n.dx * factor) - * n.y = n.y + (n.dy * factor) - */ - __pyx_t_3 = PyFloat_FromDouble(__pyx_v_speed); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 303, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_sqrt); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 303, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_4 = PyFloat_FromDouble((__pyx_v_speed * __pyx_v_swinging)); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 303, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_8 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) { - __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_1); - if (likely(__pyx_t_8)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); - __Pyx_INCREF(__pyx_t_8); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_1, function); - } - } - __pyx_t_6 = (__pyx_t_8) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_8, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_4); - __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 303, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyFloat_AddCObj(__pyx_float_1_0, __pyx_t_6, 1.0, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 303, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_t_6 = __Pyx_PyNumber_Divide(__pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 303, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_12 = __pyx_PyFloat_AsDouble(__pyx_t_6); if (unlikely((__pyx_t_12 == (double)-1) && PyErr_Occurred())) __PYX_ERR(2, 303, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_v_factor = __pyx_t_12; - - /* "fa2/fa2util.py":304 - * swinging = n.mass * sqrt((n.old_dx - n.dx) * (n.old_dx - n.dx) + (n.old_dy - n.dy) * (n.old_dy - n.dy)) - * factor = speed / (1.0 + sqrt(speed * swinging)) - * n.x = n.x + (n.dx * factor) # <<<<<<<<<<<<<< - * n.y = n.y + (n.dy * factor) - * - */ - __pyx_v_n->x = (__pyx_v_n->x + (__pyx_v_n->dx * __pyx_v_factor)); - - /* "fa2/fa2util.py":305 - * factor = speed / (1.0 + sqrt(speed * swinging)) - * n.x = n.x + (n.dx * factor) - * n.y = n.y + (n.dy * factor) # <<<<<<<<<<<<<< - * - * values = {} - */ - __pyx_v_n->y = (__pyx_v_n->y + (__pyx_v_n->dy * __pyx_v_factor)); - - /* "fa2/fa2util.py":301 - * # Need to add a case if adjustSizes ("prevent overlap") is - * # implemented. - * for n in nodes: # <<<<<<<<<<<<<< - * swinging = n.mass * sqrt((n.old_dx - n.dx) * (n.old_dx - n.dx) + (n.old_dy - n.dy) * (n.old_dy - n.dy)) - * factor = speed / (1.0 + sqrt(speed * swinging)) - */ - } - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - - /* "fa2/fa2util.py":307 - * n.y = n.y + (n.dy * factor) - * - * values = {} # <<<<<<<<<<<<<< - * values['speed'] = speed - * values['speedEfficiency'] = speedEfficiency - */ - __pyx_t_5 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 307, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __pyx_v_values = ((PyObject*)__pyx_t_5); - __pyx_t_5 = 0; - - /* "fa2/fa2util.py":308 - * - * values = {} - * values['speed'] = speed # <<<<<<<<<<<<<< - * values['speedEfficiency'] = speedEfficiency - * - */ - __pyx_t_5 = PyFloat_FromDouble(__pyx_v_speed); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 308, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - if (unlikely(PyDict_SetItem(__pyx_v_values, __pyx_n_s_speed, __pyx_t_5) < 0)) __PYX_ERR(2, 308, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - - /* "fa2/fa2util.py":309 - * values = {} - * values['speed'] = speed - * values['speedEfficiency'] = speedEfficiency # <<<<<<<<<<<<<< - * - * return values - */ - __pyx_t_5 = PyFloat_FromDouble(__pyx_v_speedEfficiency); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 309, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - if (unlikely(PyDict_SetItem(__pyx_v_values, __pyx_n_s_speedEfficiency, __pyx_t_5) < 0)) __PYX_ERR(2, 309, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - - /* "fa2/fa2util.py":311 - * values['speedEfficiency'] = speedEfficiency - * - * return values # <<<<<<<<<<<<<< - * - * - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v_values); - __pyx_r = __pyx_v_values; - goto __pyx_L0; - - /* "fa2/fa2util.py":253 - * - * # Adjust speed and apply forces step - * def adjustSpeedAndApplyForces(nodes, speed, speedEfficiency, jitterTolerance): # <<<<<<<<<<<<<< - * # Auto adjust speed. - * totalSwinging = 0.0 # How much irregular movement - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_8); - __Pyx_XDECREF(__pyx_t_9); - __Pyx_AddTraceback("fa2.fa2util.adjustSpeedAndApplyForces", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - __pyx_L0:; - __Pyx_XDECREF((PyObject *)__pyx_v_n); - __Pyx_XDECREF(__pyx_v_values); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* Python wrapper */ -static PyObject *__pyx_pw_3fa2_7fa2util_9adjustSpeedAndApplyForces(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3fa2_7fa2util_9adjustSpeedAndApplyForces = {"adjustSpeedAndApplyForces", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_3fa2_7fa2util_9adjustSpeedAndApplyForces, METH_VARARGS|METH_KEYWORDS, 0}; -static PyObject *__pyx_pw_3fa2_7fa2util_9adjustSpeedAndApplyForces(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_nodes = 0; - double __pyx_v_speed; - double __pyx_v_speedEfficiency; - double __pyx_v_jitterTolerance; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("adjustSpeedAndApplyForces (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_nodes,&__pyx_n_s_speed,&__pyx_n_s_speedEfficiency,&__pyx_n_s_jitterTolerance,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_nodes)) != 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_speed)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("adjustSpeedAndApplyForces", 1, 4, 4, 1); __PYX_ERR(2, 253, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 2: - if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_speedEfficiency)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("adjustSpeedAndApplyForces", 1, 4, 4, 2); __PYX_ERR(2, 253, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 3: - if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_jitterTolerance)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("adjustSpeedAndApplyForces", 1, 4, 4, 3); __PYX_ERR(2, 253, __pyx_L3_error) - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "adjustSpeedAndApplyForces") < 0)) __PYX_ERR(2, 253, __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_nodes = ((PyObject*)values[0]); - __pyx_v_speed = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_speed == (double)-1) && PyErr_Occurred())) __PYX_ERR(2, 253, __pyx_L3_error) - __pyx_v_speedEfficiency = __pyx_PyFloat_AsDouble(values[2]); if (unlikely((__pyx_v_speedEfficiency == (double)-1) && PyErr_Occurred())) __PYX_ERR(2, 253, __pyx_L3_error) - __pyx_v_jitterTolerance = __pyx_PyFloat_AsDouble(values[3]); if (unlikely((__pyx_v_jitterTolerance == (double)-1) && PyErr_Occurred())) __PYX_ERR(2, 253, __pyx_L3_error) - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("adjustSpeedAndApplyForces", 1, 4, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(2, 253, __pyx_L3_error) - __pyx_L3_error:; - __Pyx_AddTraceback("fa2.fa2util.adjustSpeedAndApplyForces", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_nodes), (&PyList_Type), 1, "nodes", 1))) __PYX_ERR(2, 253, __pyx_L1_error) - __pyx_r = __pyx_pf_3fa2_7fa2util_8adjustSpeedAndApplyForces(__pyx_self, __pyx_v_nodes, __pyx_v_speed, __pyx_v_speedEfficiency, __pyx_v_jitterTolerance); - - /* function exit code */ - goto __pyx_L0; - __pyx_L1_error:; - __pyx_r = NULL; - __pyx_L0:; - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3fa2_7fa2util_8adjustSpeedAndApplyForces(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_nodes, double __pyx_v_speed, double __pyx_v_speedEfficiency, double __pyx_v_jitterTolerance) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - __Pyx_RefNannySetupContext("adjustSpeedAndApplyForces", 0); - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __pyx_f_3fa2_7fa2util_adjustSpeedAndApplyForces(__pyx_v_nodes, __pyx_v_speed, __pyx_v_speedEfficiency, __pyx_v_jitterTolerance, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 253, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L0; - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("fa2.fa2util.adjustSpeedAndApplyForces", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "(tree fragment)":1 - * def __pyx_unpickle_Node(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<< - * cdef object __pyx_PickleError - * cdef object __pyx_result - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3fa2_7fa2util_11__pyx_unpickle_Node(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3fa2_7fa2util_11__pyx_unpickle_Node = {"__pyx_unpickle_Node", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_3fa2_7fa2util_11__pyx_unpickle_Node, METH_VARARGS|METH_KEYWORDS, 0}; -static PyObject *__pyx_pw_3fa2_7fa2util_11__pyx_unpickle_Node(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_Node (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_Node", 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_Node", 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_Node") < 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_Node", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 1, __pyx_L3_error) - __pyx_L3_error:; - __Pyx_AddTraceback("fa2.fa2util.__pyx_unpickle_Node", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3fa2_7fa2util_10__pyx_unpickle_Node(__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_3fa2_7fa2util_10__pyx_unpickle_Node(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_Node", 0); - - /* "(tree fragment)":4 - * cdef object __pyx_PickleError - * cdef object __pyx_result - * if __pyx_checksum != 0x2f233dd: # <<<<<<<<<<<<<< - * from pickle import PickleError as __pyx_PickleError - * raise __pyx_PickleError("Incompatible checksums (%s vs 0x2f233dd = (dx, dy, mass, old_dx, old_dy, x, y))" % __pyx_checksum) - */ - __pyx_t_1 = ((__pyx_v___pyx_checksum != 0x2f233dd) != 0); - if (__pyx_t_1) { - - /* "(tree fragment)":5 - * cdef object __pyx_result - * if __pyx_checksum != 0x2f233dd: - * from pickle import PickleError as __pyx_PickleError # <<<<<<<<<<<<<< - * raise __pyx_PickleError("Incompatible checksums (%s vs 0x2f233dd = (dx, dy, mass, old_dx, old_dy, x, y))" % __pyx_checksum) - * __pyx_result = Node.__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, -1); 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 != 0x2f233dd: - * from pickle import PickleError as __pyx_PickleError - * raise __pyx_PickleError("Incompatible checksums (%s vs 0x2f233dd = (dx, dy, mass, old_dx, old_dy, x, y))" % __pyx_checksum) # <<<<<<<<<<<<<< - * __pyx_result = Node.__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_0x2f, __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 != 0x2f233dd: # <<<<<<<<<<<<<< - * from pickle import PickleError as __pyx_PickleError - * raise __pyx_PickleError("Incompatible checksums (%s vs 0x2f233dd = (dx, dy, mass, old_dx, old_dy, x, y))" % __pyx_checksum) - */ - } - - /* "(tree fragment)":7 - * from pickle import PickleError as __pyx_PickleError - * raise __pyx_PickleError("Incompatible checksums (%s vs 0x2f233dd = (dx, dy, mass, old_dx, old_dy, x, y))" % __pyx_checksum) - * __pyx_result = Node.__new__(__pyx_type) # <<<<<<<<<<<<<< - * if __pyx_state is not None: - * __pyx_unpickle_Node__set_state( __pyx_result, __pyx_state) - */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_ptype_3fa2_7fa2util_Node), __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 0x2f233dd = (dx, dy, mass, old_dx, old_dy, x, y))" % __pyx_checksum) - * __pyx_result = Node.__new__(__pyx_type) - * if __pyx_state is not None: # <<<<<<<<<<<<<< - * __pyx_unpickle_Node__set_state( __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 = Node.__new__(__pyx_type) - * if __pyx_state is not None: - * __pyx_unpickle_Node__set_state( __pyx_result, __pyx_state) # <<<<<<<<<<<<<< - * return __pyx_result - * cdef __pyx_unpickle_Node__set_state(Node __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_f_3fa2_7fa2util___pyx_unpickle_Node__set_state(((struct __pyx_obj_3fa2_7fa2util_Node *)__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 0x2f233dd = (dx, dy, mass, old_dx, old_dy, x, y))" % __pyx_checksum) - * __pyx_result = Node.__new__(__pyx_type) - * if __pyx_state is not None: # <<<<<<<<<<<<<< - * __pyx_unpickle_Node__set_state( __pyx_result, __pyx_state) - * return __pyx_result - */ - } - - /* "(tree fragment)":10 - * if __pyx_state is not None: - * __pyx_unpickle_Node__set_state( __pyx_result, __pyx_state) - * return __pyx_result # <<<<<<<<<<<<<< - * cdef __pyx_unpickle_Node__set_state(Node __pyx_result, tuple __pyx_state): - * __pyx_result.dx = __pyx_state[0]; __pyx_result.dy = __pyx_state[1]; __pyx_result.mass = __pyx_state[2]; __pyx_result.old_dx = __pyx_state[3]; __pyx_result.old_dy = __pyx_state[4]; __pyx_result.x = __pyx_state[5]; __pyx_result.y = __pyx_state[6] - */ - __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_Node(__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("fa2.fa2util.__pyx_unpickle_Node", __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_Node__set_state( __pyx_result, __pyx_state) - * return __pyx_result - * cdef __pyx_unpickle_Node__set_state(Node __pyx_result, tuple __pyx_state): # <<<<<<<<<<<<<< - * __pyx_result.dx = __pyx_state[0]; __pyx_result.dy = __pyx_state[1]; __pyx_result.mass = __pyx_state[2]; __pyx_result.old_dx = __pyx_state[3]; __pyx_result.old_dy = __pyx_state[4]; __pyx_result.x = __pyx_state[5]; __pyx_result.y = __pyx_state[6] - * if len(__pyx_state) > 7 and hasattr(__pyx_result, '__dict__'): - */ - -static PyObject *__pyx_f_3fa2_7fa2util___pyx_unpickle_Node__set_state(struct __pyx_obj_3fa2_7fa2util_Node *__pyx_v___pyx_result, PyObject *__pyx_v___pyx_state) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - double __pyx_t_2; - int __pyx_t_3; - Py_ssize_t __pyx_t_4; - int __pyx_t_5; - int __pyx_t_6; - PyObject *__pyx_t_7 = NULL; - PyObject *__pyx_t_8 = NULL; - PyObject *__pyx_t_9 = NULL; - __Pyx_RefNannySetupContext("__pyx_unpickle_Node__set_state", 0); - - /* "(tree fragment)":12 - * return __pyx_result - * cdef __pyx_unpickle_Node__set_state(Node __pyx_result, tuple __pyx_state): - * __pyx_result.dx = __pyx_state[0]; __pyx_result.dy = __pyx_state[1]; __pyx_result.mass = __pyx_state[2]; __pyx_result.old_dx = __pyx_state[3]; __pyx_result.old_dy = __pyx_state[4]; __pyx_result.x = __pyx_state[5]; __pyx_result.y = __pyx_state[6] # <<<<<<<<<<<<<< - * if len(__pyx_state) > 7 and hasattr(__pyx_result, '__dict__'): - * __pyx_result.__dict__.update(__pyx_state[7]) - */ - 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_t_2 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_2 == (double)-1) && PyErr_Occurred())) __PYX_ERR(1, 12, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v___pyx_result->dx = __pyx_t_2; - 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, 1, 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_t_2 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_2 == (double)-1) && PyErr_Occurred())) __PYX_ERR(1, 12, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v___pyx_result->dy = __pyx_t_2; - 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, 2, 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_t_2 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_2 == (double)-1) && PyErr_Occurred())) __PYX_ERR(1, 12, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v___pyx_result->mass = __pyx_t_2; - 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, 3, 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_t_2 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_2 == (double)-1) && PyErr_Occurred())) __PYX_ERR(1, 12, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v___pyx_result->old_dx = __pyx_t_2; - 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, 4, 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_t_2 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_2 == (double)-1) && PyErr_Occurred())) __PYX_ERR(1, 12, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v___pyx_result->old_dy = __pyx_t_2; - 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, 5, 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_t_2 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_2 == (double)-1) && PyErr_Occurred())) __PYX_ERR(1, 12, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v___pyx_result->x = __pyx_t_2; - 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, 6, 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_t_2 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_2 == (double)-1) && PyErr_Occurred())) __PYX_ERR(1, 12, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v___pyx_result->y = __pyx_t_2; - - /* "(tree fragment)":13 - * cdef __pyx_unpickle_Node__set_state(Node __pyx_result, tuple __pyx_state): - * __pyx_result.dx = __pyx_state[0]; __pyx_result.dy = __pyx_state[1]; __pyx_result.mass = __pyx_state[2]; __pyx_result.old_dx = __pyx_state[3]; __pyx_result.old_dy = __pyx_state[4]; __pyx_result.x = __pyx_state[5]; __pyx_result.y = __pyx_state[6] - * if len(__pyx_state) > 7 and hasattr(__pyx_result, '__dict__'): # <<<<<<<<<<<<<< - * __pyx_result.__dict__.update(__pyx_state[7]) - */ - 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_4 = PyTuple_GET_SIZE(__pyx_v___pyx_state); if (unlikely(__pyx_t_4 == ((Py_ssize_t)-1))) __PYX_ERR(1, 13, __pyx_L1_error) - __pyx_t_5 = ((__pyx_t_4 > 7) != 0); - if (__pyx_t_5) { - } else { - __pyx_t_3 = __pyx_t_5; - goto __pyx_L4_bool_binop_done; - } - __pyx_t_5 = __Pyx_HasAttr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(1, 13, __pyx_L1_error) - __pyx_t_6 = (__pyx_t_5 != 0); - __pyx_t_3 = __pyx_t_6; - __pyx_L4_bool_binop_done:; - if (__pyx_t_3) { - - /* "(tree fragment)":14 - * __pyx_result.dx = __pyx_state[0]; __pyx_result.dy = __pyx_state[1]; __pyx_result.mass = __pyx_state[2]; __pyx_result.old_dx = __pyx_state[3]; __pyx_result.old_dy = __pyx_state[4]; __pyx_result.x = __pyx_state[5]; __pyx_result.y = __pyx_state[6] - * if len(__pyx_state) > 7 and hasattr(__pyx_result, '__dict__'): - * __pyx_result.__dict__.update(__pyx_state[7]) # <<<<<<<<<<<<<< - */ - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 14, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_update); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 14, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 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_7 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 7, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 14, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_9 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_8))) { - __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_8); - if (likely(__pyx_t_9)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8); - __Pyx_INCREF(__pyx_t_9); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_8, function); - } - } - __pyx_t_1 = (__pyx_t_9) ? __Pyx_PyObject_Call2Args(__pyx_t_8, __pyx_t_9, __pyx_t_7) : __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_t_7); - __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 14, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "(tree fragment)":13 - * cdef __pyx_unpickle_Node__set_state(Node __pyx_result, tuple __pyx_state): - * __pyx_result.dx = __pyx_state[0]; __pyx_result.dy = __pyx_state[1]; __pyx_result.mass = __pyx_state[2]; __pyx_result.old_dx = __pyx_state[3]; __pyx_result.old_dy = __pyx_state[4]; __pyx_result.x = __pyx_state[5]; __pyx_result.y = __pyx_state[6] - * if len(__pyx_state) > 7 and hasattr(__pyx_result, '__dict__'): # <<<<<<<<<<<<<< - * __pyx_result.__dict__.update(__pyx_state[7]) - */ - } - - /* "(tree fragment)":11 - * __pyx_unpickle_Node__set_state( __pyx_result, __pyx_state) - * return __pyx_result - * cdef __pyx_unpickle_Node__set_state(Node __pyx_result, tuple __pyx_state): # <<<<<<<<<<<<<< - * __pyx_result.dx = __pyx_state[0]; __pyx_result.dy = __pyx_state[1]; __pyx_result.mass = __pyx_state[2]; __pyx_result.old_dx = __pyx_state[3]; __pyx_result.old_dy = __pyx_state[4]; __pyx_result.x = __pyx_state[5]; __pyx_result.y = __pyx_state[6] - * if len(__pyx_state) > 7 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_7); - __Pyx_XDECREF(__pyx_t_8); - __Pyx_XDECREF(__pyx_t_9); - __Pyx_AddTraceback("fa2.fa2util.__pyx_unpickle_Node__set_state", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "(tree fragment)":1 - * def __pyx_unpickle_Edge(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<< - * cdef object __pyx_PickleError - * cdef object __pyx_result - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3fa2_7fa2util_13__pyx_unpickle_Edge(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3fa2_7fa2util_13__pyx_unpickle_Edge = {"__pyx_unpickle_Edge", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_3fa2_7fa2util_13__pyx_unpickle_Edge, METH_VARARGS|METH_KEYWORDS, 0}; -static PyObject *__pyx_pw_3fa2_7fa2util_13__pyx_unpickle_Edge(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_Edge (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_Edge", 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_Edge", 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_Edge") < 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_Edge", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 1, __pyx_L3_error) - __pyx_L3_error:; - __Pyx_AddTraceback("fa2.fa2util.__pyx_unpickle_Edge", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3fa2_7fa2util_12__pyx_unpickle_Edge(__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_3fa2_7fa2util_12__pyx_unpickle_Edge(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_Edge", 0); - - /* "(tree fragment)":4 - * cdef object __pyx_PickleError - * cdef object __pyx_result - * if __pyx_checksum != 0xb469544: # <<<<<<<<<<<<<< - * from pickle import PickleError as __pyx_PickleError - * raise __pyx_PickleError("Incompatible checksums (%s vs 0xb469544 = (node1, node2, weight))" % __pyx_checksum) - */ - __pyx_t_1 = ((__pyx_v___pyx_checksum != 0xb469544) != 0); - if (__pyx_t_1) { - - /* "(tree fragment)":5 - * cdef object __pyx_result - * if __pyx_checksum != 0xb469544: - * from pickle import PickleError as __pyx_PickleError # <<<<<<<<<<<<<< - * raise __pyx_PickleError("Incompatible checksums (%s vs 0xb469544 = (node1, node2, weight))" % __pyx_checksum) - * __pyx_result = Edge.__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, -1); 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 != 0xb469544: - * from pickle import PickleError as __pyx_PickleError - * raise __pyx_PickleError("Incompatible checksums (%s vs 0xb469544 = (node1, node2, weight))" % __pyx_checksum) # <<<<<<<<<<<<<< - * __pyx_result = Edge.__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_0xb4, __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 != 0xb469544: # <<<<<<<<<<<<<< - * from pickle import PickleError as __pyx_PickleError - * raise __pyx_PickleError("Incompatible checksums (%s vs 0xb469544 = (node1, node2, weight))" % __pyx_checksum) - */ - } - - /* "(tree fragment)":7 - * from pickle import PickleError as __pyx_PickleError - * raise __pyx_PickleError("Incompatible checksums (%s vs 0xb469544 = (node1, node2, weight))" % __pyx_checksum) - * __pyx_result = Edge.__new__(__pyx_type) # <<<<<<<<<<<<<< - * if __pyx_state is not None: - * __pyx_unpickle_Edge__set_state( __pyx_result, __pyx_state) - */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_ptype_3fa2_7fa2util_Edge), __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 0xb469544 = (node1, node2, weight))" % __pyx_checksum) - * __pyx_result = Edge.__new__(__pyx_type) - * if __pyx_state is not None: # <<<<<<<<<<<<<< - * __pyx_unpickle_Edge__set_state( __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 = Edge.__new__(__pyx_type) - * if __pyx_state is not None: - * __pyx_unpickle_Edge__set_state( __pyx_result, __pyx_state) # <<<<<<<<<<<<<< - * return __pyx_result - * cdef __pyx_unpickle_Edge__set_state(Edge __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_f_3fa2_7fa2util___pyx_unpickle_Edge__set_state(((struct __pyx_obj_3fa2_7fa2util_Edge *)__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 0xb469544 = (node1, node2, weight))" % __pyx_checksum) - * __pyx_result = Edge.__new__(__pyx_type) - * if __pyx_state is not None: # <<<<<<<<<<<<<< - * __pyx_unpickle_Edge__set_state( __pyx_result, __pyx_state) - * return __pyx_result - */ - } - - /* "(tree fragment)":10 - * if __pyx_state is not None: - * __pyx_unpickle_Edge__set_state( __pyx_result, __pyx_state) - * return __pyx_result # <<<<<<<<<<<<<< - * cdef __pyx_unpickle_Edge__set_state(Edge __pyx_result, tuple __pyx_state): - * __pyx_result.node1 = __pyx_state[0]; __pyx_result.node2 = __pyx_state[1]; __pyx_result.weight = __pyx_state[2] - */ - __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_Edge(__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("fa2.fa2util.__pyx_unpickle_Edge", __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_Edge__set_state( __pyx_result, __pyx_state) - * return __pyx_result - * cdef __pyx_unpickle_Edge__set_state(Edge __pyx_result, tuple __pyx_state): # <<<<<<<<<<<<<< - * __pyx_result.node1 = __pyx_state[0]; __pyx_result.node2 = __pyx_state[1]; __pyx_result.weight = __pyx_state[2] - * if len(__pyx_state) > 3 and hasattr(__pyx_result, '__dict__'): - */ - -static PyObject *__pyx_f_3fa2_7fa2util___pyx_unpickle_Edge__set_state(struct __pyx_obj_3fa2_7fa2util_Edge *__pyx_v___pyx_result, PyObject *__pyx_v___pyx_state) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_t_2; - double __pyx_t_3; - int __pyx_t_4; - Py_ssize_t __pyx_t_5; - int __pyx_t_6; - int __pyx_t_7; - PyObject *__pyx_t_8 = NULL; - PyObject *__pyx_t_9 = NULL; - PyObject *__pyx_t_10 = NULL; - __Pyx_RefNannySetupContext("__pyx_unpickle_Edge__set_state", 0); - - /* "(tree fragment)":12 - * return __pyx_result - * cdef __pyx_unpickle_Edge__set_state(Edge __pyx_result, tuple __pyx_state): - * __pyx_result.node1 = __pyx_state[0]; __pyx_result.node2 = __pyx_state[1]; __pyx_result.weight = __pyx_state[2] # <<<<<<<<<<<<<< - * if len(__pyx_state) > 3 and hasattr(__pyx_result, '__dict__'): - * __pyx_result.__dict__.update(__pyx_state[3]) - */ - 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_t_2 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 12, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v___pyx_result->node1 = __pyx_t_2; - 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, 1, 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_t_2 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 12, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v___pyx_result->node2 = __pyx_t_2; - 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, 2, 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_t_3 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_3 == (double)-1) && PyErr_Occurred())) __PYX_ERR(1, 12, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v___pyx_result->weight = __pyx_t_3; - - /* "(tree fragment)":13 - * cdef __pyx_unpickle_Edge__set_state(Edge __pyx_result, tuple __pyx_state): - * __pyx_result.node1 = __pyx_state[0]; __pyx_result.node2 = __pyx_state[1]; __pyx_result.weight = __pyx_state[2] - * if len(__pyx_state) > 3 and hasattr(__pyx_result, '__dict__'): # <<<<<<<<<<<<<< - * __pyx_result.__dict__.update(__pyx_state[3]) - */ - 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_5 = PyTuple_GET_SIZE(__pyx_v___pyx_state); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(1, 13, __pyx_L1_error) - __pyx_t_6 = ((__pyx_t_5 > 3) != 0); - if (__pyx_t_6) { - } else { - __pyx_t_4 = __pyx_t_6; - goto __pyx_L4_bool_binop_done; - } - __pyx_t_6 = __Pyx_HasAttr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(1, 13, __pyx_L1_error) - __pyx_t_7 = (__pyx_t_6 != 0); - __pyx_t_4 = __pyx_t_7; - __pyx_L4_bool_binop_done:; - if (__pyx_t_4) { - - /* "(tree fragment)":14 - * __pyx_result.node1 = __pyx_state[0]; __pyx_result.node2 = __pyx_state[1]; __pyx_result.weight = __pyx_state[2] - * if len(__pyx_state) > 3 and hasattr(__pyx_result, '__dict__'): - * __pyx_result.__dict__.update(__pyx_state[3]) # <<<<<<<<<<<<<< - */ - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 14, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_update); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 14, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 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_8 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 3, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 14, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_10 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_9))) { - __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_9); - if (likely(__pyx_t_10)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9); - __Pyx_INCREF(__pyx_t_10); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_9, function); - } - } - __pyx_t_1 = (__pyx_t_10) ? __Pyx_PyObject_Call2Args(__pyx_t_9, __pyx_t_10, __pyx_t_8) : __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_t_8); - __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 14, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "(tree fragment)":13 - * cdef __pyx_unpickle_Edge__set_state(Edge __pyx_result, tuple __pyx_state): - * __pyx_result.node1 = __pyx_state[0]; __pyx_result.node2 = __pyx_state[1]; __pyx_result.weight = __pyx_state[2] - * if len(__pyx_state) > 3 and hasattr(__pyx_result, '__dict__'): # <<<<<<<<<<<<<< - * __pyx_result.__dict__.update(__pyx_state[3]) - */ - } - - /* "(tree fragment)":11 - * __pyx_unpickle_Edge__set_state( __pyx_result, __pyx_state) - * return __pyx_result - * cdef __pyx_unpickle_Edge__set_state(Edge __pyx_result, tuple __pyx_state): # <<<<<<<<<<<<<< - * __pyx_result.node1 = __pyx_state[0]; __pyx_result.node2 = __pyx_state[1]; __pyx_result.weight = __pyx_state[2] - * if len(__pyx_state) > 3 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_8); - __Pyx_XDECREF(__pyx_t_9); - __Pyx_XDECREF(__pyx_t_10); - __Pyx_AddTraceback("fa2.fa2util.__pyx_unpickle_Edge__set_state", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "(tree fragment)":1 - * def __pyx_unpickle_Region(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<< - * cdef object __pyx_PickleError - * cdef object __pyx_result - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3fa2_7fa2util_15__pyx_unpickle_Region(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3fa2_7fa2util_15__pyx_unpickle_Region = {"__pyx_unpickle_Region", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_3fa2_7fa2util_15__pyx_unpickle_Region, METH_VARARGS|METH_KEYWORDS, 0}; -static PyObject *__pyx_pw_3fa2_7fa2util_15__pyx_unpickle_Region(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_Region (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_Region", 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_Region", 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_Region") < 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_Region", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 1, __pyx_L3_error) - __pyx_L3_error:; - __Pyx_AddTraceback("fa2.fa2util.__pyx_unpickle_Region", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3fa2_7fa2util_14__pyx_unpickle_Region(__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_3fa2_7fa2util_14__pyx_unpickle_Region(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_Region", 0); - - /* "(tree fragment)":4 - * cdef object __pyx_PickleError - * cdef object __pyx_result - * if __pyx_checksum != 0x66ef4c7: # <<<<<<<<<<<<<< - * from pickle import PickleError as __pyx_PickleError - * raise __pyx_PickleError("Incompatible checksums (%s vs 0x66ef4c7 = (mass, massCenterX, massCenterY, nodes, size, subregions))" % __pyx_checksum) - */ - __pyx_t_1 = ((__pyx_v___pyx_checksum != 0x66ef4c7) != 0); - if (__pyx_t_1) { - - /* "(tree fragment)":5 - * cdef object __pyx_result - * if __pyx_checksum != 0x66ef4c7: - * from pickle import PickleError as __pyx_PickleError # <<<<<<<<<<<<<< - * raise __pyx_PickleError("Incompatible checksums (%s vs 0x66ef4c7 = (mass, massCenterX, massCenterY, nodes, size, subregions))" % __pyx_checksum) - * __pyx_result = Region.__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, -1); 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 != 0x66ef4c7: - * from pickle import PickleError as __pyx_PickleError - * raise __pyx_PickleError("Incompatible checksums (%s vs 0x66ef4c7 = (mass, massCenterX, massCenterY, nodes, size, subregions))" % __pyx_checksum) # <<<<<<<<<<<<<< - * __pyx_result = Region.__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_0x66, __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 != 0x66ef4c7: # <<<<<<<<<<<<<< - * from pickle import PickleError as __pyx_PickleError - * raise __pyx_PickleError("Incompatible checksums (%s vs 0x66ef4c7 = (mass, massCenterX, massCenterY, nodes, size, subregions))" % __pyx_checksum) - */ - } - - /* "(tree fragment)":7 - * from pickle import PickleError as __pyx_PickleError - * raise __pyx_PickleError("Incompatible checksums (%s vs 0x66ef4c7 = (mass, massCenterX, massCenterY, nodes, size, subregions))" % __pyx_checksum) - * __pyx_result = Region.__new__(__pyx_type) # <<<<<<<<<<<<<< - * if __pyx_state is not None: - * __pyx_unpickle_Region__set_state( __pyx_result, __pyx_state) - */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_ptype_3fa2_7fa2util_Region), __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 0x66ef4c7 = (mass, massCenterX, massCenterY, nodes, size, subregions))" % __pyx_checksum) - * __pyx_result = Region.__new__(__pyx_type) - * if __pyx_state is not None: # <<<<<<<<<<<<<< - * __pyx_unpickle_Region__set_state( __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 = Region.__new__(__pyx_type) - * if __pyx_state is not None: - * __pyx_unpickle_Region__set_state( __pyx_result, __pyx_state) # <<<<<<<<<<<<<< - * return __pyx_result - * cdef __pyx_unpickle_Region__set_state(Region __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_f_3fa2_7fa2util___pyx_unpickle_Region__set_state(((struct __pyx_obj_3fa2_7fa2util_Region *)__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 0x66ef4c7 = (mass, massCenterX, massCenterY, nodes, size, subregions))" % __pyx_checksum) - * __pyx_result = Region.__new__(__pyx_type) - * if __pyx_state is not None: # <<<<<<<<<<<<<< - * __pyx_unpickle_Region__set_state( __pyx_result, __pyx_state) - * return __pyx_result - */ - } - - /* "(tree fragment)":10 - * if __pyx_state is not None: - * __pyx_unpickle_Region__set_state( __pyx_result, __pyx_state) - * return __pyx_result # <<<<<<<<<<<<<< - * cdef __pyx_unpickle_Region__set_state(Region __pyx_result, tuple __pyx_state): - * __pyx_result.mass = __pyx_state[0]; __pyx_result.massCenterX = __pyx_state[1]; __pyx_result.massCenterY = __pyx_state[2]; __pyx_result.nodes = __pyx_state[3]; __pyx_result.size = __pyx_state[4]; __pyx_result.subregions = __pyx_state[5] - */ - __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_Region(__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("fa2.fa2util.__pyx_unpickle_Region", __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_Region__set_state( __pyx_result, __pyx_state) - * return __pyx_result - * cdef __pyx_unpickle_Region__set_state(Region __pyx_result, tuple __pyx_state): # <<<<<<<<<<<<<< - * __pyx_result.mass = __pyx_state[0]; __pyx_result.massCenterX = __pyx_state[1]; __pyx_result.massCenterY = __pyx_state[2]; __pyx_result.nodes = __pyx_state[3]; __pyx_result.size = __pyx_state[4]; __pyx_result.subregions = __pyx_state[5] - * if len(__pyx_state) > 6 and hasattr(__pyx_result, '__dict__'): - */ - -static PyObject *__pyx_f_3fa2_7fa2util___pyx_unpickle_Region__set_state(struct __pyx_obj_3fa2_7fa2util_Region *__pyx_v___pyx_result, PyObject *__pyx_v___pyx_state) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - double __pyx_t_2; - int __pyx_t_3; - Py_ssize_t __pyx_t_4; - int __pyx_t_5; - int __pyx_t_6; - PyObject *__pyx_t_7 = NULL; - PyObject *__pyx_t_8 = NULL; - PyObject *__pyx_t_9 = NULL; - __Pyx_RefNannySetupContext("__pyx_unpickle_Region__set_state", 0); - - /* "(tree fragment)":12 - * return __pyx_result - * cdef __pyx_unpickle_Region__set_state(Region __pyx_result, tuple __pyx_state): - * __pyx_result.mass = __pyx_state[0]; __pyx_result.massCenterX = __pyx_state[1]; __pyx_result.massCenterY = __pyx_state[2]; __pyx_result.nodes = __pyx_state[3]; __pyx_result.size = __pyx_state[4]; __pyx_result.subregions = __pyx_state[5] # <<<<<<<<<<<<<< - * if len(__pyx_state) > 6 and hasattr(__pyx_result, '__dict__'): - * __pyx_result.__dict__.update(__pyx_state[6]) - */ - 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_t_2 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_2 == (double)-1) && PyErr_Occurred())) __PYX_ERR(1, 12, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v___pyx_result->mass = __pyx_t_2; - 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, 1, 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_t_2 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_2 == (double)-1) && PyErr_Occurred())) __PYX_ERR(1, 12, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v___pyx_result->massCenterX = __pyx_t_2; - 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, 2, 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_t_2 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_2 == (double)-1) && PyErr_Occurred())) __PYX_ERR(1, 12, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v___pyx_result->massCenterY = __pyx_t_2; - 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, 3, 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); - if (!(likely(PyList_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "list", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(1, 12, __pyx_L1_error) - __Pyx_GIVEREF(__pyx_t_1); - __Pyx_GOTREF(__pyx_v___pyx_result->nodes); - __Pyx_DECREF(__pyx_v___pyx_result->nodes); - __pyx_v___pyx_result->nodes = ((PyObject*)__pyx_t_1); - __pyx_t_1 = 0; - 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, 4, 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_t_2 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_2 == (double)-1) && PyErr_Occurred())) __PYX_ERR(1, 12, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v___pyx_result->size = __pyx_t_2; - 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, 5, 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); - if (!(likely(PyList_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "list", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(1, 12, __pyx_L1_error) - __Pyx_GIVEREF(__pyx_t_1); - __Pyx_GOTREF(__pyx_v___pyx_result->subregions); - __Pyx_DECREF(__pyx_v___pyx_result->subregions); - __pyx_v___pyx_result->subregions = ((PyObject*)__pyx_t_1); - __pyx_t_1 = 0; - - /* "(tree fragment)":13 - * cdef __pyx_unpickle_Region__set_state(Region __pyx_result, tuple __pyx_state): - * __pyx_result.mass = __pyx_state[0]; __pyx_result.massCenterX = __pyx_state[1]; __pyx_result.massCenterY = __pyx_state[2]; __pyx_result.nodes = __pyx_state[3]; __pyx_result.size = __pyx_state[4]; __pyx_result.subregions = __pyx_state[5] - * if len(__pyx_state) > 6 and hasattr(__pyx_result, '__dict__'): # <<<<<<<<<<<<<< - * __pyx_result.__dict__.update(__pyx_state[6]) - */ - 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_4 = PyTuple_GET_SIZE(__pyx_v___pyx_state); if (unlikely(__pyx_t_4 == ((Py_ssize_t)-1))) __PYX_ERR(1, 13, __pyx_L1_error) - __pyx_t_5 = ((__pyx_t_4 > 6) != 0); - if (__pyx_t_5) { - } else { - __pyx_t_3 = __pyx_t_5; - goto __pyx_L4_bool_binop_done; - } - __pyx_t_5 = __Pyx_HasAttr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(1, 13, __pyx_L1_error) - __pyx_t_6 = (__pyx_t_5 != 0); - __pyx_t_3 = __pyx_t_6; - __pyx_L4_bool_binop_done:; - if (__pyx_t_3) { - - /* "(tree fragment)":14 - * __pyx_result.mass = __pyx_state[0]; __pyx_result.massCenterX = __pyx_state[1]; __pyx_result.massCenterY = __pyx_state[2]; __pyx_result.nodes = __pyx_state[3]; __pyx_result.size = __pyx_state[4]; __pyx_result.subregions = __pyx_state[5] - * if len(__pyx_state) > 6 and hasattr(__pyx_result, '__dict__'): - * __pyx_result.__dict__.update(__pyx_state[6]) # <<<<<<<<<<<<<< - */ - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 14, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_update); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 14, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 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_7 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 6, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 14, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_9 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_8))) { - __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_8); - if (likely(__pyx_t_9)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8); - __Pyx_INCREF(__pyx_t_9); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_8, function); - } - } - __pyx_t_1 = (__pyx_t_9) ? __Pyx_PyObject_Call2Args(__pyx_t_8, __pyx_t_9, __pyx_t_7) : __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_t_7); - __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 14, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "(tree fragment)":13 - * cdef __pyx_unpickle_Region__set_state(Region __pyx_result, tuple __pyx_state): - * __pyx_result.mass = __pyx_state[0]; __pyx_result.massCenterX = __pyx_state[1]; __pyx_result.massCenterY = __pyx_state[2]; __pyx_result.nodes = __pyx_state[3]; __pyx_result.size = __pyx_state[4]; __pyx_result.subregions = __pyx_state[5] - * if len(__pyx_state) > 6 and hasattr(__pyx_result, '__dict__'): # <<<<<<<<<<<<<< - * __pyx_result.__dict__.update(__pyx_state[6]) - */ - } - - /* "(tree fragment)":11 - * __pyx_unpickle_Region__set_state( __pyx_result, __pyx_state) - * return __pyx_result - * cdef __pyx_unpickle_Region__set_state(Region __pyx_result, tuple __pyx_state): # <<<<<<<<<<<<<< - * __pyx_result.mass = __pyx_state[0]; __pyx_result.massCenterX = __pyx_state[1]; __pyx_result.massCenterY = __pyx_state[2]; __pyx_result.nodes = __pyx_state[3]; __pyx_result.size = __pyx_state[4]; __pyx_result.subregions = __pyx_state[5] - * if len(__pyx_state) > 6 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_7); - __Pyx_XDECREF(__pyx_t_8); - __Pyx_XDECREF(__pyx_t_9); - __Pyx_AddTraceback("fa2.fa2util.__pyx_unpickle_Region__set_state", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_tp_new_3fa2_7fa2util_Node(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { - 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; - return o; -} - -static void __pyx_tp_dealloc_3fa2_7fa2util_Node(PyObject *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 - (*Py_TYPE(o)->tp_free)(o); -} - -static PyObject *__pyx_getprop_3fa2_7fa2util_4Node_mass(PyObject *o, CYTHON_UNUSED void *x) { - return __pyx_pw_3fa2_7fa2util_4Node_4mass_1__get__(o); -} - -static int __pyx_setprop_3fa2_7fa2util_4Node_mass(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) { - if (v) { - return __pyx_pw_3fa2_7fa2util_4Node_4mass_3__set__(o, v); - } - else { - PyErr_SetString(PyExc_NotImplementedError, "__del__"); - return -1; - } -} - -static PyObject *__pyx_getprop_3fa2_7fa2util_4Node_old_dx(PyObject *o, CYTHON_UNUSED void *x) { - return __pyx_pw_3fa2_7fa2util_4Node_6old_dx_1__get__(o); -} - -static int __pyx_setprop_3fa2_7fa2util_4Node_old_dx(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) { - if (v) { - return __pyx_pw_3fa2_7fa2util_4Node_6old_dx_3__set__(o, v); - } - else { - PyErr_SetString(PyExc_NotImplementedError, "__del__"); - return -1; - } -} - -static PyObject *__pyx_getprop_3fa2_7fa2util_4Node_old_dy(PyObject *o, CYTHON_UNUSED void *x) { - return __pyx_pw_3fa2_7fa2util_4Node_6old_dy_1__get__(o); -} - -static int __pyx_setprop_3fa2_7fa2util_4Node_old_dy(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) { - if (v) { - return __pyx_pw_3fa2_7fa2util_4Node_6old_dy_3__set__(o, v); - } - else { - PyErr_SetString(PyExc_NotImplementedError, "__del__"); - return -1; - } -} - -static PyObject *__pyx_getprop_3fa2_7fa2util_4Node_dx(PyObject *o, CYTHON_UNUSED void *x) { - return __pyx_pw_3fa2_7fa2util_4Node_2dx_1__get__(o); -} - -static int __pyx_setprop_3fa2_7fa2util_4Node_dx(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) { - if (v) { - return __pyx_pw_3fa2_7fa2util_4Node_2dx_3__set__(o, v); - } - else { - PyErr_SetString(PyExc_NotImplementedError, "__del__"); - return -1; - } -} - -static PyObject *__pyx_getprop_3fa2_7fa2util_4Node_dy(PyObject *o, CYTHON_UNUSED void *x) { - return __pyx_pw_3fa2_7fa2util_4Node_2dy_1__get__(o); -} - -static int __pyx_setprop_3fa2_7fa2util_4Node_dy(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) { - if (v) { - return __pyx_pw_3fa2_7fa2util_4Node_2dy_3__set__(o, v); - } - else { - PyErr_SetString(PyExc_NotImplementedError, "__del__"); - return -1; - } -} - -static PyObject *__pyx_getprop_3fa2_7fa2util_4Node_x(PyObject *o, CYTHON_UNUSED void *x) { - return __pyx_pw_3fa2_7fa2util_4Node_1x_1__get__(o); -} - -static int __pyx_setprop_3fa2_7fa2util_4Node_x(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) { - if (v) { - return __pyx_pw_3fa2_7fa2util_4Node_1x_3__set__(o, v); - } - else { - PyErr_SetString(PyExc_NotImplementedError, "__del__"); - return -1; - } -} - -static PyObject *__pyx_getprop_3fa2_7fa2util_4Node_y(PyObject *o, CYTHON_UNUSED void *x) { - return __pyx_pw_3fa2_7fa2util_4Node_1y_1__get__(o); -} - -static int __pyx_setprop_3fa2_7fa2util_4Node_y(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) { - if (v) { - return __pyx_pw_3fa2_7fa2util_4Node_1y_3__set__(o, v); - } - else { - PyErr_SetString(PyExc_NotImplementedError, "__del__"); - return -1; - } -} - -static PyMethodDef __pyx_methods_3fa2_7fa2util_Node[] = { - {"__reduce_cython__", (PyCFunction)__pyx_pw_3fa2_7fa2util_4Node_3__reduce_cython__, METH_NOARGS, 0}, - {"__setstate_cython__", (PyCFunction)__pyx_pw_3fa2_7fa2util_4Node_5__setstate_cython__, METH_O, 0}, - {0, 0, 0, 0} -}; - -static struct PyGetSetDef __pyx_getsets_3fa2_7fa2util_Node[] = { - {(char *)"mass", __pyx_getprop_3fa2_7fa2util_4Node_mass, __pyx_setprop_3fa2_7fa2util_4Node_mass, (char *)0, 0}, - {(char *)"old_dx", __pyx_getprop_3fa2_7fa2util_4Node_old_dx, __pyx_setprop_3fa2_7fa2util_4Node_old_dx, (char *)0, 0}, - {(char *)"old_dy", __pyx_getprop_3fa2_7fa2util_4Node_old_dy, __pyx_setprop_3fa2_7fa2util_4Node_old_dy, (char *)0, 0}, - {(char *)"dx", __pyx_getprop_3fa2_7fa2util_4Node_dx, __pyx_setprop_3fa2_7fa2util_4Node_dx, (char *)0, 0}, - {(char *)"dy", __pyx_getprop_3fa2_7fa2util_4Node_dy, __pyx_setprop_3fa2_7fa2util_4Node_dy, (char *)0, 0}, - {(char *)"x", __pyx_getprop_3fa2_7fa2util_4Node_x, __pyx_setprop_3fa2_7fa2util_4Node_x, (char *)0, 0}, - {(char *)"y", __pyx_getprop_3fa2_7fa2util_4Node_y, __pyx_setprop_3fa2_7fa2util_4Node_y, (char *)0, 0}, - {0, 0, 0, 0, 0} -}; - -static PyTypeObject __pyx_type_3fa2_7fa2util_Node = { - PyVarObject_HEAD_INIT(0, 0) - "fa2.fa2util.Node", /*tp_name*/ - sizeof(struct __pyx_obj_3fa2_7fa2util_Node), /*tp_basicsize*/ - 0, /*tp_itemsize*/ - __pyx_tp_dealloc_3fa2_7fa2util_Node, /*tp_dealloc*/ - #if PY_VERSION_HEX < 0x030800b4 - 0, /*tp_print*/ - #endif - #if PY_VERSION_HEX >= 0x030800b4 - 0, /*tp_vectorcall_offset*/ - #endif - 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*/ - 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, /*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_3fa2_7fa2util_Node, /*tp_methods*/ - 0, /*tp_members*/ - __pyx_getsets_3fa2_7fa2util_Node, /*tp_getset*/ - 0, /*tp_base*/ - 0, /*tp_dict*/ - 0, /*tp_descr_get*/ - 0, /*tp_descr_set*/ - 0, /*tp_dictoffset*/ - __pyx_pw_3fa2_7fa2util_4Node_1__init__, /*tp_init*/ - 0, /*tp_alloc*/ - __pyx_tp_new_3fa2_7fa2util_Node, /*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 - #if PY_VERSION_HEX >= 0x030800b1 - 0, /*tp_vectorcall*/ - #endif - #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000 - 0, /*tp_print*/ - #endif -}; - -static PyObject *__pyx_tp_new_3fa2_7fa2util_Edge(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { - 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; - return o; -} - -static void __pyx_tp_dealloc_3fa2_7fa2util_Edge(PyObject *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 - (*Py_TYPE(o)->tp_free)(o); -} - -static PyObject *__pyx_getprop_3fa2_7fa2util_4Edge_node1(PyObject *o, CYTHON_UNUSED void *x) { - return __pyx_pw_3fa2_7fa2util_4Edge_5node1_1__get__(o); -} - -static int __pyx_setprop_3fa2_7fa2util_4Edge_node1(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) { - if (v) { - return __pyx_pw_3fa2_7fa2util_4Edge_5node1_3__set__(o, v); - } - else { - PyErr_SetString(PyExc_NotImplementedError, "__del__"); - return -1; - } -} - -static PyObject *__pyx_getprop_3fa2_7fa2util_4Edge_node2(PyObject *o, CYTHON_UNUSED void *x) { - return __pyx_pw_3fa2_7fa2util_4Edge_5node2_1__get__(o); -} - -static int __pyx_setprop_3fa2_7fa2util_4Edge_node2(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) { - if (v) { - return __pyx_pw_3fa2_7fa2util_4Edge_5node2_3__set__(o, v); - } - else { - PyErr_SetString(PyExc_NotImplementedError, "__del__"); - return -1; - } -} - -static PyObject *__pyx_getprop_3fa2_7fa2util_4Edge_weight(PyObject *o, CYTHON_UNUSED void *x) { - return __pyx_pw_3fa2_7fa2util_4Edge_6weight_1__get__(o); -} - -static int __pyx_setprop_3fa2_7fa2util_4Edge_weight(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) { - if (v) { - return __pyx_pw_3fa2_7fa2util_4Edge_6weight_3__set__(o, v); - } - else { - PyErr_SetString(PyExc_NotImplementedError, "__del__"); - return -1; - } -} - -static PyMethodDef __pyx_methods_3fa2_7fa2util_Edge[] = { - {"__reduce_cython__", (PyCFunction)__pyx_pw_3fa2_7fa2util_4Edge_3__reduce_cython__, METH_NOARGS, 0}, - {"__setstate_cython__", (PyCFunction)__pyx_pw_3fa2_7fa2util_4Edge_5__setstate_cython__, METH_O, 0}, - {0, 0, 0, 0} -}; - -static struct PyGetSetDef __pyx_getsets_3fa2_7fa2util_Edge[] = { - {(char *)"node1", __pyx_getprop_3fa2_7fa2util_4Edge_node1, __pyx_setprop_3fa2_7fa2util_4Edge_node1, (char *)0, 0}, - {(char *)"node2", __pyx_getprop_3fa2_7fa2util_4Edge_node2, __pyx_setprop_3fa2_7fa2util_4Edge_node2, (char *)0, 0}, - {(char *)"weight", __pyx_getprop_3fa2_7fa2util_4Edge_weight, __pyx_setprop_3fa2_7fa2util_4Edge_weight, (char *)0, 0}, - {0, 0, 0, 0, 0} -}; - -static PyTypeObject __pyx_type_3fa2_7fa2util_Edge = { - PyVarObject_HEAD_INIT(0, 0) - "fa2.fa2util.Edge", /*tp_name*/ - sizeof(struct __pyx_obj_3fa2_7fa2util_Edge), /*tp_basicsize*/ - 0, /*tp_itemsize*/ - __pyx_tp_dealloc_3fa2_7fa2util_Edge, /*tp_dealloc*/ - #if PY_VERSION_HEX < 0x030800b4 - 0, /*tp_print*/ - #endif - #if PY_VERSION_HEX >= 0x030800b4 - 0, /*tp_vectorcall_offset*/ - #endif - 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*/ - 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, /*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_3fa2_7fa2util_Edge, /*tp_methods*/ - 0, /*tp_members*/ - __pyx_getsets_3fa2_7fa2util_Edge, /*tp_getset*/ - 0, /*tp_base*/ - 0, /*tp_dict*/ - 0, /*tp_descr_get*/ - 0, /*tp_descr_set*/ - 0, /*tp_dictoffset*/ - __pyx_pw_3fa2_7fa2util_4Edge_1__init__, /*tp_init*/ - 0, /*tp_alloc*/ - __pyx_tp_new_3fa2_7fa2util_Edge, /*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 - #if PY_VERSION_HEX >= 0x030800b1 - 0, /*tp_vectorcall*/ - #endif - #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000 - 0, /*tp_print*/ - #endif -}; -static struct __pyx_vtabstruct_3fa2_7fa2util_Region __pyx_vtable_3fa2_7fa2util_Region; - -static PyObject *__pyx_tp_new_3fa2_7fa2util_Region(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { - struct __pyx_obj_3fa2_7fa2util_Region *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_obj_3fa2_7fa2util_Region *)o); - p->__pyx_vtab = __pyx_vtabptr_3fa2_7fa2util_Region; - p->nodes = ((PyObject*)Py_None); Py_INCREF(Py_None); - p->subregions = ((PyObject*)Py_None); Py_INCREF(Py_None); - return o; -} - -static void __pyx_tp_dealloc_3fa2_7fa2util_Region(PyObject *o) { - struct __pyx_obj_3fa2_7fa2util_Region *p = (struct __pyx_obj_3fa2_7fa2util_Region *)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->nodes); - Py_CLEAR(p->subregions); - (*Py_TYPE(o)->tp_free)(o); -} - -static int __pyx_tp_traverse_3fa2_7fa2util_Region(PyObject *o, visitproc v, void *a) { - int e; - struct __pyx_obj_3fa2_7fa2util_Region *p = (struct __pyx_obj_3fa2_7fa2util_Region *)o; - if (p->nodes) { - e = (*v)(p->nodes, a); if (e) return e; - } - if (p->subregions) { - e = (*v)(p->subregions, a); if (e) return e; - } - return 0; -} - -static int __pyx_tp_clear_3fa2_7fa2util_Region(PyObject *o) { - PyObject* tmp; - struct __pyx_obj_3fa2_7fa2util_Region *p = (struct __pyx_obj_3fa2_7fa2util_Region *)o; - tmp = ((PyObject*)p->nodes); - p->nodes = ((PyObject*)Py_None); Py_INCREF(Py_None); - Py_XDECREF(tmp); - tmp = ((PyObject*)p->subregions); - p->subregions = ((PyObject*)Py_None); Py_INCREF(Py_None); - Py_XDECREF(tmp); - return 0; -} - -static PyObject *__pyx_getprop_3fa2_7fa2util_6Region_mass(PyObject *o, CYTHON_UNUSED void *x) { - return __pyx_pw_3fa2_7fa2util_6Region_4mass_1__get__(o); -} - -static int __pyx_setprop_3fa2_7fa2util_6Region_mass(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) { - if (v) { - return __pyx_pw_3fa2_7fa2util_6Region_4mass_3__set__(o, v); - } - else { - PyErr_SetString(PyExc_NotImplementedError, "__del__"); - return -1; - } -} - -static PyObject *__pyx_getprop_3fa2_7fa2util_6Region_massCenterX(PyObject *o, CYTHON_UNUSED void *x) { - return __pyx_pw_3fa2_7fa2util_6Region_11massCenterX_1__get__(o); -} - -static int __pyx_setprop_3fa2_7fa2util_6Region_massCenterX(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) { - if (v) { - return __pyx_pw_3fa2_7fa2util_6Region_11massCenterX_3__set__(o, v); - } - else { - PyErr_SetString(PyExc_NotImplementedError, "__del__"); - return -1; - } -} - -static PyObject *__pyx_getprop_3fa2_7fa2util_6Region_massCenterY(PyObject *o, CYTHON_UNUSED void *x) { - return __pyx_pw_3fa2_7fa2util_6Region_11massCenterY_1__get__(o); -} - -static int __pyx_setprop_3fa2_7fa2util_6Region_massCenterY(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) { - if (v) { - return __pyx_pw_3fa2_7fa2util_6Region_11massCenterY_3__set__(o, v); - } - else { - PyErr_SetString(PyExc_NotImplementedError, "__del__"); - return -1; - } -} - -static PyObject *__pyx_getprop_3fa2_7fa2util_6Region_size(PyObject *o, CYTHON_UNUSED void *x) { - return __pyx_pw_3fa2_7fa2util_6Region_4size_1__get__(o); -} - -static int __pyx_setprop_3fa2_7fa2util_6Region_size(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) { - if (v) { - return __pyx_pw_3fa2_7fa2util_6Region_4size_3__set__(o, v); - } - else { - PyErr_SetString(PyExc_NotImplementedError, "__del__"); - return -1; - } -} - -static PyObject *__pyx_getprop_3fa2_7fa2util_6Region_nodes(PyObject *o, CYTHON_UNUSED void *x) { - return __pyx_pw_3fa2_7fa2util_6Region_5nodes_1__get__(o); -} - -static int __pyx_setprop_3fa2_7fa2util_6Region_nodes(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) { - if (v) { - return __pyx_pw_3fa2_7fa2util_6Region_5nodes_3__set__(o, v); - } - else { - return __pyx_pw_3fa2_7fa2util_6Region_5nodes_5__del__(o); - } -} - -static PyObject *__pyx_getprop_3fa2_7fa2util_6Region_subregions(PyObject *o, CYTHON_UNUSED void *x) { - return __pyx_pw_3fa2_7fa2util_6Region_10subregions_1__get__(o); -} - -static int __pyx_setprop_3fa2_7fa2util_6Region_subregions(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) { - if (v) { - return __pyx_pw_3fa2_7fa2util_6Region_10subregions_3__set__(o, v); - } - else { - return __pyx_pw_3fa2_7fa2util_6Region_10subregions_5__del__(o); - } -} - -static PyMethodDef __pyx_methods_3fa2_7fa2util_Region[] = { - {"__reduce_cython__", (PyCFunction)__pyx_pw_3fa2_7fa2util_6Region_7__reduce_cython__, METH_NOARGS, 0}, - {"__setstate_cython__", (PyCFunction)__pyx_pw_3fa2_7fa2util_6Region_9__setstate_cython__, METH_O, 0}, - {0, 0, 0, 0} -}; - -static struct PyGetSetDef __pyx_getsets_3fa2_7fa2util_Region[] = { - {(char *)"mass", __pyx_getprop_3fa2_7fa2util_6Region_mass, __pyx_setprop_3fa2_7fa2util_6Region_mass, (char *)0, 0}, - {(char *)"massCenterX", __pyx_getprop_3fa2_7fa2util_6Region_massCenterX, __pyx_setprop_3fa2_7fa2util_6Region_massCenterX, (char *)0, 0}, - {(char *)"massCenterY", __pyx_getprop_3fa2_7fa2util_6Region_massCenterY, __pyx_setprop_3fa2_7fa2util_6Region_massCenterY, (char *)0, 0}, - {(char *)"size", __pyx_getprop_3fa2_7fa2util_6Region_size, __pyx_setprop_3fa2_7fa2util_6Region_size, (char *)0, 0}, - {(char *)"nodes", __pyx_getprop_3fa2_7fa2util_6Region_nodes, __pyx_setprop_3fa2_7fa2util_6Region_nodes, (char *)0, 0}, - {(char *)"subregions", __pyx_getprop_3fa2_7fa2util_6Region_subregions, __pyx_setprop_3fa2_7fa2util_6Region_subregions, (char *)0, 0}, - {0, 0, 0, 0, 0} -}; - -static PyTypeObject __pyx_type_3fa2_7fa2util_Region = { - PyVarObject_HEAD_INIT(0, 0) - "fa2.fa2util.Region", /*tp_name*/ - sizeof(struct __pyx_obj_3fa2_7fa2util_Region), /*tp_basicsize*/ - 0, /*tp_itemsize*/ - __pyx_tp_dealloc_3fa2_7fa2util_Region, /*tp_dealloc*/ - #if PY_VERSION_HEX < 0x030800b4 - 0, /*tp_print*/ - #endif - #if PY_VERSION_HEX >= 0x030800b4 - 0, /*tp_vectorcall_offset*/ - #endif - 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*/ - 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_3fa2_7fa2util_Region, /*tp_traverse*/ - __pyx_tp_clear_3fa2_7fa2util_Region, /*tp_clear*/ - 0, /*tp_richcompare*/ - 0, /*tp_weaklistoffset*/ - 0, /*tp_iter*/ - 0, /*tp_iternext*/ - __pyx_methods_3fa2_7fa2util_Region, /*tp_methods*/ - 0, /*tp_members*/ - __pyx_getsets_3fa2_7fa2util_Region, /*tp_getset*/ - 0, /*tp_base*/ - 0, /*tp_dict*/ - 0, /*tp_descr_get*/ - 0, /*tp_descr_set*/ - 0, /*tp_dictoffset*/ - __pyx_pw_3fa2_7fa2util_6Region_1__init__, /*tp_init*/ - 0, /*tp_alloc*/ - __pyx_tp_new_3fa2_7fa2util_Region, /*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 - #if PY_VERSION_HEX >= 0x030800b1 - 0, /*tp_vectorcall*/ - #endif - #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000 - 0, /*tp_print*/ - #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_fa2util(PyObject* module); /*proto*/ -static PyModuleDef_Slot __pyx_moduledef_slots[] = { - {Py_mod_create, (void*)__pyx_pymod_create}, - {Py_mod_exec, (void*)__pyx_pymod_exec_fa2util}, - {0, NULL} -}; -#endif - -static struct PyModuleDef __pyx_moduledef = { - PyModuleDef_HEAD_INIT, - "fa2util", - 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_n_s_Edge, __pyx_k_Edge, sizeof(__pyx_k_Edge), 0, 0, 1, 1}, - {&__pyx_n_s_Edge___reduce_cython, __pyx_k_Edge___reduce_cython, sizeof(__pyx_k_Edge___reduce_cython), 0, 0, 1, 1}, - {&__pyx_n_s_Edge___setstate_cython, __pyx_k_Edge___setstate_cython, sizeof(__pyx_k_Edge___setstate_cython), 0, 0, 1, 1}, - {&__pyx_kp_s_Incompatible_checksums_s_vs_0x2f, __pyx_k_Incompatible_checksums_s_vs_0x2f, sizeof(__pyx_k_Incompatible_checksums_s_vs_0x2f), 0, 0, 1, 0}, - {&__pyx_kp_s_Incompatible_checksums_s_vs_0x66, __pyx_k_Incompatible_checksums_s_vs_0x66, sizeof(__pyx_k_Incompatible_checksums_s_vs_0x66), 0, 0, 1, 0}, - {&__pyx_kp_s_Incompatible_checksums_s_vs_0xb4, __pyx_k_Incompatible_checksums_s_vs_0xb4, sizeof(__pyx_k_Incompatible_checksums_s_vs_0xb4), 0, 0, 1, 0}, - {&__pyx_kp_s_No_cython_detected_Install_cytho, __pyx_k_No_cython_detected_Install_cytho, sizeof(__pyx_k_No_cython_detected_Install_cytho), 0, 0, 1, 0}, - {&__pyx_n_s_Node, __pyx_k_Node, sizeof(__pyx_k_Node), 0, 0, 1, 1}, - {&__pyx_n_s_Node___reduce_cython, __pyx_k_Node___reduce_cython, sizeof(__pyx_k_Node___reduce_cython), 0, 0, 1, 1}, - {&__pyx_n_s_Node___setstate_cython, __pyx_k_Node___setstate_cython, sizeof(__pyx_k_Node___setstate_cython), 0, 0, 1, 1}, - {&__pyx_n_s_PickleError, __pyx_k_PickleError, sizeof(__pyx_k_PickleError), 0, 0, 1, 1}, - {&__pyx_n_s_Region, __pyx_k_Region, sizeof(__pyx_k_Region), 0, 0, 1, 1}, - {&__pyx_n_s_Region___reduce_cython, __pyx_k_Region___reduce_cython, sizeof(__pyx_k_Region___reduce_cython), 0, 0, 1, 1}, - {&__pyx_n_s_Region___setstate_cython, __pyx_k_Region___setstate_cython, sizeof(__pyx_k_Region___setstate_cython), 0, 0, 1, 1}, - {&__pyx_n_s_Region_applyForceOnNodes, __pyx_k_Region_applyForceOnNodes, sizeof(__pyx_k_Region_applyForceOnNodes), 0, 0, 1, 1}, - {&__pyx_n_s_Region_buildSubRegions, __pyx_k_Region_buildSubRegions, sizeof(__pyx_k_Region_buildSubRegions), 0, 0, 1, 1}, - {&__pyx_kp_s_Warning_uncompiled_fa2util_modul, __pyx_k_Warning_uncompiled_fa2util_modul, sizeof(__pyx_k_Warning_uncompiled_fa2util_modul), 0, 0, 1, 0}, - {&__pyx_n_s_adjustSpeedAndApplyForces, __pyx_k_adjustSpeedAndApplyForces, sizeof(__pyx_k_adjustSpeedAndApplyForces), 0, 0, 1, 1}, - {&__pyx_n_s_applyForceOnNodes, __pyx_k_applyForceOnNodes, sizeof(__pyx_k_applyForceOnNodes), 0, 0, 1, 1}, - {&__pyx_n_s_apply_attraction, __pyx_k_apply_attraction, sizeof(__pyx_k_apply_attraction), 0, 0, 1, 1}, - {&__pyx_n_s_apply_gravity, __pyx_k_apply_gravity, sizeof(__pyx_k_apply_gravity), 0, 0, 1, 1}, - {&__pyx_n_s_apply_repulsion, __pyx_k_apply_repulsion, sizeof(__pyx_k_apply_repulsion), 0, 0, 1, 1}, - {&__pyx_n_s_buildSubRegions, __pyx_k_buildSubRegions, sizeof(__pyx_k_buildSubRegions), 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_n_s_coefficient, __pyx_k_coefficient, sizeof(__pyx_k_coefficient), 0, 0, 1, 1}, - {&__pyx_n_s_dict, __pyx_k_dict, sizeof(__pyx_k_dict), 0, 0, 1, 1}, - {&__pyx_n_s_dict_2, __pyx_k_dict_2, sizeof(__pyx_k_dict_2), 0, 0, 1, 1}, - {&__pyx_n_s_distributedAttraction, __pyx_k_distributedAttraction, sizeof(__pyx_k_distributedAttraction), 0, 0, 1, 1}, - {&__pyx_n_s_e, __pyx_k_e, sizeof(__pyx_k_e), 0, 0, 1, 1}, - {&__pyx_n_s_edgeWeightInfluence, __pyx_k_edgeWeightInfluence, sizeof(__pyx_k_edgeWeightInfluence), 0, 0, 1, 1}, - {&__pyx_n_s_edges, __pyx_k_edges, sizeof(__pyx_k_edges), 0, 0, 1, 1}, - {&__pyx_n_s_end, __pyx_k_end, sizeof(__pyx_k_end), 0, 0, 1, 1}, - {&__pyx_n_s_fa2_fa2util, __pyx_k_fa2_fa2util, sizeof(__pyx_k_fa2_fa2util), 0, 0, 1, 1}, - {&__pyx_kp_s_fa2util_py, __pyx_k_fa2util_py, sizeof(__pyx_k_fa2util_py), 0, 0, 1, 0}, - {&__pyx_n_s_file, __pyx_k_file, sizeof(__pyx_k_file), 0, 0, 1, 1}, - {&__pyx_n_s_getstate, __pyx_k_getstate, sizeof(__pyx_k_getstate), 0, 0, 1, 1}, - {&__pyx_n_s_gravity, __pyx_k_gravity, sizeof(__pyx_k_gravity), 0, 0, 1, 1}, - {&__pyx_n_s_import, __pyx_k_import, sizeof(__pyx_k_import), 0, 0, 1, 1}, - {&__pyx_n_s_inf, __pyx_k_inf, sizeof(__pyx_k_inf), 0, 0, 1, 1}, - {&__pyx_n_s_jitterTolerance, __pyx_k_jitterTolerance, sizeof(__pyx_k_jitterTolerance), 0, 0, 1, 1}, - {&__pyx_n_s_linAttraction, __pyx_k_linAttraction, sizeof(__pyx_k_linAttraction), 0, 0, 1, 1}, - {&__pyx_n_s_main, __pyx_k_main, sizeof(__pyx_k_main), 0, 0, 1, 1}, - {&__pyx_n_s_math, __pyx_k_math, sizeof(__pyx_k_math), 0, 0, 1, 1}, - {&__pyx_n_s_n1, __pyx_k_n1, sizeof(__pyx_k_n1), 0, 0, 1, 1}, - {&__pyx_n_s_n2, __pyx_k_n2, sizeof(__pyx_k_n2), 0, 0, 1, 1}, - {&__pyx_n_s_name, __pyx_k_name, sizeof(__pyx_k_name), 0, 0, 1, 1}, - {&__pyx_n_s_new, __pyx_k_new, sizeof(__pyx_k_new), 0, 0, 1, 1}, - {&__pyx_n_s_nodes, __pyx_k_nodes, sizeof(__pyx_k_nodes), 0, 0, 1, 1}, - {&__pyx_n_s_pickle, __pyx_k_pickle, sizeof(__pyx_k_pickle), 0, 0, 1, 1}, - {&__pyx_n_s_print, __pyx_k_print, sizeof(__pyx_k_print), 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_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_Edge, __pyx_k_pyx_unpickle_Edge, sizeof(__pyx_k_pyx_unpickle_Edge), 0, 0, 1, 1}, - {&__pyx_n_s_pyx_unpickle_Node, __pyx_k_pyx_unpickle_Node, sizeof(__pyx_k_pyx_unpickle_Node), 0, 0, 1, 1}, - {&__pyx_n_s_pyx_unpickle_Region, __pyx_k_pyx_unpickle_Region, sizeof(__pyx_k_pyx_unpickle_Region), 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_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_scalingRatio, __pyx_k_scalingRatio, sizeof(__pyx_k_scalingRatio), 0, 0, 1, 1}, - {&__pyx_n_s_self, __pyx_k_self, sizeof(__pyx_k_self), 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_speed, __pyx_k_speed, sizeof(__pyx_k_speed), 0, 0, 1, 1}, - {&__pyx_n_s_speedEfficiency, __pyx_k_speedEfficiency, sizeof(__pyx_k_speedEfficiency), 0, 0, 1, 1}, - {&__pyx_n_s_sqrt, __pyx_k_sqrt, sizeof(__pyx_k_sqrt), 0, 0, 1, 1}, - {&__pyx_n_s_state, __pyx_k_state, sizeof(__pyx_k_state), 0, 0, 1, 1}, - {&__pyx_kp_s_stringsource, __pyx_k_stringsource, sizeof(__pyx_k_stringsource), 0, 0, 1, 0}, - {&__pyx_n_s_test, __pyx_k_test, sizeof(__pyx_k_test), 0, 0, 1, 1}, - {&__pyx_n_s_theta, __pyx_k_theta, sizeof(__pyx_k_theta), 0, 0, 1, 1}, - {&__pyx_n_s_update, __pyx_k_update, sizeof(__pyx_k_update), 0, 0, 1, 1}, - {&__pyx_n_s_useStrongGravity, __pyx_k_useStrongGravity, sizeof(__pyx_k_useStrongGravity), 0, 0, 1, 1}, - {&__pyx_n_s_use_setstate, __pyx_k_use_setstate, sizeof(__pyx_k_use_setstate), 0, 0, 1, 1}, - {0, 0, 0, 0, 0, 0, 0} -}; -static CYTHON_SMALL_CODE int __Pyx_InitCachedBuiltins(void) { - return 0; -} - -static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0); - - /* "(tree fragment)":1 - * def __reduce_cython__(self): # <<<<<<<<<<<<<< - * cdef tuple state - * cdef object _dict - */ - __pyx_tuple_ = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_state, __pyx_n_s_dict_2, __pyx_n_s_use_setstate); if (unlikely(!__pyx_tuple_)) __PYX_ERR(1, 1, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple_); - __Pyx_GIVEREF(__pyx_tuple_); - __pyx_codeobj__2 = (PyObject*)__Pyx_PyCode_New(1, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple_, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_reduce_cython, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__2)) __PYX_ERR(1, 1, __pyx_L1_error) - - /* "(tree fragment)":16 - * else: - * return __pyx_unpickle_Node, (type(self), 0x2f233dd, state) - * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< - * __pyx_unpickle_Node__set_state(self, __pyx_state) - */ - __pyx_tuple__3 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_pyx_state); if (unlikely(!__pyx_tuple__3)) __PYX_ERR(1, 16, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__3); - __Pyx_GIVEREF(__pyx_tuple__3); - __pyx_codeobj__4 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__3, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_setstate_cython, 16, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__4)) __PYX_ERR(1, 16, __pyx_L1_error) - - /* "(tree fragment)":1 - * def __reduce_cython__(self): # <<<<<<<<<<<<<< - * cdef tuple state - * cdef object _dict - */ - __pyx_tuple__5 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_state, __pyx_n_s_dict_2, __pyx_n_s_use_setstate); if (unlikely(!__pyx_tuple__5)) __PYX_ERR(1, 1, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__5); - __Pyx_GIVEREF(__pyx_tuple__5); - __pyx_codeobj__6 = (PyObject*)__Pyx_PyCode_New(1, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__5, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_reduce_cython, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__6)) __PYX_ERR(1, 1, __pyx_L1_error) - - /* "(tree fragment)":16 - * else: - * return __pyx_unpickle_Edge, (type(self), 0xb469544, state) - * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< - * __pyx_unpickle_Edge__set_state(self, __pyx_state) - */ - __pyx_tuple__7 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_pyx_state); if (unlikely(!__pyx_tuple__7)) __PYX_ERR(1, 16, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__7); - __Pyx_GIVEREF(__pyx_tuple__7); - __pyx_codeobj__8 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__7, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_setstate_cython, 16, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__8)) __PYX_ERR(1, 16, __pyx_L1_error) - - /* "fa2/fa2util.py":97 - * # adjust the dx and dy values of `n1` and `n2`. It does - * # not return anything. - * def linAttraction(n1, n2, e, distributedAttraction, coefficient=0): # <<<<<<<<<<<<<< - * xDist = n1.x - n2.x - * yDist = n1.y - n2.y - */ - __pyx_tuple__9 = PyTuple_Pack(5, __pyx_n_s_n1, __pyx_n_s_n2, __pyx_n_s_e, __pyx_n_s_distributedAttraction, __pyx_n_s_coefficient); if (unlikely(!__pyx_tuple__9)) __PYX_ERR(2, 97, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__9); - __Pyx_GIVEREF(__pyx_tuple__9); - __pyx_codeobj__10 = (PyObject*)__Pyx_PyCode_New(5, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__9, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_fa2util_py, __pyx_n_s_linAttraction, 97, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__10)) __PYX_ERR(2, 97, __pyx_L1_error) - - /* "fa2/fa2util.py":113 - * # the forces directly to the node objects. These iterations are here - * # instead of the main file because Python is slow with loops. - * def apply_repulsion(nodes, coefficient): # <<<<<<<<<<<<<< - * i = 0 - * for n1 in nodes: - */ - __pyx_tuple__11 = PyTuple_Pack(2, __pyx_n_s_nodes, __pyx_n_s_coefficient); if (unlikely(!__pyx_tuple__11)) __PYX_ERR(2, 113, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__11); - __Pyx_GIVEREF(__pyx_tuple__11); - __pyx_codeobj__12 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__11, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_fa2util_py, __pyx_n_s_apply_repulsion, 113, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__12)) __PYX_ERR(2, 113, __pyx_L1_error) - - /* "fa2/fa2util.py":125 - * - * - * def apply_gravity(nodes, gravity, scalingRatio, useStrongGravity=False): # <<<<<<<<<<<<<< - * if not useStrongGravity: - * for n in nodes: - */ - __pyx_tuple__13 = PyTuple_Pack(4, __pyx_n_s_nodes, __pyx_n_s_gravity, __pyx_n_s_scalingRatio, __pyx_n_s_useStrongGravity); if (unlikely(!__pyx_tuple__13)) __PYX_ERR(2, 125, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__13); - __Pyx_GIVEREF(__pyx_tuple__13); - __pyx_codeobj__14 = (PyObject*)__Pyx_PyCode_New(4, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__13, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_fa2util_py, __pyx_n_s_apply_gravity, 125, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__14)) __PYX_ERR(2, 125, __pyx_L1_error) - - /* "fa2/fa2util.py":134 - * - * - * def apply_attraction(nodes, edges, distributedAttraction, coefficient, edgeWeightInfluence): # <<<<<<<<<<<<<< - * # Optimization, since usually edgeWeightInfluence is 0 or 1, and pow is slow - * if edgeWeightInfluence == 0: - */ - __pyx_tuple__15 = PyTuple_Pack(5, __pyx_n_s_nodes, __pyx_n_s_edges, __pyx_n_s_distributedAttraction, __pyx_n_s_coefficient, __pyx_n_s_edgeWeightInfluence); if (unlikely(!__pyx_tuple__15)) __PYX_ERR(2, 134, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__15); - __Pyx_GIVEREF(__pyx_tuple__15); - __pyx_codeobj__16 = (PyObject*)__Pyx_PyCode_New(5, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__15, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_fa2util_py, __pyx_n_s_apply_attraction, 134, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__16)) __PYX_ERR(2, 134, __pyx_L1_error) - - /* "fa2/fa2util.py":176 - * self.size = max(self.size, 2 * distance) - * - * def buildSubRegions(self): # <<<<<<<<<<<<<< - * if len(self.nodes) > 1: - * topleftNodes = [] - */ - __pyx_tuple__17 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__17)) __PYX_ERR(2, 176, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__17); - __Pyx_GIVEREF(__pyx_tuple__17); - __pyx_codeobj__18 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__17, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_fa2util_py, __pyx_n_s_buildSubRegions, 176, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__18)) __PYX_ERR(2, 176, __pyx_L1_error) - - /* "fa2/fa2util.py":247 - * subregion.applyForce(n, theta, coefficient) - * - * def applyForceOnNodes(self, nodes, theta, coefficient=0): # <<<<<<<<<<<<<< - * for n in nodes: - * self.applyForce(n, theta, coefficient) - */ - __pyx_tuple__19 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_nodes, __pyx_n_s_theta, __pyx_n_s_coefficient); if (unlikely(!__pyx_tuple__19)) __PYX_ERR(2, 247, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__19); - __Pyx_GIVEREF(__pyx_tuple__19); - __pyx_codeobj__20 = (PyObject*)__Pyx_PyCode_New(4, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__19, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_fa2util_py, __pyx_n_s_applyForceOnNodes, 247, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__20)) __PYX_ERR(2, 247, __pyx_L1_error) - - /* "(tree fragment)":1 - * def __reduce_cython__(self): # <<<<<<<<<<<<<< - * cdef tuple state - * cdef object _dict - */ - __pyx_tuple__21 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_state, __pyx_n_s_dict_2, __pyx_n_s_use_setstate); if (unlikely(!__pyx_tuple__21)) __PYX_ERR(1, 1, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__21); - __Pyx_GIVEREF(__pyx_tuple__21); - __pyx_codeobj__22 = (PyObject*)__Pyx_PyCode_New(1, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__21, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_reduce_cython, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__22)) __PYX_ERR(1, 1, __pyx_L1_error) - - /* "(tree fragment)":16 - * else: - * return __pyx_unpickle_Region, (type(self), 0x66ef4c7, state) - * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< - * __pyx_unpickle_Region__set_state(self, __pyx_state) - */ - __pyx_tuple__23 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_pyx_state); if (unlikely(!__pyx_tuple__23)) __PYX_ERR(1, 16, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__23); - __Pyx_GIVEREF(__pyx_tuple__23); - __pyx_codeobj__24 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 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_stringsource, __pyx_n_s_setstate_cython, 16, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__24)) __PYX_ERR(1, 16, __pyx_L1_error) - - /* "fa2/fa2util.py":253 - * - * # Adjust speed and apply forces step - * def adjustSpeedAndApplyForces(nodes, speed, speedEfficiency, jitterTolerance): # <<<<<<<<<<<<<< - * # Auto adjust speed. - * totalSwinging = 0.0 # How much irregular movement - */ - __pyx_tuple__25 = PyTuple_Pack(4, __pyx_n_s_nodes, __pyx_n_s_speed, __pyx_n_s_speedEfficiency, __pyx_n_s_jitterTolerance); if (unlikely(!__pyx_tuple__25)) __PYX_ERR(2, 253, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__25); - __Pyx_GIVEREF(__pyx_tuple__25); - __pyx_codeobj__26 = (PyObject*)__Pyx_PyCode_New(4, 0, 4, 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_fa2util_py, __pyx_n_s_adjustSpeedAndApplyForces, 253, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__26)) __PYX_ERR(2, 253, __pyx_L1_error) - - /* "(tree fragment)":1 - * def __pyx_unpickle_Node(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<< - * cdef object __pyx_PickleError - * cdef object __pyx_result - */ - __pyx_tuple__27 = 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__27)) __PYX_ERR(1, 1, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__27); - __Pyx_GIVEREF(__pyx_tuple__27); - __pyx_codeobj__28 = (PyObject*)__Pyx_PyCode_New(3, 0, 5, 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_stringsource, __pyx_n_s_pyx_unpickle_Node, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__28)) __PYX_ERR(1, 1, __pyx_L1_error) - __pyx_tuple__29 = 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__29)) __PYX_ERR(1, 1, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__29); - __Pyx_GIVEREF(__pyx_tuple__29); - __pyx_codeobj__30 = (PyObject*)__Pyx_PyCode_New(3, 0, 5, 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_stringsource, __pyx_n_s_pyx_unpickle_Edge, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__30)) __PYX_ERR(1, 1, __pyx_L1_error) - __pyx_tuple__31 = 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__31)) __PYX_ERR(1, 1, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__31); - __Pyx_GIVEREF(__pyx_tuple__31); - __pyx_codeobj__32 = (PyObject*)__Pyx_PyCode_New(3, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__31, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_pyx_unpickle_Region, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__32)) __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(2, 1, __pyx_L1_error); - __pyx_float__05 = PyFloat_FromDouble(.05); if (unlikely(!__pyx_float__05)) __PYX_ERR(2, 1, __pyx_L1_error) - __pyx_float_1_0 = PyFloat_FromDouble(1.0); if (unlikely(!__pyx_float_1_0)) __PYX_ERR(2, 1, __pyx_L1_error) - __pyx_int_49427421 = PyInt_FromLong(49427421L); if (unlikely(!__pyx_int_49427421)) __PYX_ERR(2, 1, __pyx_L1_error) - __pyx_int_107934919 = PyInt_FromLong(107934919L); if (unlikely(!__pyx_int_107934919)) __PYX_ERR(2, 1, __pyx_L1_error) - __pyx_int_189175108 = PyInt_FromLong(189175108L); if (unlikely(!__pyx_int_189175108)) __PYX_ERR(2, 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 ---*/ - __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 ---*/ - if (__Pyx_ExportFunction("linRepulsion", (void (*)(void))__pyx_f_3fa2_7fa2util_linRepulsion, "void (struct __pyx_obj_3fa2_7fa2util_Node *, struct __pyx_obj_3fa2_7fa2util_Node *, struct __pyx_opt_args_3fa2_7fa2util_linRepulsion *__pyx_optional_args)") < 0) __PYX_ERR(2, 1, __pyx_L1_error) - if (__Pyx_ExportFunction("linRepulsion_region", (void (*)(void))__pyx_f_3fa2_7fa2util_linRepulsion_region, "void (struct __pyx_obj_3fa2_7fa2util_Node *, struct __pyx_obj_3fa2_7fa2util_Region *, struct __pyx_opt_args_3fa2_7fa2util_linRepulsion_region *__pyx_optional_args)") < 0) __PYX_ERR(2, 1, __pyx_L1_error) - if (__Pyx_ExportFunction("linGravity", (void (*)(void))__pyx_f_3fa2_7fa2util_linGravity, "void (struct __pyx_obj_3fa2_7fa2util_Node *, double)") < 0) __PYX_ERR(2, 1, __pyx_L1_error) - if (__Pyx_ExportFunction("strongGravity", (void (*)(void))__pyx_f_3fa2_7fa2util_strongGravity, "void (struct __pyx_obj_3fa2_7fa2util_Node *, double, struct __pyx_opt_args_3fa2_7fa2util_strongGravity *__pyx_optional_args)") < 0) __PYX_ERR(2, 1, __pyx_L1_error) - if (__Pyx_ExportFunction("linAttraction", (void (*)(void))__pyx_f_3fa2_7fa2util_linAttraction, "void (struct __pyx_obj_3fa2_7fa2util_Node *, struct __pyx_obj_3fa2_7fa2util_Node *, double, int, int __pyx_skip_dispatch, struct __pyx_opt_args_3fa2_7fa2util_linAttraction *__pyx_optional_args)") < 0) __PYX_ERR(2, 1, __pyx_L1_error) - if (__Pyx_ExportFunction("apply_repulsion", (void (*)(void))__pyx_f_3fa2_7fa2util_apply_repulsion, "void (PyObject *, double, int __pyx_skip_dispatch)") < 0) __PYX_ERR(2, 1, __pyx_L1_error) - if (__Pyx_ExportFunction("apply_gravity", (void (*)(void))__pyx_f_3fa2_7fa2util_apply_gravity, "void (PyObject *, double, double, int __pyx_skip_dispatch, struct __pyx_opt_args_3fa2_7fa2util_apply_gravity *__pyx_optional_args)") < 0) __PYX_ERR(2, 1, __pyx_L1_error) - if (__Pyx_ExportFunction("apply_attraction", (void (*)(void))__pyx_f_3fa2_7fa2util_apply_attraction, "void (PyObject *, PyObject *, int, double, double, int __pyx_skip_dispatch)") < 0) __PYX_ERR(2, 1, __pyx_L1_error) - if (__Pyx_ExportFunction("adjustSpeedAndApplyForces", (void (*)(void))__pyx_f_3fa2_7fa2util_adjustSpeedAndApplyForces, "PyObject *(PyObject *, double, double, double, int __pyx_skip_dispatch)") < 0) __PYX_ERR(2, 1, __pyx_L1_error) - __Pyx_RefNannyFinishContext(); - return 0; - __pyx_L1_error:; - __Pyx_RefNannyFinishContext(); - return -1; -} - -static int __Pyx_modinit_type_init_code(void) { - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__Pyx_modinit_type_init_code", 0); - /*--- Type init code ---*/ - if (PyType_Ready(&__pyx_type_3fa2_7fa2util_Node) < 0) __PYX_ERR(2, 17, __pyx_L1_error) - #if PY_VERSION_HEX < 0x030800B1 - __pyx_type_3fa2_7fa2util_Node.tp_print = 0; - #endif - if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_3fa2_7fa2util_Node.tp_dictoffset && __pyx_type_3fa2_7fa2util_Node.tp_getattro == PyObject_GenericGetAttr)) { - __pyx_type_3fa2_7fa2util_Node.tp_getattro = __Pyx_PyObject_GenericGetAttr; - } - if (PyObject_SetAttr(__pyx_m, __pyx_n_s_Node, (PyObject *)&__pyx_type_3fa2_7fa2util_Node) < 0) __PYX_ERR(2, 17, __pyx_L1_error) - if (__Pyx_setup_reduce((PyObject*)&__pyx_type_3fa2_7fa2util_Node) < 0) __PYX_ERR(2, 17, __pyx_L1_error) - __pyx_ptype_3fa2_7fa2util_Node = &__pyx_type_3fa2_7fa2util_Node; - if (PyType_Ready(&__pyx_type_3fa2_7fa2util_Edge) < 0) __PYX_ERR(2, 29, __pyx_L1_error) - #if PY_VERSION_HEX < 0x030800B1 - __pyx_type_3fa2_7fa2util_Edge.tp_print = 0; - #endif - if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_3fa2_7fa2util_Edge.tp_dictoffset && __pyx_type_3fa2_7fa2util_Edge.tp_getattro == PyObject_GenericGetAttr)) { - __pyx_type_3fa2_7fa2util_Edge.tp_getattro = __Pyx_PyObject_GenericGetAttr; - } - if (PyObject_SetAttr(__pyx_m, __pyx_n_s_Edge, (PyObject *)&__pyx_type_3fa2_7fa2util_Edge) < 0) __PYX_ERR(2, 29, __pyx_L1_error) - if (__Pyx_setup_reduce((PyObject*)&__pyx_type_3fa2_7fa2util_Edge) < 0) __PYX_ERR(2, 29, __pyx_L1_error) - __pyx_ptype_3fa2_7fa2util_Edge = &__pyx_type_3fa2_7fa2util_Edge; - __pyx_vtabptr_3fa2_7fa2util_Region = &__pyx_vtable_3fa2_7fa2util_Region; - __pyx_vtable_3fa2_7fa2util_Region.updateMassAndGeometry = (void (*)(struct __pyx_obj_3fa2_7fa2util_Region *))__pyx_f_3fa2_7fa2util_6Region_updateMassAndGeometry; - __pyx_vtable_3fa2_7fa2util_Region.buildSubRegions = (void (*)(struct __pyx_obj_3fa2_7fa2util_Region *, int __pyx_skip_dispatch))__pyx_f_3fa2_7fa2util_6Region_buildSubRegions; - __pyx_vtable_3fa2_7fa2util_Region.applyForce = (void (*)(struct __pyx_obj_3fa2_7fa2util_Region *, struct __pyx_obj_3fa2_7fa2util_Node *, double, struct __pyx_opt_args_3fa2_7fa2util_6Region_applyForce *__pyx_optional_args))__pyx_f_3fa2_7fa2util_6Region_applyForce; - __pyx_vtable_3fa2_7fa2util_Region.applyForceOnNodes = (PyObject *(*)(struct __pyx_obj_3fa2_7fa2util_Region *, PyObject *, double, int __pyx_skip_dispatch, struct __pyx_opt_args_3fa2_7fa2util_6Region_applyForceOnNodes *__pyx_optional_args))__pyx_f_3fa2_7fa2util_6Region_applyForceOnNodes; - if (PyType_Ready(&__pyx_type_3fa2_7fa2util_Region) < 0) __PYX_ERR(2, 149, __pyx_L1_error) - #if PY_VERSION_HEX < 0x030800B1 - __pyx_type_3fa2_7fa2util_Region.tp_print = 0; - #endif - if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_3fa2_7fa2util_Region.tp_dictoffset && __pyx_type_3fa2_7fa2util_Region.tp_getattro == PyObject_GenericGetAttr)) { - __pyx_type_3fa2_7fa2util_Region.tp_getattro = __Pyx_PyObject_GenericGetAttr; - } - if (__Pyx_SetVtable(__pyx_type_3fa2_7fa2util_Region.tp_dict, __pyx_vtabptr_3fa2_7fa2util_Region) < 0) __PYX_ERR(2, 149, __pyx_L1_error) - if (PyObject_SetAttr(__pyx_m, __pyx_n_s_Region, (PyObject *)&__pyx_type_3fa2_7fa2util_Region) < 0) __PYX_ERR(2, 149, __pyx_L1_error) - if (__Pyx_setup_reduce((PyObject*)&__pyx_type_3fa2_7fa2util_Region) < 0) __PYX_ERR(2, 149, __pyx_L1_error) - __pyx_ptype_3fa2_7fa2util_Region = &__pyx_type_3fa2_7fa2util_Region; - __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 initfa2util(void) CYTHON_SMALL_CODE; /*proto*/ -__Pyx_PyMODINIT_FUNC initfa2util(void) -#else -__Pyx_PyMODINIT_FUNC PyInit_fa2util(void) CYTHON_SMALL_CODE; /*proto*/ -__Pyx_PyMODINIT_FUNC PyInit_fa2util(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_fa2util(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; - int __pyx_t_6; - PyObject *__pyx_t_7 = NULL; - __Pyx_RefNannyDeclarations - #if CYTHON_PEP489_MULTI_PHASE_INIT - if (__pyx_m) { - if (__pyx_m == __pyx_pyinit_module) return 0; - PyErr_SetString(PyExc_RuntimeError, "Module 'fa2util' 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_fa2util(void)", 0); - if (__Pyx_check_binary_version() < 0) __PYX_ERR(2, 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(2, 1, __pyx_L1_error) - __pyx_empty_bytes = PyBytes_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_bytes)) __PYX_ERR(2, 1, __pyx_L1_error) - __pyx_empty_unicode = PyUnicode_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_unicode)) __PYX_ERR(2, 1, __pyx_L1_error) - #ifdef __Pyx_CyFunction_USED - if (__pyx_CyFunction_init() < 0) __PYX_ERR(2, 1, __pyx_L1_error) - #endif - #ifdef __Pyx_FusedFunction_USED - if (__pyx_FusedFunction_init() < 0) __PYX_ERR(2, 1, __pyx_L1_error) - #endif - #ifdef __Pyx_Coroutine_USED - if (__pyx_Coroutine_init() < 0) __PYX_ERR(2, 1, __pyx_L1_error) - #endif - #ifdef __Pyx_Generator_USED - if (__pyx_Generator_init() < 0) __PYX_ERR(2, 1, __pyx_L1_error) - #endif - #ifdef __Pyx_AsyncGen_USED - if (__pyx_AsyncGen_init() < 0) __PYX_ERR(2, 1, __pyx_L1_error) - #endif - #ifdef __Pyx_StopAsyncIteration_USED - if (__pyx_StopAsyncIteration_init() < 0) __PYX_ERR(2, 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("fa2util", __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(2, 1, __pyx_L1_error) - #endif - __pyx_d = PyModule_GetDict(__pyx_m); if (unlikely(!__pyx_d)) __PYX_ERR(2, 1, __pyx_L1_error) - Py_INCREF(__pyx_d); - __pyx_b = PyImport_AddModule(__Pyx_BUILTIN_MODULE_NAME); if (unlikely(!__pyx_b)) __PYX_ERR(2, 1, __pyx_L1_error) - Py_INCREF(__pyx_b); - __pyx_cython_runtime = PyImport_AddModule((char *) "cython_runtime"); if (unlikely(!__pyx_cython_runtime)) __PYX_ERR(2, 1, __pyx_L1_error) - Py_INCREF(__pyx_cython_runtime); - if (PyObject_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) __PYX_ERR(2, 1, __pyx_L1_error); - /*--- Initialize various global constants etc. ---*/ - if (__Pyx_InitGlobals() < 0) __PYX_ERR(2, 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(2, 1, __pyx_L1_error) - #endif - if (__pyx_module_is_main_fa2__fa2util) { - if (PyObject_SetAttr(__pyx_m, __pyx_n_s_name, __pyx_n_s_main) < 0) __PYX_ERR(2, 1, __pyx_L1_error) - } - #if PY_MAJOR_VERSION >= 3 - { - PyObject *modules = PyImport_GetModuleDict(); if (unlikely(!modules)) __PYX_ERR(2, 1, __pyx_L1_error) - if (!PyDict_GetItemString(modules, "fa2.fa2util")) { - if (unlikely(PyDict_SetItemString(modules, "fa2.fa2util", __pyx_m) < 0)) __PYX_ERR(2, 1, __pyx_L1_error) - } - } - #endif - /*--- Builtin init code ---*/ - if (__Pyx_InitCachedBuiltins() < 0) goto __pyx_L1_error; - /*--- Constants init code ---*/ - if (__Pyx_InitCachedConstants() < 0) goto __pyx_L1_error; - /*--- Global type/function init code ---*/ - (void)__Pyx_modinit_global_init_code(); - (void)__Pyx_modinit_variable_export_code(); - if (unlikely(__Pyx_modinit_function_export_code() != 0)) goto __pyx_L1_error; - 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(2, 1, __pyx_L1_error) - #endif - - /* "fa2/fa2util.py":13 - * # Available under the GPLv3 - * - * from math import sqrt # <<<<<<<<<<<<<< - * - * - */ - __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 13, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__pyx_n_s_sqrt); - __Pyx_GIVEREF(__pyx_n_s_sqrt); - PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_sqrt); - __pyx_t_2 = __Pyx_Import(__pyx_n_s_math, __pyx_t_1, -1); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 13, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_sqrt); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 13, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_sqrt, __pyx_t_1) < 0) __PYX_ERR(2, 13, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "(tree fragment)":1 - * def __reduce_cython__(self): # <<<<<<<<<<<<<< - * cdef tuple state - * cdef object _dict - */ - __pyx_t_2 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3fa2_7fa2util_4Node_3__reduce_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Node___reduce_cython, NULL, __pyx_n_s_fa2_fa2util, __pyx_d, ((PyObject *)__pyx_codeobj__2)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_reduce_cython, __pyx_t_2) < 0) __PYX_ERR(1, 1, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "(tree fragment)":16 - * else: - * return __pyx_unpickle_Node, (type(self), 0x2f233dd, state) - * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< - * __pyx_unpickle_Node__set_state(self, __pyx_state) - */ - __pyx_t_2 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3fa2_7fa2util_4Node_5__setstate_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Node___setstate_cython, NULL, __pyx_n_s_fa2_fa2util, __pyx_d, ((PyObject *)__pyx_codeobj__4)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 16, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_setstate_cython, __pyx_t_2) < 0) __PYX_ERR(1, 16, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "(tree fragment)":1 - * def __reduce_cython__(self): # <<<<<<<<<<<<<< - * cdef tuple state - * cdef object _dict - */ - __pyx_t_2 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3fa2_7fa2util_4Edge_3__reduce_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Edge___reduce_cython, NULL, __pyx_n_s_fa2_fa2util, __pyx_d, ((PyObject *)__pyx_codeobj__6)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_reduce_cython, __pyx_t_2) < 0) __PYX_ERR(1, 1, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "(tree fragment)":16 - * else: - * return __pyx_unpickle_Edge, (type(self), 0xb469544, state) - * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< - * __pyx_unpickle_Edge__set_state(self, __pyx_state) - */ - __pyx_t_2 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3fa2_7fa2util_4Edge_5__setstate_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Edge___setstate_cython, NULL, __pyx_n_s_fa2_fa2util, __pyx_d, ((PyObject *)__pyx_codeobj__8)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 16, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_setstate_cython, __pyx_t_2) < 0) __PYX_ERR(1, 16, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "fa2/fa2util.py":97 - * # adjust the dx and dy values of `n1` and `n2`. It does - * # not return anything. - * def linAttraction(n1, n2, e, distributedAttraction, coefficient=0): # <<<<<<<<<<<<<< - * xDist = n1.x - n2.x - * yDist = n1.y - n2.y - */ - __pyx_t_2 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3fa2_7fa2util_1linAttraction, 0, __pyx_n_s_linAttraction, NULL, __pyx_n_s_fa2_fa2util, __pyx_d, ((PyObject *)__pyx_codeobj__10)); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 97, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_linAttraction, __pyx_t_2) < 0) __PYX_ERR(2, 97, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "fa2/fa2util.py":113 - * # the forces directly to the node objects. These iterations are here - * # instead of the main file because Python is slow with loops. - * def apply_repulsion(nodes, coefficient): # <<<<<<<<<<<<<< - * i = 0 - * for n1 in nodes: - */ - __pyx_t_2 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3fa2_7fa2util_3apply_repulsion, 0, __pyx_n_s_apply_repulsion, NULL, __pyx_n_s_fa2_fa2util, __pyx_d, ((PyObject *)__pyx_codeobj__12)); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 113, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_apply_repulsion, __pyx_t_2) < 0) __PYX_ERR(2, 113, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "fa2/fa2util.py":125 - * - * - * def apply_gravity(nodes, gravity, scalingRatio, useStrongGravity=False): # <<<<<<<<<<<<<< - * if not useStrongGravity: - * for n in nodes: - */ - __pyx_t_2 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3fa2_7fa2util_5apply_gravity, 0, __pyx_n_s_apply_gravity, NULL, __pyx_n_s_fa2_fa2util, __pyx_d, ((PyObject *)__pyx_codeobj__14)); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 125, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_apply_gravity, __pyx_t_2) < 0) __PYX_ERR(2, 125, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "fa2/fa2util.py":134 - * - * - * def apply_attraction(nodes, edges, distributedAttraction, coefficient, edgeWeightInfluence): # <<<<<<<<<<<<<< - * # Optimization, since usually edgeWeightInfluence is 0 or 1, and pow is slow - * if edgeWeightInfluence == 0: - */ - __pyx_t_2 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3fa2_7fa2util_7apply_attraction, 0, __pyx_n_s_apply_attraction, NULL, __pyx_n_s_fa2_fa2util, __pyx_d, ((PyObject *)__pyx_codeobj__16)); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 134, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_apply_attraction, __pyx_t_2) < 0) __PYX_ERR(2, 134, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "fa2/fa2util.py":176 - * self.size = max(self.size, 2 * distance) - * - * def buildSubRegions(self): # <<<<<<<<<<<<<< - * if len(self.nodes) > 1: - * topleftNodes = [] - */ - __pyx_t_2 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3fa2_7fa2util_6Region_3buildSubRegions, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Region_buildSubRegions, NULL, __pyx_n_s_fa2_fa2util, __pyx_d, ((PyObject *)__pyx_codeobj__18)); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 176, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem((PyObject *)__pyx_ptype_3fa2_7fa2util_Region->tp_dict, __pyx_n_s_buildSubRegions, __pyx_t_2) < 0) __PYX_ERR(2, 176, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - PyType_Modified(__pyx_ptype_3fa2_7fa2util_Region); - - /* "fa2/fa2util.py":247 - * subregion.applyForce(n, theta, coefficient) - * - * def applyForceOnNodes(self, nodes, theta, coefficient=0): # <<<<<<<<<<<<<< - * for n in nodes: - * self.applyForce(n, theta, coefficient) - */ - __pyx_t_2 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3fa2_7fa2util_6Region_5applyForceOnNodes, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Region_applyForceOnNodes, NULL, __pyx_n_s_fa2_fa2util, __pyx_d, ((PyObject *)__pyx_codeobj__20)); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 247, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem((PyObject *)__pyx_ptype_3fa2_7fa2util_Region->tp_dict, __pyx_n_s_applyForceOnNodes, __pyx_t_2) < 0) __PYX_ERR(2, 247, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - PyType_Modified(__pyx_ptype_3fa2_7fa2util_Region); - - /* "(tree fragment)":1 - * def __reduce_cython__(self): # <<<<<<<<<<<<<< - * cdef tuple state - * cdef object _dict - */ - __pyx_t_2 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3fa2_7fa2util_6Region_7__reduce_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Region___reduce_cython, NULL, __pyx_n_s_fa2_fa2util, __pyx_d, ((PyObject *)__pyx_codeobj__22)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_reduce_cython, __pyx_t_2) < 0) __PYX_ERR(1, 1, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "(tree fragment)":16 - * else: - * return __pyx_unpickle_Region, (type(self), 0x66ef4c7, state) - * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< - * __pyx_unpickle_Region__set_state(self, __pyx_state) - */ - __pyx_t_2 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3fa2_7fa2util_6Region_9__setstate_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Region___setstate_cython, NULL, __pyx_n_s_fa2_fa2util, __pyx_d, ((PyObject *)__pyx_codeobj__24)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 16, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_setstate_cython, __pyx_t_2) < 0) __PYX_ERR(1, 16, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "fa2/fa2util.py":253 - * - * # Adjust speed and apply forces step - * def adjustSpeedAndApplyForces(nodes, speed, speedEfficiency, jitterTolerance): # <<<<<<<<<<<<<< - * # Auto adjust speed. - * totalSwinging = 0.0 # How much irregular movement - */ - __pyx_t_2 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3fa2_7fa2util_9adjustSpeedAndApplyForces, 0, __pyx_n_s_adjustSpeedAndApplyForces, NULL, __pyx_n_s_fa2_fa2util, __pyx_d, ((PyObject *)__pyx_codeobj__26)); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 253, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_adjustSpeedAndApplyForces, __pyx_t_2) < 0) __PYX_ERR(2, 253, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "fa2/fa2util.py":314 - * - * - * try: # <<<<<<<<<<<<<< - * import cython - * - */ - { - __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:*/ { - - /* "fa2/fa2util.py":317 - * import cython - * - * if not cython.compiled: # <<<<<<<<<<<<<< - * print("Warning: uncompiled fa2util module. Compile with cython for a 10-100x speed boost.") - * except: - */ - __pyx_t_6 = ((!(1 != 0)) != 0); - if (__pyx_t_6) { - - /* "fa2/fa2util.py":318 - * - * if not cython.compiled: - * print("Warning: uncompiled fa2util module. Compile with cython for a 10-100x speed boost.") # <<<<<<<<<<<<<< - * except: - * print("No cython detected. Install cython and compile the fa2util module for a 10-100x speed boost.") - */ - if (__Pyx_PrintOne(0, __pyx_kp_s_Warning_uncompiled_fa2util_modul) < 0) __PYX_ERR(2, 318, __pyx_L2_error) - - /* "fa2/fa2util.py":317 - * import cython - * - * if not cython.compiled: # <<<<<<<<<<<<<< - * print("Warning: uncompiled fa2util module. Compile with cython for a 10-100x speed boost.") - * except: - */ - } - - /* "fa2/fa2util.py":314 - * - * - * try: # <<<<<<<<<<<<<< - * import cython - * - */ - } - __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_L7_try_end; - __pyx_L2_error:; - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "fa2/fa2util.py":319 - * if not cython.compiled: - * print("Warning: uncompiled fa2util module. Compile with cython for a 10-100x speed boost.") - * except: # <<<<<<<<<<<<<< - * print("No cython detected. Install cython and compile the fa2util module for a 10-100x speed boost.") - */ - /*except:*/ { - __Pyx_AddTraceback("fa2.fa2util", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_1, &__pyx_t_7) < 0) __PYX_ERR(2, 319, __pyx_L4_except_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_GOTREF(__pyx_t_1); - __Pyx_GOTREF(__pyx_t_7); - - /* "fa2/fa2util.py":320 - * print("Warning: uncompiled fa2util module. Compile with cython for a 10-100x speed boost.") - * except: - * print("No cython detected. Install cython and compile the fa2util module for a 10-100x speed boost.") # <<<<<<<<<<<<<< - */ - if (__Pyx_PrintOne(0, __pyx_kp_s_No_cython_detected_Install_cytho) < 0) __PYX_ERR(2, 320, __pyx_L4_except_error) - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - goto __pyx_L3_exception_handled; - } - __pyx_L4_except_error:; - - /* "fa2/fa2util.py":314 - * - * - * try: # <<<<<<<<<<<<<< - * import cython - * - */ - __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_L3_exception_handled:; - __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); - __pyx_L7_try_end:; - } - - /* "(tree fragment)":1 - * def __pyx_unpickle_Node(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<< - * cdef object __pyx_PickleError - * cdef object __pyx_result - */ - __pyx_t_7 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3fa2_7fa2util_11__pyx_unpickle_Node, 0, __pyx_n_s_pyx_unpickle_Node, NULL, __pyx_n_s_fa2_fa2util, __pyx_d, ((PyObject *)__pyx_codeobj__28)); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 1, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_pyx_unpickle_Node, __pyx_t_7) < 0) __PYX_ERR(1, 1, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - - /* "(tree fragment)":11 - * __pyx_unpickle_Node__set_state( __pyx_result, __pyx_state) - * return __pyx_result - * cdef __pyx_unpickle_Node__set_state(Node __pyx_result, tuple __pyx_state): # <<<<<<<<<<<<<< - * __pyx_result.dx = __pyx_state[0]; __pyx_result.dy = __pyx_state[1]; __pyx_result.mass = __pyx_state[2]; __pyx_result.old_dx = __pyx_state[3]; __pyx_result.old_dy = __pyx_state[4]; __pyx_result.x = __pyx_state[5]; __pyx_result.y = __pyx_state[6] - * if len(__pyx_state) > 7 and hasattr(__pyx_result, '__dict__'): - */ - __pyx_t_7 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3fa2_7fa2util_13__pyx_unpickle_Edge, 0, __pyx_n_s_pyx_unpickle_Edge, NULL, __pyx_n_s_fa2_fa2util, __pyx_d, ((PyObject *)__pyx_codeobj__30)); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 1, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_pyx_unpickle_Edge, __pyx_t_7) < 0) __PYX_ERR(1, 1, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - - /* "(tree fragment)":1 - * def __pyx_unpickle_Region(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<< - * cdef object __pyx_PickleError - * cdef object __pyx_result - */ - __pyx_t_7 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3fa2_7fa2util_15__pyx_unpickle_Region, 0, __pyx_n_s_pyx_unpickle_Region, NULL, __pyx_n_s_fa2_fa2util, __pyx_d, ((PyObject *)__pyx_codeobj__32)); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 1, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_pyx_unpickle_Region, __pyx_t_7) < 0) __PYX_ERR(1, 1, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - - /* "fa2/fa2util.py":1 - * # This file allows separating the most CPU intensive routines from the # <<<<<<<<<<<<<< - * # main code. This allows them to be optimized with Cython. If you - * # don't have Cython, this will run normally. However, if you use - */ - __pyx_t_7 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 1, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_test, __pyx_t_7) < 0) __PYX_ERR(2, 1, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - - /*--- Wrapped vars code ---*/ - - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_7); - if (__pyx_m) { - if (__pyx_d) { - __Pyx_AddTraceback("init fa2.fa2util", __pyx_clineno, __pyx_lineno, __pyx_filename); - } - Py_CLEAR(__pyx_m); - } else if (!PyErr_Occurred()) { - PyErr_SetString(PyExc_ImportError, "init fa2.fa2util"); - } - __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 - -/* 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); -} - -/* KeywordStringCheck */ -static int __Pyx_CheckKeywordStrings( - PyObject *kwdict, - const char* function_name, - int kw_allowed) -{ - PyObject* key = 0; - Py_ssize_t pos = 0; -#if CYTHON_COMPILING_IN_PYPY - if (!kw_allowed && PyDict_Next(kwdict, &pos, &key, 0)) - goto invalid_keyword; - return 1; -#else - while (PyDict_Next(kwdict, &pos, &key, 0)) { - #if PY_MAJOR_VERSION < 3 - if (unlikely(!PyString_Check(key))) - #endif - if (unlikely(!PyUnicode_Check(key))) - goto invalid_keyword_type; - } - if ((!kw_allowed) && unlikely(key)) - goto invalid_keyword; - return 1; -invalid_keyword_type: - PyErr_Format(PyExc_TypeError, - "%.200s() keywords must be strings", function_name); - return 0; -#endif -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 - return 0; -} - -/* 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; icurexc_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 - -/* 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 - -/* 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 - -/* 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); -} - -/* 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); -} - -/* 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; -} - -/* PyDictVersioning */ -#if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_TYPE_SLOTS -static CYTHON_INLINE PY_UINT64_T __Pyx_get_tp_dict_version(PyObject *obj) { - PyObject *dict = Py_TYPE(obj)->tp_dict; - return likely(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) { -#if CYTHON_COMPILING_IN_CPYTHON - dictptr = (likely(offset > 0)) ? (PyObject **) ((char *)obj + offset) : _PyObject_GetDictPtr(obj); -#else - dictptr = _PyObject_GetDictPtr(obj); -#endif - } - 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 (unlikely(!dict) || unlikely(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); -} - -/* 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 -} - -/* 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, Py_ssize_t 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, (int)nargs, - k, (int)nk, - d, (int)nd, kwdefs, closure); -#else - result = PyEval_EvalCodeEx(co, globals, (PyObject *)NULL, - args, (int)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 - -/* 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; -} - -/* 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 - -/* 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; -} - -/* 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; -} - -/* 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; -} - -/* 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)); -} - -/* 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 - -/* pyobject_as_double */ -static double __Pyx__PyObject_AsDouble(PyObject* obj) { - PyObject* float_value; -#if !CYTHON_USE_TYPE_SLOTS - float_value = PyNumber_Float(obj); if ((0)) goto bad; -#else - PyNumberMethods *nb = Py_TYPE(obj)->tp_as_number; - if (likely(nb) && likely(nb->nb_float)) { - float_value = nb->nb_float(obj); - if (likely(float_value) && unlikely(!PyFloat_Check(float_value))) { - PyErr_Format(PyExc_TypeError, - "__float__ returned non-float (type %.200s)", - Py_TYPE(float_value)->tp_name); - Py_DECREF(float_value); - goto bad; - } - } else if (PyUnicode_CheckExact(obj) || PyBytes_CheckExact(obj)) { -#if PY_MAJOR_VERSION >= 3 - float_value = PyFloat_FromString(obj); -#else - float_value = PyFloat_FromString(obj, 0); -#endif - } else { - PyObject* args = PyTuple_New(1); - if (unlikely(!args)) goto bad; - PyTuple_SET_ITEM(args, 0, obj); - float_value = PyObject_Call((PyObject*)&PyFloat_Type, args, 0); - PyTuple_SET_ITEM(args, 0, 0); - Py_DECREF(args); - } -#endif - if (likely(float_value)) { - double value = PyFloat_AS_DOUBLE(float_value); - Py_DECREF(float_value); - return value; - } -bad: - return (double)-1; -} - -/* PyFloatBinop */ -#if !CYTHON_COMPILING_IN_PYPY -static PyObject* __Pyx_PyFloat_AddCObj(PyObject *op1, PyObject *op2, double floatval, int inplace, int zerodivision_check) { - const double a = floatval; - double b, result; - (void)inplace; - (void)zerodivision_check; - if (likely(PyFloat_CheckExact(op2))) { - b = PyFloat_AS_DOUBLE(op2); - - } else - #if PY_MAJOR_VERSION < 3 - if (likely(PyInt_CheckExact(op2))) { - b = (double) PyInt_AS_LONG(op2); - - } else - #endif - if (likely(PyLong_CheckExact(op2))) { - #if CYTHON_USE_PYLONG_INTERNALS - const digit* digits = ((PyLongObject*)op2)->ob_digit; - const Py_ssize_t size = Py_SIZE(op2); - switch (size) { - case 0: b = 0.0; break; - case -1: b = -(double) digits[0]; break; - case 1: b = (double) digits[0]; break; - case -2: - case 2: - if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT && ((8 * sizeof(unsigned long) < 53) || (1 * PyLong_SHIFT < 53))) { - b = (double) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); - if ((8 * sizeof(unsigned long) < 53) || (2 * PyLong_SHIFT < 53) || (b < (double) ((PY_LONG_LONG)1 << 53))) { - if (size == -2) - b = -b; - break; - } - } - CYTHON_FALLTHROUGH; - case -3: - case 3: - if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT && ((8 * sizeof(unsigned long) < 53) || (2 * PyLong_SHIFT < 53))) { - b = (double) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); - if ((8 * sizeof(unsigned long) < 53) || (3 * PyLong_SHIFT < 53) || (b < (double) ((PY_LONG_LONG)1 << 53))) { - if (size == -3) - b = -b; - break; - } - } - CYTHON_FALLTHROUGH; - case -4: - case 4: - if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT && ((8 * sizeof(unsigned long) < 53) || (3 * PyLong_SHIFT < 53))) { - b = (double) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); - if ((8 * sizeof(unsigned long) < 53) || (4 * PyLong_SHIFT < 53) || (b < (double) ((PY_LONG_LONG)1 << 53))) { - if (size == -4) - b = -b; - break; - } - } - CYTHON_FALLTHROUGH; - default: - #else - { - #endif - b = PyLong_AsDouble(op2); - if (unlikely(b == -1.0 && PyErr_Occurred())) return NULL; - - } - } else { - return (inplace ? PyNumber_InPlaceAdd : PyNumber_Add)(op1, op2); - } - - PyFPE_START_PROTECT("add", return NULL) - result = a + b; - PyFPE_END_PROTECT(result) - return PyFloat_FromDouble(result); -} -#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; -} - -/* 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; -} - -/* 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 - -/* 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 - -/* 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); - 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 __PYX_GOOD; -#else - if (PyObject_HasAttr(type_obj, __pyx_n_s_getstate)) goto __PYX_GOOD; -#endif -#if CYTHON_USE_PYTYPE_LOOKUP - object_reduce_ex = _PyType_Lookup(&PyBaseObject_Type, __pyx_n_s_reduce_ex); if (!object_reduce_ex) goto __PYX_BAD; -#else - object_reduce_ex = __Pyx_PyObject_GetAttrStr((PyObject*)&PyBaseObject_Type, __pyx_n_s_reduce_ex); if (!object_reduce_ex) goto __PYX_BAD; -#endif - reduce_ex = __Pyx_PyObject_GetAttrStr(type_obj, __pyx_n_s_reduce_ex); if (unlikely(!reduce_ex)) goto __PYX_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 __PYX_BAD; -#else - object_reduce = __Pyx_PyObject_GetAttrStr((PyObject*)&PyBaseObject_Type, __pyx_n_s_reduce); if (!object_reduce) goto __PYX_BAD; -#endif - reduce = __Pyx_PyObject_GetAttrStr(type_obj, __pyx_n_s_reduce); if (unlikely(!reduce)) goto __PYX_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 __PYX_BAD; - ret = PyDict_SetItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_reduce, reduce_cython); if (unlikely(ret < 0)) goto __PYX_BAD; - ret = PyDict_DelItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_reduce_cython); if (unlikely(ret < 0)) goto __PYX_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 __PYX_BAD; - ret = PyDict_SetItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_setstate, setstate_cython); if (unlikely(ret < 0)) goto __PYX_BAD; - ret = PyDict_DelItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_setstate_cython); if (unlikely(ret < 0)) goto __PYX_BAD; - } - PyType_Modified((PyTypeObject*)type_obj); - } - } - goto __PYX_GOOD; -__PYX_BAD: - if (!PyErr_Occurred()) - PyErr_Format(PyExc_RuntimeError, "Unable to initialize pickling for %s", ((PyTypeObject*)type_obj)->tp_name); - ret = -1; -__PYX_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; -} - -/* 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; -} - -/* 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 -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("", - op->func_qualname, (void *)op); -#else - return PyString_FromFormat("", - 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 -#if PY_VERSION_HEX >= 0x030800b1 - 0, -#endif -#if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000 - 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); -} - -/* 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; -} - -/* 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); -} - -/* 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); - } -} - -/* 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;\ - } - -/* Print */ - #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION < 3 -static PyObject *__Pyx_GetStdout(void) { - PyObject *f = PySys_GetObject((char *)"stdout"); - if (!f) { - PyErr_SetString(PyExc_RuntimeError, "lost sys.stdout"); - } - return f; -} -static int __Pyx_Print(PyObject* f, PyObject *arg_tuple, int newline) { - int i; - if (!f) { - if (!(f = __Pyx_GetStdout())) - return -1; - } - Py_INCREF(f); - for (i=0; i < PyTuple_GET_SIZE(arg_tuple); i++) { - PyObject* v; - if (PyFile_SoftSpace(f, 1)) { - if (PyFile_WriteString(" ", f) < 0) - goto error; - } - v = PyTuple_GET_ITEM(arg_tuple, i); - if (PyFile_WriteObject(v, f, Py_PRINT_RAW) < 0) - goto error; - if (PyString_Check(v)) { - char *s = PyString_AsString(v); - Py_ssize_t len = PyString_Size(v); - if (len > 0) { - switch (s[len-1]) { - case ' ': break; - case '\f': case '\r': case '\n': case '\t': case '\v': - PyFile_SoftSpace(f, 0); - break; - default: break; - } - } - } - } - if (newline) { - if (PyFile_WriteString("\n", f) < 0) - goto error; - PyFile_SoftSpace(f, 0); - } - Py_DECREF(f); - return 0; -error: - Py_DECREF(f); - return -1; -} -#else -static int __Pyx_Print(PyObject* stream, PyObject *arg_tuple, int newline) { - PyObject* kwargs = 0; - PyObject* result = 0; - PyObject* end_string; - if (unlikely(!__pyx_print)) { - __pyx_print = PyObject_GetAttr(__pyx_b, __pyx_n_s_print); - if (!__pyx_print) - return -1; - } - if (stream) { - kwargs = PyDict_New(); - if (unlikely(!kwargs)) - return -1; - if (unlikely(PyDict_SetItem(kwargs, __pyx_n_s_file, stream) < 0)) - goto bad; - if (!newline) { - end_string = PyUnicode_FromStringAndSize(" ", 1); - if (unlikely(!end_string)) - goto bad; - if (PyDict_SetItem(kwargs, __pyx_n_s_end, end_string) < 0) { - Py_DECREF(end_string); - goto bad; - } - Py_DECREF(end_string); - } - } else if (!newline) { - if (unlikely(!__pyx_print_kwargs)) { - __pyx_print_kwargs = PyDict_New(); - if (unlikely(!__pyx_print_kwargs)) - return -1; - end_string = PyUnicode_FromStringAndSize(" ", 1); - if (unlikely(!end_string)) - return -1; - if (PyDict_SetItem(__pyx_print_kwargs, __pyx_n_s_end, end_string) < 0) { - Py_DECREF(end_string); - return -1; - } - Py_DECREF(end_string); - } - kwargs = __pyx_print_kwargs; - } - result = PyObject_Call(__pyx_print, arg_tuple, kwargs); - if (unlikely(kwargs) && (kwargs != __pyx_print_kwargs)) - Py_DECREF(kwargs); - if (!result) - return -1; - Py_DECREF(result); - return 0; -bad: - if (kwargs != __pyx_print_kwargs) - Py_XDECREF(kwargs); - return -1; -} -#endif - -/* 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); - } -} - -/* 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; -} - -/* PrintOne */ - #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION < 3 -static int __Pyx_PrintOne(PyObject* f, PyObject *o) { - if (!f) { - if (!(f = __Pyx_GetStdout())) - return -1; - } - Py_INCREF(f); - if (PyFile_SoftSpace(f, 0)) { - if (PyFile_WriteString(" ", f) < 0) - goto error; - } - if (PyFile_WriteObject(o, f, Py_PRINT_RAW) < 0) - goto error; - if (PyFile_WriteString("\n", f) < 0) - goto error; - Py_DECREF(f); - return 0; -error: - Py_DECREF(f); - return -1; - /* the line below is just to avoid C compiler - * warnings about unused functions */ - return __Pyx_Print(f, NULL, 0); -} -#else -static int __Pyx_PrintOne(PyObject* stream, PyObject *o) { - int res; - PyObject* arg_tuple = PyTuple_Pack(1, o); - if (unlikely(!arg_tuple)) - return -1; - res = __Pyx_Print(stream, arg_tuple, 1); - Py_DECREF(arg_tuple); - return res; -} -#endif - -/* 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; -} - -/* 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= 0x02070000 - cobj = PyCapsule_New(tmp.p, sig, 0); -#else - cobj = PyCObject_FromVoidPtrAndDesc(tmp.p, (void *)sig, 0); -#endif - if (!cobj) - goto bad; - if (PyDict_SetItemString(d, name, cobj) < 0) - goto bad; - Py_DECREF(cobj); - Py_DECREF(d); - return 0; -bad: - Py_XDECREF(cobj); - Py_XDECREF(d); - return -1; -} - -/* 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/fa2/__init__.py b/fa2_modified/__init__.py similarity index 100% rename from fa2/__init__.py rename to fa2_modified/__init__.py diff --git a/fa2/fa2util.pxd b/fa2_modified/fa2util.pxd similarity index 100% rename from fa2/fa2util.pxd rename to fa2_modified/fa2util.pxd diff --git a/fa2/fa2util.py b/fa2_modified/fa2util.py similarity index 100% rename from fa2/fa2util.py rename to fa2_modified/fa2util.py diff --git a/fa2/forceatlas2.py b/fa2_modified/forceatlas2.py similarity index 98% rename from fa2/forceatlas2.py rename to fa2_modified/forceatlas2.py index 5436e64..fa7a67e 100644 --- a/fa2/forceatlas2.py +++ b/fa2_modified/forceatlas2.py @@ -245,7 +245,7 @@ def forceatlas2_networkx_layout(self, G, pos=None, iterations=100, weight_attr=N or (cynetworkx and isinstance(G, cynetworkx.classes.graph.Graph)) ), "Not a networkx graph" assert isinstance(pos, dict) or (pos is None), "pos must be specified as a dictionary, as in networkx" - M = networkx.to_scipy_sparse_matrix(G, dtype='f', format='lil', weight=weight_attr) + M = networkx.to_scipy_sparse_array(G, dtype='f', format='lil', weight=weight_attr) if pos is None: l = self.forceatlas2(M, pos=None, iterations=iterations) else: @@ -272,7 +272,7 @@ def to_sparse(graph, weight_attr=None): edges.extend([(v, u) for u, v in edges]) weights.extend(weights) - return csr_matrix((weights, zip(*edges))) + return csr_matrix((weights, list(zip(*edges)))) assert isinstance(G, igraph.Graph), "Not a igraph graph" assert isinstance(pos, (list, numpy.ndarray)) or (pos is None), "pos must be a list or numpy array" diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..eb56957 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,2 @@ +[build-system] +requires = ["setuptools", "wheel", "Cython"] \ No newline at end of file diff --git a/setup.py b/setup.py index ce4eb50..4edec1f 100644 --- a/setup.py +++ b/setup.py @@ -3,7 +3,7 @@ from setuptools import setup -print("Installing fa2 package (fastest forceatlas2 python implementation)\n") +print("Installing fa2_modified package (fastest forceatlas2 python implementation)\n") here = path.abspath(path.dirname(__file__)) @@ -14,7 +14,7 @@ print(">>>> Cython is installed?") try: from Cython.Distutils import Extension - from Cython.Build import build_ext + from Cython.Build import build_ext, cythonize USE_CYTHON = True print('Yes\n') except ImportError: @@ -25,17 +25,17 @@ print(">>>> Are pre-generated C files available?") if USE_CYTHON: - ext_modules = [Extension('fa2.fa2util', ['fa2/fa2util.py', 'fa2/fa2util.pxd'], cython_directives={'language_level' : 3})] + ext_modules = cythonize([Extension('fa2_modified.fa2util', ['fa2_modified/fa2util.py'], cython_directives={'language_level' : 3})]) cmdclass = {'build_ext': build_ext} opts = {"ext_modules": ext_modules, "cmdclass": cmdclass} -elif path.isfile(path.join(here, 'fa2/fa2util.c')): +elif path.isfile(path.join(here, 'fa2_modified/fa2util.c')): print("Yes\n") - ext_modules = [Extension('fa2.fa2util', ['fa2/fa2util.c'])] + ext_modules = [Extension('fa2_modified.fa2util', ['fa2_modified/fa2util.c'])] cmdclass = {} opts = {"ext_modules": ext_modules, "cmdclass": cmdclass} else: print("Pre-generated C files are not available. This library will be slow without Cython optimizations.\n") - opts = {"py_modules": ["fa2.fa2util"]} + opts = {"py_modules": ["fa2_modified.fa2util"]} # Uncomment the following line if you want to install without optimizations # opts = {"py_modules": ["fa2.fa2util"]} @@ -43,17 +43,15 @@ print(">>>> Starting to install!\n") setup( - name='fa2', - version='0.3.5', + name='fa2_modified', + version='0.3.10', description='The fastest ForceAtlas2 algorithm for Python (and NetworkX)', long_description_content_type='text/markdown', long_description=long_description, - author='Bhargav Chippada', - author_email='bhargavchippada19@gmail.com', - url='https://github.com/bhargavchippada/forceatlas2', - download_url='https://github.com/bhargavchippada/forceatlas2/archive/v0.3.5.tar.gz', + author='Bhargav Chippada, Amin Alam', + url='https://github.com/AminAlam/forceatlas2_maintained', keywords=['forceatlas2', 'networkx', 'force-directed-graph', 'force-layout', 'graph'], - packages=['fa2'], + packages=['fa2_modified'], classifiers=[ 'Development Status :: 5 - Production/Stable', @@ -72,4 +70,4 @@ }, include_package_data=True, **opts -) \ No newline at end of file +)