Skip to main content

Environment to python dictionary parser util

Project description

PyPI version Downloads Downloads Downloads

ordered_rectangles

pip install ordered-rectangles

pip install ordered-rectangles[extra]

This package is an utility purposed to:

  • view float rectangles relations (relative positions and the order) in the text format
  • change rectangles order by changing rectangles labels in the text format view file

Usual imports:

from ordered_rectangles import OrderedRectangles, RectTextViewer, read_text, read_json, write_text, write_json

Usage example:

class OrderedRectangles:
    """
    stores `(x1, y1, x2, y2)` numpy-ordered rectangles and provides an ability to
        1. show its text map which reflects the rectangles order and positions with different disretization level
        2. save/load the rectangles with/without the map to json file
        3. change the map manually to change the rectangles order easily
# How to create an object:
>>> d = OrderedRectangles([(0.1, 0.2, 0.3, 0.4), (0.1, 0.6, 0.2, 1.1)])

# How to view the map with `units` discretization level:
>>> units = 15
>>> mp = d.get_order_map(units=units); print(mp) # doctest: +NORMALIZE_WHITESPACE
    1#### 2#######
    #   # #      #
    #   # ########
    #####

# Use `show_order_map` method to simplify this step:
>>> d.show_order_map(units=units, show_order=False) # doctest: +NORMALIZE_WHITESPACE
    ##### ########
    #   # #      #
    #   # ########
    #####

# Let's try bigger example:
>>> d = OrderedRectangles(
...     [
...         (0.1, 0.2, 0.3, 0.4), (0.1, 0.6, 0.2, 1.1),
...         (0.1, 1.2, 0.3, 1.4), (0.1, 1.5, 0.25, 2.3),
...         (0.35, 0.2, 0.6, 0.5), (0.4, 0.6, 0.6, 1.4)
...     ]
... )

# `units` <= 0 means to search the best value automatically
>>> d.show_order_map(units=0)  # doctest: +NORMALIZE_WHITESPACE
    1########      2###################  3######## 4##############################
    #       #      #                  #  #       # #                             #
    #       #      #                  #  #       # #                             #
    #       #      #                  #  #       # #                             #
    #       #      ####################  #       # #                             #
    #       #                            #       # #                             #
    #       #                            #       # ###############################
    #       #                            #       #
    #########                            #########
    5############
    #           #  6##############################
    #           #  #                             #
    #           #  #                             #
    #           #  #                             #
    #           #  #                             #
    #           #  #                             #
    #           #  #                             #
    #           #  #                             #
    #           #  #                             #
    #############  ###############################

# I can swap 5th and 6th rectangles programmatically:
>>> d[5], d[6] = d[6], d[5]
>>> d.show_order_map(units=0)  # doctest: +NORMALIZE_WHITESPACE
    1########      2###################  3######## 4##############################
    #       #      #                  #  #       # #                             #
    #       #      #                  #  #       # #                             #
    #       #      #                  #  #       # #                             #
    #       #      ####################  #       # #                             #
    #       #                            #       # #                             #
    #       #                            #       # ###############################
    #       #                            #       #
    #########                            #########
    6############
    #           #  5##############################
    #           #  #                             #
    #           #  #                             #
    #           #  #                             #
    #           #  #                             #
    #           #  #                             #
    #           #  #                             #
    #           #  #                             #
    #           #  #                             #
    #############  ###############################

# The key feature is that I can change this order by changing the string map:
>>> d3 = d[3]; d4 = d[4]
>>> s = d.get_order_map(units=0).translate({ord('4'): '3', ord('3'): '4'})
>>> d.load_order_map(s)
>>> assert d[3] == d4 and d[4] == d3

# However it's not efficiet to change the rectangles order by changing the string map programmatically.
# Instead, it is supposed that u will save the map to some text file, change numbers manually and load the map from
#     the file. `load_order_map` methods supports file path as an input too.

# Finally there is a way to save and load the rectangles as JSON:
>>> tempdir = 'tmp'
>>> jsdir = os.path.join(tempdir, 'separate-jsons'); mkdir(jsdir)
>>> mapdir = os.path.join(tempdir, 'separate-maps'); mkdir(mapdir)
>>> js_file = os.path.join(jsdir, 'rects.json')
>>> map_file = os.path.join(mapdir, 'rects.txt')
>>> d.to_json(path=js_file, save_map=map_file, units=0)
>>> dct = read_json(js_file); print(str(dct).replace(os.sep, '/').replace('//', '/'))
{'rects': [[0.1, 0.2, 0.3, 0.4], [0.1, 0.6, 0.2, 1.1], [0.1, 1.5, 0.25, 2.3], [0.1, 1.2, 0.3, 1.4], [0.4, 0.6, 0.6, 1.4], [0.35, 0.2, 0.6, 0.5]], 'map': '../separate-maps/rects.txt'}

# As u can see, tha path to maps file is saved as absolute or relative to the json file.
# U can change the order in the map manually and reload rectangles

>>> write_text(map_file, read_text(map_file).translate({ord('1'): '2', ord('2'): '1'}))
>>> d2 = OrderedRectangles.from_json(js_file)
>>> assert d[1] == d2[2] and d[2] == d2[1]

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

ordered_rectangles-0.0.6.tar.gz (13.8 kB view details)

Uploaded Source

Built Distribution

ordered_rectangles-0.0.6-py3-none-any.whl (13.6 kB view details)

Uploaded Python 3

File details

Details for the file ordered_rectangles-0.0.6.tar.gz.

File metadata

  • Download URL: ordered_rectangles-0.0.6.tar.gz
  • Upload date:
  • Size: 13.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.11.6

File hashes

Hashes for ordered_rectangles-0.0.6.tar.gz
Algorithm Hash digest
SHA256 9bcbabb45fd466b2f5cc91362365f7a80d01c6b3a018ab81eb71d6d7ccf2c364
MD5 faa2312e4ee124649bf9bd849ff95524
BLAKE2b-256 61afddd6a03efa763c982025488e7f3c6380c512adae04d79bfab941930adcb2

See more details on using hashes here.

File details

Details for the file ordered_rectangles-0.0.6-py3-none-any.whl.

File metadata

File hashes

Hashes for ordered_rectangles-0.0.6-py3-none-any.whl
Algorithm Hash digest
SHA256 b2af605864cef6c363dedbde4a597cadcfe97d3e7efc94f982ee7f8eab363872
MD5 b6f9ed5feb969c71d85c18337162bb00
BLAKE2b-256 c8776fb7e1f006e5263b919596aa923c4e442e5b7614cbcd59f58790d90609e1

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