def METHOD_NAME(
    y: ArrayLike,
    bit_depth: int = 10,
    out_normalised_code_value: bool = True,
    in_reflection: bool = True,
    constants: Structure = CONSTANTS_NLOG,
) -> NDArrayFloat:
    """
    Define the *Nikon N-Log* log encoding curve / opto-electronic transfer
    function.
    Parameters
    ----------
    y
        Reflectance :math:`y`, "y = 0.18" is equivalent to Stop 0.
    bit_depth
        Bit-depth used for conversion.
    out_normalised_code_value
        Whether the non-linear *Nikon N-Log* data :math:`x` is encoded as
        normalised code values.
    in_reflection
        Whether the light level :math`in` to a camera is reflection.
    constants
        *Nikon N-Log* constants.
    Returns
    -------
    :class:`numpy.ndarray`
        *N-Log* 10-bit equivalent code value :math:`x`.
    Notes
    -----
    +------------+-----------------------+---------------+
    | **Domain** | **Scale - Reference** | **Scale - 1** |
    +============+=======================+===============+
    | ``y``      | [0, 1]                | [0, 1]        |
    +------------+-----------------------+---------------+
    +------------+-----------------------+---------------+
    | **Range**  | **Scale - Reference** | **Scale - 1** |
    +============+=======================+===============+
    | ``x``      | [0, 1]                | [0, 1]        |
    +------------+-----------------------+---------------+
    References
    ----------
    :cite:`Nikon2018`
    Examples
    --------
    >>> log_encoding_NLog(0.18)  # doctest: +ELLIPSIS
    0.3636677...
    """
    y = to_domain_1(y)
    if not in_reflection:
        y = y * 0.9
    cut1 = constants.cut1
    a = constants.a
    b = constants.b
    c = constants.c
    d = constants.d
    x = np.where(
        y < cut1,
        a * spow(y + b, 1 / 3),
        c * np.log(y) + d,
    )
    x_cv = x if out_normalised_code_value else legal_to_full(x, bit_depth)
    return as_float(from_range_1(x_cv))