def test_forward_pass(self):
        input_dim = 2
        number_labels = 2
        intermediate_neurons = 3
        intermediate_layers = 1

        neural_net = NeuralNetwork(input_dim=input_dim,
                                   number_labels=number_labels,
                                   intermediate_neurons=intermediate_neurons,
                                   intermediate_layers=intermediate_layers)

        # the layers in the neural net are randomly initialized
        # modify them to fixed numbers in order to test
        first_layer = np.array([[1, 1, 1], [2, 2, 2], [3, 3, 3]])

        intermediate_layer = np.array([[1, 1, 1], [2, 2, 2], [3, 3, 3]])
        intermediate_layer = np.vstack((intermediate_layer, np.array([1, 1,
                                                                      1]).T))

        last_layer = np.array([[0.5, 1], [0.5, 1], [0.5, 1], [1, 1]])

        neural_net.layers = [first_layer, intermediate_layer, last_layer]

        expected_result = [92.5, 184]

        actual_result = neural_net.forward_pass(np.array([1, 3]))

        for actual, expected in zip(actual_result, expected_result):
            self.assertEqual(expected, actual)
    def test_errors_computed_correctly(self):
        # mock the layers just as in the forward pass case
        input_dim = 2
        number_labels = 2
        intermediate_neurons = 3
        intermediate_layers = 1

        neural_net = NeuralNetwork(input_dim=input_dim,
                                   number_labels=number_labels,
                                   intermediate_neurons=intermediate_neurons,
                                   intermediate_layers=intermediate_layers)

        # the layers in the neural net are randomly initialized
        # modify them to fixed numbers in order to test
        first_layer = np.array([[1, 1, 1], [2, 2, 2], [3, 3, 3]])

        intermediate_layer = np.array([[1, 1, 1], [2, 2, 2], [3, 3, 3]])
        intermediate_layer = np.vstack((intermediate_layer, np.array([1, 1,
                                                                      1]).T))

        last_layer = np.array([[0.5, 1], [0.5, 1], [0.5, 1], [1, 1]])

        neural_net.layers = [first_layer, intermediate_layer, last_layer]