diff --git a/docs/yap.yap b/docs/yap.yap index 5cff0285c..7a498fe63 100644 --- a/docs/yap.yap +++ b/docs/yap.yap @@ -1,3 +1,9 @@ +2:- use_module( library(lineutils) ). +3 +4main :- +5 unix(argv[Dir,Out]), +6 open(Out,write,O), -:- module( prolog, [] ). + 7 go(Dir,O). + 9go(Dir,O) :- diff --git a/include/YapErrors.h b/include/YapErrors.h index d8ba0054c..84f40ed11 100644 --- a/include/YapErrors.h +++ b/include/YapErrors.h @@ -27,13 +27,13 @@ ECLASS(RESOURCE_ERROR, "resource_error", 2) /// bad text ECLASS(SYNTAX_ERROR_CLASS, "syntax_error", 1) /// OS or internal -ECLASS(SYSTEM_ERROR_CLASS, "system_error", 2) +ECLASS(SYSTEM_ERROR_CLASS, "system_error", 1) /// bad typing ECLASS(TYPE_ERROR, "type_error", 2) /// should be unbound ECLASS(UNINSTANTIATION_ERROR_CLASS, "uninstantiation_error", 1) -/// escape hatch -ECLASS(EVENT, "event", 2) +/// user defined escape hatch +ECLASS(EVENT, "event", 1) END_ERROR_CLASSES(); diff --git a/os/streams.c b/os/streams.c index 8ecffcf20..a56838f64 100644 --- a/os/streams.c +++ b/os/streams.c @@ -316,7 +316,7 @@ bool Yap_SetCurInpPos( } Atom Yap_guessFileName(FILE *file, int sno, size_t max) { - size_t maxs = Yap_Max(1023, max-1); + size_t maxs = Yap_Max(1023, max - 1); if (!file) { Atom at = Yap_LookupAtom("mem"); return at; @@ -329,24 +329,26 @@ Atom Yap_guessFileName(FILE *file, int sno, size_t max) { int i = push_text_stack(); #if __linux__ - char *path = Malloc(1024), *nameb = Malloc(maxs+1); + char *path = Malloc(1024), *nameb = Malloc(maxs + 1); size_t len; if ((len = snprintf(path, 1023, "/proc/self/fd/%d", f)) >= 0 && (len = readlink(path, nameb, maxs)) > 0) { nameb[len] = '\0'; Atom at = Yap_LookupAtom(nameb); - pop_text_stack(i); - return at; + pop_text_stack(i); + return at; } #elif __APPLE__ + char *nameb = Malloc(maxs + 1); if (fcntl(f, F_GETPATH, nameb) != -1) { Atom at = Yap_LookupAtom(nameb); - pop_text_stack(i); - return at; + pop_text_stack(i); + return at; } #else - TCHAR *path = Malloc(MAX_PATH + 1); - if (!GetFullPathName(path, MAX_PATH, path, NULL)) { + TCHAR *path = Malloc(MAX_PATH + 1), *nameb = Malloc(MAX_PATH + 1); + + if (!GetFullPathName(path, MAX_PATH, nameb, NULL)) { pop_text_stack(i); return NULL; } else { @@ -356,8 +358,8 @@ Atom Yap_guessFileName(FILE *file, int sno, size_t max) { ptr += put_utf8(ptr, path[i]); *ptr = '\0'; Atom at = Yap_LookupAtom(nameb); - pop_text_stack(i); - return at; + pop_text_stack(i); + return at; } #endif if (!StreamName(sno)) { @@ -721,7 +723,7 @@ static Int cont_stream_property(USES_REGS1) { /* current_stream */ i = Yap_CheckAlias(AtomOfTerm(args[STREAM_PROPERTY_ALIAS].tvalue)); UNLOCK(GLOBAL_Stream[i].streamlock); if (i < 0 || !Yap_unify(ARG1, Yap_MkStream(i))) { - free(args); + free(args); cut_fail(); } det = true; @@ -1001,11 +1003,11 @@ static void CloseStream(int sno) { CACHE_REGS // fflush(NULL); -// __android_log_print(ANDROID_LOG_INFO, "YAPDroid", "close stream <%d>", -// sno); + // __android_log_print(ANDROID_LOG_INFO, "YAPDroid", "close stream <%d>", + // sno); VFS_t *me; - //fprintf( stderr, "- %d\n",sno); -if ((me = GLOBAL_Stream[sno].vfs) != NULL && + // fprintf( stderr, "- %d\n",sno); + if ((me = GLOBAL_Stream[sno].vfs) != NULL && GLOBAL_Stream[sno].file == NULL) { if (me->close) { me->close(sno); @@ -1043,7 +1045,8 @@ if ((me = GLOBAL_Stream[sno].vfs) != NULL && GLOBAL_Stream[sno].vfs = NULL; GLOBAL_Stream[sno].file = NULL; GLOBAL_Stream[sno].status = Free_Stream_f; - // __android_log_print(ANDROID_LOG_INFO, "YAPDroid", "close stream <%d>", sno); + // __android_log_print(ANDROID_LOG_INFO, "YAPDroid", "close stream <%d>", + // sno); /* if (st->status == Socket_Stream_f|Input_Stream_f|Output_Stream_f) { Yap_CloseSocket(); @@ -1556,8 +1559,7 @@ FILE *Yap_FileDescriptorFromStream(Term t) { return rc; } -void Yap_InitBackIO(void) -{ +void Yap_InitBackIO(void) { Yap_InitCPredBack("stream_property", 2, 2, stream_property, cont_stream_property, SafePredFlag | SyncPredFlag); } diff --git a/packages/ProbLog/problog_lbfgs.yap b/packages/ProbLog/problog_lbfgs.yap index ec79506a6..5ba888481 100644 --- a/packages/ProbLog/problog_lbfgs.yap +++ b/packages/ProbLog/problog_lbfgs.yap @@ -830,17 +830,18 @@ gradient_descent :- % leash(0),trace, lbfgs_initialize(N,X,0,Solver), forall(tunable_fact(FactID,GroundTruth), - (XZ is 0.5, X[FactID] <== XZ,set_fact_probability(FactID,XZ))), + (XZ is 0.0, X[FactID] <== XZ,sigmoid(XZ,Slope,Pr),set_fact_probability(FactID,Pr))), problog_flag(sigmoid_slope,Slope), - lbfgs_set_parameter(min_step, 0.0, Solver), + %lbfgs_set_parameter(min_step, 0.0, Solver), lbfgs_run(Solver,BestF), format('~2nOptimization done~nWe found a minimum ~4f.~n',[BestF]), - forall(tunable_fact(FactID,GroundTruth), set_tunable(FactID,X)), + forall(tunable_fact(FactID,GroundTruth), set_tunable(FactID,Slope,X)), set_problog_flag(mse_trainset, BestF), lbfgs_finalize(Solver). -set_tunable(I,P) :- - Pr <== P[I], +set_tunable(I,Slope,P) :- + X <== P[I], + sigmoid(X,Slope,Pr), set_fact_probability(I,Pr). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -849,12 +850,12 @@ set_tunable(I,P) :- user:evaluate(LLH_Training_Queries, X,Grad,N,_,_) :- %Handle = user_error, GradCount <== array[N] of ints, + Probs <== array[N] of floats, problog_flag(sigmoid_slope,Slope), - Probs = X, N1 is N-1, forall(between(0,N1,I), - (Grad[I] <== 0.0) %, sigmoid(X[I],Slope,Probs[I]) ) + (Grad[I] <== 0.0, S <== X[I], sigmoid(S,Slope, P), Probs[I] <== P) ), findall(LL, compute_grad(Grad, GradCount, Probs, Slope, LL), @@ -876,15 +877,16 @@ compute_grad(Grad, GradCount, Probs, Slope, LL) :- %writeln( qprobability(BDD,Slope,BDDProb) ), forall( member(I-_, MapList), - gradientpair(I, BDD,Slope,BDDProb, QueryProb, Grad, GradCount) + gradientpair(I, BDD,Slope,BDDProb, QueryProb, Grad, Probs, GradCount) ). -gradientpair(I, BDD,Slope,BDDProb, QueryProb, Grad, GradCount) :- +gradientpair(I, BDD,Slope,BDDProb, QueryProb, Grad, Probs, GradCount) :- qgradient(I, BDD, Slope, FactID, GradValue), % writeln(FactID), G0 <== Grad[FactID], + Prob <== Probs[FactID], %writeln( GN is G0-GradValue*(QueryProb-BDDProb)), - GN is G0-GradValue*2*(QueryProb-BDDProb), + GN is G0-GradValue*2*Prob*(1-Prob)*(QueryProb-BDDProb), %writeln(FactID:(G0->GN)), GC <== GradCount[FactID], GC1 is GC+1, @@ -978,10 +980,10 @@ bind_maplist([Node-Pr|MapList], Slope, X) :- % stop calculate gradient %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% user:progress(FX,X,_G,X_Norm,G_Norm,Step,_N,Iteration,Ls,0) :- - % problog_flag(sigmoid_slope,Slope), - X0 <== X[0], - X1 <== X[1], - format('~d. Iteration : (x0,x1)=(~4f,~4f) f(X)=~4f |X|=~4f |X\'|=~4f Step=~4f Ls=~4f~n',[Iteration,X0 ,X1,FX,X_Norm,G_Norm,Step,Ls]). + problog_flag(sigmoid_slope,Slope), + X0 <== X[0], sigmoid(X0,Slope,P0), + X1 <== X[1], sigmoid(X1,Slope,P1), + format('~d. Iteration : (x0,x1)=(~4f,~4f) f(X)=~4f |X|=~4f |X\'|=~4f Step=~4f Ls=~4f~n',[Iteration,P0 ,P1,FX,X_Norm,G_Norm,Step,Ls]). %======================================================================== diff --git a/utils/analysis/load.yap b/utils/analysis/load.yap index d5619295c..7bea06527 100644 --- a/utils/analysis/load.yap +++ b/utils/analysis/load.yap @@ -41,7 +41,7 @@ rdir( FRoot ) :- absolute_file_name( FRoot, [glob(*), solutions(all), file_errors(fail)], File ), \+ doskip( File ), ( - catch( file_property( File, type(directory) ), _, fail ) + cat zzch( file_property( File, type(directory) ), _, fail ) -> assert_new( dir( File ) ), assert_new( sub_dir( FRoot, File ) ),