OkeyMeta's picture
Add Reframr-RFM-v2-Base release files
52da7b7 verified
import math
from .linalg import Vector, mean
def quantize_vector_absmean(
values: Vector,
*,
threshold: float = 0.5,
) -> tuple[float, list[int]]:
if not values:
return 1.0, []
scale = mean([abs(value) for value in values])
if scale == 0.0:
return 1.0, [0 for _ in values]
quantized: list[int] = []
for value in values:
normalized = value / scale
if normalized >= threshold:
quantized.append(1)
elif normalized <= -threshold:
quantized.append(-1)
else:
quantized.append(0)
return scale, quantized
def derive_ternary_mask_from_states(states: list[Vector]) -> tuple[float, list[int]]:
if not states:
return 1.0, []
feature_count = len(states[0])
feature_energy = [
mean([state[feature] * state[feature] for state in states])
for feature in range(feature_count)
]
return derive_ternary_mask_from_feature_energy(feature_energy)
def derive_ternary_mask_from_feature_energy(
feature_energy: Vector,
*,
threshold: float = 0.02,
) -> tuple[float, list[int]]:
if not feature_energy:
return 1.0, []
rms_values = [math.sqrt(max(value, 0.0)) for value in feature_energy]
scale = mean(rms_values)
if scale == 0.0:
return 1.0, [0 for _ in feature_energy]
mask = [1 if value >= threshold * scale else 0 for value in rms_values]
if not any(mask):
mask = [1 for _ in feature_energy]
return 1.0, mask
def apply_ternary_mask(values: Vector, mask: list[int], scale: float) -> Vector:
if not mask:
return values[:]
return [scale * mask[index] * values[index] for index in range(len(values))]