          else:
              return None
  
      @classmethod
      def default_matcher(cls, vocab, data_dir=None):
          if data_dir is None:
              data_dir = cls.default_data_dir()
          return Matcher.from_dir(data_dir, vocab)
  
      def __init__(self, data_dir=None, vocab=None, tokenizer=None, tagger=None,
                   parser=None, entity=None, matcher=None, serializer=None):
          if data_dir is None:
              data_dir = self.default_data_dir()
 
</s> remove         self.parser.model.end_training()
        self.entity.model.end_training()
        self.tagger.model.end_training()
 </s> add         self.parser.model.end_training(path.join(data_dir, 'deps', 'model'))
        self.entity.model.end_training(path.join(data_dir, 'ner', 'model'))
        self.tagger.model.end_training(path.join(data_dir, 'pos', 'model')) </s> remove     def __init__(self, Vocab vocab, templates):
        self.mem = Pool()
 </s> add     @classmethod
    def from_dir(cls, data_dir, vocab):
        if path.exists(path.join(data_dir, 'templates.json')):
            templates = json.loads(open(path.join(data_dir, 'templates.json')))
        else:
            templates = cls.default_templates()
        model = Model(vocab.morphology.n_tags, templates, data_dir)
        return cls(vocab, model)

    def __init__(self, Vocab vocab, model): </s> remove     def end_training(self):
 </s> add     def end_training(self, model_loc=None):
        if model_loc is None:
            model_loc = self.model_loc </s> remove     def make_lemmatizer(self):
        return None
 </s> add     @classmethod
    def blank(cls, vocab, templates):
        model = Model(vocab.morphology.n_tags, templates, model_loc=None)
        return cls(vocab, model)
    def default_matcher(cls, vocab, data_dir):
        if path.exists(data_dir):
            return Matcher.from_dir(data_dir, vocab)
        else:
            return None
          else:
              return None
  
      @classmethod
    def default_matcher(cls, vocab, data_dir):
        if path.exists(data_dir):
            return Matcher.from_dir(data_dir, vocab)
        else:
            return None
    def default_matcher(cls, vocab, data_dir):
        if path.exists(data_dir):
            return Matcher.from_dir(data_dir, vocab)
        else:
            return None
    def default_matcher(cls, vocab, data_dir):
        if path.exists(data_dir):
            return Matcher.from_dir(data_dir, vocab)
        else:
            return None
    def default_matcher(cls, vocab, data_dir):
        if path.exists(data_dir):
            return Matcher.from_dir(data_dir, vocab)
        else:
            return None
  
      def __init__(self, data_dir=None, vocab=None, tokenizer=None, tagger=None,
                   parser=None, entity=None, matcher=None, serializer=None):
          if data_dir is None:
              data_dir = self.default_data_dir()
keep keep keep keep replace replace replace replace keep keep keep keep keep
 * Tagger training now working. Still need to test load/save of model. Morphology still broken. 
spacy/language.py