#!/usr/bin/python 
# -*- coding: utf-8 -*-

import sys 
import inspect 
import getopt 
from math import ceil
"""
 Créé le mardi  7 avril 2015.

 classes et fonctions utiles pour jouer avec des embeddings

"""
    
def ReadEmbeddingsFromStream(stream=sys.stdin,frame_list=[],role_list=[],word_list=[],nbClasses=None):
    def indexOf(value):
        try:
            return role_list.index(value)
        except ValueError:
            return None

    subclass=lambda x: ceil(x*nbClasses) if nbClasses else x

    precLineisEmpty=True
    embeddingsScoreByFrameRoleWordTuple={}
    
    for line in stream:
        l=line.strip().split()
        if len(l)==0:
            precLineisEmpty=True
            continue
        if precLineisEmpty:
            precLineisEmpty=False
            try:
                frame=frame_list.index(l[0])
            except ValueError:
                frame=None
            roles=map(indexOf,l[1:]) 
        else:
            if frame==None:
                continue
            try:
                word=word_list.index(l[0])
            except ValueError:
                word_list.append(l[0])
                word=len(word_list)
            scores=map(float,l[1:])
            for i in xrange(len(roles)):
                if not roles[i]:
                    continue
                embeddingsScoreByFrameRoleWordTuple[(frame,roles[i],word)]=subclass(scores[i])

    return embeddingsScoreByFrameRoleWordTuple


if __name__ == "__main__":
    print >>sys.stderr , "ne s'utilise pas en standalone"