def pre_featsel(X, y, method, thr=95, dist_function=None, thr_method='robust'):
    '''
    INPUT
    X             : data ([n_samps x n_feats] matrix)
    y             : class labels
    method        : distance measure: 'pearson', 'bhattacharyya', 'welcht', ''
                    if method == '', will use dist_function
    thr           : percentile distance threshold
    dist_function : 
    thr_method    : method for thresholding: 'none', 'robust', 'ranking'

    OUTPUT
    m          : distance measure (thresholded or not)
    '''

    #pre feature selection, measuring distances
    #Pearson correlation
    if method == 'pearson':
        au.log.info('Calculating Pearson correlation')
        m = np.abs(pearson_correlation(X, y))

    #Bhattacharyya distance
    elif method == 'bhattacharyya':
        au.log.info('Calculating Bhattacharyya distance')
        m = bhattacharyya_dist(X, y)

    #Welch's t-test
    elif method == 'welcht':
        au.log.info("Calculating Welch's t-test")
        m = welch_ttest(X, y)

    elif method == '':
        au.log.info("Calculating distance between data and class labels")
        #http://docs.scipy.org/doc/scipy/reference/spatial.distance.html
        m = distance_computation(X, y, dist_function)

    #if all distance values are 0
    if not m.any():
        au.log.info(
            "No differences between groups have been found. Are you sure you want to continue?"
        )
        return m

    #threshold data
    if thr_method != 'none':
        if thr_method == 'robust':
            mt = au.robust_range_threshold(m, thr)
        elif thr_method == 'percentile':
            mt = au.percentile_threshold(m, thr)
        elif thr_method == 'rank':
            mt = au.rank_threshold(m, thr)

        return mt

    return m
def pre_featsel (X, y, method, thr=95, dist_function=None, thr_method='robust'):
    '''
    INPUT
    X             : data ([n_samps x n_feats] matrix)
    y             : class labels
    method        : distance measure: 'pearson', 'bhattacharyya', 'welcht', ''
                    if method == '', will use dist_function
    thr           : percentile distance threshold
    dist_function : 
    thr_method    : method for thresholding: 'none', 'robust', 'ranking'

    OUTPUT
    m          : distance measure (thresholded or not)
    '''

    #pre feature selection, measuring distances
    #Pearson correlation
    if method == 'pearson':
        au.log.info ('Calculating Pearson correlation')
        m = np.abs(pearson_correlation (X, y))

    #Bhattacharyya distance
    elif method == 'bhattacharyya':
        au.log.info ('Calculating Bhattacharyya distance')
        m = bhattacharyya_dist (X, y)

    #Welch's t-test
    elif method == 'welcht':
        au.log.info ("Calculating Welch's t-test")
        m = welch_ttest (X, y)

    elif method == '':
        au.log.info ("Calculating distance between data and class labels")
        #http://docs.scipy.org/doc/scipy/reference/spatial.distance.html
        m = distance_computation(X, y, dist_function)

    #if all distance values are 0
    if not m.any():
        au.log.info("No differences between groups have been found. Are you sure you want to continue?")
        return m

    #threshold data
    if thr_method != 'none':
        if thr_method == 'robust':
            mt = au.robust_range_threshold (m, thr)
        elif thr_method == 'percentile':
            mt = au.percentile_threshold (m, thr)
        elif thr_method == 'rank':
            mt = au.rank_threshold (m, thr)

        return mt

    return m
def apply_distance_threshold(distances, thr, method='robust'):
    if method == 'robust': return au.robust_range_threshold(distances, thr)
    elif method == 'rank': return au.rank_threshold(distances, thr)
    elif method == 'percentile': return au.percentile_threshold(distances, thr)
def apply_distance_threshold (distances, thr, method='robust'):
    if   method == 'robust':     return au.robust_range_threshold (distances, thr)
    elif method == 'rank':       return au.rank_threshold         (distances, thr)
    elif method == 'percentile': return au.percentile_threshold   (distances, thr)