Merge /home/vsc/yap
This commit is contained in:
commit
299a1edf8b
@ -787,6 +787,10 @@ static void kill_children(LogUpdIndex *c, PredEntry *ap) {
|
|||||||
ncl = c->ChildIndex;
|
ncl = c->ChildIndex;
|
||||||
/* kill children */
|
/* kill children */
|
||||||
while (ncl) {
|
while (ncl) {
|
||||||
|
if (ncl->ClRefCount>0) {
|
||||||
|
c->ClRefCount--;
|
||||||
|
return;
|
||||||
|
}
|
||||||
kill_first_log_iblock(ncl, c, ap);
|
kill_first_log_iblock(ncl, c, ap);
|
||||||
ncl = c->ChildIndex;
|
ncl = c->ChildIndex;
|
||||||
}
|
}
|
||||||
@ -862,7 +866,7 @@ static void kill_first_log_iblock(LogUpdIndex *c, LogUpdIndex *parent,
|
|||||||
if (DBErasedIList)
|
if (DBErasedIList)
|
||||||
DBErasedIList->PrevSiblingIndex = c;
|
DBErasedIList->PrevSiblingIndex = c;
|
||||||
DBErasedIList = c;
|
DBErasedIList = c;
|
||||||
if (!((c->ClFlags & InUseMask) || c->ClRefCount)) {
|
if (!(c->ClFlags & InUseMask || c->ClRefCount)) {
|
||||||
kill_off_lu_block(c, parent, ap);
|
kill_off_lu_block(c, parent, ap);
|
||||||
} else {
|
} else {
|
||||||
if (c->ClFlags & ErasedMask)
|
if (c->ClFlags & ErasedMask)
|
||||||
|
25
C/globals.c
25
C/globals.c
@ -1840,6 +1840,15 @@ static Term MkZeroApplTerm(Functor f, UInt sz USES_REGS) {
|
|||||||
return tf;
|
return tf;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @pred nb_heap(+_Size_,-_Heap_) is deterministic.
|
||||||
|
*
|
||||||
|
* Initialize a new binomial heap of size _Size_.
|
||||||
|
* The Heap resides in the Prolog stack, but the state of the
|
||||||
|
* Heap is not backtrable.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
static Int p_nb_heap(USES_REGS1) {
|
static Int p_nb_heap(USES_REGS1) {
|
||||||
Term heap_arena, heap, *ar, *nar;
|
Term heap_arena, heap, *ar, *nar;
|
||||||
UInt hsize;
|
UInt hsize;
|
||||||
@ -1881,6 +1890,21 @@ static Int p_nb_heap(USES_REGS1) {
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @pred nb_heap_reset(+_Heap_) is deterministic.
|
||||||
|
*
|
||||||
|
* Set the number if entries in the heap to 0. Allows reusing
|
||||||
|
* the same space for several heaps.
|
||||||
|
*/
|
||||||
|
static Int p_nb_heap_reset(USES_REGS1) {
|
||||||
|
CELL *qd = GetHeap(ARG1, "reset_heap");
|
||||||
|
|
||||||
|
if (!qd)
|
||||||
|
return FALSE;
|
||||||
|
qd[HEAP_SIZE] = MkIntTerm(0);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
static Int p_nb_heap_close(USES_REGS1) {
|
static Int p_nb_heap_close(USES_REGS1) {
|
||||||
Term t = Deref(ARG1);
|
Term t = Deref(ARG1);
|
||||||
if (!IsVarTerm(t)) {
|
if (!IsVarTerm(t)) {
|
||||||
@ -2796,6 +2820,7 @@ void Yap_InitGlobals(void) {
|
|||||||
Yap_InitCPred("nb_heap_peek", 3, p_nb_heap_peek, SafePredFlag);
|
Yap_InitCPred("nb_heap_peek", 3, p_nb_heap_peek, SafePredFlag);
|
||||||
Yap_InitCPred("nb_heap_empty", 1, p_nb_heap_empty, SafePredFlag);
|
Yap_InitCPred("nb_heap_empty", 1, p_nb_heap_empty, SafePredFlag);
|
||||||
Yap_InitCPred("nb_heap_size", 2, p_nb_heap_size, SafePredFlag);
|
Yap_InitCPred("nb_heap_size", 2, p_nb_heap_size, SafePredFlag);
|
||||||
|
Yap_InitCPred("nb_heap_reset", 1, p_nb_heap_reset, SafePredFlag);
|
||||||
Yap_InitCPred("nb_beam", 2, p_nb_beam, 0L);
|
Yap_InitCPred("nb_beam", 2, p_nb_beam, 0L);
|
||||||
Yap_InitCPred("nb_beam_close", 1, p_nb_beam_close, SafePredFlag);
|
Yap_InitCPred("nb_beam_close", 1, p_nb_beam_close, SafePredFlag);
|
||||||
Yap_InitCPred("nb_beam_add", 3, p_nb_beam_add_to_beam, 0L);
|
Yap_InitCPred("nb_beam_add", 3, p_nb_beam_add_to_beam, 0L);
|
||||||
|
@ -616,7 +616,6 @@ add_subDIRECTORY(utf8proc )
|
|||||||
set(CXX_SWIG_OUTDIR ${CMAKE_BINARY_DIR}/packages/swig/android)
|
set(CXX_SWIG_OUTDIR ${CMAKE_BINARY_DIR}/packages/swig/android)
|
||||||
add_subdirectory(packages/swig/android)
|
add_subdirectory(packages/swig/android)
|
||||||
add_definitions(-DMYDDAS=1 -DEMBEDDED_MYDDAS=1 -DMYDDAS_SQLITE3=1 -DEMBEDDED_SQLITE3=1)
|
add_definitions(-DMYDDAS=1 -DEMBEDDED_MYDDAS=1 -DMYDDAS_SQLITE3=1 -DEMBEDDED_SQLITE3=1)
|
||||||
link_directories(${CMAKE_SOURCE_DIR}/../sqlite-android/jni/${ANDROID_ABI})
|
|
||||||
|
|
||||||
else()
|
else()
|
||||||
add_definitions(-DMYDDAS=1 -DEMBEDDED_MYDDAS=1 -DMYDDAS_SQLITE3=1 )
|
add_definitions(-DMYDDAS=1 -DEMBEDDED_MYDDAS=1 -DMYDDAS_SQLITE3=1 )
|
||||||
@ -656,7 +655,8 @@ if (WIN32 OR ANDROID)
|
|||||||
if (ANDROID)
|
if (ANDROID)
|
||||||
List(APPEND YLIBS $<TARGET_OBJECTS:YAPsqlite3>)
|
List(APPEND YLIBS $<TARGET_OBJECTS:YAPsqlite3>)
|
||||||
List(APPEND YLIBS $<TARGET_OBJECTS:DROID>)
|
List(APPEND YLIBS $<TARGET_OBJECTS:DROID>)
|
||||||
set(ANDROID_LIBRARIES sqliteX android log)
|
set(ANDROID_LIBRARIES ${CMAKE_SOURCE_DIR}/../sqlite-android/jni/${ANDROID_ABI}/libsqliteX.so android log)
|
||||||
|
link_directories(${CMAKE_SOURCE_DIR}/../sqlite-android/jni/${ANDROID_ABI})
|
||||||
|
|
||||||
endif ()
|
endif ()
|
||||||
endif ()
|
endif ()
|
||||||
@ -731,7 +731,13 @@ MY_set_target_properties(libYap
|
|||||||
# file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/packages/python/swig/yap4py)
|
# file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/packages/python/swig/yap4py)
|
||||||
|
|
||||||
if (WITH_PYTHON AND PYTHONLIBS_FOUND AND SWIG_FOUND)
|
if (WITH_PYTHON AND PYTHONLIBS_FOUND AND SWIG_FOUND)
|
||||||
set( ENV{PYTHONPATH} ${CMAKE_BINARY_DIR}/packages/python/swig:${CMAKE_BINARY_DIR}/packages/python/yap_kernel:. )
|
if (CONDA)
|
||||||
|
set(bdist bdist_conda)
|
||||||
|
else()
|
||||||
|
set(bdist bdist_wheel)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set( ENV{PYTHONPATH} ${CMAKE_BINARY_DIR}/packages/python/swig:${CMAKE_BINARY_DIR}/packages/python/yap_kernel:. )
|
||||||
add_subdirectory(packages/python/swig)
|
add_subdirectory(packages/python/swig)
|
||||||
|
|
||||||
include(FindPythonModule)
|
include(FindPythonModule)
|
||||||
@ -961,6 +967,7 @@ if (WIN32)
|
|||||||
|
|
||||||
endif (WIN32)
|
endif (WIN32)
|
||||||
|
|
||||||
|
if (NOT ANDROID)
|
||||||
add_executable(yap-bin ${CONSOLE_SOURCES})
|
add_executable(yap-bin ${CONSOLE_SOURCES})
|
||||||
|
|
||||||
set_target_properties(yap-bin PROPERTIES OUTPUT_NAME yap)
|
set_target_properties(yap-bin PROPERTIES OUTPUT_NAME yap)
|
||||||
@ -974,6 +981,7 @@ install(TARGETS libYap yap-bin
|
|||||||
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
endif()
|
||||||
|
|
||||||
if (WITH_MPI)
|
if (WITH_MPI)
|
||||||
|
|
||||||
|
11
CXX/yapa.hh
11
CXX/yapa.hh
@ -94,7 +94,9 @@ public:
|
|||||||
/// get name of (other way)
|
/// get name of (other way)
|
||||||
inline const char *text(void) { return getName(); } ;
|
inline const char *text(void) { return getName(); } ;
|
||||||
/// get prop of type
|
/// get prop of type
|
||||||
Prop getProp( PropTag tag ) { return Yap_GetAProp( a , (PropFlags)tag ); }
|
Prop getProp( PropTag tag ) { return Yap_GetAProp( a , (PropFlags)tag ); };
|
||||||
|
/// as Atom
|
||||||
|
Atom asAtom() { return a; };
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -158,12 +160,15 @@ public:
|
|||||||
/// Getter: extract name of functor as an atom
|
/// Getter: extract name of functor as an atom
|
||||||
///
|
///
|
||||||
/// this is for external usage.
|
/// this is for external usage.
|
||||||
YAPAtom name(void) { return YAPAtom(NameOfFunctor(f)); }
|
inline YAPAtom name() { return YAPAtom(NameOfFunctor(f)); };
|
||||||
|
|
||||||
/// Getter: extract arity of functor as an unsigned integer
|
/// Getter: extract arity of functor as an unsigned integer
|
||||||
///
|
///
|
||||||
/// this is for external usage.
|
/// this is for external usage.
|
||||||
uintptr_t arity(void) { return ArityOfFunctor(f); }
|
inline arity_t arity() { return ArityOfFunctor(f); };
|
||||||
|
/// Getter: extract functor as C pointer
|
||||||
|
///
|
||||||
|
/// inline Functor functor() { return f; };
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
21
CXX/yapi.cpp
21
CXX/yapi.cpp
@ -744,6 +744,27 @@ YAPQuery::YAPQuery(YAPFunctor f, YAPTerm mod, YAPTerm ts[])
|
|||||||
RECOVER_MACHINE_REGS();
|
RECOVER_MACHINE_REGS();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
YAPQuery::YAPQuery(YAPFunctor f, YAPTerm mod, Term ts[])
|
||||||
|
: YAPPredicate(f, mod) {
|
||||||
|
|
||||||
|
/* ignore flags for now */
|
||||||
|
BACKUP_MACHINE_REGS();
|
||||||
|
Term goal;
|
||||||
|
|
||||||
|
if (ts) {
|
||||||
|
size_t arity = f.arity();
|
||||||
|
goal = Yap_MkApplTerm(Yap_MkFunctor(f.name().asAtom(),arity), arity, ts);
|
||||||
|
nts = RepAppl(goal) + 1;
|
||||||
|
for (arity_t i = 0; i < arity; i++)
|
||||||
|
XREGS[i + 1] = ts[i];
|
||||||
|
} else {
|
||||||
|
goal = MkVarTerm();
|
||||||
|
}
|
||||||
|
openQuery();
|
||||||
|
names = YAPPairTerm(TermNil);
|
||||||
|
RECOVER_MACHINE_REGS();
|
||||||
|
}
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
YAPQuery::YAPQuery(YAPFunctor f, YAPTerm ts[]) : YAPPredicate(f) {
|
YAPQuery::YAPQuery(YAPFunctor f, YAPTerm ts[]) : YAPPredicate(f) {
|
||||||
/* ignore flags for now */
|
/* ignore flags for now */
|
||||||
|
@ -76,6 +76,7 @@ public:
|
|||||||
/// least
|
/// least
|
||||||
/// the same arity as the functor.
|
/// the same arity as the functor.
|
||||||
YAPQuery(YAPPredicate p, YAPTerm t[]);
|
YAPQuery(YAPPredicate p, YAPTerm t[]);
|
||||||
|
///
|
||||||
/// full constructor,
|
/// full constructor,
|
||||||
///
|
///
|
||||||
///
|
///
|
||||||
@ -83,6 +84,9 @@ public:
|
|||||||
/// least
|
/// least
|
||||||
/// the same arity as the functor.
|
/// the same arity as the functor.
|
||||||
YAPQuery(YAPFunctor f, YAPTerm mod, YAPTerm t[]);
|
YAPQuery(YAPFunctor f, YAPTerm mod, YAPTerm t[]);
|
||||||
|
/// often, this is more efficient
|
||||||
|
///
|
||||||
|
YAPQuery(YAPFunctor f, YAPTerm mod, Term t[]);
|
||||||
/// functor/term constructor,
|
/// functor/term constructor,
|
||||||
///
|
///
|
||||||
/// It is given a functor, and an array of terms that must have at least
|
/// It is given a functor, and an array of terms that must have at least
|
||||||
|
@ -147,6 +147,7 @@ int main(int argc, char **argv)
|
|||||||
YAP_Reset(YAP_FULL_RESET, false);
|
YAP_Reset(YAP_FULL_RESET, false);
|
||||||
/* End preprocessor code */
|
/* End preprocessor code */
|
||||||
|
|
||||||
|
//mtrace();
|
||||||
bool rc = exec_top_level(BootMode, &init_args);
|
bool rc = exec_top_level(BootMode, &init_args);
|
||||||
if (!rc)
|
if (!rc)
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -45,6 +45,7 @@
|
|||||||
nb_heap_del/3,
|
nb_heap_del/3,
|
||||||
nb_heap_peek/3,
|
nb_heap_peek/3,
|
||||||
nb_heap_empty/1,
|
nb_heap_empty/1,
|
||||||
|
nb_heap_reset/1,
|
||||||
nb_heap_size/2,
|
nb_heap_size/2,
|
||||||
nb_beam/2,
|
nb_beam/2,
|
||||||
nb_beam_close/1,
|
nb_beam_close/1,
|
||||||
|
@ -145,7 +145,7 @@ for ( [key,v] of singletonVars.entries()) {
|
|||||||
console.log("reset");
|
console.log("reset");
|
||||||
}
|
}
|
||||||
|
|
||||||
CodeMirror.registerHelper("lint", "prolog", exportErrors);
|
//CodeMirror.registerHelper("lint", "prolog", exportErrors);
|
||||||
|
|
||||||
/*******************************
|
/*******************************
|
||||||
* CHARACTER ESCAPES *
|
* CHARACTER ESCAPES *
|
||||||
|
@ -30,6 +30,7 @@ set (PROBLOG_PROGRAMS
|
|||||||
problog/version_control.yap
|
problog/version_control.yap
|
||||||
problog/nestedtries.yap
|
problog/nestedtries.yap
|
||||||
problog/utils.yap
|
problog/utils.yap
|
||||||
|
problog/lbdd.yap
|
||||||
problog/utils_lbdd.yap
|
problog/utils_lbdd.yap
|
||||||
problog/ad_converter.yap
|
problog/ad_converter.yap
|
||||||
problog/termhandling.yap
|
problog/termhandling.yap
|
||||||
|
@ -1330,7 +1330,7 @@ set_fact_probability(ID,Prob) :-
|
|||||||
retract(ProblogTerm),
|
retract(ProblogTerm),
|
||||||
ProblogTerm =.. [ProblogName|ProblogTermArgs],
|
ProblogTerm =.. [ProblogName|ProblogTermArgs],
|
||||||
nth1(ProblogArity,ProblogTermArgs,_,KeepArgs),
|
nth1(ProblogArity,ProblogTermArgs,_,KeepArgs),
|
||||||
NewLogProb is log(Prob),
|
(isnan(Prob) -> NewLogProb = 0.0 ; NewLogProb is log(Prob)),
|
||||||
nth1(ProblogArity,NewProblogTermArgs,NewLogProb,KeepArgs),
|
nth1(ProblogArity,NewProblogTermArgs,NewLogProb,KeepArgs),
|
||||||
NewProblogTerm =.. [ProblogName|NewProblogTermArgs],
|
NewProblogTerm =.. [ProblogName|NewProblogTermArgs],
|
||||||
assertz(NewProblogTerm).
|
assertz(NewProblogTerm).
|
||||||
|
@ -68,10 +68,18 @@ log2prob(X,Slope,FactID,V) :-
|
|||||||
sigmoid(V0, Slope, V).
|
sigmoid(V0, Slope, V).
|
||||||
|
|
||||||
bind_maplist([], _Slope, _X).
|
bind_maplist([], _Slope, _X).
|
||||||
bind_maplist([Node-(Node-Pr)|MapList], Slope, X) :-
|
bind_maplist([Node-(Node-NPr)|MapList], Slope, X) :-
|
||||||
SigPr <== X[Node],
|
SigPr <== X[Node],
|
||||||
sigmoid(SigPr, Slope, Pr),
|
sigmoid(SigPr, Slope, Pr),
|
||||||
bind_maplist(MapList, Slope, X).
|
(Pr > 0.999
|
||||||
|
->
|
||||||
|
NPr = 0.999
|
||||||
|
;
|
||||||
|
Pr < 0.001
|
||||||
|
->
|
||||||
|
NPr = 0.001 ;
|
||||||
|
Pr = NPr ),
|
||||||
|
bind_maplist(MapList, Slope, X).
|
||||||
|
|
||||||
|
|
||||||
%get_prob(Node, Prob) :-
|
%get_prob(Node, Prob) :-
|
||||||
|
@ -2,7 +2,6 @@
|
|||||||
:- ensure_loaded(library(lists)).
|
:- ensure_loaded(library(lists)).
|
||||||
:- ensure_loaded(library(rbtrees)).
|
:- ensure_loaded(library(rbtrees)).
|
||||||
:- ensure_loaded(library(tries)).
|
:- ensure_loaded(library(tries)).
|
||||||
:- ensure_loaded(('../problog/ptree')).
|
|
||||||
:- ensure_loaded(library(trie_sp)).
|
:- ensure_loaded(library(trie_sp)).
|
||||||
:- ensure_loaded(library(bdd)).
|
:- ensure_loaded(library(bdd)).
|
||||||
:- ensure_loaded(library(bhash)).
|
:- ensure_loaded(library(bhash)).
|
||||||
@ -29,6 +28,8 @@ graph2bdd(Query,1,bdd(D,T,Vs)) :-
|
|||||||
|
|
||||||
:- set_problog_flag(init_method,(Q,N,Bdd,user:graph2bdd(Q,N,Bdd))).
|
:- set_problog_flag(init_method,(Q,N,Bdd,user:graph2bdd(Q,N,Bdd))).
|
||||||
|
|
||||||
|
:- nb_heap(100000,Q), nb_setval(heap,Q).
|
||||||
|
|
||||||
|
|
||||||
%:- leash(0), spy graph2bdd.
|
%:- leash(0), spy graph2bdd.
|
||||||
|
|
||||||
@ -58,7 +59,8 @@ graph(X,Y,Trie_Completed_Proofs,Vs) :-
|
|||||||
!,
|
!,
|
||||||
export_answer([Y|Final], Trie_Completed_Proofs,Vs).
|
export_answer([Y|Final], Trie_Completed_Proofs,Vs).
|
||||||
graph(X,Y,Trie_Completed_Proofs, Vs) :-
|
graph(X,Y,Trie_Completed_Proofs, Vs) :-
|
||||||
nb_heap(100000,Q),
|
nb_getval(heap, Q),
|
||||||
|
nb_heap_reset(Q),
|
||||||
path(X,Y,X,[X],Final, 0, _Pr, Q),
|
path(X,Y,X,[X],Final, 0, _Pr, Q),
|
||||||
!,
|
!,
|
||||||
export_answer(Final, Trie_Completed_Proofs, Vs).
|
export_answer(Final, Trie_Completed_Proofs, Vs).
|
||||||
|
@ -17,7 +17,7 @@
|
|||||||
:- use_module('../problog_lbfgs').
|
:- use_module('../problog_lbfgs').
|
||||||
|
|
||||||
|
|
||||||
:- if(false).
|
:- if(true).
|
||||||
|
|
||||||
:- use_module('kbgraph').
|
:- use_module('kbgraph').
|
||||||
|
|
||||||
|
@ -800,6 +800,20 @@ gradient_descent :-
|
|||||||
set_fact(FactID, Slope, P ) :-
|
set_fact(FactID, Slope, P ) :-
|
||||||
X <== P[FactID],
|
X <== P[FactID],
|
||||||
sigmoid(X, Slope, Pr),
|
sigmoid(X, Slope, Pr),
|
||||||
|
(Pr > 0.999
|
||||||
|
->
|
||||||
|
NPr = 0.999
|
||||||
|
;
|
||||||
|
Pr < 0.001
|
||||||
|
->
|
||||||
|
NPr = 0.001 ;
|
||||||
|
Pr = NPr ),
|
||||||
|
set_fact_probability(FactID, NPr).
|
||||||
|
|
||||||
|
|
||||||
|
set_tunable(I,Slope,P) :-
|
||||||
|
X <== P[I],
|
||||||
|
sigmoid(X,Slope,Pr),
|
||||||
(Pr > 0.99
|
(Pr > 0.99
|
||||||
->
|
->
|
||||||
NPr = 0.99
|
NPr = 0.99
|
||||||
@ -808,13 +822,7 @@ set_fact(FactID, Slope, P ) :-
|
|||||||
->
|
->
|
||||||
NPr = 0.01 ;
|
NPr = 0.01 ;
|
||||||
Pr = NPr ),
|
Pr = NPr ),
|
||||||
set_fact_probability(FactID, NPr).
|
set_fact_probability(I,NPr).
|
||||||
|
|
||||||
|
|
||||||
set_tunable(I,Slope,P) :-
|
|
||||||
X <== P[I],
|
|
||||||
sigmoid(X,Slope,Pr),
|
|
||||||
set_fact_probability(I,Pr).
|
|
||||||
|
|
||||||
:- include(problog/lbdd).
|
:- include(problog/lbdd).
|
||||||
|
|
||||||
|
@ -11,7 +11,6 @@ ${CMAKE_SOURCE_DIR}/include ${CMAKE_SOURCE_DIR}/os ${CMAKE_SOURCE_DIR}/H ${CMAKE
|
|||||||
#talk to python.pl
|
#talk to python.pl
|
||||||
add_library(YAPPython pyload.c ${PYTHON_HEADERS} )
|
add_library(YAPPython pyload.c ${PYTHON_HEADERS} )
|
||||||
|
|
||||||
|
|
||||||
if (WIN32)
|
if (WIN32)
|
||||||
add_library (Py4YAP OBJECT ${PYTHON_SOURCES} ${PYTHON_HEADERS})
|
add_library (Py4YAP OBJECT ${PYTHON_SOURCES} ${PYTHON_HEADERS})
|
||||||
else()
|
else()
|
||||||
|
@ -29,10 +29,7 @@ configure_file(yap4py/__init__.py.in yap4py/__init__.py)
|
|||||||
INCLUDE_DIRECTORIES(${PYTHON_INCLUDE_PATH} ${CMAKE_CURRENT_BINARY_DIR}/yap4py/include
|
INCLUDE_DIRECTORIES(${PYTHON_INCLUDE_PATH} ${CMAKE_CURRENT_BINARY_DIR}/yap4py/include
|
||||||
)
|
)
|
||||||
|
|
||||||
|
SET(SWIG_SOURCES
|
||||||
|
|
||||||
|
|
||||||
SET(SWIG_SOURCES
|
|
||||||
${CMAKE_SOURCE_DIR}/packages/swig/yap.i
|
${CMAKE_SOURCE_DIR}/packages/swig/yap.i
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -46,36 +43,37 @@ INCLUDE_DIRECTORIES(${PYTHON_INCLUDE_PATH} ${CMAKE_CURRENT_BINARY_DIR}/yap4py/i
|
|||||||
# LIBRARY DESTINATION ${PYTHON_MODULE_PATH}
|
# LIBRARY DESTINATION ${PYTHON_MODULE_PATH}
|
||||||
# )
|
# )
|
||||||
|
|
||||||
if (CONDA)
|
|
||||||
set(bdist bdist_conda)
|
|
||||||
else()
|
|
||||||
set(bdist bdist_wheel)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
add_custom_target( YAP4PY ALL
|
|
||||||
COMMAND ${SWIG_EXECUTABLE} -c++ -python -O -py3 -module "yap" -addextern -I${CMAKE_SOURCE_DIR}/H -I${CMAKE_SOURCE_DIR}/H/generated -I${CMAKE_SOURCE_DIR}/include
|
|
||||||
-I${CMAKE_SOURCE_DIR}/OPTYap -I${CMAKE_SOURCE_DIR}/os -I${CMAKE_SOURCE_DIR}/utf8proc -I.././.. -I${CMAKE_SOURCE_DIR}/CXX -I${CMAKE_SOURCE_DIR}/packages/python
|
|
||||||
-outdir ${CMAKE_CURRENT_BINARY_DIR}/yap4py -I${GMP_INCLUDE_DIRS} -DX_API="" -o ${CMAKE_CURRENT_BINARY_DIR}/yap4py/yap_wrap.cxx -oh ${CMAKE_CURRENT_BINARY_DIR}/yap4py/yap_wrap.hh ${SWIG_SOURCES}
|
|
||||||
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
|
|
||||||
DEPENDS ${SWIG_SOURCES} Py4YAP YAP++ yap4py/yapi.cpp YAP4PY_PY
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
add_custom_command( OUTPUT yap4py/yapi.cpp
|
add_custom_command( OUTPUT yap4py/yapi.cpp
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/CXX/yapi.cpp ${CMAKE_CURRENT_BINARY_DIR}/yap4py
|
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/CXX/yapi.cpp ${CMAKE_CURRENT_BINARY_DIR}/yap4py
|
||||||
DEPENDS ${CMAKE_SOURCE_DIR}/CXX/yapi.cpp
|
DEPENDS ${CMAKE_SOURCE_DIR}/CXX/yapi.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
add_custom_command( OUTPUT YAP4PY_PY
|
add_custom_command( OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/yap4py/yap_wrap.cxx ${CMAKE_CURRENT_BINARY_DIR}/yap4py/yap_wrap.hh
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy ${PYTHON_SOURCES} ${CMAKE_CURRENT_BINARY_DIR}/yap4py
|
COMMAND ${SWIG_EXECUTABLE} -c++ -python -O -py3 -module "yap" -addextern -I${CMAKE_SOURCE_DIR}/H -I${CMAKE_SOURCE_DIR}/H/generated -I${CMAKE_SOURCE_DIR}/include
|
||||||
DEPENDS ${PYTHON_SOURCES}
|
-I${CMAKE_SOURCE_DIR}/OPTYap -I${CMAKE_SOURCE_DIR}/os -I${CMAKE_SOURCE_DIR}/utf8proc -I.././.. -I${CMAKE_SOURCE_DIR}/CXX -I${CMAKE_SOURCE_DIR}/packages/python
|
||||||
|
-outdir ${CMAKE_CURRENT_BINARY_DIR}/yap4py -I${GMP_INCLUDE_DIRS} -DX_API="" -o ${CMAKE_CURRENT_BINARY_DIR}/yap4py/yap_wrap.cxx -oh ${CMAKE_CURRENT_BINARY_DIR}/yap4py/yap_wrap.hh ${SWIG_SOURCES}
|
||||||
|
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
|
||||||
|
DEPENDS ${SWIG_SOURCES} yap4py/yapi.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
add_custom_target( YAP4PY ALL
|
||||||
|
DEPENDS ${CMAKE_SOURCE_DIR}/CXX/yapi.cpp Py4YAP YAP++ yap4py/yapi.cpp ${CMAKE_CURRENT_BINARY_DIR}/yap4py/yap_wrap.cxx ${CMAKE_CURRENT_BINARY_DIR}/yap4py/yap_wrap.hh
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
add_custom_command( TARGET YAP4PY
|
||||||
|
PRE_BUILD
|
||||||
|
COMMAND ${CMAKE_COMMAND} -E copy ${PYTHON_SOURCES} ${CMAKE_CURRENT_BINARY_DIR}/yap4py
|
||||||
|
COMMAND ${PYTHON_EXECUTABLE} setup.py sdist ${bdist}
|
||||||
|
DEPENDS ${CMAKE_SOURCE_DIR}/CXX/yapi.cpp Py4YAP YAP++ yap4py/yapi.cpp YAP4PY_PY ${CMAKE_CURRENT_BINARY_DIR}/yap4py/yap_wrap.cxx ${CMAKE_CURRENT_BINARY_DIR}/yap4py/yap_wrap.hh ${PYTHON_SOURCES} Py4YAP STARTUP libYap
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
install(CODE "execute_process(
|
install(CODE "execute_process(
|
||||||
COMMAND ${PYTHON_EXECUTABLE} setup.py sdist ${bdist}
|
|
||||||
COMMAND ${PYTHON_EXECUTABLE} -m pip install ${PYTHON_USER_INSTALL} --ignore-installed .
|
COMMAND ${PYTHON_EXECUTABLE} -m pip install ${PYTHON_USER_INSTALL} --ignore-installed .
|
||||||
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})"
|
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})")
|
||||||
DEPENDS Py4YAP ${CMAKE_BINARY_DIR}/${YAP_STARTUP} ${YAP_INSTALL_LIBDIR} )
|
|
||||||
|
|
||||||
|
|
||||||
install(FILES ${YAP4PY_PL} DESTINATION ${YAP_INSTALL_DATADIR} )
|
install(FILES ${YAP4PY_PL} DESTINATION ${YAP_INSTALL_DATADIR} )
|
||||||
|
@ -1,6 +1,10 @@
|
|||||||
import readline
|
import readline
|
||||||
import copy
|
import copy
|
||||||
from yap4py.yap import *
|
try:
|
||||||
|
from yap4py.yap import *
|
||||||
|
except Exception as e:
|
||||||
|
print(e)
|
||||||
|
exit(0)
|
||||||
from yap4py.systuples import python_query, show_answer, library, prolog_library, v0, compile, namedtuple
|
from yap4py.systuples import python_query, show_answer, library, prolog_library, v0, compile, namedtuple
|
||||||
from os.path import join, dirname
|
from os.path import join, dirname
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
set (PYTHON_SOURCES
|
set (PYTHON_SOURCES
|
||||||
core/yap_kernel/__init__.py
|
#core/yap_kernel/__init__.py
|
||||||
core/yap_kernel/getipython.py
|
#core/yap_kernel/getipython.py
|
||||||
core/__init__.py
|
#core/__init__.py
|
||||||
_version.py
|
_version.py
|
||||||
yap_kernel/datapub.py
|
yap_kernel/datapub.py
|
||||||
yap_kernel/serialize.py
|
yap_kernel/serialize.py
|
||||||
@ -62,7 +62,7 @@ yap_kernel/pylab/__init__.py
|
|||||||
yap_kernel/__main__.py
|
yap_kernel/__main__.py
|
||||||
yap_kernel.py
|
yap_kernel.py
|
||||||
kernelspec.py
|
kernelspec.py
|
||||||
__init__.py
|
#__init__.py
|
||||||
yap_kernel_launcher.py
|
yap_kernel_launcher.py
|
||||||
docs/conf.py
|
docs/conf.py
|
||||||
setup.py
|
setup.py
|
||||||
@ -431,20 +431,18 @@ endforeach()
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
add_custom_target(YAP_KERNEL ALL
|
add_custom_target(YAP_KERNEL
|
||||||
|
ALL
|
||||||
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
|
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
|
||||||
COMMAND ${PYTHON_EXECUTABLE} ${SETUP_PY} build sdist bdist
|
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/yap_kernel/resources/logo-32x32.png ${CMAKE_CURRENT_BINARY_DIR}/yap_kernel/resources/logo-64x64.png ${CMAKE_CURRENT_BINARY_DIR}/yap_kernel/resources/kernel.js ${CMAKE_CURRENT_BINARY_DIR}/yap_kernel/resources/prolog.js ${OUTS} YAP4PY
|
||||||
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/yap_kernel/resources/logo-32x32.png ${CMAKE_CURRENT_BINARY_DIR}/yap_kernel/resources/logo-64x64.png ${CMAKE_CURRENT_BINARY_DIR}/yap_kernel/resources/kernel.js ${CMAKE_CURRENT_BINARY_DIR}/yap_kernel/resources/prolog.js ${OUTS} YAP4PY
|
COMMAND ${PYTHON_EXECUTABLE} ${SETUP_PY} sdist ${bdist}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
install(CODE "execute_process(
|
||||||
set(REAL_SOURCES real.c)
|
COMMAND ${PYTHON_EXECUTABLE} -m pip install ${PYTHON_USER_INSTALL} --ignore-installed .
|
||||||
|
|
||||||
install(CODE "execute_process(
|
|
||||||
COMMAND ${PYTHON_EXECUTABLE} -m pip install ${PYTHON_USER_INSTALL} --ignore-installed --no-deps .
|
|
||||||
COMMAND ${PYTHON_EXECUTABLE} -m yap_kernel.kernelspec
|
COMMAND ${PYTHON_EXECUTABLE} -m yap_kernel.kernelspec
|
||||||
ERROR_VARIABLE setupErr
|
ERROR_VARIABLE setupErr
|
||||||
OUTPUT_VARIABLE setupOut
|
OUTPUT_VARIABLE setupOut
|
||||||
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})")
|
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})")
|
||||||
|
|
||||||
install(FILES ${PL_SOURCES} DESTINATION ${YAP_INSTALL_DATADIR} )
|
install(FILES ${PL_SOURCES} DESTINATION ${YAP_INSTALL_DATADIR} )
|
||||||
|
@ -34,12 +34,20 @@ import os
|
|||||||
import shutil
|
import shutil
|
||||||
|
|
||||||
from distutils.core import setup
|
from distutils.core import setup
|
||||||
|
from glob import glob
|
||||||
|
from shutil import copy
|
||||||
|
|
||||||
pjoin = os.path.join
|
pjoin = os.path.join
|
||||||
here = os.path.abspath(os.path.dirname(__file__))
|
here = os.path.abspath(os.path.dirname(__file__))
|
||||||
packages = ['yap_kernel','yap_ipython']
|
packages = ['yap_kernel','yap_ipython']
|
||||||
# pkg_root = pjoin(here, name)
|
# pkg_root = pjoin(here, name)
|
||||||
|
|
||||||
|
try:
|
||||||
|
copy(glob(pjoin(here,"../swig/build/lib*/_yap*"))[0],here)
|
||||||
|
copy(glob(pjoin(here,"../../../libYap*"))[-1],here)
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
|
||||||
for d, _, _ in os.walk(pjoin(here, 'yap_kernel')):
|
for d, _, _ in os.walk(pjoin(here, 'yap_kernel')):
|
||||||
if os.path.exists(pjoin(d, '__init__.py')):
|
if os.path.exists(pjoin(d, '__init__.py')):
|
||||||
packages.append(d[len(here)+1:].replace(os.path.sep, '.'))
|
packages.append(d[len(here)+1:].replace(os.path.sep, '.'))
|
||||||
|
@ -14,6 +14,7 @@ name = 'yap_kernel'
|
|||||||
#-----------------------------------------------------------------------------
|
#-----------------------------------------------------------------------------
|
||||||
|
|
||||||
import sys
|
import sys
|
||||||
|
import os
|
||||||
|
|
||||||
v = sys.version_info
|
v = sys.version_info
|
||||||
if v[:2] < (2,7) or (v[0] >= 3 and v[:2] < (3,3)):
|
if v[:2] < (2,7) or (v[0] >= 3 and v[:2] < (3,3)):
|
||||||
@ -28,10 +29,13 @@ PY3 = (sys.version_info[0] >= 3)
|
|||||||
#-----------------------------------------------------------------------------
|
#-----------------------------------------------------------------------------
|
||||||
|
|
||||||
import os
|
import os
|
||||||
from glob import glob
|
from glob import globx
|
||||||
|
from shutil import copy
|
||||||
from distutils.core import setup
|
from distutils.core import setup
|
||||||
|
|
||||||
|
copy(glob("../swig/build/lib/_yap*")[0],"../swig/yap4py")
|
||||||
|
copy(glob("../../libYap*")[-1],"../swig/yap4py")
|
||||||
|
|
||||||
packages = ["${CMAKE_CURRENT_SOURCE_DIR}"]
|
packages = ["${CMAKE_CURRENT_SOURCE_DIR}"]
|
||||||
|
|
||||||
version_ns = {}
|
version_ns = {}
|
||||||
@ -53,9 +57,8 @@ setup_args = dict(
|
|||||||
'Intended Audience :: Developers',
|
'Intended Audience :: Developers',
|
||||||
'Intended Audience :: System Administrators',
|
'Intended Audience :: System Administrators',
|
||||||
'Intended Audience :: Science/Research',
|
'Intended Audience :: Science/Research',
|
||||||
'License :: OSI Approved :: BSD License',
|
'License :: OSI Approved :: Perl License',
|
||||||
'Programming Language :: Prolog',
|
'Programming Language :: Prolog',
|
||||||
'Programming Language :: Python :: 2.7',
|
|
||||||
'Programming Language :: Python :: 3',
|
'Programming Language :: Python :: 3',
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
@ -79,4 +82,5 @@ if 'setuptools' in sys.modules:
|
|||||||
setup_args.update(setuptools_args)
|
setup_args.update(setuptools_args)
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
|
sys.path += ['../swig']
|
||||||
setup(**setup_args)
|
setup(**setup_args)
|
||||||
|
@ -20,14 +20,19 @@ class yap4r {
|
|||||||
std::vector<YAPTerm> args;
|
std::vector<YAPTerm> args;
|
||||||
bool failed;
|
bool failed;
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
SEXP qsexp;
|
||||||
yap4r();
|
yap4r();
|
||||||
bool query(std::string p_name,std::string p_module,Rcpp::GenericVector sexps);
|
bool query(std::string p_name, GenericVector sexps=R_NilValue, std::string p_module="user");
|
||||||
bool more();
|
bool more();
|
||||||
bool done();
|
bool done();
|
||||||
SEXP peek(int i);
|
SEXP peek(int i);
|
||||||
|
bool compile(std::string s);
|
||||||
|
bool library(std::string s);
|
||||||
};
|
};
|
||||||
|
|
||||||
yap4r::yap4r() {
|
yap4r::yap4r() {
|
||||||
YAPEngineArgs *yargs = new YAPEngineArgs();
|
YAPEngineArgs *yargs = new YAPEngineArgs();
|
||||||
yap = new YAPEngine(yargs);
|
yap = new YAPEngine(yargs);
|
||||||
@ -36,25 +41,57 @@ public:
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
bool yap4r::query(std::string p_name,std::string p_module,Rcpp::GenericVector sexps) {
|
bool yap4r::query(std::string p_name, GenericVector sexps, std::string p_module) {
|
||||||
|
|
||||||
if (q) {
|
if (q) {
|
||||||
q->close();
|
q->close();
|
||||||
q = NULL;
|
q = nullptr;
|
||||||
}
|
}
|
||||||
std::vector<Term> args = std::vector<Term>();
|
yhandle_t t;
|
||||||
|
arity_t arity;
|
||||||
|
if (sexps.isNULL()) {
|
||||||
|
YAPTerm qt = YAPAtomTerm(p_name.c_str());
|
||||||
|
q = new YAPQuery(qt);
|
||||||
|
t =qt.handle();
|
||||||
|
} else {
|
||||||
|
arity = sexps.length();
|
||||||
|
std::vector<YAPTerm> args = std::vector<YAPTerm>();
|
||||||
yhandle_t sls = Yap_NewHandles(sexps.length());
|
yhandle_t sls = Yap_NewHandles(sexps.length());
|
||||||
for (int i=0; i<sexps.length();i++) {
|
for (int i=0; i<sexps.length();i++) {
|
||||||
if (!sexp_to_pl(sls+i, sexps[i]))
|
if (!sexp_to_pl(sls+i, sexps[i]))
|
||||||
return false;
|
return false;
|
||||||
args.push_back( Yap_GetFromSlot(sls+i) );
|
args.push_back( YAPTerm(Yap_GetFromSlot(sls+i)) );
|
||||||
}
|
}
|
||||||
YAPTerm qt = YAPApplTerm(p_name,args);
|
YAPFunctor f= YAPFunctor(p_name.c_str(), arity);
|
||||||
q = new YAPQuery(qt);
|
YAPAtomTerm mod = YAPAtomTerm(p_module.c_str());
|
||||||
return true;
|
t = YAPApplTerm(p_name.c_str(),args.data()).handle();
|
||||||
|
q = new YAPQuery(f,mod,args.data());
|
||||||
|
}
|
||||||
|
if (q == nullptr)
|
||||||
|
return false;
|
||||||
|
bool rc = q->next();
|
||||||
|
if (!rc) {
|
||||||
|
failed = true;
|
||||||
|
q = nullptr;
|
||||||
|
}
|
||||||
|
if(rc)
|
||||||
|
qsexp = term_to_sexp(t, false);
|
||||||
|
|
||||||
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool yap4r::compile(std::string s) {
|
||||||
|
YAPTerm fs[1];
|
||||||
|
fs[0] = YAPAtomTerm(s.c_str());
|
||||||
|
return yap->mgoal(YAPApplTerm("compile",fs).term(), USER_MODULE);
|
||||||
|
|
||||||
|
}
|
||||||
|
bool yap4r::library(std::string s) {
|
||||||
|
YAPTerm fs[1], l[1];
|
||||||
|
l[0] = YAPAtomTerm(s.c_str());
|
||||||
|
fs[0] = YAPApplTerm("library", l);
|
||||||
|
return yap->mgoal(YAPApplTerm("compile",fs).term(), USER_MODULE);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
bool yap4r::more() {
|
bool yap4r::more() {
|
||||||
bool rc = true;
|
bool rc = true;
|
||||||
@ -83,6 +120,8 @@ public:
|
|||||||
SEXP yap4r::peek(int i) {
|
SEXP yap4r::peek(int i) {
|
||||||
if (failed || q==nullptr)
|
if (failed || q==nullptr)
|
||||||
return R_MissingArg;
|
return R_MissingArg;
|
||||||
|
if (i==0)
|
||||||
|
return qsexp;
|
||||||
return term_to_sexp(Yap_InitSlot(Yap_XREGS[i]), false);
|
return term_to_sexp(Yap_InitSlot(Yap_XREGS[i]), false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -93,6 +132,8 @@ public:
|
|||||||
.method( "query", &yap4r::query, "create an active query within the engine")
|
.method( "query", &yap4r::query, "create an active query within the engine")
|
||||||
.method( "more", &yap4r::more, "ask for an extra solution")
|
.method( "more", &yap4r::more, "ask for an extra solution")
|
||||||
.method( "done", &yap4r::done, "terminate the query")
|
.method( "done", &yap4r::done, "terminate the query")
|
||||||
|
.method( "compile", &yap4r::compile, "compile the file")
|
||||||
|
.method( "library", &yap4r::library, "compile the library")
|
||||||
.method( "peek", &yap4r::peek, "load arg[i] into R")
|
.method( "peek", &yap4r::peek, "load arg[i] into R")
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
|
@ -26,10 +26,9 @@
|
|||||||
|
|
||||||
lbfgs_finalize/1,
|
lbfgs_finalize/1,
|
||||||
|
|
||||||
lbfgs_set_parameter/3,
|
lbfgs_set_parameter/2,
|
||||||
lbfgs_get_parameter/3,
|
lbfgs_get_parameter/2,
|
||||||
lbfgs_parameters/0,
|
lbfgs_parameters/0]).
|
||||||
lbfgs_parameters/1]).
|
|
||||||
|
|
||||||
% switch on all the checks to reduce bug searching time
|
% switch on all the checks to reduce bug searching time
|
||||||
% :- yap_flag(unknown,error).
|
% :- yap_flag(unknown,error).
|
||||||
@ -187,12 +186,12 @@ lbfgs_finalize(t(_N,X,_U,Params)) :-
|
|||||||
|
|
||||||
run the algorithm. output the final score of the function being optimised
|
run the algorithm. output the final score of the function being optimised
|
||||||
*/
|
*/
|
||||||
lbfgs_run(t(N,X,U,Params),FX) :-
|
lbfgs_run(t(N,X,U),FX) :-
|
||||||
lbfgs(N,X, Params, U, FX).
|
lbfgs(N,X, U, FX).
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/** @pred lbfgs_parameters/1
|
/** @pred lbfgs_parameters/0
|
||||||
Prints a table with the current parameters. See the <a href="http://www.chokkan.org/software/liblbfgs/structlbfgs__parameter__t.html#_details">documentation
|
Prints a table with the current parameters. See the <a href="http://www.chokkan.org/software/liblbfgs/structlbfgs__parameter__t.html#_details">documentation
|
||||||
of libLBFGS</a> for the meaning of each parameter.
|
of libLBFGS</a> for the meaning of each parameter.
|
||||||
|
|
||||||
@ -220,47 +219,43 @@ int orthantwise_end -1 End index for computing the L1 norm
|
|||||||
~~~~
|
~~~~
|
||||||
*/
|
*/
|
||||||
lbfgs_parameters :-
|
lbfgs_parameters :-
|
||||||
lbfgs_defaults(Params),
|
lbfgs_get_parameter(m,M ),
|
||||||
lbfgs_parameters(t(_X,_,_,Params)).
|
lbfgs_get_parameter(epsilon,Epsilon ),
|
||||||
|
lbfgs_get_parameter(past,Past ),
|
||||||
lbfgs_parameters(t(_,_,_,Params)) :-
|
lbfgs_get_parameter(delta,Delta ),
|
||||||
lbfgs_get_parameter(m,M ,Params),
|
lbfgs_get_parameter(max_iterations,Max_Iterations ),
|
||||||
lbfgs_get_parameter(epsilon,Epsilon ,Params),
|
lbfgs_get_parameter(linesearch,Linesearch ),
|
||||||
lbfgs_get_parameter(past,Past ,Params),
|
lbfgs_get_parameter(max_linesearch,Max_Linesearch ),
|
||||||
lbfgs_get_parameter(delta,Delta ,Params),
|
lbfgs_get_parameter(min_step,Min_Step ),
|
||||||
lbfgs_get_parameter(max_iterations,Max_Iterations ,Params),
|
lbfgs_get_parameter(max_step,Max_Step ),
|
||||||
lbfgs_get_parameter(linesearch,Linesearch ,Params),
|
lbfgs_get_parameter(ftol,Ftol ),
|
||||||
lbfgs_get_parameter(max_linesearch,Max_Linesearch ,Params),
|
lbfgs_get_parameter(gtol,Gtol ),
|
||||||
lbfgs_get_parameter(min_step,Min_Step ,Params),
|
lbfgs_get_parameter(xtol,Xtol ),
|
||||||
lbfgs_get_parameter(max_step,Max_Step ,Params),
|
lbfgs_get_parameter(orthantwise_c,Orthantwise_C ),
|
||||||
lbfgs_get_parameter(ftol,Ftol ,Params),
|
lbfgs_get_parameter(orthantwise_start,Orthantwise_Start ),
|
||||||
lbfgs_get_parameter(gtol,Gtol ,Params),
|
lbfgs_get_parameter(orthantwise_end,Orthantwise_End ),
|
||||||
lbfgs_get_parameter(xtol,Xtol ,Params),
|
|
||||||
lbfgs_get_parameter(orthantwise_c,Orthantwise_C ,Params),
|
|
||||||
lbfgs_get_parameter(orthantwise_start,Orthantwise_Start ,Params),
|
|
||||||
lbfgs_get_parameter(orthantwise_end,Orthantwise_End ,Params),
|
|
||||||
|
|
||||||
format('/******************************************************************************************~n',[] ),
|
format('/******************************************************************************************~n',[] ),
|
||||||
print_param('Name','Value','Description','Type' ,Params),
|
print_param('Name','Value','Description','Type' ),
|
||||||
format('******************************************************************************************~n',[] ),
|
format('******************************************************************************************~n',[] ),
|
||||||
print_param(m,M,'The number of corrections to approximate the inverse hessian matrix.',int ,Params),
|
print_param(m,M,'The number of corrections to approximate the inverse hessian matrix.',int ),
|
||||||
print_param(epsilon,Epsilon,'Epsilon for convergence test.',float ,Params),
|
print_param(epsilon,Epsilon,'Epsilon for convergence test.',float ),
|
||||||
print_param(past,Past,'Distance for delta-based convergence test.',int ,Params),
|
print_param(past,Past,'Distance for delta-based convergence test.',int ),
|
||||||
print_param(delta,Delta,'Delta for convergence test.',float ,Params),
|
print_param(delta,Delta,'Delta for convergence test.',float ),
|
||||||
print_param(max_iterations,Max_Iterations,'The maximum number of iterations',int ,Params),
|
print_param(max_iterations,Max_Iterations,'The maximum number of iterations',int ),
|
||||||
print_param(linesearch,Linesearch,'The line search algorithm.',int ,Params),
|
print_param(linesearch,Linesearch,'The line search algorithm.',int ),
|
||||||
print_param(max_linesearch,Max_Linesearch,'The maximum number of trials for the line search.',int ,Params),
|
print_param(max_linesearch,Max_Linesearch,'The maximum number of trials for the line search.',int ),
|
||||||
print_param(min_step,Min_Step,'The minimum step of the line search routine.',float ,Params),
|
print_param(min_step,Min_Step,'The minimum step of the line search routine.',float ),
|
||||||
print_param(max_step,Max_Step,'The maximum step of the line search.',float ,Params),
|
print_param(max_step,Max_Step,'The maximum step of the line search.',float ),
|
||||||
print_param(ftol,Ftol,'A parameter to control the accuracy of the line search routine.',float ,Params),
|
print_param(ftol,Ftol,'A parameter to control the accuracy of the line search routine.',float ),
|
||||||
print_param(gtol,Gtol,'A parameter to control the accuracy of the line search routine.',float ,Params),
|
print_param(gtol,Gtol,'A parameter to control the accuracy of the line search routine.',float ),
|
||||||
print_param(xtol,Xtol,'The machine precision for floating-point values.',float ,Params),
|
print_param(xtol,Xtol,'The machine precision for floating-point values.',float ),
|
||||||
print_param(orthantwise_c,Orthantwise_C,'Coefficient for the L1 norm of variables',float ,Params),
|
print_param(orthantwise_c,Orthantwise_C,'Coefficient for the L1 norm of variables',float ),
|
||||||
print_param(orthantwise_start,Orthantwise_Start,'Start index for computing the L1 norm of the variables.',int ,Params),
|
print_param(orthantwise_start,Orthantwise_Start,'Start index for computing the L1 norm of the variables.',int ),
|
||||||
print_param(orthantwise_end,Orthantwise_End,'End index for computing the L1 norm of the variables.',int ,Params),
|
print_param(orthantwise_end,Orthantwise_End,'End index for computing the L1 norm of the variables.',int ),
|
||||||
format('******************************************************************************************/~n',[]),
|
format('******************************************************************************************/~n',[]),
|
||||||
format(' use lbfgs_set_parameter(Name,Value,Solver) to change parameters~n',[]),
|
format(' use lbfgs_set_parameter(Name,Value) to change parameters~n',[]),
|
||||||
format(' use lbfgs_get_parameter(Name,Value,Solver) to see current parameters~n',[]),
|
format(' use lbfgs_get_parameter(Name,Value) to see current parameters~n',[]),
|
||||||
format(' use lbfgs_parameters to print this overview~2n',[]).
|
format(' use lbfgs_parameters to print this overview~2n',[]).
|
||||||
|
|
||||||
|
|
||||||
|
@ -39,14 +39,14 @@ static lbfgsfloatval_t evaluate(void *instance, const lbfgsfloatval_t *x,
|
|||||||
YAP_Term call;
|
YAP_Term call;
|
||||||
YAP_Bool result;
|
YAP_Bool result;
|
||||||
lbfgsfloatval_t rc;
|
lbfgsfloatval_t rc;
|
||||||
YAP_Term v;
|
YAP_Term v, t1, t12;
|
||||||
YAP_Term t[6], t2[2];
|
YAP_Term t[6], t2[2];
|
||||||
|
|
||||||
t[0] = v = YAP_MkVarTerm();
|
t[0] = v = YAP_MkVarTerm();
|
||||||
t[1] = YAP_MkIntTerm((YAP_Int)x);
|
t1 = YAP_MkIntTerm((YAP_Int)x);
|
||||||
t[1] = YAP_MkApplTerm(ffloats, 1, t + 1);
|
t[1] = YAP_MkApplTerm(ffloats, 1, &t1);
|
||||||
t[2] = YAP_MkIntTerm((YAP_Int)g_tmp);
|
t12 = YAP_MkIntTerm((YAP_Int)g_tmp);
|
||||||
t[2] = YAP_MkApplTerm(ffloats, 1, t + 2);
|
t[2] = YAP_MkApplTerm(ffloats, 1, &t12);
|
||||||
t[3] = YAP_MkIntTerm(n);
|
t[3] = YAP_MkIntTerm(n);
|
||||||
t[4] = YAP_MkFloatTerm(step);
|
t[4] = YAP_MkFloatTerm(step);
|
||||||
t[5] = YAP_MkIntTerm((YAP_Int)instance);
|
t[5] = YAP_MkIntTerm((YAP_Int)instance);
|
||||||
@ -310,8 +310,10 @@ static YAP_Bool p_lbfgs(void) {
|
|||||||
s = "A logic error (negative line-search step) occurred.";
|
s = "A logic error (negative line-search step) occurred.";
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
fprintf(stderr, "optimization terminated with code %d: %s\n", ret, s);
|
char ss[1024];
|
||||||
|
snprintf(ss, 1023, "optimization terminated with code %d: %s\n", ret, s);
|
||||||
|
fputs(ss, stderr);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -326,16 +328,8 @@ static YAP_Bool lbfgs_grab(void) {
|
|||||||
return YAP_Unify(YAP_ARG2, YAP_MkApplTerm(ffloats, 1, &t));
|
return YAP_Unify(YAP_ARG2, YAP_MkApplTerm(ffloats, 1, &t));
|
||||||
}
|
}
|
||||||
|
|
||||||
static YAP_Bool lbfgs_parameters(void) {
|
static lbfgs_parameter_t parms;
|
||||||
lbfgs_parameter_t *x = malloc(sizeof(lbfgs_parameter_t));
|
|
||||||
lbfgs_parameter_init(x);
|
|
||||||
return YAP_Unify(YAP_ARG1, YAP_MkIntTerm((YAP_Int)x));
|
|
||||||
}
|
|
||||||
|
|
||||||
static YAP_Bool lbfgs_release_parameters(void) {
|
|
||||||
free((void *)YAP_IntOfTerm(YAP_ARG1));
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
static YAP_Bool lbfgs_release(void) {
|
static YAP_Bool lbfgs_release(void) {
|
||||||
/* if (lbfgs_status == LBFGS_STATUS_NONE) { */
|
/* if (lbfgs_status == LBFGS_STATUS_NONE) { */
|
||||||
@ -349,11 +343,11 @@ static YAP_Bool lbfgs_release(void) {
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
/* return FALSE; */
|
/* return FALSE; */
|
||||||
}
|
}
|
||||||
|
static YAP_Bool lbfgs_defaults(void) {
|
||||||
|
|
||||||
static lbfgs_parameter_t *get_params(YAP_Term t) {
|
lbfgs_parameter_init(&parms);
|
||||||
YAP_Int ar = YAP_ArityOfFunctor(YAP_FunctorOfTerm(t));
|
return TRUE;
|
||||||
YAP_Term arg = YAP_ArgOfTerm(ar, t);
|
/* return FALSE; */
|
||||||
return (lbfgs_parameter_t *)YAP_IntOfTerm(arg);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @pred lbfgs_set_parameter(+Name,+Value,+Parameters)
|
/** @pred lbfgs_set_parameter(+Name,+Value,+Parameters)
|
||||||
@ -363,7 +357,7 @@ is not running.
|
|||||||
static YAP_Bool lbfgs_set_parameter(void) {
|
static YAP_Bool lbfgs_set_parameter(void) {
|
||||||
YAP_Term t1 = YAP_ARG1;
|
YAP_Term t1 = YAP_ARG1;
|
||||||
YAP_Term t2 = YAP_ARG2;
|
YAP_Term t2 = YAP_ARG2;
|
||||||
lbfgs_parameter_t *param = get_params(YAP_ARG3);
|
lbfgs_parameter_t *param = &parms;
|
||||||
/* if (lbfgs_status != LBFGS_STATUS_NONE && lbfgs_status !=
|
/* if (lbfgs_status != LBFGS_STATUS_NONE && lbfgs_status !=
|
||||||
* LBFGS_STATUS_INITIALIZED){ */
|
* LBFGS_STATUS_INITIALIZED){ */
|
||||||
/* printf("ERROR: Lbfgs is running right now. Please wait till it is
|
/* printf("ERROR: Lbfgs is running right now. Please wait till it is
|
||||||
@ -523,9 +517,9 @@ Get the current Value for Name
|
|||||||
static YAP_Bool lbfgs_get_parameter(void) {
|
static YAP_Bool lbfgs_get_parameter(void) {
|
||||||
YAP_Term t1 = YAP_ARG1;
|
YAP_Term t1 = YAP_ARG1;
|
||||||
YAP_Term t2 = YAP_ARG2;
|
YAP_Term t2 = YAP_ARG2;
|
||||||
lbfgs_parameter_t *param = get_params(YAP_ARG3);
|
lbfgs_parameter_t *param = &parms;
|
||||||
|
|
||||||
if (!YAP_IsAtomTerm(t1)) {
|
if (!YAP_IsAtomTerm(t1)) {
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -575,14 +569,14 @@ X_API void init_lbfgs_predicates(void) {
|
|||||||
tuser = YAP_MkAtomTerm(YAP_LookupAtom("user"));
|
tuser = YAP_MkAtomTerm(YAP_LookupAtom("user"));
|
||||||
|
|
||||||
// Initialize the parameters for the L-BFGS optimization.
|
// Initialize the parameters for the L-BFGS optimization.
|
||||||
// lbfgs_parameter_init(¶m);
|
lbfgs_parameter_init(&parms);
|
||||||
|
|
||||||
YAP_UserCPredicate("lbfgs_grab", lbfgs_grab, 2);
|
YAP_UserCPredicate("lbfgs_grab", lbfgs_grab, 2);
|
||||||
YAP_UserCPredicate("lbfgs", p_lbfgs, 5);
|
YAP_UserCPredicate("lbfgs", p_lbfgs, 5);
|
||||||
YAP_UserCPredicate("lbfgs_release", lbfgs_release, 1);
|
YAP_UserCPredicate("lbfgs_release", lbfgs_release, 1);
|
||||||
|
|
||||||
YAP_UserCPredicate("lbfgs_defaults", lbfgs_parameters, 1);
|
YAP_UserCPredicate("lbfgs_defaults", lbfgs_defaults, 0);
|
||||||
YAP_UserCPredicate("lbfgs_release_parameters", lbfgs_release_parameters, 1);
|
|
||||||
YAP_UserCPredicate("lbfgs_set_parameter", lbfgs_set_parameter, 3);
|
YAP_UserCPredicate("lbfgs_set_parameter", lbfgs_set_parameter, 2);
|
||||||
YAP_UserCPredicate("lbfgs_get_parameter", lbfgs_get_parameter, 3);
|
YAP_UserCPredicate("lbfgs_get_parameter", lbfgs_get_parameter, 2);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user