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.

Filename, size & hash SHA256 hash help File type Python version Upload date
py_xsb-0.3.4-py2.py3-none-any.whl (12.9 kB) Copy SHA256 hash SHA256 Wheel py2.py3 Sep 5, 2018
py-xsb-0.3.4.tar.gz (11.8 kB) Copy SHA256 hash SHA256 Source None Sep 5, 2018

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN SignalFx SignalFx Supporter DigiCert DigiCert EV certificate StatusPage StatusPage Status page