# SPDX-FileCopyrightText: Copyright © 2024 Idiap Research Institute <contact@idiap.ch>
# SPDX-FileContributor: Hatef OTROSHI <hatef.otroshi@idiap.ch>
# SPDX-License-Identifier: MIT
import numpy

def find_q_levels(all_data, n_quantization_levels):
    '''
    Parametrs:
        all_data: array
        n_quantization_levels: int

    Return:
        quantization_levels: list
            quantization levels
    '''
    all_data = all_data.flatten()
    samples_per_bin = int(all_data.shape[0]/n_quantization_levels)
    edge_samples = (numpy.arange(n_quantization_levels-1) + 1 ) * samples_per_bin

    all_sorted_data = numpy.sort(all_data)
    quantization_levels = all_sorted_data[edge_samples]

    return quantization_levels


def quantize_f(f, quantization_levels):
    '''
    Parametrs:
        f: float
        quantization_levels: list

    Return:
        level: int
            quantization level for f
    '''
    level = len(quantization_levels) - 1
    for l in range(len(quantization_levels)):
        if f<quantization_levels[l]:
            level = l
            break
    return level


def quantize_vector(data, quantization_levels):
    quantized_data = []
    for i,f in enumerate(data):
        q_level_f = quantize_f(f, quantization_levels)
        quantized_data.append(q_level_f)

    return numpy.array(quantized_data, dtype='int')