From ad7180098c7abdbb95f445187d28f6a654724af9 Mon Sep 17 00:00:00 2001
From: MLErik <baerenjesus@gmail.com>
Date: Sun, 13 Oct 2019 08:42:47 -0400
Subject: [PATCH] fixed grid mode distribution

---
 examples/introduction_flatland_2_1.py         |  10 +-
 flatland/envs/rail_generators.py              |  10 +-
 ...est_flatland_envs_sparse_rail_generator.py | 265 +++++++++---------
 3 files changed, 142 insertions(+), 143 deletions(-)

diff --git a/examples/introduction_flatland_2_1.py b/examples/introduction_flatland_2_1.py
index cb95a442..df7a4e2d 100644
--- a/examples/introduction_flatland_2_1.py
+++ b/examples/introduction_flatland_2_1.py
@@ -25,14 +25,14 @@ from flatland.utils.rendertools import RenderTool, AgentRenderVariant
 # The railway infrastructure can be build using any of the provided generators in env/rail_generators.py
 # Here we use the sparse_rail_generator with the following parameters
 
-width = 100  # With of map
-height = 100  # Height of map
-nr_trains = 200  # Number of trains that have an assigned task in the env
-cities_in_map = 20  # Number of cities where agents can start or end
+width = 50  # With of map
+height = 50  # Height of map
+nr_trains = 20  # Number of trains that have an assigned task in the env
+cities_in_map = 7  # Number of cities where agents can start or end
 seed = 14  # Random seed
 grid_distribution_of_cities = False  # Type of city distribution, if False cities are randomly placed
 max_rails_between_cities = 2  # Max number of tracks allowed between cities. This is number of entry point to a city
-max_rail_in_cities = 6  # Max number of parallel tracks within a city, representing a realistic trainstation
+max_rail_in_cities = 3  # Max number of parallel tracks within a city, representing a realistic trainstation
 
 rail_generator = sparse_rail_generator(max_num_cities=cities_in_map,
                                        seed=seed,
diff --git a/flatland/envs/rail_generators.py b/flatland/envs/rail_generators.py
index ced33635..6c9ec67d 100644
--- a/flatland/envs/rail_generators.py
+++ b/flatland/envs/rail_generators.py
@@ -642,23 +642,21 @@ def sparse_rail_generator(max_num_cities: int = 5, grid_mode: bool = False, max_
                 tries += 1
                 if tries > 200:
                     warnings.warn(
-                        "Could only set {} cities after {} tries, although {} of cities required to be generated!".format(
-                            # noqa
-                            len(city_positions),
-                            tries, num_cities))
+                        "Could not set all required cities!")
                     break
         return city_positions, city_cells
 
     def _generate_evenly_distr_city_positions(num_cities: int, city_radius: int, width: int, height: int,
                                               vector_field) -> (IntVector2DArray, IntVector2DArray):
         aspect_ratio = height / width
+
         cities_per_row = min(int(np.ceil(np.sqrt(num_cities * aspect_ratio))),
                              int((height - 2) / (2 * (city_radius + 1))))
         cities_per_col = min(int(np.ceil(num_cities / cities_per_row)),
                              int((width - 2) / (2 * (city_radius + 1))))
         num_build_cities = min(num_cities, cities_per_col * cities_per_row)
-        row_positions = np.linspace(city_radius + 1, height - 2 * (city_radius + 1), cities_per_row, dtype=int)
-        col_positions = np.linspace(city_radius + 1, width - 2 * (city_radius + 1), cities_per_col, dtype=int)
+        row_positions = np.linspace(city_radius + 2, height - (city_radius + 2), cities_per_row, dtype=int)
+        col_positions = np.linspace(city_radius + 2, width - (city_radius + 2), cities_per_col, dtype=int)
         city_positions = []
         city_cells = []
         for city_idx in range(num_build_cities):
diff --git a/tests/test_flatland_envs_sparse_rail_generator.py b/tests/test_flatland_envs_sparse_rail_generator.py
index 46556480..caf70251 100644
--- a/tests/test_flatland_envs_sparse_rail_generator.py
+++ b/tests/test_flatland_envs_sparse_rail_generator.py
@@ -535,12 +535,13 @@ def test_sparse_rail_generator_deterministic():
                   number_of_agents=1,
                   stochastic_data=stochastic_data,  # Malfunction data generator
                   )
-    # for r in range(env.height):
-    #   for c in range(env.width):
-    #       print("assert env.rail.get_full_transitions({}, {}) == {}, \"[{}][{}]\"".format(r, c,
-    #                                                                                       env.rail.get_full_transitions(
-    #                                                                                           r, c), r, c))
+     # for r in range(env.height):
+     #  for c in range(env.width):
+     #      print("assert env.rail.get_full_transitions({}, {}) == {}, \"[{}][{}]\"".format(r, c,
+     #                                                                                      env.rail.get_full_transitions(
+     #                                                                                          r, c), r, c))
 
+    assert env.rail.get_full_transitions(0, 0) == 0, "[0][0]"
     assert env.rail.get_full_transitions(0, 1) == 0, "[0][1]"
     assert env.rail.get_full_transitions(0, 2) == 0, "[0][2]"
     assert env.rail.get_full_transitions(0, 3) == 0, "[0][3]"
@@ -690,19 +691,19 @@ def test_sparse_rail_generator_deterministic():
     assert env.rail.get_full_transitions(5, 22) == 0, "[5][22]"
     assert env.rail.get_full_transitions(5, 23) == 0, "[5][23]"
     assert env.rail.get_full_transitions(5, 24) == 0, "[5][24]"
-    assert env.rail.get_full_transitions(6, 0) == 16386, "[6][0]"
-    assert env.rail.get_full_transitions(6, 1) == 1025, "[6][1]"
-    assert env.rail.get_full_transitions(6, 2) == 5633, "[6][2]"
-    assert env.rail.get_full_transitions(6, 3) == 17411, "[6][3]"
-    assert env.rail.get_full_transitions(6, 4) == 1025, "[6][4]"
-    assert env.rail.get_full_transitions(6, 5) == 1025, "[6][5]"
-    assert env.rail.get_full_transitions(6, 6) == 1025, "[6][6]"
-    assert env.rail.get_full_transitions(6, 7) == 1025, "[6][7]"
-    assert env.rail.get_full_transitions(6, 8) == 1025, "[6][8]"
-    assert env.rail.get_full_transitions(6, 9) == 5633, "[6][9]"
-    assert env.rail.get_full_transitions(6, 10) == 17411, "[6][10]"
-    assert env.rail.get_full_transitions(6, 11) == 1025, "[6][11]"
-    assert env.rail.get_full_transitions(6, 12) == 4608, "[6][12]"
+    assert env.rail.get_full_transitions(6, 0) == 0, "[6][0]"
+    assert env.rail.get_full_transitions(6, 1) == 0, "[6][1]"
+    assert env.rail.get_full_transitions(6, 2) == 0, "[6][2]"
+    assert env.rail.get_full_transitions(6, 3) == 0, "[6][3]"
+    assert env.rail.get_full_transitions(6, 4) == 0, "[6][4]"
+    assert env.rail.get_full_transitions(6, 5) == 0, "[6][5]"
+    assert env.rail.get_full_transitions(6, 6) == 0, "[6][6]"
+    assert env.rail.get_full_transitions(6, 7) == 0, "[6][7]"
+    assert env.rail.get_full_transitions(6, 8) == 0, "[6][8]"
+    assert env.rail.get_full_transitions(6, 9) == 0, "[6][9]"
+    assert env.rail.get_full_transitions(6, 10) == 0, "[6][10]"
+    assert env.rail.get_full_transitions(6, 11) == 0, "[6][11]"
+    assert env.rail.get_full_transitions(6, 12) == 0, "[6][12]"
     assert env.rail.get_full_transitions(6, 13) == 0, "[6][13]"
     assert env.rail.get_full_transitions(6, 14) == 0, "[6][14]"
     assert env.rail.get_full_transitions(6, 15) == 0, "[6][15]"
@@ -715,21 +716,21 @@ def test_sparse_rail_generator_deterministic():
     assert env.rail.get_full_transitions(6, 22) == 0, "[6][22]"
     assert env.rail.get_full_transitions(6, 23) == 0, "[6][23]"
     assert env.rail.get_full_transitions(6, 24) == 0, "[6][24]"
-    assert env.rail.get_full_transitions(7, 0) == 32800, "[7][0]"
-    assert env.rail.get_full_transitions(7, 1) == 0, "[7][1]"
-    assert env.rail.get_full_transitions(7, 2) == 72, "[7][2]"
-    assert env.rail.get_full_transitions(7, 3) == 3089, "[7][3]"
-    assert env.rail.get_full_transitions(7, 4) == 1025, "[7][4]"
+    assert env.rail.get_full_transitions(7, 0) == 16386, "[7][0]"
+    assert env.rail.get_full_transitions(7, 1) == 17411, "[7][1]"
+    assert env.rail.get_full_transitions(7, 2) == 1025, "[7][2]"
+    assert env.rail.get_full_transitions(7, 3) == 5633, "[7][3]"
+    assert env.rail.get_full_transitions(7, 4) == 17411, "[7][4]"
     assert env.rail.get_full_transitions(7, 5) == 1025, "[7][5]"
     assert env.rail.get_full_transitions(7, 6) == 1025, "[7][6]"
     assert env.rail.get_full_transitions(7, 7) == 1025, "[7][7]"
     assert env.rail.get_full_transitions(7, 8) == 1025, "[7][8]"
-    assert env.rail.get_full_transitions(7, 9) == 1097, "[7][9]"
-    assert env.rail.get_full_transitions(7, 10) == 2064, "[7][10]"
-    assert env.rail.get_full_transitions(7, 11) == 0, "[7][11]"
-    assert env.rail.get_full_transitions(7, 12) == 32800, "[7][12]"
-    assert env.rail.get_full_transitions(7, 13) == 0, "[7][13]"
-    assert env.rail.get_full_transitions(7, 14) == 0, "[7][14]"
+    assert env.rail.get_full_transitions(7, 9) == 1025, "[7][9]"
+    assert env.rail.get_full_transitions(7, 10) == 5633, "[7][10]"
+    assert env.rail.get_full_transitions(7, 11) == 17411, "[7][11]"
+    assert env.rail.get_full_transitions(7, 12) == 1025, "[7][12]"
+    assert env.rail.get_full_transitions(7, 13) == 5633, "[7][13]"
+    assert env.rail.get_full_transitions(7, 14) == 4608, "[7][14]"
     assert env.rail.get_full_transitions(7, 15) == 0, "[7][15]"
     assert env.rail.get_full_transitions(7, 16) == 0, "[7][16]"
     assert env.rail.get_full_transitions(7, 17) == 0, "[7][17]"
@@ -741,20 +742,20 @@ def test_sparse_rail_generator_deterministic():
     assert env.rail.get_full_transitions(7, 23) == 0, "[7][23]"
     assert env.rail.get_full_transitions(7, 24) == 0, "[7][24]"
     assert env.rail.get_full_transitions(8, 0) == 32800, "[8][0]"
-    assert env.rail.get_full_transitions(8, 1) == 0, "[8][1]"
+    assert env.rail.get_full_transitions(8, 1) == 32800, "[8][1]"
     assert env.rail.get_full_transitions(8, 2) == 0, "[8][2]"
-    assert env.rail.get_full_transitions(8, 3) == 0, "[8][3]"
-    assert env.rail.get_full_transitions(8, 4) == 0, "[8][4]"
-    assert env.rail.get_full_transitions(8, 5) == 0, "[8][5]"
-    assert env.rail.get_full_transitions(8, 6) == 0, "[8][6]"
-    assert env.rail.get_full_transitions(8, 7) == 0, "[8][7]"
-    assert env.rail.get_full_transitions(8, 8) == 0, "[8][8]"
-    assert env.rail.get_full_transitions(8, 9) == 0, "[8][9]"
-    assert env.rail.get_full_transitions(8, 10) == 0, "[8][10]"
-    assert env.rail.get_full_transitions(8, 11) == 0, "[8][11]"
-    assert env.rail.get_full_transitions(8, 12) == 32800, "[8][12]"
-    assert env.rail.get_full_transitions(8, 13) == 0, "[8][13]"
-    assert env.rail.get_full_transitions(8, 14) == 0, "[8][14]"
+    assert env.rail.get_full_transitions(8, 3) == 72, "[8][3]"
+    assert env.rail.get_full_transitions(8, 4) == 3089, "[8][4]"
+    assert env.rail.get_full_transitions(8, 5) == 1025, "[8][5]"
+    assert env.rail.get_full_transitions(8, 6) == 1025, "[8][6]"
+    assert env.rail.get_full_transitions(8, 7) == 1025, "[8][7]"
+    assert env.rail.get_full_transitions(8, 8) == 1025, "[8][8]"
+    assert env.rail.get_full_transitions(8, 9) == 1025, "[8][9]"
+    assert env.rail.get_full_transitions(8, 10) == 1097, "[8][10]"
+    assert env.rail.get_full_transitions(8, 11) == 2064, "[8][11]"
+    assert env.rail.get_full_transitions(8, 12) == 0, "[8][12]"
+    assert env.rail.get_full_transitions(8, 13) == 32800, "[8][13]"
+    assert env.rail.get_full_transitions(8, 14) == 32800, "[8][14]"
     assert env.rail.get_full_transitions(8, 15) == 0, "[8][15]"
     assert env.rail.get_full_transitions(8, 16) == 0, "[8][16]"
     assert env.rail.get_full_transitions(8, 17) == 0, "[8][17]"
@@ -766,7 +767,7 @@ def test_sparse_rail_generator_deterministic():
     assert env.rail.get_full_transitions(8, 23) == 0, "[8][23]"
     assert env.rail.get_full_transitions(8, 24) == 0, "[8][24]"
     assert env.rail.get_full_transitions(9, 0) == 32800, "[9][0]"
-    assert env.rail.get_full_transitions(9, 1) == 0, "[9][1]"
+    assert env.rail.get_full_transitions(9, 1) == 32800, "[9][1]"
     assert env.rail.get_full_transitions(9, 2) == 0, "[9][2]"
     assert env.rail.get_full_transitions(9, 3) == 0, "[9][3]"
     assert env.rail.get_full_transitions(9, 4) == 0, "[9][4]"
@@ -777,9 +778,9 @@ def test_sparse_rail_generator_deterministic():
     assert env.rail.get_full_transitions(9, 9) == 0, "[9][9]"
     assert env.rail.get_full_transitions(9, 10) == 0, "[9][10]"
     assert env.rail.get_full_transitions(9, 11) == 0, "[9][11]"
-    assert env.rail.get_full_transitions(9, 12) == 32800, "[9][12]"
-    assert env.rail.get_full_transitions(9, 13) == 0, "[9][13]"
-    assert env.rail.get_full_transitions(9, 14) == 0, "[9][14]"
+    assert env.rail.get_full_transitions(9, 12) == 0, "[9][12]"
+    assert env.rail.get_full_transitions(9, 13) == 32800, "[9][13]"
+    assert env.rail.get_full_transitions(9, 14) == 32800, "[9][14]"
     assert env.rail.get_full_transitions(9, 15) == 0, "[9][15]"
     assert env.rail.get_full_transitions(9, 16) == 0, "[9][16]"
     assert env.rail.get_full_transitions(9, 17) == 0, "[9][17]"
@@ -791,7 +792,7 @@ def test_sparse_rail_generator_deterministic():
     assert env.rail.get_full_transitions(9, 23) == 0, "[9][23]"
     assert env.rail.get_full_transitions(9, 24) == 0, "[9][24]"
     assert env.rail.get_full_transitions(10, 0) == 32800, "[10][0]"
-    assert env.rail.get_full_transitions(10, 1) == 0, "[10][1]"
+    assert env.rail.get_full_transitions(10, 1) == 32800, "[10][1]"
     assert env.rail.get_full_transitions(10, 2) == 0, "[10][2]"
     assert env.rail.get_full_transitions(10, 3) == 0, "[10][3]"
     assert env.rail.get_full_transitions(10, 4) == 0, "[10][4]"
@@ -802,9 +803,9 @@ def test_sparse_rail_generator_deterministic():
     assert env.rail.get_full_transitions(10, 9) == 0, "[10][9]"
     assert env.rail.get_full_transitions(10, 10) == 0, "[10][10]"
     assert env.rail.get_full_transitions(10, 11) == 0, "[10][11]"
-    assert env.rail.get_full_transitions(10, 12) == 32800, "[10][12]"
-    assert env.rail.get_full_transitions(10, 13) == 0, "[10][13]"
-    assert env.rail.get_full_transitions(10, 14) == 0, "[10][14]"
+    assert env.rail.get_full_transitions(10, 12) == 0, "[10][12]"
+    assert env.rail.get_full_transitions(10, 13) == 32800, "[10][13]"
+    assert env.rail.get_full_transitions(10, 14) == 32800, "[10][14]"
     assert env.rail.get_full_transitions(10, 15) == 0, "[10][15]"
     assert env.rail.get_full_transitions(10, 16) == 0, "[10][16]"
     assert env.rail.get_full_transitions(10, 17) == 0, "[10][17]"
@@ -816,7 +817,7 @@ def test_sparse_rail_generator_deterministic():
     assert env.rail.get_full_transitions(10, 23) == 0, "[10][23]"
     assert env.rail.get_full_transitions(10, 24) == 0, "[10][24]"
     assert env.rail.get_full_transitions(11, 0) == 32800, "[11][0]"
-    assert env.rail.get_full_transitions(11, 1) == 0, "[11][1]"
+    assert env.rail.get_full_transitions(11, 1) == 32800, "[11][1]"
     assert env.rail.get_full_transitions(11, 2) == 0, "[11][2]"
     assert env.rail.get_full_transitions(11, 3) == 0, "[11][3]"
     assert env.rail.get_full_transitions(11, 4) == 0, "[11][4]"
@@ -827,9 +828,9 @@ def test_sparse_rail_generator_deterministic():
     assert env.rail.get_full_transitions(11, 9) == 0, "[11][9]"
     assert env.rail.get_full_transitions(11, 10) == 0, "[11][10]"
     assert env.rail.get_full_transitions(11, 11) == 0, "[11][11]"
-    assert env.rail.get_full_transitions(11, 12) == 32800, "[11][12]"
-    assert env.rail.get_full_transitions(11, 13) == 0, "[11][13]"
-    assert env.rail.get_full_transitions(11, 14) == 0, "[11][14]"
+    assert env.rail.get_full_transitions(11, 12) == 0, "[11][12]"
+    assert env.rail.get_full_transitions(11, 13) == 32800, "[11][13]"
+    assert env.rail.get_full_transitions(11, 14) == 32800, "[11][14]"
     assert env.rail.get_full_transitions(11, 15) == 0, "[11][15]"
     assert env.rail.get_full_transitions(11, 16) == 0, "[11][16]"
     assert env.rail.get_full_transitions(11, 17) == 0, "[11][17]"
@@ -841,7 +842,7 @@ def test_sparse_rail_generator_deterministic():
     assert env.rail.get_full_transitions(11, 23) == 0, "[11][23]"
     assert env.rail.get_full_transitions(11, 24) == 0, "[11][24]"
     assert env.rail.get_full_transitions(12, 0) == 32800, "[12][0]"
-    assert env.rail.get_full_transitions(12, 1) == 0, "[12][1]"
+    assert env.rail.get_full_transitions(12, 1) == 32800, "[12][1]"
     assert env.rail.get_full_transitions(12, 2) == 0, "[12][2]"
     assert env.rail.get_full_transitions(12, 3) == 0, "[12][3]"
     assert env.rail.get_full_transitions(12, 4) == 0, "[12][4]"
@@ -852,9 +853,9 @@ def test_sparse_rail_generator_deterministic():
     assert env.rail.get_full_transitions(12, 9) == 0, "[12][9]"
     assert env.rail.get_full_transitions(12, 10) == 0, "[12][10]"
     assert env.rail.get_full_transitions(12, 11) == 0, "[12][11]"
-    assert env.rail.get_full_transitions(12, 12) == 32800, "[12][12]"
-    assert env.rail.get_full_transitions(12, 13) == 0, "[12][13]"
-    assert env.rail.get_full_transitions(12, 14) == 0, "[12][14]"
+    assert env.rail.get_full_transitions(12, 12) == 0, "[12][12]"
+    assert env.rail.get_full_transitions(12, 13) == 32800, "[12][13]"
+    assert env.rail.get_full_transitions(12, 14) == 32800, "[12][14]"
     assert env.rail.get_full_transitions(12, 15) == 0, "[12][15]"
     assert env.rail.get_full_transitions(12, 16) == 0, "[12][16]"
     assert env.rail.get_full_transitions(12, 17) == 0, "[12][17]"
@@ -866,7 +867,7 @@ def test_sparse_rail_generator_deterministic():
     assert env.rail.get_full_transitions(12, 23) == 0, "[12][23]"
     assert env.rail.get_full_transitions(12, 24) == 0, "[12][24]"
     assert env.rail.get_full_transitions(13, 0) == 32800, "[13][0]"
-    assert env.rail.get_full_transitions(13, 1) == 0, "[13][1]"
+    assert env.rail.get_full_transitions(13, 1) == 32800, "[13][1]"
     assert env.rail.get_full_transitions(13, 2) == 0, "[13][2]"
     assert env.rail.get_full_transitions(13, 3) == 0, "[13][3]"
     assert env.rail.get_full_transitions(13, 4) == 0, "[13][4]"
@@ -877,9 +878,9 @@ def test_sparse_rail_generator_deterministic():
     assert env.rail.get_full_transitions(13, 9) == 0, "[13][9]"
     assert env.rail.get_full_transitions(13, 10) == 0, "[13][10]"
     assert env.rail.get_full_transitions(13, 11) == 0, "[13][11]"
-    assert env.rail.get_full_transitions(13, 12) == 32800, "[13][12]"
-    assert env.rail.get_full_transitions(13, 13) == 0, "[13][13]"
-    assert env.rail.get_full_transitions(13, 14) == 0, "[13][14]"
+    assert env.rail.get_full_transitions(13, 12) == 0, "[13][12]"
+    assert env.rail.get_full_transitions(13, 13) == 32800, "[13][13]"
+    assert env.rail.get_full_transitions(13, 14) == 32800, "[13][14]"
     assert env.rail.get_full_transitions(13, 15) == 0, "[13][15]"
     assert env.rail.get_full_transitions(13, 16) == 0, "[13][16]"
     assert env.rail.get_full_transitions(13, 17) == 0, "[13][17]"
@@ -891,7 +892,7 @@ def test_sparse_rail_generator_deterministic():
     assert env.rail.get_full_transitions(13, 23) == 0, "[13][23]"
     assert env.rail.get_full_transitions(13, 24) == 0, "[13][24]"
     assert env.rail.get_full_transitions(14, 0) == 32800, "[14][0]"
-    assert env.rail.get_full_transitions(14, 1) == 0, "[14][1]"
+    assert env.rail.get_full_transitions(14, 1) == 32800, "[14][1]"
     assert env.rail.get_full_transitions(14, 2) == 0, "[14][2]"
     assert env.rail.get_full_transitions(14, 3) == 0, "[14][3]"
     assert env.rail.get_full_transitions(14, 4) == 0, "[14][4]"
@@ -902,9 +903,9 @@ def test_sparse_rail_generator_deterministic():
     assert env.rail.get_full_transitions(14, 9) == 0, "[14][9]"
     assert env.rail.get_full_transitions(14, 10) == 0, "[14][10]"
     assert env.rail.get_full_transitions(14, 11) == 0, "[14][11]"
-    assert env.rail.get_full_transitions(14, 12) == 32800, "[14][12]"
-    assert env.rail.get_full_transitions(14, 13) == 0, "[14][13]"
-    assert env.rail.get_full_transitions(14, 14) == 0, "[14][14]"
+    assert env.rail.get_full_transitions(14, 12) == 0, "[14][12]"
+    assert env.rail.get_full_transitions(14, 13) == 32800, "[14][13]"
+    assert env.rail.get_full_transitions(14, 14) == 32800, "[14][14]"
     assert env.rail.get_full_transitions(14, 15) == 0, "[14][15]"
     assert env.rail.get_full_transitions(14, 16) == 0, "[14][16]"
     assert env.rail.get_full_transitions(14, 17) == 0, "[14][17]"
@@ -916,7 +917,7 @@ def test_sparse_rail_generator_deterministic():
     assert env.rail.get_full_transitions(14, 23) == 0, "[14][23]"
     assert env.rail.get_full_transitions(14, 24) == 0, "[14][24]"
     assert env.rail.get_full_transitions(15, 0) == 32800, "[15][0]"
-    assert env.rail.get_full_transitions(15, 1) == 0, "[15][1]"
+    assert env.rail.get_full_transitions(15, 1) == 32800, "[15][1]"
     assert env.rail.get_full_transitions(15, 2) == 0, "[15][2]"
     assert env.rail.get_full_transitions(15, 3) == 0, "[15][3]"
     assert env.rail.get_full_transitions(15, 4) == 0, "[15][4]"
@@ -927,9 +928,9 @@ def test_sparse_rail_generator_deterministic():
     assert env.rail.get_full_transitions(15, 9) == 0, "[15][9]"
     assert env.rail.get_full_transitions(15, 10) == 0, "[15][10]"
     assert env.rail.get_full_transitions(15, 11) == 0, "[15][11]"
-    assert env.rail.get_full_transitions(15, 12) == 32800, "[15][12]"
-    assert env.rail.get_full_transitions(15, 13) == 0, "[15][13]"
-    assert env.rail.get_full_transitions(15, 14) == 0, "[15][14]"
+    assert env.rail.get_full_transitions(15, 12) == 0, "[15][12]"
+    assert env.rail.get_full_transitions(15, 13) == 32800, "[15][13]"
+    assert env.rail.get_full_transitions(15, 14) == 32800, "[15][14]"
     assert env.rail.get_full_transitions(15, 15) == 0, "[15][15]"
     assert env.rail.get_full_transitions(15, 16) == 0, "[15][16]"
     assert env.rail.get_full_transitions(15, 17) == 0, "[15][17]"
@@ -940,8 +941,8 @@ def test_sparse_rail_generator_deterministic():
     assert env.rail.get_full_transitions(15, 22) == 0, "[15][22]"
     assert env.rail.get_full_transitions(15, 23) == 0, "[15][23]"
     assert env.rail.get_full_transitions(15, 24) == 0, "[15][24]"
-    assert env.rail.get_full_transitions(16, 0) == 32800, "[16][0]"
-    assert env.rail.get_full_transitions(16, 1) == 0, "[16][1]"
+    assert env.rail.get_full_transitions(16, 0) == 72, "[16][0]"
+    assert env.rail.get_full_transitions(16, 1) == 37408, "[16][1]"
     assert env.rail.get_full_transitions(16, 2) == 0, "[16][2]"
     assert env.rail.get_full_transitions(16, 3) == 0, "[16][3]"
     assert env.rail.get_full_transitions(16, 4) == 0, "[16][4]"
@@ -952,9 +953,9 @@ def test_sparse_rail_generator_deterministic():
     assert env.rail.get_full_transitions(16, 9) == 0, "[16][9]"
     assert env.rail.get_full_transitions(16, 10) == 0, "[16][10]"
     assert env.rail.get_full_transitions(16, 11) == 0, "[16][11]"
-    assert env.rail.get_full_transitions(16, 12) == 32800, "[16][12]"
-    assert env.rail.get_full_transitions(16, 13) == 0, "[16][13]"
-    assert env.rail.get_full_transitions(16, 14) == 0, "[16][14]"
+    assert env.rail.get_full_transitions(16, 12) == 0, "[16][12]"
+    assert env.rail.get_full_transitions(16, 13) == 49186, "[16][13]"
+    assert env.rail.get_full_transitions(16, 14) == 2064, "[16][14]"
     assert env.rail.get_full_transitions(16, 15) == 0, "[16][15]"
     assert env.rail.get_full_transitions(16, 16) == 0, "[16][16]"
     assert env.rail.get_full_transitions(16, 17) == 0, "[16][17]"
@@ -965,8 +966,8 @@ def test_sparse_rail_generator_deterministic():
     assert env.rail.get_full_transitions(16, 22) == 0, "[16][22]"
     assert env.rail.get_full_transitions(16, 23) == 0, "[16][23]"
     assert env.rail.get_full_transitions(16, 24) == 0, "[16][24]"
-    assert env.rail.get_full_transitions(17, 0) == 32800, "[17][0]"
-    assert env.rail.get_full_transitions(17, 1) == 0, "[17][1]"
+    assert env.rail.get_full_transitions(17, 0) == 0, "[17][0]"
+    assert env.rail.get_full_transitions(17, 1) == 32800, "[17][1]"
     assert env.rail.get_full_transitions(17, 2) == 0, "[17][2]"
     assert env.rail.get_full_transitions(17, 3) == 0, "[17][3]"
     assert env.rail.get_full_transitions(17, 4) == 0, "[17][4]"
@@ -977,8 +978,8 @@ def test_sparse_rail_generator_deterministic():
     assert env.rail.get_full_transitions(17, 9) == 0, "[17][9]"
     assert env.rail.get_full_transitions(17, 10) == 0, "[17][10]"
     assert env.rail.get_full_transitions(17, 11) == 0, "[17][11]"
-    assert env.rail.get_full_transitions(17, 12) == 32800, "[17][12]"
-    assert env.rail.get_full_transitions(17, 13) == 0, "[17][13]"
+    assert env.rail.get_full_transitions(17, 12) == 0, "[17][12]"
+    assert env.rail.get_full_transitions(17, 13) == 32800, "[17][13]"
     assert env.rail.get_full_transitions(17, 14) == 0, "[17][14]"
     assert env.rail.get_full_transitions(17, 15) == 0, "[17][15]"
     assert env.rail.get_full_transitions(17, 16) == 0, "[17][16]"
@@ -990,20 +991,20 @@ def test_sparse_rail_generator_deterministic():
     assert env.rail.get_full_transitions(17, 22) == 0, "[17][22]"
     assert env.rail.get_full_transitions(17, 23) == 0, "[17][23]"
     assert env.rail.get_full_transitions(17, 24) == 0, "[17][24]"
-    assert env.rail.get_full_transitions(18, 0) == 72, "[18][0]"
-    assert env.rail.get_full_transitions(18, 1) == 1025, "[18][1]"
-    assert env.rail.get_full_transitions(18, 2) == 5633, "[18][2]"
-    assert env.rail.get_full_transitions(18, 3) == 17411, "[18][3]"
-    assert env.rail.get_full_transitions(18, 4) == 1025, "[18][4]"
-    assert env.rail.get_full_transitions(18, 5) == 1025, "[18][5]"
-    assert env.rail.get_full_transitions(18, 6) == 1025, "[18][6]"
-    assert env.rail.get_full_transitions(18, 7) == 1025, "[18][7]"
-    assert env.rail.get_full_transitions(18, 8) == 1025, "[18][8]"
-    assert env.rail.get_full_transitions(18, 9) == 5633, "[18][9]"
-    assert env.rail.get_full_transitions(18, 10) == 17411, "[18][10]"
-    assert env.rail.get_full_transitions(18, 11) == 1025, "[18][11]"
-    assert env.rail.get_full_transitions(18, 12) == 2064, "[18][12]"
-    assert env.rail.get_full_transitions(18, 13) == 0, "[18][13]"
+    assert env.rail.get_full_transitions(18, 0) == 0, "[18][0]"
+    assert env.rail.get_full_transitions(18, 1) == 32800, "[18][1]"
+    assert env.rail.get_full_transitions(18, 2) == 0, "[18][2]"
+    assert env.rail.get_full_transitions(18, 3) == 0, "[18][3]"
+    assert env.rail.get_full_transitions(18, 4) == 0, "[18][4]"
+    assert env.rail.get_full_transitions(18, 5) == 0, "[18][5]"
+    assert env.rail.get_full_transitions(18, 6) == 0, "[18][6]"
+    assert env.rail.get_full_transitions(18, 7) == 0, "[18][7]"
+    assert env.rail.get_full_transitions(18, 8) == 0, "[18][8]"
+    assert env.rail.get_full_transitions(18, 9) == 0, "[18][9]"
+    assert env.rail.get_full_transitions(18, 10) == 0, "[18][10]"
+    assert env.rail.get_full_transitions(18, 11) == 0, "[18][11]"
+    assert env.rail.get_full_transitions(18, 12) == 0, "[18][12]"
+    assert env.rail.get_full_transitions(18, 13) == 32800, "[18][13]"
     assert env.rail.get_full_transitions(18, 14) == 0, "[18][14]"
     assert env.rail.get_full_transitions(18, 15) == 0, "[18][15]"
     assert env.rail.get_full_transitions(18, 16) == 0, "[18][16]"
@@ -1016,19 +1017,19 @@ def test_sparse_rail_generator_deterministic():
     assert env.rail.get_full_transitions(18, 23) == 0, "[18][23]"
     assert env.rail.get_full_transitions(18, 24) == 0, "[18][24]"
     assert env.rail.get_full_transitions(19, 0) == 0, "[19][0]"
-    assert env.rail.get_full_transitions(19, 1) == 0, "[19][1]"
-    assert env.rail.get_full_transitions(19, 2) == 72, "[19][2]"
-    assert env.rail.get_full_transitions(19, 3) == 3089, "[19][3]"
-    assert env.rail.get_full_transitions(19, 4) == 1025, "[19][4]"
-    assert env.rail.get_full_transitions(19, 5) == 1025, "[19][5]"
-    assert env.rail.get_full_transitions(19, 6) == 1025, "[19][6]"
-    assert env.rail.get_full_transitions(19, 7) == 1025, "[19][7]"
-    assert env.rail.get_full_transitions(19, 8) == 1025, "[19][8]"
-    assert env.rail.get_full_transitions(19, 9) == 1097, "[19][9]"
-    assert env.rail.get_full_transitions(19, 10) == 2064, "[19][10]"
+    assert env.rail.get_full_transitions(19, 1) == 32800, "[19][1]"
+    assert env.rail.get_full_transitions(19, 2) == 0, "[19][2]"
+    assert env.rail.get_full_transitions(19, 3) == 0, "[19][3]"
+    assert env.rail.get_full_transitions(19, 4) == 0, "[19][4]"
+    assert env.rail.get_full_transitions(19, 5) == 0, "[19][5]"
+    assert env.rail.get_full_transitions(19, 6) == 0, "[19][6]"
+    assert env.rail.get_full_transitions(19, 7) == 0, "[19][7]"
+    assert env.rail.get_full_transitions(19, 8) == 0, "[19][8]"
+    assert env.rail.get_full_transitions(19, 9) == 0, "[19][9]"
+    assert env.rail.get_full_transitions(19, 10) == 0, "[19][10]"
     assert env.rail.get_full_transitions(19, 11) == 0, "[19][11]"
     assert env.rail.get_full_transitions(19, 12) == 0, "[19][12]"
-    assert env.rail.get_full_transitions(19, 13) == 0, "[19][13]"
+    assert env.rail.get_full_transitions(19, 13) == 32800, "[19][13]"
     assert env.rail.get_full_transitions(19, 14) == 0, "[19][14]"
     assert env.rail.get_full_transitions(19, 15) == 0, "[19][15]"
     assert env.rail.get_full_transitions(19, 16) == 0, "[19][16]"
@@ -1041,7 +1042,7 @@ def test_sparse_rail_generator_deterministic():
     assert env.rail.get_full_transitions(19, 23) == 0, "[19][23]"
     assert env.rail.get_full_transitions(19, 24) == 0, "[19][24]"
     assert env.rail.get_full_transitions(20, 0) == 0, "[20][0]"
-    assert env.rail.get_full_transitions(20, 1) == 0, "[20][1]"
+    assert env.rail.get_full_transitions(20, 1) == 32800, "[20][1]"
     assert env.rail.get_full_transitions(20, 2) == 0, "[20][2]"
     assert env.rail.get_full_transitions(20, 3) == 0, "[20][3]"
     assert env.rail.get_full_transitions(20, 4) == 0, "[20][4]"
@@ -1053,7 +1054,7 @@ def test_sparse_rail_generator_deterministic():
     assert env.rail.get_full_transitions(20, 10) == 0, "[20][10]"
     assert env.rail.get_full_transitions(20, 11) == 0, "[20][11]"
     assert env.rail.get_full_transitions(20, 12) == 0, "[20][12]"
-    assert env.rail.get_full_transitions(20, 13) == 0, "[20][13]"
+    assert env.rail.get_full_transitions(20, 13) == 32800, "[20][13]"
     assert env.rail.get_full_transitions(20, 14) == 0, "[20][14]"
     assert env.rail.get_full_transitions(20, 15) == 0, "[20][15]"
     assert env.rail.get_full_transitions(20, 16) == 0, "[20][16]"
@@ -1066,7 +1067,7 @@ def test_sparse_rail_generator_deterministic():
     assert env.rail.get_full_transitions(20, 23) == 0, "[20][23]"
     assert env.rail.get_full_transitions(20, 24) == 0, "[20][24]"
     assert env.rail.get_full_transitions(21, 0) == 0, "[21][0]"
-    assert env.rail.get_full_transitions(21, 1) == 0, "[21][1]"
+    assert env.rail.get_full_transitions(21, 1) == 32800, "[21][1]"
     assert env.rail.get_full_transitions(21, 2) == 0, "[21][2]"
     assert env.rail.get_full_transitions(21, 3) == 0, "[21][3]"
     assert env.rail.get_full_transitions(21, 4) == 0, "[21][4]"
@@ -1078,7 +1079,7 @@ def test_sparse_rail_generator_deterministic():
     assert env.rail.get_full_transitions(21, 10) == 0, "[21][10]"
     assert env.rail.get_full_transitions(21, 11) == 0, "[21][11]"
     assert env.rail.get_full_transitions(21, 12) == 0, "[21][12]"
-    assert env.rail.get_full_transitions(21, 13) == 0, "[21][13]"
+    assert env.rail.get_full_transitions(21, 13) == 32800, "[21][13]"
     assert env.rail.get_full_transitions(21, 14) == 0, "[21][14]"
     assert env.rail.get_full_transitions(21, 15) == 0, "[21][15]"
     assert env.rail.get_full_transitions(21, 16) == 0, "[21][16]"
@@ -1091,7 +1092,7 @@ def test_sparse_rail_generator_deterministic():
     assert env.rail.get_full_transitions(21, 23) == 0, "[21][23]"
     assert env.rail.get_full_transitions(21, 24) == 0, "[21][24]"
     assert env.rail.get_full_transitions(22, 0) == 0, "[22][0]"
-    assert env.rail.get_full_transitions(22, 1) == 0, "[22][1]"
+    assert env.rail.get_full_transitions(22, 1) == 32800, "[22][1]"
     assert env.rail.get_full_transitions(22, 2) == 0, "[22][2]"
     assert env.rail.get_full_transitions(22, 3) == 0, "[22][3]"
     assert env.rail.get_full_transitions(22, 4) == 0, "[22][4]"
@@ -1103,7 +1104,7 @@ def test_sparse_rail_generator_deterministic():
     assert env.rail.get_full_transitions(22, 10) == 0, "[22][10]"
     assert env.rail.get_full_transitions(22, 11) == 0, "[22][11]"
     assert env.rail.get_full_transitions(22, 12) == 0, "[22][12]"
-    assert env.rail.get_full_transitions(22, 13) == 0, "[22][13]"
+    assert env.rail.get_full_transitions(22, 13) == 32800, "[22][13]"
     assert env.rail.get_full_transitions(22, 14) == 0, "[22][14]"
     assert env.rail.get_full_transitions(22, 15) == 0, "[22][15]"
     assert env.rail.get_full_transitions(22, 16) == 0, "[22][16]"
@@ -1116,19 +1117,19 @@ def test_sparse_rail_generator_deterministic():
     assert env.rail.get_full_transitions(22, 23) == 0, "[22][23]"
     assert env.rail.get_full_transitions(22, 24) == 0, "[22][24]"
     assert env.rail.get_full_transitions(23, 0) == 0, "[23][0]"
-    assert env.rail.get_full_transitions(23, 1) == 0, "[23][1]"
-    assert env.rail.get_full_transitions(23, 2) == 0, "[23][2]"
-    assert env.rail.get_full_transitions(23, 3) == 0, "[23][3]"
-    assert env.rail.get_full_transitions(23, 4) == 0, "[23][4]"
-    assert env.rail.get_full_transitions(23, 5) == 0, "[23][5]"
-    assert env.rail.get_full_transitions(23, 6) == 0, "[23][6]"
-    assert env.rail.get_full_transitions(23, 7) == 0, "[23][7]"
-    assert env.rail.get_full_transitions(23, 8) == 0, "[23][8]"
-    assert env.rail.get_full_transitions(23, 9) == 0, "[23][9]"
-    assert env.rail.get_full_transitions(23, 10) == 0, "[23][10]"
-    assert env.rail.get_full_transitions(23, 11) == 0, "[23][11]"
-    assert env.rail.get_full_transitions(23, 12) == 0, "[23][12]"
-    assert env.rail.get_full_transitions(23, 13) == 0, "[23][13]"
+    assert env.rail.get_full_transitions(23, 1) == 72, "[23][1]"
+    assert env.rail.get_full_transitions(23, 2) == 1025, "[23][2]"
+    assert env.rail.get_full_transitions(23, 3) == 5633, "[23][3]"
+    assert env.rail.get_full_transitions(23, 4) == 17411, "[23][4]"
+    assert env.rail.get_full_transitions(23, 5) == 1025, "[23][5]"
+    assert env.rail.get_full_transitions(23, 6) == 1025, "[23][6]"
+    assert env.rail.get_full_transitions(23, 7) == 1025, "[23][7]"
+    assert env.rail.get_full_transitions(23, 8) == 1025, "[23][8]"
+    assert env.rail.get_full_transitions(23, 9) == 1025, "[23][9]"
+    assert env.rail.get_full_transitions(23, 10) == 5633, "[23][10]"
+    assert env.rail.get_full_transitions(23, 11) == 17411, "[23][11]"
+    assert env.rail.get_full_transitions(23, 12) == 1025, "[23][12]"
+    assert env.rail.get_full_transitions(23, 13) == 2064, "[23][13]"
     assert env.rail.get_full_transitions(23, 14) == 0, "[23][14]"
     assert env.rail.get_full_transitions(23, 15) == 0, "[23][15]"
     assert env.rail.get_full_transitions(23, 16) == 0, "[23][16]"
@@ -1143,15 +1144,15 @@ def test_sparse_rail_generator_deterministic():
     assert env.rail.get_full_transitions(24, 0) == 0, "[24][0]"
     assert env.rail.get_full_transitions(24, 1) == 0, "[24][1]"
     assert env.rail.get_full_transitions(24, 2) == 0, "[24][2]"
-    assert env.rail.get_full_transitions(24, 3) == 0, "[24][3]"
-    assert env.rail.get_full_transitions(24, 4) == 0, "[24][4]"
-    assert env.rail.get_full_transitions(24, 5) == 0, "[24][5]"
-    assert env.rail.get_full_transitions(24, 6) == 0, "[24][6]"
-    assert env.rail.get_full_transitions(24, 7) == 0, "[24][7]"
-    assert env.rail.get_full_transitions(24, 8) == 0, "[24][8]"
-    assert env.rail.get_full_transitions(24, 9) == 0, "[24][9]"
-    assert env.rail.get_full_transitions(24, 10) == 0, "[24][10]"
-    assert env.rail.get_full_transitions(24, 11) == 0, "[24][11]"
+    assert env.rail.get_full_transitions(24, 3) == 72, "[24][3]"
+    assert env.rail.get_full_transitions(24, 4) == 3089, "[24][4]"
+    assert env.rail.get_full_transitions(24, 5) == 1025, "[24][5]"
+    assert env.rail.get_full_transitions(24, 6) == 1025, "[24][6]"
+    assert env.rail.get_full_transitions(24, 7) == 1025, "[24][7]"
+    assert env.rail.get_full_transitions(24, 8) == 1025, "[24][8]"
+    assert env.rail.get_full_transitions(24, 9) == 1025, "[24][9]"
+    assert env.rail.get_full_transitions(24, 10) == 1097, "[24][10]"
+    assert env.rail.get_full_transitions(24, 11) == 2064, "[24][11]"
     assert env.rail.get_full_transitions(24, 12) == 0, "[24][12]"
     assert env.rail.get_full_transitions(24, 13) == 0, "[24][13]"
     assert env.rail.get_full_transitions(24, 14) == 0, "[24][14]"
-- 
GitLab