Skip to main content

Python package for performing set type operations on any layout of discrete space in any dimension.

Project description

blocksets

Python 3.11 PyPI - Version Read the Docs Codecov

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 or toggle 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.

2D Set Operations Example

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

blocksets-0.1.12.tar.gz (22.3 kB view details)

Uploaded Source

Built Distribution

blocksets-0.1.12-py3-none-any.whl (14.6 kB view details)

Uploaded Python 3

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

Hashes for blocksets-0.1.12.tar.gz
Algorithm Hash digest
SHA256 3fd4d1b20c6096d8ede6b43c5da2d649d6d270a6be5f9a360b895bbd304a5a35
MD5 be6620d02b869620f17fcdb80c278f1d
BLAKE2b-256 66c1f670dbb759742514f417281c76d59bcb4279ff89491a1b9531d05d18dcc0

See more details on using hashes here.

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

Hashes for blocksets-0.1.12-py3-none-any.whl
Algorithm Hash digest
SHA256 e42d1aabd9ef17c13e69b4b8fb2b3879406097f0a144fb4b9ab494a37f03bc82
MD5 586719ca7407636fbd55125045a8006a
BLAKE2b-256 c4ba10d2364435dc7574df02ae3f8bef1a463333cf3c02a9675d55d7a9bedfa2

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