I am sitting in front of this problem for the last 2 hours and can't figure out what the problem is. I have a function which calculates something based on csv input. When I print the "spalte_ideal_sammlung"
out of the function it returns the correct array: ['y36', 'y11', 'y2', 'y33']
but when I try to call these functions via my unittest
I get this array as a return from the function: ['y36', 'y11', 'y2', 'y33', 'y36', 'y11', 'y2', 'y33']
. Any idea why I get this return instead of the correct one with 4 strings inside? The variable spalte_ideal_sammlung
has been defined as global in my main function in the main.py
.
def main(): # Mittels unsere Main-Funktion rufen wir die definierte Funktion auf
global spalte_ideal_sammlung #Abspeichern unserer gefundenen idealen Spalten
spalte_ideal_sammlung = []
My function in my main.py
:
class LeastSquare(Berechnung): # Klasse LeastSquare erbt von Berechnung
# Überschreibe die Methode least_square_berechnung aus der Basisklasse Berechnung
def least_square_berechnung(self):
#pass
# Initialisiere eine Liste, die später die LS-Werte für die Idealen-Funktionen enthält
ls_ideal = []
# Initialisiere eine Liste, welche die Spaltenbezeichnung für die Y-Werte der Trainingsdaten enthält. Die erste Spalte enthält die x-Werte.
trainingsdaten = ["y1", "y2", "y3", "y4"]
# Wir starten ab der zweiten Spalte, weil ab hier die y werte liegen. Erste Spalte sind die X-Werte
for columns_train in training.columns[1:]:
mse = 9999
# Durchlaufe alle Spalten der Idealen-Funktionen
for columns_ideal in ideal.columns[1:]:
#Berechnung MSE
mse_zw = (mean_squared_error(training[columns_train], ideal[columns_ideal]))
if mse_zw < mse:
mse = mse_zw
spalte_ideal = ideal[columns_ideal].name
# Gefundene Werte werden ans Array übergeben.
# Da der MeanSquaredError nicht dem verlangten SquaredError entspricht, überführen wir diesen durch den Faktor 400 in Wert der gesuchten Abweichung.
ls_ideal.append(mse * len(ideal))
spalte_ideal_sammlung.append(spalte_ideal)
for i, y, k in zip(ls_ideal, spalte_ideal_sammlung, trainingsdaten):
print("Für den Trainingsdatensatz " str(k) " lautet der LeastSquare " str(
i) " die Ideale Funktion lautet " str(y))
return spalte_ideal_sammlung
I call the function out of my unittes.py
(I did not start with the unit test because the return is not what I expected. Its definitely my fault but I can't find the mistake:
import unittest
import main
class MyTestCase(unittest.TestCase):
def test_something(self):
instanz1 = main.LeastSquare()
print(instanz1.least_square_berechnung())
if __name__ == '__main__':
unittest.main()
Really appreciate any help!
CodePudding user response:
could be problem with calling the list more than once which causes it to append more than once in your instance you could add this and check if it works
main.spalte_ideal_sammlung = []
self.assertEqual(instanz1.least_square_berechnung(), ['y36', 'y11', 'y2', 'y33'])