Python package for performing set type operations on any layout of discrete space in any dimension.
Project description
blocksets
Python package for performing set type operations on any layout of discrete space in any dimension.
-
Block is an orthogonal clump of units/pixels (i.e. a line segment, rectangle, cuboid, hyper... you get the idea)
-
BlockSet is a set of blocks that resolves any make-up of blocks to a disjoint set in a consistent fashion
Why?
You might choose to use a BlockSet
instead of a regular python set
of
points/pixels because the resolution/granularity is sufficiently high, meaning
the number of pixels/points being modelled due to the expanse of the space
pushes the limits of the available computing power.
How?
- Create any layout (as a blockset) using a stacked list of block operations
which
add
remove
ortoggle
blocks over the current blockset state. - Perform the usual set arithmetic
union
intersection
difference
etc. on blockset objects. - Compare 2 blockset objects using the standard set comparison methods and
operators
==
<=
>=
. - Results are always consistent regardless of how they were constructed.
Installation
Requires python 3.11 or higher, there are no dependencies.
pip install blocksets
Usage
Full documentation is available (work in progress) at readthedocs
It's worth reviewing and running the example_use.py
module via
python -m blocksets.example_use
TL;DR
from blocksets import Block, BlockSet
# A block is defined by the co-ordinates of the opposite corners
big_rubik = Block((0, 0, 0), (99999, 99999, 99999))
assert big_rubik.measure == 999970000299999
# A single argument is a unit block
centre_cube = Block((49999, 49999, 49999))
assert centre_cube.measure == 1
# Create a large 3 dimensional cube with the centre missing
bs = BlockSet(3)
bs.add(big_rubik)
bs.remove(centre_cube)
assert bs.unit_count == 999970000299998
assert bs.block_count == 6
sorted_blocks = sorted(bs, key=lambda x: x.norm)
for blk in sorted_blocks:
print(f"{blk:50} {blk.measure}")
The resulting space is modelled using 6 objects (effectively tuples) instead of 999970000299998
(0, 0, 0)..(49999, 99999, 99999) 499980000249999
(49999, 0, 0)..(50000, 49999, 99999) 4999850001
(49999, 49999, 0)..(50000, 50000, 49999) 49999
(49999, 49999, 50000)..(50000, 50000, 99999) 49999
(49999, 50000, 0)..(50000, 99999, 99999) 4999850001
(50000, 0, 0)..(99999, 99999, 99999) 499980000249999
Visualisation
An example of 2D set operations on some randomly generated block sets A, B and
drawn using matplotlib
.
Contribution
At the moment it is early days so whilst the foundations are forming I am only inviting comments which can be given via github issues
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
Built Distribution
File details
Details for the file blocksets-0.1.12.tar.gz
.
File metadata
- Download URL: blocksets-0.1.12.tar.gz
- Upload date:
- Size: 22.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/5.1.0 CPython/3.12.4
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 3fd4d1b20c6096d8ede6b43c5da2d649d6d270a6be5f9a360b895bbd304a5a35 |
|
MD5 | be6620d02b869620f17fcdb80c278f1d |
|
BLAKE2b-256 | 66c1f670dbb759742514f417281c76d59bcb4279ff89491a1b9531d05d18dcc0 |
File details
Details for the file blocksets-0.1.12-py3-none-any.whl
.
File metadata
- Download URL: blocksets-0.1.12-py3-none-any.whl
- Upload date:
- Size: 14.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/5.1.0 CPython/3.12.4
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | e42d1aabd9ef17c13e69b4b8fb2b3879406097f0a144fb4b9ab494a37f03bc82 |
|
MD5 | 586719ca7407636fbd55125045a8006a |
|
BLAKE2b-256 | c4ba10d2364435dc7574df02ae3f8bef1a463333cf3c02a9675d55d7a9bedfa2 |