def validation(Point_P, Point_Q, gEpG,radius,a=0.7):
    P = compactPoint(Point_P)
    P_list = P.keys()
    Q = compactPoint(Point_Q)
    Q_list = Q.keys()
    vr = validationReport()
    PQ_EpG = cross_EpG(gEpG,P_list,Q_list)
    #identificazione prove
    IJK,IKL,I=observations(P_list, Q_list, PQ_EpG)
    if len(IJK)+len(IKL)<4:
        vr.merge=True
        PE=[]
        QE=[]
        vr.setMerge(P,Q,PE,QE)
    #osservazione
    inlier_IJK,rkp,inlier_IKL,rip,inlier_I=pointTransferVectorized(P,Q,PQ_EpG,maxLevel=radius,alfa=a,IJK=IJK,IKL=IKL,I=I)
    #calcolo punteggio==>parte da rifare
    ISB=iterativeScoreBoard(P_list,Q_list,IJK,inlier_IJK,IKL,inlier_IKL,I,inlier_I)
    iterations=0
    while ISB.board.outliers_count > 0 and ISB.tick(ExcludeClassifier):
        iterations+=1
    #now the point is stable under worst point exclusion
    merge_x=ISB.mergeInputModel()
    vr.merge=MergeClassifier.predict(merge_x)
    if vr.merge:
        PE=ISB.Pe
        QE=ISB.Qe
        vr.setMerge(P,Q,PE,QE)
    else:
        vr.setSplit(P,Q,I)
    return vr       
 def scoring(self,realization,blameRatio=0.2):
     self.iSB=iterativeScoreBoard(
     self.P,self.Q,
     self.IJK,realization[0],
     self.IKL,realization[1],
     self.I,realization[2],Pe=[],Qe=[])
     g=self.iSB.board.gain()
     iterations=0
     while self.iSB.board.outliers_count > 0 and self.iSB.tick()>g:
         g=self.iSB.board.gain()
         #print iterations , self.iSB.board.inliers_count ," vs ", self.iSB.board.outliers_count 
         iterations+=1
     merge=self.iSB.board.gain()>0           
     if merge:
         P_exclude,Q_exclude=self.clearCommons(
             self.I,realization[2],
             self.iSB.board.P_inliers,
             self.iSB.board.P_outliers,
             self.iSB.board.Q_inliers,
             self.iSB.board.Q_outliers)
         self.iSB=iterativeScoreBoard(
             self.P,self.Q,
             self.IJK,realization[0],
             self.IKL,realization[1],
             self.I,realization[2],
             Pe=P_exclude,Qe=Q_exclude)
         g=self.iSB.board.gain()
         iterations=0
         while self.iSB.board.outliers_count > 0 and self.iSB.tick()>g:
             g=self.iSB.board.gain()
             #print iterations , self.iSB.board.inliers_count ," vs ", self.iSB.board.outliers_count 
             iterations+=1
         P_exclude=self.iSB.Pe
         Q_exclude=self.iSB.Qe
         out=[self.mergeView(i,P_exclude,Q_exclude) for i in range(len(self.Pv))]
         out=''.join(out)
     else:
         P_exclude,Q_exclude=self.splitCommons(
             self.I,realization[2],
             self.iSB.board.P_inliers,
             self.iSB.board.P_outliers,
             self.iSB.board.Q_inliers,
             self.iSB.board.Q_outliers)
         p_out=[self.Pv[i] if i not in P_exclude else '?' for i in range(len(self.Pv))]
         q_out=[self.Qv[i] if i not in Q_exclude else '?' for i in range(len(self.Qv))]
         out=[''.join(p_out),''.join(q_out)]
     return merge,P_exclude,Q_exclude,out
 def scoring2exclude(self,realization):
     self.iSB=iterativeScoreBoard(
     self.P,self.Q,
     self.IJK,realization[0],
     self.IKL,realization[1],
     self.I,realization[2],Pe=[],Qe=[])
     iterations=0
     return self.iSB
 def scoring2merge(self,realization,ExcludeClassifier):
     self.iSB=iterativeScoreBoard(
     self.P,self.Q,
     self.IJK,realization[0],
     self.IKL,realization[1],
     self.I,realization[2],Pe=[],Qe=[])
     iterations=0
     while self.iSB.board.outliers_count > 0 and self.iSB.tick(ExcludeClassifier):
         iterations+=1
     return self.iSB
 def scoring2merge_old(self,realization,blameRatio=0.2):
     self.iSB=iterativeScoreBoard(
     self.P,self.Q,
     self.IJK,realization[0],
     self.IKL,realization[1],
     self.I,realization[2],Pe=[],Qe=[])
     g=self.iSB.board.gain()
     iterations=0
     while self.iSB.board.outliers_count > 0 and self.iSB.tick(acceptance=blameRatio)>g:
         g=self.iSB.board.gain()
         #print iterations , self.iSB.board.inliers_count ," vs ", self.iSB.board.outliers_count 
         iterations+=1
     return self.iSB