code: def encoders(self):
      if self._encoders is None:
          with timer("fit encoders"):
              self._encoders = self.get_encoders()
  
              # Ensure we have an iterable for all single encoder cases
              if not isinstance(self._encoders, Iterable):
                  if len((self._encoders,)) == 1:
                      self._encoders = (self._encoders,)
  
              if self.multiprocessing:
                  pool = multiprocessing.Pool(self.workers)
                  results = []
                  for encoder in self._encoders:
                      results.append(
                          pool.apply_async(
                              self.fit, (encoder, self.training_data)
                          )
                      )
                  self._encoders = [result.get() for result in results]
  
              else:
                  for encoder in self._encoders:
                      encoder.fit(self.training_data)
  
      return self._encoders
  
imports: from __future__ import absolute_import
  from abc import ABCMeta, abstractmethod
  from collections import OrderedDict, Iterable
  import gc
  import logging
  import multiprocessing
  import lore
  from lore.env import require
  from lore.util import timer, timed
  from lore.pipelines import Observations
  import numpy
  import pandas
  from sklearn.model_selection import train_test_split
label_desc: Use image node_id 7 for calling the Base obj's underlying member method code with example usage: obj.encoders() and returns: self