@NotNull
  public static PyCallExpression.PyArgumentsMapping mapArguments(@NotNull PyCallSiteExpression callSite,
                                                                 @NotNull PyCallable callable,
                                                                 @NotNull TypeEvalContext context) {
    final PyCallableType callableType = PyUtil.as(context.getType(callable), PyCallableType.class);
    if (callableType == null) return PyCallExpression.PyArgumentsMapping.empty(callSite);

    final List<PyCallableParameter> parameters = callableType.getParameters(context);
    if (parameters == null) return PyCallExpression.PyArgumentsMapping.empty(callSite);

    final PyResolveContext resolveContext = PyResolveContext.defaultContext(context);
    final List<PyExpression> arguments = callSite.getArguments(callable);
    final List<PyCallableParameter> explicitParameters = filterExplicitParameters(parameters, callable, callSite, resolveContext);
    final List<PyCallableParameter> implicitParameters = parameters.subList(0, parameters.size() - explicitParameters.size());

    final ArgumentMappingResults mappingResults = analyzeArguments(arguments, explicitParameters, context);

    return new PyCallExpression.PyArgumentsMapping(callSite,
                                                   callableType,
                                                   implicitParameters,
                                                   mappingResults.getMappedParameters(),
                                                   mappingResults.getUnmappedParameters(),
                                                   mappingResults.getUnmappedContainerParameters(),
                                                   mappingResults.getUnmappedArguments(),
                                                   mappingResults.getParametersMappedToVariadicPositionalArguments(),
                                                   mappingResults.getParametersMappedToVariadicKeywordArguments(),
                                                   mappingResults.getMappedTupleParameters());
  }
@NotNull
  public static PyCallExpression.PyArgumentsMapping mapArguments(@NotNull PyCallSiteExpression callSite,
                                                                 @NotNull PyCallable callable,
                                                                 @NotNull TypeEvalContext context)