<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def get_complexes(self):
 """Extract INDRA Complex Statements."""

        qstr = "$.events.frames[@.type is 'complex-assembly']"
        res = self.tree.execute(qstr)
        if res is None:
            return

        for r in res:
            epistemics = self._get_epistemics(r)
            if epistemics.get('negated'):
                continue
            # Due to an issue with the REACH output serialization
            # (though seemingly not with the raw mentions), sometimes
            # a redundant complex-assembly event is reported which can
            # be recognized by the missing direct flag, which we can filter
            # for here
            if epistemics.get('direct') is None:
                continue
            annotations, context = self._get_annot_context(r)
            args = r['arguments']
            sentence = r['verbose-text']
            members = []
            agent_coordinates = []
            for a in args:
                agent, coords = self._get_agent_from_entity(a['arg'])
                members.append(agent)
                agent_coordinates.append(coords)
            annotations['agents']['coords'] = agent_coordinates
            ev = Evidence(source_api='reach', text=sentence,
                          annotations=annotations, pmid=self.citation,
                          context=context, epistemics=epistemics)
            stmt = Complex(members, ev)
            self.statements.append(stmt)