def test_n_dimensional_substrate_concentration_MichealisMenten(self): """ Tests :func:`colour.biochemistry.michaelis_menten.\ substrate_concentration_MichealisMenten` definition n-dimensional arrays support. """ S = 1 / 3 V_max = 0.5 K_m = 0.25 v = substrate_concentration_MichealisMenten(S, V_max, K_m) S = np.tile(S, (6, 1)) v = np.tile(v, (6, 1)) np.testing.assert_almost_equal( substrate_concentration_MichealisMenten(S, V_max, K_m), v, decimal=7) V_max = np.tile(V_max, (6, 1)) K_m = np.tile(K_m, (6, 1)) np.testing.assert_almost_equal( substrate_concentration_MichealisMenten(S, V_max, K_m), v, decimal=7) S = np.reshape(S, (2, 3, 1)) V_max = np.reshape(V_max, (2, 3, 1)) K_m = np.reshape(K_m, (2, 3, 1)) v = np.reshape(v, (2, 3, 1)) np.testing.assert_almost_equal( substrate_concentration_MichealisMenten(S, V_max, K_m), v, decimal=7)
def test_n_dimensional_substrate_concentration_MichealisMenten(self): """ Tests :func:`colour.biochemistry.michaelis_menten.\ substrate_concentration_MichealisMenten` definition n-dimensional arrays support. """ S = 1 / 3 V_max = 0.5 K_m = 0.25 v = substrate_concentration_MichealisMenten(S, V_max, K_m) S = np.tile(S, (6, 1)) v = np.tile(v, (6, 1)) np.testing.assert_almost_equal(substrate_concentration_MichealisMenten( S, V_max, K_m), v, decimal=7) V_max = np.tile(V_max, (6, 1)) K_m = np.tile(K_m, (6, 1)) np.testing.assert_almost_equal(substrate_concentration_MichealisMenten( S, V_max, K_m), v, decimal=7) S = np.reshape(S, (2, 3, 1)) V_max = np.reshape(V_max, (2, 3, 1)) K_m = np.reshape(K_m, (2, 3, 1)) v = np.reshape(v, (2, 3, 1)) np.testing.assert_almost_equal(substrate_concentration_MichealisMenten( S, V_max, K_m), v, decimal=7)
def test_nan_substrate_concentration_MichealisMenten(self): """ Tests :func:`colour.biochemistry.michaelis_menten.\ substrate_concentration_MichealisMenten` definition nan support. """ cases = [-1.0, 0.0, 1.0, -np.inf, np.inf, np.nan] cases = set(permutations(cases * 3, r=3)) for case in cases: s = np.array(case) V_max = np.array(case) K_m = np.array(case) substrate_concentration_MichealisMenten(s, V_max, K_m)
def luminance_Fairchild2010(L_hdr, epsilon=1.836): """ Computes *luminance* :math:`Y` of given *Lightness* :math:`L_{hdr}` using *Fairchild and Wyble (2010)* method according to *Michealis-Menten* kinetics. Parameters ---------- L_hdr : array_like *Lightness* :math:`L_{hdr}`. epsilon : numeric or array_like, optional :math:`\\epsilon` exponent. Returns ------- array_like *luminance* :math:`Y`. Warning ------- The output range of that definition is non standard! Notes ----- +------------+-----------------------+---------------+ | **Domain** | **Scale - Reference** | **Scale - 1** | +============+=======================+===============+ | ``L_hdr`` | [0, 100] | [0, 1] | +------------+-----------------------+---------------+ +------------+-----------------------+---------------+ | **Range** | **Scale - Reference** | **Scale - 1** | +============+=======================+===============+ | ``Y`` | [0, 1] | [0, 1] | +------------+-----------------------+---------------+ References ---------- :cite:`Fairchild2010` Examples -------- >>> luminance_Fairchild2010(31.996390226262736, 1.836) ... # doctest: +ELLIPSIS 0.1219722... """ L_hdr = to_domain_100(L_hdr) Y = np.exp( np.log( substrate_concentration_MichealisMenten(L_hdr - 0.02, 100, 0.184** epsilon)) / epsilon) return from_range_1(Y)
def luminance_Fairchild2010(L_hdr, epsilon=1.836): """ Computes *luminance* :math:`Y` of given *Lightness* :math:`L_{hdr}` using *Fairchild and Wyble (2010)* method according to *Michealis-Menten* kinetics. Parameters ---------- L_hdr : array_like *Lightness* :math:`L_{hdr}`. epsilon : numeric or array_like, optional :math:`\\epsilon` exponent. Returns ------- array_like *luminance* :math:`Y`. Warning ------- The output range of that definition is non standard! Notes ----- +------------+-----------------------+---------------+ | **Domain** | **Scale - Reference** | **Scale - 1** | +============+=======================+===============+ | ``L_hdr`` | [0, 100] | [0, 1] | +------------+-----------------------+---------------+ +------------+-----------------------+---------------+ | **Range** | **Scale - Reference** | **Scale - 1** | +============+=======================+===============+ | ``Y`` | [0, 1] | [0, 1] | +------------+-----------------------+---------------+ References ---------- :cite:`Fairchild2010` Examples -------- >>> luminance_Fairchild2010(31.996390226262736, 1.836) ... # doctest: +ELLIPSIS 0.1219722... """ L_hdr = to_domain_100(L_hdr) Y = np.exp( np.log( substrate_concentration_MichealisMenten(L_hdr - 0.02, 100, 0.184 ** epsilon)) / epsilon) return from_range_1(Y)
def luminance_Fairchild2011(L_hdr, epsilon=0.710, method='hdr-CIELAB'): """ Computes *luminance* :math:`Y` of given *Lightness* :math:`L_{hdr}` using *Fairchild and Chen (2011)* method accordingly to *Michealis-Menten* kinetics. Parameters ---------- L_hdr : array_like *Lightness* :math:`L_{hdr}`. epsilon : numeric or array_like, optional :math:`\epsilon` exponent. method : unicode, optional **{'hdr-CIELAB', 'hdr-IPT'}**, *Lightness* :math:`L_{hdr}` computation method. Returns ------- array_like *luminance* :math:`Y`. Warning ------- The output range of that definition is non standard! Notes ----- - Output *luminance* :math:`Y` is in range [0, math:`\infty`]. References ---------- - :cite:`Fairchild2011` Examples -------- >>> luminance_Fairchild2011(26.459509817572265) # doctest: +ELLIPSIS 0.1007999... >>> luminance_Fairchild2011(26.352467267703549, method='hdr-IPT') ... # doctest: +ELLIPSIS 0.1007999... """ L_hdr = np.asarray(L_hdr) if method.lower() == 'hdr-cielab': maximum_perception = 247 else: maximum_perception = 246 Y = np.exp( np.log( substrate_concentration_MichealisMenten( L_hdr - 0.02, maximum_perception, 2**epsilon)) / epsilon) return Y
def test_substrate_concentration_MichealisMenten(self): """ Tests :func:`colour.biochemistry.michaelis_menten.\ substrate_concentration_MichealisMenten` definition. """ self.assertAlmostEqual(substrate_concentration_MichealisMenten( 0.25, 0.5, 0.25), 0.250000000000000, places=7) self.assertAlmostEqual(substrate_concentration_MichealisMenten( 1 / 3, 0.5, 0.25), 0.500000000000000, places=7) self.assertAlmostEqual(substrate_concentration_MichealisMenten( 0.4875, 0.75, 0.35), 0.650000000000000, places=7)
def test_substrate_concentration_MichealisMenten(self): """ Tests :func:`colour.biochemistry.michaelis_menten.\ substrate_concentration_MichealisMenten` definition. """ self.assertAlmostEqual( substrate_concentration_MichealisMenten(0.25, 0.5, 0.25), 0.250000000000000, places=7) self.assertAlmostEqual( substrate_concentration_MichealisMenten(1 / 3, 0.5, 0.25), 0.500000000000000, places=7) self.assertAlmostEqual( substrate_concentration_MichealisMenten(0.4875, 0.75, 0.35), 0.650000000000000, places=7)
def luminance_Fairchild2010(L_hdr, epsilon=2): """ Computes *luminance* :math:`Y` of given *Lightness* :math:`L_{hdr}` using *Fairchild and Wyble (2010)* method accordingly to *Michealis-Menten* kinetics. Parameters ---------- L_hdr : array_like *Lightness* :math:`L_{hdr}`. epsilon : numeric or array_like, optional :math:`\epsilon` exponent. Returns ------- array_like *luminance* :math:`Y`. Warning ------- The output range of that definition is non standard! Notes ----- - Output *luminance* :math:`Y` is in range [0, math:`\infty`]. References ---------- .. [4] Fairchild, M. D., & Wyble, D. R. (2010). hdr-CIELAB and hdr-IPT: Simple Models for Describing the Color of High-Dynamic-Range and Wide-Color-Gamut Images. In Proc. of Color and Imaging Conference (pp. 322–326). ISBN:9781629932156 Examples -------- >>> luminance_Fairchild2010( ... 24.902290269546651, 1.836) # doctest: +ELLIPSIS 0.1007999... """ L_hdr = np.asarray(L_hdr) Y = np.exp( np.log( substrate_concentration_MichealisMenten(L_hdr - 0.02, 100, 0.184** epsilon)) / epsilon) return Y
def luminance_Fairchild2010(L_hdr, epsilon=1.836): """ Computes *luminance* :math:`Y` of given *Lightness* :math:`L_{hdr}` using *Fairchild and Wyble (2010)* method according to *Michealis-Menten* kinetics. Parameters ---------- L_hdr : array_like *Lightness* :math:`L_{hdr}`. epsilon : numeric or array_like, optional :math:`\epsilon` exponent. Returns ------- array_like *luminance* :math:`Y`. Warning ------- The output range of that definition is non standard! Notes ----- - Output *luminance* :math:`Y` is in range [0, math:`\infty`]. References ---------- - :cite:`Fairchild2010` Examples -------- >>> luminance_Fairchild2010(24.902290269546651, 1.836) ... # doctest: +ELLIPSIS 0.1007999... """ L_hdr = np.asarray(L_hdr) Y = np.exp( np.log( substrate_concentration_MichealisMenten(L_hdr - 0.02, 100, 0.184** epsilon)) / epsilon) return Y
def luminance_Fairchild2011(L_hdr, epsilon=0.474, method='hdr-CIELAB'): """ Computes *luminance* :math:`Y` of given *Lightness* :math:`L_{hdr}` using *Fairchild and Chen (2011)* method according to *Michealis-Menten* kinetics. Parameters ---------- L_hdr : array_like *Lightness* :math:`L_{hdr}`. epsilon : numeric or array_like, optional :math:`\\epsilon` exponent. method : unicode, optional **{'hdr-CIELAB', 'hdr-IPT'}**, *Lightness* :math:`L_{hdr}` computation method. Returns ------- array_like *luminance* :math:`Y`. Notes ----- +------------+-----------------------+---------------+ | **Domain** | **Scale - Reference** | **Scale - 1** | +============+=======================+===============+ | ``L_hdr`` | [0, 100] | [0, 1] | +------------+-----------------------+---------------+ +------------+-----------------------+---------------+ | **Range** | **Scale - Reference** | **Scale - 1** | +============+=======================+===============+ | ``Y`` | [0, 1] | [0, 1] | +------------+-----------------------+---------------+ References ---------- :cite:`Fairchild2011` Examples -------- >>> luminance_Fairchild2011(51.852958445912506) # doctest: +ELLIPSIS 0.1219722... >>> luminance_Fairchild2011(51.643108411718522, method='hdr-IPT') ... # doctest: +ELLIPSIS 0.1219722... """ L_hdr = to_domain_100(L_hdr) if method.lower() == 'hdr-cielab': maximum_perception = 247 else: maximum_perception = 246 Y = np.exp( np.log( substrate_concentration_MichealisMenten( L_hdr - 0.02, maximum_perception, 2**epsilon)) / epsilon) return from_range_1(Y)
def luminance_Fairchild2011(L_hdr, epsilon=0.474, method='hdr-CIELAB'): """ Computes *luminance* :math:`Y` of given *Lightness* :math:`L_{hdr}` using *Fairchild and Chen (2011)* method according to *Michealis-Menten* kinetics. Parameters ---------- L_hdr : array_like *Lightness* :math:`L_{hdr}`. epsilon : numeric or array_like, optional :math:`\\epsilon` exponent. method : unicode, optional **{'hdr-CIELAB', 'hdr-IPT'}**, *Lightness* :math:`L_{hdr}` computation method. Returns ------- array_like *luminance* :math:`Y`. Notes ----- +------------+-----------------------+---------------+ | **Domain** | **Scale - Reference** | **Scale - 1** | +============+=======================+===============+ | ``L_hdr`` | [0, 100] | [0, 1] | +------------+-----------------------+---------------+ +------------+-----------------------+---------------+ | **Range** | **Scale - Reference** | **Scale - 1** | +============+=======================+===============+ | ``Y`` | [0, 1] | [0, 1] | +------------+-----------------------+---------------+ References ---------- :cite:`Fairchild2011` Examples -------- >>> luminance_Fairchild2011(51.852958445912506) # doctest: +ELLIPSIS 0.1219722... >>> luminance_Fairchild2011(51.643108411718522, method='hdr-IPT') ... # doctest: +ELLIPSIS 0.1219722... """ L_hdr = to_domain_100(L_hdr) if method.lower() == 'hdr-cielab': maximum_perception = 247 else: maximum_perception = 246 Y = np.exp( np.log( substrate_concentration_MichealisMenten( L_hdr - 0.02, maximum_perception, 2 ** epsilon)) / epsilon) return from_range_1(Y)