Skip to main content

Python interface for XSB

Project description


A Python - XSB bridge enabling querying XSB in your Python programs. It
features a ctypes mapping of XSB’s C-Interface as well as some higher
level convenience wrappers.

Constructive comments, patches and pull-requests are very welcome.


### High Level Wrappers (demo\

Setup XSB engine:

from pyxsb import pyxsb_start_session, pyxsb_end_session, pyxsb_command, \
pyxsb_query, XSBFunctor, XSBVariable, xsb_to_json, json_to_xsb

# in case auto-detection fails, you can pass the XSB arch dir here like so:
# pyxsb_start_session('/opt/xsb-3.8.0/config/x86_64-redhat-linux-gnu')
# to determine the location of the XSB arch dir on your machine, run this query in XSB:
# xsb_configuration:xsb_configuration(config_dir,Dir).

run a string XSB command:


run a string query:

for row in pyxsb_query('label(X, L).'):
print u"label of %s is %s" % (row[0], row[1])

queries and commands can also be constructed structurally:

for row in pyxsb_query(XSBFunctor('descend', [XSBVariable('X'), XSBVariable('Y')])):
print u"decendant of %s is %s" % (row[0], row[1])

the wrappers (XSBFunctor, XSBVariable, XSBString, XSBAtom) are the same
ones used to represent the query results. For integers, floats and lists
primitive python types are used:

for row in pyxsb_query(u'A = 1, B = 0.5, C = "hello", D = yes, E = foo(bar), F = [1.1,2.2], G = \'günter\'.'):
for i, r in enumerate(row):
print u"#%d: %-10s (type: %-20s, class: %-20s)" % (i, r, type(r), r.__class__)

the wrappers can also converted to and from JSON:

js = xsb_to_json(row)
print "json: %s" % js

row2 = json_to_xsb(js)
print "restored: %s" % str(row2)

close the session:


### XSB Low Level API (demo\

First, import xsb and init the library:

from pyxsb import pyxsb_start_session

from pyxsb import *

execute an XSB command:

c2p_functor("consult", 1, reg_term(1))
if xsb_command():
raise Exception ("Error consulting ctest")

same thing using the string interface:

if xsb_command_string("consult(basics)."):
raise Exception ("Error (string) consulting basics.")

run a query:

# Create the query p(300,X,Y) and send it.

rcode = xsb_query()

# Print out answer and retrieve next one.
while not rcode:
if not is_string(p2p_arg(reg_term(2),1)) and is_string(p2p_arg(reg_term(2),2)):
print "2nd and 3rd subfields must be atoms"
print "Answer: %d, %s(%s), %s(%s)" % ( p2c_int(p2p_arg(reg_term(1),1)),
rcode = xsb_next()

run a string query:

rcode = xsb_query_string("p(X,Y,Z).")

# Print out answer and retrieve next one.
while not rcode:
if not is_string(p2p_arg(reg_term(2),2)) and is_string(p2p_arg(reg_term(2),3)):
print "2nd and 3rd subfields must be atoms"
print "Answer: %d, %s, %s" % (xsb_var_int(1),
rcode = xsb_next()

close the connection:


Installation Notes

`py-xsb` needs the XSB dynamic library to work: First, follow the
standard XSB build instructions:

tar xfvz XSB.tar.gz
cd XSB/build

now, in order to build ``, execute this command:

[guenter@dagobert build]$ ./makexsb dynmodule


- <> [XSB]


- Python 2.7 or Python 3.6

- shared library installed and in ld’s path


My own code is Apache-2.0 licensed unless otherwise noted in the
script’s copyright headers.


- Guenter Bartsch \<<>\>

- Many improvements and bugfixes by Michael Kifer, Annie Liu, David
Warren (XSB team at Stony Brook University of New York)

Project details

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

py-xsb-0.3.4.tar.gz (11.8 kB view hashes)

Uploaded source

Built Distribution

py_xsb-0.3.4-py2.py3-none-any.whl (12.9 kB view hashes)

Uploaded py2 py3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page