code: def _check_parameter_dependencies(self, parameters):
          
          # Warning: parameters only provide reverse dependencies; we reverse them into standard dependencies.
          # deep_revdeps: set of fields a field depend indirectly upon
          deep_revdeps = collections.defaultdict(set)
          # Actual, direct dependencies
          deps = collections.defaultdict(set)
  
          for name, parameter in parameters.items():
              if isinstance(parameter, declarations.Parameter):
                  field_revdeps = parameter.get_revdeps(parameters)
                  if not field_revdeps:
                      continue
                  deep_revdeps[name] = set.union(*(deep_revdeps[dep] for dep in field_revdeps))
                  deep_revdeps[name] |= set(field_revdeps)
                  for dep in field_revdeps:
                      deps[dep].add(name)
  
          # Check for cyclical dependencies
          cyclic = [name for name, field_deps in deep_revdeps.items() if name in field_deps]
          if cyclic:
              raise errors.CyclicDefinitionError(
                  "Cyclic definition detected on %r; Params around %s"
                  % (self.factory, ', '.join(cyclic)))
          return deps
docs: Find out in what order parameters should be called.