/pyucl

python bindings for ucl

Primary LanguagePythonOtherNOASSERTION

pyucl

This is a very simple python wrapper for ucl (http://www.oberhumer.com/opensource/ucl/) using cffi. Note that it has been written for cffi 0.3, and doesn't really work hard to be efficient.

Dependencies

Before running, make sure to have ucl installed on your system.

OS package name
Fedora 39 ucl-devel
Alpine 3 ucl-dev
Debian 12 libucl-dev

Install

  python -m venv .venv
  source .venv/bin/activate

  pip install -r requirements.txt
  
  python -m pip install .

Use

  >>> from pyucl import ucl

  >>> @ucl.callback
  ... def a_callback(n0, n1, n, v):
  ...     print "CALLBACK GOT CALLED: %d %d %d" % (n0, n1, n)

  >>> string_in = "henkitsminehenkhenkhenkitsmine"
  >>> string_out = ucl.nrv2d_99_compress(string_in,
  ...                                level=10, callback=a_callback)
  CALLBACK GOT CALLED: 0 0 -1
  CALLBACK GOT CALLED: 1 0 3
  CALLBACK GOT CALLED: 30 24 4

  >>> print len(string_in), len(string_out)
  30 24

  >>> string_dec = ucl.nrv2d_decompress(string_out, len(string_in))

  >>> print string_dec == string_in
  True

  >>> string_dec = ucl.nrv2d_decompress(string_out, len(string_in) - 10)
  Traceback (most recent call last):
  ...
  RuntimeError: Decompression failed: -202 (UCL_E_OUTPUT_OVERRUN)

  >>> ucl.nrv2b_decompress(string_out, 2*len(string_in))
  Traceback (most recent call last):
  ...
  RuntimeError: Decompression failed: -203 (UCL_E_LOOKBEHIND_OVERRUN)