@NotNull
  private static PyCallExpression.PyArgumentsMapping mapArguments(@NotNull PyCallSiteExpression callSite,
                                                                  @NotNull List<PyExpression> arguments,
                                                                  @NotNull PyCallableType callableType,
                                                                  @NotNull TypeEvalContext context) {
    final List<PyCallableParameter> parameters = callableType.getParameters(context);
    if (parameters == null) return PyCallExpression.PyArgumentsMapping.empty(callSite);

    final int safeImplicitOffset = Math.min(callableType.getImplicitOffset(), parameters.size());
    final List<PyCallableParameter> explicitParameters = parameters.subList(safeImplicitOffset, parameters.size());
    final List<PyCallableParameter> implicitParameters = parameters.subList(0, safeImplicitOffset);
    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
  private static PyCallExpression.PyArgumentsMapping mapArguments(@NotNull PyCallSiteExpression callSite,
                                                                  @NotNull List<PyExpression> arguments,
                                                                  @NotNull PyCallableType callableType,
                                                                  @NotNull TypeEvalContext context)