# ๐ค Automata Diags
[](https://pypi.org/project/automata-diags/)
[](https://pypi.org/project/automata-diags/)
[](https://opensource.org/licenses/MIT)
[](https://automata-diags.readthedocs.io/en/latest/?badge=latest)
A powerful, modern, and educational Python toolkit for automata theory. Visualize DFAs, NFAs, CFGs, minimize automata, and more with an elegant, type-safe API.
**For the full, comprehensive documentation including tutorials and the API reference, please visit our [Documentation Website](https://automata-diags.readthedocs.io/).**
## ๐ค Why Automata Diags?
| Feature | Why It Matters |
| :---------------------- | :------------------------------------------------------------------------------------------------------------------------- |
| **Complete Toolset** | From basic DFAs to complex CFG conversions, all the tools you need for a typical Theory of Computation course are in one place. |
| **Educational Focus** | The API is designed to be intuitive and map closely to textbook concepts, making it an excellent companion for students. |
| **Advanced Algorithms** | Includes research-grade implementations like Hopcroft's minimization, setting it apart from simpler libraries. |
| **Instant Visualization**| Don't just build automataโsee them. Instant visual feedback helps solidify complex concepts and makes debugging intuitive. |
| **Modern & Maintained** | Built with modern Python (type hints, clean architecture) and actively maintained for correctness and new features. |
## ๐ฆ Installation
```bash
pip install automata-diags
```
Requires Python 3.8+ and Graphviz.
## ๐ Quick Start
```python
from automata.backend.grammar.dist import State, Symbol
from automata.backend.grammar.regular_languages.dfa.dfa_mod import DFA
from automata.backend.drawings.automata_drawer import AutomataDrawer
# Create a simple DFA
# For more creation methods, see the full documentation.
dfa = DFA.from_string("q0,a,q1;q1,b,q2", start_state="q0", accept_states={"q2"})
# Test it
dfa.accepts([Symbol('a'), Symbol('b')]) # True
# Visualize it
drawer = AutomataDrawer()
drawer.draw_dfa_from_object(dfa, "my_first_dfa")
```
**For more examples and detailed guides, please visit the [Full Documentation Site](https://automata-diags.readthedocs.io/).**
## ๐ค Contributing
Contributions are welcome! Please feel free to open a pull request or submit an issue on our [GitHub repository](https://github.com/Ajodo-Godson/automata_diags).
## ๐ License
This project is licensed under the MIT License.
Raw data
{
"_id": null,
"home_page": null,
"name": "automata-diags",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.8",
"maintainer_email": null,
"keywords": "CFG, DFA, NFA, PDA, automata, computer-science, education, finite-automata, formal-languages, graph-theory, visualization",
"author": null,
"author_email": "Godson Ajodo <godson@uni.minerva.edu>",
"download_url": "https://files.pythonhosted.org/packages/17/71/ad0f2e64a6ed527988ad68349a7d3963015ce08f7bd04623d9db29656ddf/automata_diags-0.2.5.tar.gz",
"platform": null,
"description": "# \ud83e\udd16 Automata Diags\n\n[](https://pypi.org/project/automata-diags/)\n[](https://pypi.org/project/automata-diags/)\n[](https://opensource.org/licenses/MIT)\n[](https://automata-diags.readthedocs.io/en/latest/?badge=latest)\n\nA powerful, modern, and educational Python toolkit for automata theory. Visualize DFAs, NFAs, CFGs, minimize automata, and more with an elegant, type-safe API.\n\n**For the full, comprehensive documentation including tutorials and the API reference, please visit our [Documentation Website](https://automata-diags.readthedocs.io/).**\n\n## \ud83e\udd14 Why Automata Diags?\n\n| Feature | Why It Matters |\n| :---------------------- | :------------------------------------------------------------------------------------------------------------------------- |\n| **Complete Toolset** | From basic DFAs to complex CFG conversions, all the tools you need for a typical Theory of Computation course are in one place. |\n| **Educational Focus** | The API is designed to be intuitive and map closely to textbook concepts, making it an excellent companion for students. |\n| **Advanced Algorithms** | Includes research-grade implementations like Hopcroft's minimization, setting it apart from simpler libraries. |\n| **Instant Visualization**| Don't just build automata\u2014see them. Instant visual feedback helps solidify complex concepts and makes debugging intuitive. |\n| **Modern & Maintained** | Built with modern Python (type hints, clean architecture) and actively maintained for correctness and new features. |\n\n## \ud83d\udce6 Installation\n\n```bash\npip install automata-diags\n```\nRequires Python 3.8+ and Graphviz.\n\n## \ud83d\ude80 Quick Start\n\n```python\nfrom automata.backend.grammar.dist import State, Symbol\nfrom automata.backend.grammar.regular_languages.dfa.dfa_mod import DFA\nfrom automata.backend.drawings.automata_drawer import AutomataDrawer\n\n# Create a simple DFA\n# For more creation methods, see the full documentation.\ndfa = DFA.from_string(\"q0,a,q1;q1,b,q2\", start_state=\"q0\", accept_states={\"q2\"})\n\n# Test it\ndfa.accepts([Symbol('a'), Symbol('b')]) # True\n\n# Visualize it\ndrawer = AutomataDrawer()\ndrawer.draw_dfa_from_object(dfa, \"my_first_dfa\")\n```\n**For more examples and detailed guides, please visit the [Full Documentation Site](https://automata-diags.readthedocs.io/).**\n\n## \ud83e\udd1d Contributing\n\nContributions are welcome! Please feel free to open a pull request or submit an issue on our [GitHub repository](https://github.com/Ajodo-Godson/automata_diags).\n\n## \ud83d\udcc4 License\n\nThis project is licensed under the MIT License. \n\n\n",
"bugtrack_url": null,
"license": null,
"summary": "\ud83e\udd16 A powerful, modern, and educational Python toolkit for automata theory. Visualize DFAs, NFAs, CFGs, minimize automata, and more with an elegant, type-safe API.",
"version": "0.2.5",
"project_urls": {
"Bug Tracker": "https://github.com/Ajodo-Godson/automata_diags/issues",
"Documentation": "https://automata-diags.readthedocs.io/",
"Homepage": "https://github.com/Ajodo-Godson/automata_diags"
},
"split_keywords": [
"cfg",
" dfa",
" nfa",
" pda",
" automata",
" computer-science",
" education",
" finite-automata",
" formal-languages",
" graph-theory",
" visualization"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "83cf123ff4e667126cec8e7e70a13aabff32c0cee8198ef3767db9bbc2cb30e7",
"md5": "a627d2ad4769bae37a2d5eec51f8bb90",
"sha256": "7ab88d29b23813681a02796295c9de75b655f29362b73b4cb99d8f5821a57c50"
},
"downloads": -1,
"filename": "automata_diags-0.2.5-py3-none-any.whl",
"has_sig": false,
"md5_digest": "a627d2ad4769bae37a2d5eec51f8bb90",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.8",
"size": 35073,
"upload_time": "2025-10-10T04:08:52",
"upload_time_iso_8601": "2025-10-10T04:08:52.757523Z",
"url": "https://files.pythonhosted.org/packages/83/cf/123ff4e667126cec8e7e70a13aabff32c0cee8198ef3767db9bbc2cb30e7/automata_diags-0.2.5-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "1771ad0f2e64a6ed527988ad68349a7d3963015ce08f7bd04623d9db29656ddf",
"md5": "44f9f65f60fa20cc5caf183b94683ad2",
"sha256": "d6126cb9ed36f6f1690f31f54b023626ad7893f5fef92c1bd64b0343f2a1eadf"
},
"downloads": -1,
"filename": "automata_diags-0.2.5.tar.gz",
"has_sig": false,
"md5_digest": "44f9f65f60fa20cc5caf183b94683ad2",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.8",
"size": 473303,
"upload_time": "2025-10-10T04:08:53",
"upload_time_iso_8601": "2025-10-10T04:08:53.845206Z",
"url": "https://files.pythonhosted.org/packages/17/71/ad0f2e64a6ed527988ad68349a7d3963015ce08f7bd04623d9db29656ddf/automata_diags-0.2.5.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-10-10 04:08:53",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "Ajodo-Godson",
"github_project": "automata_diags",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"requirements": [
{
"name": "graphviz",
"specs": [
[
">=",
"0.20.0"
]
]
},
{
"name": "pytest",
"specs": [
[
">=",
"7.0.0"
]
]
},
{
"name": "build",
"specs": [
[
">=",
"1.2.0"
]
]
},
{
"name": "twine",
"specs": [
[
">=",
"6.1.0"
]
]
},
{
"name": "pytest-cov",
"specs": [
[
">=",
"4.1.0"
]
]
},
{
"name": "black",
"specs": [
[
">=",
"24.1.0"
]
]
},
{
"name": "flake8",
"specs": [
[
">=",
"7.0.0"
]
]
},
{
"name": "mypy",
"specs": [
[
">=",
"1.8.0"
]
]
},
{
"name": "types-graphviz",
"specs": [
[
">=",
"0.20.1"
]
]
},
{
"name": "sphinx",
"specs": [
[
">=",
"7.2.0"
]
]
},
{
"name": "sphinx-rtd-theme",
"specs": [
[
">=",
"2.0.0"
]
]
},
{
"name": "myst-parser",
"specs": [
[
">=",
"2.0.0"
]
]
},
{
"name": "tox",
"specs": [
[
">=",
"4.12.0"
]
]
},
{
"name": "pre-commit",
"specs": [
[
">=",
"3.6.0"
]
]
}
],
"lcname": "automata-diags"
}