Skip to main content

Python interface for XSB

Project description

py-xsb
======

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.

Examples
--------

### High Level Wrappers (demo\_highlevel.py)

Setup XSB engine:

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

pyxsb_start_session()
# 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:

pyxsb_command('consult(ft).')

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:

pyxsb_end_session()

### XSB Low Level API (demo\_lowlevel.py)

First, import xsb and init the library:

from pyxsb import pyxsb_start_session
pyxsb_start_session()

from pyxsb import *

execute an XSB command:

c2p_functor("consult", 1, reg_term(1))
c2p_string("ctest",p2p_arg(reg_term(1),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.
c2p_functor("p",3,reg_term(1))
c2p_int(300,p2p_arg(reg_term(1),1))

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"
else:
print "Answer: %d, %s(%s), %s(%s)" % ( p2c_int(p2p_arg(reg_term(1),1)),
p2c_string(p2p_arg(reg_term(1),2)),
xsb_var_string(1),
p2c_string(p2p_arg(reg_term(1),3)),
xsb_var_string(2))
rcode = xsb_next()

run a string query:

xsb_make_vars(3)
xsb_set_var_int(300,1)
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"
else:
print "Answer: %d, %s, %s" % (xsb_var_int(1),
xsb_var_string(2),
xsb_var_string(3))
rcode = xsb_next()

close the connection:

pyxsb_end_session()

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
./configure
./makexsb

now, in order to build `libxsb.so`, execute this command:

[guenter@dagobert build]$ ./makexsb dynmodule

Links
-----

- <http://xsb.sourceforge.net/> [XSB]

Requirements
------------

- Python 2.7 or Python 3.6

- libxsb.so shared library installed and in ld’s path

License
-------

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

Authors
-------

- Guenter Bartsch \<<guenter@zamia.org>\>

- 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-1.0.0.tar.gz (11.8 kB view details)

Uploaded Source

Built Distribution

py_xsb-1.0.0-py2.py3-none-any.whl (12.9 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file py-xsb-1.0.0.tar.gz.

File metadata

  • Download URL: py-xsb-1.0.0.tar.gz
  • Upload date:
  • Size: 11.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.11.0 pkginfo/1.4.2 requests/2.6.0 setuptools/2.0 requests-toolbelt/0.8.0 tqdm/4.25.0 CPython/2.7.5

File hashes

Hashes for py-xsb-1.0.0.tar.gz
Algorithm Hash digest
SHA256 f6ead82af483a32405f40d7851d0809c473154419e6d6db85fbb0b55c7f672d9
MD5 3013bfb0cb4057883a7b741b6a9a7477
BLAKE2b-256 613e9bf85ae615fa90892e6f2629ea63abfcb19b615ac7431f579d759349572d

See more details on using hashes here.

File details

Details for the file py_xsb-1.0.0-py2.py3-none-any.whl.

File metadata

  • Download URL: py_xsb-1.0.0-py2.py3-none-any.whl
  • Upload date:
  • Size: 12.9 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.11.0 pkginfo/1.4.2 requests/2.6.0 setuptools/2.0 requests-toolbelt/0.8.0 tqdm/4.25.0 CPython/2.7.5

File hashes

Hashes for py_xsb-1.0.0-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 4dd349cc662ad13a06bff9dbf55730acbea2d5001af612835c1107f738478fad
MD5 667557d80964d0350e350f3b2e42bfe1
BLAKE2b-256 537eeebe0939c304f8a2430e323d03f3563540ca9f4eb00749bd064c5ea24293

See more details on using hashes here.

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