def test_formats(self, capsys, logging_state): settings.logfile = sys.stderr settings.verbosity = Verbosity.debug logg.error("0") assert capsys.readouterr().err == "ERROR: 0\n" logg.warning("1") assert capsys.readouterr().err == "WARNING: 1\n" logg.info("2") assert capsys.readouterr().err == "2\n" logg.hint("3") assert capsys.readouterr().err == "--> 3\n"
def fit( self, x: Optional[np.ndarray] = None, y: Optional[np.ndarray] = None, w: Optional[np.ndarray] = None, **kwargs, ) -> "GAM": """ %(base_model_fit.full_desc)s Parameters ---------- %(base_model_fit.parameters)s Returns ------- :class:`cellrank.ul.models.GAM` Fits the model and returns self. """ # noqa super().fit(x, y, w, **kwargs) if self._grid is not None: # use default search grid = {} if not isinstance(self._grid, dict) else self._grid try: self.model.gridsearch( self.x, self.y, weights=self.w, keep_best=True, progress=False, **grid, **kwargs, ) return self except Exception as e: # workaround for: https://github.com/dswah/pyGAM/issues/273 self.model.fit(self.x, self.y, weights=self.w, **kwargs) logg.error( f"Grid search failed, reason: `{e}`. Fitting with default values" ) try: self.model.fit(self.x, self.y, weights=self.w, **kwargs) return self except Exception as e: raise RuntimeError( f"Unable to fit `{type(self).__name__}` for gene " f"`{self._gene!r}` in lineage `{self._lineage!r}`. Reason: `{e}`" ) from e
def test_logfile(self, tmp_path, logging_state): settings.verbosity = Verbosity.hint io = StringIO() settings.logfile = io assert settings.logfile is io assert settings.logpath is None logg.error("test!") assert io.getvalue() == "ERROR: test!\n" p = tmp_path / "test.log" settings.logpath = p assert settings.logpath == p assert settings.logfile.name == str(p) logg.hint("test2") logg.debug("invisible") assert settings.logpath.read_text() == "--> test2\n"