## Data loading, handling, and preprocessing
import os
import glob
import sys
from pathlib import Path
import csv
import re
import jcamp
import random
from datetime import datetime
import numpy as np
from shutil import rmtree, move, make_archive
from pandas import DataFrame, read_csv, concat, Series, json_normalize
from itertools import combinations
from hashlib import md5
from matplotlib import colors
from matplotlib.colors import Normalize
from abc import ABC, abstractmethod
from typing import Optional, List
from sklearn.preprocessing import StandardScaler, MinMaxScaler, LabelEncoder
from scipy.stats import skew, kurtosis
from scipy.signal import savgol_filter, find_peaks_cwt, detrend
import scipy as sc
from kennard_stone import train_test_split as ks_train_test_split
from kennard_stone import KFold as ks_KFold

### Exploratory data analysis-Dimensionality reduction
from umap.umap_ import UMAP
from sklearn.decomposition import PCA, NMF
from pandas.api.types import is_float_dtype
from plotly.subplots import make_subplots
from matplotlib.cm import ScalarMappable
import streamlit.components.v1 as components
# Clustering
from sklearn.cluster import KMeans, HDBSCAN,AffinityPropagation
from scipy.spatial.distance import euclidean, cdist
from scipy.sparse.csgraph import minimum_spanning_tree
from scipy.sparse import csgraph

# Modelling
from juliacall import Main as jl

# from pinard import utils
# from pinard import preprocessing as pp
from pinard.model_selection import train_test_split_idx

from sklearn.model_selection import train_test_split, cross_val_score, cross_val_predict, cross_validate, RandomizedSearchCV
from sklearn.pipeline import Pipeline, FeatureUnion
from sklearn.compose import TransformedTargetRegressor
from sklearn.metrics import mean_absolute_error, mean_squared_error, mean_absolute_percentage_error, r2_score
from sklearn.cross_decomposition import PLSRegression
from sklearn.linear_model import LinearRegression
## Images and plots
from PIL import Image
import plotly.express as px
import plotly.graph_objects as go
import plotly.io as pio
import matplotlib.pyplot as plt, mpld3
import seaborn as sns
# import matplotlib

### Important Metrics
from sklearn.metrics import pairwise_distances_argmin_min, adjusted_rand_score, adjusted_mutual_info_score

## Web app construction
import streamlit as st
from st_pages import Page, Section, show_pages, add_page_title, hide_pages
from tempfile import NamedTemporaryFile, TemporaryDirectory
# help on streamlit input https://docs.streamlit.io/library/api-reference/widgets

#Library for connecting to SQL DB
import pyodbc

#Library for reading the config file, which is in JSON
import json

# save models
from joblib import dump, load, hash
# import pickle as pkl

from hyperopt import fmin, hp, tpe, Trials, space_eval, STATUS_OK, anneal

st.set_option('deprecation.showPyplotGlobalUse', False)