import classix
from sklearn.metrics import adjusted_rand_score as ari
from sklearn.metrics import adjusted_mutual_info_score as ami
from sklearn.preprocessing import MinMaxScaler
from threadpoolctl import threadpool_limits
from sklearn.datasets import make_blobs
from time import time
from datetime import datetime
import pandas as pd
import numpy as np
import socket
print("Benchmark", datetime.today().strftime('%Y-%m-%d %H:%M:%S'))
print("Host ", socket.gethostname())
print("CLASSIX ", classix.__version__, "\n")
# warm-up
X = classix.loadData('vdu_signals')
st = time()
clx = classix.CLASSIX(radius=0.4, minPts=6, verbose=0);
clx.fit(X)
et = time() - st
print(" {:12} {:6.3f} seconds".format('warm-up',et))
# vdu_signals
X = classix.loadData('vdu_signals')
st = time()
clx = classix.CLASSIX(radius=0.4, minPts=6, verbose=0);
clx.fit(X)
et = time() - st
print(" {:12} {:6.3f} seconds".format('vdu_signals',et))
# blobs
X, y = make_blobs(n_samples=20000, centers=5, n_features=5, random_state=42)
st = time()
clx = classix.CLASSIX(radius=0.17, verbose=0);
clx.fit(X)
et = time() - st
print(" {:12} {:6.3f} seconds (ARI {:5.3f})".format('blobs',et,ari(y,clx.labels_)))
# Phoneme
X, y = classix.loadData('Phoneme')
st = time()
clx = classix.CLASSIX(radius=0.43, minPts=4, verbose=0);
clx.fit(X)
et = time() - st
print(" {:12} {:6.3f} seconds (ARI {:5.3f})".format('Phoneme',et,ari(y,clx.labels_)))
# Covid3MC
X, y = classix.loadData('Covid3MC') # alternatively, try 'CovidENV'
# min-max scale data and center data as in
# https://github.com/robcah/dimredcovid19/blob/main/Dimensionality_Reduction_Covid19.ipynb
X[['PaCMAP_0','PaCMAP_1','PaCMAP_2']] = MinMaxScaler().fit_transform(X)-0.5
st = time()
clx = classix.CLASSIX(radius=0.2, minPts=500, verbose=0);
clx.fit(X)
et = time() - st
print(" {:12} {:6.3f} seconds (ARI {:5.3f})".format('Covid3MC',et,ari(y,clx.labels_)))