diff --git a/CONTRIBUTING.txt b/CONTRIBUTING.txt index fcb36547..58b83296 100644 --- a/CONTRIBUTING.txt +++ b/CONTRIBUTING.txt @@ -123,9 +123,7 @@ Guidelines * All code should have tests (see `test coverage`_ below for more details). * All code should be documented, to the same - `standard -<://github.com/numpy/numpy/blob/master/doc/HOWTO_DOCUMENT.rst.txt#docstring-standard>`_ - as NumPy and SciPy. + `standard <://github.com/numpy/numpy/blob/master/doc/HOWTO_DOCUMENT.rst.txt#docstring-standard>`_ as NumPy and SciPy. * For new functionality, always add an example to the gallery. * No changes are ever committed without review. Ask on the @@ -195,8 +193,8 @@ successfully passes all tests. To do so, * Go to `Travis-CI `__ and follow the Sign In link at the top - * Go to your `profile page `__ and switch on your - scikit-image fork + * Go to your `profile page `__ and switch + on your scikit-image fork It corresponds to steps one and two in `Travis-CI documentation `__ diff --git a/DEPENDS.txt b/DEPENDS.txt index 02ee007f..5cf37564 100644 --- a/DEPENDS.txt +++ b/DEPENDS.txt @@ -45,12 +45,12 @@ functionality is only available with the following installed: * `Astropy `__ provides FITS io capability. -*`SimpleITK ` - Optional io plugin providing a wide variety of `formats `__. - including specialized formats using in medical imaging. +* `SimpleITK ` + Optional io plugin providing a wide variety of `formats `__. + including specialized formats using in medical imaging. -*`imread ` - Optional io plugin providing most standard `formats `__. +* `imread ` + Optional io plugin providing most standard `formats `__. Testing requirements diff --git a/Makefile b/Makefile index 2ace534e..b80eba0d 100644 --- a/Makefile +++ b/Makefile @@ -14,3 +14,7 @@ doctest: coverage: nosetests skimage --with-coverage --cover-package=skimage + +html: + pip install -q sphinx + export SPHINXOPTS=-W; make -C doc html diff --git a/doc/README.md b/doc/README.md index 48e26788..015693e1 100644 --- a/doc/README.md +++ b/doc/README.md @@ -3,3 +3,16 @@ To build docs, run `make` in this directory. `make help` lists all targets. ## Requirements ## Sphinx is needed to build doc. Install with `pip install sphinx`. + +## Fixing Warnings ## + +- "citation not found: R###" + $ cd doc/build; grep -rin R### . + There is probably an underscore after the reference (e.g. [1]_) + +- "Duplicate citation R###, other instance in..."" + There is probably a [2] without a [1] in one of + the docstrings + +- Make sure to use pre-sphinxification paths to images + (not the _images directory) diff --git a/doc/ext/plot2rst.py b/doc/ext/plot2rst.py index 0b618b3b..99fd9a3f 100644 --- a/doc/ext/plot2rst.py +++ b/doc/ext/plot2rst.py @@ -258,7 +258,8 @@ def write_gallery(gallery_index, src_dir, rst_dir, cfg, depth=0): else: sub_dir_list = src_dir.psplit()[-depth:] sub_dir = Path('/'.join(sub_dir_list) + '/') - gallery_index.write(TOCTREE_TEMPLATE % (sub_dir + '\n '.join(ex_names))) + joiner = '\n %s' % sub_dir + gallery_index.write(TOCTREE_TEMPLATE % (sub_dir + joiner.join(ex_names))) for src_name in examples: diff --git a/doc/source/conf.py b/doc/source/conf.py index c2179b41..94904305 100644 --- a/doc/source/conf.py +++ b/doc/source/conf.py @@ -251,6 +251,7 @@ latex_use_modindex = False # Numpy extensions # ----------------------------------------------------------------------------- numpydoc_show_class_members = False +numpydoc_class_members_toctree = False # ----------------------------------------------------------------------------- # Plots diff --git a/doc/source/contents.txt b/doc/source/contents.txt deleted file mode 100644 index 250546b0..00000000 --- a/doc/source/contents.txt +++ /dev/null @@ -1,7 +0,0 @@ -Table of Contents -================= - -.. toctree:: - - /api/api - diff --git a/doc/source/index.txt b/doc/source/index.txt index 3c6ff75c..93fb259a 100644 --- a/doc/source/index.txt +++ b/doc/source/index.txt @@ -15,7 +15,7 @@ Sections :hidden: overview - api + api/api api_changes install user_guide diff --git a/doc/source/user_guide.txt b/doc/source/user_guide.txt index 7be3e7a8..197c12cb 100644 --- a/doc/source/user_guide.txt +++ b/doc/source/user_guide.txt @@ -12,3 +12,5 @@ User Guide user_guide/tutorials user_guide/getting_help user_guide/viewer + user_guide/tutorial_parallelization + user_guide/tutorial_segmentation \ No newline at end of file diff --git a/doc/source/user_guide/numpy_images.txt b/doc/source/user_guide/numpy_images.txt index 916c5285..3dab852a 100644 --- a/doc/source/user_guide/numpy_images.txt +++ b/doc/source/user_guide/numpy_images.txt @@ -81,7 +81,7 @@ disk: :: ... (nrows / 2)**2) >>> camera[outer_disk_mask] = 0 -.. image:: ../../_images/plot_camera_numpy_1.png +.. image:: ../auto_examples/images/plot_camera_numpy_1.png :width: 45% :target: ../auto_examples/plot_camera_numpy.html @@ -123,6 +123,8 @@ the grayscale image above: Using a 2D mask on a 2D color image + >>> from skimage import data + >>> cat = data.chelsea() >>> reddish = cat[:, :, 0] > 160 >>> cat[reddish] = [0, 255, 0] >>> plt.imshow(cat) @@ -153,14 +155,14 @@ These conventions are summarized below: .. table:: Dimension name and order conventions in scikit-image -======================== ======================================== -Image type coordinates -======================== ======================================== -2D grayscale (row, col) -2D multichannel (eg. RGB) (row, col, ch) -3D grayscale (pln, row, col) -3D multichannel (pln, row, col, ch) -======================== ======================================== + ========================= ======================================== + Image type coordinates + ========================= ======================================== + 2D grayscale (row, col) + 2D multichannel (eg. RGB) (row, col, ch) + 3D grayscale (pln, row, col) + 3D multichannel (pln, row, col, ch) + ========================= ======================================== Many functions in scikit-image operate on 3D images directly: @@ -248,9 +250,9 @@ We can then supplement the above table as follows: .. table:: Addendum to dimension names and orders in scikit-image -======================== ======================================== -Image type coordinates -======================== ======================================== -2D color video (t, row, col, ch) -3D multichannel video (t, pln, row, col, ch) -======================== ======================================== + ======================== ======================================== + Image type coordinates + ======================== ======================================== + 2D color video (t, row, col, ch) + 3D multichannel video (t, pln, row, col, ch) + ======================== ======================================== diff --git a/doc/source/user_guide/transforming_image_data.txt b/doc/source/user_guide/transforming_image_data.txt index 325017ff..9dfe3139 100644 --- a/doc/source/user_guide/transforming_image_data.txt +++ b/doc/source/user_guide/transforming_image_data.txt @@ -67,7 +67,7 @@ from RGB to grayscale:: array([[ 0.7154]]) -Converting a grayscale image to RGB with :func:`gray2rgb``simply +Converting a grayscale image to RGB with :func:`gray2rgb` simply duplicates the gray values over the three color channels. Painting images with labels @@ -78,7 +78,7 @@ using an array of labels to encode the regions to be represented with the same color. -.. image:: ../../_images/plot_join_segmentations_1.png +.. image: ../auto_examples/images/plot_join_segmentations_1.png :target: ../auto_examples/plot_join_segmentations.html :align: center :width: 80% @@ -159,7 +159,7 @@ image with :func:`equalize_adapthist`, in order to correct for exposure gradients across the image. See the example :ref:`example_plot_equalize.py`. -.. image:: ../../_images/plot_equalize_1.png +.. image:: ../auto_examples/images/plot_equalize_1.png :target: ../auto_examples/plot_equalize.html :align: center :width: 90% diff --git a/doc/source/user_guide/tutorial_segmentation.txt b/doc/source/user_guide/tutorial_segmentation.txt index 0c373062..2cf45374 100644 --- a/doc/source/user_guide/tutorial_segmentation.txt +++ b/doc/source/user_guide/tutorial_segmentation.txt @@ -11,7 +11,7 @@ the coins cannot be done directly from the histogram of grey values, because the background shares enough grey levels with the coins that a thresholding segmentation is not sufficient. -.. image:: ../../_images/plot_coins_segmentation_1.png +.. image:: ../auto_examples/applications/images/plot_coins_segmentation_1.png :target: ../auto_examples/applications/plot_coins_segmentation.html :align: center @@ -26,7 +26,7 @@ Simply thresholding the image leads either to missing significant parts of the coins, or to merging parts of the background with the coins. This is due to the inhomogeneous lighting of the image. -.. image:: ../../_images/plot_coins_segmentation_2.png +.. image:: ../auto_examples/applications/images/plot_coins_segmentation_2.png :target: ../auto_examples/applications/plot_coins_segmentation.html :align: center @@ -53,7 +53,7 @@ boundary of the coins, or inside the coins. >>> from scipy import ndimage >>> fill_coins = ndimage.binary_fill_holes(edges) -.. image:: ../../_images/plot_coins_segmentation_3.png +.. image:: ../auto_examples/applications/images/plot_coins_segmentation_3.png :target: ../auto_examples/applications/plot_coins_segmentation.html :align: center @@ -62,7 +62,7 @@ we fill the inner part of the coins using the ``ndimage.binary_fill_holes`` function, which uses mathematical morphology to fill the holes. -.. image:: ../../_images/plot_coins_segmentation_4.png +.. image:: ../auto_examples/applications/images/plot_coins_segmentation_4.png :target: ../auto_examples/applications/plot_coins_segmentation.html :align: center @@ -83,7 +83,7 @@ has not been segmented correctly at all. The reason is that the contour that we got from the Canny detector was not completely closed, therefore the filling function did not fill the inner part of the coin. -.. image:: ../../_images/plot_coins_segmentation_5.png +.. image:: ../auto_examples/applications/images/plot_coins_segmentation_5.png :target: ../auto_examples/applications/plot_coins_segmentation.html :align: center @@ -128,7 +128,7 @@ separate the coins from the background. and here is the corresponding 2-D plot: -.. image:: ../../_images/plot_coins_segmentation_6.png +.. image:: ../auto_examples/applications/images/plot_coins_segmentation_6.png :target: ../auto_examples/applications/plot_coins_segmentation.html :align: center @@ -139,7 +139,7 @@ extreme parts of the histogram of grey values:: >>> markers[coins < 30] = 1 >>> markers[coins > 150] = 2 -.. image:: ../../_images/plot_coins_segmentation_7.png +.. image:: ../auto_examples/applications/images/plot_coins_segmentation_7.png :target: ../auto_examples/applications/plot_coins_segmentation.html :align: center @@ -148,7 +148,7 @@ Let us now compute the watershed transform:: >>> from skimage.morphology import watershed >>> segmentation = watershed(elevation_map, markers) -.. image:: ../../_images/plot_coins_segmentation_8.png +.. image:: ../auto_examples/applications/images/plot_coins_segmentation_8.png :target: ../auto_examples/applications/plot_coins_segmentation.html :align: center @@ -165,7 +165,7 @@ We can now label all the coins one by one using ``ndimage.label``:: >>> labeled_coins, _ = ndimage.label(segmentation) -.. image:: ../../_images/plot_coins_segmentation_9.png +.. image:: ../auto_examples/applications/images/plot_coins_segmentation_9.png :target: ../auto_examples/applications/plot_coins_segmentation.html :align: center diff --git a/skimage/draw/draw.py b/skimage/draw/draw.py index be59e268..dbeb6ba0 100644 --- a/skimage/draw/draw.py +++ b/skimage/draw/draw.py @@ -95,6 +95,7 @@ def circle(cy, cx, radius, shape=None): Pixel coordinates of circle. May be used to directly index into an array, e.g. ``img[rr, cc] = 1``. + Notes ----- This function is a wrapper for skimage.draw.ellipse() diff --git a/skimage/feature/__init__.py b/skimage/feature/__init__.py index 90bb6e53..518aaef2 100644 --- a/skimage/feature/__init__.py +++ b/skimage/feature/__init__.py @@ -18,7 +18,7 @@ from .util import plot_matches from .blob import blob_dog, blob_log, blob_doh -__all__ = ['canny' +__all__ = ['canny', 'daisy', 'hog', 'greycomatrix', diff --git a/skimage/filters/rank/generic.py b/skimage/filters/rank/generic.py index d444a6a5..31e80b76 100644 --- a/skimage/filters/rank/generic.py +++ b/skimage/filters/rank/generic.py @@ -1,5 +1,5 @@ """The local histogram is computed using a sliding window similar to the method -described in [1]_. +described in [1]. Input image can be 8-bit or 16-bit, for 16-bit input images, the number of histogram bins is determined from the maximum value present in the image. @@ -749,7 +749,7 @@ def tophat(image, selem, out=None, mask=None, shift_x=False, shift_y=False): def noise_filter(image, selem, out=None, mask=None, shift_x=False, shift_y=False): - """Noise feature as described in [Hashimoto12]_. + """Noise feature as described in [1]. Parameters ---------- @@ -769,7 +769,7 @@ def noise_filter(image, selem, out=None, mask=None, shift_x=False, References ---------- - .. [Hashimoto12] N. Hashimoto et al. Referenceless image quality evaluation + .. [1] N. Hashimoto et al. Referenceless image quality evaluation for whole slide imaging. J Pathol Inform 2012;3:9. Returns @@ -800,7 +800,7 @@ def noise_filter(image, selem, out=None, mask=None, shift_x=False, def entropy(image, selem, out=None, mask=None, shift_x=False, shift_y=False): - """Local entropy [1]_. + """Local entropy [1]. The entropy is computed using base 2 logarithm i.e. the filter returns the minimum number of bits needed to encode the local greylevel distribution. @@ -872,7 +872,7 @@ def otsu(image, selem, out=None, mask=None, shift_x=False, shift_y=False): References ---------- - .. [otsu] http://en.wikipedia.org/wiki/Otsu's_method + .. [1] http://en.wikipedia.org/wiki/Otsu's_method Examples -------- diff --git a/skimage/filters/thresholding.py b/skimage/filters/thresholding.py index 74c5fc14..e10bca5c 100644 --- a/skimage/filters/thresholding.py +++ b/skimage/filters/thresholding.py @@ -200,8 +200,10 @@ def threshold_isodata(image, nbins=256, return_all=False): Histogram-based threshold, known as Ridler-Calvard method or inter-means. Threshold values returned satisfy the following equality: - threshold = (image[image <= threshold].mean() + - image[image > threshold].mean()) / 2.0 + + `threshold = (image[image <= threshold].mean() +` + `image[image > threshold].mean()) / 2.0` + That is, returned thresholds are intensities that separate the image into two groups of pixels, where the threshold intensity is midway between the mean intensities of these groups. diff --git a/skimage/future/graph/rag.py b/skimage/future/graph/rag.py index b0fd9240..11441800 100644 --- a/skimage/future/graph/rag.py +++ b/skimage/future/graph/rag.py @@ -220,7 +220,7 @@ def rag_mean_color(image, labels, connectivity=2, mode='distance', labels : ndarray, shape(M, N, [..., P,]) The labelled image. This should have one dimension less than `image`. If `image` has dimensions `(M, N, 3)` `labels` should have - dimensions `(M, N)`. + dimensions `(M, N)`. connectivity : int, optional Pixels with a squared distance less than `connectivity` from each other are considered adjacent. It can range from 1 to `labels.ndim`. Its diff --git a/skimage/io/_plugins/pil_plugin.ini b/skimage/io/_plugins/pil_plugin.ini index e6382e5e..14034410 100644 --- a/skimage/io/_plugins/pil_plugin.ini +++ b/skimage/io/_plugins/pil_plugin.ini @@ -1,3 +1,3 @@ [pil] description = Image reading via the Python Imaging Library -provides = imread, imsave, imshow, _app_show +provides = imread, imsave diff --git a/skimage/io/_plugins/pil_plugin.py b/skimage/io/_plugins/pil_plugin.py index e2108145..db58c3ba 100644 --- a/skimage/io/_plugins/pil_plugin.py +++ b/skimage/io/_plugins/pil_plugin.py @@ -260,20 +260,3 @@ def imsave(fname, arr, format_str=None): img = ndarray_to_pil(arr, format_str=format_str) img.save(fname, format=format_str) - - -def imshow(arr): - """Display an image, using PIL's default display command. - - Parameters - ---------- - arr : ndarray - Image to display. Images of dtype float are assumed to be in - [0, 1]. Images of dtype uint8 are in [0, 255]. - - """ - Image.fromarray(img_as_ubyte(arr)).show() - - -def _app_show(): - pass diff --git a/skimage/io/tests/test_plugin.py b/skimage/io/tests/test_plugin.py index 117e5ab9..00dd5b15 100644 --- a/skimage/io/tests/test_plugin.py +++ b/skimage/io/tests/test_plugin.py @@ -93,15 +93,18 @@ def test_available(): def test_load_preferred_plugins_all(): - from skimage.io._plugins import pil_plugin + from skimage.io._plugins import pil_plugin, matplotlib_plugin with protect_preferred_plugins(): - manage_plugins.preferred_plugins = {'all': ['pil']} + manage_plugins.preferred_plugins = {'all': ['pil'], + 'imshow': ['matplotlib']} manage_plugins.reset_plugins() - for plugin_type in ('imread', 'imsave', 'imshow'): + for plugin_type in ('imread', 'imsave'): plug, func = manage_plugins.plugin_store[plugin_type][0] assert func == getattr(pil_plugin, plugin_type) + plug, func = manage_plugins.plugin_store['imshow'][0] + assert func == getattr(matplotlib_plugin, 'imshow') def test_load_preferred_plugins_imread(): diff --git a/skimage/measure/_ccomp.pyx b/skimage/measure/_ccomp.pyx index 56b31a9f..a3b27593 100644 --- a/skimage/measure/_ccomp.pyx +++ b/skimage/measure/_ccomp.pyx @@ -368,7 +368,7 @@ def label(input, neighbors=None, background=None, return_num=False, Two pixels are connected when they are neighbors and have the same value. In 2D, they can be neighbors either in a 1- or 2-connected sense. The value refers to the maximum number of orthogonal hops to consider a - pixel/voxel a neighbor. + pixel/voxel a neighbor:: 1-connectivity 2-connectivity diagonal connection close-up diff --git a/skimage/restoration/deconvolution.py b/skimage/restoration/deconvolution.py index d4c51d95..632d6788 100644 --- a/skimage/restoration/deconvolution.py +++ b/skimage/restoration/deconvolution.py @@ -363,7 +363,7 @@ def richardson_lucy(image, psf, iterations=50, clip=True): References ---------- - .. [2] http://en.wikipedia.org/wiki/Richardson%E2%80%93Lucy_deconvolution + .. [1] http://en.wikipedia.org/wiki/Richardson%E2%80%93Lucy_deconvolution """ image = image.astype(np.float) psf = psf.astype(np.float) diff --git a/skimage/segmentation/boundaries.py b/skimage/segmentation/boundaries.py index 1975d879..9400e306 100644 --- a/skimage/segmentation/boundaries.py +++ b/skimage/segmentation/boundaries.py @@ -65,15 +65,15 @@ def find_boundaries(label_img, connectivity=1, mode='thick', background=0): How to mark the boundaries: - thick: any pixel not completely surrounded by pixels of the - same label (defined by `connectivity`) is marked as a boundary. - This results in boundaries that are 2 pixels thick. + same label (defined by `connectivity`) is marked as a boundary. + This results in boundaries that are 2 pixels thick. - inner: outline the pixels *just inside* of objects, leaving - background pixels untouched. + background pixels untouched. - outer: outline pixels in the background around object - boundaries. When two objects touch, their boundary is also - marked. + boundaries. When two objects touch, their boundary is also + marked. - subpixel: return a doubled image, with pixels *between* the - original pixels marked as boundary where appropriate. + original pixels marked as boundary where appropriate. background: int, optional For modes 'inner' and 'outer', a definition of a background label is required. See `mode` for descriptions of these two. @@ -197,7 +197,7 @@ def mark_boundaries(image, label_img, color=(1, 1, 0), See Also -------- - ``find_boundaries``. + find_boundaries """ marked = img_as_float(image, force_copy=True) if marked.ndim == 2: diff --git a/skimage/transform/_geometric.py b/skimage/transform/_geometric.py index 3a2972c0..c94e3b76 100644 --- a/skimage/transform/_geometric.py +++ b/skimage/transform/_geometric.py @@ -332,7 +332,9 @@ class ProjectiveTransform(GeometricTransform): class AffineTransform(ProjectiveTransform): - """2D affine transformation of the form:: + """2D affine transformation of the form: + + ..:math: X = a0*x + a1*y + a2 = = sx*x*cos(rotation) - sy*y*sin(rotation + shear) + a2 @@ -551,7 +553,9 @@ class PiecewiseAffineTransform(GeometricTransform): class SimilarityTransform(ProjectiveTransform): - """2D similarity transformation of the form:: + """2D similarity transformation of the form: + + ..:math: X = a0 * x - b0 * y + a1 = = m * x * cos(rotation) - m * y * sin(rotation) + a1 @@ -715,7 +719,9 @@ class SimilarityTransform(ProjectiveTransform): class PolynomialTransform(GeometricTransform): - """2D transformation of the form:: + """2D transformation of the form: + + ..:math: X = sum[j=0:order]( sum[i=0:j]( a_ji * x**(j - i) * y**i )) Y = sum[j=0:order]( sum[i=0:j]( b_ji * x**(j - i) * y**i )) diff --git a/skimage/util/noise.py b/skimage/util/noise.py index 9283f537..ff20084a 100644 --- a/skimage/util/noise.py +++ b/skimage/util/noise.py @@ -16,15 +16,15 @@ def random_noise(image, mode='gaussian', seed=None, clip=True, **kwargs): mode : str One of the following strings, selecting the type of noise to add: - 'gaussian' Gaussian-distributed additive noise. - 'localvar' Gaussian-distributed additive noise, with specified - local variance at each point of `image` - 'poisson' Poisson-distributed noise generated from the data. - 'salt' Replaces random pixels with 1. - 'pepper' Replaces random pixels with 0. - 's&p' Replaces random pixels with 0 or 1. - 'speckle' Multiplicative noise using out = image + n*image, where - n is uniform noise with specified mean & variance. + - 'gaussian' Gaussian-distributed additive noise. + - 'localvar' Gaussian-distributed additive noise, with specified + local variance at each point of `image` + - 'poisson' Poisson-distributed noise generated from the data. + - 'salt' Replaces random pixels with 1. + - 'pepper' Replaces random pixels with 0. + - 's&p' Replaces random pixels with 0 or 1. + - 'speckle' Multiplicative noise using out = image + n*image, where + n is uniform noise with specified mean & variance. seed : int If provided, this will set the random seed before generating noise, for valid pseudo-random comparisons. diff --git a/tools/travis_script.sh b/tools/travis_script.sh index f76467bb..8dc2bb4e 100755 --- a/tools/travis_script.sh +++ b/tools/travis_script.sh @@ -1,10 +1,18 @@ #!/usr/bin/env bash set -ex +PY=$TRAVIS_PYTHON_VERSION + section "Test.with.min.requirements" nosetests $TEST_ARGS skimage section_end "Test.with.min.requirements" +section "Build.docs" +if [[ ($PY != 2.6) && ($PY != 3.2) ]]; then + sudo apt-get install -qq texlive texlive-latex-extra dvipng + make html +fi +section_end "Build.docs" section "Flake8.test" flake8 --exit-zero --exclude=test_*,six.py skimage doc/examples viewer_examples @@ -14,13 +22,13 @@ section_end "Flake8.test" section "Install.optional.dependencies" # Install Qt and then update the Matplotlib settings -if [[ $TRAVIS_PYTHON_VERSION == 2.7* ]]; then +if [[ $PY == 2.7* ]]; then sudo apt-get install -q python-qt4 # http://stackoverflow.com/a/9716100 LIBS=( PyQt4 sip.so ) - VAR=( $(which -a python$TRAVIS_PYTHON_VERSION) ) + VAR=( $(which -a python$PY) ) GET_PYTHON_LIB_CMD="from distutils.sysconfig import get_python_lib; print (get_python_lib())" LIB_VIRTUALENV_PATH=$(python -c "$GET_PYTHON_LIB_CMD") @@ -38,14 +46,14 @@ else fi # imread does NOT support py3.2 -if [[ $TRAVIS_PYTHON_VERSION != 3.2 ]]; then +if [[ $PY != 3.2 ]]; then sudo apt-get install -q libtiff4-dev libwebp-dev libpng12-dev xcftools retry pip install -q imread fi # Install SimpleITK from wheelhouse if available (not 3.2 or 3.4) -if [[ $TRAVIS_PYTHON_VERSION =~ 3\.[24] ]]; then - echo "SimpleITK unavailable on $TRAVIS_PYTHON_VERSION" +if [[ $PY =~ 3\.[24] ]]; then + echo "SimpleITK unavailable on $PY" else retry pip install -q SimpleITK $WHEELHOUSE fi @@ -53,7 +61,7 @@ fi sudo apt-get install -q libfreeimage3 retry pip install -q astropy $WHEELHOUSE -if [[ $TRAVIS_PYTHON_VERSION == 2.* ]]; then +if [[ $PY == 2.* ]]; then retry pip install -q pyamg fi @@ -65,7 +73,7 @@ section_end "Install.optional.dependencies" section "Run.doc.examples" # Matplotlib settings - do not show figures during doc examples -if [[ $TRAVIS_PYTHON_VERSION == 2.7* ]]; then +if [[ $PY == 2.7* ]]; then MPL_DIR=$HOME/.matplotlib else MPL_DIR=$HOME/.config/matplotlib @@ -96,7 +104,7 @@ for f in doc/examples/applications/*.py; do done # Now configure Matplotlib to use Qt4 -if [[ $TRAVIS_PYTHON_VERSION == 2.7* ]]; then +if [[ $PY == 2.7* ]]; then MPL_QT_API=PyQt4 export QT_API=pyqt else @@ -112,7 +120,7 @@ section_end "Run.doc.applications" section "Test.with.optional.dependencies" # run tests again with optional dependencies to get more coverage -if [[ $TRAVIS_PYTHON_VERSION == 3.3 ]]; then +if [[ $PY == 3.3 ]]; then TEST_ARGS="$TEST_ARGS --with-cov --cover-package skimage" fi nosetests $TEST_ARGS