====================================================================== test session starts ======================================================================
platform linux -- Python 3.7.9, pytest-7.1.2, pluggy-1.0.0
rootdir: /home/eunki/repos/marlenv
collected 5 items
tests/test_snake.py ..F.. [100%]
=========================================================================== FAILURES ============================================================================
____________________________________________________________________ test_graph_env_rollout _____________________________________________________________________
graph_snake_env = <marlenv.envs.graph_snake_env.GraphSnakeEnv object at 0x7ff949543510>
def test_graph_env_rollout(graph_snake_env):
n_rollouts = 100
> rollout(graph_snake_env, n=n_rollouts)
tests/test_snake.py:78:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
tests/test_snake.py:65: in rollout
obs, rews, dones, _ = env.step(ac)
marlenv/envs/snake_env.py:261: in step
obs = self._get_obs()
marlenv/envs/graph_snake_env.py:54: in _get_obs
proc_obs = self._process_obs(obs)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <marlenv.envs.graph_snake_env.GraphSnakeEnv object at 0x7ff949543510>
obs = [array([[[1., 0., 0., ..., 0., 0., 0.],
[1., 0., 0., ..., 0., 0., 0.],
[1., 0., 0., ..., 0., 0., 0.],
..., 0., ..., 0., 0., 0.],
[1., 0., 0., ..., 0., 0., 0.],
[1., 0., 0., ..., 0., 0., 0.]]], dtype=float32)]
def _process_obs(self, obs):
if not self.observer=='snake':
raise ValueError("This is not yet implemented for 'human' observers.")
if self.image_obs:
raise ValueError("This is not yet implemented for 'image' observation.")
vision_range = 5 # range of vision in default five
if self.vision_range:
vision_range = self.vision_range
proc_obs = []
sqrt2 = math.sqrt(2)
snake_idx = 0
for snake in self.snakes: # for each snake
proc_ob = []
angle = math.atan2(snake.direction.value[1], snake.direction.value[0])
head = snake.head_coord
if self.vision_range: # if so, the head is at the center
head = (self.vision_range, self.vision_range)
for l in range(3): # for each of three directions except backward
dx = (int(math.cos(angle + self.action_dict[l])), int(math.sin(angle + self.action_dict[l])))
proc_ob.append(np.zeros((self.obs_ch, )))
for i in range(vision_range):
> temp_ob = obs[snake_idx][head[0] + dx[0]*(i+1)][head[1] + dx[1]*(i+1)]
E IndexError: index 20 is out of bounds for axis 0 with size 20
marlenv/envs/graph_snake_env.py:81: IndexError
==================================================================== short test summary info ====================================================================
FAILED tests/test_snake.py::test_graph_env_rollout - IndexError: index 20 is out of bounds for axis 0 with size 20
================================================================== 1 failed, 4 passed in 1.72s ==================================================================
#21 Pytest occasionally fails because of an error in graph_snake_env.py
logs when test fails