"""EOTF（PQ / ST.2084）相关纯算法。"""

import numpy as np


def calculate_pq_curve(gray_levels):
    """计算 PQ (ST.2084) EOTF 理想曲线。

    Args:
        gray_levels: 灰阶百分比数组 (0-100)

    Returns:
        numpy.ndarray: 归一化亮度数组 (0-1)
    """
    # PQ 曲线参数（ITU-R BT.2100 标准）
    m1 = 0.1593017578125   # = 2610 / 16384
    m2 = 78.84375          # = 78.84375
    c1 = 0.8359375         # = 3424 / 4096
    c2 = 18.8515625        # = 2413 / 128
    c3 = 18.6875           # = 2392 / 128

    L_bar = []
    for gray in gray_levels:
        V = gray / 100.0

        if V <= 0:
            L_bar.append(0)
        else:
            V_pow = np.power(V, 1 / m2)
            numerator = max(V_pow - c1, 0)
            denominator = c2 - c3 * V_pow

            if denominator > 0:
                L = np.power(numerator / denominator, 1 / m1)
            else:
                L = 0

            L_bar.append(L)

    return np.array(L_bar)
