# coding: utf8

import numpy as np
from scipy.spatial import cKDTree

def interpolate(inputCoords,outputCoords,inputVarFile):
    """
    Interpole les valeurs d'une variable sur un nouveau jeu de coordonnées, retourne un array. 
    """
    inputCoords=ReadCoordsFromFile(inputCoords)
    if type(outputCoords) is str:
        outputCoords=ReadCoordsFromFile(outputCoords)
    tree = cKDTree(inputCoords)
    file = open(inputVarFile, 'r')
    var=[]
    var=file.readlines()
    file.close()
    length=len(var)
    for i in range(length):
        var[i]=float(var[i].strip())
        
    outputVar=[]
    for pt in outputCoords:
        xp=pt[0]
        yp=pt[1]
        distance, indPoints = tree.query([xp,yp], k=2)
        temp=(var[indPoints[0]]+((var[indPoints[1]]-var[indPoints[0]])/(distance[0]+distance[1]))*distance[0])
        outputVar.append(temp)
    outputVar=np.asarray(outputVar)
        
    return outputVar
    
def ReadCoordsFromFile(inputFile):
    file = open(inputFile,'r')
    tab=[]
    tab=file.readlines()
    file.close()
    length=len(tab)
    for i in range(length):
        tab[i]=tab[i].strip().split(',')
        for j in range(len(tab[i])):
            tab[i][j]=float(tab[i][j])
    val=np.asarray(tab)
    return val