Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Our minimal imageio version cannot read pathlib Paths #3965

Closed
jni opened this issue Jun 13, 2019 · 1 comment · Fixed by #3969
Closed

Our minimal imageio version cannot read pathlib Paths #3965

jni opened this issue Jun 13, 2019 · 1 comment · Fixed by #3969

Comments

@jni
Copy link
Member

jni commented Jun 13, 2019

Description

Discovered on #3961 (comment)

See this build for an example failure: https://travis-ci.org/scikit-image/scikit-image/jobs/545053031#L2708

This causes the test test_masked_registration_padfield_data to fail, since it uses a Path to load the input file.

Way to reproduce

I haven't yet investigated locally.

References

#3331 #3669 both report further issues with pathlib.

@hmaarrfk
Copy link
Member

Gotta go to 2.3.0

(skdev) mark2@xps ~/g/scikit-image minimium_imageio|✓                           
$ pip install imageio==2.2.0                                                    
Collecting imageio==2.2.0
  Downloading https://files.pythonhosted.org/packages/a0/4b/f68b2a2e3e98bc006f54ff6fee50f20c7ca4052ec6da68c58c299c7bedf5/imageio-2.2.0.tar.gz (3.3MB)
     |████████████████████████████████| 3.3MB 1.2MB/s 
Requirement already satisfied: numpy in /home/mark2/miniconda3/envs/skdev/lib/python3.7/site-packages (from imageio==2.2.0) (1.16.4)
Requirement already satisfied: pillow in /home/mark2/miniconda3/envs/skdev/lib/python3.7/site-packages (from imageio==2.2.0) (6.0.0)
Building wheels for collected packages: imageio
  Building wheel for imageio (setup.py) ... \^[[/^[[done
  Stored in directory: /home/mark2/.cache/pip/wheels/93/41/b3/e4f5788551792cac4742308f077c32b91753b94b3010d44c5d
Successfully built imageio
Installing collected packages: imageio
  Found existing installation: imageio 2.3.0
    Uninstalling imageio-2.3.0:
      Successfully uninstalled imageio-2.3.0
Successfully installed imageio-2.2.0
(skdev) mark2@xps ~/g/scikit-image minimium_imageio|✓                           
$ pytest ./skimage/feature/tests/test_masked_register_translation.py::test_maske
  d_registration_padfield_data                                                  
============================= test session starts ==============================
platform linux -- Python 3.7.3, pytest-4.6.3, py-1.8.0, pluggy-0.12.0
rootdir: /home/mark2/git/scikit-image/skimage/feature
plugins: forked-1.0.2, xdist-1.29.0, localserver-0.5.0
collected 1 item                                                               

skimage/feature/tests/test_masked_register_translation.py F              [100%]

=================================== FAILURES ===================================
____________________ test_masked_registration_padfield_data ____________________

    def test_masked_registration_padfield_data():
        """ Masked translation registration should behave like in the original
        publication """
        # Test translated from MATLABimplementation `MaskedFFTRegistrationTest`
        # file. You can find the source code here:
        # http://www.dirkpadfield.com/Home/MaskedFFTRegistrationCode.zip
    
        shifts = [(75, 75), (-130, 130), (130, 130)]
        for xi, yi in shifts:
    
            fixed_image = imread(
>               IMAGES_DIR / 'OriginalX{:d}Y{:d}.png'.format(xi, yi))

skimage/feature/tests/test_masked_register_translation.py:95: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
skimage/io/_io.py:48: in imread
    img = call_plugin('imread', fname, plugin=plugin, **plugin_args)
skimage/io/manage_plugins.py:210: in call_plugin
    return func(*args, **kwargs)
skimage/io/_plugins/imageio_plugin.py:10: in imread
    return np.asarray(imageio_imread(*args, **kwargs))
../../miniconda3/envs/skdev/lib/python3.7/site-packages/imageio/core/functions.py:200: in imread
    reader = read(uri, format, 'i', **kwargs)
../../miniconda3/envs/skdev/lib/python3.7/site-packages/imageio/core/functions.py:117: in get_reader
    request = Request(uri, 'r' + mode, **kwargs)
../../miniconda3/envs/skdev/lib/python3.7/site-packages/imageio/core/request.py:120: in __init__
    self._parse_uri(uri)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <imageio.core.request.Request object at 0x7f16420caac8>
uri = PosixPath('/home/mark2/git/scikit-image/skimage/feature/tests/data/OriginalX75Y75.png')

    def _parse_uri(self, uri):
        """ Try to figure our what we were given
        """
        py3k = sys.version_info[0] == 3
        is_read_request = self.mode[0] == 'r'
        is_write_request = self.mode[0] == 'w'
    
        if isinstance(uri, string_types):
            # Explicit
            if uri.startswith('imageio:'):
                if is_write_request:
                    raise RuntimeError('Cannot write to the standard images.')
                fn = uri.split(':', 1)[-1].lower()
                fn, _, zip_part = fn.partition('.zip/')
                if zip_part:
                    fn += '.zip'
                if fn not in EXAMPLE_IMAGES:
                    raise ValueError('Unknown standard image %r.' % fn)
                self._uri_type = URI_FILENAME
                self._filename = get_remote_file('images/' + fn, auto=True)
                if zip_part:
                    self._filename += '/' + zip_part
            elif uri.startswith('http://') or uri.startswith('https://'):
                self._uri_type = URI_HTTP
                self._filename = uri
            elif uri.startswith('ftp://') or uri.startswith('ftps://'):
                self._uri_type = URI_FTP
                self._filename = uri
            elif uri.startswith('file://'):
                self._uri_type = URI_FILENAME
                self._filename = uri[7:]
            elif uri.startswith(SPECIAL_READ_URIS) and is_read_request:
                self._uri_type = URI_BYTES
                self._filename = uri
            elif uri.startswith(RETURN_BYTES) and is_write_request:
                self._uri_type = URI_BYTES
                self._filename = uri
            # Less explicit (particularly on py 2.x)
            elif py3k:
                self._uri_type = URI_FILENAME
                self._filename = uri
            else:  # pragma: no cover - our ref for coverage is py3k
                try:
                    isfile = os.path.isfile(uri)
                except Exception:
                    isfile = False  # If checking does not even work ...
                if isfile:
                    self._uri_type = URI_FILENAME
                    self._filename = uri
                elif len(uri) < 256:  # Can go wrong with veeery tiny images
                    self._uri_type = URI_FILENAME
                    self._filename = uri
                elif isinstance(uri, binary_type) and is_read_request:
                    self._uri_type = URI_BYTES
                    self._filename = '<bytes>'
                    self._bytes = uri
                else:
                    self._uri_type = URI_FILENAME
                    self._filename = uri
        elif py3k and isinstance(uri, binary_type) and is_read_request:
            self._uri_type = URI_BYTES
            self._filename = '<bytes>'
            self._bytes = uri
        # Files
        elif is_read_request:
            if hasattr(uri, 'read') and hasattr(uri, 'close'):
                self._uri_type = URI_FILE
                self._filename = '<file>'
                self._file = uri
        elif is_write_request:
            if hasattr(uri, 'write') and hasattr(uri, 'close'):
                self._uri_type = URI_FILE
                self._filename = '<file>'
                self._file = uri
    
        # Expand user dir
        if self._uri_type == URI_FILENAME and self._filename.startswith('~'):
            self._filename = os.path.expanduser(self._filename)
    
        # Check if a zipfile
        if self._uri_type == URI_FILENAME:
            # Search for zip extension followed by a path separater
            for needle in ['.zip/', '.zip\\']:
                zip_i = self._filename.lower().find(needle)
                if zip_i > 0:
                    zip_i += 4
                    self._uri_type = URI_ZIPPED
                    self._filename_zip = (self._filename[:zip_i],
                                          self._filename[zip_i:].lstrip('/\\'))
                    break
    
        # Check if we could read it
        if self._uri_type is None:
            uri_r = repr(uri)
            if len(uri_r) > 60:
                uri_r = uri_r[:57] + '...'
>           raise IOError("Cannot understand given URI: %s." % uri_r)
E           OSError: Cannot understand given URI: PosixPath('/home/mark2/git/scikit-image/skimage/feature/t....

../../miniconda3/envs/skdev/lib/python3.7/site-packages/imageio/core/request.py:218: OSError
=========================== 1 failed in 0.29 seconds ===========================
(skdev) mark2@xps ~/g/scikit-image minimium_imageio|✓                                                   
$ pip install imageio==2.3.0                                                                            
Collecting imageio==2.3.0
  Using cached https://files.pythonhosted.org/packages/a7/1d/33c8686072148b3b0fcc12a2e0857dd8316b8ae20a0fa66c8d6a6d01c05c/imageio-2.3.0-py2.py3-none-any.whl
Requirement already satisfied: numpy in /home/mark2/miniconda3/envs/skdev/lib/python3.7/site-packages (from imageio==2.3.0) (1.16.4)
Requirement already satisfied: pillow in /home/mark2/miniconda3/envs/skdev/lib/python3.7/site-packages (from imageio==2.3.0) (6.0.0)
Installing collected packages: imageio
  Found existing installation: imageio 2.2.0
    Uninstalling imageio-2.2.0:
      Successfully uninstalled imageio-2.2.0
Successfully installed imageio-2.3.0
(skdev) mark2@xps ~/g/scikit-image minimium_imageio|✓                                                   
$ pytest ./skimage/feature/tests/test_masked_register_translation.py::test_masked_registration_padfield_
  data                                                                                                  
========================================= test session starts ==========================================
platform linux -- Python 3.7.3, pytest-4.6.3, py-1.8.0, pluggy-0.12.0
rootdir: /home/mark2/git/scikit-image/skimage/feature
plugins: forked-1.0.2, xdist-1.29.0, localserver-0.5.0
collected 1 item                                                                                       

skimage/feature/tests/test_masked_register_translation.py .                                      [100%]

======================================= 1 passed in 3.83 seconds =======================================
(skdev) mark2@xps ~/g/scikit-image minimium_imageio|✓

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants