210 lines
5.5 KiB
Python
210 lines
5.5 KiB
Python
import numpy as np
|
|
import skimage.data as data
|
|
from skimage.data._fetchers import image_fetcher
|
|
from skimage import io
|
|
from skimage._shared.testing import assert_equal, assert_almost_equal, fetch
|
|
import os
|
|
import pytest
|
|
|
|
|
|
def test_data_dir():
|
|
# data_dir should be a directory people can use as a standard directory
|
|
# https://github.com/scikit-image/scikit-image/pull/3945#issuecomment-498141893
|
|
data_dir = data.data_dir
|
|
assert 'astronaut.png' in os.listdir(data_dir)
|
|
|
|
|
|
def test_download_all_with_pooch():
|
|
# jni first wrote this test with the intention of
|
|
# fully deleting the files in the data_dir,
|
|
# then ensure that the data gets downloaded accordingly.
|
|
# hmaarrfk raised the concern that this test wouldn't
|
|
# play well with parallel testing since we
|
|
# may be breaking the global state that certain other
|
|
# tests require, especially in parallel testing
|
|
|
|
# The second concern is that this test essentially uses
|
|
# a lot of bandwidth, which is not fun for developers on
|
|
# lower speed connections.
|
|
# https://github.com/scikit-image/scikit-image/pull/4666/files/26d5138b25b958da6e97ebf979e9bc36f32c3568#r422604863
|
|
data_dir = data.data_dir
|
|
if image_fetcher is not None:
|
|
data.download_all()
|
|
assert len(os.listdir(data_dir)) > 50
|
|
else:
|
|
with pytest.raises(ModuleNotFoundError):
|
|
data.download_all()
|
|
|
|
|
|
def test_astronaut():
|
|
""" Test that "astronaut" image can be loaded. """
|
|
astronaut = data.astronaut()
|
|
assert_equal(astronaut.shape, (512, 512, 3))
|
|
|
|
|
|
def test_camera():
|
|
""" Test that "camera" image can be loaded. """
|
|
cameraman = data.camera()
|
|
assert_equal(cameraman.ndim, 2)
|
|
|
|
|
|
def test_checkerboard():
|
|
""" Test that "checkerboard" image can be loaded. """
|
|
data.checkerboard()
|
|
|
|
|
|
def test_chelsea():
|
|
""" Test that "chelsea" image can be loaded. """
|
|
data.chelsea()
|
|
|
|
|
|
def test_clock():
|
|
""" Test that "clock" image can be loaded. """
|
|
data.clock()
|
|
|
|
|
|
def test_coffee():
|
|
""" Test that "coffee" image can be loaded. """
|
|
data.coffee()
|
|
|
|
|
|
def test_eagle():
|
|
""" Test that "eagle" image can be loaded. """
|
|
# Fetching the data through the testing module will
|
|
# cause the test to skip if pooch isn't installed.
|
|
fetch('data/eagle.png')
|
|
eagle = data.eagle()
|
|
assert_equal(eagle.ndim, 2)
|
|
assert_equal(eagle.dtype, np.dtype('uint8'))
|
|
|
|
|
|
def test_horse():
|
|
""" Test that "horse" image can be loaded. """
|
|
horse = data.horse()
|
|
assert_equal(horse.ndim, 2)
|
|
assert_equal(horse.dtype, np.dtype('bool'))
|
|
|
|
|
|
def test_hubble():
|
|
""" Test that "Hubble" image can be loaded. """
|
|
data.hubble_deep_field()
|
|
|
|
|
|
def test_immunohistochemistry():
|
|
""" Test that "immunohistochemistry" image can be loaded. """
|
|
data.immunohistochemistry()
|
|
|
|
|
|
def test_logo():
|
|
""" Test that "logo" image can be loaded. """
|
|
logo = data.logo()
|
|
assert_equal(logo.ndim, 3)
|
|
assert_equal(logo.shape[2], 4)
|
|
|
|
|
|
def test_moon():
|
|
""" Test that "moon" image can be loaded. """
|
|
data.moon()
|
|
|
|
|
|
def test_page():
|
|
""" Test that "page" image can be loaded. """
|
|
data.page()
|
|
|
|
|
|
def test_rocket():
|
|
""" Test that "rocket" image can be loaded. """
|
|
data.rocket()
|
|
|
|
|
|
def test_text():
|
|
""" Test that "text" image can be loaded. """
|
|
data.text()
|
|
|
|
|
|
def test_stereo_motorcycle():
|
|
""" Test that "stereo_motorcycle" image can be loaded. """
|
|
data.stereo_motorcycle()
|
|
|
|
|
|
def test_binary_blobs():
|
|
blobs = data.binary_blobs(length=128)
|
|
assert_almost_equal(blobs.mean(), 0.5, decimal=1)
|
|
blobs = data.binary_blobs(length=128, volume_fraction=0.25)
|
|
assert_almost_equal(blobs.mean(), 0.25, decimal=1)
|
|
blobs = data.binary_blobs(length=32, volume_fraction=0.25, n_dim=3)
|
|
assert_almost_equal(blobs.mean(), 0.25, decimal=1)
|
|
other_realization = data.binary_blobs(length=32, volume_fraction=0.25,
|
|
n_dim=3)
|
|
assert not np.all(blobs == other_realization)
|
|
|
|
|
|
def test_lfw_subset():
|
|
""" Test that "lfw_subset" can be loaded."""
|
|
data.lfw_subset()
|
|
|
|
|
|
def test_skin():
|
|
"""Test that "skin" image can be loaded.
|
|
|
|
Needs internet connection.
|
|
"""
|
|
skin = data.skin()
|
|
assert skin.ndim == 3
|
|
|
|
|
|
def test_cell():
|
|
""" Test that "cell" image can be loaded."""
|
|
data.cell()
|
|
|
|
|
|
def test_cells3d():
|
|
"""Needs internet connection."""
|
|
path = fetch('data/cells3d.tif')
|
|
image = io.imread(path)
|
|
assert image.shape == (60, 2, 256, 256)
|
|
|
|
|
|
def test_brain_3d():
|
|
"""Needs internet connection."""
|
|
path = fetch('data/brain.tiff')
|
|
image = io.imread(path)
|
|
assert image.shape == (10, 256, 256)
|
|
|
|
|
|
def test_kidney_3d_multichannel():
|
|
"""Test that 3D multichannel image of kidney tissue can be loaded.
|
|
|
|
Needs internet connection.
|
|
"""
|
|
fetch('data/kidney.tif')
|
|
kidney = data.kidney()
|
|
assert kidney.shape == (16, 512, 512, 3)
|
|
|
|
|
|
def test_lily_multichannel():
|
|
"""Test that microscopy image of lily of the valley can be loaded.
|
|
|
|
Needs internet connection.
|
|
"""
|
|
fetch('data/lily.tif')
|
|
lily = data.lily()
|
|
assert lily.shape == (922, 922, 4)
|
|
|
|
|
|
def test_vortex():
|
|
fetch('data/pivchallenge-B-B001_1.tif')
|
|
fetch('data/pivchallenge-B-B001_2.tif')
|
|
image0, image1 = data.vortex()
|
|
for image in [image0, image1]:
|
|
assert image.shape == (512, 512)
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
'function_name', ['create_image_fetcher', 'file_hash', 'image_fetcher']
|
|
)
|
|
def test_fetchers_are_public(function_name):
|
|
# Check that the following functions that are only used indirectly in the
|
|
# above tests are public.
|
|
assert hasattr(data, function_name)
|