import numpy as np
from numba import njit

class WaveformProcessor:
    """
    Обработка форм сигналов (RF, градиенты, ADC) с использованием Numba для ускорения вычислений.
    """
    def __init__(self, hw):
        self.hw = hw

    @staticmethod
    @njit(fastmath=True)
    def process_rf_numba(rf_signal: np.ndarray, max_ampl: int) -> np.ndarray:
        """Numba-оптимизированная обработка RF-сигнала: масштабирование и квантование под диапазон int8."""
        # Умножение на максимальную амплитуду и округление до ближайшего целого
        return np.round(rf_signal * max_ampl).astype(np.int8)

    @staticmethod
    @njit(fastmath=True)
    def process_gradient_numba(grad_signal: np.ndarray, max_val: int) -> np.ndarray:
        """Numba-оптимизированная обработка градиентного сигнала: масштабирование под диапазон int16."""
        return np.round(grad_signal * max_val).astype(np.int16)

    def preprocess_adc(self, adc_signal: np.ndarray) -> np.ndarray:
        """
        Подготовка данных АЦП для спектрометра:
        приведение к типу float32 и обеспечение смежности в памяти.
        """
        return np.ascontiguousarray(adc_signal, dtype=np.float32)
