from math import exp
from random import random


class SmartDictionary:
    def __init__(self, model_checkpoint_path=None, device=0, text_encoding_strategy='simple-with-linker',
                 token_batch_size=1024, progress_bar=False):
        pass

    def predict(self, context, target_position, candidate_definitions, parts_of_speech, _sort=True):
        probs = [exp(random() * 10.0) for _ in candidate_definitions]
        s = sum(probs)
        probs = [p/s for p in probs]
        results = [
            {
                'probability': p,
                'lemma': d[0],
                'definition': d[1],
                'partOfSpeech': pos,
            }
            for p, d, pos in zip(probs, candidate_definitions, parts_of_speech)
        ]
        if _sort:
            results = sorted(results, key=lambda x: -x['probability'])
        return results
