diff --git a/gensim/models/keyedvectors.py b/gensim/models/keyedvectors.py index b46c3a21ec..183f45ada3 100644 --- a/gensim/models/keyedvectors.py +++ b/gensim/models/keyedvectors.py @@ -278,9 +278,12 @@ def word_vec(self, word, use_norm=False): """ if word in self.vocab: if use_norm: - return self.syn0norm[self.vocab[word].index] + result = self.syn0norm[self.vocab[word].index] else: - return self.syn0[self.vocab[word].index] + result = self.syn0[self.vocab[word].index] + + result.setflags(write=False) + return result else: raise KeyError("word '%s' not in vocabulary" % word) diff --git a/gensim/test/test_doc2vec.py b/gensim/test/test_doc2vec.py index 4f0d4865f5..6feeab3bd2 100644 --- a/gensim/test/test_doc2vec.py +++ b/gensim/test/test_doc2vec.py @@ -386,6 +386,12 @@ def test_delete_temporary_training_data(self): self.model_sanity(model, keep_training=False) self.assertTrue(hasattr(model, 'syn1neg')) + def test_word_vec_non_writeable(self): + model = keyedvectors.KeyedVectors.load_word2vec_format(datapath('word2vec_pre_kv_c')) + vector = model['says'] + with self.assertRaises(ValueError): + vector *= 0 + @log_capture() def testBuildVocabWarning(self, l): """Test if logger warning is raised on non-ideal input to a doc2vec model"""