{"id":26517607,"url":"https://github.com/borjaest/ndautomata","last_synced_at":"2026-05-19T10:34:02.649Z","repository":{"id":63723143,"uuid":"545341562","full_name":"BorjaEst/ndautomata","owner":"BorjaEst","description":"Multidimensional cellular automata in Python.","archived":false,"fork":false,"pushed_at":"2023-07-12T08:46:50.000Z","size":819,"stargazers_count":2,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-06-25T21:40:45.777Z","etag":null,"topics":["cellular-automata","cellular-automaton","game-of-life","numpy"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/BorjaEst.png","metadata":{"files":{"readme":"README.ipynb","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":"CITATION.cff","codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2022-10-04T07:37:57.000Z","updated_at":"2025-05-04T10:12:14.000Z","dependencies_parsed_at":"2025-04-13T11:39:42.888Z","dependency_job_id":"c69e4b38-d241-4941-978b-6bd7a20ea917","html_url":"https://github.com/BorjaEst/ndautomata","commit_stats":null,"previous_names":[],"tags_count":9,"template":false,"template_full_name":null,"purl":"pkg:github/BorjaEst/ndautomata","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BorjaEst%2Fndautomata","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BorjaEst%2Fndautomata/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BorjaEst%2Fndautomata/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BorjaEst%2Fndautomata/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/BorjaEst","download_url":"https://codeload.github.com/BorjaEst/ndautomata/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BorjaEst%2Fndautomata/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":267298756,"owners_count":24065889,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-07-27T02:00:11.917Z","response_time":82,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cellular-automata","cellular-automaton","game-of-life","numpy"],"created_at":"2025-03-21T08:27:46.378Z","updated_at":"2026-05-19T10:34:02.598Z","avatar_url":"https://github.com/BorjaEst.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"\u003ch1 align=\\\"left\\\"\u003e\\n\",\n    \"\u003cimg src=\\\"README_files/ndautomata-logo.png\\\" width=\\\"600\\\"\u003e\\n\",\n    \"\u003c/h1\u003e\u003cbr\u003e\\n\",\n    \"\\n\",\n    \"![qc.sec](https://github.com/BorjaEst/ndautomata/actions/workflows/qc-sec.yml/badge.svg)\\n\",\n    \"![qc.sty](https://github.com/BorjaEst/ndautomata/actions/workflows/qc-sty.yml/badge.svg)\\n\",\n    \"![qc.uni](https://github.com/BorjaEst/ndautomata/actions/workflows/qc-uni.yml/badge.svg)\\n\",\n    \"[![DOI](https://zenodo.org/badge/545341562.svg)](https://zenodo.org/badge/latestdoi/545341562)\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Awesome cellular automata library created by Borja Esteban.\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## Install it from PyPI\\n\",\n    \"\\n\",\n    \"```bash\\n\",\n    \"$ pip install ndautomata\\n\",\n    \"```\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## Usage\\n\",\n    \"\\n\",\n    \"This package is designed in order to create your own automata definitions based on 2 attributes:\\n\",\n    \"\\n\",\n    \"- **neighbours**: List with relative indexes to cell neighbours.\\n\",\n    \"- **states**: Number possible cell states.\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"from ndautomata import BaseAutomaton, neighbours\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 1,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"class Automaton(BaseAutomaton):\\n\",\n    \"    neighbours = neighbours.regular(ndim=1, r=1)\\n\",\n    \"    states = 2\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"\u003e Note the automata dimensions are defined with `neighbours.ndim`.\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"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\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"from ndautomata import initializers\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 2,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"rule = initializers.random(states=2, size=[2, 2, 2])\\n\",\n    \"ic = initializers.center(states=2, size=[200])\\n\",\n    \"ca = Automaton(ic, rule)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"\u003e Note the shape of the rule must always be `[states] * neighbours.size`.\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Plot the cellular automaton using matplotlib or your favorite tool.\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"import matplotlib.pyplot as plt\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 3,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"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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\",\n      \"text/plain\": [\n       \"\u003cFigure size 960x480 with 1 Axes\u003e\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"plt.rcParams[\\\"image.cmap\\\"] = \\\"binary\\\"\\n\",\n    \"plt.matshow([next(ca) for _ in range(100)])\\n\",\n    \"plt.show()\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"See [examples](/examples) for more detailed use cases and examples on how to generate some plots.\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## Development\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"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\"\n   ]\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3.9.2 64-bit\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.9.2\"\n  },\n  \"orig_nbformat\": 4,\n  \"vscode\": {\n   \"interpreter\": {\n    \"hash\": \"31f2aee4e71d21fbe5cf8b01ff0e069b9275f58929596ceb00d14d90e3e16cd6\"\n   }\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 2\n}\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fborjaest%2Fndautomata","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fborjaest%2Fndautomata","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fborjaest%2Fndautomata/lists"}