From 0e111771ced1df4177ada3b7170d27a80ab5df67 Mon Sep 17 00:00:00 2001 From: James Lawlor Date: Sat, 30 Mar 2024 10:59:33 +0200 Subject: [PATCH] standardise turmite naming across repo --- README.md | 4 +- pyproject.toml | 10 +- src/langton_ant/ants/__init__.py | 0 src/langton_ant/main.py | 17 --- src/{langton_ant => pyturmite}/__init__.py | 0 src/{langton_ant => pyturmite}/constants.py | 0 src/pyturmite/main.py | 17 +++ .../ants/langton.py => pyturmite/turmites.py} | 6 +- .../utils/input_handling.py | 2 +- .../utils/plotters.py | 40 +++--- tests/ants/test_langton.py | 120 ------------------ tests/test_turmites.py | 120 ++++++++++++++++++ 12 files changed, 168 insertions(+), 168 deletions(-) delete mode 100644 src/langton_ant/ants/__init__.py delete mode 100644 src/langton_ant/main.py rename src/{langton_ant => pyturmite}/__init__.py (100%) rename src/{langton_ant => pyturmite}/constants.py (100%) create mode 100644 src/pyturmite/main.py rename src/{langton_ant/ants/langton.py => pyturmite/turmites.py} (95%) rename src/{langton_ant => pyturmite}/utils/input_handling.py (92%) rename src/{langton_ant => pyturmite}/utils/plotters.py (61%) delete mode 100644 tests/ants/test_langton.py create mode 100644 tests/test_turmites.py diff --git a/README.md b/README.md index 63b149c..99645ed 100644 --- a/README.md +++ b/README.md @@ -8,9 +8,9 @@ https://github.com/jameslawlor/pyturmite/assets/3987960/072c9380-4971-4256-a6bf- # Usage -Set run parameters in `src/langton_ant/constants.py` +Set run parameters in `src/pyturmite/constants.py` ``` pip install -r requirements.txt pip install -e . -python src/langton_ant/main.py +python src/pyturmite/main.py ``` diff --git a/pyproject.toml b/pyproject.toml index ba51829..6f1b136 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,12 +1,12 @@ [project] -name = "langton-ant" +name = "pyturmite" version = "0.0.1" authors = [ { name="James Lawlor", email="jameslawlor1987@gmail.com" }, ] -description = "Langton's Ant" +description = "A package for generating turmites in Python" readme = "README.md" -requires-python = ">=3.8" +requires-python = ">=3.12" classifiers = [ "Programming Language :: Python :: 3", "License :: OSI Approved :: MIT License", @@ -14,14 +14,14 @@ classifiers = [ ] [project.urls] -Homepage = "https://github.com/jameslawlor/langton-ant" +Homepage = "https://github.com/jameslawlor/pyturmite" [build-system] requires = ["hatchling"] build-backend = "hatchling.build" [tool.hatch.build.targets.wheel] -packages = ["src/langton_ant"] +packages = ["src/pyturmite"] [tool.pytest.ini_options] pythonpath = "src" diff --git a/src/langton_ant/ants/__init__.py b/src/langton_ant/ants/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/src/langton_ant/main.py b/src/langton_ant/main.py deleted file mode 100644 index e019bbf..0000000 --- a/src/langton_ant/main.py +++ /dev/null @@ -1,17 +0,0 @@ -from langton_ant.ants.langton import LangtonAnt -from langton_ant.utils.plotters import Plotter -from langton_ant.utils.input_handling import parse_args - - -def main(): - args = parse_args() - ant = LangtonAnt() - - ant.init_grid(canvas_size=args.canvas_size) - - plotter = Plotter() - plotter.plot(ant=ant, n_steps=args.n_steps, mode=args.plot_mode) - - -if __name__ == "__main__": - main() diff --git a/src/langton_ant/__init__.py b/src/pyturmite/__init__.py similarity index 100% rename from src/langton_ant/__init__.py rename to src/pyturmite/__init__.py diff --git a/src/langton_ant/constants.py b/src/pyturmite/constants.py similarity index 100% rename from src/langton_ant/constants.py rename to src/pyturmite/constants.py diff --git a/src/pyturmite/main.py b/src/pyturmite/main.py new file mode 100644 index 0000000..03178cb --- /dev/null +++ b/src/pyturmite/main.py @@ -0,0 +1,17 @@ +from pyturmite.turmites import Turmite +from pyturmite.utils.plotters import Plotter +from pyturmite.utils.input_handling import parse_args + + +def main(): + args = parse_args() + turmite = Turmite() + + turmite.init_grid(canvas_size=args.canvas_size) + + plotter = Plotter() + plotter.plot(turmite=turmite, n_steps=args.n_steps, mode=args.plot_mode) + + +if __name__ == "__main__": + main() diff --git a/src/langton_ant/ants/langton.py b/src/pyturmite/turmites.py similarity index 95% rename from src/langton_ant/ants/langton.py rename to src/pyturmite/turmites.py index b41f91a..abe0057 100644 --- a/src/langton_ant/ants/langton.py +++ b/src/pyturmite/turmites.py @@ -1,17 +1,17 @@ import numpy as np import matplotlib.pylab as plt -from langton_ant.constants import CMAP, RULESET +from pyturmite.constants import CMAP, RULESET """ The colors are modified in a cyclic fashion. A simple naming scheme is used: for each of the successive colors, a letter "L" or "R" is used to indicate whether a left or right turn should be taken. -Langton's ant has the name "RL" in this naming scheme. +Langton's turmite has the name "RL" in this naming scheme. """ -class LangtonAnt: +class Turmite: def __init__( self, x0=0, diff --git a/src/langton_ant/utils/input_handling.py b/src/pyturmite/utils/input_handling.py similarity index 92% rename from src/langton_ant/utils/input_handling.py rename to src/pyturmite/utils/input_handling.py index 3e19fae..5ef01ee 100644 --- a/src/langton_ant/utils/input_handling.py +++ b/src/pyturmite/utils/input_handling.py @@ -1,5 +1,5 @@ import argparse -from langton_ant.constants import ( +from pyturmite.constants import ( CANVAS_SIZE, N_STEPS, PLOT_MODE, diff --git a/src/langton_ant/utils/plotters.py b/src/pyturmite/utils/plotters.py similarity index 61% rename from src/langton_ant/utils/plotters.py rename to src/pyturmite/utils/plotters.py index c7e5024..fe3a41e 100644 --- a/src/langton_ant/utils/plotters.py +++ b/src/pyturmite/utils/plotters.py @@ -2,57 +2,57 @@ import numpy as np from matplotlib.animation import FuncAnimation from functools import partial -from langton_ant.constants import ANIMATION_INTERVAL +from pyturmite.constants import ANIMATION_INTERVAL class Plotter: def __init__(self): - self.ant = None + self.turmite = None - def plot(self, ant, n_steps, mode): + def plot(self, turmite, n_steps, mode): if mode == "static": - self.static_plot(ant, n_steps) + self.static_plot(turmite, n_steps) elif mode == "animate": - self.animate(ant, n_steps) + self.animate(turmite, n_steps) def static_plot( self, - ant, + turmite, N_STEPS, ): for _ in range(N_STEPS): - ant.update() + turmite.update() - data = np.array(ant.grid) - data[ant.x][ant.y] = ant.n_colours + 1 + data = np.array(turmite.grid) + data[turmite.x][turmite.y] = turmite.n_colours + 1 plt.figure() plt.imshow( data, interpolation="none", vmin=0, - vmax=ant.n_colours + 1, - cmap=ant.cmap, + vmax=turmite.n_colours + 1, + cmap=turmite.cmap, ) plt.show() - def animate(self, ant, n_steps): + def animate(self, turmite, n_steps): fig = plt.figure() im = plt.imshow( - ant.grid, + turmite.grid, interpolation="none", vmin=0, - vmax=ant.n_colours + 1, - cmap=ant.cmap, + vmax=turmite.n_colours + 1, + cmap=turmite.cmap, ) plt.axis("off") - def update(step, ant, skip=5): + def update(step, turmite, skip=5): for _ in range(skip): - ant.update() - data = np.array(ant.grid) - data[ant.x][ant.y] = ant.n_colours + 1 + turmite.update() + data = np.array(turmite.grid) + data[turmite.x][turmite.y] = turmite.n_colours + 1 im.set_data(data) return [im] @@ -60,7 +60,7 @@ def update(step, ant, skip=5): fig, partial( update, - ant=ant, + turmite=turmite, ), frames=n_steps, interval=ANIMATION_INTERVAL, diff --git a/tests/ants/test_langton.py b/tests/ants/test_langton.py deleted file mode 100644 index b841d77..0000000 --- a/tests/ants/test_langton.py +++ /dev/null @@ -1,120 +0,0 @@ -from langton_ant.ants.langton import LangtonAnt - -import unittest - - -class LangtonAntTest(unittest.TestCase): - def test_initial_state(self): - """ - Tests the initial state of the Langton ant. - """ - ant = LangtonAnt() - self.assertEqual(ant.x, 0) - self.assertEqual(ant.y, 0) - self.assertEqual(ant.dir, "u") - - def test_turn_clockwise(self): - """ - Tests turning the ant clockwise. - """ - ant = LangtonAnt() - - # Up -> Right - ant.turn_clockwise() - self.assertEqual(ant.dir, "r") - - # Right -> Down - ant.turn_clockwise() - self.assertEqual(ant.dir, "d") - - # Down -> Left - ant.turn_clockwise() - self.assertEqual(ant.dir, "l") - - # Left -> Up (wrap around) - ant.turn_clockwise() - self.assertEqual(ant.dir, "u") - - def test_turn_counter_clockwise(self): - """ - Tests turning the ant counter-clockwise. - """ - ant = LangtonAnt() - - # Up -> Left - ant.turn_counter_clockwise() - self.assertEqual(ant.dir, "l") - - # Left -> Down - ant.turn_counter_clockwise() - self.assertEqual(ant.dir, "d") - - # Down -> Right - ant.turn_counter_clockwise() - self.assertEqual(ant.dir, "r") - - # Right -> Up (wrap around) - ant.turn_counter_clockwise() - self.assertEqual(ant.dir, "u") - - def test_move_up(self): - """ - Tests moving the ant upwards. - """ - ant = LangtonAnt() - ant.dir = "u" - ant.move() - self.assertEqual(ant.x, 0) - self.assertEqual(ant.y, 1) - - def test_move_down(self): - """ - Tests moving the ant downwards. - """ - ant = LangtonAnt() - ant.dir = "d" - ant.move() - self.assertEqual(ant.x, 0) - self.assertEqual(ant.y, -1) - - def test_move_left(self): - """ - Tests moving the ant left. - """ - ant = LangtonAnt() - ant.dir = "l" - ant.move() - self.assertEqual(ant.x, -1) - self.assertEqual(ant.y, 0) - - def test_move_right(self): - """ - Tests moving the ant right. - """ - ant = LangtonAnt() - ant.dir = "r" - ant.move() - self.assertEqual(ant.x, 1) - self.assertEqual(ant.y, 0) - - def test_init_grid(self): - """ - Test grid initialisation - """ - ant = LangtonAnt() - ant.init_grid(canvas_size=4) - self.assertEqual(ant.x, 2) - self.assertEqual(ant.y, 2) - - def test_init_grid_no_offset(self): - """ - Test grid initialisation without offseting ant position - """ - ant = LangtonAnt() - ant.init_grid(canvas_size=4, offset=False) - self.assertEqual(ant.x, 0) - self.assertEqual(ant.y, 0) - - -if __name__ == "__main__": - unittest.main() diff --git a/tests/test_turmites.py b/tests/test_turmites.py new file mode 100644 index 0000000..f2f647a --- /dev/null +++ b/tests/test_turmites.py @@ -0,0 +1,120 @@ +from pyturmite.turmites import Turmite + +import unittest + + +class TurmiteTest(unittest.TestCase): + def test_initial_state(self): + """ + Tests the initial state of the turmite + """ + turmite = Turmite() + self.assertEqual(turmite.x, 0) + self.assertEqual(turmite.y, 0) + self.assertEqual(turmite.dir, "u") + + def test_turn_clockwise(self): + """ + Tests turning the turmite clockwise. + """ + turmite = Turmite() + + # Up -> Right + turmite.turn_clockwise() + self.assertEqual(turmite.dir, "r") + + # Right -> Down + turmite.turn_clockwise() + self.assertEqual(turmite.dir, "d") + + # Down -> Left + turmite.turn_clockwise() + self.assertEqual(turmite.dir, "l") + + # Left -> Up (wrap around) + turmite.turn_clockwise() + self.assertEqual(turmite.dir, "u") + + def test_turn_counter_clockwise(self): + """ + Tests turning the turmite counter-clockwise. + """ + turmite = Turmite() + + # Up -> Left + turmite.turn_counter_clockwise() + self.assertEqual(turmite.dir, "l") + + # Left -> Down + turmite.turn_counter_clockwise() + self.assertEqual(turmite.dir, "d") + + # Down -> Right + turmite.turn_counter_clockwise() + self.assertEqual(turmite.dir, "r") + + # Right -> Up (wrap around) + turmite.turn_counter_clockwise() + self.assertEqual(turmite.dir, "u") + + def test_move_up(self): + """ + Tests moving the turmite upwards. + """ + turmite = Turmite() + turmite.dir = "u" + turmite.move() + self.assertEqual(turmite.x, 0) + self.assertEqual(turmite.y, 1) + + def test_move_down(self): + """ + Tests moving the turmite downwards. + """ + turmite = Turmite() + turmite.dir = "d" + turmite.move() + self.assertEqual(turmite.x, 0) + self.assertEqual(turmite.y, -1) + + def test_move_left(self): + """ + Tests moving the turmite left. + """ + turmite = Turmite() + turmite.dir = "l" + turmite.move() + self.assertEqual(turmite.x, -1) + self.assertEqual(turmite.y, 0) + + def test_move_right(self): + """ + Tests moving the turmite right. + """ + turmite = Turmite() + turmite.dir = "r" + turmite.move() + self.assertEqual(turmite.x, 1) + self.assertEqual(turmite.y, 0) + + def test_init_grid(self): + """ + Test grid initialisation + """ + turmite = Turmite() + turmite.init_grid(canvas_size=4) + self.assertEqual(turmite.x, 2) + self.assertEqual(turmite.y, 2) + + def test_init_grid_no_offset(self): + """ + Test grid initialisation without offseting turmite position + """ + turmite = Turmite() + turmite.init_grid(canvas_size=4, offset=False) + self.assertEqual(turmite.x, 0) + self.assertEqual(turmite.y, 0) + + +if __name__ == "__main__": + unittest.main()