docs: def _init_from_dict(self, model_dict):
          """
          Initiate self from a model_dict to make sure attributes such as vars, params are available.
  
          Creates lists of alphabetically sorted independent vars, dependent vars, sigma vars, and parameters.
          Finally it creates a signature for this model so it can be called nicely. This signature only contains
          independent vars and params, as one would expect.
  
          :param model_dict: dict of (dependent_var, expression) pairs.
          """
          sort_func = lambda symbol: symbol.name
          self.model_dict = OrderedDict(sorted(model_dict.items(),
                                               key=lambda i: sort_func(i[0])))
          # Everything at the bottom of the toposort is independent, at the top
          # dependent, and the rest interdependent.
          ordered = list(toposort(self.connectivity_mapping))
          independent = sorted(ordered.pop(0), key=sort_func)
          self.dependent_vars = sorted(ordered.pop(-1), key=sort_func)
          self.interdependent_vars = sorted(
              [item for items in ordered for item in items],
              key=sort_func
          )
          # `independent` contains both params and vars, needs to be separated
          self.independent_vars = [s for s in independent if
                                   not isinstance(s, Parameter) and not s in self]
          self.params = [s for s in independent if isinstance(s, Parameter)]
  
          try:
              assert not any(isinstance(var, Parameter)
                             for var in self.dependent_vars)
              assert not any(isinstance(var, Parameter)
                             for var in self.interdependent_vars)
          except AssertionError:
              raise ModelError('`Parameter`\'s can not feature in the role '
                               'of `Variable`')
          # Make Variable object corresponding to each depedent var.
          self.sigmas = {var: Variable(name='sigma_{}'.format(var.name))
                         for var in self.dependent_vars}