deep-learning-with-pytorch / dlwpt-code

Code for the book Deep Learning with PyTorch by Eli Stevens, Luca Antiga, and Thomas Viehmann.

Home Page:https://www.manning.com/books/deep-learning-with-pytorch

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

p2ch10_explore_data.ipynp import errors for the util.disk

alphahmed opened this issue · comments

It seems that BytesType and BytesIO are no longer included in the diskcashe 5.0.3 module

ImportError                               Traceback (most recent call last)
<ipython-input-2-6816886bb81a> in <module>
----> 1 from p2ch10.dsets_edited import getCandidateInfoList, getCt, LunaDataset
      2 candidateInfo_list = getCandidateInfoList(requireOnDisk_bool=False)
      3 positiveInfo_list = [x for x in candidateInfo_list if x[0]]
      4 diameter_list = [x[1] for x in positiveInfo_list]

~/PyTorchBook/dlwpt-code/p2ch10/dsets_edited.py in <module>
     14 from torch.utils.data import Dataset
     15 
---> 16 from util.disk import getCache
     17 from util.util import XyzTuple, xyz2irc
     18 from util.logconf import logging

~/PyTorchBook/dlwpt-code/util/disk.py in <module>
      2 
      3 from diskcache import FanoutCache, Disk
----> 4 from diskcache.core import BytesType, MODE_BINARY, BytesIO
      5 
      6 from util.logconf import logging

ImportError: cannot import name 'BytesType' from 'diskcache.core'

A name error results when BytesType is called in the GzipDisk class in disk.py due to the BytesType removal

NameError                                 Traceback (most recent call last)
<ipython-input-8-71970eef6fb4> in <module>
      1 series_uid = positiveSample_list[11][2]
----> 2 showCandidate(series_uid)

~/PyTorchBook/dlwpt-code/p2ch10/vis_edited.py in showCandidate(series_uid, batch_ndx, **kwargs)
     35 
     36     ct = Ct(series_uid)
---> 37     ct_t, pos_t, series_uid, center_irc = ds[batch_ndx]
     38     ct_a = ct_t[0].numpy()
     39 

~/PyTorchBook/dlwpt-code/p2ch10/dsets_edited.py in __getitem__(self, ndx)
    181         width_irc = (32, 48, 48)
    182 
--> 183         candidate_a, center_irc = getCtRawCandidate(
    184             candidateInfo_tup.series_uid,
    185             candidateInfo_tup.center_xyz,

~/anaconda3/lib/python3.8/site-packages/diskcache/core.py in wrapper(*args, **kwargs)
   1859                     result = func(*args, **kwargs)
   1860                     if expire is None or expire > 0:
-> 1861                         self.set(key, result, expire, tag=tag, retry=True)
   1862 
   1863                 return result

~/anaconda3/lib/python3.8/site-packages/diskcache/fanout.py in set(self, key, value, expire, read, tag, retry)
     84         shard = self._shards[index]
     85         try:
---> 86             return shard.set(key, value, expire, read, tag, retry)
     87         except Timeout:
     88             return False

~/anaconda3/lib/python3.8/site-packages/diskcache/core.py in set(self, key, value, expire, read, tag, retry)
    770         db_key, raw = self._disk.put(key)
    771         expire_time = None if expire is None else now + expire
--> 772         size, mode, filename, db_value = self._disk.store(value, read, key=key)
    773         columns = (expire_time, tag, size, mode, filename, db_value)
    774 

~/PyTorchBook/dlwpt-code/util/disk_edited.py in store(self, value, read, key)
     27         """
     28         # pylint: disable=unidiomatic-typecheck
---> 29         if type(value) is BytesType:
     30             if read:
     31                 value = value.read()

NameError: name 'BytesType' is not defined

Changing the line if type(value) is BytesType: into if isinstance(value, bytes) seems to work, and the following str_io = BytesIO() seems to work fine with importing the BytesIO from io module.

BytesIO() is also removed from the 'diskcache.core'. In disk.py, import io, and replace str_io = BytesIO() with str_io = io.BytesIO()

My suggestions of importing BytesIO from the io module, and replacing if type(value) is BytesType: with if isinstance(value, bytes) seem to be working fine, therefore, This issue can be closed!