def METHOD_NAME(IgPgTg: ArrayLike) -> NDArrayFloat:
    """
    Convert from :math:`I_GP_GT_G` colourspace to *CIE XYZ* tristimulus
    values.
    Parameters
    ----------
    IgPgTg
        :math:`I_GP_GT_G` colourspace array.
    Returns
    -------
    :class:`numpy.ndarray`
        *CIE XYZ* tristimulus values.
    Notes
    -----
    +------------+-----------------------+-----------------+
    | **Domain** | **Scale - Reference** | **Scale - 1**   |
    +============+=======================+=================+
    | ``IgPgTg`` | ``IG`` : [0, 1]       | ``IG`` : [0, 1] |
    |            |                       |                 |
    |            | ``PG`` : [-1, 1]      | ``PG`` : [-1, 1]|
    |            |                       |                 |
    |            | ``TG`` : [-1, 1]      | ``TG`` : [-1, 1]|
    +------------+-----------------------+-----------------+
    +------------+-----------------------+-----------------+
    | **Range**  | **Scale - Reference** | **Scale - 1**   |
    +============+=======================+=================+
    | ``XYZ``    | [0, 1]                | [0, 1]          |
    +------------+-----------------------+-----------------+
    References
    ----------
    :cite:`Hellwig2020`
    Examples
    --------
    >>> IgPgTg = np.array([0.42421258, 0.18632491, 0.10689223])
    >>> IgPgTg_to_XYZ(IgPgTg)  # doctest: +ELLIPSIS
    array([ 0.2065400...,  0.1219722...,  0.0513695...])
    """
    def LMS_p_to_LMS_callable(LMS_p: ArrayLike) -> NDArrayFloat:
        """
        Callable applying the reverse non-linearity to the :math:`LMS_p`
        colourspace array.
        """
        return cast(
            NDArrayFloat,
            spow(LMS_p, 1 / 0.427) * np.array([18.36, 21.46, 19435]),
        )
    return Iab_to_XYZ(
        IgPgTg,
        LMS_p_to_LMS_callable,
        MATRIX_IGPGTG_IGPGTG_TO_LMS_P,
        MATRIX_IGPGTG_LMS_TO_XYZ,
    )