code: def is_connected(self):
          
          nids = set(self._nodeids)  # the nids left to find
          if len(nids) == 0:
              raise XmrsError('Cannot compute connectedness of an empty Xmrs.')
          # build a basic dict graph of relations
          edges = []
          # label connections
          for lbl in self.labels():
              lblset = self.labelset(lbl)
              edges.extend((x, y) for x in lblset for y in lblset if x != y)
          # argument connections
          _vars = self._vars
          for nid in nids:
              for rarg, tgt in self.args(nid).items():
                  if tgt not in _vars:
                      continue
                  if IVARG_ROLE in _vars[tgt]['refs']:
                      tgtnids = list(_vars[tgt]['refs'][IVARG_ROLE])
                  elif tgt in self._hcons:
                      tgtnids = list(self.labelset(self.hcon(tgt)[2]))
                  elif 'LBL' in _vars[tgt]['refs']:
                      tgtnids = list(_vars[tgt]['refs']['LBL'])
                  else:
                      tgtnids = []
                  # connections are bidirectional
                  edges.extend((nid, t) for t in tgtnids if nid != t)
                  edges.extend((t, nid) for t in tgtnids if nid != t)
          g = {nid: set() for nid in nids}
          for x, y in edges:
              g[x].add(y)
          connected_nids = _bfs(g)
          if connected_nids == nids:
              return True
          elif connected_nids.difference(nids):
              raise XmrsError(
                  'Possibly bogus nodeids: {}'
                  .format(', '.join(connected_nids.difference(nids)))
              )
          return False
docs: Return `True` if the Xmrs represents a connected graph.
  
          Subgraphs can be connected through things like arguments,
          QEQs, and label equalities.