Exemplo n.º 1
0
    def test_implicit_autoscale(self):
        norm = ImageNormalize(vmin=None,
                              vmax=10.,
                              stretch=SqrtStretch(),
                              clip=False)
        norm2 = ImageNormalize(DATA,
                               interval=ManualInterval(None, 10),
                               stretch=SqrtStretch(),
                               clip=False)
        output = norm(DATA)
        assert norm.vmin == np.min(DATA)
        assert norm.vmax == 10.
        assert_allclose(output, norm2(DATA))

        norm = ImageNormalize(vmin=2.,
                              vmax=None,
                              stretch=SqrtStretch(),
                              clip=False)
        norm2 = ImageNormalize(DATA,
                               interval=ManualInterval(2, None),
                               stretch=SqrtStretch(),
                               clip=False)
        output = norm(DATA)
        assert norm.vmin == 2.
        assert norm.vmax == np.max(DATA)
        assert_allclose(output, norm2(DATA))
Exemplo n.º 2
0
 def test_scalar(self):
     norm = ImageNormalize(vmin=2., vmax=10., stretch=SqrtStretch(),
                           clip=True)
     norm2 = ImageNormalize(data=6, interval=ManualInterval(2, 10),
                            stretch=SqrtStretch(), clip=True)
     assert_allclose(norm(6), 0.70710678)
     assert_allclose(norm(6), norm2(6))
Exemplo n.º 3
0
    def test_chaining(self):
        stretch_1 = SqrtStretch() + SqrtStretch()
        stretch_2 = PowerStretch(0.25)
        stretch_3 = PowerStretch(4.)

        np.testing.assert_allclose(stretch_1(DATA), stretch_2(DATA))

        np.testing.assert_allclose(stretch_1.inverse(DATA), stretch_3(DATA))
Exemplo n.º 4
0
 def test_clip(self):
     norm = ImageNormalize(vmin=2., vmax=10., stretch=SqrtStretch(),
                           clip=True)
     norm2 = ImageNormalize(DATA, interval=ManualInterval(2, 10),
                            stretch=SqrtStretch(), clip=True)
     output = norm(DATA)
     expected = [0., 0.35355339, 0.70710678, 0.93541435, 1., 1.]
     assert_allclose(output, expected)
     assert_allclose(output.mask, [0, 0, 0, 0, 0, 0])
     assert_allclose(output, norm2(DATA))
Exemplo n.º 5
0
    def test_chaining(self):
        stretch_1 = SqrtStretch() + SqrtStretch()
        stretch_2 = PowerStretch(0.25)
        stretch_3 = PowerStretch(4.)

        np.testing.assert_allclose(stretch_1(DATA),
                                   stretch_2(DATA))

        np.testing.assert_allclose(stretch_1.inverse(DATA),
                                   stretch_3(DATA))
Exemplo n.º 6
0
 def test_masked_clip(self):
     mdata = ma.array(DATA, mask=[0, 0, 1, 0, 0, 0])
     norm = ImageNormalize(vmin=2., vmax=10., stretch=SqrtStretch(),
                           clip=True)
     norm2 = ImageNormalize(mdata, interval=ManualInterval(2, 10),
                            stretch=SqrtStretch(), clip=True)
     output = norm(mdata)
     expected = [0., 0.35355339, 1., 0.93541435, 1., 1.]
     assert_allclose(output.filled(-10), expected)
     assert_allclose(output.mask, [0, 0, 0, 0, 0, 0])
     assert_allclose(output, norm2(mdata))
Exemplo n.º 7
0
 def test_noclip(self):
     norm = ImageNormalize(vmin=2., vmax=10., stretch=SqrtStretch(),
                           clip=False)
     norm2 = ImageNormalize(DATA, interval=ManualInterval(2, 10),
                            stretch=SqrtStretch(), clip=False)
     output = norm(DATA)
     expected = [np.nan, 0.35355339, 0.70710678, 0.93541435, 1.11803399,
                 1.27475488]
     assert_allclose(output, expected)
     assert_allclose(output.mask, [0, 0, 0, 0, 0, 0])
     assert_allclose(norm.inverse(norm(DATA))[1:], DATA[1:])
     assert_allclose(output, norm2(DATA))
Exemplo n.º 8
0
    def test_masked_noclip(self):
        mdata = ma.array(DATA, mask=[0, 0, 1, 0, 0, 0])
        norm = ImageNormalize(vmin=2., vmax=10., stretch=SqrtStretch(),
                              clip=False)
        norm2 = ImageNormalize(mdata, interval=ManualInterval(2, 10),
                               stretch=SqrtStretch(), clip=False)
        output = norm(mdata)
        expected = [np.nan, 0.35355339, -10, 0.93541435, 1.11803399,
                    1.27475488]
        assert_allclose(output.filled(-10), expected)
        assert_allclose(output.mask, [0, 0, 1, 0, 0, 0])

        assert_allclose(norm.inverse(norm(DATA))[1:], DATA[1:])
        assert_allclose(output, norm2(mdata))
Exemplo n.º 9
0
 def test_sqrt_invalid_kw(self, invalid):
     stretch = SqrtStretch()
     norm1 = simple_norm(DATA3, stretch='sqrt', min_cut=-1, max_cut=1,
                         clip=False, invalid=invalid)
     norm2 = ImageNormalize(stretch=stretch, vmin=-1, vmax=1, clip=False,
                            invalid=invalid)
     assert_equal(norm1(DATA3), norm2(DATA3))
Exemplo n.º 10
0
def test_clip_invalid():
    stretch = SqrtStretch()

    values = stretch([-1., 0., 0.5, 1., 1.5])
    np.testing.assert_allclose(values, [0., 0., 0.70710678, 1., 1.])

    values = stretch([-1., 0., 0.5, 1., 1.5], clip=False)
    np.testing.assert_allclose(values, [np.nan, 0., 0.70710678, 1., 1.2247448])
Exemplo n.º 11
0
def simple_norm(data,
                stretch='linear',
                power=1.0,
                asinh_a=0.1,
                log_a=1000,
                min_cut=None,
                max_cut=None,
                min_percent=None,
                max_percent=None,
                percent=None,
                clip=True):

    if percent is not None:
        interval = PercentileInterval(percent)
    elif min_percent is not None or max_percent is not None:
        interval = AsymmetricPercentileInterval(min_percent or 0., max_percent
                                                or 100.)
    elif min_cut is not None or max_cut is not None:
        interval = ManualInterval(min_cut, max_cut)
    else:
        interval = MinMaxInterval()

    if stretch == 'linear':
        stretch = LinearStretch()
    elif stretch == 'sqrt':
        stretch = SqrtStretch()
    elif stretch == 'power':
        stretch = PowerStretch(power)
    elif stretch == 'log':
        stretch = LogStretch(log_a)
    elif stretch == 'asinh':
        stretch = AsinhStretch(asinh_a)
    else:
        raise ValueError('Unknown stretch: {0}.'.format(stretch))

    vmin, vmax = interval.get_limits(data)

    return ImageNormalize(vmin=vmin, vmax=vmax, stretch=stretch, clip=clip)
Exemplo n.º 12
0
from astropy.utils.exceptions import AstropyDeprecationWarning
from astropy.visualization.mpl_normalize import ImageNormalize, simple_norm, imshow_norm
from astropy.visualization.interval import ManualInterval, PercentileInterval
from astropy.visualization.stretch import LogStretch, PowerStretch, SqrtStretch
from astropy.utils.compat.optional_deps import HAS_MATPLOTLIB, HAS_PLT  # noqa

if HAS_MATPLOTLIB:
    import matplotlib
    MATPLOTLIB_LT_32 = Version(matplotlib.__version__) < Version('3.2')

DATA = np.linspace(0., 15., 6)
DATA2 = np.arange(3)
DATA2SCL = 0.5 * DATA2
DATA3 = np.linspace(-3., 3., 7)
STRETCHES = (SqrtStretch(), PowerStretch(0.5), LogStretch())
INVALID = (None, -np.inf, -1)


@pytest.mark.skipif('HAS_MATPLOTLIB')
def test_normalize_error_message():
    with pytest.raises(ImportError) as exc:
        ImageNormalize()
    assert (exc.value.args[0] == "matplotlib is required in order to use "
            "this class.")


@pytest.mark.skipif('not HAS_MATPLOTLIB')
class TestNormalize:
    def test_invalid_interval(self):
        with pytest.raises(TypeError):
Exemplo n.º 13
0
 def test_inverted(self):
     stretch_1 = SqrtStretch().inverse
     stretch_2 = PowerStretch(2)
     np.testing.assert_allclose(stretch_1(DATA), stretch_2(DATA))
Exemplo n.º 14
0
import numpy as np
from numpy.testing import assert_equal

from astropy.visualization.stretch import (
    LinearStretch, SqrtStretch, PowerStretch, PowerDistStretch,
    InvertedPowerDistStretch, SquaredStretch, LogStretch, InvertedLogStretch,
    AsinhStretch, SinhStretch, HistEqStretch, InvertedHistEqStretch,
    ContrastBiasStretch)

DATA = np.array([0.00, 0.25, 0.50, 0.75, 1.00])

RESULTS = {}
RESULTS[LinearStretch()] = np.array([0.00, 0.25, 0.50, 0.75, 1.00])
RESULTS[LinearStretch(intercept=0.5) + LinearStretch(slope=0.5)] = \
    np.array([0.5, 0.625, 0.75, 0.875, 1.])
RESULTS[SqrtStretch()] = np.array([0., 0.5, 0.70710678, 0.8660254, 1.])
RESULTS[SquaredStretch()] = np.array([0., 0.0625, 0.25, 0.5625, 1.])
RESULTS[PowerStretch(0.5)] = np.array([0., 0.5, 0.70710678, 0.8660254, 1.])
RESULTS[PowerDistStretch()] = np.array([0., 0.004628, 0.030653, 0.177005, 1.])
RESULTS[LogStretch()] = np.array([0., 0.799776, 0.899816, 0.958408, 1.])
RESULTS[AsinhStretch()] = np.array([0., 0.549402, 0.77127, 0.904691, 1.])
RESULTS[SinhStretch()] = np.array([0., 0.082085, 0.212548, 0.46828, 1.])
RESULTS[ContrastBiasStretch(contrast=2.,
                            bias=0.4)] = np.array([-0.3, 0.2, 0.7, 1.2, 1.7])
RESULTS[HistEqStretch(DATA)] = DATA
RESULTS[HistEqStretch(DATA[::-1])] = DATA
RESULTS[HistEqStretch(DATA**0.5)] = np.array([0., 0.125, 0.25, 0.5674767, 1.])


class TestStretch:
    @pytest.mark.parametrize('stretch', RESULTS.keys())