<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def make_model(self, policies=None, initial_conditions=True, reverse_effects=False, model_name='indra_model'):
 """Assemble the PySB model from the collected INDRA Statements. This method assembles a PySB model from the set of INDRA Statements. The assembled model is both returned and set as the assembler's model argument. Parameters policies : Optional[Union[str, dict]] A string or dictionary that defines one or more assembly policies. If policies is a string, it defines a global assembly policy that applies to all Statement types. Example: one_step, interactions_only A dictionary of policies has keys corresponding to Statement types and values to the policy to be applied to that type of Statement. For Statement types whose policy is undefined, the 'default' policy is applied. Example: {'Phosphorylation': 'two_step'} initial_conditions : Optional[bool] If True, default initial conditions are generated for the Monomers in the model. Default: True reverse_effects : Optional[bool] If True, reverse rules are added to the model for activity, modification and amount regulations that have no corresponding reverse effects. Default: False model_name : Optional[str] The name attribute assigned to the PySB Model object. Default: "indra_model" Returns ------- model : pysb.Model The assembled PySB model object. """

        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()
        # Collect information about the monomers/self.agent_set from the
        # statements
        self._monomers()
        # Add the monomers to the model based on our BaseAgentSet
        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)
            # Iterate over the active_forms
            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'))

        # Iterate over the statements to generate rules
        self._assemble()
        # Add initial conditions
        if initial_conditions:
            self.add_default_initial_conditions()

        return self.model