code: def from_dict(cls, d):
          
          makepred, charspan = Pred.surface_or_abstract, Lnk.charspan
          top = d.get('top')
          nodes, edges = [], []
          for nid, node in d.get('nodes', {}).items():
              props = node.get('properties', {})
              if 'type' in node:
                  props[CVARSORT] = node['type']
              if not props:
                  props = None
              lnk = None
              if 'lnk' in node:
                  lnk = charspan(node['lnk']['from'], node['lnk']['to'])
              nodes.append(
                  Node(
                      nodeid=nid,
                      pred=makepred(node['label']),
                      sortinfo=props,
                      lnk=lnk,
                      carg=node.get('carg')
                  )
              )
              edges.extend(
                  (nid, rargname, tgtnid)
                  for rargname, tgtnid in node.get('edges', {}).items()
              )
          nodes.sort(key=lambda n: (n.cfrom, -n.cto))
          return cls(top, nodes=nodes, edges=edges)
docs: Decode a dictionary, as from :meth:`to_dict`, into an Eds object.