def METHOD_NAME(
    XYZ: ArrayLike,
    XYZ_n: ArrayLike = TVS_ILLUMINANTS_HUNTERLAB[
        "CIE 1931 2 Degree Standard Observer"
    ]["D65"].XYZ_n,
    K_ab: ArrayLike = TVS_ILLUMINANTS_HUNTERLAB[
        "CIE 1931 2 Degree Standard Observer"
    ]["D65"].K_ab,
) -> NDArrayFloat:
    """
    Convert from *CIE XYZ* tristimulus values to *Hunter L,a,b* colour scale.
    Parameters
    ----------
    XYZ
        *CIE XYZ* tristimulus values.
    XYZ_n
        Reference *illuminant* tristimulus values.
    K_ab
        Reference *illuminant* chromaticity coefficients, if ``K_ab`` is set to
        *None* it will be computed using
        :func:`colour.XYZ_to_K_ab_HunterLab1966`.
    Returns
    -------
    :class:`numpy.ndarray`
        *Hunter L,a,b* colour scale array.
    Notes
    -----
    +------------+-----------------------+-----------------+
    | **Domain** | **Scale - Reference** | **Scale - 1**   |
    +============+=======================+=================+
    | ``XYZ``    | [0, 100]              | [0, 1]          |
    +------------+-----------------------+-----------------+
    | ``XYZ_n``  | [0, 100]              | [0, 1]          |
    +------------+-----------------------+-----------------+
    +------------+-----------------------+-----------------+
    | **Range**  | **Scale - Reference** | **Scale - 1**   |
    +============+=======================+=================+
    | ``Lab``    | ``L`` : [0, 100]      | ``L`` : [0, 1]  |
    |            |                       |                 |
    |            | ``a`` : [-100, 100]   | ``a`` : [-1, 1] |
    |            |                       |                 |
    |            | ``b`` : [-100, 100]   | ``b`` : [-1, 1] |
    +------------+-----------------------+-----------------+
    References
    ----------
    :cite:`HunterLab2008b`
    Examples
    --------
    >>> XYZ = np.array([0.20654008, 0.12197225, 0.05136952]) * 100
    >>> D65 = TVS_ILLUMINANTS_HUNTERLAB["CIE 1931 2 Degree Standard Observer"][
    ...     "D65"
    ... ]
    >>> XYZ_to_Hunter_Lab(XYZ, D65.XYZ_n, D65.K_ab)  # doctest: +ELLIPSIS
    array([ 34.9245257...,  47.0618985...,  14.3861510...])
    """
    X, Y, Z = tsplit(to_domain_100(XYZ))
    X_n, Y_n, Z_n = tsplit(to_domain_100(XYZ_n))
    K_a, K_b = (
        tsplit(XYZ_to_K_ab_HunterLab1966(XYZ_n))
        if K_ab is None
        else tsplit(K_ab)
    )
    Y_Y_n = Y / Y_n
    sqrt_Y_Y_n = np.sqrt(Y_Y_n)
    L = 100 * sqrt_Y_Y_n
    a = K_a * ((X / X_n - Y_Y_n) / sqrt_Y_Y_n)
    b = K_b * ((Y_Y_n - Z / Z_n) / sqrt_Y_Y_n)
    Lab = tstack([L, a, b])
    return from_range_100(Lab)