Source code for colour.volume.pointer_gamut

"""
Pointer's Gamut Volume Computations
===================================

Define the objects related to *Pointer's Gamut* volume computations.
"""

from __future__ import annotations

from colour.constants import EPSILON
from colour.hints import ArrayLike, NDArrayFloat
from colour.models import LCHab_to_Lab  # pyright: ignore
from colour.models import (
    CCS_ILLUMINANT_POINTER_GAMUT,
    DATA_POINTER_GAMUT_VOLUME,
    Lab_to_XYZ,
)
from colour.volume import is_within_mesh_volume

__author__ = "Colour Developers"
__copyright__ = "Copyright 2013 Colour Developers"
__license__ = "BSD-3-Clause - https://opensource.org/licenses/BSD-3-Clause"
__maintainer__ = "Colour Developers"
__email__ = "colour-developers@colour-science.org"
__status__ = "Production"

__all__ = [
    "is_within_pointer_gamut",
]


[docs] def is_within_pointer_gamut( XYZ: ArrayLike, tolerance: float = 100 * EPSILON ) -> NDArrayFloat: """ Return whether given *CIE XYZ* tristimulus values are within Pointer's Gamut volume. Parameters ---------- XYZ *CIE XYZ* tristimulus values. tolerance Tolerance allowed in the inside-triangle check. Returns ------- :class:`numpy.ndarray` Whether given *CIE XYZ* tristimulus values are within Pointer's Gamut volume. Notes ----- +------------+-----------------------+---------------+ | **Domain** | **Scale - Reference** | **Scale - 1** | +============+=======================+===============+ | ``XYZ`` | [0, 1] | [0, 1] | +------------+-----------------------+---------------+ Examples -------- >>> import numpy as np >>> is_within_pointer_gamut(np.array([0.3205, 0.4131, 0.5100])) array(True, dtype=bool) >>> a = np.array([[0.3205, 0.4131, 0.5100], [0.0005, 0.0031, 0.0010]]) >>> is_within_pointer_gamut(a) array([ True, False], dtype=bool) """ XYZ_p = Lab_to_XYZ( LCHab_to_Lab(DATA_POINTER_GAMUT_VOLUME), CCS_ILLUMINANT_POINTER_GAMUT ) return is_within_mesh_volume(XYZ, XYZ_p, tolerance)