{"library":"sklearn-compat","title":"sklearn-compat","description":"sklearn-compat is a small Python package designed to help developers write scikit-learn compatible estimators that support multiple scikit-learn versions. It factors out common utilities used by third-party libraries to manage version differences and provide a stable API. As of version 0.1.5, it supports scikit-learn >= 1.2, with recent updates for scikit-learn 1.8 and 1.9. It follows a release cadence tied to new scikit-learn releases, aiming to support scikit-learn versions up to 2 years or about 4 versions.","language":"python","status":"active","last_verified":"Thu May 21","install":{"commands":["pip install sklearn-compat"],"cli":null},"imports":["from sklearn_compat.base import _fit_context","from sklearn_compat.utils import validate_params","from sklearn_compat.base import is_clusterer","from sklearn_compat.utils import _check_targets"],"auth":{"required":false,"env_vars":[]},"quickstart":{"code":"from sklearn.base import BaseEstimator, ClassifierMixin\nfrom sklearn_compat.base import _fit_context\nfrom sklearn.utils.validation import check_is_fitted\nimport numpy as np\n\nclass MyCompatibleClassifier(BaseEstimator, ClassifierMixin):\n    # The _fit_context decorator ensures proper parameter validation\n    # and handling consistent with scikit-learn's internal mechanisms\n    # across different versions (e.g., 1.2+).\n    @_fit_context(prefer_skip_nested_validation=True)\n    def fit(self, X, y):\n        if not isinstance(X, np.ndarray):\n            X = np.asarray(X)\n        if not isinstance(y, np.ndarray):\n            y = np.asarray(y)\n\n        self.classes_ = np.unique(y)\n        self.n_features_in_ = X.shape[1]\n        self.is_fitted_ = True\n        return self\n\n    def predict(self, X):\n        check_is_fitted(self)\n        # A simple prediction logic for demonstration\n        return np.full(X.shape[0], self.classes_[0])\n\n# Example usage of the compatible classifier\nX_train = np.array([[1, 2], [3, 4], [5, 6]])\ny_train = np.array([0, 1, 0])\n\nclf = MyCompatibleClassifier()\nclf.fit(X_train, y_train)\nprint(f\"Fitted classes: {clf.classes_}\")\nprint(f\"Predicted for [[7, 8]]: {clf.predict(np.array([[7, 8]]))}\")\n","lang":"python","description":"This quickstart demonstrates how to create a scikit-learn compatible estimator using `sklearn-compat`'s `_fit_context` decorator. This decorator helps developers ensure their custom estimators correctly handle parameter validation and `fit` method behavior across different scikit-learn versions, particularly those after 1.2.","tag":null,"tag_description":null,"last_tested":null,"results":[]},"compatibility":{"tag":null,"tag_description":null,"last_tested":"2026-05-21","installed_version":"0.1.5","pypi_latest":"0.1.5","is_stale":false,"summary":{"python_range":"3.10–3.9","success_rate":50,"avg_install_s":9.4,"avg_import_s":4.58,"wheel_type":"wheel"},"results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"sklearn-compat","exit_code":1,"wheel_type":null,"failure_reason":"build_error","import_side_effects":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"sklearn-compat","exit_code":1,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"sklearn-compat","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":9,"import_time_s":2.65,"mem_mb":57.5,"disk_size":"270M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"sklearn-compat","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":3.16,"mem_mb":57.5,"disk_size":"270M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"sklearn-compat","exit_code":1,"wheel_type":null,"failure_reason":"build_error","import_side_effects":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"sklearn-compat","exit_code":1,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"sklearn-compat","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":9.1,"import_time_s":4.54,"mem_mb":69.9,"disk_size":"287M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"sklearn-compat","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":5.73,"mem_mb":69.9,"disk_size":"287M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"sklearn-compat","exit_code":1,"wheel_type":null,"failure_reason":"build_error","import_side_effects":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"sklearn-compat","exit_code":1,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"sklearn-compat","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":9.3,"import_time_s":5.07,"mem_mb":68.6,"disk_size":"271M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"sklearn-compat","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":7.41,"mem_mb":68.6,"disk_size":"271M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"sklearn-compat","exit_code":1,"wheel_type":null,"failure_reason":"build_error","import_side_effects":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"sklearn-compat","exit_code":1,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"sklearn-compat","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":9.4,"import_time_s":4.59,"mem_mb":68.3,"disk_size":"269M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"sklearn-compat","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":6.62,"mem_mb":68.2,"disk_size":"269M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"sklearn-compat","exit_code":1,"wheel_type":null,"failure_reason":"build_error","import_side_effects":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"sklearn-compat","exit_code":1,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"sklearn-compat","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":10.3,"import_time_s":2.65,"mem_mb":54.4,"disk_size":"285M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"sklearn-compat","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":3.36,"mem_mb":54.4,"disk_size":"285M"}]}}