From 93610d97445fccda7f76e19e230fcc19788e4b7b Mon Sep 17 00:00:00 2001 From: Bill Breitmayer Date: Wed, 29 May 2024 11:31:58 -0400 Subject: [PATCH] Fix type hints, validation errors Add type hints and fix leading spaces issues. --- bit_manipulation/multibit_manipulation.py | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/bit_manipulation/multibit_manipulation.py b/bit_manipulation/multibit_manipulation.py index 03a05c922..37f6365bc 100644 --- a/bit_manipulation/multibit_manipulation.py +++ b/bit_manipulation/multibit_manipulation.py @@ -14,9 +14,9 @@ All parameters must be must be int >= 0, referred to as a 'bit integer'. index:int The offset into the bit position from right, - 0b010111 -> list [1,1,1,0,1,0]. big-endian -> little-endian + 0b010111 -> list [1,1,1,0,1,0]. big-endian -> little-endian For inserts, index is the position to the right of index, - index 0 -> right of rightmost bit. + index 0 -> right of rightmost bit. For gets, sets and removes, it is the position of the bit itself. value:int @@ -24,7 +24,7 @@ All parameters must be must be int >= 0, referred to as a 'bit integer'. bitlen:int The effective mask length, spec. leading zeros - ( bitlen 4 value 1 -> 0001 ) + ( bitlen 4 value 1 -> 0001 ) The bitwise expressions may look convoluted, but basically, there are just three parts: left-hand side, value, right-hand side. @@ -68,7 +68,7 @@ bit_length = int.bit_length Anything like int(None) is going to cause a loud error. """ -def bit_get(bint: int, index: int): +def bit_get(bint: int, index: int) -> int: """Get value of bit at index in bint. >>> bit_get(15, 0) @@ -86,7 +86,7 @@ def bit_get(bint: int, index: int): return multibit_get(bint, index, 1) -def bit_set(bint: int, index: int, value: int = 1): +def bit_set(bint: int, index: int, value: int = 1) -> int: """Set bit at index to value 1 or 0, like set() or unset(). >>> bit_set(15, 0, 0) @@ -105,7 +105,7 @@ def bit_set(bint: int, index: int, value: int = 1): return multibit_set(bint, index, 1, value) -def bit_insert(bint: int, index: int, value: int = 1): +def bit_insert(bint: int, index: int, value: int = 1) -> int: """Insert bit value before index. >>> bit_insert(15, 0, 0) @@ -223,13 +223,14 @@ def multibit_remove(bint: int, index: int, bit_len: int) -> int: 2 """ - if bint < 0 or index < 0: + if bint < 0 or index < 0 or bit_len < 0: return None # error return ((bint >> index + bit_len) << index) | bint & ((1 << index) - 1) if __name__ == "__main__": + import doctest doctest.testmod()