An open API service indexing awesome lists of open source software.

https://github.com/borjaest/ndautomata

Multidimensional cellular automata in Python.
https://github.com/borjaest/ndautomata

cellular-automata cellular-automaton game-of-life numpy

Last synced: 2 months ago
JSON representation

Multidimensional cellular automata in Python.

Awesome Lists containing this project

README

          

{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"

\n",
"\n",
"


\n",
"\n",
"![qc.sec](https://github.com/BorjaEst/ndautomata/actions/workflows/qc-sec.yml/badge.svg)\n",
"![qc.sty](https://github.com/BorjaEst/ndautomata/actions/workflows/qc-sty.yml/badge.svg)\n",
"![qc.uni](https://github.com/BorjaEst/ndautomata/actions/workflows/qc-uni.yml/badge.svg)\n",
"[![DOI](https://zenodo.org/badge/545341562.svg)](https://zenodo.org/badge/latestdoi/545341562)\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Awesome cellular automata library created by Borja Esteban.\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Install it from PyPI\n",
"\n",
"```bash\n",
"$ pip install ndautomata\n",
"```\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Usage\n",
"\n",
"This package is designed in order to create your own automata definitions based on 2 attributes:\n",
"\n",
"- **neighbours**: List with relative indexes to cell neighbours.\n",
"- **states**: Number possible cell states.\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"from ndautomata import BaseAutomaton, neighbours"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"class Automaton(BaseAutomaton):\n",
" neighbours = neighbours.regular(ndim=1, r=1)\n",
" states = 2"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"> Note the automata dimensions are defined with `neighbours.ndim`.\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"After you have defined your automaton, you can instantiate automata passing the initial configuration and the rule to the constructor function. Use the module `initializers`, based on [numpy](numpy.org/) to generate the required arrays passing the number of states and size.\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"from ndautomata import initializers"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"rule = initializers.random(states=2, size=[2, 2, 2])\n",
"ic = initializers.center(states=2, size=[200])\n",
"ca = Automaton(ic, rule)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"> Note the shape of the rule must always be `[states] * neighbours.size`.\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Plot the cellular automaton using matplotlib or your favorite tool.\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"import matplotlib.pyplot as plt"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAxcAAAGkCAYAAABD4djOAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/NK7nSAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAlLUlEQVR4nO3df5Bd1V0A8O8mTTYR2A0Jzf6QhKYVDbb8aAMsW6rjyE4Do4xIVOjEmRQZcNqAhhSR/JFQlDaC2jL8KLGdTsGx9AfjoNKZ0ulsbbAaAgZ11LYpVEaWpru01OyD1Gxicv2D4ZVNNrt73z1v333vfT4zb4a88847575z73v75ZzzvR1ZlmUBAABQ0LxGdwAAAGgNggsAACAJwQUAAJCE4AIAAEhCcAEAACQhuAAAAJIQXAAAAEkILgAAgCQEFwAAQBKCCwAAIInSBhf3339/vOUtb4lFixbFwMBAPPXUU43uEtTswx/+cHR0dEx6rF69ulp+8ODB2LhxYyxbtixOPvnkWLduXYyNjTWwxzCzJ554Ii6//PLo7++Pjo6O+Ju/+ZtJ5VmWxbZt26Kvry8WL14cQ0ND8eyzz056zY9+9KNYv359dHV1xZIlS+Laa6+NV199dQ6PAqY303n+/ve//7jv90svvXTSa5zntJNSBhdf+MIXYvPmzXHbbbfFM888E+eee26sXbs2XnrppUZ3DWr29re/Pb7//e9XH9/4xjeqZTfddFM89thj8cgjj8TOnTtj3759ceWVVzawtzCzAwcOxLnnnhv333//lOV33XVX3HPPPbFjx47YvXt3nHTSSbF27do4ePBg9TXr16+P//zP/4yvfvWr8aUvfSmeeOKJuP766+fqEGBGM53nERGXXnrppO/3z33uc5PKnee0layELrzwwmzjxo3Vfx85ciTr7+/Ptm/f3sBeQe1uu+227Nxzz52ybP/+/dmCBQuyRx55pPrct771rSwisl27ds1RD6GYiMgeffTR6r+PHj2a9fb2Zn/6p39afW7//v1ZZ2dn9rnPfS7Lsiz75je/mUVE9vTTT1df8+Uvfznr6OjIvve9781Z32G2jj3PsyzLNmzYkP3ar/3aCes4z2k3pZu5OHToUOzZsyeGhoaqz82bNy+GhoZi165dDewZFPPss89Gf39/vPWtb43169fHCy+8EBERe/bsicOHD08651evXh0rV650ztO0nn/++RgdHZ10Xnd3d8fAwED1vN61a1csWbIkzj///OprhoaGYt68ebF79+457zPU6utf/3osX748fu7nfi4+8IEPxMsvv1wtc57TbkoXXPzwhz+MI0eORE9Pz6Tne3p6YnR0tEG9gmIGBgbiwQcfjMcffzweeOCBeP755+MXfuEX4pVXXonR0dFYuHBhLFmyZFId5zzN7PVzd7rv8tHR0Vi+fPmk8je96U2xdOlS5z5N49JLL42//Mu/jOHh4bjzzjtj586dcdlll8WRI0ciwnlO+3lTozsA7eCyyy6r/vc555wTAwMDccYZZ8QXv/jFWLx4cQN7BkARV199dfW/zz777DjnnHPibW97W3z961+PSy65pIE9g8Yo3czFaaedFvPnzz8uU87Y2Fj09vY2qFeQ1pIlS+Jnf/Zn47nnnove3t44dOhQ7N+/f9JrnPM0s9fP3em+y3t7e49L1PF///d/8aMf/ci5T9N661vfGqeddlo899xzEeE8p/2ULrhYuHBhrFmzJoaHh6vPHT16NIaHh2NwcLCBPYN0Xn311fjud78bfX19sWbNmliwYMGkc37v3r3xwgsvOOdpWqtWrYre3t5J53WlUondu3dXz+vBwcHYv39/7Nmzp/qar33ta3H06NEYGBiY8z5DCi+++GK8/PLL0dfXFxHOc9pPKZdFbd68OTZs2BDnn39+XHjhhXH33XfHgQMH4pprrml016AmN998c1x++eVxxhlnxL59++K2226L+fPnx/ve977o7u6Oa6+9NjZv3hxLly6Nrq6uuPHGG2NwcDAuuuiiRncdTujVV1+t/t/ZiNc2cf/rv/5rLF26NFauXBmbNm2KO+64I84888xYtWpVbN26Nfr7++OKK66IiIizzjorLr300rjuuutix44dcfjw4bjhhhvi6quvjv7+/gYdFUw23Xm+dOnSuP3222PdunXR29sb3/3ud+OWW26Jn/mZn4m1a9dGhPOcNtTodFUncu+992YrV67MFi5cmF144YXZk08+2eguQc2uuuqqrK+vL1u4cGH20z/909lVV12VPffcc9Xy//3f/80++MEPZqeeemr2Uz/1U9mv//qvZ9///vcb2GOY2d///d9nEXHcY8OGDVmWvZaOduvWrVlPT0/W2dmZXXLJJdnevXsnvcfLL7+cve9978tOPvnkrKur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",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.rcParams[\"image.cmap\"] = \"binary\"\n",
"plt.matshow([next(ca) for _ in range(100)])\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"See [examples](/examples) for more detailed use cases and examples on how to generate some plots.\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Development\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Fork the repository, pick one of the issues at the [issues](https://github.com/BorjaEst/ndautomata/issues) and create a [Pull request](https://github.com/BorjaEst/ndautomata/pulls).\n"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3.9.2 64-bit",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.9.2"
},
"orig_nbformat": 4,
"vscode": {
"interpreter": {
"hash": "31f2aee4e71d21fbe5cf8b01ff0e069b9275f58929596ceb00d14d90e3e16cd6"
}
}
},
"nbformat": 4,
"nbformat_minor": 2
}