Skip to main content

baseAnything - encode/decode any integer into/from a series of symbols of a custom palette.

Project description

baseAnything

What

A library for encoding integers into a series of symbols. The symbols can be anything. And it decodes too, of course.

Testing

Run test.py.

Howto

Install it (eg pip install baseAnything), and then from baseAnything import baseX. Examples, from the doctests:

Basic use

>>> bxbinary = baseX('01')  # Instantiates a baseX object with a Base-2 aka binary string-symbol alphabet
>>> bxbinary % 7
'111'

Proof: A roundtrip

>>> bxhexadecimal = baseX('0123456789ABCDEF')  # Base-16 aka hexadecimal
>>> 9000 == int(bxhexadecimal % 9000, base=16)
True

Arbitrary symbols

One can use arbitrary symbols. Anything. ['bla', 2, object(), object()] is a valid symbol alphabet.

It may be desirable to get a symbol list back rather than a string, so that the symbol framing is kept intact — because, for instance, a symbol alphabet of ['a', 'aa'] yields ambiguity in its output when it's mashed into a string; 'aaa' has 3 possible interpretations.

The % operator yields strings when encoding an integer. The / operator makes a baseX object return the encoding as a list of symbols instead.

>>> bxfunky = baseX(['Do', 'Re', 'Mi', 'Fa', 'Sol', 'La', 'Ti'])
>>> bxfunky % 10  # Emits a warning, because the result may not be decodable!
'ReFa'
>>> bxfunky / 10  # Symbols returned as a list rather than concatenated into a string.
['Re', 'Fa']
>>> 10 == bxfunky / (bxfunky / 10)
True

Bizarre encodings

Speaking of arbitrary symbols... how about this visually compact encoding:

>>> bxbizarre = baseX(list(map(chr, range(0x0300, 0x036f))))  # unicode diacritical marks
>>> wut = 'O' + bxbizarre % 1234567890
>>> wut
'Ơ̡͎̈̎'
>>> bxbizarre / wut[1:]
1234567890

I don't like the operator overloading interface

Then use baseX.decode(input: Sequence) and baseX.encode(num: int).

Bugs

There are problems when using large numbers.

>>> base22 = baseX(list(range(22)))
>>> largenumber = (base22 / base22.alphabet)  # that's 774212873841767703847271481
>>> base22 / (base22 / largenumber) == largenumber
False  # But it should be true.

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

baseAnything-0.1.0.tar.gz (8.9 kB view details)

Uploaded Source

Built Distribution

baseAnything-0.1.0-py3-none-any.whl (10.0 kB view details)

Uploaded Python 3

File details

Details for the file baseAnything-0.1.0.tar.gz.

File metadata

  • Download URL: baseAnything-0.1.0.tar.gz
  • Upload date:
  • Size: 8.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.11.8

File hashes

Hashes for baseAnything-0.1.0.tar.gz
Algorithm Hash digest
SHA256 e50f3aed4a3dddb3957933df508effd66141709299c807ea16dab16f4c2bf562
MD5 0a3f39a54fb9f87a819c697c72aa4444
BLAKE2b-256 0630e3c3aecbae0d9d7e02f638ac15f969671119c5880528e0fdf40014e85af4

See more details on using hashes here.

File details

Details for the file baseAnything-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: baseAnything-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 10.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.11.8

File hashes

Hashes for baseAnything-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 f250fc873ccd679b69f6ceb691bd9e0e26bbcacf9cc36074d183ea8a386a158a
MD5 cd0b4d0b6758e624aa97218f1ea6159c
BLAKE2b-256 34b3a5f1025d3f456a8ff7adaf0b6ce4e3a453c7ceee83037f641a4930ba18de

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