def test_propagate_errors(self):
        backpropagator = Backpropagator()
        normalizer = Normalizer(in_max = 100, out_max = 200)
        network = FeedForwardNN(normalizer, [1, 2, 1])
        expectation = Expectation([50], [148])
        result = network.receive_inputs(expectation.inputs)

        backpropagator.learn(network, expectation, 1)
    def test_learn(self):
        backpropagator = Backpropagator()
        normalizer = Normalizer(in_min = 1, in_max = 15,
                                out_min = -1, out_max = 1,
                                norm_min = -3, norm_max = 3)
        
        network = FeedForwardNN(normalizer, [1, 2, 2, 1])
        network.randomize_connection_weights(seed = 74)
        neurons = network.neurons        
        expectation = Expectation([1], [0.8415])

        error = backpropagator.calculate_error(
            network.receive_inputs(expectation.inputs),
            expectation.outputs)

        for i in range(20):
            last_error = error
            backpropagator.learn(network, expectation, 1.5)
            actual = network.receive_inputs(expectation.inputs)
            print(actual)
            error = backpropagator.calculate_error(actual, expectation.outputs)
            self.assertLess(error, last_error)