new version

This commit is contained in:
Vitor Santos Costa 2016-08-18 02:13:55 -05:00
parent 670eacc823
commit b27ab0811b
8 changed files with 58 additions and 46 deletions

View File

@ -68,4 +68,6 @@ add_custom_target ( YAPex ALL
install(CODE "execute_process(COMMAND ${PYTHON_EXECUTABLE} ${SETUP_PY} install -f
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})")
add_subdirectory(yap_kernel)
endif (PYTHONLIBS_FOUND)

View File

@ -501,6 +501,7 @@ static long get_len_of_range(long lo, long hi, long step) {
return n;
}
#if PY_MAJOR_VERSION >= 3
static PyStructSequence_Field pnull[] = {
{"A1", NULL}, {"A2", NULL}, {"A3", NULL}, {"A4", NULL},
{"A5", NULL}, {"A6", NULL}, {"A7", NULL}, {"A8", NULL},
@ -688,6 +689,8 @@ term_t tleft = PL_new_term_ref();
return o;
}
#endif
static PyObject *bip_range(term_t t) {
long ilow = 0, ihigh = 0, istep = 1;
long bign;
@ -948,12 +951,12 @@ PyObject *compound_to_pytree(term_t t, functor_t fun) {
// this should never happen
return term_to_python( t, false);
} else {
#if PY_MAJOR_VERSION >= 3
const char *s;
if (!(s = PL_atom_chars(name)))
return NULL;
return term_to_nametuple(s, arity, t);
}
#if 0
#else
PyObject *c, *o1;
o = PyTuple_New(arity);
tleft = PL_new_term_ref();
@ -975,6 +978,7 @@ PyObject *compound_to_pytree(term_t t, functor_t fun) {
return o1;
#endif
}
}
PyObject *compound_to_pyeval(term_t t, functor_t fun) {
if (fun == FUNCTOR_dollar1) {

View File

@ -594,7 +594,6 @@ static foreign_t python_run_script(term_t cmd, term_t fun) {
Py_DECREF(pModule);
} else {
PyErr_Print();
fprintf(stderr, "Failed to load \"%s\"\n", s);
return false;
}
return true;
@ -620,33 +619,35 @@ static foreign_t python_export(term_t t, term_t pl) {
}
static int python_import(term_t mname, term_t mod) {
char *s;
size_t len;
PyObject *pName, *pModule;
if (PL_is_list(mname)) {
char *s2;
char str[256];
term_t arg = PL_new_term_ref();
if (!PL_get_arg(1, mname, arg) || !PL_get_atom_chars(arg, &s) ||
!PL_get_arg(2, mname, mname) || !PL_get_arg(1, mname, arg) ||
!PL_get_atom_chars(arg, &s2))
return FALSE;
strcpy(str, s);
strcat(str, ".");
strcat(str, s2);
s = str;
} else if (!PL_get_nchars(mname, &len, &s, CVT_ALL | CVT_EXCEPTION)) {
return FALSE;
char s0[MAXPATHLEN], *s = s0;
while (true) {
size_t len;
len = (MAXPATHLEN - 1) - (s - s0);
if (PL_is_pair(mname)) {
char *sa;
if (!PL_get_arg(1, mname, arg) || !PL_get_atom_chars(arg, &sa) ||
!PL_get_arg(2, mname, mname))
return false;
s = stpcpy(s, sa);
*s++ = '.';
} else if (!PL_get_nchars(mname, &len, &s,
CVT_ALL | CVT_EXCEPTION | ENC_ISO_UTF8)) {
return false;
} else {
break;
}
}
#if PY_MAJOR_VERSION < 3
pName = PyString_FromString(s);
pName = PyString_FromString(s0);
#else
printf("Module=%s\n", s);
pName = PyUnicode_FromString(s);
pName = PyUnicode_FromString(s0);
#endif
if (pName == NULL) {
return FALSE;
return false;
}
pModule = PyImport_Import(pName);
Py_DECREF(pName);

View File

@ -7,6 +7,7 @@
#undef HAVE_STATa
#endif
#include <assert.h>
#define EXTRA_MESSSAGES 1
//@{

View File

@ -29,8 +29,8 @@
python/2,
(:=)/2,
(:=)/1,
(<-)/2,
(<-)/1,
% (<-)/2,
% (<-)/1,
op(100,fy,$),
op(950,fy,:=),
op(950,yfx,:=),
@ -110,6 +110,7 @@ Data types are
:- use_module(library(charsio)).
:- dynamic python_mref_cache/2, python_obj_cache/2.
:= import( F ) :- python_import(F).
:= F :- python(F,_).
V := F :- var(V), !, python(F,V0),
@ -426,4 +427,3 @@ python_assign_field(C1.E, Obj) :-
python_assign_field(O1, E, Obj ).
:- initialization( use_foreign_library(foreign(libpython), init_python), now ).

View File

@ -41,7 +41,7 @@ if svem_flag in sys.argv:
setup(name='yap_kernel',
version='0.0.1',
package_dir = {'': '${CMAKE_SOURCE_DIR}/packages/python' },
package_dir = {'': '${CMAKE_SOURCE_DIR}/packages/python/yap_kernel' },
description='A simple YAP kernel for Jupyter/IPython',
long_description="A simple YAP kernel for Jupyter/IPython, based on MetaKernel",
url="https://github.com/vscosta/yap-6.3",

View File

@ -50,6 +50,7 @@ class MetaKernelyap(MetaKernel):
self.engine = yap.YAPEngine()
self.q = None
self.engine.query("load_files(library(python), [])").command()
self.engine.query("load_files(library(jupyter), [])").command()
banner = "YAP {0} Kernel".format(self.engine.version())
self.olines = banner
finally:
@ -66,13 +67,13 @@ class MetaKernelyap(MetaKernel):
if not self.q:
self.q = self.engine.query(s)
if self.q.next():
vs = self.q.namedVarsCopy()
myvs = self.q.namedVarsCopy()
wrote = False
if vs:
if myvs:
i = 0
for eq in vs:
name = eq[0]
bind = eq[1]
for peq in myvs:
name = peq[0]
bind = peq[1]
if bind.isVar():
var = yap.YAPAtom('$VAR')
f = yap.YAPFunctor(var, 1)
@ -158,6 +159,8 @@ class MetaKernelyap(MetaKernel):
raise
def do_complete(self, code, cursor_pos):
print(code)
print(cursor_pos)
eprint( code, " -- ", str(cursor_pos ) )
# code = code[:cursor_pos]
# default = {'matches': [], 'cursor_start': 0,
@ -177,7 +180,8 @@ class MetaKernelyap(MetaKernel):
# if token[0] == '$':
# # complete variables
# cmd = 'compgen -A arrayvar -A export -A variable %s' % token[1:] # strip leading $
# cmd = 'compgen -A arrayvar -A export \
# -A variable %s' % token[1:] # strip leading $
# output = self.bashwrapper.run_command(cmd).rstrip()
# completions = set(output.split())
# # append matches including leading $
@ -196,9 +200,6 @@ class MetaKernelyap(MetaKernel):
# 'cursor_end': cursor_pos, 'metadata': dict(),
# 'status': 'ok'}
def repr(self, data):
return repr(data)

View File

@ -1,7 +1,10 @@
import yap
import sys
# this class is not being used
# we rely on namedtuples instead.
class T(tuple):
"""Represents a non-interned Prolog atom"""