Skip to content

Commit 124b317

Browse files
Improve error handling in coordinate compression
Refactor coordinate compression logic to raise exceptions for missing values and out-of-range indices.
1 parent e2a78d4 commit 124b317

File tree

1 file changed

+25
-23
lines changed

1 file changed

+25
-23
lines changed

data_compression/coordinate_compression.py

Lines changed: 25 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@ class CoordinateCompressor:
1515
In addition to compression and decompression, this class maintains a mapping
1616
between original values and their compressed counterparts using two data
1717
structures: a dictionary `coordinate_map` and a list `reverse_map`:
18-
- `coordinate_map`: A dictionary that maps original values to their compressed
19-
coordinates. Keys are original values, and values are compressed coordinates.
18+
- `coordinate_map`: A dictionary that maps original values to compressed
19+
coordinates.
2020
- `reverse_map`: A list used for reverse mapping, where each index corresponds
2121
to a compressed coordinate, and the value at that index is the original value.
2222
@@ -25,9 +25,6 @@ class CoordinateCompressor:
2525
Original: 52, Compressed: 1
2626
Original: 83, Compressed: 2
2727
Original: 100, Compressed: 3
28-
29-
This mapping allows for efficient compression and decompression of values within
30-
the list.
3128
"""
3229

3330
def __init__(self, arr: list[int | float | str]) -> None:
@@ -46,15 +43,10 @@ def __init__(self, arr: list[int | float | str]) -> None:
4643
>>> cc.decompress(1)
4744
52
4845
"""
49-
50-
# A dictionary to store compressed coordinates
5146
self.coordinate_map: dict[int | float | str, int] = {}
52-
53-
# A list to store reverse mapping
5447
self.reverse_map: list[int | float | str] = [-1] * len(arr)
55-
56-
self.arr = sorted(arr) # The input list
57-
self.n = len(arr) # The length of the input list
48+
self.arr = sorted(arr)
49+
self.n = len(arr)
5850
self.compress_coordinates()
5951

6052
def compress_coordinates(self) -> None:
@@ -65,10 +57,6 @@ def compress_coordinates(self) -> None:
6557
>>> cc = CoordinateCompressor(arr)
6658
>>> cc.coordinate_map[83]
6759
2
68-
>>> cc.coordinate_map[80] # Value not in the original list
69-
Traceback (most recent call last):
70-
...
71-
KeyError: 80
7260
>>> cc.reverse_map[2]
7361
83
7462
"""
@@ -87,16 +75,23 @@ def compress(self, original: float | str) -> int:
8775
original: The value to compress.
8876
8977
Returns:
90-
The compressed integer, or -1 if not found in the original list.
78+
The compressed integer.
79+
80+
Raises:
81+
ValueError if the value is not in the original list.
9182
9283
>>> arr = [100, 10, 52, 83]
9384
>>> cc = CoordinateCompressor(arr)
9485
>>> cc.compress(100)
9586
3
96-
>>> cc.compress(7) # Value not in the original list
97-
-1
87+
>>> cc.compress(7)
88+
Traceback (most recent call last):
89+
...
90+
ValueError: Value 7 not found in coordinate map.
9891
"""
99-
return self.coordinate_map.get(original, -1)
92+
if original not in self.coordinate_map:
93+
raise ValueError(f"Value {original} not found in coordinate map.")
94+
return self.coordinate_map[original]
10095

10196
def decompress(self, num: int) -> int | float | str:
10297
"""
@@ -108,14 +103,21 @@ def decompress(self, num: int) -> int | float | str:
108103
Returns:
109104
The original value.
110105
106+
Raises:
107+
ValueError if the compressed coordinate is out of range.
108+
111109
>>> arr = [100, 10, 52, 83]
112110
>>> cc = CoordinateCompressor(arr)
113111
>>> cc.decompress(0)
114112
10
115-
>>> cc.decompress(5) # Compressed coordinate out of range
116-
-1
113+
>>> cc.decompress(5)
114+
Traceback (most recent call last):
115+
...
116+
ValueError: Index 5 out of range.
117117
"""
118-
return self.reverse_map[num] if 0 <= num < len(self.reverse_map) else -1
118+
if 0 <= num < len(self.reverse_map):
119+
return self.reverse_map[num]
120+
raise ValueError(f"Index {num} out of range.")
119121

120122

121123
if __name__ == "__main__":

0 commit comments

Comments
 (0)