code: def visit_Call(self, node):
          
          args = [self.visit(arg) for arg in node.args]
          func = self.visit(node.func)
          params = args + [func or []]
          return list({frozenset.union(*p) for p in itertools.product(*params)})
docs: Function call depend on all function use in the call.
  
          >> a = foo(bar(c) or foobar(d))
  
          Return type depend on [foo, bar] or [foo, foobar]