code: def schema_resolve_refs(schema, ref_resolver=None, root=None):
      
      # FIXME more stable implementation that only attempts to resolve {"$ref"} objects where they are allowed.
      if isinstance(schema, dict):
          if len(schema) == 1 and "$ref" in schema and isinstance(schema["$ref"], six.string_types):
              reference = schema["$ref"]
              if reference.startswith("#"):
                  # TODO should also resolve any paths within the reference, which would need to be deferred.
                  return root
              return ref_resolver(reference)
  
          resolved = {}
          for k, v in schema.items():
              resolved[k] = schema_resolve_refs(v,
                                                ref_resolver=ref_resolver,
                                                root=root if root is not None else resolved)
          return resolved
      if isinstance(schema, (list, tuple)):
          return [schema_resolve_refs(v, ref_resolver=ref_resolver, root=root) for v in schema]
      return schema
docs: Helper method for decoding references. Self-references are resolved automatically; other references are
      resolved using a callback function.
  
      :param object schema:
      :param callable ref_resolver:
      :param None root:
      :return: