def lightness_scale(steps: Integer) -> NDArray: """ Create a non-linear lightness scale, as described in *Jakob and Hanika (2019)*. The spacing between very dark and very bright (and saturated) colours is made smaller, because in those regions coefficients tend to change rapidly and a finer resolution is needed. Parameters ---------- steps Samples/steps count along the non-linear lightness scale. Returns ------- :class:`numpy.ndarray` Non-linear lightness scale. Examples -------- >>> lightness_scale(5) # doctest: +ELLIPSIS array([ 0. , 0.0656127..., 0.5 , 0.9343872..., \ 1. ]) """ linear = np.linspace(0, 1, steps) return smoothstep_function(smoothstep_function(linear))
def test_smoothstep_function(self): """Test :func:`colour.algebra.common.smoothstep_function` definition.""" self.assertEqual(smoothstep_function(0.5), 0.5) self.assertEqual(smoothstep_function(0.25), 0.15625) self.assertEqual(smoothstep_function(0.75), 0.84375) x = np.linspace(-2, 2, 5) np.testing.assert_almost_equal( smoothstep_function(x), np.array([28.00000, 5.00000, 0.00000, 1.00000, -4.00000]), ) np.testing.assert_almost_equal( smoothstep_function(x, -2, 2, clip=True), np.array([0.00000, 0.15625, 0.50000, 0.84375, 1.00000]), )