def make_model(self, policies=None, initial_conditions=True,
                   reverse_effects=False, model_name='indra_model'):
        ppa = PysbPreassembler(self.statements)
        self.processed_policies = self.process_policies(policies)
        ppa.replace_activities()
        if reverse_effects:
            ppa.add_reverse_effects()
        self.statements = ppa.statements
        self.model = Model()
        self.model.name = model_name
        self.agent_set = BaseAgentSet()
        self._monomers()
        for agent_name, agent in self.agent_set.items():
            m = Monomer(_n(agent_name), agent.sites, agent.site_states)
            m.site_annotations = agent.site_annotations
            self.model.add_component(m)
            for db_name, db_ref in agent.db_refs.items():
                a = get_annotation(m, db_name, db_ref)
                if a is not None:
                    self.model.add_annotation(a)
            for af in agent.active_forms:
                self.model.add_annotation(Annotation(m, af,
                                                     'has_active_pattern'))
            for iaf in agent.inactive_forms:
                self.model.add_annotation(Annotation(m, iaf,
                                                     'has_inactive_pattern'))
            for at in agent.activity_types:
                act_site_cond = {at: 'active'}
                self.model.add_annotation(Annotation(m, act_site_cond,
                                                     'has_active_pattern'))
                inact_site_cond = {at: 'inactive'}
                self.model.add_annotation(Annotation(m, inact_site_cond,
                                                     'has_inactive_pattern'))
        self._assemble()
        if initial_conditions:
            self.add_default_initial_conditions()
        return self.model