%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Meta Bayes
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
:-use_module(library(lists)).
:-use_module(library(terms)).
:-use_module(library(ordsets)).
:-use_module(library(rbtrees)).
:-use_module(library(avl)).
:-use_module(library(random)).
:-use_module(library(apply_macros)).
:-use_module(library(timeout)).

:-[metabayesL_4,metaBayes_MAP].   %metaBayes_treeStored%metaBayes_fixPrior %:-metaPseudoBayes
:-[superimpose].


:-[validation]. %learning_curve_fixTestTrainIndex].
:-[utilities].




convertOneRule(metasub(delta,[S0,T,S1]),ruleL(S0,T,S1)).
convertOneRule(metasub(acceptor,[S0]),rule0(S0)).

ex_mapping(EI,[s(0),Seq,[]]):-
    ex(EI,parse(Seq),PosNegSign).



generalise_oneTrainingSetF(TrainPosSeqs0,TrainNegSeqs0,SampleSize,Hs):- 
	TrainPosSeqs0=TrainPosSeqs,   %reorder_examples(TrainPosSeqs0,TrainPosSeqs1),
	TrainNegSeqs0=TrainNegSeqs,    %reorder_examples(TrainNegSeqs0,TrainNegSeqs1),
    numbersList(1,5,KBounds0),
    maplist(peanoNum_mapping,KBounds0,KBounds),
    member(KBound,KBounds),
    proveMAP(TrainPosSeqs,TrainNegSeqs,[],MAP_H,KBound,KBoundRemaining),nl,write('%MAP_H'),write(MAP_H),nl,
    diff_generalise(TrainPosSeqs,TrainNegSeqs,SampleSize,MAP_H,KBound,Hs).    
    



diff_generalise(TrainPosSeqs,TrainNegSeqs,SampleSize,MAP_H,KBound,[MAP_H]):-
    set(generalise_method,map).

diff_generalise(TrainPosSeqs,TrainNegSeqs,SampleSize,MAP_H,KBound,Hs):-
    set(generalise_method,bayes_sampling),
    peanoNum_mapping(MAPKBound,s(s(KBound))),asserta(max_kBound(MAPKBound)),
    sample(SampleSize,0,TrainPosSeqs,TrainNegSeqs,[],Hs0),filterfails(Hs0,Hs).
%    iterative_deepening(TrainPosSeqs,TrainNegSeqs,1,[],Hs,MAPKBound). %

diff_generalise(TrainPosSeqs,TrainNegSeqs,SampleSize,MAP_H,KBound,Hs):-
    set(generalise_method,bayes_finall),
    findall(H,
        proveMAP(TrainPosSeqs,TrainNegSeqs,[],H,s(s(KBound)),KBoundRemaining1),
    Hs).






