Skip to main content

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.

Metadata

Release files for baseAnything 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for baseAnything 0.1.0
File Size Uploaded
baseAnything-0.1.0.tar.gz 8.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for baseAnything 0.1.0
File Interpreter ABI Platform
baseAnything-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 18.9 kB

Release files / baseAnything-0.1.0.tar.gz

Download URL baseAnything-0.1.0.tar.gz
Size 8.9 kB
Tags Source
SHA-256 checksum
How to use checksums
e50f3aed4a3dddb3957933df508effd66141709299c807ea16dab16f4c2bf562
BLAKE2b-256 checksum
How to use checksums
0630e3c3aecbae0d9d7e02f638ac15f969671119c5880528e0fdf40014e85af4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.0.0 CPython/3.11.8

Release files / baseAnything-0.1.0-py3-none-any.whl

Download URL baseAnything-0.1.0-py3-none-any.whl
Size 10.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
f250fc873ccd679b69f6ceb691bd9e0e26bbcacf9cc36074d183ea8a386a158a
BLAKE2b-256 checksum
How to use checksums
34b3a5f1025d3f456a8ff7adaf0b6ce4e3a453c7ceee83037f641a4930ba18de
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.0.0 CPython/3.11.8

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page