def get_expected_last_state(self):
     if self._direction == Direction.south_east():
         return self.south_east_state
     elif self._direction == Direction.south_west():
         return self.south_west_state
     elif self._direction == Direction.north_east():
         return self.north_east_state
     elif self._direction == Direction.north_west():
         return self.north_west_state
 def get_expected_result(self):
     if self._direction == Direction.south_east():
         return self.south_east_output
     elif self._direction == Direction.south_west():
         return self.south_west_output
     elif self._direction == Direction.north_east():
         return self.north_east_output
     elif self._direction == Direction.north_west():
         return self.north_west_output
    def test_returns_list_of_correct_length(self):
        rnn_setup = Rnn2dTestSetup(direction=Direction.south_east())
        rnn = rnn_setup.make_rnn()

        rnn = MultiDirectional(rnn)
        x = rnn_setup.make_input()
        actual = rnn.call(x)

        # 1 element for output of RNN and 4 elements for states, 1 state per each direction
        self.assertEqual(5, len(actual))
    def test_results(self):
        rnn_setup = Rnn2dTestSetup(direction=Direction.south_east())
        rnn = rnn_setup.make_rnn()

        rnn = MultiDirectional(rnn)
        x = rnn_setup.make_input()
        expected = rnn_setup.get_expected_result_for_multi_directional_rnn()
        actual = rnn.call(x)

        num_elements = 5
        for i in range(num_elements):
            actual_output = actual[i]
            expected_output = expected[i]
            np.testing.assert_almost_equal(expected_output,
                                           actual_output.numpy(), 6)