current status
This commit is contained in:
52
const_utils.py
Normal file
52
const_utils.py
Normal file
@@ -0,0 +1,52 @@
|
||||
from const import gray_1d
|
||||
|
||||
|
||||
def _validate_integer(value, name):
|
||||
if not isinstance(value, int):
|
||||
raise ValueError(f'{name} must be an integer')
|
||||
|
||||
|
||||
def _validate_range(value, name, min_val=None, max_val=None):
|
||||
if max_val is not None and value > max_val:
|
||||
raise ValueError(f'{name} must be \u2265 {max_val}')
|
||||
if min_val is not None and value < min_val:
|
||||
raise ValueError(f'{name} must be \u2264 {min_val}')
|
||||
|
||||
|
||||
def gray_1d_input_validation(k, symbol):
|
||||
_validate_integer(symbol, 'symbol')
|
||||
_validate_integer(k, 'k')
|
||||
_validate_range(k, 'k', min_val=1)
|
||||
_validate_range(symbol, 'symbol', min_val=0, max_val=2**k-1)
|
||||
|
||||
|
||||
def next_symbol(k, symbol):
|
||||
bits = format(symbol, 'b').zfill(k)
|
||||
b0 = int(bits[0])
|
||||
new_symbol = int(bits[1:], 2)
|
||||
return b0,new_symbol
|
||||
|
||||
|
||||
def gray_2d_input_validation(n, m, symbol):
|
||||
_validate_integer(n, 'n')
|
||||
_validate_integer(m, 'm')
|
||||
_validate_integer(symbol, 'symbol')
|
||||
_validate_range(n, 'n', min_val=0)
|
||||
min_m = 0 if n > 0 else 1
|
||||
_validate_range(m, 'm', min_val=min_m)
|
||||
_validate_range(symbol, 'symbol', min_val=0, max_val=2**(m+n)-1)
|
||||
|
||||
|
||||
def gray_2d_handle_1d(n, m, symbol):
|
||||
n,m,swapped = m,n,True if n == 0 else n,m,False # swap n and m if n is zero -> if only one > 0, it's n
|
||||
if m == 0:
|
||||
return (gray_1d(n, symbol),None) if swapped else (None,gray_1d(n, symbol))
|
||||
else:
|
||||
return None
|
||||
|
||||
|
||||
def split_symbol(n, m, symbol):
|
||||
bits = format(symbol, 'b').zfill(n+m)
|
||||
symbol_i = int(bits[:n], 2)
|
||||
symbol_q = int(bits[n:], 2)
|
||||
return symbol_i,symbol_q
|
||||
Reference in New Issue
Block a user