Das Patchen der Pipelines .score()
und .fit()
verursacht die folgenden Meldungen in AutoMLSearch-Tests:
Repro
Kasse Haupt
pytest -s evalml/tests/automl_tests/test_automl.py::test_automl_rerun
@bchen1116 Wenn Sie dem Spielstandsmock ein return_value
hinzufügen, sollte es verschwinden :
@patch('evalml.pipelines.BinaryClassificationPipeline.score', return_value={"Log Loss Binary": 0.2})
@freddyaboulton ist das etwas, was wir zu all den .score()
Mocks hinzufügen müssen? Und wäre dies die beste Lösung für diesen Fehler?
Ich schätze, ich zögere, dies als Fehler zu bezeichnen, da es das Verhalten von automl nicht so ändert, dass der Test bestanden wird, wenn er fehlschlagen sollte, oder umgekehrt.
Das zugrunde liegende Problem besteht darin, dass MagicMock
zurückgegeben wird, wenn Sie keinen Rückgabewert angeben. Schließlich gehen wir, um die Punktzahl mit einem f-String zu protokollieren:
logger.info(f"Best pipeline {self.objective.name}: {best_pipeline['score']:3f}")
Welche die Methode __format__
für MagicMock verwendet, die meiner Meinung nach nicht definiert ist.
Vielleicht können wir das hässliche Protokoll vermeiden, wenn wir die Art und Weise ändern, wie die Protokollierung aufgerufen wird, aber ich befürchte, dass dies den Code mit geringem Nutzen verkomplizieren würde.
Was denkst du?
Ah ich sehe, das macht Sinn. Ich war mir nicht sicher, woher diese Nachricht kam. Ich denke, das Verhalten ist dann in Ordnung, da es dem Verhalten von AutoML nicht abträglich zu sein scheint. Danke für die Hilfe, ich schließe das aus!