class MultinomialModelRunner(ModelRunner):
    def run(self, args):
        self.reader = MultinomialCountsReader(args.mcnt_file_name)
        self.writer = JointMultiMixWriter(args.jmm_file_name)
        
        ModelRunner.run(self, args)
               
    def _train(self, args):
        if args.subsample_size > 0:
            counts = self._subsample(args.subsample_size)
        else:
            counts = self.reader.get_counts()
                   
        self.priors_parser.load_from_file(args.priors_file)
        self.priors = self.priors_parser.to_dict()
        
        self._write_priors()
        
        data = MultinomialData(counts)
        
        self.parameters = self.model.train(data, self.priors,
                                            args.max_iters, args.convergence_threshold)

    def _classify_chromosome(self, chr_name):
        counts = self.reader.get_counts(chr_name)
        jcnt_rows = self.reader.get_rows(chr_name)
        
        end = self.reader.get_chr_size(chr_name)

        n = int(1e5)
        start = 0
        stop = min(n, end)
        

        while start < end:
            sub_counts = counts[start:stop]
            sub_rows = jcnt_rows[start:stop]
                              
            data = MultinomialData(sub_counts)            
                
            resp = self.model.classify(data, self.parameters)
        
            self.writer.write_data(chr_name, sub_rows, resp)
            
            start = stop
            stop = min(stop + n, end)
 def run(self, args):
     self.reader = MultinomialCountsReader(args.mcnt_file_name)
     self.writer = JointMultiMixWriter(args.jmm_file_name)
     
     ModelRunner.run(self, args)