def _step_db(estimator: BaseEstimator, ids: Tuple): estimator.is_fitted_ = True # make a dictionary of parameters pms = () estimator_params = estimator.get_params() for key in sorted(estimator_params.keys()): value = estimator_params[key] if isinstance(value, Callable): pms = pms + (key, value.__name__) if value == "warn": pms = pms + (key, 10) # discard parameters which are not json serializable try: json.dumps(value) pms = pms + (key, value) except TypeError: continue query = ( json.dumps(estimator.train_), json.dumps(estimator.features_), json.dumps(pms), json.dumps(ids), ) entry = ( *query, pickle.dumps(estimator), ) return query, entry
def _load(self, transformer: BaseEstimator, ids: Tuple): query, entry = _step_db(transformer, ids) result = _load_from_db(self.database_, query, create_model_stmt, query_model_stmt) if result: ids = ids + (result[0], ) transformer = pickle.loads(result[5]) transformer.is_fitted_ = True return transformer, ids else: return None, None