import logging
from typing import Union

import click
import mlflow
import seaborn as sns
from tqdm import tqdm

from aspects.experiments import experiment_name_enum
from aspects.pipelines.aspect_analysis import AspectAnalysis
from aspects.utilities import settings
from aspects.utilities.settings import setup_mlflow

sns.set(color_codes=True)
setup_mlflow()

logger = logging.getLogger()
logger.setLevel(logging.INFO)

DATASETS = [
    (settings.AMAZON_REVIEWS_AUTOMOTIVE_DATASET_JSON, 25_000),
    (settings.AMAZON_REVIEWS_AMAZON_INSTANT_VIDEO_DATASET_JSON, 25_000),
    (settings.AMAZON_REVIEWS_CELL_PHONES_AND_ACCESSORIES_DATASET_JSON, 50_000),
    (settings.AMAZON_REVIEWS_APPS_FOR_ANDROID_DATASET_JSON, None),
]

EXPERIMENTS = [
    experiment_name_enum.GERANI,
    experiment_name_enum.OUR_ALL_RULES,
    experiment_name_enum.OUR_TOP_5_RULES,
    # experiment_name_enum.OUR_TOP_1_RULES,
from collections import defaultdict
from itertools import product
from pathlib import Path
from typing import Union, Set, List, Optional

import graph_tool as gt
import mlflow
import pandas as pd
from graph_tool.stats import remove_self_loops
from tqdm import tqdm

from aspects.utilities import settings

settings.setup_mlflow()
"""
ConceptNet Relation Stats
RelatedTo                    1658056
FormOf                        376467 
DerivedFrom                   312305
HasContext                    213983
Synonym                       149378
IsA                           139281
UsedFor                        39401
EtymologicallyRelatedTo        32186
AtLocation                     27290
HasSubevent                    25238
HasPrerequisite                22710
CapableOf                      22677
Antonym                        18450
Causes                         16568
MotivatedByGoal                 9489