Repository: aeon-toolkit/aeon
Pull request #2162 (2024-10-07 14:02:46)

[REF] Rename `BaseEstimator` to `BaseAeonEstimator`
Hopefully removes confusion and conflicts with the `scikit-learn` `BaseEstimator`

aeon-actions-bot[bot]: 
## Thank you for contributing to `aeon`

I have added the following labels to this PR based on the title: **[ $\\color{#BDD9DB}{\\textsf{refactor}}$ ]**.
I have added the following labels to this PR based on the changes made: **[ $\\color{#2C2F20}{\\textsf{testing}}$, $\\color{#41A8F6}{\\textsf{transformations}}$ ]**. Feel free to change these if they do not properly represent the PR.

The [Checks](https://github.com/aeon-toolkit/aeon/pull/2162/checks) tab will show the status of our automated tests. You can click on individual test runs in the tab or "Details" in the panel below to see more information if there is a failure.

If our `pre-commit` code quality check fails, any trivial fixes will automatically be pushed to your PR unless it is a draft.

Don't hesitate to ask questions on the `aeon` [Slack](https://join.slack.com/t/aeon-toolkit/shared_invite/zt-22vwvut29-HDpCu~7VBUozyfL_8j3dLA) channel if you have any.

### PR CI actions

These checkboxes will add labels to enable/disable CI functionality for this PR. This may not take effect immediately, and a new commit may be required to run the new configuration.

- [ ] Run `pre-commit` checks for all files
- [ ] Run `mypy` typecheck tests
- [ ] Run all `pytest` tests and configurations
- [ ] Run all notebook example tests
- [ ] Run numba-disabled `codecov` tests
- [ ] Stop automatic `pre-commit` fixes (always disabled for drafts)
- [ ] Disable numba cache loading
- [ ] Push an empty commit to re-run CI checks
    

Patch:
diff --git a/aeon/base/__init__.py b/aeon/base/__init__.py
index 1bcf0214..66241c6b 100644
--- a/aeon/base/__init__.py
+++ b/aeon/base/__init__.py
@@ -1,13 +1,13 @@
 """Base classes for defining estimators in aeon."""
 
 __all__ = [
-    "BaseEstimator",
+    "BaseAeonEstimator",
     "BaseCollectionEstimator",
     "BaseSeriesEstimator",
     "_HeterogenousMetaEstimator",
 ]
 
-from aeon.base._base import BaseEstimator
+from aeon.base._base import BaseAeonEstimator
 from aeon.base._base_collection import BaseCollectionEstimator
 from aeon.base._base_series import BaseSeriesEstimator
 from aeon.base._meta import _HeterogenousMetaEstimator
diff --git a/aeon/base/_base.py b/aeon/base/_base.py
index f25134c9..9041f9af 100644
--- a/aeon/base/_base.py
+++ b/aeon/base/_base.py
@@ -1,18 +1,18 @@
 """Base class template for aeon estimators."""
 
 __maintainer__ = ["MatthewMiddlehurst", "TonyBagnall"]
-__all__ = ["BaseEstimator"]
+__all__ = ["BaseAeonEstimator"]
 
 import inspect
 from copy import deepcopy
 
 from sklearn import clone
-from sklearn.base import BaseEstimator as _BaseEstimator
+from sklearn.base import BaseEstimator
 from sklearn.ensemble._base import _set_random_states
 from sklearn.exceptions import NotFittedError
 
 
-class BaseEstimator(_BaseEstimator):
+class BaseAeonEstimator(BaseEstimator):
     """
     Base class for defining estimators in aeon.
 
@@ -322,7 +322,7 @@ class BaseEstimator(_BaseEstimator):
 
         Returns
         -------
-        instance : BaseEstimator or list of BaseEstimator
+        instance : BaseAeonEstimator or list of BaseAeonEstimator
             Instance of the class with default parameters. If return_first
             is False, returns list of instances.
         """
@@ -341,7 +341,7 @@ class BaseEstimator(_BaseEstimator):
 
     def _components(self, base_class=None):
         """
-        Return references to all state changing BaseEstimator type attributes.
+        Return references to all state changing BaseAeonEstimator type attributes.
 
         This *excludes* the blue-print-like components passed in the __init__.
 
@@ -350,8 +350,8 @@ class BaseEstimator(_BaseEstimator):
 
         Parameters
         ----------
-        base_class : class, optional, default=None, must be subclass of BaseEstimator
-            if None, behaves the same as `base_class=BaseEstimator`
+        base_class : subclass of BaseAeonEstimator, default=None
+            if None, behaves the same as `base_class=BaseAeonEstimator`
             if not None, return dict collects descendants of `base_class`.
 
         Returns
@@ -362,16 +362,16 @@ class BaseEstimator(_BaseEstimator):
             are not class attributes, and are not hyper-parameters (`__init__` args).
         """
         if base_class is None:
-            base_class = BaseEstimator
+            base_class = BaseAeonEstimator
         if base_class is not None and not inspect.isclass(base_class):
             raise TypeError(f"base_class must be a class, but found {type(base_class)}")
-        # if base_class is not None and not issubclass(base_class, BaseEstimator):
-        #     raise TypeError("base_class must be a subclass of BaseEstimator")
+        # if base_class is not None and not issubclass(base_class, BaseAeonEstimator):
+        #     raise TypeError("base_class must be a subclass of BaseAeonEstimator")
 
         # retrieve parameter names to exclude them later
         param_names = self.get_params(deep=False).keys()
 
-        # retrieve all attributes that are BaseEstimator descendants
+        # retrieve all attributes that are BaseAeonEstimator descendants
         attrs = [attr for attr in dir(self) if "__" not in attr]
         cls_attrs = [attr for attr in dir(type(self))]
         self_attrs = set(attrs).difference(cls_attrs).difference(param_names)
@@ -496,7 +496,7 @@ class BaseEstimator(_BaseEstimator):
 
             * If True, will return a dict of parameter name : value for this object,
               including fitted parameters of fittable components
-              (= BaseEstimator-valued parameters).
+              (= BaseAeonEstimator-valued parameters).
             * If False, will return a dict of parameter name : value for this object,
               but not include fitted parameters of components.
 
@@ -534,10 +534,10 @@ class BaseEstimator(_BaseEstimator):
             else:
                 return x
 
-        # add all nested parameters from components that are aeon BaseEstimator
+        # add all nested parameters from components that are aeon BaseAeonEstimator
         c_dict = self._components()
         for c, comp in c_dict.items():
-            if isinstance(comp, BaseEstimator) and comp.is_fitted:
+            if isinstance(comp, BaseAeonEstimator) and comp.is_fitted:
                 c_f_params = comp.get_fitted_params()
                 c_f_params = {f"{sh(c)}__{k}": v for k, v in c_f_params.items()}
                 fitted_params.update(c_f_params)
@@ -549,7 +549,7 @@ class BaseEstimator(_BaseEstimator):
         while n_new_params > 0:
             new_params = dict()
             for c, comp in old_new_params.items():
-                if isinstance(comp, _BaseEstimator):
+                if isinstance(comp, BaseEstimator):
                     c_f_params = self._get_fitted_params_default(comp)
                     c_f_params = {f"{sh(c)}__{k}": v for k, v in c_f_params.items()}
                     new_params.update(c_f_params)
diff --git a/aeon/base/_base_collection.py b/aeon/base/_base_collection.py
index 165ecaf9..da64b2f7 100644
--- a/aeon/base/_base_collection.py
+++ b/aeon/base/_base_collection.py
@@ -1,6 +1,6 @@
 """Base class for estimators that fit collections of time series."""
 
-from aeon.base._base import BaseEstimator
+from aeon.base._base import BaseAeonEstimator
 from aeon.utils.conversion import (
     convert_collection,
     resolve_equal_length_inner_type,
@@ -19,7 +19,7 @@ from aeon.utils.validation.collection import (
 )
 
 
-class BaseCollectionEstimator(BaseEstimator):
+class BaseCollectionEstimator(BaseAeonEstimator):
     """Base class for estimators that use collections of time series for method fit.
 
     Provides functions that are common to BaseClassifier, BaseRegressor,
diff --git a/aeon/base/_base_series.py b/aeon/base/_base_series.py
index 4b2e8843..30b2486b 100644
--- a/aeon/base/_base_series.py
+++ b/aeon/base/_base_series.py
@@ -10,7 +10,7 @@ __all__ = ["BaseSeriesEstimator"]
 import numpy as np
 import pandas as pd
 
-from aeon.base._base import BaseEstimator
+from aeon.base._base import BaseAeonEstimator
 from aeon.utils.validation._dependencies import _check_estimator_deps
 
 # allowed input and internal data types for Series
@@ -21,7 +21,7 @@ VALID_INNER_TYPES = [
 VALID_INPUT_TYPES = [pd.DataFrame, pd.Series, np.ndarray]
 
 
-class BaseSeriesEstimator(BaseEstimator):
+class BaseSeriesEstimator(BaseAeonEstimator):
     """Base class for estimators that use single (possibly multivariate) time series.
 
     Provides functions that are common to BaseSeriesEstimator objects for the checking
diff --git a/aeon/base/_meta.py b/aeon/base/_meta.py
index 1d081a38..0464dc9c 100644
--- a/aeon/base/_meta.py
+++ b/aeon/base/_meta.py
@@ -7,7 +7,7 @@ from inspect import isclass
 
 from sklearn import clone
 
-from aeon.base import BaseEstimator
+from aeon.base import BaseAeonEstimator
 
 
 class _HeterogenousMetaEstimator:
@@ -87,7 +87,7 @@ class _HeterogenousMetaEstimator:
 
         Returns
         -------
-        composite: bool, whether self contains a parameter which is BaseEstimator
+        composite: bool, whether self contains a parameter which is BaseAeonEstimator
         """
         # children of this class are always composite
         return True
@@ -196,7 +196,7 @@ class _HeterogenousMetaEstimator:
 
         Parameters
         ----------
-        cls_type : class or tuple of class, optional. Default = BaseEstimator.
+        cls_type : class or tuple of class, optional. Default = BaseAeonEstimator.
             class(es) that all estimators are checked to be an instance of
 
         Returns
@@ -204,7 +204,7 @@ class _HeterogenousMetaEstimator:
         bool : True if obj is (str, cls_type) tuple, False otherise
         """
         if cls_type is None:
-            cls_type = BaseEstimator
+            cls_type = BaseAeonEstimator
         if not isinstance(obj, tuple) or len(obj) != 2:
             return False
         if not isinstance(obj[0], str) or not isinstance(obj[1], cls_type):
@@ -228,7 +228,7 @@ class _HeterogenousMetaEstimator:
             estimators should inherit from cls_type class
         attr_name : str, optional. Default = "steps"
             Name of checked attribute in error messages
-        cls_type : class or tuple of class, optional. Default = BaseEstimator.
+        cls_type : class or tuple of class, optional. Default = BaseAeonEstimator.
             class(es) that all estimators are checked to be an instance of
         allow_mix : boolean, optional. Default = True.
             whether mix of estimator and (str, estimator) is allowed in `estimators`
@@ -251,8 +251,8 @@ class _HeterogenousMetaEstimator:
             " of estimators, or a list of (string, estimator) tuples. "
         )
         if cls_type is None:
-            msg += f"All estimators in {attr_name!r} must be of type BaseEstimator."
-            cls_type = BaseEstimator
+            msg += f"All estimators in {attr_name!r} must be of type BaseAeonEstimator."
+            cls_type = BaseAeonEstimator
         elif isclass(cls_type) or isinstance(cls_type, tuple):
             msg += (
                 f"All estimators in {attr_name!r} must be of type "
@@ -369,7 +369,8 @@ class _HeterogenousMetaEstimator:
         ests = self._get_estimator_list(estimators)
         if clone_ests:
             ests = [
-                e.clone() if isinstance(e, BaseEstimator) else clone(e) for e in ests
+                e.clone() if isinstance(e, BaseAeonEstimator) else clone(e)
+                for e in ests
             ]
         unique_names = self._get_estimator_names(estimators, make_unique=True)
         est_tuples = list(zip(unique_names, ests))
diff --git a/aeon/base/estimator/compose/collection_ensemble.py b/aeon/base/estimator/compose/collection_ensemble.py
index 36bdf0a5..47abcb93 100644
--- a/aeon/base/estimator/compose/collection_ensemble.py
+++ b/aeon/base/estimator/compose/collection_ensemble.py
@@ -1,13 +1,16 @@
 """Base class for collection ensembles."""
 
 import numpy as np
-from sklearn.base import BaseEstimator as SklearnBaseEstimator
-from sklearn.base import is_classifier
+from sklearn.base import BaseEstimator, is_classifier
 from sklearn.metrics import accuracy_score, mean_squared_error
 from sklearn.model_selection import cross_val_predict
 from sklearn.utils import check_random_state
 
-from aeon.base import BaseCollectionEstimator, BaseEstimator, _HeterogenousMetaEstimator
+from aeon.base import (
+    BaseAeonEstimator,
+    BaseCollectionEstimator,
+    _HeterogenousMetaEstimator,
+)
 from aeon.base._base import _clone_estimator
 
 
@@ -79,7 +82,7 @@ class BaseCollectionEnsemble(_HeterogenousMetaEstimator, BaseCollectionEstimator
         self.ensemble_ = self._check_estimators(
             self._estimators,
             attr_name="_estimators",
-            cls_type=SklearnBaseEstimator,
+            cls_type=BaseEstimator,
             clone_ests=False,
         )
 
@@ -90,7 +93,7 @@ class BaseCollectionEnsemble(_HeterogenousMetaEstimator, BaseCollectionEstimator
             [
                 (
                     e[1].get_tag("capability:multivariate", False, raise_error=False)
-                    if isinstance(e[1], BaseEstimator)
+                    if isinstance(e[1], BaseAeonEstimator)
                     else False
                 )
                 for e in self.ensemble_
@@ -102,7 +105,7 @@ class BaseCollectionEnsemble(_HeterogenousMetaEstimator, BaseCollectionEstimator
             [
                 (
                     e[1].get_tag("capability:missing_values", False, raise_error=False)
-                    if isinstance(e[1], BaseEstimator)
+                    if isinstance(e[1], BaseAeonEstimator)
                     else False
                 )
                 for e in self.ensemble_
@@ -114,7 +117,7 @@ class BaseCollectionEnsemble(_HeterogenousMetaEstimator, BaseCollectionEstimator
             [
                 (
                     e[1].get_tag("capability:unequal_length", False, raise_error=False)
-                    if isinstance(e[1], BaseEstimator)
+                    if isinstance(e[1], BaseAeonEstimator)
                     else False
                 )
                 for e in self.ensemble_
diff --git a/aeon/base/estimator/compose/collection_pipeline.py b/aeon/base/estimator/compose/collection_pipeline.py
index a5708af7..6f8645d7 100644
--- a/aeon/base/estimator/compose/collection_pipeline.py
+++ b/aeon/base/estimator/compose/collection_pipeline.py
@@ -6,10 +6,14 @@ i.e. classification, regression and clustering.
 __maintainer__ = ["MatthewMiddlehurst"]
 
 import numpy as np
-from sklearn.base import BaseEstimator as SklearnBaseEstimator
+from sklearn.base import BaseEstimator
 from sklearn.utils import check_random_state
 
-from aeon.base import BaseCollectionEstimator, BaseEstimator, _HeterogenousMetaEstimator
+from aeon.base import (
+    BaseAeonEstimator,
+    BaseCollectionEstimator,
+    _HeterogenousMetaEstimator,
+)
 from aeon.base._base import _clone_estimator
 
 
@@ -62,7 +66,7 @@ class BaseCollectionPipeline(_HeterogenousMetaEstimator, BaseCollectionEstimator
         self._steps = self._check_estimators(
             self._steps,
             attr_name="_steps",
-            cls_type=SklearnBaseEstimator,
+            cls_type=BaseEstimator,
             clone_ests=False,
         )
 
@@ -73,7 +77,7 @@ class BaseCollectionPipeline(_HeterogenousMetaEstimator, BaseCollectionEstimator
         multivariate_tags = [
             (
                 e[1].get_tag("capability:multivariate", False, raise_error=False)
-                if isinstance(e[1], BaseEstimator)
+                if isinstance(e[1], BaseAeonEstimator)
                 else False
             )
             for e in self._steps
@@ -82,13 +86,13 @@ class BaseCollectionPipeline(_HeterogenousMetaEstimator, BaseCollectionEstimator
         multivariate_rm_tag = False
         for e in self._steps:
             if (
-                isinstance(e[1], BaseEstimator)
+                isinstance(e[1], BaseAeonEstimator)
                 and e[1].get_tag("capability:multivariate", False, raise_error=False)
                 and e[1].get_tag("output_data_type", raise_error=False) == "Tabular"
             ):
                 multivariate_rm_tag = True
                 break
-            elif not isinstance(e[1], BaseEstimator) or not e[1].get_tag(
+            elif not isinstance(e[1], BaseAeonEstimator) or not e[1].get_tag(
                 "capability:multivariate", False, raise_error=False
             ):
                 break
@@ -100,7 +104,7 @@ class BaseCollectionPipeline(_HeterogenousMetaEstimator, BaseCollectionEstimator
         missing_tags = [
             (
                 e[1].get_tag("capability:missing_values", False, raise_error=False)
-                if isinstance(e[1], BaseEstimator)
+                if isinstance(e[1], BaseAeonEstimator)
                 else False
             )
             for e in self._steps
@@ -109,13 +113,13 @@ class BaseCollectionPipeline(_HeterogenousMetaEstimator, BaseCollectionEstimator
         missing_rm_tag = False
         for e in self._steps:
             if (
-                isinstance(e[1], BaseEstimator)
+                isinstance(e[1], BaseAeonEstimator)
                 and e[1].get_tag("capability:missing_values", False, raise_error=False)
                 and e[1].get_tag("removes_missing_values", False, raise_error=False)
             ):
                 missing_rm_tag = True
                 break
-            elif not isinstance(e[1], BaseEstimator) or not e[1].get_tag(
+            elif not isinstance(e[1], BaseAeonEstimator) or not e[1].get_tag(
                 "capability:missing_values", False, raise_error=False
             ):
                 break
@@ -128,7 +132,7 @@ class BaseCollectionPipeline(_HeterogenousMetaEstimator, BaseCollectionEstimator
         unequal_tags = [
             (
                 e[1].get_tag("capability:unequal_length", False, raise_error=False)
-                if isinstance(e[1], BaseEstimator)
+                if isinstance(e[1], BaseAeonEstimator)
                 else False
             )
             for e in self._steps
@@ -137,7 +141,7 @@ class BaseCollectionPipeline(_HeterogenousMetaEstimator, BaseCollectionEstimator
         unequal_rm_tag = False
         for e in self._steps:
             if (
-                isinstance(e[1], BaseEstimator)
+                isinstance(e[1], BaseAeonEstimator)
                 and e[1].get_tag("capability:unequal_length", False, raise_error=False)
                 and (
                     e[1].get_tag("removes_unequal_length", False, raise_error=False)
@@ -146,7 +150,7 @@ class BaseCollectionPipeline(_HeterogenousMetaEstimator, BaseCollectionEstimator
             ):
                 unequal_rm_tag = True
                 break
-            elif not isinstance(e[1], BaseEstimator) or not e[1].get_tag(
+            elif not isinstance(e[1], BaseAeonEstimator) or not e[1].get_tag(
                 "capability:unequal_length", False, raise_error=False
             ):
                 break
diff --git a/aeon/pipeline/_make_pipeline.py b/aeon/pipeline/_make_pipeline.py
index de0c1996..bbf8e12d 100644
--- a/aeon/pipeline/_make_pipeline.py
+++ b/aeon/pipeline/_make_pipeline.py
@@ -29,7 +29,7 @@ def make_pipeline(*steps):
     Returns
     -------
     pipe : aeon pipeline containing steps, in order
-        always a descendant of BaseEstimator, precise object determined by
+        always a descendant of BaseAeonEstimator, precise object determined by
         equivalent to result of step[0] * step[1] * ... * step[-1]
 
     Examples
diff --git a/aeon/registry/_base_classes.py b/aeon/registry/_base_classes.py
index 4dd2a92d..a76ca4b1 100644
--- a/aeon/registry/_base_classes.py
+++ b/aeon/registry/_base_classes.py
@@ -33,7 +33,7 @@ __maintainer__ = []
 import pandas as pd
 
 from aeon.anomaly_detection.base import BaseAnomalyDetector
-from aeon.base import BaseCollectionEstimator, BaseEstimator, BaseSeriesEstimator
+from aeon.base import BaseAeonEstimator, BaseCollectionEstimator, BaseSeriesEstimator
 from aeon.classification.base import BaseClassifier
 from aeon.classification.early_classification import BaseEarlyClassifier
 from aeon.clustering.base import BaseClusterer
@@ -46,7 +46,7 @@ from aeon.transformations.series import BaseSeriesTransformer
 
 BASE_CLASS_REGISTER = [
     ("anomaly-detector", BaseAnomalyDetector, "anomaly detector"),
-    ("estimator", BaseEstimator, "estimator = object with fit"),
+    ("estimator", BaseAeonEstimator, "estimator = object with fit"),
     ("classifier", BaseClassifier, "classifier"),
     ("collection-estimator", BaseCollectionEstimator, "collection estimator"),
     ("collection-transformer", BaseCollectionTransformer, "collection transformer"),
diff --git a/aeon/registry/_identifier.py b/aeon/registry/_identifier.py
index 53eba291..93f4e132 100644
--- a/aeon/registry/_identifier.py
+++ b/aeon/registry/_identifier.py
@@ -12,7 +12,7 @@ def get_identifiers(obj, force_single_identifier=True, coerce_to_list=False):
 
     Parameters
     ----------
-    obj : class or object inheriting from aeon BaseEstimator
+    obj : class or object inheriting from aeon BaseAeonEstimator
     force_single_identifier : bool, optional, default = True
         whether only a single identifier is returned
         if True, only the *first* identifier found will be returned
diff --git a/aeon/registry/_lookup.py b/aeon/registry/_lookup.py
index 485589b7..79cdd497 100644
--- a/aeon/registry/_lookup.py
+++ b/aeon/registry/_lookup.py
@@ -21,13 +21,13 @@ from pathlib import Path
 
 import pandas as pd
 
-from aeon.base import BaseEstimator
+from aeon.base import BaseAeonEstimator
 from aeon.registry._base_classes import BASE_CLASS_LIST, BASE_CLASS_LOOKUP
 
 VALID_ESTIMATOR_BASE_TYPES = tuple(BASE_CLASS_LIST)
 
 VALID_ESTIMATOR_TYPES = (
-    BaseEstimator,
+    BaseAeonEstimator,
     *VALID_ESTIMATOR_BASE_TYPES,
 )
 
@@ -374,7 +374,7 @@ def _get_return_tags(estimator, return_tags):
 
     Parameters
     ----------
-    estimator:  BaseEstimator, an aeon estimator
+    estimator:  BaseAeonEstimator, an aeon estimator
     return_tags: list of str,
         names of tags to get values for the estimator
 
@@ -392,7 +392,7 @@ def _check_tag_cond(estimator, filter_tags=None, as_dataframe=True):
 
     Parameters
     ----------
-    estimator: BaseEstimator, an aeon estimator
+    estimator: BaseAeonEstimator, an aeon estimator
     filter_tags: dict of (str or list of str), default=None
         subsets the returned estimators as follows:
             each key/value pair is statement in "and"/conjunction
diff --git a/aeon/transformations/base.py b/aeon/transformations/base.py
index c6b53133..65af8324 100644
--- a/aeon/transformations/base.py
+++ b/aeon/transformations/base.py
@@ -5,10 +5,10 @@ __all__ = ["BaseTransformer"]
 
 from abc import ABC, abstractmethod
 
-from aeon.base import BaseEstimator
+from aeon.base import BaseAeonEstimator
 
 
-class BaseTransformer(BaseEstimator, ABC):
+class BaseTransformer(BaseAeonEstimator, ABC):
     """Transformer base class."""
 
     _tags = {
diff --git a/aeon/transformations/collection/channel_selection/_channel_scorer.py b/aeon/transformations/collection/channel_selection/_channel_scorer.py
index 1559d7c5..e4289f66 100644
--- a/aeon/transformations/collection/channel_selection/_channel_scorer.py
+++ b/aeon/transformations/collection/channel_selection/_channel_scorer.py
@@ -12,7 +12,7 @@ from typing import Optional, Union
 import numpy as np
 from sklearn.metrics import accuracy_score, mean_squared_error
 
-from aeon.base import BaseEstimator
+from aeon.base import BaseAeonEstimator
 from aeon.classification.base import BaseClassifier
 from aeon.regression.base import BaseRegressor
 from aeon.transformations.collection.channel_selection.base import BaseChannelSelector
@@ -62,7 +62,7 @@ class ChannelScorer(BaseChannelSelector):
 
     def __init__(
         self,
-        estimator: Optional[BaseEstimator],
+        estimator: Optional[BaseAeonEstimator],
         scoring_function: Callable = None,
         score_sign: float = None,
         proportion: float = 0.4,
diff --git a/aeon/utils/sklearn.py b/aeon/utils/sklearn.py
index a33be068..1f7d45a6 100644
--- a/aeon/utils/sklearn.py
+++ b/aeon/utils/sklearn.py
@@ -2,14 +2,19 @@
 
 from inspect import isclass
 
-from sklearn.base import BaseEstimator as SklearnBaseEstimator
-from sklearn.base import ClassifierMixin, ClusterMixin, RegressorMixin, TransformerMixin
+from sklearn.base import (
+    BaseEstimator,
+    ClassifierMixin,
+    ClusterMixin,
+    RegressorMixin,
+    TransformerMixin,
+)
 from sklearn.model_selection import GridSearchCV, RandomizedSearchCV
 from sklearn.pipeline import Pipeline
 
 __maintainer__ = []
 
-from aeon.base import BaseEstimator
+from aeon.base import BaseAeonEstimator
 
 
 def is_sklearn_estimator(obj):
@@ -26,8 +31,8 @@ def is_sklearn_estimator(obj):
     if not isclass(obj):
         obj = type(obj)
 
-    is_in_sklearn = issubclass(obj, SklearnBaseEstimator)
-    is_in_aeon = issubclass(obj, BaseEstimator)
+    is_in_sklearn = issubclass(obj, BaseEstimator)
+    is_in_aeon = issubclass(obj, BaseAeonEstimator)
 
     is_sklearn_est = is_in_sklearn and not is_in_aeon
     return is_sklearn_est
diff --git a/aeon/utils/tags/_lookup.py b/aeon/utils/tags/_lookup.py
index affbe778..87a949c9 100644
--- a/aeon/utils/tags/_lookup.py
+++ b/aeon/utils/tags/_lookup.py
@@ -5,7 +5,7 @@ __all__ = ["all_tags_for_estimator"]
 
 from inspect import isclass
 
-from aeon.base import BaseEstimator
+from aeon.base import BaseAeonEstimator
 from aeon.registry import BASE_CLASS_IDENTIFIER_LIST, BASE_CLASS_LIST
 from aeon.utils.tags._tags import ESTIMATOR_TAGS
 
@@ -33,16 +33,16 @@ def all_tags_for_estimator(
     tags: dictionary of tags,
         filtered version of ``aeon.utils.tags.ESTIMATOR_TAGS``.
     """
-    if isinstance(estimator, BaseEstimator):
+    if isinstance(estimator, BaseAeonEstimator):
         method = isinstance
-    elif isclass(estimator) and issubclass(estimator, BaseEstimator):
+    elif isclass(estimator) and issubclass(estimator, BaseAeonEstimator):
         method = issubclass
     elif isinstance(estimator, str) and estimator in BASE_CLASS_IDENTIFIER_LIST:
         estimator = BASE_CLASS_LIST[BASE_CLASS_IDENTIFIER_LIST.index(estimator)]
         method = issubclass
     else:
         raise ValueError(
-            "Estimator must be an instance or subclass of BaseEstimator, "
+            "Estimator must be an instance or subclass of BaseAeonEstimator, "
             "or a valid string from BASE_CLASS_REGISTER."
         )
 
diff --git a/aeon/utils/tags/_validate.py b/aeon/utils/tags/_validate.py
index 840b4616..2c56bccd 100644
--- a/aeon/utils/tags/_validate.py
+++ b/aeon/utils/tags/_validate.py
@@ -5,7 +5,7 @@ __all__ = ["check_valid_tags"]
 
 from inspect import isclass
 
-from aeon.base import BaseEstimator
+from aeon.base import BaseAeonEstimator
 from aeon.registry import BASE_CLASS_IDENTIFIER_LIST, BASE_CLASS_LIST
 from aeon.utils.tags import ESTIMATOR_TAGS, all_tags_for_estimator
 
@@ -27,18 +27,20 @@ def check_valid_tags(estimator, tags=None, error_on_missing=True):
     ValueError
         If a tag is not valid for the estimator.
     """
-    if isinstance(estimator, BaseEstimator):
+    if isinstance(estimator, BaseAeonEstimator):
         if tags is None:
             tags = estimator.get_tags()
         method = isinstance
         est_name = estimator.__class__.__name__
-    elif isclass(estimator) and issubclass(estimator, BaseEstimator):
+    elif isclass(estimator) and issubclass(estimator, BaseAeonEstimator):
         if tags is None:
             tags = estimator.get_class_tags()
         method = issubclass
         est_name = estimator.__name__
     else:
-        raise ValueError("Estimator must be an instance or subclass of BaseEstimator.")
+        raise ValueError(
+            "Estimator must be an instance or subclass of BaseAeonEstimator."
+        )
 
     for tag_name, tag_value in tags.items():
         # check if the tag exists
diff --git a/aeon/utils/validation/_dependencies.py b/aeon/utils/validation/_dependencies.py
index 30c34d48..d470beb0 100644
--- a/aeon/utils/validation/_dependencies.py
+++ b/aeon/utils/validation/_dependencies.py
@@ -234,7 +234,7 @@ def _check_python_version(obj, package=None, msg=None, severity="error"):
 
     Parameters
     ----------
-    obj : aeon estimator, BaseEstimator descendant
+    obj : aeon estimator, BaseAeonEstimator descendant
         used to check python version
     package : str, default = None
         if given, will be used in error message as package name
@@ -312,12 +312,12 @@ def _check_estimator_deps(obj, msg=None, severity="error"):
     Convenience wrapper around `_check_python_version` and `_check_soft_dependencies`,
     checking against estimator tags `"python_version"`, `"python_dependencies"`.
 
-    Checks whether dependency requirements of `BaseEstimator`-s in `obj`
+    Checks whether dependency requirements of `BaseAeonEstimator`-s in `obj`
     are satisfied by the current python environment.
 
     Parameters
     ----------
-    obj : `aeon` object, `BaseEstimator` descendant, or list/tuple thereof
+    obj : `aeon` object, `BaseAeonEstimator` descendant, or list/tuple thereof
         object(s) that this function checks compatibility of, with the python env
     msg : str, optional, default = default message (msg below)
         error message to be returned in the `ModuleNotFoundError`, overrides default
@@ -335,7 +335,8 @@ def _check_estimator_deps(obj, msg=None, severity="error"):
         False is returned only if no exception is raised by the function
         checks for python version using the python_version tag of obj
         checks for soft dependencies present using the python_dependencies tag of obj
-        if `obj` contains multiple `BaseEstimator`-s, checks whether all are compatible
+        if `obj` contains multiple `BaseAeonEstimator`-s, checks whether all are
+        compatible
 
     Raises
     ------
diff --git a/docs/api_reference/base.rst b/docs/api_reference/base.rst
index c4329dc7..5a7ba0d8 100644
--- a/docs/api_reference/base.rst
+++ b/docs/api_reference/base.rst
@@ -18,7 +18,7 @@ Base classes
     :toctree: auto_generated/
     :template: class.rst
 
-    BaseEstimator
+    BaseAeonEstimator
     BaseCollectionEstimator
     BaseSeriesEstimator
 


Test patch:
diff --git a/aeon/base/tests/test_base.py b/aeon/base/tests/test_base.py
index 988af2c4..d41df16f 100644
--- a/aeon/base/tests/test_base.py
+++ b/aeon/base/tests/test_base.py
@@ -1,5 +1,5 @@
 """
-Tests for BaseEstimator universal base class.
+Tests for BaseAeonEstimator universal base class.
 
 tests in this module:
 
@@ -34,11 +34,11 @@ from copy import deepcopy
 
 import pytest
 
-from aeon.base import BaseEstimator
+from aeon.base import BaseAeonEstimator
 
 
 # Fixture class for testing tag system
-class FixtureClassParent(BaseEstimator):
+class FixtureClassParent(BaseAeonEstimator):
     _tags = {"A": "1", "B": 2, "C": 1234, 3: "D"}
 
 
@@ -83,7 +83,7 @@ FIXTURE_OBJECT_TAGS = {
 
 
 def test_get_class_tags():
-    """Tests get_class_tags class method of BaseEstimator for correctness.
+    """Tests get_class_tags class method of BaseAeonEstimator for correctness.
 
     Raises
     ------
@@ -91,13 +91,13 @@ def test_get_class_tags():
     """
     child_tags = FIXTURE_CLASSCHILD.get_class_tags()
 
-    msg = "Inheritance logic in BaseEstimator.get_class_tags is incorrect"
+    msg = "Inheritance logic in BaseAeonEstimator.get_class_tags is incorrect"
 
     assert child_tags == FIXTURE_CLASSCHILD_TAGS, msg
 
 
 def test_get_class_tag():
-    """Tests get_class_tag class method of BaseEstimator for correctness.
+    """Tests get_class_tag class method of BaseAeonEstimator for correctness.
 
     Raises
     ------
@@ -113,19 +113,19 @@ def test_get_class_tag():
     child_tag_default = FIXTURE_CLASSCHILD.get_class_tag("foo", "bar")
     child_tag_defaultNone = FIXTURE_CLASSCHILD.get_class_tag("bar")
 
-    msg = "Inheritance logic in BaseEstimator.get_class_tag is incorrect"
+    msg = "Inheritance logic in BaseAeonEstimator.get_class_tag is incorrect"
 
     for key in child_tags_keys:
         assert child_tags[key] == FIXTURE_CLASSCHILD_TAGS[key], msg
 
-    msg = "Default override logic in BaseEstimator.get_class_tag is incorrect"
+    msg = "Default override logic in BaseAeonEstimator.get_class_tag is incorrect"
 
     assert child_tag_default == "bar", msg
     assert child_tag_defaultNone is None, msg
 
 
 def test_get_tags():
-    """Tests get_tags method of BaseEstimator for correctness.
+    """Tests get_tags method of BaseAeonEstimator for correctness.
 
     Raises
     ------
@@ -133,13 +133,13 @@ def test_get_tags():
     """
     object_tags = FIXTURE_OBJECT.get_tags()
 
-    msg = "Inheritance logic in BaseEstimator.get_tags is incorrect"
+    msg = "Inheritance logic in BaseAeonEstimator.get_tags is incorrect"
 
     assert object_tags == FIXTURE_OBJECT_TAGS, msg
 
 
 def test_get_tag():
-    """Tests get_tag method of BaseEstimator for correctness.
+    """Tests get_tag method of BaseAeonEstimator for correctness.
 
     Raises
     ------
@@ -155,12 +155,12 @@ def test_get_tag():
     object_tag_default = FIXTURE_OBJECT.get_tag("foo", "bar", raise_error=False)
     object_tag_defaultNone = FIXTURE_OBJECT.get_tag("bar", raise_error=False)
 
-    msg = "Inheritance logic in BaseEstimator.get_tag is incorrect"
+    msg = "Inheritance logic in BaseAeonEstimator.get_tag is incorrect"
 
     for key in object_tags_keys:
         assert object_tags[key] == FIXTURE_OBJECT_TAGS[key], msg
 
-    msg = "Default override logic in BaseEstimator.get_tag is incorrect"
+    msg = "Default override logic in BaseAeonEstimator.get_tag is incorrect"
 
     assert object_tag_default == "bar", msg
     assert object_tag_defaultNone is None, msg
@@ -197,19 +197,19 @@ FIXTURE_OBJECT_SET_DYN = {"A": 42424243, "B": 3, "E": 3}
 
 
 def test_set_tags():
-    """Tests set_tags method of BaseEstimator for correctness.
+    """Tests set_tags method of BaseAeonEstimator for correctness.
 
     Raises
     ------
     AssertionError if override logic in set_tags is incorrect
     """
-    msg = "Setter/override logic in BaseEstimator.set_tags is incorrect"
+    msg = "Setter/override logic in BaseAeonEstimator.set_tags is incorrect"
 
     assert FIXTURE_OBJECT_SET._tags_dynamic == FIXTURE_OBJECT_SET_DYN, msg
     assert FIXTURE_OBJECT_SET.get_tags() == FIXTURE_OBJECT_SET_TAGS, msg
 
 
-class CompositionDummy(BaseEstimator):
+class CompositionDummy(BaseAeonEstimator):
     """Potentially composite object, for testing."""
 
     def __init__(self, foo, bar=84):
@@ -218,7 +218,7 @@ class CompositionDummy(BaseEstimator):
         self.bar = bar
 
 
-class ResetTester(BaseEstimator):
+class ResetTester(BaseAeonEstimator):
     clsvar = 210
 
     def __init__(self, a, b=42):
@@ -282,8 +282,8 @@ def test_components():
     ------
     AssertionError if logic behind _components is incorrect, logic tested:
         calling _components on a non-composite returns an empty dict
-        calling _components on a composite returns name/BaseEstimator pair in dict,
-        and BaseEstimator returned is identical with attribute of the same name
+        calling _components on a composite returns name/BaseAeonEstimator pair in dict,
+        and BaseAeonEstimator returned is identical with attribute of the same name
     """
     non_composite = CompositionDummy(foo=42)
     composite = CompositionDummy(foo=non_composite)
@@ -300,7 +300,7 @@ def test_components():
     assert comp_comps["foo_"] is not composite.foo
 
 
-class FittableCompositionDummy(BaseEstimator):
+class FittableCompositionDummy(BaseAeonEstimator):
     """Potentially composite object, for testing."""
 
     def __init__(self, foo, bar=84):
diff --git a/aeon/base/tests/test_meta.py b/aeon/base/tests/test_meta.py
index d059e570..bb3d3dcb 100644
--- a/aeon/base/tests/test_meta.py
+++ b/aeon/base/tests/test_meta.py
@@ -23,7 +23,7 @@ def test_hetero_meta():
     bce._check_names(names)
     assert not h._is_name_and_est("Single")
     assert not h._is_name_and_est(("Single", "Tuple"))
-    with pytest.raises(TypeError, match="must be of type BaseEstimator"):
+    with pytest.raises(TypeError, match="must be of type BaseAeonEstimator"):
         h._check_estimators(estimators="FOO")
         h._check_estimators(estimators=None)
     with pytest.raises(TypeError, match="cls_type must be a class"):
diff --git a/aeon/pipeline/tests/test_make_pipeline.py b/aeon/pipeline/tests/test_make_pipeline.py
index 4810890a..ea8d5df6 100644
--- a/aeon/pipeline/tests/test_make_pipeline.py
+++ b/aeon/pipeline/tests/test_make_pipeline.py
@@ -6,7 +6,7 @@ from sklearn.cluster import KMeans
 from sklearn.ensemble import RandomForestClassifier, RandomForestRegressor
 from sklearn.preprocessing import StandardScaler
 
-from aeon.base import BaseEstimator
+from aeon.base import BaseAeonEstimator
 from aeon.classification import DummyClassifier
 from aeon.clustering import TimeSeriesKMeans
 from aeon.pipeline import make_pipeline
@@ -41,5 +41,5 @@ def test_make_pipeline(pipeline):
     else:
         o = est.transform(X)
 
-    assert isinstance(est, BaseEstimator)
+    assert isinstance(est, BaseAeonEstimator)
     assert isinstance(o, np.ndarray)
diff --git a/aeon/registry/tests/test_lookup.py b/aeon/registry/tests/test_lookup.py
index e420ff80..1bdc90fa 100644
--- a/aeon/registry/tests/test_lookup.py
+++ b/aeon/registry/tests/test_lookup.py
@@ -4,7 +4,7 @@ __maintainer__ = []
 
 import pytest
 
-from aeon.base import BaseEstimator
+from aeon.base import BaseAeonEstimator
 from aeon.registry import all_estimators, get_identifiers
 from aeon.registry._base_classes import BASE_CLASS_IDENTIFIER_LIST, BASE_CLASS_LOOKUP
 from aeon.registry._lookup import _check_estimator_types
@@ -57,7 +57,7 @@ def _get_type_tuple(estimator_identifiers):
             BASE_CLASS_LOOKUP[id] for id in _to_list(estimator_identifiers)
         )
     else:
-        estimator_classes = (BaseEstimator,)
+        estimator_classes = (BaseAeonEstimator,)
 
     return estimator_classes
 
diff --git a/aeon/testing/estimator_checking/_estimator_checking.py b/aeon/testing/estimator_checking/_estimator_checking.py
index 1e0f1621..6107aad9 100644
--- a/aeon/testing/estimator_checking/_estimator_checking.py
+++ b/aeon/testing/estimator_checking/_estimator_checking.py
@@ -16,7 +16,7 @@ from typing import Callable, Union
 from sklearn import config_context
 from sklearn.utils._testing import SkipTest
 
-from aeon.base import BaseEstimator
+from aeon.base import BaseAeonEstimator
 from aeon.testing.estimator_checking._yield_estimator_checks import (
     _yield_all_aeon_checks,
 )
@@ -28,7 +28,7 @@ from aeon.utils.validation._dependencies import (
 
 
 def parametrize_with_checks(
-    estimators: list[Union[BaseEstimator, type[BaseEstimator]]],
+    estimators: list[Union[BaseAeonEstimator, type[BaseAeonEstimator]]],
     use_first_parameter_set: bool = False,
 ) -> Callable:
     """Pytest specific decorator for parametrizing aeon estimator checks.
@@ -43,9 +43,9 @@ def parametrize_with_checks(
 
     Parameters
     ----------
-    estimators : list of aeon BaseEstimator instances or classes
+    estimators : list of aeon BaseAeonEstimator instances or classes
         Estimators to generate checks for. If an item is a class, an instance will
-        be created using BaseEstimator.create_test_instance().
+        be created using BaseAeonEstimator.create_test_instance().
     use_first_parameter_set : bool, default=False
         If True, only the first parameter set from get_test_params will be used if a
         class is passed.
@@ -96,7 +96,7 @@ def parametrize_with_checks(
 
 
 def check_estimator(
-    estimator: Union[BaseEstimator, type[BaseEstimator]],
+    estimator: Union[BaseAeonEstimator, type[BaseAeonEstimator]],
     raise_exceptions: bool = False,
     use_first_parameter_set: bool = False,
     checks_to_run: Optional[Union[str, list[str]]] = None,
@@ -117,9 +117,9 @@ def check_estimator(
 
     Parameters
     ----------
-    estimator : aeon BaseEstimator instance or class
+    estimator : aeon BaseAeonEstimator instance or class
         Estimator to run checks on. If estimator is a class, an instance will
-        be created using BaseEstimator.create_test_instance().
+        be created using BaseAeonEstimator.create_test_instance().
     raise_exceptions : bool, optional, default=False
         Whether to return exceptions/failures in the results dict, or raise them
             if False: returns exceptions in returned `results` dict
diff --git a/aeon/testing/estimator_checking/_yield_estimator_checks.py b/aeon/testing/estimator_checking/_yield_estimator_checks.py
index 7c623c05..c4ad2644 100644
--- a/aeon/testing/estimator_checking/_yield_estimator_checks.py
+++ b/aeon/testing/estimator_checking/_yield_estimator_checks.py
@@ -14,7 +14,7 @@ from sklearn.exceptions import NotFittedError
 from sklearn.utils.estimator_checks import check_get_params_invariance
 
 from aeon.anomaly_detection.base import BaseAnomalyDetector
-from aeon.base import BaseEstimator
+from aeon.base import BaseAeonEstimator
 from aeon.base._base import _clone_estimator
 from aeon.classification import BaseClassifier
 from aeon.classification.deep_learning.base import BaseDeepClassifier
@@ -89,17 +89,17 @@ def _yield_all_aeon_checks(
         has_dependencies = _check_estimator_deps(estimator, severity="none")
 
     if has_dependencies:
-        if isclass(estimator) and issubclass(estimator, BaseEstimator):
+        if isclass(estimator) and issubclass(estimator, BaseAeonEstimator):
             estimator_class = estimator
             estimator_instances = estimator.create_test_instance(
                 return_first=use_first_parameter_set
             )
-        elif isinstance(estimator, BaseEstimator):
+        elif isinstance(estimator, BaseAeonEstimator):
             estimator_class = type(estimator)
             estimator_instances = estimator
         else:
             raise TypeError(
-                "Passed estimator is not an instance or subclass of BaseEstimator."
+                "Passed estimator is not an instance or subclass of BaseAeonEstimator."
             )
 
         if not isinstance(estimator_instances, list):
@@ -260,18 +260,18 @@ def check_create_test_instance(estimator_class):
 
 # todo consider removing the multiple base class allowance.
 def check_inheritance(estimator_class):
-    """Check that estimator inherits from BaseEstimator."""
+    """Check that estimator inherits from BaseAeonEstimator."""
     assert issubclass(
-        estimator_class, BaseEstimator
-    ), f"object {estimator_class} is not a sub-class of BaseEstimator."
+        estimator_class, BaseAeonEstimator
+    ), f"object {estimator_class} is not a sub-class of BaseAeonEstimator."
 
     if hasattr(estimator_class, "fit"):
-        assert issubclass(estimator_class, BaseEstimator), (
+        assert issubclass(estimator_class, BaseAeonEstimator), (
             f"estimator: {estimator_class} has fit method, but"
-            f"is not a sub-class of BaseEstimator."
+            f"is not a sub-class of BaseAeonEstimator."
         )
 
-    # Usually estimators inherit only from one BaseEstimator type, but in some cases
+    # Usually estimators inherit only from one BaseAeonEstimator type, but in some cases
     # they may be predictor and transformer at the same time (e.g. pipelines)
     n_base_types = sum(
         issubclass(estimator_class, cls) for cls in VALID_ESTIMATOR_BASE_TYPES
@@ -288,7 +288,7 @@ def check_inheritance(estimator_class):
 def check_has_common_interface(estimator_class):
     """Check estimator implements the common interface."""
     # Check class for type of attribute
-    if isinstance(estimator_class, BaseEstimator):
+    if isinstance(estimator_class, BaseAeonEstimator):
         assert isinstance(estimator_class.is_fitted, property)
 
     required_methods = _list_required_methods(estimator_class)
@@ -531,8 +531,8 @@ def check_non_state_changing_method(estimator, datatype):
     1. do not change state of the estimator, i.e., any attributes
         (including hyper-parameters and fitted parameters)
     2. expected output type of the method matches actual output type
-        - only for abstract BaseEstimator methods, common to all estimators.
-        List of BaseEstimator methods tested: get_fitted_params
+        - only for abstract BaseAeonEstimator methods, common to all estimators.
+        List of BaseAeonEstimator methods tested: get_fitted_params
         Subclass specific method outputs are tested in TestAll[estimatortype] class
     3. the state of method arguments does not change
     """
diff --git a/aeon/testing/testing_config.py b/aeon/testing/testing_config.py
index 9d8f96ab..e6345f5d 100644
--- a/aeon/testing/testing_config.py
+++ b/aeon/testing/testing_config.py
@@ -4,7 +4,7 @@ __maintainer__ = ["MatthewMiddlehurst"]
 __all__ = ["EXCLUDE_ESTIMATORS", "EXCLUDED_TESTS"]
 
 import aeon.testing.utils._cicd_numba_caching  # noqa: F401
-from aeon.base import BaseCollectionEstimator, BaseEstimator, BaseSeriesEstimator
+from aeon.base import BaseAeonEstimator, BaseCollectionEstimator, BaseSeriesEstimator
 from aeon.registry import BASE_CLASS_LIST, BASE_CLASS_LOOKUP
 
 # whether to use smaller parameter matrices for test generation and subsample estimators
@@ -95,14 +95,14 @@ NON_STATE_CHANGING_METHODS = NON_STATE_CHANGING_METHODS_ARRAYLIKE + (
 
 # The following gives a list of valid estimator base classes.
 CORE_BASE_TYPES = (
-    BaseEstimator,
+    BaseAeonEstimator,
     BaseCollectionEstimator,
     BaseSeriesEstimator,
 )
 VALID_ESTIMATOR_BASE_TYPES = tuple(set(BASE_CLASS_LIST).difference(CORE_BASE_TYPES))
 
 VALID_ESTIMATOR_TYPES = (
-    BaseEstimator,
+    BaseAeonEstimator,
     *VALID_ESTIMATOR_BASE_TYPES,
 )
 
diff --git a/aeon/testing/testing_data.py b/aeon/testing/testing_data.py
index 76cef87d..b06ac6ee 100644
--- a/aeon/testing/testing_data.py
+++ b/aeon/testing/testing_data.py
@@ -852,7 +852,7 @@ def _get_datatypes_for_estimator(estimator):
 
     Parameters
     ----------
-    estimator : BaseEstimator instance or class
+    estimator : BaseAeonEstimator instance or class
         Estimator instance or class to check for valid input data types.
 
     Returns
@@ -916,7 +916,7 @@ def _get_capabilities_for_estimator(estimator):
 
     Parameters
     ----------
-    estimator : BaseEstimator instance or class
+    estimator : BaseAeonEstimator instance or class
         Estimator instance or class to check for valid input data types.
 
     Returns
@@ -944,7 +944,7 @@ def _get_label_type_for_estimator(estimator):
 
     Parameters
     ----------
-    estimator : BaseEstimator instance or class
+    estimator : BaseAeonEstimator instance or class
         Estimator instance or class to check for valid input data types.
 
     Returns
diff --git a/aeon/testing/utils/estimator_checks.py b/aeon/testing/utils/estimator_checks.py
index e6efa52e..ae616321 100644
--- a/aeon/testing/utils/estimator_checks.py
+++ b/aeon/testing/utils/estimator_checks.py
@@ -9,7 +9,7 @@ import numpy as np
 import pandas as pd
 from pandas.testing import assert_frame_equal
 
-from aeon.base import BaseEstimator
+from aeon.base import BaseAeonEstimator
 from aeon.clustering.base import BaseClusterer
 from aeon.regression.base import BaseRegressor
 from aeon.testing.testing_data import FULL_TEST_DATA_DICT
@@ -55,11 +55,11 @@ def _get_tag(estimator, tag_name, default=None, raise_error=False):
 
 
 def _list_required_methods(estimator):
-    """Return list of required method names (beyond BaseEstimator ones)."""
-    # all BaseEstimator children must implement these
+    """Return list of required method names (beyond BaseAeonEstimator ones)."""
+    # all BaseAeonEstimator children must implement these
     MUST_HAVE_FOR_OBJECTS = ["set_params", "get_params"]
 
-    # all BaseEstimator children must implement these
+    # all BaseAeonEstimator children must implement these
     MUST_HAVE_FOR_ESTIMATORS = [
         "fit",
         "check_is_fitted",
@@ -75,10 +75,10 @@ def _list_required_methods(estimator):
 
     required_methods = []
 
-    if isinstance(estimator, BaseEstimator):
+    if isinstance(estimator, BaseAeonEstimator):
         required_methods += MUST_HAVE_FOR_OBJECTS
 
-    if isinstance(estimator, BaseEstimator):
+    if isinstance(estimator, BaseAeonEstimator):
         required_methods += MUST_HAVE_FOR_ESTIMATORS
 
     if isinstance(estimator, BASE_CLASSES_THAT_MUST_HAVE_PREDICT):
diff --git a/docs/developer_guide/testing.md b/docs/developer_guide/testing.md
index 9f0be7f5..ea1a34e8 100644
--- a/docs/developer_guide/testing.md
+++ b/docs/developer_guide/testing.md
@@ -9,7 +9,7 @@ tests, or how to extend the testing framework.
 `aeon` testing happens on three layers, roughly corresponding to the inheritance layers
 of estimators.
 
-* **package level**: testing interface compliance with the `BaseEstimator`
+* **package level**: testing interface compliance with the `BaseAeonEstimator`
 specifications, in `tests/test_all_estimators.py`
 * **module level**: testing interface compliance of concrete estimators with their base
 class, for instance `classification/tests/test_all_classifiers.py`