colour.models.rgb_colourspace — Colour 0.3.0 documentation

# Source code for colour.models.rgb_colourspace

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-

    """
    RGB Colourspace
    ===============

    Defines the :class:`RGB_Colourspace` class for the *RGB* colourspaces dataset
    from :mod:`colour.models.dataset.aces_rgb`, etc...

    See Also
    --------
    `RGB Colourspaces IPython Notebook
    <http://nbviewer.ipython.org/github/colour-science/colour-ipython/blob/master/notebooks/models/rgb.ipynb>`_  # noqa
    """

    from __future__ import division, unicode_literals

    import numpy as np

    from colour.algebra import to_ndarray

    __author__ = 'Colour Developers'
    __copyright__ = 'Copyright (C) 2013 - 2014 - Colour Developers'
    __license__ = 'New BSD License - http://opensource.org/licenses/BSD-3-Clause'
    __maintainer__ = 'Colour Developers'
    __email__ = 'colour-science@googlegroups.com'
    __status__ = 'Production'

    __all__ = ['RGB_Colourspace']

    class RGB_Colourspace(object):
        """
        Implements support for the *RGB* colourspaces dataset from
        :mod:`colour.models.dataset.aces_rgb`, etc....

        Parameters
        ----------
        name : str or unicode
            *RGB* Colourspace name.
        primaries : array_like
            *RGB* Colourspace primaries.
        whitepoint : array_like
            *RGB* Colourspace whitepoint.
        to_XYZ : array_like
            Transformation matrix from colourspace to *CIE XYZ* colourspace.
        to_RGB : array_like
            Transformation matrix from *CIE XYZ* colourspace to colourspace.
        transfer_function : object
            *RGB* Colourspace transfer function from linear to colourspace.
        inverse_transfer_function : object
            *RGB* Colourspace inverse transfer function from colourspace to linear.
        """

        def __init__(self,
                     name,
                     primaries,
                     whitepoint,
                     to_XYZ=None,
                     to_RGB=None,
                     transfer_function=None,
                     inverse_transfer_function=None):
            self.__name = None
            self.name = name
            self.__primaries = None
            self.primaries = primaries
            self.__whitepoint = None
            self.whitepoint = whitepoint
            self.__to_XYZ = None
            self.to_XYZ = to_XYZ
            self.__to_RGB = None
            self.to_RGB = to_RGB
            self.__transfer_function = None
            self.transfer_function = transfer_function
            self.__inverse_transfer_function = None
            self.inverse_transfer_function = inverse_transfer_function

        @property
        def name(self):
            """
            Property for **self.__name** private attribute.

            Returns
            -------
            str or unicode
                self.__name.
            """

            return self.__name

        @name.setter
        def name(self, value):
            """
            Setter for **self.__name** private attribute.

            Parameters
            ----------
            value : str or unicode
                Attribute value.
            """

            if value is not None:
                assert type(value) in (str, unicode), (
                    ('"{0}" attribute: "{1}" type is not '
                     '"str" or "unicode"!').format('name', value))
            self.__name = value

        @property
        def primaries(self):
            """
            Property for **self.__primaries** private attribute.

            Returns
            -------
            array_like, (3, 2)
                self.__primaries.
            """

            return self.__primaries

        @primaries.setter
        def primaries(self, value):
            """
            Setter for **self.__primaries** private attribute.

            Parameters
            ----------
            value : array_like, (3, 2)
                Attribute value.
            """

            if value is not None:
                value = to_ndarray(value)
            self.__primaries = value

        @property
        def whitepoint(self):
            """
            Property for **self.__whitepoint** private attribute.

            Returns
            -------
            array_like
                self.__whitepoint.
            """

            return self.__whitepoint

        @whitepoint.setter
        def whitepoint(self, value):
            """
            Setter for **self.__whitepoint** private attribute.

            Parameters
            ----------
            value : array_like
                Attribute value.
            """

            if value is not None:
                assert type(value) in (tuple, list, np.ndarray, np.matrix), (
                    ('"{0}" attribute: "{1}" type is not "tuple", "list", '
                     '"ndarray" or "matrix"!').format('whitepoint', value))
            self.__whitepoint = value

        @property
        def to_XYZ(self):
            """
            Property for **self.__to_XYZ** private attribute.

            Returns
            -------
            array_like, (3, 3)
                self.__to_XYZ.
            """

            return self.__to_XYZ

        @to_XYZ.setter
        def to_XYZ(self, value):
            """
            Setter for **self.__to_XYZ** private attribute.

            Parameters
            ----------
            value : array_like
                Attribute value.
            """

            if value is not None:
                value = to_ndarray(value)
            self.__to_XYZ = value

        @property
        def to_RGB(self):
            """
            Property for **self.__to_RGB** private attribute.

            Returns
            -------
            array_like, (3, 3)
                self.__to_RGB.
            """

            return self.__to_RGB

        @to_RGB.setter
        def to_RGB(self, value):
            """
            Setter for **self.__to_RGB** private attribute.

            Parameters
            ----------
            value : array_like
                Attribute value.
            """

            if value is not None:
                value = to_ndarray(value)
            self.__to_RGB = value

        @property
        def transfer_function(self):
            """
            Property for **self.__transfer_function** private attribute.

            Returns
            -------
            object
                self.__transfer_function.
            """

            return self.__transfer_function

        @transfer_function.setter
        def transfer_function(self, value):
            """
            Setter for **self.__transfer_function** private attribute.

            Parameters
            ----------
            value : object
                Attribute value.
            """

            if value is not None:
                assert hasattr(value, '__call__'), (
                    '"{0}" attribute: "{1}" is not callable!'.format(
                        'transfer_function', value))
            self.__transfer_function = value

        @property
        def inverse_transfer_function(self):
            """
            Property for **self.__inverse_transfer_function** private attribute.

            Returns
            -------
            object
                self.__inverse_transfer_function.
            """

            return self.__inverse_transfer_function

        @inverse_transfer_function.setter
        def inverse_transfer_function(self, value):
            """
            Setter for **self.__inverse_transfer_function** private attribute.

            Parameters
            ----------
            value : object
                Attribute value.
            """

            if value is not None:
                assert hasattr(value, '__call__'), (
                    '"{0}" attribute: "{1}" is not callable!'.format(
                        'inverse_transfer_function', value))
            self.__inverse_transfer_function = value