code: def infer_dict(node, context=None):
      
      call = arguments.CallSite.from_call(node)
      if call.has_invalid_arguments() or call.has_invalid_keywords():
          raise UseInferenceDefault
  
      args = call.positional_arguments
      kwargs = list(call.keyword_arguments.items())
  
      if not args and not kwargs:
          # dict()
          return nodes.Dict()
      elif kwargs and not args:
          # dict(a=1, b=2, c=4)
          items = [(nodes.Const(key), value) for key, value in kwargs]
      elif len(args) == 1 and kwargs:
          # dict(some_iterable, b=2, c=4)
          elts = _get_elts(args[0], context)
          keys = [(nodes.Const(key), value) for key, value in kwargs]
          items = elts + keys
      elif len(args) == 1:
          items = _get_elts(args[0], context)
      else:
          raise UseInferenceDefault()
  
      value = nodes.Dict(
          col_offset=node.col_offset, lineno=node.lineno, parent=node.parent
      )
      value.postinit(items)
      return value
docs: Try to infer a dict call to a Dict node.
  
      The function treats the following cases:
  
          * dict()
          * dict(mapping)
          * dict(iterable)
          * dict(iterable, **kwargs)
          * dict(mapping, **kwargs)
          * dict(**kwargs)
  
      If a case can't be inferred, we'll fallback to default inference.