code: def get_complexes(self):
          
          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)
docs: Extract INDRA Complex Statements.