docs: def _check(self, calc_dict, changes=None):
          '''
          cplan._check(calc_dict) should be called only by the calc_dict object itself.
          The check method makes sure that all of the proactive methods on the calc_dict are run; if
          the optional keyword argument changes is given, then checks are only run for the list of
          changes given.
          '''
          if changes is None:
              changes = self.afferents
              # run the zero-reqs
              for req in self.initializers:
                  calc_dict._run_node(req)
          else:
              # invalidate these data if needed
              dpts = set(dpt for aff in changes for dpt in self.dependants[aff])
              for dpt in dpts: del calc_dict[dpt]
          # now, make sure that proactive dependants get run
          proactives = set(node for change in changes for node in self.proactive_dependants[change])
          for node in proactives:
              calc_dict._run_node(node)