# Buggy code
def _smart_save(
    self,
    fname,
    separately=None,
    sep_limit=10 * 1024**2,
    ignore=frozenset(),
    pickle_protocol=2,
):
    """Save the object to a file. Used internally by :meth:`gensim.utils.SaveLoad.save()`.

    Parameters
    ----------
    fname : str
        Path to file.
    separately : list, optional
        Iterable of attributes than need to store distinctly.
    sep_limit : int, optional
        Limit for separation.
    ignore : frozenset, optional
        Attributes that shouldn't be store.
    pickle_protocol : int, optional
        Protocol number for pickle.

    Notes
    -----
    If `separately` is None, automatically detect large numpy/scipy.sparse arrays in the object being stored,
    and store them into separate files. This avoids pickle memory errors and allows mmap'ing large arrays back
    on load efficiently.

    You can also set `separately` manually, in which case it must be a list of attribute names to be stored
    in separate files. The automatic check is not performed in this case.

    """
    compress, subname = SaveLoad._adapt_by_suffix(fname)

    restores = self._save_specials(
        fname, separately, sep_limit, ignore, pickle_protocol, compress, subname
    )
    try:
        pickle(self, fname, protocol=pickle_protocol)
    finally:
        # restore attribs handled specially
        for obj, asides in restores:
            for attrib, val in asides.items():
                with ignore_deprecation_warning():
                    setattr(obj, attrib, val)
    logger.info("saved %s", fname)


# Traceback (FileNotFoundError)
[INFO]  2018-01-21T20:44:59.613Z    f2689816-feeb-11e7-b397-b7ff2947dcec    testing keys in event dict
[INFO]  2018-01-21T20:44:59.614Z    f2689816-feeb-11e7-b397-b7ff2947dcec    loading model from s3://data-d2v/trained_models/model_law
[INFO]  2018-01-21T20:44:59.614Z    f2689816-feeb-11e7-b397-b7ff2947dcec    loading Doc2Vec object from s3://data-d2v/trained_models/model_law
[INFO]  2018-01-21T20:44:59.650Z    f2689816-feeb-11e7-b397-b7ff2947dcec    Found credentials in environment variables.
[INFO]  2018-01-21T20:44:59.707Z    f2689816-feeb-11e7-b397-b7ff2947dcec    Starting new HTTPS connection (1): s3.eu-west-1.amazonaws.com
[INFO]  2018-01-21T20:44:59.801Z    f2689816-feeb-11e7-b397-b7ff2947dcec    Starting new HTTPS connection (2): s3.eu-west-1.amazonaws.com
[INFO]  2018-01-21T20:45:35.830Z    f2689816-feeb-11e7-b397-b7ff2947dcec    loading wv recursively from s3://data-d2v/trained_models/model_law.wv.* with mmap=None
[INFO]  2018-01-21T20:45:35.830Z    f2689816-feeb-11e7-b397-b7ff2947dcec    loading syn0 from s3://data-d2v/trained_models/model_law.wv.syn0.npy with mmap=None
[Errno 2] No such file or directory: 's3://data-d2v/trained_models/model_law.wv.syn0.npy': FileNotFoundError
Traceback (most recent call last):
File "/var/task/handler.py", line 20, in infer_handler
event['input_text'], event['model_file'], inferred_docs=10)
File "/var/task/infer_doc.py", line 26, in infer_docs
model = load_model(model_file)
File "/var/task/infer_doc.py", line 21, in load_model
return Doc2Vec.load(model_file)
File "/var/task/gensim/models/word2vec.py", line 1569, in load
model = super(Word2Vec, cls).load(*args, **kwargs)
File "/var/task/gensim/utils.py", line 282, in load
obj._load_specials(fname, mmap, compress, subname)
File "/var/task/gensim/models/word2vec.py", line 1593, in _load_specials
super(Word2Vec, self)._load_specials(*args, **kwargs)
File "/var/task/gensim/utils.py", line 301, in _load_specials
getattr(self, attrib)._load_specials(cfname, mmap, compress, subname)
File "/var/task/gensim/utils.py", line 312, in _load_specials
val = np.load(subname(fname, attrib), mmap_mode=mmap)
File "/var/task/numpy/lib/npyio.py", line 372, in load
fid = open(file, "rb")
FileNotFoundError: [Errno 2] No such file or directory: 's3://data-d2v/trained_models/model_law.wv.syn0.npy'

# Fixed code
def _smart_save(
    self,
    fname,
    separately=None,
    sep_limit=10 * 1024**2,
    ignore=frozenset(),
    pickle_protocol=PICKLE_PROTOCOL,
):
    """Save the object to a file. Used internally by :meth:`gensim.utils.SaveLoad.save()`.

    Parameters
    ----------
    fname : str
        Path to file.
    separately : list, optional
        Iterable of attributes than need to store distinctly.
    sep_limit : int, optional
        Limit for separation.
    ignore : frozenset, optional
        Attributes that shouldn't be store.
    pickle_protocol : int, optional
        Protocol number for pickle.

    Notes
    -----
    If `separately` is None, automatically detect large numpy/scipy.sparse arrays in the object being stored,
    and store them into separate files. This avoids pickle memory errors and allows mmap'ing large arrays back
    on load efficiently.

    You can also set `separately` manually, in which case it must be a list of attribute names to be stored
    in separate files. The automatic check is not performed in this case.

    """
    compress, subname = SaveLoad._adapt_by_suffix(fname)

    restores = self._save_specials(
        fname,
        separately,
        sep_limit,
        ignore,
        pickle_protocol,
        compress,
        subname,
    )
    try:
        pickle(self, fname, protocol=pickle_protocol)
    finally:
        # restore attribs handled specially
        for obj, asides in restores:
            for attrib, val in asides.items():
                with ignore_deprecation_warning():
                    setattr(obj, attrib, val)
    logger.info("saved %s", fname)