def test_write_sds_to_csv_file(self): """ Tests :func:`colour.io.tabular.write_sds_to_csv_file` definition. """ colour_checker_n_ohta = os.path.join(RESOURCES_DIRECTORY, 'colorchecker_n_ohta.csv') sds = read_sds_from_csv_file(colour_checker_n_ohta) colour_checker_n_ohta_test = os.path.join(self._temporary_directory, 'colorchecker_n_ohta.csv') write_sds_to_csv_file(sds, colour_checker_n_ohta_test) sds_test = read_sds_from_csv_file(colour_checker_n_ohta_test) for key, value in sds.items(): if PY2: # Running into precision issues with Python 2.x, applying # conservative rounding. value.wavelengths = np.around(value.wavelengths, decimals=7) value.values = np.around(value.values, decimals=7) sds_test[key].wavelengths = np.around( sds_test[key].wavelengths, decimals=7) sds_test[key].values = np.around( sds_test[key].values, decimals=7) self.assertEqual(value, sds_test[key]) write_sds_to_csv_file(sds, colour_checker_n_ohta_test, fields=['1']) sds_test = read_sds_from_csv_file(colour_checker_n_ohta_test) self.assertEqual(len(sds_test), 1)
def test_write_sds_to_csv_file(self): """ Tests :func:`colour.io.tabular.write_sds_to_csv_file` definition. """ colour_checker_n_ohta = os.path.join(RESOURCES_DIRECTORY, 'colorchecker_n_ohta.csv') sds = read_sds_from_csv_file(colour_checker_n_ohta) colour_checker_n_ohta_test = os.path.join(self._temporary_directory, 'colorchecker_n_ohta.csv') write_sds_to_csv_file(sds, colour_checker_n_ohta_test) sds_test = read_sds_from_csv_file(colour_checker_n_ohta_test) for key, value in sds.items(): if PY2: # Running into precision issues with Python 2.x, applying # conservative rounding. value.wavelengths = np.around(value.wavelengths, decimals=7) value.values = np.around(value.values, decimals=7) sds_test[key].wavelengths = np.around( sds_test[key].wavelengths, decimals=7) sds_test[key].values = np.around(sds_test[key].values, decimals=7) self.assertEqual(value, sds_test[key]) write_sds_to_csv_file(sds, colour_checker_n_ohta_test, fields=['1']) sds_test = read_sds_from_csv_file(colour_checker_n_ohta_test) self.assertEqual(len(sds_test), 1)
def test_write_sds_to_csv_file(self): """Test :func:`colour.io.tabular.write_sds_to_csv_file` definition.""" colour_checker_n_ohta = os.path.join(RESOURCES_DIRECTORY, "colorchecker_n_ohta.csv") sds = read_sds_from_csv_file(colour_checker_n_ohta) colour_checker_n_ohta_test = os.path.join(self._temporary_directory, "colorchecker_n_ohta.csv") write_sds_to_csv_file(sds, colour_checker_n_ohta_test) sds_test = read_sds_from_csv_file(colour_checker_n_ohta_test) for key, value in sds.items(): self.assertEqual(value, sds_test[key])
def read_training_data_rawtoaces_v1() -> MultiSpectralDistributions: """ Read the *RAW to ACES* v1 190 patches. Returns ------- :class:`colour.MultiSpectralDistributions` *RAW to ACES* v1 190 patches. References ---------- :cite:`Dyer2017` Examples -------- >>> len(read_training_data_rawtoaces_v1().labels) 190 """ global _TRAINING_DATA_RAWTOACES_V1 if _TRAINING_DATA_RAWTOACES_V1 is not None: training_data = _TRAINING_DATA_RAWTOACES_V1 else: path = os.path.join(RESOURCES_DIRECTORY_RAWTOACES, "190_Patches.csv") training_data = sds_and_msds_to_msds( list(read_sds_from_csv_file(path).values())) _TRAINING_DATA_RAWTOACES_V1 = training_data return training_data
def test_read_sds_from_csv_file(self): """Test :func:`colour.io.tabular.read_sds_from_csv_file` definition.""" colour_checker_n_ohta = os.path.join(RESOURCES_DIRECTORY, "colorchecker_n_ohta.csv") sds = read_sds_from_csv_file(colour_checker_n_ohta) for sd in sds.values(): self.assertIsInstance(sd, SpectralDistribution) self.assertEqual( sds["1"], SpectralDistribution(COLOURCHECKER_N_OHTA_1, name="1"))
def test_read_sds_from_csv_file(self): """ Tests :func:`colour.io.tabular.read_sds_from_csv_file` definition. """ colour_checker_n_ohta = os.path.join(RESOURCES_DIRECTORY, 'colorchecker_n_ohta.csv') sds = read_sds_from_csv_file(colour_checker_n_ohta) for sd in sds.values(): self.assertIsInstance(sd, SpectralDistribution) self.assertEqual( sds['1'], SpectralDistribution(COLOURCHECKER_N_OHTA_1, name='1'))
def test_raise_exception_write_sds_to_csv_file(self): """ Test :func:`colour.io.tabular.write_sds_to_csv_file` definition raised exception. """ colour_checker_n_ohta = os.path.join(RESOURCES_DIRECTORY, "colorchecker_n_ohta.csv") sds = read_sds_from_csv_file(colour_checker_n_ohta) key = list(sds.keys())[0] sds[key] = sds[key].align(SpectralShape(400, 700, 10)) self.assertRaises(ValueError, write_sds_to_csv_file, sds, "")
"TestWhiteBalanceMultipliers", "TestBestIlluminant", "TestNormaliseIlluminant", "TestTrainingDataSdsToRGB", "TestTrainingDataSdsToXYZ", "TestOptimizationFactoryRawtoacesV1", "TestOptimizationFactoryJzazbz", "TestMatrixIdt", "TestCamera_RGB_to_ACES2065_1", ] MSDS_CANON_EOS_5DMARK_II: MultiSpectralDistributions = sds_and_msds_to_msds( list( read_sds_from_csv_file( os.path.join( RESOURCES_DIRECTORY_RAWTOACES, "CANON_EOS_5DMark_II_RGB_Sensitivities.csv", )).values())) SD_AMPAS_ISO7589_STUDIO_TUNGSTEN: SpectralDistribution = ( read_sds_from_csv_file( os.path.join(RESOURCES_DIRECTORY_RAWTOACES, "AMPAS_ISO_7589_Tungsten.csv"))["iso7589"]) class TestSpectralToAcesRelativeExposureValues(unittest.TestCase): """ Define :func:`colour.characterisation.aces_it.\ sd_to_aces_relative_exposure_values` definition unit tests methods. """ def test_spectral_to_aces_relative_exposure_values(self):
__email__ = '*****@*****.**' __status__ = 'Production' __all__ = [ 'MSDS_CANON_EOS_5DMARK_II', 'SD_AMPAS_ISO7589_STUDIO_TUNGSTEN', 'TestSpectralToAcesRelativeExposureValues', 'TestReadTrainingDataRawtoacesV1', 'TestGenerateIlluminantsRawtoacesV1', 'TestWhiteBalanceMultipliers', 'TestBestIlluminant', 'TestNormaliseIlluminant', 'TestTrainingDataSdsToRGB', 'TestTrainingDataSdsToXYZ', 'TestOptimizationFactoryRawtoacesV1', 'TestOptimizationFactoryJzAzBz', 'TestMatrixIdt' ] MSDS_CANON_EOS_5DMARK_II = sds_and_msds_to_msds( read_sds_from_csv_file( os.path.join(RESOURCES_DIRECTORY_RAWTOACES, 'CANON_EOS_5DMark_II_RGB_Sensitivities.csv')).values()) SD_AMPAS_ISO7589_STUDIO_TUNGSTEN = read_sds_from_csv_file( os.path.join(RESOURCES_DIRECTORY_RAWTOACES, 'AMPAS_ISO_7589_Tungsten.csv'))['iso7589'] class TestSpectralToAcesRelativeExposureValues(unittest.TestCase): """ Defines :func:`colour.characterisation.aces_it.\ sd_to_aces_relative_exposure_values` definition unit tests methods. """ def test_spectral_to_aces_relative_exposure_values(self): """ Tests :func:`colour.characterisation.aces_it.
def generate_illuminants_rawtoaces_v1() -> CaseInsensitiveMapping: """ Generate a series of illuminants according to *RAW to ACES* v1: - *CIE Illuminant D Series* in range [4000, 25000] kelvin degrees. - *Blackbodies* in range [1000, 3500] kelvin degrees. - A.M.P.A.S. variant of *ISO 7589 Studio Tungsten*. Returns ------- :class:`colour.utilities.CaseInsensitiveMapping` Series of illuminants. Notes ----- - This definition introduces a few differences compared to *RAW to ACES* v1: *CIE Illuminant D Series* are computed in range [4002.15, 7003.77] kelvin degrees and the :math:`C_2` change is not used in *RAW to ACES* v1. References ---------- :cite:`Dyer2017` Examples -------- >>> list(sorted(generate_illuminants_rawtoaces_v1().keys())) ['1000K Blackbody', '1500K Blackbody', '2000K Blackbody', \ '2500K Blackbody', '3000K Blackbody', '3500K Blackbody', 'D100', 'D105', \ 'D110', 'D115', 'D120', 'D125', 'D130', 'D135', 'D140', 'D145', 'D150', \ 'D155', 'D160', 'D165', 'D170', 'D175', 'D180', 'D185', 'D190', 'D195', \ 'D200', 'D205', 'D210', 'D215', 'D220', 'D225', 'D230', 'D235', 'D240', \ 'D245', 'D250', 'D40', 'D45', 'D50', 'D55', 'D60', 'D65', 'D70', 'D75', \ 'D80', 'D85', 'D90', 'D95', 'iso7589'] """ global _ILLUMINANTS_RAWTOACES_V1 if _ILLUMINANTS_RAWTOACES_V1 is not None: illuminants = _ILLUMINANTS_RAWTOACES_V1 else: illuminants = CaseInsensitiveMapping() # CIE Illuminants D Series from 4000K to 25000K. for i in np.arange(4000, 25000 + 500, 500): CCT = i * 1.4388 / 1.4380 xy = CCT_to_xy_CIE_D(CCT) sd = sd_CIE_illuminant_D_series(xy) sd.name = f"D{int(CCT / 100):d}" illuminants[sd.name] = sd.align(SPECTRAL_SHAPE_RAWTOACES) # TODO: Remove when removing the "colour.sd_blackbody" definition # warning. with suppress_warnings(colour_usage_warnings=True): # Blackbody from 1000K to 4000K. for i in np.arange(1000, 4000, 500): sd = sd_blackbody(i, SPECTRAL_SHAPE_RAWTOACES) illuminants[sd.name] = sd # A.M.P.A.S. variant of ISO 7589 Studio Tungsten. sd = read_sds_from_csv_file( os.path.join(RESOURCES_DIRECTORY_RAWTOACES, "AMPAS_ISO_7589_Tungsten.csv"))["iso7589"] illuminants.update({sd.name: sd}) _ILLUMINANTS_RAWTOACES_V1 = illuminants return illuminants