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)
| File | Size | Uploaded | |
|---|---|---|---|
| baseAnything-0.1.0.tar.gz | 8.9 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| 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
|