This commit is contained in:
Vitor Santos Costa 2018-09-14 11:28:24 +01:00
parent a079139060
commit f8d0703983
12 changed files with 46 additions and 18 deletions

View File

@ -91,15 +91,19 @@ static char *send_tracer_message(char *start, char *name, arity_t arity,
Quote_illegal_f | Handle_vars_f); Quote_illegal_f | Handle_vars_f);
size_t sz; size_t sz;
if (sn == NULL) { if (sn == NULL) {
sn = "<* error *>"; sn = malloc(strlen("<* error *>")+1);
strcpy((char*)sn, "<* error *>");
} }
sz = strlen(sn); sz = strlen(sn);
if (max <= sz) { if (max <= sz) {
min = sz + 1024; min = sz + 1024;
expand = true; expand = true;
free((void*)sn);
continue; continue;
} }
strcpy(s, sn); strcpy(s, sn);
free((void*)sn);
sn = NULL;
s += sz; s += sz;
max -= sz; max -= sz;
} }

View File

@ -204,8 +204,6 @@ int Yap_open_buf_write_stream(encoding_t enc, memBufSource src) {
st = GLOBAL_Stream + sno; st = GLOBAL_Stream + sno;
st->status = Output_Stream_f | InMemory_Stream_f; st->status = Output_Stream_f | InMemory_Stream_f;
if (src)
st->status |= FreeOnClose_Stream_f;
st->linepos = 0; st->linepos = 0;
st->charcount = 0; st->charcount = 0;
st->linecount = 1; st->linecount = 1;
@ -269,7 +267,7 @@ FILE *f = GLOBAL_Stream[sno].file;
memcpy(buf, s, len); memcpy(buf, s, len);
// s[fseek(GLOBAL_Stream[sno].file, 0, SEEK_END)] = '\0'; // s[fseek(GLOBAL_Stream[sno].file, 0, SEEK_END)] = '\0';
#else #else
fread(buf, sz, 1, GLOBAL_Stream[sno].file); fread(buf, len, 1, GLOBAL_Stream[sno].file);
#endif #endif
buf[len] = '\0'; buf[len] = '\0';
return buf; return buf;

View File

@ -90,7 +90,10 @@ else if (PyUnicode_Check(pVal)) {
rc = rc && PL_unify_atom_chars(t, s); rc = rc && PL_unify_atom_chars(t, s);
else else
#endif #endif
if (pyStringToString)
return MkStringTerm(s); return MkStringTerm(s);
else
return MkAtomTerm(Yap_LookupAtom(s));
} }
else if (PyByteArray_Check(pVal)) { else if (PyByteArray_Check(pVal)) {
return MkStringTerm(PyByteArray_AsString(pVal)); return MkStringTerm(PyByteArray_AsString(pVal));

View File

@ -93,6 +93,7 @@ extern PyObject *py_Sys;
#define py_Builtin PyEval_GetBuiltins() #define py_Builtin PyEval_GetBuiltins()
extern X_API bool python_in_python; extern X_API bool python_in_python;
extern bool pyStringToString;
extern bool python_release_GIL(term_t gstate); extern bool python_release_GIL(term_t gstate);
extern term_t python_acquire_GIL(void); extern term_t python_acquire_GIL(void);

View File

@ -231,6 +231,24 @@ static foreign_t assign_python(term_t exp, term_t name) {
pyErrorAndReturn(b); pyErrorAndReturn(b);
} }
static foreign_t python_string_to(term_t f) {
if (PL_is_atom(f)) {
char *s = NULL;
if (!PL_get_chars(f, &s, CVT_ALL | CVT_EXCEPTION | REP_UTF8)) {
pyErrorAndReturn(false);
}
if (!strcmp(s,"atom"))
pyStringToString = false;
if (!strcmp(s,"string"))
pyStringToString = true;
else
return false;
return true;
}
return true;
}
static foreign_t python_builtin_eval(term_t caller, term_t dict, term_t out) { static foreign_t python_builtin_eval(term_t caller, term_t dict, term_t out) {
PyErr_Clear(); PyErr_Clear();
PyObject *pI, *pArgs, *pOut; PyObject *pI, *pArgs, *pOut;
@ -759,6 +777,7 @@ install_t install_pypreds(void) {
PL_register_foreign("python_access", 3, python_access, 0); PL_register_foreign("python_access", 3, python_access, 0);
PL_register_foreign("python_threaded", 0, p_python_threaded, 0); PL_register_foreign("python_threaded", 0, p_python_threaded, 0);
PL_register_foreign("python_clear_errors", 0, python_clear_errors, 0); PL_register_foreign("python_clear_errors", 0, python_clear_errors, 0);
PL_register_foreign("python_string_to", 0, python_string_to, 1);
init_python_vfs(); init_python_vfs();
} }

View File

@ -28,6 +28,8 @@ PyObject *py_Context;
X_API PyObject *Py_f2p; X_API PyObject *Py_f2p;
bool pyStringToString;
extern X_API bool python_in_python; extern X_API bool python_in_python;
static void add_modules(void) { static void add_modules(void) {

View File

@ -28,6 +28,7 @@
array_to_python_tuple/4, array_to_python_tuple/4,
array_to_python_view/5, array_to_python_view/5,
python/2, python/2,
python_string_to/1,
acquire_GIL/0, acquire_GIL/0,
release_GIL/0, release_GIL/0,
python_threaded/0, python_threaded/0,

View File

@ -20,9 +20,11 @@ ENDIF (NOT YAP_FOUND)
) )
SET ( LBFGS_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/${LBFGS_SRC}/lib/arithmetic_ansi.h ${CMAKE_CURRENT_SOURCE_DIR}/${LBFGS_SRC}/lib/arithmetic_sse_double.h ${CMAKE_CURRENT_SOURCE_DIR}/${LBFGS_SRC}/lib/arithmetic_sse_float.h )
SET ( LBFGS_SOURCES SET ( LBFGS_SOURCES
${CMAKE_CURRENT_SOURCE_DIR}/${LBFGS_SRC}/lib/arithmetic_ansi.h ${CMAKE_CURRENT_SOURCE_DIR}/${LBFGS_SRC}/lib/arithmetic_sse_double.h ${CMAKE_CURRENT_SOURCE_DIR}/${LBFGS_SRC}/lib/arithmetic_sse_float.h ${CMAKE_CURRENT_SOURCE_DIR}/${LBFGS_SRC}/lib/lbfgs.c ${CMAKE_CURRENT_SOURCE_DIR}/yap_lbfgs.c) ${CMAKE_CURRENT_SOURCE_DIR}/${LBFGS_SRC}/lib/lbfgs.c ${CMAKE_CURRENT_SOURCE_DIR}/yap_lbfgs.c)
add_library(LBFGS add_library(LBFGS
${LBFGS_SOURCES}) ${LBFGS_SOURCES})

View File

@ -40,6 +40,7 @@ progress(FX,X,G,X_Norm,G_Norm,Step,_N,Iteration,Ls, 0) :-
demo :- demo :-
start_low_level_trace,
format('Optimizing the function f(x0) = sin(x0)~n',[]), format('Optimizing the function f(x0) = sin(x0)~n',[]),
optimizer_initialize(1,X,Status), optimizer_initialize(1,X,Status),

View File

@ -239,17 +239,15 @@ meaning.
static YAP_Bool optimizer_run(void) { static YAP_Bool optimizer_run(void) {
int ret = 0; int ret = 0;
int n = YAP_IntOfTerm(YAP_ARG1); int n = YAP_IntOfTerm(YAP_ARG1);
YAP_Term t2 = YAP_ARG2;
YAP_Int s1, s2; YAP_Int s1, s2;
lbfgsfloatval_t fx; lbfgsfloatval_t fx;
lbfgsfloatval_t *temp_x = ( lbfgsfloatval_t *) YAP_IntOfTerm(YAP_ARG2), lbfgsfloatval_t *temp_x = ( lbfgsfloatval_t *)YAP_IntOfTerm( YAP_ArgOfTerm(1, YAP_ARG2)),
*temp_ox = ( lbfgsfloatval_t *) YAP_IntOfTerm(YAP_ARG4); *temp_ox = ( lbfgsfloatval_t *) YAP_IntOfTerm(YAP_ArgOfTerm(1,YAP_ARG4));
lbfgs_parameter_t *temp_p = (lbfgs_parameter_t * ) YAP_IntOfTerm(YAP_ARG6); lbfgs_parameter_t *temp_p = (lbfgs_parameter_t * ) YAP_IntOfTerm(YAP_ARG6);
//optimizer_status = OPTIMIZER_STATUS_RUNNING;
ret = lbfgs(n, temp_x, &fx, evaluate, progress, temp_ox, temp_p); ret = lbfgs(n, temp_x, &fx, evaluate, progress, temp_ox, temp_p);
return YAP_Unify(YAP_MkIntTerm(ret), YAP_ARG5); return YAP_Unify(YAP_MkIntTerm(ret), YAP_ARG5) &&
YAP_Unify(YAP_MkFloatTerm(fx), YAP_ARG3);
} }

View File

@ -311,7 +311,7 @@ load_files(Files0,Opts) :-
( LC > 0 ( LC > 0
-> ->
'__NB_getval__'('$lf_status', OldTOpts, fail), '__NB_getval__'('$lf_status', OldTOpts, fail),
nonvar(OldTOpts), nonvar(OldTOpts), functor( OldTOpts, opt, LastOpt ),
'$lf_opt'(autoload, OldTOpts, OldAutoload), '$lf_opt'(autoload, OldTOpts, OldAutoload),
'$lf_opt'('$context_module', OldTOpts, OldContextModule) '$lf_opt'('$context_module', OldTOpts, OldContextModule)
; ;

View File

@ -257,7 +257,6 @@ location(style_check(A,LN,FileName,B ), Level , LC) -->
display_consulting( FileName, Level,style_check(A,LN,FileName,B ), LC ), display_consulting( FileName, Level,style_check(A,LN,FileName,B ), LC ),
[ '~a:~d:0 ~a ' - [FileName,LN,Level] ] . [ '~a:~d:0 ~a ' - [FileName,LN,Level] ] .
location( error(_,Info), Level, LC ) --> location( error(_,Info), Level, LC ) -->
{ '$error_descriptor'(Info, Desc) }, { '$error_descriptor'(Info, Desc) },
{ {
query_exception(prologPredFile, Desc, File), query_exception(prologPredFile, Desc, File),
@ -358,7 +357,7 @@ display_consulting( F, Level, Info, LC) -->
{ LC > 0, { LC > 0,
'$error_descriptor'(Info, Desc), '$error_descriptor'(Info, Desc),
query_exception(prologParserFile, Desc, F0), query_exception(prologParserFile, Desc, F0),
query_exception(prologarserLine, Desc, L), query_exception(prologParserLine, Desc, L),
F \= F0 F \= F0
}, !, }, !,
[ '~a:~d:0: ~a raised at:'-[F0,L,Level], nl ]. [ '~a:~d:0: ~a raised at:'-[F0,L,Level], nl ].