data_compression.coordinate_compression

Assumption:
  • The values to compress are assumed to be comparable, values can be sorted and compared with ‘<’ and ‘>’ operators.

Attributes

arr

Classes

CoordinateCompressor

A class for coordinate compression.

Module Contents

class data_compression.coordinate_compression.CoordinateCompressor(arr: list[int | float | str])

A class for coordinate compression.

This class allows you to compress and decompress a list of values.

Mapping: In addition to compression and decompression, this class maintains a mapping between original values and their compressed counterparts using two data structures: a dictionary coordinate_map and a list reverse_map: - coordinate_map: A dictionary that maps original values to their compressed

coordinates. Keys are original values, and values are compressed coordinates.

  • reverse_map: A list used for reverse mapping, where each index corresponds to a compressed coordinate, and the value at that index is the original value.

Example of mapping: Original: 10, Compressed: 0 Original: 52, Compressed: 1 Original: 83, Compressed: 2 Original: 100, Compressed: 3

This mapping allows for efficient compression and decompression of values within the list.

compress(original: float | str) int

Compress a single value.

Args: original: The value to compress.

Returns: The compressed integer, or -1 if not found in the original list.

>>> arr = [100, 10, 52, 83]
>>> cc = CoordinateCompressor(arr)
>>> cc.compress(100)
3
>>> cc.compress(7)  # Value not in the original list
-1
compress_coordinates() None

Compress the coordinates in the input list.

>>> arr = [100, 10, 52, 83]
>>> cc = CoordinateCompressor(arr)
>>> cc.coordinate_map[83]
2
>>> cc.coordinate_map[80]  # Value not in the original list
Traceback (most recent call last):
    ...
KeyError: 80
>>> cc.reverse_map[2]
83
decompress(num: int) int | float | str

Decompress a single integer.

Args: num: The compressed integer to decompress.

Returns: The original value.

>>> arr = [100, 10, 52, 83]
>>> cc = CoordinateCompressor(arr)
>>> cc.decompress(0)
10
>>> cc.decompress(5)  # Compressed coordinate out of range
-1
arr
coordinate_map: dict[int | float | str, int]
n
reverse_map: list[int | float | str]
data_compression.coordinate_compression.arr: list[int | float | str] = [100, 10, 52, 83]