class_docstr: Shapelet Transform.
  
  Original journal publication:
  @article{hills2014classification,
    title={Classification of time series by shapelet transformation},
    author={Hills, Jon and Lines, Jason and Baranauskas, Edgaras and Mapp,
    James and Bagnall, Anthony},
    journal={Data Mining and Knowledge Discovery},
    volume={28},
    number={4},
    pages={851--881},
    year={2014},
    publisher={Springer}
  }
  
  Parameters
  ----------
  min_shapelet_length                 : int, lower bound on candidate
  shapelet lengths (default = 3)
  max_shapelet_length                 : int, upper bound on candidate
  shapelet lengths (default = inf or series length)
  max_shapelets_to_store_per_class    : int, upper bound on number of
  shapelets to retain from each distinct class (default = 200)
  random_state                        : RandomState, int, or none: to
  control random state objects for deterministic results (default = None)
  verbose                             : int, level of output printed to
  the console (for information only) (default = 0)
  remove_self_similar                 : boolean, remove overlapping
  "self-similar" shapelets from the final transform (default = True)
  
  Attributes
  ----------
  predefined_ig_rejection_level       : float, minimum information gain
  required to keep a shapelet (default = 0.05)
  self.shapelets                      : list of Shapelet objects,
  the stored shapelets after a dataset has been processed
code: def __init__(
      self,
      min_shapelet_length=3,
      max_shapelet_length=np.inf,
      max_shapelets_to_store_per_class=200,
      random_state=None,
      verbose=0,
      remove_self_similar=True,
  ):
      self.min_shapelet_length = min_shapelet_length
      self.max_shapelet_length = max_shapelet_length
      self.max_shapelets_to_store_per_class = (
          max_shapelets_to_store_per_class
      )
      self.random_state = random_state
      self.verbose = verbose
      self.remove_self_similar = remove_self_similar
      self.predefined_ig_rejection_level = 0.05
      self.shapelets = None
      super().__init__()
  
imports: import heapq
  import time
  import warnings
  from itertools import zip_longest
  from operator import itemgetter
  import numpy
  import pandas
  from joblib import Parallel, delayed
  from sklearn import preprocessing
  from sklearn.utils import check_random_state
  from sklearn.utils.multiclass import class_distribution
  from sktime.transformations.base import BaseTransformer
  from sktime.utils.validation import check_n_jobs
label_desc: Use image node_id 1 to create a new ShapeletTransform object from inherited base classes: BaseTransformer with example: obj = ShapeletTransform(min_shapelet_length, max_shapelet_length, max_shapelets_to_store_per_class, random_state, verbose, remove__similar)