def run_mc(targetlist, mc_num, k):
    target_num = len(targetlist) ;
    tuplelist = get_tuple_list(targetlist) ;
    #print "tuple num:", len(tuplelist) ;
    go_1 = 0.5 # get_random_p(target_num, k) ;
    #print "p is: ", go_1 ;

    tuple_dict_true = {} ;
    flag_dict_true = {} ;
    flag_dict_false = {} ;
    for key in tuplelist:
        tuple_dict_true[key] = 0 ; 
        for i in range(1, 11):
            temp = int(target_num*i/10.0) ;
            mytuple = (key, temp) ;
            flag_dict_true[mytuple] = 0 ;
            flag_dict_false[mytuple] = 0 ;

    for t in range(mc_num):
        #if(t%1000 ==0 ): print "--------mc_num:", t, "-------------"
        edge_value_dict = assign_edge_value(tuplelist, go_1) ;
        res_effect_list = effect(targetlist, edge_value_dict) ;
        for edge in edge_value_dict.keys():
            if( edge_value_dict[edge] == True ): tuple_dict_true[edge] += 1 ;
            for i in range(1, 11):
                temp = int(target_num*i/10.0) ;
                mytuple = (edge, temp) ;
                if( res_effect_list[i-1] == True ):
                    if( edge_value_dict[edge] == True ): flag_dict_true[mytuple] += 1 ;
                    else: flag_dict_false[mytuple] += 1 ;

        edge_value_dict = assign_edge_value_opposite(edge_value_dict.copy()) ;
        res_effect_list = effect(targetlist, edge_value_dict) ;
        for edge in edge_value_dict.keys():
            if( edge_value_dict[edge] == True ): tuple_dict_true[edge] += 1 ;
            for i in range(1, 11):
                temp = int(target_num*i/10.0) ;
                mytuple = (edge, temp) ;
                if( res_effect_list[i-1] == True ):
                    if( edge_value_dict[edge] == True ): flag_dict_true[mytuple] += 1 ;
                    else: flag_dict_false[mytuple] += 1 ;
    mc_num = mc_num * 2 ;    
    res_dict = {} ;
    for edge in tuplelist:
        for i in range(1, 11):
            temp = int(target_num*i/10.0) ;
            mytuple = (edge, temp) ;
            res_dict[mytuple] = flag_dict_true[mytuple]/float(tuple_dict_true[edge]) - flag_dict_false[mytuple]/(mc_num-float(tuple_dict_true[edge])) ;

    return res_dict ;
Exemple #2
0
def causal_test(pro_file_name, mc_num, k):
    targetnodelist = get_targets_karate() ;
    targetlist = readProvenance(filename, targetnodelist) ;
    res_dict = run_mc(targetlist, mc_num, k) ;
    return get_mc_result_list(res_dict, targetlist, get_tuple_list(targetlist)) ; 
            if( edge_value_dict[edge] == True ): tuple_dict_true[edge] += 1 ;
            for i in range(1, 11):
                temp = int(target_num*i/10.0) ;
                mytuple = (edge, temp) ;
                if( res_effect_list[i-1] == True ):
                    if( edge_value_dict[edge] == True ): flag_dict_true[mytuple] += 1 ;
                    else: flag_dict_false[mytuple] += 1 ;
    mc_num = mc_num * 2 ;    
    res_dict = {} ;
    for edge in tuplelist:
        for i in range(1, 11):
            temp = int(target_num*i/10.0) ;
            mytuple = (edge, temp) ;
            res_dict[mytuple] = flag_dict_true[mytuple]/float(tuple_dict_true[edge]) - flag_dict_false[mytuple]/(mc_num-float(tuple_dict_true[edge])) ;

    return res_dict ;

if __name__ == "__main__":
    filename = "provenance_dataset/karate_provenance.txt";
    targetnodelist = get_targets_karate() ;
    targetlist = readProvenance(filename, targetnodelist) ;

    start = timeit.default_timer() ;
    res_dict = run_mc(targetlist, mc_num=100, k=5) ;
    stop = timeit.default_timer() ;
    print stop-start ;

    lines = get_mc_result_list(res_dict, targetlist, get_tuple_list(targetlist)) ; 
    for line in lines:
        print line ;
    #mc_num = mc_num/2 ;
    for i in range(mc_num):
        if(i%1000 ==0 ): print "--------mc_num:", i, "-------------"
        edge_value_dict = get_random_list(len(tuplelist), go_1=0.9) ;
        term_dict = run_once(tuplelist, targetlist, edge_value_dict) ;
        for term in tuplelist:
            temp = [ x + y for x, y in zip(term_dict[term], sum_term_dict[term]) ] ;
            sum_term_dict[term] = temp ;
        ''' 
        one_matrix = np.ones((len(random_list_1),), dtype=np.int) ;
        random_list_2 = np.subtract( one_matrix, random_list_1) ;
        term_dict = run_once(tuplelist, targetlist, random_list_2) ;
        for term in tuplelist:
            temp = [ x + y for x, y in zip(term_dict[term], sum_term_dict[term]) ] ;
            sum_term_dict[term] = temp ;
        '''
    return sum_term_dict ;

filename = "provenance_dataset/karate_provenance.txt";
targetnodelist = get_targets_karate() ;
targetlist = readProvenance(filename, targetnodelist) ;
tuplelist = get_tuple_list(targetlist) ;
print "tuple num:", len(tuplelist) ;
start = timeit.default_timer() ;
sum_term_dict = run_mc(tuplelist, targetlist, mc_num=100) ;
stop = timeit.default_timer() ;
print stop-start ;
for term in sum_term_dict.keys():
    #print term, " ".join(sum_term_dict[term]) ;
    print term, str(sum_term_dict[term]).strip('[]')