# Source code for pyFTS.partitioners.parallel_util

    from copy import deepcopy
    from joblib import Parallel, delayed
    import multiprocessing
    import  numpy as np

    from pyFTS.common import Membership, Util
    from pyFTS.partitioners import Grid,Huarng,FCM,Entropy
    from pyFTS.partitioners import Util

    def explore_partitioners(data, npart, methods=None, mf=None, tam=[12, 10], save=False, file=None):
        all_methods = [Grid.GridPartitioner, Entropy.EntropyPartitioner, FCM.FCMPartitioner]
        mfs = [Membership.trimf, Membership.gaussmf, Membership.trapmf]

        if methods is None:
            methods = all_methods

        if mf is None:
            mf = mfs

        num_cores = multiprocessing.cpu_count()

        objs = []
        for method in methods:
            print(str(method))
            tmp = Parallel(n_jobs=num_cores)(delayed(method)(deepcopy(data), npart, m) for m in mf)
            objs.append(tmp)

        objs = np.ravel(objs).tolist()

        Util.plot_partitioners(data, objs, tam, save, file)