X_angle,_,_ = enel_transf.compute_angle_matrix(X)
output_dict = dict.fromkeys(np.arange(0,49),np.array([[]], dtype = "int64"))

k_levels = np.arange(0,12).reshape([12,1])
for key in np.arange(0,49):
    current_values = np.arange(key*12,key*12+12).reshape([12,1])
    output_dict[key] = np.concatenate((current_values,k_levels), axis = 1)

X_speed,_,_ = EnelWindSpeedTransformation().transform(X)
print("wind speed computed")

enel_transf = Enel_directionPowerCurveTransformation()
X_transf, dict_sample_turb = enel_transf.transform(X_angle, angles_coord_turb, X_speed, power_curve, Coord, Coord_turb, threshold_dir=threshold_dir)
print("single transformation done")

X_transf, output_dict = enel_transf.transformPerTurbine(dict_sample_turb, enel_dict, X, power_curve, X_transf,output_dict)
print("transformation per turbine done")

XTrain_transf = X_transf[:XTrain.shape[0],:]
XTest_transf = X_transf[XTrain.shape[0]:,:]

##center data
XTrain_noCenter, XVal_noCenter, YTrain_noCenter, YVal_noCenter = train_test_split(XTrain_transf, YTrain, test_size=0.33,random_state=0)
XTrain_, YTrain_, X_mean, y_mean, X_std = center_data(XTrain_noCenter, YTrain_noCenter, fit_intercept=True, normalize = True)
XVal_, YVal_ = center_test(XVal_noCenter,YVal_noCenter,X_mean,y_mean,X_std)

values_TM = []
new_loss, _ = compute_lasso(XTrain_, YTrain_, XVal_, YVal_,score = "mean_squared_error", values_TM = np.array([[24,281], [24,214]]))
print("loss", new_loss)

n_features_transf = XTrain_.shape[1]
    if compute_single:

        XTrain_transf = X_transf[:XTrain.shape[0],:]
        XTest_transf = X_transf[XTrain.shape[0]:,:]

        print("loss 1 turibina solo sul validation")
        XTrain_, XVal_, YTrain_, YVal_ = train_test_split(XTrain_transf, YTrain, test_size=0.33,random_state=0)
        Linear_fit().fitting(XTrain_, YTrain_, XVal_,YVal_, [])

        print("loss 1 turbina solo sul test")
        Linear_fit().fitting(XTrain_transf, YTrain, XTest_transf,YTest,values_TM)

    print("-------------")

    if compute_not_levels:
        X_transf_1,_ = enel_transf.transformPerTurbine(matrix_turbs, enel_dict, X, power_curve, np.array([[]]),output_dict)
        print("transformation per turbine done")

        if compute_single_mean:
            XTrain_transf = X_transf_1[:XTrain.shape[0],:]
            XTest_transf = X_transf_1[XTrain.shape[0]:,:]


            print("loss mean turbina solo sul validation")
            XTrain_, XVal_, YTrain_, YVal_ = train_test_split(XTrain_transf, YTrain, test_size=0.33,random_state=0)
            Linear_fit().fitting(XTrain_, YTrain_, XVal_,YVal_, [])

            print("loss mean turbina solo sul test")
            Linear_fit().fitting(XTrain_transf, YTrain, XTest_transf,YTest,values_TM)

        X_transf_no_levels = np.concatenate((X_transf,X_transf_1), axis = 1)